boost-skill-cli 1.2.46__tar.gz → 1.2.48__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.2.46 → boost_skill_cli-1.2.48}/CLAUDE.md +15 -0
- {boost_skill_cli-1.2.46/boost_skill_cli.egg-info → boost_skill_cli-1.2.48}/PKG-INFO +10 -1
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/README.md +9 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/commands/discovery.py +26 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/commands/pkg.py +54 -2
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/commands/taps.py +8 -2
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/paths.py +10 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/registry.py +96 -6
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48/boost_skill_cli.egg-info}/PKG-INFO +10 -1
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_skill_cli.egg-info/SOURCES.txt +2 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/adapters.html +1 -1
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/carousel.html +1 -1
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/chat.html +1 -1
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/commands.html +5 -4
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/demo.html +1 -1
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/design-roadmap.html +1 -1
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/eval.html +1 -1
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/index.html +6 -6
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/langchain.html +1 -1
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/mcp-hub.html +1 -1
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap.html +1 -1
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/build_command_reference.py +1 -1
- boost_skill_cli-1.2.48/tests/functional/test_cli_tap_pins.py +204 -0
- boost_skill_cli-1.2.48/tests/unit/test_tap_pins.py +167 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/.gitattributes +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/.gitignore +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/.lycheeignore +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/.vale/styles/boost/AIWriting.yml +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/.vale.ini +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/DCO +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/GOVERNANCE.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/LICENSE +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/MAINTAINERS.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/MANIFEST.in +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/Makefile +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/SECURITY.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/SUPPORT.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/commands/quickstart.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/aihost.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/bmad.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/bootstrap.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/browse.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/builtin.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/catalogbundle.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/complete.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/hookhost.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/shards.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/data/rules/boost-first.mdc +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_langchain/__init__.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_langchain/_compat.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_langchain/graph.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_langchain/loader.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_langchain/py.typed +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_langchain/retriever.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/codecov.yml +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/bmad.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/code-review.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/commit-audit.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/demo.gif +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/demo.tape +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/dependencies.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/eval-latest.json +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/openssf-badge.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/BOOST-D27.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/ai-backend-fanout.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/boost-first-rule.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/branch-current-gate.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/cli-command-audit.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/gstack-tap-first-then-coexistence.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/install-path-disambiguation.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/openssf-silver.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/osps-baseline-levels.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/published-shards-have-no-consumer.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/relicence-apache-2.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/vex-openvex-feed.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/zip-strict-audit.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/security-design.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/semantic-search.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/verifying-releases.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/vex/meta.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/vex/openvex.json +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/evals/README.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/evals/__init__.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/evals/baseline.json +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/evals/metrics.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/evals/publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/examples/README.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/index.html +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/noxfile.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/pyproject.toml +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/add_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/build_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/build_vex.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/check_branch_current.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/check_dco.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/check_reproducible.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/eval_corpus.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/measure_registry.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/normalize_sdist.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/page_budget.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/publish_eval_json.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/publish_shards.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/scripts/serve_docs.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/setup.cfg +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/sonar-project.properties +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/style/README.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/style/boost.css +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/style/boost.js +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/style/demo.html +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/conftest.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/eval/taps-scale.txt +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/functional/test_bmad_all_hosts.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/functional/test_cli_catalog.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/functional/test_cli_hooks_gemini.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/functional/test_cli_pane_width.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/functional/test_cli_quickstart.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/functional/test_kind_conformance.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/langchain/conftest.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/langchain/test_graph.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/langchain/test_loader.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/langchain/test_retriever.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_action_pin_lockstep.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_aihost.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_bmad_core.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_boost_first_offer.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_bootstrap.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_branch_current.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_browse.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_builtin.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_catalogbundle.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_check_dco.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_check_reproducible.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_clean_internal_cache.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_compact.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_complete.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_complete_rc_block.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_content_identity.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_crash_redaction.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_dense_embed_dedupe.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_dense_quantized.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_dense_ready_order.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_dense_shard_real_schema.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_dense_status_cheap.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_embed_truncated_response.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_eval_corpus.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_eval_grading.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_gemini_agent_sanitize.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_gitutil_lfs.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_gitutil_sparse.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_hook_settings_hosts.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_hookhost.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_install_permission_error.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_langchain_packaging.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_link_ownership.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_measure_registry.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_normalize_sdist.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_page_budget.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_rag_fastpath.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_registry_control_chars.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_registry_parallel.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_rerank_cache.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_serve_docs.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_shards.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_shards_matrix.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_smoke_covers_every_command.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_store_materialize.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_sync_blocked_links.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_vex.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_visual_harness_flags.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_workflow_concurrency_groups.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_workflow_push_has_credentials.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/visual/package-lock.json +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.2.46 → boost_skill_cli-1.2.48}/tests/visual/visual_check.mjs +0 -0
|
@@ -435,6 +435,21 @@ of the three item kinds (see Non-obvious rules above); `core/store.py` owns
|
|
|
435
435
|
install, uninstall and sync — copying into the canonical store, symlinking into
|
|
436
436
|
each agent's skills dir, and updating the lock file.
|
|
437
437
|
|
|
438
|
+
- **A tap pin lives in `config.json`, and `boost update` is what makes it real.**
|
|
439
|
+
`boost tap --at <sha>` used to check a commit out and record nothing, so the
|
|
440
|
+
next `boost update` reset the clone to the default branch — measured on a
|
|
441
|
+
two-commit fixture: tapped at `fb61736`, updated, `6206d22`. That silently
|
|
442
|
+
invalidates any shard imported for the old commit (stale vectors, still
|
|
443
|
+
present, no error), which is also the reason **search must never refresh taps
|
|
444
|
+
in the background**: `_hint_stale_taps` reads one mtime
|
|
445
|
+
(`paths.tap_refresh_marker`, stamped by `registry.update`) and prints one
|
|
446
|
+
line rather than fetching. `registry.update` skips a pinned tap; `--force`
|
|
447
|
+
moves it *and* drops the pin, because deciding to move a tap is deciding to
|
|
448
|
+
stop holding it still. After any tap actually moves, `pkg._resync_vectors`
|
|
449
|
+
asks the manifest whether a shard exists for the new commit — importing it
|
|
450
|
+
costs a download instead of an hour of CPU — and says plainly when one does
|
|
451
|
+
not.
|
|
452
|
+
|
|
438
453
|
- **A published shard is only importable while three things match, and every
|
|
439
454
|
mismatch is silent if waved through.** `core/shards.py` fetches
|
|
440
455
|
`manifest.json` from a rolling `shards-latest` **prerelease** on this repo —
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: boost-skill-cli
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.48
|
|
4
4
|
Summary: boost — Homebrew for AI coding skills
|
|
5
5
|
Author: Jonathan Reyes
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -188,6 +188,15 @@ the difference between semantic search being available and being reachable.
|
|
|
188
188
|
|
|
189
189
|
Already tapped? `boost reindex --fetch-shards` does the download half alone,
|
|
190
190
|
and `boost reindex --dense` embeds locally whatever has no published shard.
|
|
191
|
+
|
|
192
|
+
Because vectors are keyed to a registry's commit, `quickstart` **pins** each tap
|
|
193
|
+
it fetches vectors for, and `boost update` skips a pinned tap rather than moving
|
|
194
|
+
it out from under them (`--force` moves it anyway and drops the pin). When a tap
|
|
195
|
+
does move, boost checks whether a newer shard exists for the new commit and
|
|
196
|
+
imports it; if none does, it says so instead of leaving stale vectors looking
|
|
197
|
+
fresh. `boost search` never refreshes taps behind your back — it prints one line
|
|
198
|
+
when they are more than two weeks old and leaves the fetching to
|
|
199
|
+
`boost update --taps-only`.
|
|
191
200
|
Every download is checked against the sha256 in the manifest and refused on a
|
|
192
201
|
mismatch, and shards for a registry that has moved since publication are
|
|
193
202
|
refused rather than merged — stale vectors would otherwise look fresh forever.
|
|
@@ -146,6 +146,15 @@ the difference between semantic search being available and being reachable.
|
|
|
146
146
|
|
|
147
147
|
Already tapped? `boost reindex --fetch-shards` does the download half alone,
|
|
148
148
|
and `boost reindex --dense` embeds locally whatever has no published shard.
|
|
149
|
+
|
|
150
|
+
Because vectors are keyed to a registry's commit, `quickstart` **pins** each tap
|
|
151
|
+
it fetches vectors for, and `boost update` skips a pinned tap rather than moving
|
|
152
|
+
it out from under them (`--force` moves it anyway and drops the pin). When a tap
|
|
153
|
+
does move, boost checks whether a newer shard exists for the new commit and
|
|
154
|
+
imports it; if none does, it says so instead of leaving stale vectors looking
|
|
155
|
+
fresh. `boost search` never refreshes taps behind your back — it prints one line
|
|
156
|
+
when they are more than two weeks old and leaves the fetching to
|
|
157
|
+
`boost update --taps-only`.
|
|
149
158
|
Every download is checked against the sha256 in the manifest and refused on a
|
|
150
159
|
mismatch, and shards for a registry that has moved since publication are
|
|
151
160
|
refused rather than merged — stale vectors would otherwise look fresh forever.
|
|
@@ -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.2.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 2,
|
|
21
|
+
__version__ = version = '1.2.48'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 2, 48)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -141,6 +141,9 @@ def cmd_search(argv):
|
|
|
141
141
|
"no matches for %r" % query,
|
|
142
142
|
"try `boost discover %s` to search all of GitHub" % query))
|
|
143
143
|
_hint_semantic_search(engine)
|
|
144
|
+
# Especially here: "no matches" is exactly the answer an out-of-date
|
|
145
|
+
# tap set produces, and the user has no other way to suspect it.
|
|
146
|
+
_hint_stale_taps()
|
|
144
147
|
return 0
|
|
145
148
|
# The CLI's long-standing wording for the BM25 engine differs from the label
|
|
146
149
|
# rag/eval use ("BM25 full-content"), and both are load-bearing: the latter
|
|
@@ -180,6 +183,7 @@ def cmd_search(argv):
|
|
|
180
183
|
if use_rag:
|
|
181
184
|
_note_stem_expansions(query)
|
|
182
185
|
_hint_semantic_search(engine)
|
|
186
|
+
_hint_stale_taps()
|
|
183
187
|
return 0
|
|
184
188
|
|
|
185
189
|
|
|
@@ -200,6 +204,28 @@ def _note_stem_expansions(query: str) -> None:
|
|
|
200
204
|
max(0, out.term_width() - 2)), "muted"))
|
|
201
205
|
|
|
202
206
|
|
|
207
|
+
def _hint_stale_taps() -> None:
|
|
208
|
+
"""Mention old tap clones. One `stat`, and never a network call.
|
|
209
|
+
|
|
210
|
+
Search deliberately does not refresh the taps themselves. A refresh is a
|
|
211
|
+
`git fetch` per tap — ~1.6 s each, minutes across a real install — so doing
|
|
212
|
+
it inline would turn a sub-second command into a wait, and doing it in the
|
|
213
|
+
background would mean unannounced network egress plus writes to the very
|
|
214
|
+
caches the search is reading. Worse, a tap's commit is load-bearing for
|
|
215
|
+
dense vectors, so a silent update would strand imported shards as stale.
|
|
216
|
+
|
|
217
|
+
So: say it, do not do it. The marker's mtime answers "how long ago" for the
|
|
218
|
+
price of one stat, and a machine that has never refreshed says nothing at
|
|
219
|
+
all rather than inventing an age.
|
|
220
|
+
"""
|
|
221
|
+
age = registry.refresh_age_days()
|
|
222
|
+
if age is None or age < registry.STALE_TAPS_DAYS:
|
|
223
|
+
return
|
|
224
|
+
out.info(out.role(
|
|
225
|
+
"taps last refreshed %d days ago — `boost update --taps-only`"
|
|
226
|
+
% int(age), "muted"))
|
|
227
|
+
|
|
228
|
+
|
|
203
229
|
def _hint_semantic_search(engine: str) -> None:
|
|
204
230
|
"""Say that a better engine exists, when BM25 answered alone.
|
|
205
231
|
|
|
@@ -31,6 +31,7 @@ from ..core import (
|
|
|
31
31
|
lockfile,
|
|
32
32
|
paths,
|
|
33
33
|
projectlock,
|
|
34
|
+
rag,
|
|
34
35
|
registry,
|
|
35
36
|
resolve,
|
|
36
37
|
scopes,
|
|
@@ -835,6 +836,48 @@ def _update_materialized(kind: str, installed: dict[str, dict], results) -> int:
|
|
|
835
836
|
return n
|
|
836
837
|
|
|
837
838
|
|
|
839
|
+
def _resync_vectors(moved: list[str]) -> None:
|
|
840
|
+
"""Keep prebuilt vectors honest after the taps underneath them move.
|
|
841
|
+
|
|
842
|
+
A tap's commit is load-bearing for dense search: `dense.build` marks a tap
|
|
843
|
+
"reused" per commit and `import_shard` refuses a shard built for another
|
|
844
|
+
one. So an update that moves a tap leaves its vectors stale *but present* —
|
|
845
|
+
the failure mode that looks like nothing at all, and the reason auto-
|
|
846
|
+
updating taps in the background would quietly undo a shard import.
|
|
847
|
+
|
|
848
|
+
Two outcomes are worth the network: a newer shard exists for the commit the
|
|
849
|
+
tap just moved to, in which case importing it costs a download instead of
|
|
850
|
+
an hour of CPU; or one does not, in which case the honest thing is to say
|
|
851
|
+
the vectors are now stale and name the command that rebuilds them.
|
|
852
|
+
"""
|
|
853
|
+
if not moved:
|
|
854
|
+
return
|
|
855
|
+
from ..core import dense, shards
|
|
856
|
+
if not dense.ready():
|
|
857
|
+
return # nothing embedded here to invalidate
|
|
858
|
+
try:
|
|
859
|
+
manifest = shards.fetch_manifest()
|
|
860
|
+
except BoostError:
|
|
861
|
+
# Offline, or no manifest published. The vectors are still stale, and
|
|
862
|
+
# saying so without the remedy we could not check for is enough.
|
|
863
|
+
out.info(out.role("prebuilt vectors for %d refreshed tap(s) are now "
|
|
864
|
+
"stale — `boost reindex --dense` rebuilds them"
|
|
865
|
+
% len(moved), "muted"))
|
|
866
|
+
return
|
|
867
|
+
commits = rag._tap_commits()
|
|
868
|
+
by_name = {t.name: commits.get(t.safe_name, "")
|
|
869
|
+
for t in registry.list_taps() if t.name in moved}
|
|
870
|
+
got = [r for r in shards.sync(list(by_name), by_name, manifest=manifest)
|
|
871
|
+
if r["status"] == "imported"]
|
|
872
|
+
if got:
|
|
873
|
+
out.ok("re-imported prebuilt vectors for %d tap(s)" % len(got))
|
|
874
|
+
left = len(moved) - len(got)
|
|
875
|
+
if left:
|
|
876
|
+
out.info(out.role("%d refreshed tap(s) have no matching shard yet — "
|
|
877
|
+
"their vectors are stale until "
|
|
878
|
+
"`boost reindex --dense`" % left, "muted"))
|
|
879
|
+
|
|
880
|
+
|
|
838
881
|
def cmd_update(argv: list[str]) -> int:
|
|
839
882
|
ap = cliparse.parser(prog="boost update",
|
|
840
883
|
description="Sync taps or update installed skills")
|
|
@@ -849,14 +892,23 @@ def cmd_update(argv: list[str]) -> int:
|
|
|
849
892
|
# sys.argv, so this makes the printed advice true rather than adding a path.
|
|
850
893
|
ap.add_argument("-y", "--yes", action="store_true",
|
|
851
894
|
help="skip the confirmation prompt")
|
|
895
|
+
ap.add_argument("--force", action="store_true",
|
|
896
|
+
help="move pinned taps too, clearing their pin")
|
|
852
897
|
args = ap.parse_args(argv)
|
|
853
|
-
results, failures = registry.update(args.tap or None)
|
|
898
|
+
results, failures = registry.update(args.tap or None, force=args.force)
|
|
854
899
|
if not results and not failures:
|
|
855
900
|
out.info("no taps configured — start with `boost tap --defaults`")
|
|
856
901
|
return 0
|
|
902
|
+
moved = []
|
|
857
903
|
for tname, summary in results.items():
|
|
858
|
-
|
|
904
|
+
if "skipped" not in summary:
|
|
905
|
+
catalog.rebuild_tap(registry.get(tname))
|
|
906
|
+
# "abc1234 → def5678" is a tap whose tree changed; "already up to date"
|
|
907
|
+
# and "pinned at ..." are not. Only the first invalidates vectors.
|
|
908
|
+
if "→" in summary:
|
|
909
|
+
moved.append(tname)
|
|
859
910
|
out.ok("%s: %s" % (tname, summary))
|
|
911
|
+
_resync_vectors(moved)
|
|
860
912
|
# Report the dead ones by name, after the successes, so a broken upstream
|
|
861
913
|
# reads as one line of bad news rather than as the whole command failing.
|
|
862
914
|
for tname, err in failures.items():
|
|
@@ -226,7 +226,8 @@ def cmd_taps(argv) -> int:
|
|
|
226
226
|
skills = catalog.load_tap(tap)
|
|
227
227
|
total += len(skills)
|
|
228
228
|
taps.append({"name": tap.name, "url": tap.url, "curated": tap.curated,
|
|
229
|
-
"skills": len(skills), "updated": _tap_updated(tap)
|
|
229
|
+
"skills": len(skills), "updated": _tap_updated(tap),
|
|
230
|
+
"pin": tap.pin})
|
|
230
231
|
if args.json:
|
|
231
232
|
print(json.dumps(taps, indent=2))
|
|
232
233
|
return 0
|
|
@@ -234,7 +235,12 @@ def cmd_taps(argv) -> int:
|
|
|
234
235
|
out.info("no taps configured")
|
|
235
236
|
out.info(out.role("add the recommended registries with `boost tap --defaults`", "muted"))
|
|
236
237
|
return 0
|
|
237
|
-
|
|
238
|
+
# A pinned tap reads as its commit rather than its date: the date of a
|
|
239
|
+
# clone held still is not what the user needs to know about it, and a tap
|
|
240
|
+
# that `boost update` deliberately skips should say why on the line the
|
|
241
|
+
# user is already reading.
|
|
242
|
+
rows = [(t["name"], str(t["skills"]),
|
|
243
|
+
"@%s" % str(t["pin"])[:7] if t["pin"] else t["updated"],
|
|
238
244
|
"★" if t["curated"] else "", out.role(_tilde(t["url"]), "muted"))
|
|
239
245
|
for t in taps]
|
|
240
246
|
out.table(rows, headers=("NAME", "SKILLS", "UPDATED", "", "URL"))
|
|
@@ -103,6 +103,16 @@ def state_dir() -> Path:
|
|
|
103
103
|
return boost_home() / "state"
|
|
104
104
|
|
|
105
105
|
|
|
106
|
+
def tap_refresh_marker() -> Path:
|
|
107
|
+
"""File whose mtime records when the taps were last refreshed.
|
|
108
|
+
|
|
109
|
+
An mtime rather than a JSON field: the only question asked of it is "how
|
|
110
|
+
long ago", on the search path, where one `stat` is affordable and parsing
|
|
111
|
+
anything is not.
|
|
112
|
+
"""
|
|
113
|
+
return state_dir() / "last-tap-refresh"
|
|
114
|
+
|
|
115
|
+
|
|
106
116
|
def snapshots_dir() -> Path:
|
|
107
117
|
"""Return the directory for ``snap-*`` store snapshot tarballs."""
|
|
108
118
|
return state_dir() / "snapshots"
|
|
@@ -5,6 +5,7 @@ from __future__ import annotations
|
|
|
5
5
|
|
|
6
6
|
import difflib
|
|
7
7
|
import os
|
|
8
|
+
import time
|
|
8
9
|
from concurrent.futures import ThreadPoolExecutor
|
|
9
10
|
from contextlib import suppress
|
|
10
11
|
from dataclasses import dataclass
|
|
@@ -20,6 +21,12 @@ class Tap:
|
|
|
20
21
|
name: str # "anthropics/skills" or a short alias
|
|
21
22
|
url: str # https URL or local path
|
|
22
23
|
curated: bool = False
|
|
24
|
+
#: A 40-character commit this tap is held at, or "" for "track the default
|
|
25
|
+
#: branch". A pin is durable *because it is recorded here*: `tap --at`
|
|
26
|
+
#: checked a commit out and nothing remembered, so the next `boost update`
|
|
27
|
+
#: moved the clone to HEAD — silently invalidating any prebuilt vectors
|
|
28
|
+
#: imported for that commit, which is the whole reason the pin exists.
|
|
29
|
+
pin: str = ""
|
|
23
30
|
|
|
24
31
|
@property
|
|
25
32
|
def safe_name(self) -> str:
|
|
@@ -131,7 +138,8 @@ def list_taps() -> list[Tap]:
|
|
|
131
138
|
taps = config.get("taps", []) or []
|
|
132
139
|
if not isinstance(taps, list):
|
|
133
140
|
return []
|
|
134
|
-
return [Tap(name=t["name"], url=t.get("url", ""),
|
|
141
|
+
return [Tap(name=t["name"], url=t.get("url", ""),
|
|
142
|
+
curated=bool(t.get("curated")), pin=str(t.get("pin") or ""))
|
|
135
143
|
for t in taps if isinstance(t, dict) and t.get("name")]
|
|
136
144
|
|
|
137
145
|
|
|
@@ -203,9 +211,12 @@ def add(spec: str, curated: bool = False, at: str | None = None) -> Tap:
|
|
|
203
211
|
hint="add its key with `boost trust add <name> <key>`, "
|
|
204
212
|
"or relax `boost policy set require_signed_taps false`")
|
|
205
213
|
cfg = config.load()
|
|
206
|
-
|
|
207
|
-
|
|
214
|
+
row = {"name": name, "url": url, "curated": curated}
|
|
215
|
+
if at:
|
|
216
|
+
row["pin"] = at
|
|
217
|
+
cfg.setdefault("taps", []).append(row)
|
|
208
218
|
config.save(cfg)
|
|
219
|
+
tap.pin = at or ""
|
|
209
220
|
return tap
|
|
210
221
|
|
|
211
222
|
|
|
@@ -336,8 +347,12 @@ def add_many(specs: list[str], curated: bool = False,
|
|
|
336
347
|
cfg = config.load()
|
|
337
348
|
rows = cfg.setdefault("taps", [])
|
|
338
349
|
for r in fresh:
|
|
339
|
-
|
|
340
|
-
|
|
350
|
+
row = {"name": r["name"], "url": r["url"], "curated": curated}
|
|
351
|
+
pin = pins.get(r["name"])
|
|
352
|
+
if pin:
|
|
353
|
+
row["pin"] = pin
|
|
354
|
+
r["tap"].pin = pin
|
|
355
|
+
rows.append(row)
|
|
341
356
|
config.save(cfg)
|
|
342
357
|
# First occurrence, not last: a dict comprehension over `specs` keeps the
|
|
343
358
|
# LAST index for a repeated spec, which pushed the duplicate — and so its
|
|
@@ -352,6 +367,58 @@ def add_many(specs: list[str], curated: bool = False,
|
|
|
352
367
|
return results
|
|
353
368
|
|
|
354
369
|
|
|
370
|
+
#: How long a tap set may go unrefreshed before `boost search` mentions it.
|
|
371
|
+
#: Two weeks rather than days: registries move slowly, and a hint that fires
|
|
372
|
+
#: every other search is one users learn to read past.
|
|
373
|
+
STALE_TAPS_DAYS = 14
|
|
374
|
+
|
|
375
|
+
|
|
376
|
+
def mark_refreshed() -> None:
|
|
377
|
+
"""Stamp "the taps were refreshed just now"; never fails a refresh."""
|
|
378
|
+
with suppress(OSError):
|
|
379
|
+
paths.ensure_dirs()
|
|
380
|
+
paths.tap_refresh_marker().write_text("", encoding="utf-8")
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
def refresh_age_days() -> float | None:
|
|
384
|
+
"""Days since the last tap refresh, or None when nothing has recorded one.
|
|
385
|
+
|
|
386
|
+
None is not zero and not infinity: on a machine that has never run
|
|
387
|
+
`boost update` there is nothing to report, and inventing an age would make
|
|
388
|
+
every fresh install nag about staleness on its first search.
|
|
389
|
+
"""
|
|
390
|
+
marker = paths.tap_refresh_marker()
|
|
391
|
+
try:
|
|
392
|
+
age = time.time() - marker.stat().st_mtime
|
|
393
|
+
except OSError:
|
|
394
|
+
return None
|
|
395
|
+
return max(0.0, age / 86400.0)
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
def pin(name: str, commit: str) -> Tap:
|
|
399
|
+
"""Record `commit` as the tap's pin, so `update` leaves it alone."""
|
|
400
|
+
tap = get(name)
|
|
401
|
+
cfg = config.load()
|
|
402
|
+
for row in cfg.get("taps", []) or []:
|
|
403
|
+
if isinstance(row, dict) and row.get("name") == tap.name:
|
|
404
|
+
row["pin"] = commit
|
|
405
|
+
config.save(cfg)
|
|
406
|
+
tap.pin = commit
|
|
407
|
+
return tap
|
|
408
|
+
|
|
409
|
+
|
|
410
|
+
def unpin(name: str) -> Tap:
|
|
411
|
+
"""Drop a tap's pin so it tracks its default branch again."""
|
|
412
|
+
tap = get(name)
|
|
413
|
+
cfg = config.load()
|
|
414
|
+
for row in cfg.get("taps", []) or []:
|
|
415
|
+
if isinstance(row, dict) and row.get("name") == tap.name:
|
|
416
|
+
row.pop("pin", None)
|
|
417
|
+
config.save(cfg)
|
|
418
|
+
tap.pin = ""
|
|
419
|
+
return tap
|
|
420
|
+
|
|
421
|
+
|
|
355
422
|
def remove(name: str) -> Tap:
|
|
356
423
|
"""Deregister a tap and delete its clone and cache file.
|
|
357
424
|
|
|
@@ -374,9 +441,14 @@ def remove(name: str) -> Tap:
|
|
|
374
441
|
WHEEL_SCHEME = "builtin:"
|
|
375
442
|
|
|
376
443
|
|
|
377
|
-
def update(name: str | None = None
|
|
444
|
+
def update(name: str | None = None,
|
|
445
|
+
force: bool = False) -> tuple[dict, dict]:
|
|
378
446
|
"""git-pull one tap (or all). Returns ``({name: summary}, {name: error})``.
|
|
379
447
|
|
|
448
|
+
**A pinned tap is skipped** unless ``force``, which also clears the pin —
|
|
449
|
+
an update that silently moved a pinned clone is what made `tap --at` a
|
|
450
|
+
suggestion rather than a guarantee.
|
|
451
|
+
|
|
380
452
|
**A named tap still raises.** ``boost update sometap`` is a request about
|
|
381
453
|
that one tap, so its failure is the answer to the question asked.
|
|
382
454
|
|
|
@@ -395,6 +467,14 @@ def update(name: str | None = None) -> tuple[dict, dict]:
|
|
|
395
467
|
results: dict = {}
|
|
396
468
|
failures: dict = {}
|
|
397
469
|
for tap in targets:
|
|
470
|
+
if tap.pin and not force:
|
|
471
|
+
# A pinned tap is held at one commit on purpose: prebuilt vectors
|
|
472
|
+
# are keyed to it, and moving the clone would make them stale while
|
|
473
|
+
# still present — the failure that looks like nothing at all. Not
|
|
474
|
+
# an error, because "update everything" over 400 taps should not
|
|
475
|
+
# fail because three are pinned.
|
|
476
|
+
results[tap.name] = "pinned at %s (skipped)" % tap.pin[:7]
|
|
477
|
+
continue
|
|
398
478
|
try:
|
|
399
479
|
if tap.url.startswith(WHEEL_SCHEME):
|
|
400
480
|
# boost's own tap arrives with the wheel, so there is no remote
|
|
@@ -414,6 +494,11 @@ def update(name: str | None = None) -> tuple[dict, dict]:
|
|
|
414
494
|
results[tap.name] = "cloned"
|
|
415
495
|
else:
|
|
416
496
|
results[tap.name] = gitutil.pull(tap.path)
|
|
497
|
+
if tap.pin:
|
|
498
|
+
# `--force` is a decision to stop holding this tap still,
|
|
499
|
+
# so the pin goes with the move rather than silently
|
|
500
|
+
# re-applying on the next run.
|
|
501
|
+
unpin(tap.name)
|
|
417
502
|
except BoostError as err:
|
|
418
503
|
if name:
|
|
419
504
|
raise
|
|
@@ -421,4 +506,9 @@ def update(name: str | None = None) -> tuple[dict, dict]:
|
|
|
421
506
|
# says; git's own first line already carries the URL or path. See
|
|
422
507
|
# gitutil._git_error for why that line is now the one we show.
|
|
423
508
|
failures[tap.name] = err.message
|
|
509
|
+
if results:
|
|
510
|
+
# Stamped on any successful sweep, including one where every tap was
|
|
511
|
+
# already current: "refreshed" is about having asked, not about having
|
|
512
|
+
# found something.
|
|
513
|
+
mark_refreshed()
|
|
424
514
|
return results, failures
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: boost-skill-cli
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.48
|
|
4
4
|
Summary: boost — Homebrew for AI coding skills
|
|
5
5
|
Author: Jonathan Reyes
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -188,6 +188,15 @@ the difference between semantic search being available and being reachable.
|
|
|
188
188
|
|
|
189
189
|
Already tapped? `boost reindex --fetch-shards` does the download half alone,
|
|
190
190
|
and `boost reindex --dense` embeds locally whatever has no published shard.
|
|
191
|
+
|
|
192
|
+
Because vectors are keyed to a registry's commit, `quickstart` **pins** each tap
|
|
193
|
+
it fetches vectors for, and `boost update` skips a pinned tap rather than moving
|
|
194
|
+
it out from under them (`--force` moves it anyway and drops the pin). When a tap
|
|
195
|
+
does move, boost checks whether a newer shard exists for the new commit and
|
|
196
|
+
imports it; if none does, it says so instead of leaving stale vectors looking
|
|
197
|
+
fresh. `boost search` never refreshes taps behind your back — it prints one line
|
|
198
|
+
when they are more than two weeks old and leaves the fetching to
|
|
199
|
+
`boost update --taps-only`.
|
|
191
200
|
Every download is checked against the sha256 in the manifest and refused on a
|
|
192
201
|
mismatch, and shards for a registry that has moved since publication are
|
|
193
202
|
refused rather than merged — stale vectors would otherwise look fresh forever.
|
|
@@ -599,6 +599,7 @@ tests/functional/test_cli_pane_width.py
|
|
|
599
599
|
tests/functional/test_cli_pkg.py
|
|
600
600
|
tests/functional/test_cli_quality.py
|
|
601
601
|
tests/functional/test_cli_quickstart.py
|
|
602
|
+
tests/functional/test_cli_tap_pins.py
|
|
602
603
|
tests/functional/test_cli_taps.py
|
|
603
604
|
tests/functional/test_cli_team.py
|
|
604
605
|
tests/functional/test_everyday_loop.py
|
|
@@ -786,6 +787,7 @@ tests/unit/test_store.py
|
|
|
786
787
|
tests/unit/test_store_materialize.py
|
|
787
788
|
tests/unit/test_sync_blocked_links.py
|
|
788
789
|
tests/unit/test_sync_repairs_gutted_skill.py
|
|
790
|
+
tests/unit/test_tap_pins.py
|
|
789
791
|
tests/unit/test_token_parity.py
|
|
790
792
|
tests/unit/test_toolchain_lock.py
|
|
791
793
|
tests/unit/test_trustaudit.py
|
|
@@ -353,7 +353,7 @@ python3 -m venv /tmp/crew && /tmp/crew/bin/pip install <span class="s">"
|
|
|
353
353
|
|
|
354
354
|
<footer>
|
|
355
355
|
<div class="wrap">
|
|
356
|
-
<p class="foot-brand"><b>boost</b> — a package manager for AI
|
|
356
|
+
<p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
|
|
357
357
|
<p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
|
|
358
358
|
<nav class="foot-links" aria-label="Documentation">
|
|
359
359
|
<a href="index.html">Guide</a>
|
|
@@ -387,7 +387,7 @@
|
|
|
387
387
|
|
|
388
388
|
<footer>
|
|
389
389
|
<div class="wrap">
|
|
390
|
-
<p class="foot-brand"><b>boost</b> — a package manager for AI
|
|
390
|
+
<p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
|
|
391
391
|
<p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
|
|
392
392
|
<nav class="foot-links" aria-label="Documentation">
|
|
393
393
|
<a href="index.html">Guide</a>
|
|
@@ -198,7 +198,7 @@ boost chat -k 3 --no-sources "review my diff"</pre>
|
|
|
198
198
|
|
|
199
199
|
<footer>
|
|
200
200
|
<div class="wrap">
|
|
201
|
-
<p class="foot-brand"><b>boost</b> — a package manager for AI
|
|
201
|
+
<p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
|
|
202
202
|
<p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
|
|
203
203
|
<nav class="foot-links" aria-label="Documentation">
|
|
204
204
|
<a href="index.html">Guide</a>
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
<a class="cmd-link" href="#cmd-install" data-search="install install a skill from a tap registry --force --path p --agent a --scope {user,project} --local --global --dry-run --no-deps --no-mcp name">install</a>
|
|
105
105
|
<a class="cmd-link" href="#cmd-uninstall" data-search="uninstall remove an installed skill, rule, workflow, or config --local -y, --yes name">uninstall</a>
|
|
106
106
|
<a class="cmd-link" href="#cmd-sync" data-search="sync reconcile installed skills & symlinks against the lock file --diff --prune --json">sync</a>
|
|
107
|
-
<a class="cmd-link" href="#cmd-update" data-search="update sync taps or update installed skills --taps-only -y, --yes tap">update</a>
|
|
107
|
+
<a class="cmd-link" href="#cmd-update" data-search="update sync taps or update installed skills --taps-only -y, --yes --force tap">update</a>
|
|
108
108
|
<a class="cmd-link" href="#cmd-reinstall" data-search="reinstall reinstall a skill or all skills (force) reinstall an installed skill, rule or workflow (force) --all name">reinstall</a>
|
|
109
109
|
<a class="cmd-link" href="#cmd-bundle" data-search="bundle export/install skill sets via a boostfile {dump,install} file">bundle</a>
|
|
110
110
|
<a class="cmd-link" href="#cmd-import" data-search="import import skills from a github url or local path --name n --all --agent a url_or_path">import</a>
|
|
@@ -257,10 +257,10 @@
|
|
|
257
257
|
<div class="arg"><code>--json</code><span>machine-readable output</span></div>
|
|
258
258
|
</div>
|
|
259
259
|
</section>
|
|
260
|
-
<section class="cmd" id="cmd-update" data-search="update sync taps or update installed skills --taps-only -y, --yes tap">
|
|
260
|
+
<section class="cmd" id="cmd-update" data-search="update sync taps or update installed skills --taps-only -y, --yes --force tap">
|
|
261
261
|
<h3><span class="cname">update</span><span class="gtag">pkg</span></h3>
|
|
262
262
|
<p class="summary">Sync taps or update installed skills</p>
|
|
263
|
-
<pre class="syn">boost update [--taps-only] [--yes] [TAP]</pre>
|
|
263
|
+
<pre class="syn">boost update [--taps-only] [--yes] [--force] [TAP]</pre>
|
|
264
264
|
<div class="args-h">Arguments</div>
|
|
265
265
|
<div class="args">
|
|
266
266
|
<div class="arg"><code>TAP</code><span>refresh only this tap</span></div>
|
|
@@ -269,6 +269,7 @@
|
|
|
269
269
|
<div class="args">
|
|
270
270
|
<div class="arg"><code>--taps-only</code><span>refresh tap clones & catalogs without touching skills</span></div>
|
|
271
271
|
<div class="arg"><code>-y, --yes</code><span>skip the confirmation prompt</span></div>
|
|
272
|
+
<div class="arg"><code>--force</code><span>move pinned taps too, clearing their pin</span></div>
|
|
272
273
|
</div>
|
|
273
274
|
</section>
|
|
274
275
|
<section class="cmd" id="cmd-reinstall" data-search="reinstall reinstall a skill or all skills (force) reinstall an installed skill, rule or workflow (force) --all name">
|
|
@@ -1254,7 +1255,7 @@
|
|
|
1254
1255
|
</div>
|
|
1255
1256
|
|
|
1256
1257
|
<footer>
|
|
1257
|
-
<p class="foot-brand"><b>boost</b> — a package manager for AI
|
|
1258
|
+
<p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
|
|
1258
1259
|
<p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
|
|
1259
1260
|
<nav class="foot-links" aria-label="Documentation">
|
|
1260
1261
|
<a href="index.html">Guide</a>
|
|
@@ -266,7 +266,7 @@
|
|
|
266
266
|
|
|
267
267
|
<footer>
|
|
268
268
|
<div class="wrap">
|
|
269
|
-
<p class="foot-brand"><b>boost</b> — a package manager for AI
|
|
269
|
+
<p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
|
|
270
270
|
<p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
|
|
271
271
|
<nav class="foot-links" aria-label="Documentation">
|
|
272
272
|
<a href="index.html">Guide</a>
|
|
@@ -578,7 +578,7 @@ hidden hot-path cost hiding behind the one this card measured.</p>
|
|
|
578
578
|
|
|
579
579
|
<footer>
|
|
580
580
|
<div class="wrap">
|
|
581
|
-
<p class="foot-brand"><b>boost</b> — a package manager for AI
|
|
581
|
+
<p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
|
|
582
582
|
<p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.9+ and <code>git</code></p>
|
|
583
583
|
<nav class="foot-links" aria-label="Documentation">
|
|
584
584
|
<a href="index.html">Guide</a>
|
|
@@ -578,7 +578,7 @@
|
|
|
578
578
|
|
|
579
579
|
<footer>
|
|
580
580
|
<div class="wrap">
|
|
581
|
-
<p class="foot-brand"><b>boost</b> — a package manager for AI
|
|
581
|
+
<p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
|
|
582
582
|
<p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
|
|
583
583
|
<nav class="foot-links" aria-label="Documentation">
|
|
584
584
|
<a href="index.html">Guide</a>
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
<meta charset="utf-8">
|
|
5
5
|
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Crect width='100' height='100' rx='20' fill='%2307080f'/%3E%3Ctext x='50' y='70' font-size='58' font-family='monospace' font-weight='bold' fill='%2340cbe3' text-anchor='middle'%3E%E2%9C%A6%3C/text%3E%3C/svg%3E">
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
7
|
-
<meta name="description" content="boost is a package manager for AI
|
|
8
|
-
<title>boost — Homebrew for AI
|
|
7
|
+
<meta name="description" content="boost is a package manager for AI skills — find, install, and govern the SKILL.md, rule, and workflow files that Claude Code, Cursor, and Windsurf run on, wired into every agent in one pass.">
|
|
8
|
+
<title>boost — Homebrew for AI skills</title>
|
|
9
9
|
<!-- Canonical Aurora tokens + primitives (single source of truth). The
|
|
10
10
|
inline block below carries ONLY page-specific layout, and wins ties
|
|
11
11
|
by coming later in the cascade. -->
|
|
@@ -561,10 +561,10 @@
|
|
|
561
561
|
<!-- ================= HERO ================= -->
|
|
562
562
|
<div class="wrap hero">
|
|
563
563
|
<span class="badge">AI Skill Package Manager · on PyPI</span>
|
|
564
|
-
<h1><span class="grad">Homebrew</span> for AI
|
|
564
|
+
<h1><span class="grad">Homebrew</span> for AI skills.</h1>
|
|
565
565
|
<p class="lede">
|
|
566
566
|
Boost is a command-line package manager that <b>searches, installs, and
|
|
567
|
-
manages AI
|
|
567
|
+
manages AI skills</b> from GitHub-hosted registries — then wires
|
|
568
568
|
them into <b>Claude Code, Windsurf, Cursor and Gemini CLI</b> at once. One command
|
|
569
569
|
replaces the copy-paste-and-pray dance of setting up AI agent skills by hand.
|
|
570
570
|
</p>
|
|
@@ -600,7 +600,7 @@
|
|
|
600
600
|
<div class="wrap">
|
|
601
601
|
<span class="eyebrow">The Concept</span>
|
|
602
602
|
<h2 class="sec-title">What is a “skill” — and why manage them?</h2>
|
|
603
|
-
<p class="sec-sub">AI
|
|
603
|
+
<p class="sec-sub">AI agents get better when you give them reusable knowledge.
|
|
604
604
|
Boost makes that knowledge installable.</p>
|
|
605
605
|
|
|
606
606
|
<div class="concept-grid">
|
|
@@ -1019,7 +1019,7 @@ pipx inject boost-skill-cli <span class="yv">"boost-skill-cli[rag]"</span>
|
|
|
1019
1019
|
offer it as "footer" in the landmark list. -->
|
|
1020
1020
|
<footer>
|
|
1021
1021
|
<div class="wrap">
|
|
1022
|
-
<p class="foot-brand"><b>boost</b> — a package manager for AI
|
|
1022
|
+
<p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
|
|
1023
1023
|
<p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
|
|
1024
1024
|
<nav class="foot-links" aria-label="Documentation">
|
|
1025
1025
|
<a aria-current="page" href="#top">Guide</a>
|
|
@@ -566,7 +566,7 @@ builder.<span class="fn">add_edge</span>(<span class="s">"skills"</span>, <span
|
|
|
566
566
|
|
|
567
567
|
<footer>
|
|
568
568
|
<div class="wrap">
|
|
569
|
-
<p class="foot-brand"><b>boost</b> — a package manager for AI
|
|
569
|
+
<p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
|
|
570
570
|
<p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
|
|
571
571
|
<nav class="foot-links" aria-label="Documentation">
|
|
572
572
|
<a href="index.html">Guide</a>
|
|
@@ -757,7 +757,7 @@ REGISTRY.register(
|
|
|
757
757
|
|
|
758
758
|
<footer>
|
|
759
759
|
<div class="wrap">
|
|
760
|
-
<p class="foot-brand"><b>boost</b> — a package manager for AI
|
|
760
|
+
<p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
|
|
761
761
|
<p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
|
|
762
762
|
<nav class="foot-links" aria-label="Documentation">
|
|
763
763
|
<a href="index.html">Guide</a>
|
|
@@ -12339,7 +12339,7 @@ bytes a structurally-correct JSON response never emits.</p>
|
|
|
12339
12339
|
|
|
12340
12340
|
<footer>
|
|
12341
12341
|
<div class="wrap">
|
|
12342
|
-
<p class="foot-brand"><b>boost</b> — a package manager for AI
|
|
12342
|
+
<p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
|
|
12343
12343
|
<p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.9+ and <code>git</code></p>
|
|
12344
12344
|
<nav class="foot-links" aria-label="Documentation">
|
|
12345
12345
|
<a href="index.html">Guide</a>
|