boost-skill-cli 1.2.43__tar.gz → 1.2.45__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.43 → boost_skill_cli-1.2.45}/.vale/styles/config/vocabularies/boost/accept.txt +1 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/CLAUDE.md +21 -1
- {boost_skill_cli-1.2.43/boost_skill_cli.egg-info → boost_skill_cli-1.2.45}/PKG-INFO +19 -7
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/README.md +18 -6
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/cli.py +2 -1
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/commands/discovery.py +58 -0
- boost_skill_cli-1.2.45/boost_cli/commands/quickstart.py +149 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/commands/taps.py +8 -2
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/gitutil.py +38 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/registry.py +17 -1
- boost_skill_cli-1.2.45/boost_cli/core/shards.py +318 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45/boost_skill_cli.egg-info}/PKG-INFO +19 -7
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_skill_cli.egg-info/SOURCES.txt +7 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/carousel.html +1 -1
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/commands.html +21 -8
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/index.html +7 -6
- boost_skill_cli-1.2.45/docs/roadmap/items/gstack-tap-first-then-coexistence.md +82 -0
- boost_skill_cli-1.2.45/docs/roadmap/items/published-shards-have-no-consumer.md +54 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap.html +130 -1
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/semantic-search.md +68 -1
- boost_skill_cli-1.2.45/scripts/publish_shards.py +166 -0
- boost_skill_cli-1.2.45/tests/functional/test_cli_quickstart.py +142 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/functional/test_everyday_loop.py +1 -1
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/smoke.sh +1 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_errors_and_cli_table.py +8 -8
- boost_skill_cli-1.2.45/tests/unit/test_shards.py +293 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/.gitattributes +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/.gitignore +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/.lycheeignore +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/.vale/styles/boost/AIWriting.yml +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/.vale.ini +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/DCO +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/GOVERNANCE.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/LICENSE +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/MAINTAINERS.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/MANIFEST.in +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/Makefile +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/SECURITY.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/SUPPORT.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/aihost.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/bmad.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/bootstrap.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/browse.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/builtin.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/catalogbundle.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/complete.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/hookhost.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/data/rules/boost-first.mdc +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_langchain/__init__.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_langchain/_compat.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_langchain/graph.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_langchain/loader.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_langchain/py.typed +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_langchain/retriever.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/codecov.yml +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/adapters.html +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/bmad.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/chat.html +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/code-review.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/commit-audit.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/demo.gif +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/demo.html +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/demo.tape +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/dependencies.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/eval-latest.json +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/eval.html +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/langchain.html +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/openssf-badge.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/BOOST-D27.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/ai-backend-fanout.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/boost-first-rule.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/branch-current-gate.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/cli-command-audit.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/install-path-disambiguation.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/openssf-silver.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/osps-baseline-levels.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/relicence-apache-2.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/vex-openvex-feed.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/zip-strict-audit.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/security-design.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/verifying-releases.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/vex/meta.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/vex/openvex.json +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/evals/README.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/evals/__init__.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/evals/baseline.json +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/evals/metrics.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/evals/publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/examples/README.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/index.html +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/noxfile.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/pyproject.toml +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/add_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/build_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/build_vex.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/check_branch_current.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/check_dco.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/check_reproducible.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/eval_corpus.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/measure_registry.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/normalize_sdist.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/page_budget.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/publish_eval_json.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/scripts/serve_docs.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/setup.cfg +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/sonar-project.properties +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/style/README.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/style/boost.css +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/style/boost.js +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/style/demo.html +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/conftest.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/eval/taps-scale.txt +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/functional/test_bmad_all_hosts.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/functional/test_cli_catalog.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/functional/test_cli_hooks_gemini.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/functional/test_cli_pane_width.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/functional/test_kind_conformance.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/langchain/conftest.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/langchain/test_graph.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/langchain/test_loader.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/langchain/test_retriever.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_action_pin_lockstep.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_aihost.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_bmad_core.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_boost_first_offer.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_bootstrap.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_branch_current.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_browse.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_builtin.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_catalogbundle.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_check_dco.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_check_reproducible.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_clean_internal_cache.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_compact.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_complete.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_complete_rc_block.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_content_identity.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_crash_redaction.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_dense_embed_dedupe.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_dense_quantized.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_dense_ready_order.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_dense_shard_real_schema.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_dense_status_cheap.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_embed_truncated_response.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_eval_corpus.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_eval_grading.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_gemini_agent_sanitize.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_gitutil_lfs.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_gitutil_sparse.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_hook_settings_hosts.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_hookhost.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_install_permission_error.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_langchain_packaging.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_link_ownership.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_measure_registry.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_normalize_sdist.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_page_budget.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_rag_fastpath.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_registry_control_chars.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_rerank_cache.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_serve_docs.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_shards_matrix.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_smoke_covers_every_command.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_store_materialize.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_sync_blocked_links.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_vex.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_visual_harness_flags.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_workflow_concurrency_groups.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_workflow_push_has_credentials.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/visual/package-lock.json +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.2.43 → boost_skill_cli-1.2.45}/tests/visual/visual_check.mjs +0 -0
|
@@ -306,7 +306,7 @@ for both — edit items, run `build_roadmap.py`, never touch the HTML by hand.
|
|
|
306
306
|
## Architecture
|
|
307
307
|
|
|
308
308
|
**CLI dispatch.** `boost_cli/cli.py` holds `COMMANDS`, the single
|
|
309
|
-
source-of-truth list of `(name, group, module, summary)` for all
|
|
309
|
+
source-of-truth list of `(name, group, module, summary)` for all 81 commands.
|
|
310
310
|
Each command is implemented as `def cmd_<name_with_underscores>(argv) -> int`
|
|
311
311
|
inside `boost_cli/commands/<module>.py`, and `_dispatch` imports that module
|
|
312
312
|
lazily on invocation — so `boost --help` stays instant and command modules are
|
|
@@ -419,6 +419,26 @@ of the three item kinds (see Non-obvious rules above); `core/store.py` owns
|
|
|
419
419
|
install, uninstall and sync — copying into the canonical store, symlinking into
|
|
420
420
|
each agent's skills dir, and updating the lock file.
|
|
421
421
|
|
|
422
|
+
- **A published shard is only importable while three things match, and every
|
|
423
|
+
mismatch is silent if waved through.** `core/shards.py` fetches
|
|
424
|
+
`manifest.json` from a rolling `shards-latest` **prerelease** on this repo —
|
|
425
|
+
prerelease and `--latest=false` deliberately, so release-drafter (which
|
|
426
|
+
resolves the next version from published non-prereleases), the shields badge
|
|
427
|
+
in the README and setuptools-scm's `--match *[0-9]*` all keep ignoring it.
|
|
428
|
+
The manifest carries the embedding *space* once at the top, so
|
|
429
|
+
`shards.incompatible()` can refuse before downloading 129 MB; each row pins
|
|
430
|
+
the registry *commit*, checked in `shards.sync` and again in
|
|
431
|
+
`dense.import_shard`, because a stale shard makes `dense.build` mark that tap
|
|
432
|
+
"reused" forever; and each row's *sha256* is verified over the bytes written.
|
|
433
|
+
A shard URL off the manifest's own host is refused — a manifest names what
|
|
434
|
+
boost downloads, so it must not widen where the download goes. `boost tap
|
|
435
|
+
--at <sha>` exists for the commit rule: `boost quickstart` pins each registry
|
|
436
|
+
to the commit its vectors describe rather than tapping HEAD and hoping.
|
|
437
|
+
**Publish keyless vectors only** — a shard exported from a machine holding
|
|
438
|
+
`VOYAGE_API_KEY` is 1024-d `voyage-4` and can only be imported *or queried*
|
|
439
|
+
by another key-holder; `scripts/publish_shards.py manifest` refuses to
|
|
440
|
+
describe two spaces in one file.
|
|
441
|
+
|
|
422
442
|
**Search has two engines**, both in `core/`: `rag.py` is the always-on,
|
|
423
443
|
zero-dependency BM25 engine (full-content index, auto-builds on first
|
|
424
444
|
search — this is what the required `eval` gate floors at recall@k ≥ 0.78).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: boost-skill-cli
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.45
|
|
4
4
|
Summary: boost — Homebrew for AI coding skills
|
|
5
5
|
Author: Jonathan Reyes
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -58,8 +58,8 @@ Cursor and Gemini CLI in a single pass.
|
|
|
58
58
|
|
|
59
59
|
```bash
|
|
60
60
|
pipx install boost-skill-cli
|
|
61
|
-
boost
|
|
62
|
-
boost search tdd #
|
|
61
|
+
boost quickstart # taps the 7 starter registries, loads prebuilt vectors
|
|
62
|
+
boost search tdd # keyword + semantic, fused
|
|
63
63
|
boost install tdd-workflow # → every agent, version-pinned, one lock file
|
|
64
64
|
```
|
|
65
65
|
|
|
@@ -172,14 +172,26 @@ ln -s ~/.boost-src/boost ~/bin/boost # anywhere on PATH works
|
|
|
172
172
|
itself on your first search, so there is nothing to set up.
|
|
173
173
|
|
|
174
174
|
BM25 matches words, which fails when your query shares no vocabulary with the
|
|
175
|
-
skill you want. Semantic search fixes that
|
|
176
|
-
|
|
175
|
+
skill you want. Semantic search fixes that and needs no API key — only the
|
|
176
|
+
extra:
|
|
177
177
|
|
|
178
178
|
```bash
|
|
179
179
|
pipx inject boost-skill-cli "boost-skill-cli[rag]" # pip install "boost-skill-cli[rag]" if you used pip
|
|
180
|
-
boost
|
|
180
|
+
boost quickstart # downloads prebuilt vectors
|
|
181
181
|
```
|
|
182
182
|
|
|
183
|
+
`boost quickstart` is the fast path: it taps the starter registries **pinned to
|
|
184
|
+
the commits the published vectors were built from**, then downloads and imports
|
|
185
|
+
those vectors. Embedding is ~1.2 s/chunk on CPU — hours for a real corpus —
|
|
186
|
+
and importing the same rows takes 0.12 s, so the difference between the two is
|
|
187
|
+
the difference between semantic search being available and being reachable.
|
|
188
|
+
|
|
189
|
+
Already tapped? `boost reindex --fetch-shards` does the download half alone,
|
|
190
|
+
and `boost reindex --dense` embeds locally whatever has no published shard.
|
|
191
|
+
Every download is checked against the sha256 in the manifest and refused on a
|
|
192
|
+
mismatch, and shards for a registry that has moved since publication are
|
|
193
|
+
refused rather than merged — stale vectors would otherwise look fresh forever.
|
|
194
|
+
|
|
183
195
|
When both indexes exist boost fuses the rankings rather than choosing between
|
|
184
196
|
them. See [docs/semantic-search.md](docs/semantic-search.md) for the whole
|
|
185
197
|
setup, what it costs, and how to tell which engine is actually serving.
|
|
@@ -362,7 +374,7 @@ at least 95% alike, fold into one badged `×5`, with `^D` to show them again.
|
|
|
362
374
|
Identity is the description and never the name: `code-reviewer` appears 75 times
|
|
363
375
|
with 42 different descriptions, and those are 42 real skills.
|
|
364
376
|
|
|
365
|
-
##
|
|
377
|
+
## 81 commands, organized into 8 groups
|
|
366
378
|
|
|
367
379
|
`boost --help` prints the full grouped list. For every flag of every command see
|
|
368
380
|
[`docs/commands.html`](docs/commands.html); for a visual tour,
|
|
@@ -16,8 +16,8 @@ Cursor and Gemini CLI in a single pass.
|
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
18
|
pipx install boost-skill-cli
|
|
19
|
-
boost
|
|
20
|
-
boost search tdd #
|
|
19
|
+
boost quickstart # taps the 7 starter registries, loads prebuilt vectors
|
|
20
|
+
boost search tdd # keyword + semantic, fused
|
|
21
21
|
boost install tdd-workflow # → every agent, version-pinned, one lock file
|
|
22
22
|
```
|
|
23
23
|
|
|
@@ -130,14 +130,26 @@ ln -s ~/.boost-src/boost ~/bin/boost # anywhere on PATH works
|
|
|
130
130
|
itself on your first search, so there is nothing to set up.
|
|
131
131
|
|
|
132
132
|
BM25 matches words, which fails when your query shares no vocabulary with the
|
|
133
|
-
skill you want. Semantic search fixes that
|
|
134
|
-
|
|
133
|
+
skill you want. Semantic search fixes that and needs no API key — only the
|
|
134
|
+
extra:
|
|
135
135
|
|
|
136
136
|
```bash
|
|
137
137
|
pipx inject boost-skill-cli "boost-skill-cli[rag]" # pip install "boost-skill-cli[rag]" if you used pip
|
|
138
|
-
boost
|
|
138
|
+
boost quickstart # downloads prebuilt vectors
|
|
139
139
|
```
|
|
140
140
|
|
|
141
|
+
`boost quickstart` is the fast path: it taps the starter registries **pinned to
|
|
142
|
+
the commits the published vectors were built from**, then downloads and imports
|
|
143
|
+
those vectors. Embedding is ~1.2 s/chunk on CPU — hours for a real corpus —
|
|
144
|
+
and importing the same rows takes 0.12 s, so the difference between the two is
|
|
145
|
+
the difference between semantic search being available and being reachable.
|
|
146
|
+
|
|
147
|
+
Already tapped? `boost reindex --fetch-shards` does the download half alone,
|
|
148
|
+
and `boost reindex --dense` embeds locally whatever has no published shard.
|
|
149
|
+
Every download is checked against the sha256 in the manifest and refused on a
|
|
150
|
+
mismatch, and shards for a registry that has moved since publication are
|
|
151
|
+
refused rather than merged — stale vectors would otherwise look fresh forever.
|
|
152
|
+
|
|
141
153
|
When both indexes exist boost fuses the rankings rather than choosing between
|
|
142
154
|
them. See [docs/semantic-search.md](docs/semantic-search.md) for the whole
|
|
143
155
|
setup, what it costs, and how to tell which engine is actually serving.
|
|
@@ -320,7 +332,7 @@ at least 95% alike, fold into one badged `×5`, with `^D` to show them again.
|
|
|
320
332
|
Identity is the description and never the name: `code-reviewer` appears 75 times
|
|
321
333
|
with 42 different descriptions, and those are 42 real skills.
|
|
322
334
|
|
|
323
|
-
##
|
|
335
|
+
## 81 commands, organized into 8 groups
|
|
324
336
|
|
|
325
337
|
`boost --help` prints the full grouped list. For every flag of every command see
|
|
326
338
|
[`docs/commands.html`](docs/commands.html); for a visual tour,
|
|
@@ -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.45'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 2, 45)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Copyright the boost contributors.
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
"""boost CLI dispatcher —
|
|
3
|
+
"""boost CLI dispatcher — 81 commands across 8 groups.
|
|
4
4
|
|
|
5
5
|
Each command lives in boost_cli/commands/<module>.py as
|
|
6
6
|
def cmd_<name_with_underscores>(argv: list[str]) -> int
|
|
@@ -117,6 +117,7 @@ COMMANDS = [
|
|
|
117
117
|
("health", "chk", "quality", "Dashboard of skill-environment health"),
|
|
118
118
|
("trust", "chk", "quality", "Manage signing keys & verify tap provenance"),
|
|
119
119
|
# Configuration (13)
|
|
120
|
+
("quickstart", "cfg", "quickstart", "Tap the starter registries and load prebuilt vectors"),
|
|
120
121
|
("config", "cfg", "configuration", "Display or modify boost configuration"),
|
|
121
122
|
("clean", "cfg", "configuration", "Clear stale caches & broken symlinks"),
|
|
122
123
|
("compact", "cfg", "configuration", "Shrink tap clones to the files boost indexes"),
|
|
@@ -270,6 +270,59 @@ def _shard_io(args) -> int:
|
|
|
270
270
|
return 0
|
|
271
271
|
|
|
272
272
|
|
|
273
|
+
def _fetch_shards(args) -> int:
|
|
274
|
+
"""`--fetch-shards`: the published half of the keyless tier, on demand.
|
|
275
|
+
|
|
276
|
+
Separate from `boost quickstart` because the two answer different
|
|
277
|
+
questions. Quickstart sets a machine up; this refreshes vectors on one that
|
|
278
|
+
is already tapped, including taps quickstart never touches.
|
|
279
|
+
"""
|
|
280
|
+
from ..core import dense, shards
|
|
281
|
+
if not registry.list_taps():
|
|
282
|
+
raise BoostError("no taps configured — nothing to fetch",
|
|
283
|
+
hint="`boost quickstart` taps the defaults and fetches "
|
|
284
|
+
"their vectors in one pass")
|
|
285
|
+
manifest = shards.fetch_manifest()
|
|
286
|
+
why = shards.incompatible(manifest)
|
|
287
|
+
if why:
|
|
288
|
+
raise BoostError("published shards cannot serve this machine — %s" % why,
|
|
289
|
+
hint=dense.fix_hint(dense.status().get("reason", "")))
|
|
290
|
+
commits = rag._tap_commits()
|
|
291
|
+
by_name = {t.name: commits.get(t.safe_name, "") for t in registry.list_taps()}
|
|
292
|
+
results = shards.sync(list(by_name), by_name, manifest=manifest,
|
|
293
|
+
on_event=_shard_event)
|
|
294
|
+
if args.as_json:
|
|
295
|
+
print(json.dumps({"shards": results}, indent=2))
|
|
296
|
+
return 0
|
|
297
|
+
got = [r for r in results if r["status"] == "imported"]
|
|
298
|
+
total = sum(int(r.get("chunks") or 0) for r in got)
|
|
299
|
+
if got:
|
|
300
|
+
out.ok("imported %d shard(s), %s chunks — no embedding needed"
|
|
301
|
+
% (len(got), format(total, ",")))
|
|
302
|
+
else:
|
|
303
|
+
# Not a success line. Nothing landed, and saying "imported 0" with a
|
|
304
|
+
# tick reads as a job well done to the one user who most needs to know
|
|
305
|
+
# their vectors are still missing.
|
|
306
|
+
out.warn("no published vectors matched your taps")
|
|
307
|
+
missing = [r["tap"] for r in results if r["status"] != "imported"]
|
|
308
|
+
if missing:
|
|
309
|
+
out.info(out.role("%d tap(s) without usable vectors: %s"
|
|
310
|
+
% (len(missing), ", ".join(missing[:5])
|
|
311
|
+
+ (" …" if len(missing) > 5 else "")), "muted"))
|
|
312
|
+
out.info("embed those locally with `boost reindex --dense`")
|
|
313
|
+
return 0
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
def _shard_event(tap: str, status: str, detail: str) -> None:
|
|
317
|
+
"""Progress for one shard, quiet enough to run over forty taps."""
|
|
318
|
+
if status == "downloading":
|
|
319
|
+
out.info(out.role("fetching %s %s" % (tap, detail), "muted"))
|
|
320
|
+
elif status in ("failed", "refused"):
|
|
321
|
+
out.info(out.role("%s: %s%s" % (tap, status,
|
|
322
|
+
" (%s)" % detail if detail else ""),
|
|
323
|
+
"muted"))
|
|
324
|
+
|
|
325
|
+
|
|
273
326
|
def cmd_reindex(argv):
|
|
274
327
|
"""Build/refresh the full-content (RAG) search index over tapped items."""
|
|
275
328
|
p = cliparse.parser(
|
|
@@ -287,11 +340,16 @@ def cmd_reindex(argv):
|
|
|
287
340
|
help="merge a prebuilt vector shard, skipping the embed "
|
|
288
341
|
"cost; refused unless it matches this store's backend "
|
|
289
342
|
"and the tap's current commit")
|
|
343
|
+
p.add_argument("--fetch-shards", action="store_true",
|
|
344
|
+
help="download and import published vectors for every tap "
|
|
345
|
+
"that has them, instead of embedding locally")
|
|
290
346
|
p.add_argument("--json", action="store_true", dest="as_json",
|
|
291
347
|
help="machine-readable output")
|
|
292
348
|
args = p.parse_args(argv)
|
|
293
349
|
if args.export_shard or args.import_shard:
|
|
294
350
|
return _shard_io(args)
|
|
351
|
+
if args.fetch_shards:
|
|
352
|
+
return _fetch_shards(args)
|
|
295
353
|
if not registry.list_taps():
|
|
296
354
|
raise BoostError("no taps configured — nothing to index",
|
|
297
355
|
hint="add the recommended registries with `boost tap --defaults`")
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# Copyright the boost contributors.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
"""`boost quickstart` — one command from empty machine to working search.
|
|
4
|
+
|
|
5
|
+
WHY A COMMAND AND NOT A DOC. The setup a new user needs is four steps that each
|
|
6
|
+
fail quietly when skipped: tap something, build the BM25 index, install the
|
|
7
|
+
`rag` extra, and embed the catalogue. The last one is the wall — ~1.2 s/chunk on
|
|
8
|
+
CPU, hours for a corpus worth searching — and it is why the keyless semantic
|
|
9
|
+
tier was reachable in principle and not in practice. Published shards remove it,
|
|
10
|
+
but only if the tap sits at the commit its vectors were built from, so tapping
|
|
11
|
+
and fetching cannot be two commands a user is trusted to order correctly.
|
|
12
|
+
|
|
13
|
+
WHAT IT WILL NOT DO. It never embeds as a side effect. A user who runs a
|
|
14
|
+
"quickstart" and gets an unannounced multi-hour CPU job has been ambushed; the
|
|
15
|
+
taps without a published shard are named, with the one command that would embed
|
|
16
|
+
them, and left alone.
|
|
17
|
+
"""
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
from .. import cliparse, spin
|
|
21
|
+
from ..core import (
|
|
22
|
+
catalog,
|
|
23
|
+
complete,
|
|
24
|
+
config,
|
|
25
|
+
dense,
|
|
26
|
+
journal,
|
|
27
|
+
rag,
|
|
28
|
+
registry,
|
|
29
|
+
shards,
|
|
30
|
+
)
|
|
31
|
+
from ..core import output as out
|
|
32
|
+
from ..errors import BoostError
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def _tap_defaults(pins: dict[str, dict], dry_run: bool) -> list[str]:
|
|
36
|
+
"""Tap the default registries, pinned to a shard's commit when one exists.
|
|
37
|
+
|
|
38
|
+
Returns the tap names that are configured afterwards, tapped here or not.
|
|
39
|
+
Pinning is the whole point: tapping HEAD and then fetching a shard is the
|
|
40
|
+
ordering that produces a commit mismatch on every registry that moved since
|
|
41
|
+
the last shard run.
|
|
42
|
+
"""
|
|
43
|
+
existing = {t.name for t in registry.list_taps()}
|
|
44
|
+
names = []
|
|
45
|
+
for default in config.DEFAULT_TAPS:
|
|
46
|
+
name = str(default["name"])
|
|
47
|
+
names.append(name)
|
|
48
|
+
if name in existing:
|
|
49
|
+
out.info(out.role("%s already tapped" % name, "muted"))
|
|
50
|
+
continue
|
|
51
|
+
row = pins.get(name)
|
|
52
|
+
at = str(row.get("commit")) if row else None
|
|
53
|
+
if dry_run:
|
|
54
|
+
out.info("would tap %s%s" % (name, " @ %s" % at[:7] if at else ""))
|
|
55
|
+
continue
|
|
56
|
+
try:
|
|
57
|
+
with spin.Spinner("tapping %s" % name):
|
|
58
|
+
tap = registry.add(str(default["url"]), curated=True, at=at)
|
|
59
|
+
entries = catalog.rebuild_tap(tap)
|
|
60
|
+
except BoostError as exc:
|
|
61
|
+
out.warn("could not tap %s: %s" % (name, exc.message))
|
|
62
|
+
continue
|
|
63
|
+
journal.log("tap", tap.name)
|
|
64
|
+
out.ok("tapped %s (%d items)%s"
|
|
65
|
+
% (name, len(entries), " @ %s" % at[:7] if at else ""))
|
|
66
|
+
return names
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def _report(results: list[dict]) -> None:
|
|
70
|
+
"""Say what each shard did, and name the remedy for what it did not do."""
|
|
71
|
+
imported = [r for r in results if r["status"] == "imported"]
|
|
72
|
+
if imported:
|
|
73
|
+
total = sum(int(r.get("chunks") or 0) for r in imported)
|
|
74
|
+
out.ok("imported %d prebuilt shard%s (%s chunks) — no embedding needed"
|
|
75
|
+
% (len(imported), "" if len(imported) == 1 else "s",
|
|
76
|
+
format(total, ",")))
|
|
77
|
+
for kind, label in (("unpublished", "no published shard"),
|
|
78
|
+
("refused", "shard refused"),
|
|
79
|
+
("failed", "shard failed")):
|
|
80
|
+
rows = [r for r in results if r["status"] == kind]
|
|
81
|
+
if not rows:
|
|
82
|
+
continue
|
|
83
|
+
for r in rows:
|
|
84
|
+
detail = r.get("detail") or ""
|
|
85
|
+
out.info(out.role("%s: %s%s" % (r["tap"], label,
|
|
86
|
+
" (%s)" % detail if detail else ""),
|
|
87
|
+
"muted"))
|
|
88
|
+
left = [r["tap"] for r in results if r["status"] != "imported"]
|
|
89
|
+
if left:
|
|
90
|
+
out.info("embed the rest locally when you want to: "
|
|
91
|
+
"`boost reindex --dense`")
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def cmd_quickstart(argv) -> int:
|
|
95
|
+
"""boost quickstart [--no-vectors] [--dry-run]"""
|
|
96
|
+
p = cliparse.parser(
|
|
97
|
+
prog="boost quickstart",
|
|
98
|
+
description="Tap the starter registries and load prebuilt vectors")
|
|
99
|
+
p.add_argument("--no-vectors", action="store_true",
|
|
100
|
+
help="set up taps and keyword search only, skip shards")
|
|
101
|
+
p.add_argument("--dry-run", action="store_true",
|
|
102
|
+
help="print what would happen, change nothing")
|
|
103
|
+
args = p.parse_args(argv)
|
|
104
|
+
|
|
105
|
+
manifest = None
|
|
106
|
+
pins: dict[str, dict] = {}
|
|
107
|
+
want_vectors = not args.no_vectors and dense.have_backend()
|
|
108
|
+
if want_vectors:
|
|
109
|
+
# Fetched first because it decides how the taps are pinned. A failure
|
|
110
|
+
# here is not fatal: keyword search is the documented default and works
|
|
111
|
+
# without a single vector.
|
|
112
|
+
try:
|
|
113
|
+
with spin.Spinner("reading the shard manifest"):
|
|
114
|
+
manifest = shards.fetch_manifest()
|
|
115
|
+
pins = shards.rows(manifest)
|
|
116
|
+
except BoostError as exc:
|
|
117
|
+
out.warn("no published shards: %s" % exc.message)
|
|
118
|
+
manifest = None
|
|
119
|
+
|
|
120
|
+
names = _tap_defaults(pins, args.dry_run)
|
|
121
|
+
if args.dry_run:
|
|
122
|
+
planned = [n for n in names if n in pins] if manifest else []
|
|
123
|
+
out.info("would build the keyword index, then import %d shard(s)"
|
|
124
|
+
% len(planned))
|
|
125
|
+
return 0
|
|
126
|
+
|
|
127
|
+
with spin.Spinner("building the keyword index"):
|
|
128
|
+
stats = rag.build()
|
|
129
|
+
out.ok("indexed %s items for keyword search" % format(
|
|
130
|
+
int(stats.get("entries", 0)), ","))
|
|
131
|
+
|
|
132
|
+
if manifest is not None:
|
|
133
|
+
commits = rag._tap_commits()
|
|
134
|
+
# `_tap_commits` is keyed by safe name; `sync` speaks tap names.
|
|
135
|
+
by_name = {t.name: commits.get(t.safe_name, "")
|
|
136
|
+
for t in registry.list_taps()}
|
|
137
|
+
results = shards.sync([n for n in names if n in by_name], by_name,
|
|
138
|
+
manifest=manifest)
|
|
139
|
+
_report(results)
|
|
140
|
+
elif args.no_vectors:
|
|
141
|
+
out.info(out.role("skipped vectors as asked", "muted"))
|
|
142
|
+
elif not dense.have_backend():
|
|
143
|
+
out.info("semantic search needs the extra: "
|
|
144
|
+
"`pipx inject boost-skill-cli \"boost-skill-cli[rag]\"`, "
|
|
145
|
+
"then `boost quickstart` again")
|
|
146
|
+
|
|
147
|
+
complete.refresh_names()
|
|
148
|
+
out.ok("ready — try `boost search brainstorming`")
|
|
149
|
+
return 0
|
|
@@ -101,7 +101,12 @@ def cmd_tap(argv) -> int:
|
|
|
101
101
|
help="with --catalog: print what would be tapped, tap nothing")
|
|
102
102
|
p.add_argument("--curated", action="store_true",
|
|
103
103
|
help="mark the tap as curated (★ in listings)")
|
|
104
|
+
p.add_argument("--at", metavar="SHA",
|
|
105
|
+
help="pin the clone to one 40-character commit, as a "
|
|
106
|
+
"published vector shard requires")
|
|
104
107
|
args = p.parse_args(argv)
|
|
108
|
+
if args.at and not args.spec:
|
|
109
|
+
p.error("--at pins one registry, so it needs a SPEC")
|
|
105
110
|
if not args.spec and not args.defaults and not args.catalog:
|
|
106
111
|
p.error("provide a SPEC, --defaults, or --catalog")
|
|
107
112
|
|
|
@@ -129,10 +134,11 @@ def cmd_tap(argv) -> int:
|
|
|
129
134
|
% (tap.name, len(entries), default.get("focus", "")))
|
|
130
135
|
if args.spec:
|
|
131
136
|
with spin.Spinner("cloning %s" % args.spec):
|
|
132
|
-
tap = registry.add(args.spec, curated=args.curated)
|
|
137
|
+
tap = registry.add(args.spec, curated=args.curated, at=args.at)
|
|
133
138
|
entries = catalog.rebuild_tap(tap)
|
|
134
139
|
journal.log("tap", tap.name)
|
|
135
|
-
|
|
140
|
+
pin = " @ %s" % args.at[:7] if args.at else ""
|
|
141
|
+
out.ok("Tapped %s (%d items)%s" % (tap.name, len(entries), pin))
|
|
136
142
|
# Refresh the TAB-completion name cache so `boost install <TAB>` sees
|
|
137
143
|
# whatever this call just tapped instead of the pre-tap snapshot.
|
|
138
144
|
complete.refresh_names()
|
|
@@ -284,6 +284,44 @@ def head_commit(repo: Path) -> str:
|
|
|
284
284
|
return proc.stdout.strip() if proc.returncode == 0 else ""
|
|
285
285
|
|
|
286
286
|
|
|
287
|
+
def checkout_commit(repo: Path, sha: str) -> None:
|
|
288
|
+
"""Detach `repo` at `sha`, fetching that commit first if it is absent.
|
|
289
|
+
|
|
290
|
+
A tap is cloned `--depth 1`, so the commit a published shard was built from
|
|
291
|
+
is usually *not* in the clone: the fetch is the normal path, not the
|
|
292
|
+
fallback. GitHub serves a fetch by full SHA for a reachable commit, which
|
|
293
|
+
is what makes pinning possible without un-shallowing a repo that exists to
|
|
294
|
+
stay small.
|
|
295
|
+
|
|
296
|
+
The fetch keeps `--depth 1` and the blobless filter for the same reason the
|
|
297
|
+
clone does — pinning a tap must not cost the history and blobs the sparse
|
|
298
|
+
clone was built to avoid (458 taps held 12 GB before that work).
|
|
299
|
+
"""
|
|
300
|
+
if not _is_sha(sha):
|
|
301
|
+
raise BoostError("%r is not a full commit SHA" % sha,
|
|
302
|
+
hint="pin with the 40-character hash a manifest names")
|
|
303
|
+
have = run(["-C", str(repo), "cat-file", "-e", sha + "^{commit}"],
|
|
304
|
+
check=False)
|
|
305
|
+
if have.returncode != 0:
|
|
306
|
+
run(["-C", str(repo), "fetch", "--quiet", "--depth", "1",
|
|
307
|
+
"--filter=blob:none", "origin", sha])
|
|
308
|
+
run(["-C", str(repo), "checkout", "--quiet", "--detach", sha])
|
|
309
|
+
# A detached checkout leaves the sparse cone as it was, but re-applying is
|
|
310
|
+
# cheap and keeps a pinned clone byte-identical to a freshly cloned one.
|
|
311
|
+
run(["-C", str(repo), "sparse-checkout", "reapply"], check=False)
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
def _is_sha(value: str) -> bool:
|
|
315
|
+
"""True for a full 40-character hex commit hash.
|
|
316
|
+
|
|
317
|
+
Deliberately strict. An abbreviated hash is ambiguous across a fetch, and a
|
|
318
|
+
branch or tag name is not a pin at all — both would silently give a
|
|
319
|
+
different tree than the shard was built against, which `import_shard` would
|
|
320
|
+
then refuse with a confusing commit mismatch.
|
|
321
|
+
"""
|
|
322
|
+
return len(value) == 40 and all(c in "0123456789abcdef" for c in value.lower())
|
|
323
|
+
|
|
324
|
+
|
|
287
325
|
def remote_url(repo: Path) -> str:
|
|
288
326
|
"""Return the URL of `repo`'s `origin` remote, or "" if it has none."""
|
|
289
327
|
proc = run(["-C", str(repo), "remote", "get-url", "origin"], check=False)
|
|
@@ -161,9 +161,15 @@ def get(name: str) -> Tap:
|
|
|
161
161
|
else "list taps with `boost taps`")
|
|
162
162
|
|
|
163
163
|
|
|
164
|
-
def add(spec: str, curated: bool = False) -> Tap:
|
|
164
|
+
def add(spec: str, curated: bool = False, at: str | None = None) -> Tap:
|
|
165
165
|
"""Parse `spec`, shallow-clone it, and record the tap in config.
|
|
166
166
|
|
|
167
|
+
``at`` pins the clone to one commit. It exists for published vector shards:
|
|
168
|
+
a shard is only importable while the tap sits at the commit it was built
|
|
169
|
+
from (see ``core.shards``), so "tap this registry as the shard expects it"
|
|
170
|
+
has to be one operation — tapping HEAD and then moving would re-scan the
|
|
171
|
+
catalog for a tree the vectors do not describe.
|
|
172
|
+
|
|
167
173
|
Raises BoostError if a tap with that name is already configured.
|
|
168
174
|
"""
|
|
169
175
|
name, url = parse_spec(spec)
|
|
@@ -176,6 +182,16 @@ def add(spec: str, curated: bool = False) -> Tap:
|
|
|
176
182
|
if tap.path.exists():
|
|
177
183
|
util.rmtree(tap.path)
|
|
178
184
|
gitutil.clone_shallow(url, tap.path)
|
|
185
|
+
if at:
|
|
186
|
+
try:
|
|
187
|
+
gitutil.checkout_commit(tap.path, at)
|
|
188
|
+
except BoostError:
|
|
189
|
+
# A pin that cannot be honoured must not leave a tap silently on
|
|
190
|
+
# HEAD: the caller asked for one tree and would get another, and
|
|
191
|
+
# every shard keyed to the pin would then be refused for a commit
|
|
192
|
+
# mismatch whose cause is three steps back.
|
|
193
|
+
util.rmtree(tap.path)
|
|
194
|
+
raise
|
|
179
195
|
problems = policy.check_tap_signing(tap.path)
|
|
180
196
|
if problems:
|
|
181
197
|
util.rmtree(tap.path) # leave no half-added tap behind
|