boost-skill-cli 1.2.150__tar.gz → 1.2.151__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.150 → boost_skill_cli-1.2.151}/PKG-INFO +1 -1
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/dense.py +84 -12
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_skill_cli.egg-info/PKG-INFO +1 -1
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/dense-local-built-store-displaced-by-a-key.md +5 -3
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap.html +14 -37
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/semantic-search.md +18 -4
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_dense_fix_hint.py +159 -6
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_dense_status.py +27 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/.gitattributes +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/.gitignore +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/.lycheeignore +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/.vale/styles/boost/AIWriting.yml +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/.vale.ini +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/CLAUDE.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/DCO +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/GOVERNANCE.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/LICENSE +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/MAINTAINERS.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/MANIFEST.in +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/Makefile +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/README.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/SECURITY.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/SUPPORT.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/commands/quickstart.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/aihost.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/archive.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/bmad.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/bootstrap.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/browse.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/builtin.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/catalogbundle.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/cohort.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/compact.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/complete.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/deps.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/discovery.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/hookhost.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/jsonstate.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/prereq.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/report.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/shards.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/typedvalue.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/data/rules/boost-first.mdc +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_langchain/__init__.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_langchain/_compat.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_langchain/graph.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_langchain/loader.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_langchain/py.typed +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_langchain/retriever.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_skill_cli.egg-info/SOURCES.txt +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/codecov.yml +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/adapters.html +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/bmad.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/carousel.html +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/chat.html +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/code-review.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/commands.html +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/commit-audit.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/demo.gif +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/demo.html +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/demo.tape +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/dependencies.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/eval-latest.json +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/eval.html +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/index.html +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/langchain.html +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/openssf-badge.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/BOOST-D27.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/a-correct-link-in-a-locked-dir-reads-as-refused.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/a-new-shipped-card-always-404s-its-own-write-up-link.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/a-refusal-and-its-remedy-never-wrapped.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/agent-dir-shapes-install-still-trips-on.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/ai-backend-fanout.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-absorb-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-adapt-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-adapt-renders-every-sibling-of-a-flat-agents-dir-workflow-as.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-adapt-run-stats-edit-tag-export-reject-the-tap-name-qualifie.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-ai-degrade-note-blames-path-api-keys-regardless-of-cause-sev.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-attest-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-audit-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-bmad-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-browse-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-bundle-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-catalog-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-catalog-resolve-one-s-duplicate-name-hint-advertises-path-to.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-changelog-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-chat-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-clean-counts-failed-removals-as-cleaned-journals-the-inflate.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-cli-py-commands-summaries-and-parser-help-contradict-behavio.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-cohort-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-completions-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-config-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-config-policy-set-store-type-unchecked-values-consumers-cras.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-context-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-corrupt-settings-config-state-json-silently-read-as-empty-th.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-create-distill-infer-absorb-install-silently-replace-an-inst.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-create-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-declined-confirms-never-name-y-boost-assume-yes-snapshot-cle.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-deps-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-discover-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-distill-s-heuristic-merge-drops-repeated-fences-braces-writi.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-doctor-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-drift-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-dry-runs-disagree-with-the-real-run-compact-counts-bytes-it.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-edit-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-evolve-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-explain-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-export-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-export-o-cohort-create-and-profile-save-silently-overwrite-e.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-fingerprint-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-five-exit-70-crashes-on-bad-paths-data-catalog-export-serve.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-focus-profile-sideline-by-unlinking-without-recording-it-lis.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-git-operations-never-set-git-terminal-prompt-0-so-a-404-priv.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-health-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-hooks-remove-n-cannot-find-hooks-boost-itself-added-unknown.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-import-all-skips-the-injection-secret-scans-and-the-per-skil.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-import-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-index-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-info-stats-explain-render-a-different-smaller-shape-for-rule.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-install-dry-run-promises-agents-the-real-install-never-write.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-install-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-install-local-writes-empties-the-repo-s-mcp-json-silently-of.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-json-accepted-but-ignored-on-many-branches-cohort-config-pol.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-lint-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-log-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-log-simulate-changelog-headings-echo-the-raw-qualified-argum.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-mcp-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-mcp-register-s-boost-first-consent-names-only-the-registered.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-missing-json-on-doctor-test-health-changelog-trending-log-ho.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-name-miss-errors-unknown-tap-qualifier-unnamed-no-close-matc.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-onboard-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-out-table-clips-data-columns-to-an-assumed-80-columns-when-s.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-out-warn-defaults-to-stdout-infer-absorb-corrupt-skill-md-se.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-outdated-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-output-wrap-tokens-splits-punctuation-off-backtick-spans-ins.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-pinned-taps-silently-moved-to-head-by-update-re-clone-and-co.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-policy-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-preview-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-profile-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-project-scope-seams-uninstall-verify-list-info-reinstall-dis.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-protocol-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-pulse-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-quarantine-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-quarantine-pin-state-invisible-list-info-doctor-report-links.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-quickstart-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-recommend-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-reindex-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-reinstall-sync-repair-and-audit-resolve-by-name-tap-ignoring.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-replay-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-root-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-rules-workflows-reported-as-skills-uninstall-claims-a-store.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-run-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-schedule-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-search-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-simulate-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-singular-plural-misses-1-skills-1-issue-need-1-skill-pass-ac.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-six-count-flags-tap-chat-absorb-lint-changelog-hooks-skip-ut.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-skill-profile-name-slugging-is-inconsistent-distill-o-accept.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-snapshot-restore-replaces-the-lock-wholesale-orphaning-newer.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-stale-prose-after-shipped-changes-catalog-export-live-discov.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-stray-positionals-and-inapplicable-flags-silently-ignored-ac.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-sweep-positionals-json-lack-help-strings-and-no-command-help.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-sync-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-tag-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-tap-dry-run-is-silently-ignored-outside-catalog-spec-and-def.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-tap-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-taps-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-taps-outdated-decay-policy-snapshot-json-emit-display-string.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-test-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-trust-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-trust-verify-labels-a-manifest-tampered-after-signing-by-a-t.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-unpin-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-untap-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-update-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-verify-drift-say-nothing-installed-exit-0-and-doctor-says-lo.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-verify-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/audit-who-findings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/bare-boost-never-names-an-entry-point.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/because-that-was-not-the-reason.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/bm25-empty-tokenization-kills-catalog-fallback.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/bmad-done-contract-ignores-the-track.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/bmad-gemini-gets-claude-hook-output.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/bmad-personas-delegate-outside-the-router.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/bmad-roster-drifted-from-bmad-6-12.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/bmad-route-ignores-autopilot-state.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/bmad-router-one-keyword-decides-the-track.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/bmad-router-reads-each-prompt-alone.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/boost-first-rule.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/branch-current-gate.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/cache-writers-that-still-crash-on-a-read-only-cache.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/capability-policy-skips-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/catalog-categories-beyond-curated.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/ci-summary-reports-the-wrong-coverage-gate.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/claude-md-instructs-the-wrong-licence-header.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/cli-audit-2026-08-full-sweep.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/cli-command-audit.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/codex-hooks-timeout-units-are-unestablished.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/codex-is-not-an-mcp-host.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/compact-answers-a-named-tap-with-a-global-all-clear.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/concurrent-rag-builds-delete-each-others-temp-index.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/config-json-edge-shapes-crash-or-disagree.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/corpus-refresh-updates-data-not-prose.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/corrupt-config-reads-as-ready-to-set-up.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/count-flags-that-silently-invert.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/delay-true-defeats-the-log-suppress.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/dense-kill-switch-has-no-reason-state.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/dense-no-key-guard-is-unreachable.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/dense-ready-but-embedder-cannot-run.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/dense-reindex-has-no-progress-or-durability.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/dense-reindex-reuses-whole-taps.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/dense-store-holds-every-vector-once-per-copy.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/doctor-prescribes-sync-that-deletes-live-links.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/err-colour-judged-by-stdout.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/err-multiline-hint-colours-across-the-newline.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/eval-corpus-counted-by-the-method-the-repo-disavows.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/eval-corpus-duplication-is-intra-tap-not-mirrors.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/eval-floor-calibration-stale-after-pin-refresh.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/eval-gate-scores-a-body-less-corpus.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/exemplar-graded-golden-set-runs-in-no-gate.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/explain-outline-has-no-cap.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/free-threaded-canary-warns-about-nothing.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/gate-parity-test-ignores-k-and-golden.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/gated-golden-set-has-zero-exemplars.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/gstack-tap-first-then-coexistence.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/hooks-list-drops-the-name-before-the-host.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/identifier-columns-shrink-to-a-name-no-command-accepts.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/import-budget-gate-passes-when-boost-cannot-import.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/info-deps-materialize-a-dir-they-then-reject.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/install-cannot-tell-a-skill-needs-another-one.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/install-path-disambiguation.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/install-paths-that-still-drop-the-result.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/keyed-no-store-hint-disagrees-with-shard-remedy.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/lighthouse-flips-on-byte-identical-input.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/links-job-503s-its-own-write-up-links.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/lock-kept-links-it-had-just-removed.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/manifest-in-prunes-only-the-root-copy.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mcp-cannot-read-a-skill-before-installing.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mcp-doctor-says-healthy-where-mcp-search-says-nothing-is-tapped.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mcp-install-description-omits-antigravity.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mcp-miss-reply-echoes-the-whole-query.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mcp-registration-writes-outside-a-sandboxed-home.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mcp-search-cost-overstated-on-keyless-machines.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mcp-server-dies-on-a-valid-json-message-that-is-not-an-object.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mcp-session-dies-on-a-deeply-nested-json-line.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mcp-skip-list-absent-from-tool-descriptions.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mutation-shards-rerun-full-set-every-push.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/near-identical-copies-still-eat-the-slots.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/one-bad-agent-dir-silences-the-whole-doctor-report.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/one-failed-shard-job-drops-registries-from-the-manifest.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/openssf-silver.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/osps-baseline-levels.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/panel-fits-data-to-an-assumed-80-in-a-pipe.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/publish-the-keyword-index.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/published-shards-have-no-consumer.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/quickstart-drops-incompatible-shard-status.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/quickstart-manifest-error-drops-hint-and-misnames-cause.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/quickstart-rerun-retargets-tapped-registries.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/quickstart-says-ready-exit-0-after-every-tap-failed.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/quickstart-shard-download-invisible-in-preview-and-run.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/read-only-boost-home-with-no-cache-dir.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/readme-81-command-table-lists-80-omits-quickstart.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/readme-hero-installs-a-name-no-starter-registry-ships.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/reclone-leaves-a-clone-on-head-when-it-cannot-reach-the-pin.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/recommend-recomputes-its-columns-per-row.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/refresh-strands-the-natural-set-baseline.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/reindex-reported-a-completeness-share-it-could-not-compute.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/release-guard-fails-open-when-it-cannot-read-tags.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/relicence-apache-2.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/required-eval-gate-still-grades-by-name.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/roadmap-boards-advertise-python-39.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/sandbox-fixture-does-not-sandbox-the-working-directory.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/search-caps-the-two-copyable-identifiers.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/search-drops-symbol-language-queries-silently.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/search-footer-not-fitted-to-the-pane-its-rows-were-fitted-to.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/search-footer-overflows-40-col-pane-gate-passes-by-luck.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/search-relevance-meter-is-constant-on-default-page.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/search-rows-use-term-width-so-piping-drops-the-tap-column.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/shard-refresh-skips-processed-commits.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/shard-runs-reembed-everything-weekly.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/shrink-the-published-index.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/stale-gate-sizes-in-readme-and-contributing.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/stale-tap-hint-dead-for-tap-only-installs.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/surface-dehyphenation-rationale-is-false.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/sweep-died-at-a-page-not-at-launch.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/sync-repairs-a-disabled-agents-row-every-run.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/table-fit-widths-floor-destroys-columns-and-still-overflows.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/taps-vouches-for-a-clone-that-is-not-there.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/the-install-path-hands-agy-claudes-mcp-argv.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/the-links-concurrency-cap-did-not-hold.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/the-model-back-off-mixes-two-clocks.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/the-windows-test-cap-is-five-minutes-from-the-measurement.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/tier3-ceiling-unreachable-at-default-n.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/typos-reported-as-boost-bugs.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/unreadable-tap-cache-healthy-doctor-crashing-heal.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/unwritable-agent-dir-has-no-remedy.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/unwritable-rule-or-workflow-dir-crashes-install.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/vex-openvex-feed.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/weekly-vectors-had-no-ingestion-path.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/zip-strict-audit.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/security-design.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/verifying-releases.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/vex/meta.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/vex/openvex.json +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/evals/README.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/evals/__init__.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/evals/baseline.json +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/evals/metrics.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/evals/publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/examples/README.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/index.html +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/noxfile.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/pyproject.toml +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/add_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/build_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/build_vex.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/check_branch_current.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/check_dco.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/check_reproducible.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/eval_corpus.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/eval_tools.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/measure_near_duplicate_bound.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/measure_registry.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/normalize_sdist.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/page_budget.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/publish_eval_json.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/publish_shards.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/serve_docs.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/scripts/shard_plan.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/setup.cfg +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/sonar-project.properties +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/style/README.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/style/boost.css +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/style/boost.js +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/style/demo.html +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/conftest.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/eval/fixtures/claude_init_event.jsonl +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/eval/taps-scale.txt +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/eval/tool_calls.jsonl +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_bad_input_is_not_a_crash.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_bmad_all_hosts.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_bmad_personas_scope.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_cli_catalog.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_cli_hooks_codex.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_cli_hooks_gemini.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_cli_identifier_columns.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_cli_json_reports.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_cli_pane_width.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_cli_quickstart.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_cli_tap_pins.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_context_sees_an_unborn_branch.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_count_flags_reject_nonpositive.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_keyed_no_store_hint.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_kind_conformance.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_recommend_because_is_true.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_repo_root_guard_covers_real_installs.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_reports_match_reality.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/langchain/conftest.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/langchain/test_graph.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/langchain/test_loader.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/langchain/test_retriever.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/data/bmad-skills-6.12.0.json +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_action_pin_lockstep.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_aihost.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_archive.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_bmad_core.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_boost_first_offer.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_bootstrap.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_bot_pr_dco.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_branch_current.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_browse.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_builtin.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_canary_deps.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_catalog_keyword_words.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_catalogbundle.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_check_dco.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_check_reproducible.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_claude_settings_codex.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_clean_internal_cache.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_cli_update_shards.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_cohort.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_compact.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_complete.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_complete_rc_block.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_content_identity.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_corpus_prose.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_count_flags_use_positive_int.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_coverage_gate_prose.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_crash_redaction.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_dense_boilerplate_cluster.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_dense_embed_dedupe.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_dense_entry_reuse.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_dense_entry_vectors.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_dense_model_unavailable.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_dense_progress.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_dense_quantized.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_dense_ready_order.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_dense_shard_real_schema.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_dense_status_cheap.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_dense_vector_dedupe.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_deps.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_discovery.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_distill_merge.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_doctor_output_polish.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_drift_hint.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_dry_run_parity.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_embed_outranking.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_embed_truncated_response.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_eval_corpus.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_eval_corpus_bodies.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_eval_grading.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_eval_query_sets.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_eval_tools.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_eval_tools_probe.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_first_run_pointer.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_gemini_agent_sanitize.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_gitutil_lfs.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_gitutil_sparse.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_gstack_coexistence.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_help_contracts.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_hook_settings_hosts.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_hookhost.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_hookhost_codex.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_install_permission_error.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_jsonstate.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_langchain_packaging.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_launcher_python_floor.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_lighthouse_budgets.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_link_ownership.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_mcp_install_sandbox_home.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_mcp_read.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_measure_registry.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_near_duplicate_collapse.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_normalize_sdist.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_output_table_drop.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_output_table_whole.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_page_budget.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_prereq.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_quickstart_readiness.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_rag_completeness.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_rag_extra_hint.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_rag_fastpath.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_read_text_arg.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_registry_control_chars.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_registry_parallel.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_repo_root_guard.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_report.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_rerank_cache.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_retrieve_any_near_duplicates.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_sandbox_fixture_cwd.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_schedule_plist.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_sdist_contents.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_serve_docs.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_shard_plan.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_shards.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_shards_carry_forward.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_shards_incremental.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_shards_ingest.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_shards_matrix.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_smoke_covers_every_command.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_store_materialize.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_sync_blocked_links.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_sync_lost_lock.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_tap_pins.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_typedvalue.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_upstream_path.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_version_tags.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_vex.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_visual_harness_capture.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_visual_harness_flags.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_workflow_concurrency_groups.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_workflow_push_has_credentials.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.2.150 → boost_skill_cli-1.2.151}/tests/visual/visual_check.mjs +0 -0
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '1.2.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 2,
|
|
21
|
+
__version__ = version = '1.2.151'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 2, 151)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -568,10 +568,12 @@ _FIX = {
|
|
|
568
568
|
# instead: with it in force, this build goes through the paid API.
|
|
569
569
|
"no-store": "build it: `boost reindex --dense`",
|
|
570
570
|
"version-changed": "rebuild it: `boost reindex --dense --force`",
|
|
571
|
-
# Only right when the live space is the one the user wants.
|
|
572
|
-
#
|
|
573
|
-
#
|
|
574
|
-
#
|
|
571
|
+
# Only right when the live space is the one the user wants. Two kinds of
|
|
572
|
+
# store land here without wanting it: one built through a paid provider
|
|
573
|
+
# that has merely lost its key, and one the local model built on a machine
|
|
574
|
+
# that has since exported a key. For both this row is the bill the guards
|
|
575
|
+
# in `fix_hint` exist to prevent, so it answers from the status dict —
|
|
576
|
+
# `_restore_built_space` and `_restore_local_space` — before reaching here.
|
|
575
577
|
"provider-changed": "rebuild it: `boost reindex --dense --force`",
|
|
576
578
|
"model-changed": "rebuild it: `boost reindex --dense --force`",
|
|
577
579
|
"dim-changed": "rebuild it: `boost reindex --dense --force`",
|
|
@@ -664,6 +666,49 @@ def _restore_built_space(built: str, env: str) -> str | None:
|
|
|
664
666
|
return None
|
|
665
667
|
|
|
666
668
|
|
|
669
|
+
def _restore_local_space() -> str | None:
|
|
670
|
+
"""How to put the *local* model back in front of a key, or None.
|
|
671
|
+
|
|
672
|
+
The mirror of :func:`_restore_built_space`, and the expensive direction.
|
|
673
|
+
A store the local model built is displaced by exactly the mechanism that
|
|
674
|
+
displaces a keyed one — a provider `embed.provider` prefers appears on the
|
|
675
|
+
machine — and it is the common case rather than the exotic one: `boost
|
|
676
|
+
quickstart` imports the published shards, those are keyless 384-d local
|
|
677
|
+
vectors by policy, so the default on-ramp leaves every user one `export`
|
|
678
|
+
away from this.
|
|
679
|
+
|
|
680
|
+
Separate from :func:`_restore_built_space` rather than a fourth branch in
|
|
681
|
+
it, because the predicate is different in two ways:
|
|
682
|
+
|
|
683
|
+
* **`unset` is only right advice when the local model is installed.**
|
|
684
|
+
Dropping the one key in force on a partial ``[rag]`` install sends
|
|
685
|
+
`embed.provider` to ``None`` and the ladder to ``no-key`` — advice that
|
|
686
|
+
switches off the only backend that was working. :func:`free_shard_path`
|
|
687
|
+
guards the same way and for the same reason; ``local_installed`` rather
|
|
688
|
+
than ``local_available`` because wording a hint must not import an ONNX
|
|
689
|
+
runtime.
|
|
690
|
+
* **There is no ``export`` half.** Local has no key, so the two-fact shape
|
|
691
|
+
collapses to one, and the sentence has to say what is being put back —
|
|
692
|
+
the local model, not "the store's own key", which a keyless store does
|
|
693
|
+
not have.
|
|
694
|
+
|
|
695
|
+
None when nothing outranks local, which through :func:`status` means the
|
|
696
|
+
store is not displaced at all. :func:`fix_hint` is a pure function of its
|
|
697
|
+
arguments, though, so the case is reachable by a caller and answered.
|
|
698
|
+
"""
|
|
699
|
+
if not embed.local_installed():
|
|
700
|
+
return None
|
|
701
|
+
# `outranking` reads the one preference order there is. Local is not in
|
|
702
|
+
# `KEY_ENV`, and its docstring is explicit that a name outside the table
|
|
703
|
+
# is outranked by every key in force — which is the semantics wanted here:
|
|
704
|
+
# dropping `VOYAGE_API_KEY` alone falls through to `OPENAI_API_KEY`, no
|
|
705
|
+
# nearer the local space than the key it replaced.
|
|
706
|
+
drop = embed.outranking("local")
|
|
707
|
+
if not drop:
|
|
708
|
+
return None
|
|
709
|
+
return "`unset %s` puts the local model back in front" % " ".join(drop)
|
|
710
|
+
|
|
711
|
+
|
|
667
712
|
def fix_hint(reason: str, status: dict | None = None) -> str:
|
|
668
713
|
"""The single next action for a `status()` reason, or a safe default.
|
|
669
714
|
|
|
@@ -686,6 +731,17 @@ def fix_hint(reason: str, status: dict | None = None) -> str:
|
|
|
686
731
|
``built_provider`` is what separates a store worth reviving from an
|
|
687
732
|
unfinished install with nothing to revive.
|
|
688
733
|
|
|
734
|
+
``built_provider`` is also read for the mirror case, which is the one most
|
|
735
|
+
users can reach: a store the **local** model built, on a machine that has
|
|
736
|
+
since exported a key. `boost quickstart` imports keyless 384-d shards, so
|
|
737
|
+
that is the default shape, and one `export` for an unrelated tool takes
|
|
738
|
+
semantic search off. `_restore_local_space` answers it with the `unset`
|
|
739
|
+
that is free, where the table would sell a re-embed through the very API
|
|
740
|
+
whose key caused the problem. Only ``local`` and the names in
|
|
741
|
+
:data:`embed.KEY_ENV` are admitted — a blank ``built_provider`` is not a
|
|
742
|
+
store to revive, and `embed.outranking` would answer for it with every
|
|
743
|
+
key on the machine.
|
|
744
|
+
|
|
689
745
|
The two remedies differ in their tail, because the cost differs. Under
|
|
690
746
|
``no-key`` the local model is missing, so the alternative is installing it
|
|
691
747
|
— which is what re-embeds everything. Under ``provider-changed`` a
|
|
@@ -719,23 +775,39 @@ def fix_hint(reason: str, status: dict | None = None) -> str:
|
|
|
719
775
|
built = status.get("built_provider") or ""
|
|
720
776
|
env = embed.KEY_ENV.get(built)
|
|
721
777
|
# `chunks` guards the unfinished-install case: without vectors on disk
|
|
722
|
-
# there is nothing
|
|
723
|
-
# step. A store built by the local model has no env var and correctly
|
|
724
|
-
# falls through — that user does need the package back.
|
|
778
|
+
# there is nothing to revive, and "build it" is the real next step.
|
|
725
779
|
count = status.get("chunks")
|
|
726
780
|
# `None` is "a store is here and never recorded its total" — a legacy
|
|
727
781
|
# store, not an unfinished one. Only a *known* zero means there are no
|
|
728
782
|
# vectors to revive; reading unknown as zero would send exactly the
|
|
729
783
|
# user this branch exists to protect to the re-embed-everything answer.
|
|
730
|
-
|
|
784
|
+
#
|
|
785
|
+
# `env or built == "local"` is the admission test, and it is spelled
|
|
786
|
+
# out rather than "has a recorded provider" on purpose: `outranking`
|
|
787
|
+
# answers for a name outside `KEY_ENV` with *every* key in force, so a
|
|
788
|
+
# store whose meta records no provider — `""` here, from a legacy
|
|
789
|
+
# cache or a synthesised status — would be handed `unset` over the
|
|
790
|
+
# machine's entire keyring on the strength of a blank field.
|
|
791
|
+
if (env or built == "local") and (count is None or count > 0):
|
|
731
792
|
n = (f"{int(count):,} vector{'' if count == 1 else 's'}"
|
|
732
793
|
if count else "vectors")
|
|
733
794
|
if reason == "no-key":
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
795
|
+
if env:
|
|
796
|
+
return ("set the key it was built with: `export %s=...` — "
|
|
797
|
+
"reinstalling the extra swaps in the local model "
|
|
798
|
+
"and forces all %s to be re-embedded" % (env, n))
|
|
799
|
+
# Local-built, and the model it was built with is what went
|
|
800
|
+
# missing. The table's row would be nearly right and ends in
|
|
801
|
+
# the one suggestion that is wrong for this store: setting a
|
|
802
|
+
# key displaces it into another space, and with the local
|
|
803
|
+
# backend still absent the next status is `provider-changed`
|
|
804
|
+
# with nothing to unset back to — the full re-embed.
|
|
805
|
+
return ("reinstall the extra: `%s` — it is the model all %s "
|
|
806
|
+
"were built with, and a key instead re-embeds them"
|
|
807
|
+
% (install_extra(), n))
|
|
737
808
|
live = status.get("provider")
|
|
738
|
-
restore = _restore_built_space(built, env)
|
|
809
|
+
restore = (_restore_built_space(built, env) if env
|
|
810
|
+
else _restore_local_space())
|
|
739
811
|
if restore:
|
|
740
812
|
# Names the live space rather than "the local model": the
|
|
741
813
|
# provider that displaced this store is whatever `provider()`
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
---
|
|
2
2
|
id: dense-local-built-store-displaced-by-a-key
|
|
3
3
|
board: code
|
|
4
|
-
section:
|
|
5
|
-
status:
|
|
4
|
+
section: shipped
|
|
5
|
+
status: shipped
|
|
6
6
|
category: Quality · Retrieval eval
|
|
7
7
|
complexity: S
|
|
8
8
|
impact: High
|
|
9
9
|
wow: 4
|
|
10
10
|
note: Exporting an API key takes a locally built store off the air, and doctor answers with a paid re-embed where `unset` is free. Every user who came in through `boost quickstart` is one `export` away from this.
|
|
11
11
|
order: 353
|
|
12
|
+
owner: loop/dense-local-displaced
|
|
13
|
+
pr: 990
|
|
12
14
|
title: A locally built vector store displaced by a new API key is told to re-embed through the paid provider, where unsetting the key is free
|
|
13
15
|
---
|
|
14
16
|
<b>The mirror of #989, and the expensive direction.</b> #989 taught <code>fix_hint</code> that a store built with an API key can be displaced two ways, and to name the <code>export</code> or the <code>unset</code> that restores it. A store built by the <b>local</b> model is displaced by exactly the same mechanism — a key the resolver prefers appears on the machine — and gets none of it: the branch is gated on <code>env = embed.KEY_ENV.get(built)</code> being truthy, and <code>local</code> has no env var, so it falls through to the table.
|
|
@@ -34,4 +36,4 @@ title: A locally built vector store displaced by a new API key is told to re-emb
|
|
|
34
36
|
|
|
35
37
|
Two more things fall out of that. The sentence needs a third variant — "puts the store's own key back in front" is false for a store that has no key; it is the local model being put back in front. And the admission test must be <code>built in embed.KEY_ENV or built == "local"</code>, never "has a recorded provider": <code>embed.outranking("")</code> returns <b>every</b> set key, so a store whose meta records no provider would be told to unset the machine's entire keyring on the strength of a blank field.
|
|
36
38
|
|
|
37
|
-
<b>Where it was found.</b> The adversarial verification pass on #989, which is also why the measurement exists. #989's PR body originally scoped this out as "not measured here"; it is measured now, and <code>docs/semantic-search.md</code>
|
|
39
|
+
<b>Where it was found.</b> The adversarial verification pass on #989, which is also why the measurement exists. #989's PR body originally scoped this out as "not measured here"; it is measured now, and #990 removes the qualifier <code>docs/semantic-search.md</code> was carrying in the meantime.
|
|
@@ -140,9 +140,9 @@
|
|
|
140
140
|
<section class="block reveal">
|
|
141
141
|
<div class="stats">
|
|
142
142
|
<!-- ROADMAP:stats -->
|
|
143
|
-
<div class="stat"><b>
|
|
143
|
+
<div class="stat"><b>23</b><span>Shipped</span></div>
|
|
144
144
|
<div class="stat"><b>1</b><span>Next up</span></div>
|
|
145
|
-
<div class="stat"><b>
|
|
145
|
+
<div class="stat"><b>78</b><span>Planned</span></div>
|
|
146
146
|
<div class="stat"><b>505</b><span>Loop finds</span></div>
|
|
147
147
|
<!-- /ROADMAP:stats -->
|
|
148
148
|
</div>
|
|
@@ -419,6 +419,18 @@
|
|
|
419
419
|
<span class="m">The premise was wrong — boost has always followed <code>requires:</code>. It is the narrowest spelling in the ecosystem (101 values); <code>skills:</code> and <code>dependencies:</code> carry 2,388 more and were invisible.</span>
|
|
420
420
|
</div>
|
|
421
421
|
</article>
|
|
422
|
+
|
|
423
|
+
<article class="cap rcard" id="dense-local-built-store-displaced-by-a-key">
|
|
424
|
+
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Quality · Retrieval eval</span></div>
|
|
425
|
+
<h3>A locally built vector store displaced by a new API key is told to re-embed through the paid provider, where unsetting the key is free</h3>
|
|
426
|
+
<p class="cardbody"><a class="writeup" href="https://github.com/jonnyeclectic/boost/blob/main/docs/roadmap/items/dense-local-built-store-displaced-by-a-key.md">Write-up · dense-local-built-store-displaced-by-a-key.md</a></p>
|
|
427
|
+
<div class="meta">
|
|
428
|
+
<span class="m">Complexity <b>S</b></span>
|
|
429
|
+
<span class="m hi">Impact <b>High</b></span>
|
|
430
|
+
<span class="m">Wow <b class="wow">★★★★</b></span>
|
|
431
|
+
<span class="m">Exporting an API key takes a locally built store off the air, and doctor answers with a paid re-embed where `unset` is free. Every user who came in through `boost quickstart` is one `export` away from this.</span>
|
|
432
|
+
</div>
|
|
433
|
+
</article>
|
|
422
434
|
<!-- /ROADMAP:cards -->
|
|
423
435
|
|
|
424
436
|
</div>
|
|
@@ -2171,41 +2183,6 @@ instead of on a user's machine.</p>
|
|
|
2171
2183
|
<span class="m">Two functions built the same `mcp add` command line, one had never heard of agy, and both got Gemini wrong…</span>
|
|
2172
2184
|
</div>
|
|
2173
2185
|
</article>
|
|
2174
|
-
|
|
2175
|
-
<article class="cap rcard" id="dense-local-built-store-displaced-by-a-key">
|
|
2176
|
-
<div class="head"><span class="pill planned">Planned</span><span class="cat">Quality · Retrieval eval</span></div>
|
|
2177
|
-
<h3>A locally built vector store displaced by a new API key is told to re-embed through the paid provider, where unsetting the key is free</h3>
|
|
2178
|
-
<p><b>The mirror of #989, and the expensive direction.</b> #989 taught <code>fix_hint</code> that a store built with an API key can be displaced two ways, and to name the <code>export</code> or the <code>unset</code> that restores it. A store built by the <b>local</b> model is displaced by exactly the same mechanism — a key the resolver prefers appears on the machine — and gets none of it: the branch is gated on <code>env = embed.KEY_ENV.get(built)</code> being truthy, and <code>local</code> has no env var, so it falls through to the table.
|
|
2179
|
-
|
|
2180
|
-
<b>Measured.</b> Two stores of 645,592 chunks, same machine, only <code>VOYAGE_API_KEY</code> set. Verbatim, through the real <code>dense.status()</code> ladder:
|
|
2181
|
-
|
|
2182
|
-
<code>##### store built with 'local', live key = VOYAGE</code><br>
|
|
2183
|
-
<code> status reason : provider-changed</code><br>
|
|
2184
|
-
<code> outranking('local') : ('VOYAGE_API_KEY',)</code><br>
|
|
2185
|
-
<code> DOCTOR | ! semantic search silently off — 645592-chunk vector store built with</code><br>
|
|
2186
|
-
<code> DOCTOR | rebuild it: `boost reindex --dense --force`</code><br>
|
|
2187
|
-
<br>
|
|
2188
|
-
<code>##### store built with 'openai', live key = VOYAGE</code><br>
|
|
2189
|
-
<code> status reason : provider-changed</code><br>
|
|
2190
|
-
<code> DOCTOR | set the key it was built with: `export OPENAI_API_KEY=...`, then</code><br>
|
|
2191
|
-
<code> DOCTOR | `unset VOYAGE_API_KEY` puts it back in front — or …</code>
|
|
2192
|
-
|
|
2193
|
-
<code>embed.outranking('local')</code> already computes the answer — <code>unset VOYAGE_API_KEY</code> — and restores that store instantly and for nothing. The line boost actually prints re-embeds 645,592 chunks through a metered API.
|
|
2194
|
-
|
|
2195
|
-
<b>Why it is not a corner case.</b> <code>boost quickstart</code> imports the published vector shards, and those are keyless: <code>BAAI/bge-small-en-v1.5</code> at 384 dimensions, built by the local model. So the default on-ramp leaves every user with a local-built store, and the first time one of them exports a Voyage or OpenAI key for anything at all, semantic search goes quiet and doctor bills them to get it back.
|
|
2196
|
-
|
|
2197
|
-
<b>The constraint any fix has to clear</b>, and the reason this is a separate card rather than a line in #989: <code>unset</code> is only the right advice for a local-built store <b>if the local model is installed</b>. On a partial <code>[rag]</code> install, unsetting the one key in force sends <code>provider()</code> to <code>None</code> and the ladder to <code>no-key</code> — the advice would switch off the only thing making search work. So the predicate needs to ask whether the local model is there — and the one to ask is <code>embed.local_installed()</code>, not <code>embed.local_available()</code>: <code>local_available</code> answers by importing the ONNX runtime, which is right for a caller about to embed and wrong for one about to word a sentence. <code>dense.free_shard_path</code>, the sibling that words the other keyed-machine hint, already uses <code>local_installed</code> for exactly that reason. Either way it is a check the key-built branches do not need.
|
|
2198
|
-
|
|
2199
|
-
Two more things fall out of that. The sentence needs a third variant — "puts the store's own key back in front" is false for a store that has no key; it is the local model being put back in front. And the admission test must be <code>built in embed.KEY_ENV or built == "local"</code>, never "has a recorded provider": <code>embed.outranking("")</code> returns <b>every</b> set key, so a store whose meta records no provider would be told to unset the machine's entire keyring on the strength of a blank field.
|
|
2200
|
-
|
|
2201
|
-
<b>Where it was found.</b> The adversarial verification pass on #989, which is also why the measurement exists. #989's PR body originally scoped this out as "not measured here"; it is measured now, and <code>docs/semantic-search.md</code> carries a qualifier pointing at this card until it lands.</p>
|
|
2202
|
-
<div class="meta">
|
|
2203
|
-
<span class="m">Complexity <b>S</b></span>
|
|
2204
|
-
<span class="m hi">Impact <b>High</b></span>
|
|
2205
|
-
<span class="m">Wow <b class="wow">★★★★</b></span>
|
|
2206
|
-
<span class="m">Exporting an API key takes a locally built store off the air, and doctor answers with a paid re-embed where `unset` is free. Every user who came in through `boost quickstart` is one `export` away from this.</span>
|
|
2207
|
-
</div>
|
|
2208
|
-
</article>
|
|
2209
2186
|
<!-- /ROADMAP:cards -->
|
|
2210
2187
|
|
|
2211
2188
|
</div>
|
|
@@ -146,6 +146,12 @@ A key buys a larger embedding model. Nothing else changes.
|
|
|
146
146
|
Set one and boost prefers it automatically, re-embedding on your next
|
|
147
147
|
`boost reindex --dense`. Voyage wins if both are set.
|
|
148
148
|
|
|
149
|
+
If you came in through `boost quickstart`, your vectors are the keyless local
|
|
150
|
+
ones, and exporting a key is what takes them out of service — boost prefers
|
|
151
|
+
the key, and nothing it has on disk is in that key's space. `boost doctor`
|
|
152
|
+
names the `unset` that puts them back, so this is recoverable for free rather
|
|
153
|
+
than at the price of a re-embed.
|
|
154
|
+
|
|
149
155
|
Be deliberate about this, because switching providers is not free. Vectors are
|
|
150
156
|
only meaningful inside the embedding space that produced them, so changing
|
|
151
157
|
provider or model invalidates every vector you have and forces a full re-embed.
|
|
@@ -187,6 +193,7 @@ deliberately no vectors, for the same reason.
|
|
|
187
193
|
| store is empty | `boost reindex --dense --force` |
|
|
188
194
|
| version, model or dimension changed | `boost reindex --dense --force` |
|
|
189
195
|
| provider changed, and a store built with a key | put that key back in force. The rebuild is offered as the alternative, and it re-embeds everything |
|
|
196
|
+
| provider changed, and a store built by the local model | `unset` the keys in front of it. Free, and instant |
|
|
190
197
|
| no key, and a store built with one | set the key it was built with. Reinstalling the extra swaps in the local model and forces a full re-embed |
|
|
191
198
|
|
|
192
199
|
Those last two rows are the ones worth reading twice, and the first of them is
|
|
@@ -208,10 +215,17 @@ its own provider, and doctor names whichever applies:
|
|
|
208
215
|
Both can be true at once, and then doctor names both steps. Running only the
|
|
209
216
|
export would leave the resolver exactly where it was.
|
|
210
217
|
|
|
211
|
-
A store built by the **local** model is displaced the same way
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
218
|
+
A store built by the **local** model is displaced the same way, and it is the
|
|
219
|
+
case most people can reach: `boost quickstart` imports keyless vectors, so
|
|
220
|
+
exporting a key for anything at all takes semantic search off. Doctor answers
|
|
221
|
+
that one with the `unset` too — every key in front of local, since dropping
|
|
222
|
+
`VOYAGE_API_KEY` alone falls through to `OPENAI_API_KEY`, which is no nearer
|
|
223
|
+
the local space. There is no `export` half, because a local store has no key
|
|
224
|
+
of its own.
|
|
225
|
+
|
|
226
|
+
The one time doctor withholds that advice is when the local model is not
|
|
227
|
+
installed. Dropping your only key there would leave no provider at all, so
|
|
228
|
+
the rebuild really is the way out, and that is what it says.
|
|
215
229
|
|
|
216
230
|
If you would rather move to the live provider than restore the old one,
|
|
217
231
|
`boost reindex --dense --force` is the command, and doctor names the space it
|
|
@@ -200,12 +200,20 @@ class TestNoKeyReadsTheStore:
|
|
|
200
200
|
chunks=0, store_exists=False))
|
|
201
201
|
assert hint == _table("no-key")
|
|
202
202
|
|
|
203
|
-
def
|
|
204
|
-
|
|
205
|
-
#
|
|
203
|
+
def test_a_locally_built_store_keeps_the_extra_and_loses_the_key_offer(
|
|
204
|
+
self):
|
|
205
|
+
# `local` has no API key to set, so this user does genuinely need the
|
|
206
|
+
# package back and the table's first clause is right. Its second is
|
|
207
|
+
# not: "(or set VOYAGE_API_KEY / OPENAI_API_KEY for a larger model)"
|
|
208
|
+
# sells this particular user a full re-embed of vectors already on
|
|
209
|
+
# disk, since a key displaces their store and the local model is
|
|
210
|
+
# still missing to unset back to. Same remedy, without the bait.
|
|
206
211
|
hint = dense.fix_hint("no-key", self._status(built_provider="local",
|
|
207
212
|
built_model="BAAI/bge-small-en-v1.5"))
|
|
208
|
-
assert hint
|
|
213
|
+
assert hint.startswith("reinstall the extra: `%s`"
|
|
214
|
+
% dense.install_extra())
|
|
215
|
+
assert hint != _table("no-key")
|
|
216
|
+
assert "VOYAGE_API_KEY" not in hint
|
|
209
217
|
|
|
210
218
|
def test_no_status_argument_keeps_the_old_answer(self):
|
|
211
219
|
# Every pre-existing caller passes one argument; none may regress.
|
|
@@ -372,8 +380,11 @@ class TestProviderChangedIsWhereALostKeyActuallyLands:
|
|
|
372
380
|
assert dense.fix_hint("provider-changed", st) == \
|
|
373
381
|
_table("provider-changed")
|
|
374
382
|
|
|
375
|
-
def
|
|
376
|
-
#
|
|
383
|
+
def test_a_locally_built_store_is_not_this_branch(self):
|
|
384
|
+
# It has its own, below: no key to export, and an `unset` that is
|
|
385
|
+
# only safe when the local model is installed. Under this class's
|
|
386
|
+
# fixture no key is set at all, so nothing outranks local and the
|
|
387
|
+
# rebuild really is the answer.
|
|
377
388
|
st = self._status(built_provider="local", provider="voyage")
|
|
378
389
|
assert dense.fix_hint("provider-changed", st) == \
|
|
379
390
|
_table("provider-changed")
|
|
@@ -536,6 +547,148 @@ class TestProviderChangedIsWhereALostKeyActuallyLands:
|
|
|
536
547
|
assert env in hint
|
|
537
548
|
|
|
538
549
|
|
|
550
|
+
class TestALocallyBuiltStoreDisplacedByAKey:
|
|
551
|
+
"""The mirror of the class above, and the direction that costs money.
|
|
552
|
+
|
|
553
|
+
`boost quickstart` imports the published shards, and those are keyless by
|
|
554
|
+
policy — 384-d `BAAI/bge-small-en-v1.5`, built by the local model. So the
|
|
555
|
+
default on-ramp leaves every user with a local-built store, and the first
|
|
556
|
+
time one of them exports a Voyage or OpenAI key for anything at all,
|
|
557
|
+
`embed.provider` prefers it, semantic search goes quiet, and the table's
|
|
558
|
+
row bills them to get it back. `embed.outranking("local")` already knows
|
|
559
|
+
the free answer; before this class nothing asked it.
|
|
560
|
+
|
|
561
|
+
Reproduced at 645,592 chunks during the adversarial pass on the keyed
|
|
562
|
+
branch, which is why that PR shipped with a qualifier in
|
|
563
|
+
`docs/semantic-search.md` pointing at this one.
|
|
564
|
+
"""
|
|
565
|
+
|
|
566
|
+
def _status(self, **over):
|
|
567
|
+
st = {"reason": "provider-changed", "provider": "voyage",
|
|
568
|
+
"built_provider": "local", "built_model": "bge-small-en-v1.5",
|
|
569
|
+
"built_dim": 384, "chunks": 645592, "store_exists": True,
|
|
570
|
+
"degraded": True}
|
|
571
|
+
st.update(over)
|
|
572
|
+
return st
|
|
573
|
+
|
|
574
|
+
@pytest.fixture(autouse=True)
|
|
575
|
+
def _local_is_installed(self, monkeypatch):
|
|
576
|
+
"""The local model present, and the keys under the test's control.
|
|
577
|
+
|
|
578
|
+
Patched on `embed` itself rather than on `localembed.installed`:
|
|
579
|
+
`local_installed` consults the memoised `_backend_cache` *first*, so a
|
|
580
|
+
test earlier in the same process that cached a missing backend makes a
|
|
581
|
+
patch one layer down invisible. Patching the name this module actually
|
|
582
|
+
calls cannot be shadowed that way.
|
|
583
|
+
"""
|
|
584
|
+
from boost_cli.core import embed
|
|
585
|
+
for env in embed.KEY_ENV.values():
|
|
586
|
+
monkeypatch.delenv(env, raising=False)
|
|
587
|
+
monkeypatch.delenv("BOOST_NO_EMBED", raising=False)
|
|
588
|
+
monkeypatch.setattr(embed, "local_installed", lambda: True)
|
|
589
|
+
|
|
590
|
+
def test_the_remedy_is_the_unset_not_the_rebuild(self, monkeypatch):
|
|
591
|
+
monkeypatch.setenv("VOYAGE_API_KEY", "v")
|
|
592
|
+
assert dense.fix_hint("provider-changed", self._status()) == (
|
|
593
|
+
"`unset VOYAGE_API_KEY` puts the local model back in front — or "
|
|
594
|
+
"`boost reindex --dense --force` re-embeds all 645,592 vectors "
|
|
595
|
+
"in voyage's space")
|
|
596
|
+
|
|
597
|
+
def test_every_key_in_front_is_named_in_one_unset(self, monkeypatch):
|
|
598
|
+
# Dropping `VOYAGE_API_KEY` alone falls through to `OPENAI_API_KEY`,
|
|
599
|
+
# which is no nearer the local space than the key it replaced — so a
|
|
600
|
+
# remedy naming only the live provider's key does not restore
|
|
601
|
+
# anything, and the user runs it to no effect.
|
|
602
|
+
monkeypatch.setenv("VOYAGE_API_KEY", "v")
|
|
603
|
+
monkeypatch.setenv("OPENAI_API_KEY", "o")
|
|
604
|
+
hint = dense.fix_hint("provider-changed", self._status())
|
|
605
|
+
assert "`unset VOYAGE_API_KEY OPENAI_API_KEY`" in hint
|
|
606
|
+
|
|
607
|
+
def test_it_never_says_the_store_has_a_key_of_its_own(self, monkeypatch):
|
|
608
|
+
# The keyed branch's sentence is "puts the store's own key back in
|
|
609
|
+
# front". A keyless store has no such key; what goes back in front is
|
|
610
|
+
# the model.
|
|
611
|
+
monkeypatch.setenv("VOYAGE_API_KEY", "v")
|
|
612
|
+
hint = dense.fix_hint("provider-changed", self._status())
|
|
613
|
+
assert "own key" not in hint
|
|
614
|
+
assert "export" not in hint
|
|
615
|
+
|
|
616
|
+
def test_without_the_local_model_the_unset_is_never_offered(
|
|
617
|
+
self, monkeypatch):
|
|
618
|
+
# The whole reason this is not a fourth branch of
|
|
619
|
+
# `_restore_built_space`. On a partial `[rag]` install, unsetting the
|
|
620
|
+
# one key in force sends `provider()` to None and the ladder to
|
|
621
|
+
# `no-key` — advice that switches off the only backend that worked.
|
|
622
|
+
from boost_cli.core import embed
|
|
623
|
+
monkeypatch.setattr(embed, "local_installed", lambda: False)
|
|
624
|
+
monkeypatch.setenv("VOYAGE_API_KEY", "v")
|
|
625
|
+
assert dense.fix_hint("provider-changed", self._status()) == \
|
|
626
|
+
_table("provider-changed")
|
|
627
|
+
|
|
628
|
+
def test_with_nothing_in_front_of_it_the_table_stands(self):
|
|
629
|
+
# No key set, so nothing displaced this store and there is nothing to
|
|
630
|
+
# unset. Unreachable through `status()` — `provider()` would resolve
|
|
631
|
+
# to local and the reason would not be `provider-changed` — but
|
|
632
|
+
# `fix_hint` is a pure function of its arguments and callers build
|
|
633
|
+
# these dicts by hand.
|
|
634
|
+
assert dense.fix_hint("provider-changed", self._status()) == \
|
|
635
|
+
_table("provider-changed")
|
|
636
|
+
|
|
637
|
+
@pytest.mark.parametrize("built", [None, "", "garbage"])
|
|
638
|
+
def test_a_store_naming_no_provider_is_never_told_to_unset(
|
|
639
|
+
self, monkeypatch, built):
|
|
640
|
+
# The hazard that makes the admission test explicit rather than
|
|
641
|
+
# "has a recorded provider": `embed.outranking` answers for a name
|
|
642
|
+
# outside `KEY_ENV` with *every* key in force, so a blank field would
|
|
643
|
+
# otherwise earn this user an `unset` over their whole keyring.
|
|
644
|
+
monkeypatch.setenv("VOYAGE_API_KEY", "v")
|
|
645
|
+
monkeypatch.setenv("OPENAI_API_KEY", "o")
|
|
646
|
+
hint = dense.fix_hint("provider-changed",
|
|
647
|
+
self._status(built_provider=built))
|
|
648
|
+
assert hint == _table("provider-changed")
|
|
649
|
+
assert "unset" not in hint
|
|
650
|
+
|
|
651
|
+
def test_an_empty_store_keeps_the_table(self, monkeypatch):
|
|
652
|
+
# Nothing on disk to put back in front of anything.
|
|
653
|
+
monkeypatch.setenv("VOYAGE_API_KEY", "v")
|
|
654
|
+
assert dense.fix_hint("provider-changed", self._status(chunks=0)) == \
|
|
655
|
+
_table("provider-changed")
|
|
656
|
+
|
|
657
|
+
def test_a_store_that_never_recorded_a_total_is_still_revived(
|
|
658
|
+
self, monkeypatch):
|
|
659
|
+
monkeypatch.setenv("VOYAGE_API_KEY", "v")
|
|
660
|
+
hint = dense.fix_hint("provider-changed", self._status(chunks=None))
|
|
661
|
+
assert "`unset VOYAGE_API_KEY`" in hint
|
|
662
|
+
assert "all vectors" in hint
|
|
663
|
+
|
|
664
|
+
def test_no_key_offers_the_extra_and_warns_off_the_key(self):
|
|
665
|
+
# `no-key` is "no key *and* no local backend", so for this store the
|
|
666
|
+
# model it was built with is precisely what went missing. The table's
|
|
667
|
+
# row is nearly right and ends in the one suggestion that is wrong
|
|
668
|
+
# here: setting a key displaces the store into another space, and
|
|
669
|
+
# with the local backend still absent the next status is
|
|
670
|
+
# `provider-changed` with nothing to unset back to.
|
|
671
|
+
#
|
|
672
|
+
# Pinned as the whole sentence, not a prefix: the clause that does the
|
|
673
|
+
# warning off is the *tail*, so a prefix assertion would let it be
|
|
674
|
+
# reworded — or emptied — without a test noticing.
|
|
675
|
+
hint = dense.fix_hint("no-key", self._status())
|
|
676
|
+
assert hint == (
|
|
677
|
+
"reinstall the extra: `%s` — it is the model all 645,592 vectors "
|
|
678
|
+
"were built with, and a key instead re-embeds them"
|
|
679
|
+
% dense.install_extra())
|
|
680
|
+
assert hint != _table("no-key")
|
|
681
|
+
assert "VOYAGE_API_KEY" not in hint
|
|
682
|
+
|
|
683
|
+
def test_no_key_still_exports_for_a_store_built_with_one(self):
|
|
684
|
+
# The widened admission must not swallow the keyed branch: a store
|
|
685
|
+
# built through a paid provider still gets its `export`, not the
|
|
686
|
+
# reinstall.
|
|
687
|
+
hint = dense.fix_hint("no-key", self._status(built_provider="voyage"))
|
|
688
|
+
assert "`export VOYAGE_API_KEY=...`" in hint
|
|
689
|
+
assert "reinstall the extra:" not in hint
|
|
690
|
+
|
|
691
|
+
|
|
539
692
|
class TestFallback:
|
|
540
693
|
"""An unknown reason must degrade to advice, not a KeyError in front of a user."""
|
|
541
694
|
|
|
@@ -385,6 +385,33 @@ def test_doctor_names_both_steps_when_a_preferred_key_displaced_the_store(
|
|
|
385
385
|
assert "unset VOYAGE_API_KEY" in res.out
|
|
386
386
|
|
|
387
387
|
|
|
388
|
+
def test_doctor_hands_a_local_store_the_unset_not_the_bill(
|
|
389
|
+
boost, sandbox, monkeypatch):
|
|
390
|
+
"""The end-to-end shape of the direction that costs money.
|
|
391
|
+
|
|
392
|
+
A `boost quickstart` machine: keyless 384-d shards imported, then a
|
|
393
|
+
Voyage key exported for something unrelated. `embed.provider` prefers the
|
|
394
|
+
key, dense goes quiet, and the table's row would re-embed every vector
|
|
395
|
+
through the very API whose key caused it. `local_installed` is forced on
|
|
396
|
+
because CI has no `[rag]` extra and the assertion must not flip with the
|
|
397
|
+
interpreter it runs under.
|
|
398
|
+
"""
|
|
399
|
+
monkeypatch.setattr(embed, "local_available", lambda: True)
|
|
400
|
+
monkeypatch.setattr(embed, "local_installed", lambda: True)
|
|
401
|
+
monkeypatch.setenv("VOYAGE_API_KEY", "v-test")
|
|
402
|
+
monkeypatch.delenv("OPENAI_API_KEY", raising=False)
|
|
403
|
+
_write_store(provider="local", model="BAAI/bge-small-en-v1.5", dim=384,
|
|
404
|
+
chunks=7)
|
|
405
|
+
res = boost("doctor", expect=None)
|
|
406
|
+
assert res.rc == 1
|
|
407
|
+
assert "unset VOYAGE_API_KEY" in res.out
|
|
408
|
+
# The two wordings that would be wrong here, pinned as absences: this
|
|
409
|
+
# store has no key of its own to export, and leading with the rebuild is
|
|
410
|
+
# the bill the whole branch exists to avoid.
|
|
411
|
+
assert "export VOYAGE_API_KEY" not in res.out
|
|
412
|
+
assert "own key" not in res.out
|
|
413
|
+
|
|
414
|
+
|
|
388
415
|
def test_doctor_says_an_empty_store_holds_no_vectors(boost, sandbox, keyed):
|
|
389
416
|
_write_store(chunks=0)
|
|
390
417
|
res = boost("doctor", expect=None)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|