boost-skill-cli 1.0.253__tar.gz → 1.0.254__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.
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/PKG-INFO +1 -1
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/store.py +35 -2
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_skill_cli.egg-info/PKG-INFO +1 -1
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_store.py +120 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/.gitattributes +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/.gitignore +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/.lycheeignore +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/.vale.ini +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/CLAUDE.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/LICENSE +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/MANIFEST.in +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/Makefile +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/README.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/SECURITY.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_skill_cli.egg-info/SOURCES.txt +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/codecov.yml +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/adapters.html +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/carousel.html +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/commands.html +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/demo.gif +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/demo.tape +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/eval.html +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/index.html +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/docs/roadmap.html +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/examples/README.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/index.html +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/noxfile.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/pyproject.toml +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/setup.cfg +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/sonar-project.properties +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/style/README.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/style/boost.css +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/style/boost.js +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/style/demo.html +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/conftest.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/tests/visual/visual_check.mjs +0 -0
|
@@ -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.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 0,
|
|
21
|
+
__version__ = version = '1.0.254'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 254)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -96,6 +96,36 @@ def link_agents(name: str, only: Optional[List[str]] = None) -> InstallResult:
|
|
|
96
96
|
return res
|
|
97
97
|
|
|
98
98
|
|
|
99
|
+
def preserved_agent_scope(only_agents: Optional[List[str]],
|
|
100
|
+
existing: Optional[dict]) -> Optional[List[str]]:
|
|
101
|
+
"""Agent scope for a re-install: the caller's if given, else the lock's.
|
|
102
|
+
|
|
103
|
+
``boost install foo --agent claude-code`` records exactly that subset. But
|
|
104
|
+
``update`` and ``reinstall`` force-reinstall with ``only_agents=None``, and
|
|
105
|
+
``link_agents(None)`` fans out to *every* enabled agent — so a deliberate
|
|
106
|
+
narrowing silently became a full install, and the lock entry was rewritten
|
|
107
|
+
to match. Falling back to what the lock already records keeps the scope a
|
|
108
|
+
property of the install rather than of whichever agents happen to be
|
|
109
|
+
enabled the next time something updates.
|
|
110
|
+
|
|
111
|
+
An explicit ``only_agents`` still wins, so re-running install with
|
|
112
|
+
``--agent`` remains the way to widen the scope again. Skills record their
|
|
113
|
+
scope as ``agents``; rules and workflows record one ``materializations``
|
|
114
|
+
row per agent. An empty record means "nothing was linked", not "link
|
|
115
|
+
nothing", so it falls back to every enabled agent — exactly what
|
|
116
|
+
``link_agents`` does with ``None``.
|
|
117
|
+
"""
|
|
118
|
+
if only_agents is not None:
|
|
119
|
+
return only_agents
|
|
120
|
+
if not existing:
|
|
121
|
+
return None
|
|
122
|
+
recorded = existing.get("agents")
|
|
123
|
+
if recorded is None:
|
|
124
|
+
recorded = [m.get("agent")
|
|
125
|
+
for m in existing.get("materializations") or ()]
|
|
126
|
+
return [a for a in recorded if a] or None
|
|
127
|
+
|
|
128
|
+
|
|
99
129
|
def unlink_agents(name: str) -> List[str]:
|
|
100
130
|
"""Remove the ``name`` symlink from every enabled agent dir.
|
|
101
131
|
|
|
@@ -277,7 +307,7 @@ def install(entry: dict, force: bool = False,
|
|
|
277
307
|
paths.ensure_dirs()
|
|
278
308
|
_copy_skill(src, dest)
|
|
279
309
|
|
|
280
|
-
res = link_agents(name, only=only_agents)
|
|
310
|
+
res = link_agents(name, only=preserved_agent_scope(only_agents, existing))
|
|
281
311
|
res.upgraded = existing is not None
|
|
282
312
|
res.score, _ = util.score_skill(dest)
|
|
283
313
|
res.mcp_servers = declared_mcp_servers(dest)
|
|
@@ -337,6 +367,7 @@ def _install_project_skill(entry: dict, force: bool = False,
|
|
|
337
367
|
|
|
338
368
|
src = source_dir_for(entry)
|
|
339
369
|
_enforce_capability_policy(name, src / "SKILL.md")
|
|
370
|
+
only_agents = preserved_agent_scope(only_agents, existing)
|
|
340
371
|
targets = [(agent, scopes.skill_target(skills_dir, name, base=resolved_base))
|
|
341
372
|
for agent, skills_dir in agents.enabled_agents().items()
|
|
342
373
|
if not only_agents or agent in only_agents]
|
|
@@ -535,6 +566,7 @@ def _install_rule(entry: dict, force: bool = False,
|
|
|
535
566
|
if existing and not force:
|
|
536
567
|
raise BoostError("%s is already installed" % name,
|
|
537
568
|
hint="`boost reinstall %s` to force" % name)
|
|
569
|
+
only_agents = preserved_agent_scope(only_agents, existing)
|
|
538
570
|
|
|
539
571
|
violations = policy.check_install(entry, len(lockfile.installed()))
|
|
540
572
|
if violations:
|
|
@@ -641,6 +673,7 @@ def _install_workflow(entry: dict, force: bool = False,
|
|
|
641
673
|
if existing and not force:
|
|
642
674
|
raise BoostError("%s is already installed" % name,
|
|
643
675
|
hint="`boost reinstall %s` to force" % name)
|
|
676
|
+
only_agents = preserved_agent_scope(only_agents, existing)
|
|
644
677
|
|
|
645
678
|
violations = policy.check_install(entry, len(lockfile.installed()))
|
|
646
679
|
if violations:
|
|
@@ -756,7 +789,7 @@ def install_from_path(src_dir: Path, name: Optional[str] = None,
|
|
|
756
789
|
dest = skill_store_dir(name)
|
|
757
790
|
paths.ensure_dirs()
|
|
758
791
|
_copy_skill(src_dir, dest)
|
|
759
|
-
res = link_agents(name, only=only_agents)
|
|
792
|
+
res = link_agents(name, only=preserved_agent_scope(only_agents, existing))
|
|
760
793
|
res.score, _ = util.score_skill(dest)
|
|
761
794
|
res.mcp_servers = declared_mcp_servers(dest)
|
|
762
795
|
now = util.now_iso()
|
|
@@ -1407,3 +1407,123 @@ class TestCopySkillBackupCleanup:
|
|
|
1407
1407
|
assert (dest / "SKILL.md").read_text(encoding="utf-8") == "new\n"
|
|
1408
1408
|
assert not (dest / "gone.md").exists() # a swap, not a merge
|
|
1409
1409
|
assert [p.name for p in tmp_path.iterdir() if ".old" in p.name] == []
|
|
1410
|
+
|
|
1411
|
+
|
|
1412
|
+
class TestPreservedAgentScope:
|
|
1413
|
+
"""The rule: a re-install may not widen what an install narrowed.
|
|
1414
|
+
|
|
1415
|
+
``update``/``reinstall`` force-reinstall with ``only_agents=None``, which
|
|
1416
|
+
used to mean "link into every enabled agent" and rewrote the lock's agent
|
|
1417
|
+
list to match — so ``boost install foo --agent claude-code`` quietly became
|
|
1418
|
+
a full install the first time anything upstream changed.
|
|
1419
|
+
"""
|
|
1420
|
+
|
|
1421
|
+
def test_an_explicit_scope_always_wins(self):
|
|
1422
|
+
# Re-running install with --agent is how a narrowed skill is widened
|
|
1423
|
+
# again; the lock must not veto it.
|
|
1424
|
+
assert store.preserved_agent_scope(
|
|
1425
|
+
["cursor"], {"agents": ["claude-code"]}) == ["cursor"]
|
|
1426
|
+
assert store.preserved_agent_scope(
|
|
1427
|
+
["a", "b"], {"agents": ["a"]}) == ["a", "b"]
|
|
1428
|
+
|
|
1429
|
+
def test_an_explicit_empty_list_is_not_the_lock_s_scope(self):
|
|
1430
|
+
# [] is not None: the caller passed something, so it is theirs to mean.
|
|
1431
|
+
assert store.preserved_agent_scope([], {"agents": ["claude-code"]}) == []
|
|
1432
|
+
|
|
1433
|
+
def test_a_fresh_install_has_no_scope_to_preserve(self):
|
|
1434
|
+
assert store.preserved_agent_scope(None, None) is None
|
|
1435
|
+
assert store.preserved_agent_scope(None, {}) is None
|
|
1436
|
+
|
|
1437
|
+
def test_a_skill_s_scope_comes_from_its_agents_list(self):
|
|
1438
|
+
assert store.preserved_agent_scope(
|
|
1439
|
+
None, {"agents": ["claude-code"]}) == ["claude-code"]
|
|
1440
|
+
|
|
1441
|
+
def test_a_rule_s_scope_comes_from_its_materializations(self):
|
|
1442
|
+
existing = {"materializations": [{"agent": "cursor", "path": "/x"},
|
|
1443
|
+
{"agent": "windsurf", "path": "/y"}]}
|
|
1444
|
+
assert store.preserved_agent_scope(None, existing) == ["cursor", "windsurf"]
|
|
1445
|
+
|
|
1446
|
+
def test_a_materialization_row_with_no_agent_is_dropped(self):
|
|
1447
|
+
existing = {"materializations": [{"agent": "cursor"}, {"path": "/y"}]}
|
|
1448
|
+
assert store.preserved_agent_scope(None, existing) == ["cursor"]
|
|
1449
|
+
|
|
1450
|
+
def test_an_empty_record_means_every_agent_not_no_agent(self):
|
|
1451
|
+
# Nothing was linked last time (no agents enabled, or all conflicted).
|
|
1452
|
+
# Reading that as "link nowhere" would strand the skill forever.
|
|
1453
|
+
assert store.preserved_agent_scope(None, {"agents": []}) is None
|
|
1454
|
+
assert store.preserved_agent_scope(None, {"materializations": []}) is None
|
|
1455
|
+
assert store.preserved_agent_scope(
|
|
1456
|
+
None, {"materializations": [{"path": "/y"}]}) is None
|
|
1457
|
+
|
|
1458
|
+
def test_agents_is_preferred_over_materializations(self):
|
|
1459
|
+
# A project skill records both; `agents` is the complete list (it
|
|
1460
|
+
# carries forward agents an earlier filtered install left untouched).
|
|
1461
|
+
existing = {"agents": ["claude-code", "cursor"],
|
|
1462
|
+
"materializations": [{"agent": "cursor"}]}
|
|
1463
|
+
assert store.preserved_agent_scope(None, existing) == \
|
|
1464
|
+
["claude-code", "cursor"]
|
|
1465
|
+
|
|
1466
|
+
|
|
1467
|
+
class TestReinstallKeepsAgentScope:
|
|
1468
|
+
"""End-to-end of the same rule, through the real install paths."""
|
|
1469
|
+
|
|
1470
|
+
def test_a_forced_skill_reinstall_does_not_relink_everywhere(self, tap, entry):
|
|
1471
|
+
store.install(entry, only_agents=["claude-code"])
|
|
1472
|
+
res = store.install(entry, force=True) # what `update` does
|
|
1473
|
+
assert res.linked == ["claude-code"]
|
|
1474
|
+
assert lockfile.get_skill("brainstorming")["agents"] == ["claude-code"]
|
|
1475
|
+
assert _link("claude-code").is_symlink()
|
|
1476
|
+
assert not _link("windsurf").exists()
|
|
1477
|
+
assert not _link("cursor").exists()
|
|
1478
|
+
|
|
1479
|
+
def test_a_forced_reinstall_can_still_widen_on_request(self, tap, entry):
|
|
1480
|
+
store.install(entry, only_agents=["claude-code"])
|
|
1481
|
+
res = store.install(entry, force=True,
|
|
1482
|
+
only_agents=["claude-code", "cursor"])
|
|
1483
|
+
assert res.linked == ["claude-code", "cursor"]
|
|
1484
|
+
assert _link("cursor").is_symlink()
|
|
1485
|
+
assert not _link("windsurf").exists()
|
|
1486
|
+
|
|
1487
|
+
def test_an_unnarrowed_skill_still_reinstalls_everywhere(self, tap, entry):
|
|
1488
|
+
store.install(entry)
|
|
1489
|
+
res = store.install(entry, force=True)
|
|
1490
|
+
assert res.linked == ["claude-code", "windsurf", "cursor"]
|
|
1491
|
+
|
|
1492
|
+
def test_install_from_path_keeps_the_scope_too(self, tap, entry, tmp_path):
|
|
1493
|
+
# `boost reinstall` on a local skill goes through install_from_path.
|
|
1494
|
+
store.install(entry, only_agents=["cursor"])
|
|
1495
|
+
src = tmp_path / "brainstorming"
|
|
1496
|
+
src.mkdir()
|
|
1497
|
+
(src / "SKILL.md").write_text(
|
|
1498
|
+
"---\nname: brainstorming\nversion: 9.9.9\n---\nhi\n", encoding="utf-8")
|
|
1499
|
+
res = store.install_from_path(src, name="brainstorming", force=True)
|
|
1500
|
+
assert res.linked == ["cursor"]
|
|
1501
|
+
assert lockfile.get_skill("brainstorming")["agents"] == ["cursor"]
|
|
1502
|
+
assert not _link("claude-code").exists()
|
|
1503
|
+
|
|
1504
|
+
def test_a_forced_rule_reinstall_keeps_its_materializations(self, tap):
|
|
1505
|
+
rule = _rule_entry(tap)
|
|
1506
|
+
store.install(rule, only_agents=["cursor"])
|
|
1507
|
+
res = store.install(rule, force=True)
|
|
1508
|
+
assert res.linked == ["cursor"]
|
|
1509
|
+
assert [m["agent"] for m in
|
|
1510
|
+
lockfile.get_rule("team-conventions")["materializations"]] == ["cursor"]
|
|
1511
|
+
assert not (paths.home() / "CLAUDE.md").exists()
|
|
1512
|
+
assert not (paths.home() / ".windsurf" / "rules"
|
|
1513
|
+
/ "team-conventions.mdc").exists()
|
|
1514
|
+
|
|
1515
|
+
def test_a_forced_workflow_reinstall_keeps_its_drops(self, tap):
|
|
1516
|
+
wf = _workflow_entry(tap)
|
|
1517
|
+
store.install(wf, only_agents=["claude-code"])
|
|
1518
|
+
res = store.install(wf, force=True)
|
|
1519
|
+
assert res.linked == ["claude-code"]
|
|
1520
|
+
assert not (paths.home() / ".cursor" / "commands" / "ship-it.md").exists()
|
|
1521
|
+
|
|
1522
|
+
def test_a_forced_project_reinstall_keeps_its_agent_dirs(self, entry, tmp_path):
|
|
1523
|
+
repo = tmp_path / "proj"
|
|
1524
|
+
(repo / ".git").mkdir(parents=True)
|
|
1525
|
+
store.install(entry, scope="project", base=str(repo),
|
|
1526
|
+
only_agents=["cursor"])
|
|
1527
|
+
res = store.install(entry, scope="project", base=str(repo), force=True)
|
|
1528
|
+
assert res.linked == ["cursor"]
|
|
1529
|
+
assert not (repo / ".claude" / "skills" / "brainstorming").exists()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_skill_cli.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{boost_skill_cli-1.0.253 → boost_skill_cli-1.0.254}/boost_skill_cli.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|