boost-skill-cli 1.2.62__tar.gz → 1.2.64__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.62 → boost_skill_cli-1.2.64}/.gitignore +7 -0
- {boost_skill_cli-1.2.62/boost_skill_cli.egg-info → boost_skill_cli-1.2.64}/PKG-INFO +1 -1
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/dense.py +87 -14
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64/boost_skill_cli.egg-info}/PKG-INFO +1 -1
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_skill_cli.egg-info/SOURCES.txt +4 -0
- boost_skill_cli-1.2.64/docs/roadmap/items/dense-store-holds-every-vector-once-per-copy.md +79 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/tool-call-eval-tier.md +37 -15
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap.html +114 -17
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/eval_tools.py +84 -4
- boost_skill_cli-1.2.64/tests/eval/fixtures/claude_init_event.jsonl +2 -0
- boost_skill_cli-1.2.64/tests/unit/test_dense_boilerplate_cluster.py +229 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_eval_tools.py +32 -6
- boost_skill_cli-1.2.64/tests/unit/test_eval_tools_probe.py +127 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/.gitattributes +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/.lycheeignore +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/.vale/styles/boost/AIWriting.yml +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/.vale.ini +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/CLAUDE.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/DCO +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/GOVERNANCE.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/LICENSE +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/MAINTAINERS.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/MANIFEST.in +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/Makefile +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/README.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/SECURITY.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/SUPPORT.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/commands/quickstart.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/aihost.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/bmad.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/bootstrap.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/browse.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/builtin.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/catalogbundle.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/complete.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/hookhost.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/shards.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/data/rules/boost-first.mdc +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_langchain/__init__.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_langchain/_compat.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_langchain/graph.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_langchain/loader.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_langchain/py.typed +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_langchain/retriever.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/codecov.yml +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/adapters.html +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/bmad.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/carousel.html +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/chat.html +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/code-review.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/commands.html +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/commit-audit.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/demo.gif +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/demo.html +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/demo.tape +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/dependencies.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/eval-latest.json +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/eval.html +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/index.html +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/langchain.html +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/openssf-badge.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/BOOST-D27.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/ai-backend-fanout.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/boost-first-rule.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/branch-current-gate.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/cli-command-audit.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/dense-reindex-has-no-progress-or-durability.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/dense-reindex-reuses-whole-taps.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/gstack-tap-first-then-coexistence.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/install-path-disambiguation.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/mcp-cannot-read-a-skill-before-installing.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/openssf-silver.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/osps-baseline-levels.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/published-shards-have-no-consumer.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/relicence-apache-2.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/shard-runs-reembed-everything-weekly.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/vex-openvex-feed.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/weekly-vectors-had-no-ingestion-path.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/zip-strict-audit.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/security-design.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/semantic-search.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/verifying-releases.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/vex/meta.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/vex/openvex.json +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/evals/README.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/evals/__init__.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/evals/baseline.json +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/evals/metrics.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/evals/publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/examples/README.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/index.html +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/noxfile.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/pyproject.toml +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/add_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/build_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/build_vex.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/check_branch_current.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/check_dco.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/check_reproducible.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/eval_corpus.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/measure_registry.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/normalize_sdist.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/page_budget.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/publish_eval_json.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/publish_shards.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/serve_docs.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/scripts/shard_plan.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/setup.cfg +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/sonar-project.properties +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/style/README.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/style/boost.css +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/style/boost.js +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/style/demo.html +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/conftest.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/eval/taps-scale.txt +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/eval/tool_calls.jsonl +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/functional/test_bmad_all_hosts.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/functional/test_cli_catalog.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/functional/test_cli_hooks_gemini.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/functional/test_cli_pane_width.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/functional/test_cli_quickstart.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/functional/test_cli_tap_pins.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/functional/test_kind_conformance.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/langchain/conftest.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/langchain/test_graph.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/langchain/test_loader.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/langchain/test_retriever.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_action_pin_lockstep.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_aihost.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_bmad_core.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_boost_first_offer.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_bootstrap.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_bot_pr_dco.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_branch_current.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_browse.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_builtin.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_catalogbundle.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_check_dco.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_check_reproducible.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_clean_internal_cache.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_cli_update_shards.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_compact.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_complete.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_complete_rc_block.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_content_identity.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_crash_redaction.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_dense_embed_dedupe.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_dense_entry_reuse.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_dense_progress.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_dense_quantized.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_dense_ready_order.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_dense_shard_real_schema.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_dense_status_cheap.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_embed_truncated_response.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_eval_corpus.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_eval_grading.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_gemini_agent_sanitize.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_gitutil_lfs.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_gitutil_sparse.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_gstack_coexistence.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_hook_settings_hosts.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_hookhost.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_install_permission_error.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_langchain_packaging.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_link_ownership.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_mcp_read.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_measure_registry.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_normalize_sdist.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_page_budget.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_rag_fastpath.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_registry_control_chars.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_registry_parallel.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_rerank_cache.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_serve_docs.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_shard_plan.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_shards.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_shards_incremental.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_shards_ingest.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_shards_matrix.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_smoke_covers_every_command.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_store_materialize.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_sync_blocked_links.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_tap_pins.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_version_tags.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_vex.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_visual_harness_flags.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_workflow_concurrency_groups.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_workflow_push_has_credentials.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/visual/package-lock.json +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.2.62 → boost_skill_cli-1.2.64}/tests/visual/visual_check.mjs +0 -0
|
@@ -281,3 +281,10 @@ node_modules/
|
|
|
281
281
|
# config). Written into the repo root by the language-server tooling, not by
|
|
282
282
|
# boost, and specific to one developer's machine.
|
|
283
283
|
.serena/
|
|
284
|
+
|
|
285
|
+
# A SQLite artifact from a tool that passed ":memory:" as a path rather than as
|
|
286
|
+
# the in-memory sentinel. Junk either way, and on Windows it is worse than junk:
|
|
287
|
+
# a colon cannot appear in a filename there, so committing it makes `git
|
|
288
|
+
# checkout` fail with exit 128 and every Windows CI job dies before it runs a
|
|
289
|
+
# single test.
|
|
290
|
+
:memory:*
|
|
@@ -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.64'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 2, 64)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -15,6 +15,7 @@ are the expensive step, so an unchanged tap is never re-embedded.
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
17
|
import base64
|
|
18
|
+
import hashlib
|
|
18
19
|
import json
|
|
19
20
|
import sqlite3
|
|
20
21
|
from pathlib import Path
|
|
@@ -84,6 +85,27 @@ def _connect() -> sqlite3.Connection | None:
|
|
|
84
85
|
# and returns the same 60 rows, so the extra candidates are pure overhead.
|
|
85
86
|
RESCORE_POOL = 2048
|
|
86
87
|
|
|
88
|
+
#: How many result entries may share one byte-identical embedding.
|
|
89
|
+
#:
|
|
90
|
+
#: Registries paste boilerplate. On a real 657,587-chunk store the largest
|
|
91
|
+
#: cluster of byte-identical vectors is **1,464 copies spanning 1,464 distinct
|
|
92
|
+
#: skills across 2 taps** — one Composio/Rube tool-calling paragraph, vendored
|
|
93
|
+
#: into every skill in two registries. Identical vectors score an identical
|
|
94
|
+
#: distance, so `retrieve`'s tie-break (the displayed name) decided the page:
|
|
95
|
+
#: a query landing near that paragraph returned the alphabetically-first 60 of
|
|
96
|
+
#: the 1,464, measured **60 of 60 slots**, and every one of them matched on
|
|
97
|
+
#: text its skill did not write.
|
|
98
|
+
#:
|
|
99
|
+
#: `rag.dedupe_by_content` cannot reach this. It keys on the *entry* body
|
|
100
|
+
#: digest, and these are 1,464 genuinely different entries — correctly kept
|
|
101
|
+
#: apart. The repetition is one chunk *inside* each of them, which is a
|
|
102
|
+
#: different axis and the one `near-duplicate-items-eat-the-result-slots`
|
|
103
|
+
#: leaves open.
|
|
104
|
+
#:
|
|
105
|
+
#: Not 1, because two skills can legitimately share a paragraph that really is
|
|
106
|
+
#: the best answer; a handful shows that without letting it own the page.
|
|
107
|
+
MAX_PER_VECTOR = 3
|
|
108
|
+
|
|
87
109
|
|
|
88
110
|
def _quantizable(dim: int) -> bool:
|
|
89
111
|
"""Whether ``dim`` can be binary-quantized at all.
|
|
@@ -1101,8 +1123,11 @@ def quantize() -> dict | None:
|
|
|
1101
1123
|
|
|
1102
1124
|
|
|
1103
1125
|
def _knn(con: sqlite3.Connection, qblob: bytes,
|
|
1104
|
-
pool: int) -> list[tuple[int, float]]:
|
|
1105
|
-
"""``(chunk_id, cosine_distance)`` for the
|
|
1126
|
+
pool: int) -> list[tuple[int, float, bytes]]:
|
|
1127
|
+
"""``(chunk_id, cosine_distance, vector_key)`` for the nearest chunks.
|
|
1128
|
+
|
|
1129
|
+
``vector_key`` identifies the *embedding*, not the row: byte-identical
|
|
1130
|
+
vectors share one key, which is what :data:`MAX_PER_VECTOR` caps on.
|
|
1106
1131
|
|
|
1107
1132
|
Two-stage on a quantized store, one stage on a legacy one, and the answer
|
|
1108
1133
|
is the same either way — which is the whole point. `vec0` has no ANN index,
|
|
@@ -1132,14 +1157,43 @@ def _knn(con: sqlite3.Connection, qblob: bytes,
|
|
|
1132
1157
|
# Exact cosine over the candidates only. `vec_raw` is an ordinary
|
|
1133
1158
|
# rowid-keyed table precisely so this `IN` is an index lookup; the same
|
|
1134
1159
|
# clause against a vec0 table plans as a full scan (see _ensure_schema).
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1160
|
+
#
|
|
1161
|
+
# The embedding comes back too, and it is not waste: hashing it is what
|
|
1162
|
+
# lets `retrieve` tell "60 entries that each matched something" from
|
|
1163
|
+
# "60 copies of one paragraph". The bytes were already read to compute
|
|
1164
|
+
# the distance, so the only new cost is one sha256 per candidate.
|
|
1165
|
+
# No LIMIT, and that is the point: sqlite computes a distance for all
|
|
1166
|
+
# `cand` rows either way — a LIMIT only truncates what it hands back.
|
|
1167
|
+
# Truncating here is what let one cluster own the pool. The largest on
|
|
1168
|
+
# a real store is 1,464 copies of one pasted paragraph, so a 480-row
|
|
1169
|
+
# cut was 480 copies of it and the page had nothing else to rank.
|
|
1170
|
+
rows = con.execute(
|
|
1171
|
+
"SELECT id, vec_distance_cosine(embedding, ?) AS d, embedding " # noqa: S608 interpolates only `?` placeholders
|
|
1172
|
+
"FROM vec_raw WHERE id IN (%s) ORDER BY d"
|
|
1173
|
+
% ",".join("?" * len(cand)), (qblob, *cand)).fetchall()
|
|
1174
|
+
# Thin to `pool` while letting no single embedding take more than
|
|
1175
|
+
# MAX_PER_VECTOR of it. Rows arrive sorted, so the copies that survive
|
|
1176
|
+
# are the nearest ones and the slots freed go to the next *distinct*
|
|
1177
|
+
# vector rather than to the next copy of this one.
|
|
1178
|
+
out: list[tuple[int, float, bytes]] = []
|
|
1179
|
+
per: dict[bytes, int] = {}
|
|
1180
|
+
for rid, dist, blob in rows:
|
|
1181
|
+
if len(out) >= pool:
|
|
1182
|
+
break
|
|
1183
|
+
vkey = hashlib.sha256(blob).digest()[:16]
|
|
1184
|
+
if per.get(vkey, 0) >= MAX_PER_VECTOR:
|
|
1185
|
+
continue
|
|
1186
|
+
per[vkey] = per.get(vkey, 0) + 1
|
|
1187
|
+
out.append((rid, dist, vkey))
|
|
1188
|
+
return out
|
|
1189
|
+
# Legacy float32 layout: one row per chunk with no separate blob table, so
|
|
1190
|
+
# there is nothing cheap to hash. Each row becomes its own group, which
|
|
1191
|
+
# makes the cap a no-op — correct rather than clever, because this path
|
|
1192
|
+
# exists for widths `bit[N]` cannot take and no real store is on it.
|
|
1193
|
+
return [(rid, dist, b"%d" % rid) for rid, dist in con.execute(
|
|
1140
1194
|
"SELECT rowid, distance FROM vec_chunks "
|
|
1141
1195
|
"WHERE embedding MATCH ? ORDER BY distance LIMIT ?",
|
|
1142
|
-
(qblob, pool)).fetchall()
|
|
1196
|
+
(qblob, pool)).fetchall()]
|
|
1143
1197
|
|
|
1144
1198
|
|
|
1145
1199
|
def retrieve(query: str, k: int = 60, kind: str | None = None,
|
|
@@ -1169,14 +1223,18 @@ def retrieve(query: str, k: int = 60, kind: str | None = None,
|
|
|
1169
1223
|
return []
|
|
1170
1224
|
by_id = {r[0]: (r[1], r[2], r[3], r[4]) for r in con.execute(
|
|
1171
1225
|
"SELECT id, tap, path, kind, snip FROM chunks WHERE id IN (%s)" # noqa: S608 interpolates only `?` placeholders; ids are bound params
|
|
1172
|
-
% ",".join("?" * len(knn)), [rid for rid, _d in knn])}
|
|
1226
|
+
% ",".join("?" * len(knn)), [rid for rid, _d, _v in knn])}
|
|
1173
1227
|
finally:
|
|
1174
1228
|
con.close()
|
|
1175
1229
|
|
|
1176
1230
|
entries = catalog.all_entries() if entries is None else entries
|
|
1177
1231
|
live = {entry_key(e): e for e in entries}
|
|
1178
1232
|
best: dict[tuple[str, str], tuple[float, str]] = {}
|
|
1179
|
-
|
|
1233
|
+
# Which embedding won each entry its score. An entry that also matched on
|
|
1234
|
+
# a chunk of its own keeps *that* pairing, because `best` only records the
|
|
1235
|
+
# winner — so capping below never costs an entry a hit it earned itself.
|
|
1236
|
+
won_by: dict[tuple[str, str], bytes] = {}
|
|
1237
|
+
for rid, dist, vkey in knn:
|
|
1180
1238
|
meta = by_id.get(rid)
|
|
1181
1239
|
if meta is None:
|
|
1182
1240
|
continue
|
|
@@ -1190,11 +1248,26 @@ def retrieve(query: str, k: int = 60, kind: str | None = None,
|
|
|
1190
1248
|
prev = best.get(key)
|
|
1191
1249
|
if prev is None or score > prev[0]:
|
|
1192
1250
|
best[key] = (score, snip)
|
|
1251
|
+
won_by[key] = vkey
|
|
1193
1252
|
# Tie-break on the displayed name (see rag.retrieve for why).
|
|
1194
1253
|
ranked = sorted(best.items(),
|
|
1195
1254
|
key=lambda kv: (-kv[1][0], live[kv[0]]["name"], kv[0]))
|
|
1196
|
-
hits: list[Hit] = [
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1255
|
+
hits: list[Hit] = []
|
|
1256
|
+
seen_vec: dict[bytes, int] = {}
|
|
1257
|
+
for key, (score, snip) in ranked:
|
|
1258
|
+
if len(hits) >= k:
|
|
1259
|
+
break
|
|
1260
|
+
# The cap, and the reason the sort above is not enough on its own:
|
|
1261
|
+
# byte-identical vectors produce a byte-identical distance, so every
|
|
1262
|
+
# entry sharing one arrives with the *same* score and the tie-break
|
|
1263
|
+
# decides the page alphabetically. Measured on a real store, one
|
|
1264
|
+
# 1,464-copy cluster took 60 of 60 slots that way. Skipping past the
|
|
1265
|
+
# cap rather than truncating keeps the page full: the freed slots go
|
|
1266
|
+
# to the next entries that matched on something else.
|
|
1267
|
+
vkey = won_by[key]
|
|
1268
|
+
if seen_vec.get(vkey, 0) >= MAX_PER_VECTOR:
|
|
1269
|
+
continue
|
|
1270
|
+
seen_vec[vkey] = seen_vec.get(vkey, 0) + 1
|
|
1271
|
+
hits.append({"entry": live[key], "score": score,
|
|
1272
|
+
"snippet": snip}) # type: ignore[typeddict-item]
|
|
1200
1273
|
return hits
|
|
@@ -257,6 +257,7 @@ docs/roadmap/items/dense-reindex-has-no-progress-or-durability.md
|
|
|
257
257
|
docs/roadmap/items/dense-reindex-reuses-whole-taps.md
|
|
258
258
|
docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md
|
|
259
259
|
docs/roadmap/items/dense-search-rescans-every-vector.md
|
|
260
|
+
docs/roadmap/items/dense-store-holds-every-vector-once-per-copy.md
|
|
260
261
|
docs/roadmap/items/dependabot-missing-pip-ecosystem.md
|
|
261
262
|
docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md
|
|
262
263
|
docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md
|
|
@@ -591,6 +592,7 @@ tests/eval/recommend.jsonl
|
|
|
591
592
|
tests/eval/taps-scale.txt
|
|
592
593
|
tests/eval/taps.txt
|
|
593
594
|
tests/eval/tool_calls.jsonl
|
|
595
|
+
tests/eval/fixtures/claude_init_event.jsonl
|
|
594
596
|
tests/functional/test_bmad_all_hosts.py
|
|
595
597
|
tests/functional/test_capabilities_policy.py
|
|
596
598
|
tests/functional/test_cli_adapt.py
|
|
@@ -688,6 +690,7 @@ tests/unit/test_crash_redaction.py
|
|
|
688
690
|
tests/unit/test_dedup_trust.py
|
|
689
691
|
tests/unit/test_demo_index.py
|
|
690
692
|
tests/unit/test_dense.py
|
|
693
|
+
tests/unit/test_dense_boilerplate_cluster.py
|
|
691
694
|
tests/unit/test_dense_embed_dedupe.py
|
|
692
695
|
tests/unit/test_dense_entry_reuse.py
|
|
693
696
|
tests/unit/test_dense_fallback.py
|
|
@@ -717,6 +720,7 @@ tests/unit/test_eval_grading.py
|
|
|
717
720
|
tests/unit/test_eval_metrics.py
|
|
718
721
|
tests/unit/test_eval_stats_summary.py
|
|
719
722
|
tests/unit/test_eval_tools.py
|
|
723
|
+
tests/unit/test_eval_tools_probe.py
|
|
720
724
|
tests/unit/test_failure_alerting_covers_unattended.py
|
|
721
725
|
tests/unit/test_faithfulness.py
|
|
722
726
|
tests/unit/test_frontmatter.py
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: dense-store-holds-every-vector-once-per-copy
|
|
3
|
+
board: code
|
|
4
|
+
section: internals
|
|
5
|
+
status: planned
|
|
6
|
+
category: Search · Storage
|
|
7
|
+
complexity: L
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 3
|
|
10
|
+
note: 39.7% of vector rows are byte-identical repeats; 1.43x whole-store, no re-embedding
|
|
11
|
+
order: 128
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: The dense store keeps one vector per <em>copy</em>, not one per distinct text
|
|
15
|
+
---
|
|
16
|
+
<code>_embed_and_store</code> already buys each distinct text <b>once</b> — <code>seen</code>
|
|
17
|
+
de-duplicates before the provider call, which is why <code>build</code>'s progress total counts
|
|
18
|
+
distinct texts rather than rows. The <em>storage</em> never got the same treatment: every chunk row
|
|
19
|
+
still gets its own <code>vec_raw</code> blob and its own <code>vec_chunks_bin</code> row, so a text
|
|
20
|
+
vendored into 1,464 skills is stored 1,464 times.
|
|
21
|
+
|
|
22
|
+
<b>Measured on a real store</b> (657,587 chunks, 384-d <code>BAAI/bge-small-en-v1.5</code>):
|
|
23
|
+
657,587 vector rows collapse to <b>396,638 distinct</b> — 39.7% repeats, <b>1.658×</b>.
|
|
24
|
+
The earlier 750,416-chunk / 1024-d Voyage store measured 42.9%, so the ratio is a property of the
|
|
25
|
+
corpus rather than of one embedder.
|
|
26
|
+
|
|
27
|
+
<b>State the payoff in the right scope.</b> The <code>#544</code> note said “~1.75×”
|
|
28
|
+
without saying of what, and that reads as a whole-store number. It is not. From <code>dbstat</code>
|
|
29
|
+
on the live file: <code>vec_raw</code> 1,287.6 MB and <code>vec_chunks_bin</code> 45.1 MB
|
|
30
|
+
of a 1,634 MB total, so vectors are <b>81.6%</b> of the file. Deduplicating them saves
|
|
31
|
+
<b>529 MB</b>; add back a <code>vid</code> column, a hash index and a <code>chunks(vid)</code>
|
|
32
|
+
index and the honest figure is <b>1,634 → ~1,140 MB, 1.43× whole-store</b>. On a
|
|
33
|
+
1024-d store, where vectors are ~90% of the file, it lands nearer 1.6×.
|
|
34
|
+
|
|
35
|
+
<b>The key must be the embedding blob, not the text — and this is the constraint that decides
|
|
36
|
+
the design.</b> <code>export_shard</code> emits <code>name/tap/path/kind/cix/snip/digest/embedding</code>
|
|
37
|
+
and <code>snip</code> is <code>text[:200]</code>: <b>the full chunk text is not in the store and not
|
|
38
|
+
in the shard</b>, so <code>import_shard</code> has nothing to hash. A <code>text_hash</code> column
|
|
39
|
+
is unpopulatable on the import path. <code>sha256(embedding)</code> is equivalent by construction
|
|
40
|
+
— identical texts are embedded once and serialize to identical bytes — and it works for
|
|
41
|
+
imports and for the migration.
|
|
42
|
+
|
|
43
|
+
<b>No join table.</b> <code>#544</code> proposed a chunk→tap join table; <code>chunks</code>
|
|
44
|
+
already <em>is</em> that table and already carries <code>tap</code>. The change is one
|
|
45
|
+
<code>vid</code> column on <code>chunks</code>, a <code>vectors</code> relation, and
|
|
46
|
+
<code>vec_chunks_bin</code> keyed by <code>vid</code>.
|
|
47
|
+
|
|
48
|
+
<b>Three things break, and one of them is an ordering.</b> <code>_delete_matching</code> drops
|
|
49
|
+
vectors <em>then</em> rows; refcounted GC must run <em>after</em> the row delete or it counts
|
|
50
|
+
references about to vanish. <code>_store_vector</code>'s orphan guard stops being sufficient, because
|
|
51
|
+
under dedup a <code>_COMMIT_EVERY</code> interrupt makes orphans structural rather than exceptional.
|
|
52
|
+
And <code>export_shard</code>'s <code>v.id = c.id</code> join becomes <code>v.vid = c.vid</code>
|
|
53
|
+
— the same shape whose breakage the docstring already records as having killed two scheduled
|
|
54
|
+
<code>shards</code> runs.
|
|
55
|
+
|
|
56
|
+
<b>In place, not an <code>INDEX_VERSION</code> bump.</b> Every input is already on disk, so the
|
|
57
|
+
migration re-encodes rather than re-embeds — the posture <code>quantize()</code> established,
|
|
58
|
+
and roughly its cost (~1360 s, ~2× peak while both copies coexist), except that this one
|
|
59
|
+
ends <em>smaller</em>. <code>dense.py</code> promises in writing that v3's re-embed is
|
|
60
|
+
“the last one this mechanism needs”; a v4 wipe would charge every user a full re-embed
|
|
61
|
+
to reclaim disk, which is the wrong trade even where the embedder is free.
|
|
62
|
+
|
|
63
|
+
<b>The quality half is already fixed, and this card is not blocked on it.</b>
|
|
64
|
+
<code>MAX_PER_VECTOR</code> thins the candidate pool and caps the page, which is what stopped one
|
|
65
|
+
1,464-copy cluster taking 60 of 60 result slots. Dedup would make the pool distinct
|
|
66
|
+
<em>structurally</em> rather than by thinning, and would let <code>_knn</code> stop hashing 2,048
|
|
67
|
+
blobs per query — a simplification, not a rescue.
|
|
68
|
+
|
|
69
|
+
<b>The free bonus nobody has claimed:</b> <code>seen</code> in <code>_embed_and_store</code> is a
|
|
70
|
+
local rebuilt per call, so reuse is <em>per build</em>. A persisted blob-keyed table makes it
|
|
71
|
+
cross-build and cross-tap: a newly tapped mirror registry would cost zero embeddings.
|
|
72
|
+
|
|
73
|
+
<b>Biggest risk, named:</b> a third schema state. The store already branches float32 vs quantized
|
|
74
|
+
through every vector-touching function; “deduplicated or not” makes four combinations,
|
|
75
|
+
each needing mutant-killing tests. And the one invariant that catches silent corruption —
|
|
76
|
+
<code>test_dense_entry_reuse.py</code>'s two-way <code>chunks.id</code> ↔ <code>vec_raw.id</code>
|
|
77
|
+
bijection — must be <b>rewritten</b> rather than extended, because dedup breaks one direction
|
|
78
|
+
by design. Its replacement: every <code>chunks.vid</code> resolves, and every <code>vectors</code>
|
|
79
|
+
row has at least one referent.
|
|
@@ -7,7 +7,7 @@ category: Quality · Eval
|
|
|
7
7
|
complexity: L
|
|
8
8
|
impact: High
|
|
9
9
|
wow: 4
|
|
10
|
-
note: Claude Code
|
|
10
|
+
note: the Claude Code probe was broken and its finding was an artifact; fixed, second host still unwritten
|
|
11
11
|
owner:
|
|
12
12
|
order: 96
|
|
13
13
|
title: a Tier 3 eval for tool-call behaviour, floored in <b>both</b> directions
|
|
@@ -61,22 +61,44 @@ N runs per prompt with an interval rather than a single pass/fail, the way
|
|
|
61
61
|
<code>golden-set-statistical-power</code> established for retrieval — a one-shot replay cannot tell
|
|
62
62
|
a wording regression from a sampling wobble.
|
|
63
63
|
|
|
64
|
-
<b>Where this stands (2026-08-
|
|
64
|
+
<b>Where this stands (2026-08-31), and a correction.</b> The Claude Code arm shipped in #616:
|
|
65
65
|
<code>scripts/eval_tools.py</code>, a 16-prompt set halved into should-call and should-NOT-call,
|
|
66
|
-
Wilson intervals over N runs, and a verdict that floors call rate <em>and</em> ceilings false
|
|
67
|
-
calls. Its first real run measured <b>3/3 false calls</b> — boost's tools fired on "What is
|
|
68
|
-
the difference between a Python list and a tuple?", which the shipped skip list excuses by name.
|
|
69
|
-
Call rate alone would have scored that a perfect 1.00, which is the whole argument for flooring
|
|
70
|
-
both directions, now with a number behind it.
|
|
66
|
+
Wilson intervals over N runs, and a verdict that floors call rate <em>and</em> ceilings false calls.
|
|
71
67
|
|
|
72
|
-
<b>
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
68
|
+
<b>Its probe was broken, and the finding this card recorded was an artifact of it.</b> An earlier
|
|
69
|
+
revision of this card reported “3/3 false calls — boost's tools fired on <em>What is the
|
|
70
|
+
difference between a Python list and a tuple?</em>”. They did not fire. <code>called_boost()</code>
|
|
71
|
+
substring-scanned the raw event stream, and <code>claude -p --output-format stream-json --verbose</code>
|
|
72
|
+
opens with a <code>system</code>/<code>init</code> event enumerating <em>every tool available to the
|
|
73
|
+
session</em> — which on any machine where boost is registered contains
|
|
74
|
+
<code>mcp__boost__boost_search</code> and the other three CONSULT names. So the check returned
|
|
75
|
+
<code>true</code> on every run, including runs with no tool call at all. Measured directly:
|
|
76
|
+
<code>Say OK and nothing else.</code> produced zero <code>tool_use</code> blocks and scored as a
|
|
77
|
+
boost consult.
|
|
78
|
+
|
|
79
|
+
Two consequences shipped with it. <code>make eval-tools</code> could never pass — eight
|
|
80
|
+
no-call rows × three runs is 24 forced trues, so the false-call rate's lower bound sat at
|
|
81
|
+
1.00 against a 0.20 ceiling, red on every machine forever. And the tier built to retire
|
|
82
|
+
unfalsifiable claims had produced one. <b>The lesson is the tier's own:</b> the existing tests
|
|
83
|
+
passed because they fed hand-written one-line fragments with no <code>init</code> event — a
|
|
84
|
+
fixture the author invented could not catch the author's wrong model of the input. The probe now
|
|
85
|
+
parses the NDJSON and counts only <code>tool_use</code> blocks inside <code>assistant</code>
|
|
86
|
+
events, and the regression test drives a <b>captured real stream</b>.
|
|
87
|
+
|
|
88
|
+
<b>The second host arm is still unwritten, and should stay that way until the fixed probe is
|
|
89
|
+
re-run.</b> Building arm two on a probe that cannot tell an offer from a call would produce two
|
|
90
|
+
hosts scoring an identical, meaningless 1.00. When it is built, the candidate is <b>Gemini CLI
|
|
91
|
+
proper</b>, not Antigravity CLI: the delivery claim below is about Gemini's Node bundle, and
|
|
92
|
+
<code>agy</code> is a third mode again — it receives boost's <code>instructions</code> and
|
|
93
|
+
writes them to <code>~/.gemini/antigravity-cli/mcp/boost/instructions.md</code>, pointing the agent
|
|
94
|
+
at the file rather than inlining it. Substituting it would measure a different mechanism than the
|
|
95
|
+
one this card argues about.
|
|
96
|
+
|
|
97
|
+
<b>Cost, now measured.</b> Two trivial runs on a real host reported <code>$0.657</code> and
|
|
98
|
+
<code>$0.682</code> of <code>total_cost_usd</code>, so 16 prompts × 3 runs is roughly
|
|
99
|
+
<b>$30–50 per host per invocation</b> on a machine with a crowded tool surface.
|
|
100
|
+
<code>--strict-mcp-config</code> with a boost-only config cuts that sharply and controls the
|
|
101
|
+
surface confound in the same move.
|
|
80
102
|
|
|
81
103
|
<b>What it unlocks.</b> The first honest answer to "did that description edit help", a baseline the
|
|
82
104
|
next surface change can regress against, and a way to retire claims that survive only because
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
<div class="stat"><b>20</b><span>Shipped</span></div>
|
|
134
134
|
<div class="stat"><b>1</b><span>Next up</span></div>
|
|
135
135
|
<div class="stat"><b>7</b><span>Planned</span></div>
|
|
136
|
-
<div class="stat"><b>
|
|
136
|
+
<div class="stat"><b>291</b><span>Loop finds</span></div>
|
|
137
137
|
<!-- /ROADMAP:stats -->
|
|
138
138
|
</div>
|
|
139
139
|
</section>
|
|
@@ -865,22 +865,44 @@ N runs per prompt with an interval rather than a single pass/fail, the way
|
|
|
865
865
|
<code>golden-set-statistical-power</code> established for retrieval — a one-shot replay cannot tell
|
|
866
866
|
a wording regression from a sampling wobble.
|
|
867
867
|
|
|
868
|
-
<b>Where this stands (2026-08-
|
|
868
|
+
<b>Where this stands (2026-08-31), and a correction.</b> The Claude Code arm shipped in #616:
|
|
869
869
|
<code>scripts/eval_tools.py</code>, a 16-prompt set halved into should-call and should-NOT-call,
|
|
870
|
-
Wilson intervals over N runs, and a verdict that floors call rate <em>and</em> ceilings false
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
870
|
+
Wilson intervals over N runs, and a verdict that floors call rate <em>and</em> ceilings false calls.
|
|
871
|
+
|
|
872
|
+
<b>Its probe was broken, and the finding this card recorded was an artifact of it.</b> An earlier
|
|
873
|
+
revision of this card reported “3/3 false calls — boost's tools fired on <em>What is the
|
|
874
|
+
difference between a Python list and a tuple?</em>”. They did not fire. <code>called_boost()</code>
|
|
875
|
+
substring-scanned the raw event stream, and <code>claude -p --output-format stream-json --verbose</code>
|
|
876
|
+
opens with a <code>system</code>/<code>init</code> event enumerating <em>every tool available to the
|
|
877
|
+
session</em> — which on any machine where boost is registered contains
|
|
878
|
+
<code>mcp__boost__boost_search</code> and the other three CONSULT names. So the check returned
|
|
879
|
+
<code>true</code> on every run, including runs with no tool call at all. Measured directly:
|
|
880
|
+
<code>Say OK and nothing else.</code> produced zero <code>tool_use</code> blocks and scored as a
|
|
881
|
+
boost consult.
|
|
882
|
+
|
|
883
|
+
Two consequences shipped with it. <code>make eval-tools</code> could never pass — eight
|
|
884
|
+
no-call rows × three runs is 24 forced trues, so the false-call rate's lower bound sat at
|
|
885
|
+
1.00 against a 0.20 ceiling, red on every machine forever. And the tier built to retire
|
|
886
|
+
unfalsifiable claims had produced one. <b>The lesson is the tier's own:</b> the existing tests
|
|
887
|
+
passed because they fed hand-written one-line fragments with no <code>init</code> event — a
|
|
888
|
+
fixture the author invented could not catch the author's wrong model of the input. The probe now
|
|
889
|
+
parses the NDJSON and counts only <code>tool_use</code> blocks inside <code>assistant</code>
|
|
890
|
+
events, and the regression test drives a <b>captured real stream</b>.
|
|
891
|
+
|
|
892
|
+
<b>The second host arm is still unwritten, and should stay that way until the fixed probe is
|
|
893
|
+
re-run.</b> Building arm two on a probe that cannot tell an offer from a call would produce two
|
|
894
|
+
hosts scoring an identical, meaningless 1.00. When it is built, the candidate is <b>Gemini CLI
|
|
895
|
+
proper</b>, not Antigravity CLI: the delivery claim below is about Gemini's Node bundle, and
|
|
896
|
+
<code>agy</code> is a third mode again — it receives boost's <code>instructions</code> and
|
|
897
|
+
writes them to <code>~/.gemini/antigravity-cli/mcp/boost/instructions.md</code>, pointing the agent
|
|
898
|
+
at the file rather than inlining it. Substituting it would measure a different mechanism than the
|
|
899
|
+
one this card argues about.
|
|
900
|
+
|
|
901
|
+
<b>Cost, now measured.</b> Two trivial runs on a real host reported <code>$0.657</code> and
|
|
902
|
+
<code>$0.682</code> of <code>total_cost_usd</code>, so 16 prompts × 3 runs is roughly
|
|
903
|
+
<b>$30–50 per host per invocation</b> on a machine with a crowded tool surface.
|
|
904
|
+
<code>--strict-mcp-config</code> with a boost-only config cuts that sharply and controls the
|
|
905
|
+
surface confound in the same move.
|
|
884
906
|
|
|
885
907
|
<b>What it unlocks.</b> The first honest answer to "did that description edit help", a baseline the
|
|
886
908
|
next surface change can regress against, and a way to retire claims that survive only because
|
|
@@ -889,7 +911,7 @@ nobody can check them.</p>
|
|
|
889
911
|
<span class="m">Complexity <b>L</b></span>
|
|
890
912
|
<span class="m hi">Impact <b>High</b></span>
|
|
891
913
|
<span class="m">Wow <b class="wow">★★★★</b></span>
|
|
892
|
-
<span class="m">Claude Code
|
|
914
|
+
<span class="m">the Claude Code probe was broken and its finding was an artifact; fixed, second host still unwritten</span>
|
|
893
915
|
</div>
|
|
894
916
|
</article>
|
|
895
917
|
|
|
@@ -4886,6 +4908,81 @@ existing table, and <code>build</code> already wipes on a version change. One fu
|
|
|
4886
4908
|
<span class="m">one changed file re-embeds 29 min for 1.9 s of new text</span>
|
|
4887
4909
|
</div>
|
|
4888
4910
|
</article>
|
|
4911
|
+
|
|
4912
|
+
<article class="cap rcard" id="dense-store-holds-every-vector-once-per-copy">
|
|
4913
|
+
<div class="head"><span class="pill planned">Planned</span><span class="cat">Search · Storage</span></div>
|
|
4914
|
+
<h3>The dense store keeps one vector per <em>copy</em>, not one per distinct text</h3>
|
|
4915
|
+
<p><code>_embed_and_store</code> already buys each distinct text <b>once</b> — <code>seen</code>
|
|
4916
|
+
de-duplicates before the provider call, which is why <code>build</code>'s progress total counts
|
|
4917
|
+
distinct texts rather than rows. The <em>storage</em> never got the same treatment: every chunk row
|
|
4918
|
+
still gets its own <code>vec_raw</code> blob and its own <code>vec_chunks_bin</code> row, so a text
|
|
4919
|
+
vendored into 1,464 skills is stored 1,464 times.
|
|
4920
|
+
|
|
4921
|
+
<b>Measured on a real store</b> (657,587 chunks, 384-d <code>BAAI/bge-small-en-v1.5</code>):
|
|
4922
|
+
657,587 vector rows collapse to <b>396,638 distinct</b> — 39.7% repeats, <b>1.658×</b>.
|
|
4923
|
+
The earlier 750,416-chunk / 1024-d Voyage store measured 42.9%, so the ratio is a property of the
|
|
4924
|
+
corpus rather than of one embedder.
|
|
4925
|
+
|
|
4926
|
+
<b>State the payoff in the right scope.</b> The <code>#544</code> note said “~1.75×”
|
|
4927
|
+
without saying of what, and that reads as a whole-store number. It is not. From <code>dbstat</code>
|
|
4928
|
+
on the live file: <code>vec_raw</code> 1,287.6 MB and <code>vec_chunks_bin</code> 45.1 MB
|
|
4929
|
+
of a 1,634 MB total, so vectors are <b>81.6%</b> of the file. Deduplicating them saves
|
|
4930
|
+
<b>529 MB</b>; add back a <code>vid</code> column, a hash index and a <code>chunks(vid)</code>
|
|
4931
|
+
index and the honest figure is <b>1,634 → ~1,140 MB, 1.43× whole-store</b>. On a
|
|
4932
|
+
1024-d store, where vectors are ~90% of the file, it lands nearer 1.6×.
|
|
4933
|
+
|
|
4934
|
+
<b>The key must be the embedding blob, not the text — and this is the constraint that decides
|
|
4935
|
+
the design.</b> <code>export_shard</code> emits <code>name/tap/path/kind/cix/snip/digest/embedding</code>
|
|
4936
|
+
and <code>snip</code> is <code>text[:200]</code>: <b>the full chunk text is not in the store and not
|
|
4937
|
+
in the shard</b>, so <code>import_shard</code> has nothing to hash. A <code>text_hash</code> column
|
|
4938
|
+
is unpopulatable on the import path. <code>sha256(embedding)</code> is equivalent by construction
|
|
4939
|
+
— identical texts are embedded once and serialize to identical bytes — and it works for
|
|
4940
|
+
imports and for the migration.
|
|
4941
|
+
|
|
4942
|
+
<b>No join table.</b> <code>#544</code> proposed a chunk→tap join table; <code>chunks</code>
|
|
4943
|
+
already <em>is</em> that table and already carries <code>tap</code>. The change is one
|
|
4944
|
+
<code>vid</code> column on <code>chunks</code>, a <code>vectors</code> relation, and
|
|
4945
|
+
<code>vec_chunks_bin</code> keyed by <code>vid</code>.
|
|
4946
|
+
|
|
4947
|
+
<b>Three things break, and one of them is an ordering.</b> <code>_delete_matching</code> drops
|
|
4948
|
+
vectors <em>then</em> rows; refcounted GC must run <em>after</em> the row delete or it counts
|
|
4949
|
+
references about to vanish. <code>_store_vector</code>'s orphan guard stops being sufficient, because
|
|
4950
|
+
under dedup a <code>_COMMIT_EVERY</code> interrupt makes orphans structural rather than exceptional.
|
|
4951
|
+
And <code>export_shard</code>'s <code>v.id = c.id</code> join becomes <code>v.vid = c.vid</code>
|
|
4952
|
+
— the same shape whose breakage the docstring already records as having killed two scheduled
|
|
4953
|
+
<code>shards</code> runs.
|
|
4954
|
+
|
|
4955
|
+
<b>In place, not an <code>INDEX_VERSION</code> bump.</b> Every input is already on disk, so the
|
|
4956
|
+
migration re-encodes rather than re-embeds — the posture <code>quantize()</code> established,
|
|
4957
|
+
and roughly its cost (~1360 s, ~2× peak while both copies coexist), except that this one
|
|
4958
|
+
ends <em>smaller</em>. <code>dense.py</code> promises in writing that v3's re-embed is
|
|
4959
|
+
“the last one this mechanism needs”; a v4 wipe would charge every user a full re-embed
|
|
4960
|
+
to reclaim disk, which is the wrong trade even where the embedder is free.
|
|
4961
|
+
|
|
4962
|
+
<b>The quality half is already fixed, and this card is not blocked on it.</b>
|
|
4963
|
+
<code>MAX_PER_VECTOR</code> thins the candidate pool and caps the page, which is what stopped one
|
|
4964
|
+
1,464-copy cluster taking 60 of 60 result slots. Dedup would make the pool distinct
|
|
4965
|
+
<em>structurally</em> rather than by thinning, and would let <code>_knn</code> stop hashing 2,048
|
|
4966
|
+
blobs per query — a simplification, not a rescue.
|
|
4967
|
+
|
|
4968
|
+
<b>The free bonus nobody has claimed:</b> <code>seen</code> in <code>_embed_and_store</code> is a
|
|
4969
|
+
local rebuilt per call, so reuse is <em>per build</em>. A persisted blob-keyed table makes it
|
|
4970
|
+
cross-build and cross-tap: a newly tapped mirror registry would cost zero embeddings.
|
|
4971
|
+
|
|
4972
|
+
<b>Biggest risk, named:</b> a third schema state. The store already branches float32 vs quantized
|
|
4973
|
+
through every vector-touching function; “deduplicated or not” makes four combinations,
|
|
4974
|
+
each needing mutant-killing tests. And the one invariant that catches silent corruption —
|
|
4975
|
+
<code>test_dense_entry_reuse.py</code>'s two-way <code>chunks.id</code> ↔ <code>vec_raw.id</code>
|
|
4976
|
+
bijection — must be <b>rewritten</b> rather than extended, because dedup breaks one direction
|
|
4977
|
+
by design. Its replacement: every <code>chunks.vid</code> resolves, and every <code>vectors</code>
|
|
4978
|
+
row has at least one referent.</p>
|
|
4979
|
+
<div class="meta">
|
|
4980
|
+
<span class="m">Complexity <b>L</b></span>
|
|
4981
|
+
<span class="m">Impact <b>Med</b></span>
|
|
4982
|
+
<span class="m">Wow <b class="wow">★★★</b></span>
|
|
4983
|
+
<span class="m">39.7% of vector rows are byte-identical repeats; 1.43x whole-store, no re-embedding</span>
|
|
4984
|
+
</div>
|
|
4985
|
+
</article>
|
|
4889
4986
|
<!-- /ROADMAP:cards -->
|
|
4890
4987
|
|
|
4891
4988
|
</div>
|