boost-skill-cli 1.0.349__tar.gz → 1.0.351__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/PKG-INFO +1 -1
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/cli.py +20 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/configuration.py +6 -23
- boost_skill_cli-1.0.351/boost_cli/core/complete.py +199 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_skill_cli.egg-info/PKG-INFO +1 -1
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_skill_cli.egg-info/SOURCES.txt +3 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/completions-complete-only-command-names.md +39 -2
- boost_skill_cli-1.0.351/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +47 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +46 -1
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap.html +130 -6
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/pyproject.toml +3 -5
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_cli_configuration.py +56 -25
- boost_skill_cli-1.0.351/tests/unit/test_complete.py +231 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/.gitattributes +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/.gitignore +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/.lycheeignore +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/.vale.ini +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/CLAUDE.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/LICENSE +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/MANIFEST.in +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/Makefile +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/README.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/SECURITY.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/codecov.yml +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/adapters.html +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel.html +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/chat.html +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/commands.html +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/demo.gif +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/demo.html +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/demo.tape +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/eval.html +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/index.html +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/evals/README.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/evals/__init__.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/evals/baseline.json +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/evals/metrics.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/examples/README.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/index.html +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/noxfile.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/setup.cfg +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/sonar-project.properties +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/style/README.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/style/boost.css +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/style/boost.js +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/style/demo.html +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/conftest.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/visual/package-lock.json +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/visual/visual_check.mjs +0 -0
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '1.0.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 0,
|
|
21
|
+
__version__ = version = '1.0.351'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 351)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -198,6 +198,21 @@ def _unknown(name: str) -> int:
|
|
|
198
198
|
return 2
|
|
199
199
|
|
|
200
200
|
|
|
201
|
+
def _complete_candidates(argv: List[str]) -> int:
|
|
202
|
+
"""`boost __complete <words…>` — one candidate per line, for a shell.
|
|
203
|
+
|
|
204
|
+
Runs on every TAB, so it never fails loudly: core.complete swallows its own
|
|
205
|
+
errors and a traceback here would land in the line the user is typing.
|
|
206
|
+
"""
|
|
207
|
+
from .core import complete
|
|
208
|
+
for candidate in complete.candidates(argv.copy(), COMMANDS):
|
|
209
|
+
print(candidate)
|
|
210
|
+
return 0
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
_PLUMBING = {"__complete": _complete_candidates}
|
|
214
|
+
|
|
215
|
+
|
|
201
216
|
def _dispatch(name: str, argv: List[str], soft: bool = False) -> int:
|
|
202
217
|
_group, module, _summary = _BY_NAME[name]
|
|
203
218
|
mod = importlib.import_module("boost_cli.commands.%s" % module)
|
|
@@ -248,6 +263,11 @@ def main(argv: List[str] | None = None) -> int:
|
|
|
248
263
|
print_help()
|
|
249
264
|
return 0
|
|
250
265
|
name, rest = argv[0], argv[1:]
|
|
266
|
+
if name in _PLUMBING:
|
|
267
|
+
# Before the _BY_NAME guard (it is not a command) and before
|
|
268
|
+
# log_invocation: this runs on every TAB, and logging a line per
|
|
269
|
+
# keystroke would bury the diagnostic log in completion noise.
|
|
270
|
+
return _PLUMBING[name](rest)
|
|
251
271
|
if name not in _BY_NAME:
|
|
252
272
|
return _unknown(name)
|
|
253
273
|
logs.log_invocation([name, *rest])
|
|
@@ -17,6 +17,7 @@ from .. import __version__, cliparse
|
|
|
17
17
|
from ..core import (
|
|
18
18
|
agents,
|
|
19
19
|
catalog,
|
|
20
|
+
complete,
|
|
20
21
|
config,
|
|
21
22
|
frontmatter,
|
|
22
23
|
gitutil,
|
|
@@ -537,33 +538,15 @@ def cmd_completions(argv) -> int:
|
|
|
537
538
|
p.add_argument("shell", nargs="?", choices=("bash", "zsh", "fish"),
|
|
538
539
|
default=None, help="target shell (default: from $SHELL)")
|
|
539
540
|
args = p.parse_args(argv)
|
|
540
|
-
from ..cli import COMMANDS
|
|
541
541
|
|
|
542
542
|
shell = args.shell or Path(os.environ.get("SHELL", "")).name
|
|
543
543
|
if shell not in ("bash", "zsh", "fish"):
|
|
544
544
|
shell = "bash"
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
hint = "boost completions bash >> ~/.bashrc"
|
|
551
|
-
elif shell == "zsh":
|
|
552
|
-
lines = ["#compdef boost", "", "_boost() {", " local -a _boost_commands",
|
|
553
|
-
" _boost_commands=("]
|
|
554
|
-
lines += [" '%s:%s'" % (n, _sq(s)) for n, _g, _m, s in COMMANDS]
|
|
555
|
-
lines += [" )", " if (( CURRENT == 2 )); then",
|
|
556
|
-
" _describe -t commands 'boost command' _boost_commands",
|
|
557
|
-
" else", " _files", " fi", "}", "", '_boost "$@"']
|
|
558
|
-
hint = "boost completions zsh > ~/.zfunc/_boost (with fpath+=~/.zfunc before compinit)"
|
|
559
|
-
else:
|
|
560
|
-
lines = ["# boost fish completion"]
|
|
561
|
-
lines += ["complete -c boost -n __fish_use_subcommand -a %s -d '%s'"
|
|
562
|
-
% (n, s.replace("\\", "\\\\").replace("'", "\\'"))
|
|
563
|
-
for n, _g, _m, s in COMMANDS]
|
|
564
|
-
hint = "boost completions fish > ~/.config/fish/completions/boost.fish"
|
|
565
|
-
print("\n".join(lines))
|
|
566
|
-
out.dim("# install: " + hint)
|
|
545
|
+
# The script is a thin shim that calls `boost __complete`; the candidate
|
|
546
|
+
# rules live in core/complete.py so all three shells share one tested
|
|
547
|
+
# implementation instead of three hand-maintained static lists.
|
|
548
|
+
print(complete.script(shell).rstrip())
|
|
549
|
+
out.dim("# install: " + complete.INSTALL_HINT[shell])
|
|
567
550
|
return 0
|
|
568
551
|
|
|
569
552
|
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"""What a shell offers at TAB, decided in Python rather than in shell.
|
|
2
|
+
|
|
3
|
+
WHY THIS EXISTS. `boost completions` used to emit a static list of command names
|
|
4
|
+
per shell and nothing else, so `boost install <TAB>` — the single most useful
|
|
5
|
+
completion a package manager has — re-offered command names in bash, offered
|
|
6
|
+
local *filenames* in zsh, and offered nothing in fish. Each failed structurally:
|
|
7
|
+
a bash `-W` wordlist is position-independent by definition, zsh guarded on
|
|
8
|
+
`(( CURRENT == 2 ))` and fell through to `_files`, and fish registered every
|
|
9
|
+
completion under `__fish_use_subcommand`.
|
|
10
|
+
|
|
11
|
+
The fix is one completer here and three thin shims that call it, so the context
|
|
12
|
+
rules are written once, in a language that can test them, instead of three times
|
|
13
|
+
in three shell dialects that cannot share a test.
|
|
14
|
+
|
|
15
|
+
TWO CONSTRAINTS SHAPE EVERYTHING BELOW.
|
|
16
|
+
|
|
17
|
+
*It runs on a keystroke.* `catalog.all_entries()` measured **423 ms** for 71,655
|
|
18
|
+
entries on a real install — four times over any reasonable TAB budget, before
|
|
19
|
+
interpreter start. So names come from a flat cache rebuilt from the tap caches:
|
|
20
|
+
the same question answered in **1.9 ms**, a 220x difference, which is what makes
|
|
21
|
+
argument completion affordable at all.
|
|
22
|
+
|
|
23
|
+
*It must never fail loudly.* A traceback printed into a live prompt is worse than
|
|
24
|
+
no completion, so every public entry point swallows exceptions and returns
|
|
25
|
+
nothing. Silence degrades; a stack trace corrupts the line the user is typing.
|
|
26
|
+
"""
|
|
27
|
+
from __future__ import annotations
|
|
28
|
+
|
|
29
|
+
import re
|
|
30
|
+
from pathlib import Path
|
|
31
|
+
from typing import Callable, Dict, List, Optional, Sequence, Tuple
|
|
32
|
+
|
|
33
|
+
from . import catalog, paths, registry, store
|
|
34
|
+
|
|
35
|
+
# cli.COMMANDS rows: (name, group, module, summary). Typed here rather than
|
|
36
|
+
# imported so `core` stays the bottom layer.
|
|
37
|
+
Registry = Sequence[Tuple[str, str, str, str]]
|
|
38
|
+
|
|
39
|
+
# Commands whose first argument is a catalogue item, an installed item, or a tap.
|
|
40
|
+
# Anything absent completes nothing rather than guessing: a wrong candidate list
|
|
41
|
+
# actively teaches the wrong thing, which is worse than an empty one.
|
|
42
|
+
_CATALOG_ARG = ("install", "info", "cat", "preview", "explain", "why",
|
|
43
|
+
"distill", "adapt", "absorb")
|
|
44
|
+
_INSTALLED_ARG = ("uninstall", "reinstall", "pin", "unpin", "edit", "verify")
|
|
45
|
+
_TAP_ARG = ("untap",)
|
|
46
|
+
|
|
47
|
+
def names_file() -> Path:
|
|
48
|
+
"""Flat newline-delimited catalogue names, one per line."""
|
|
49
|
+
return paths.cache_dir() / "_names.txt"
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def _command_names(commands: Registry) -> List[str]:
|
|
53
|
+
# No hidden-name filter here: `__complete` is dispatched in cli.main()
|
|
54
|
+
# without a COMMANDS row precisely so it stays out of --help, the generated
|
|
55
|
+
# docs, the counts *and* this list. One mechanism, not two.
|
|
56
|
+
return [n for n, _g, _m, _s in commands]
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def refresh_names() -> int:
|
|
60
|
+
"""Rebuild the names cache from the tap caches. Returns the count written.
|
|
61
|
+
|
|
62
|
+
Called after anything that changes the catalogue (tap, untap, update), and
|
|
63
|
+
lazily by :func:`_cached_names` when the file is missing, so a user who
|
|
64
|
+
never runs those still gets completion on their first TAB.
|
|
65
|
+
"""
|
|
66
|
+
names = sorted({str(e.get("name", "")) for e in catalog.all_entries()
|
|
67
|
+
if e.get("name")})
|
|
68
|
+
paths.ensure_dirs()
|
|
69
|
+
names_file().write_text("\n".join(names), encoding="utf-8")
|
|
70
|
+
return len(names)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def _cached_names() -> List[str]:
|
|
74
|
+
path = names_file()
|
|
75
|
+
if not path.exists():
|
|
76
|
+
refresh_names()
|
|
77
|
+
# errors="replace" rather than a raise: a cache corrupted by a half-written
|
|
78
|
+
# file must degrade to whatever is readable, not break the prompt.
|
|
79
|
+
text = path.read_text(encoding="utf-8", errors="replace")
|
|
80
|
+
return [line for line in text.split("\n") if line]
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def _installed_names() -> List[str]:
|
|
84
|
+
return sorted(store.installed())
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def _tap_names() -> List[str]:
|
|
88
|
+
return sorted(t.name for t in registry.list_taps())
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
# Long flags a command documents, read from its own parser rather than a shared
|
|
92
|
+
# list — a global flag list would offer flags the command rejects.
|
|
93
|
+
def _flags_for(command: str, commands: Registry) -> List[str]:
|
|
94
|
+
row = next((r for r in commands if r[0] == command), None)
|
|
95
|
+
if row is None:
|
|
96
|
+
return []
|
|
97
|
+
module = __import__("boost_cli.commands." + row[2], fromlist=["x"])
|
|
98
|
+
func = getattr(module, "cmd_" + command.replace("-", "_"), None)
|
|
99
|
+
if func is None:
|
|
100
|
+
return []
|
|
101
|
+
# The parser is built inside the command function, so there is no object to
|
|
102
|
+
# interrogate without running it. The docstring/source is the cheap,
|
|
103
|
+
# dependency-free source of truth for what it accepts.
|
|
104
|
+
import inspect
|
|
105
|
+
try:
|
|
106
|
+
src = inspect.getsource(func)
|
|
107
|
+
except (OSError, TypeError):
|
|
108
|
+
return []
|
|
109
|
+
return sorted(set(re.findall(r'"(--[a-z][a-z0-9-]*)"', src)))
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def _source_for(command: str) -> Optional[Callable[[], List[str]]]:
|
|
113
|
+
table: Dict[str, Callable[[], List[str]]] = {}
|
|
114
|
+
for name in _CATALOG_ARG:
|
|
115
|
+
table[name] = _cached_names
|
|
116
|
+
for name in _INSTALLED_ARG:
|
|
117
|
+
table[name] = _installed_names
|
|
118
|
+
for name in _TAP_ARG:
|
|
119
|
+
table[name] = _tap_names
|
|
120
|
+
return table.get(command)
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def candidates(words: List[str], commands: Registry) -> List[str]:
|
|
124
|
+
"""Completions for ``words``, where the last element is the partial word.
|
|
125
|
+
|
|
126
|
+
``words`` is the command line as the shell split it, including ``boost``
|
|
127
|
+
itself — so ``["boost", "install", "code"]`` is a user who has typed
|
|
128
|
+
``boost install code<TAB>``.
|
|
129
|
+
|
|
130
|
+
``commands`` is ``cli.COMMANDS``, passed in rather than imported: ``core``
|
|
131
|
+
is the bottom layer and must not reach up into ``cli`` (the import-linter
|
|
132
|
+
contract enforces it), so the registry arrives as data.
|
|
133
|
+
"""
|
|
134
|
+
try:
|
|
135
|
+
if len(words) < 2:
|
|
136
|
+
return []
|
|
137
|
+
current = words[-1]
|
|
138
|
+
if len(words) == 2: # completing the command itself
|
|
139
|
+
return [c for c in _command_names(commands) if c.startswith(current)]
|
|
140
|
+
command = words[1]
|
|
141
|
+
if current.startswith("-"):
|
|
142
|
+
return [f for f in _flags_for(command, commands) if f.startswith(current)]
|
|
143
|
+
source = _source_for(command)
|
|
144
|
+
if source is None:
|
|
145
|
+
return []
|
|
146
|
+
return [c for c in source() if c.startswith(current)]
|
|
147
|
+
except Exception:
|
|
148
|
+
# Deliberately broad. Anything raised here would otherwise land in the
|
|
149
|
+
# middle of the line the user is typing.
|
|
150
|
+
return []
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
_BASH = """# boost bash completion — delegates to `boost __complete`, so the
|
|
154
|
+
# candidate rules live in Python and cannot drift from the CLI.
|
|
155
|
+
_boost_complete() {
|
|
156
|
+
local IFS=$'\\n'
|
|
157
|
+
COMPREPLY=( $(boost __complete "${COMP_WORDS[@]:0:$((COMP_CWORD+1))}" 2>/dev/null) )
|
|
158
|
+
}
|
|
159
|
+
complete -F _boost_complete boost
|
|
160
|
+
"""
|
|
161
|
+
|
|
162
|
+
_ZSH = """#compdef boost
|
|
163
|
+
# Delegates to `boost __complete` rather than embedding a static list, so
|
|
164
|
+
# arguments complete too — the previous version fell through to _files, which
|
|
165
|
+
# offered local filenames where a skill name belongs.
|
|
166
|
+
_boost() {
|
|
167
|
+
local -a reply
|
|
168
|
+
# "${(@)...}" preserves the EMPTY current word. Unquoted, zsh drops it,
|
|
169
|
+
# so `boost install <TAB>` arrives as two words and completes command
|
|
170
|
+
# names instead of skills — the exact bug this rewrite is fixing.
|
|
171
|
+
reply=( ${(f)"$(boost __complete "${(@)words[1,$CURRENT]}" 2>/dev/null)"} )
|
|
172
|
+
compadd -- $reply
|
|
173
|
+
}
|
|
174
|
+
_boost "$@"
|
|
175
|
+
"""
|
|
176
|
+
|
|
177
|
+
_FISH = """# boost fish completion — delegates to `boost __complete`.
|
|
178
|
+
# `-f` disables fish's filename fallback, which is what it offered previously
|
|
179
|
+
# once the subcommand was typed.
|
|
180
|
+
function __boost_complete
|
|
181
|
+
boost __complete (commandline -opc) (commandline -ct) 2>/dev/null
|
|
182
|
+
end
|
|
183
|
+
complete -c boost -f -a '(__boost_complete)'
|
|
184
|
+
"""
|
|
185
|
+
|
|
186
|
+
_SCRIPTS = {"bash": _BASH, "zsh": _ZSH, "fish": _FISH}
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def script(shell: str) -> str:
|
|
190
|
+
"""The completion script for ``shell``. Unknown shells get bash's."""
|
|
191
|
+
return _SCRIPTS.get(shell, _BASH)
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
INSTALL_HINT = {
|
|
195
|
+
"bash": "boost completions bash >> ~/.bashrc",
|
|
196
|
+
"zsh": "boost completions zsh > ~/.zfunc/_boost "
|
|
197
|
+
"(with fpath+=~/.zfunc before compinit)",
|
|
198
|
+
"fish": "boost completions fish > ~/.config/fish/completions/boost.fish",
|
|
199
|
+
}
|
|
@@ -55,6 +55,7 @@ boost_cli/core/capabilities.py
|
|
|
55
55
|
boost_cli/core/catalog.py
|
|
56
56
|
boost_cli/core/chat.py
|
|
57
57
|
boost_cli/core/claude_settings.py
|
|
58
|
+
boost_cli/core/complete.py
|
|
58
59
|
boost_cli/core/config.py
|
|
59
60
|
boost_cli/core/dense.py
|
|
60
61
|
boost_cli/core/ed25519.py
|
|
@@ -211,6 +212,7 @@ docs/roadmap/items/docstring-coverage-interrogate.md
|
|
|
211
212
|
docs/roadmap/items/doctor-checks-rules-and-workflows.md
|
|
212
213
|
docs/roadmap/items/end-of-options-guard-on-git-commands.md
|
|
213
214
|
docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md
|
|
215
|
+
docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md
|
|
214
216
|
docs/roadmap/items/extension-free-tests-core-dense-py.md
|
|
215
217
|
docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md
|
|
216
218
|
docs/roadmap/items/finish-mutation-hardening-across-core.md
|
|
@@ -495,6 +497,7 @@ tests/unit/test_cliparse.py
|
|
|
495
497
|
tests/unit/test_codeql_analysis_key.py
|
|
496
498
|
tests/unit/test_command_reference_fresh.py
|
|
497
499
|
tests/unit/test_community_health_files.py
|
|
500
|
+
tests/unit/test_complete.py
|
|
498
501
|
tests/unit/test_config.py
|
|
499
502
|
tests/unit/test_content_dedupe.py
|
|
500
503
|
tests/unit/test_dedup_trust.py
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
id: completions-complete-only-command-names
|
|
3
3
|
board: code
|
|
4
4
|
section: dx
|
|
5
|
-
status:
|
|
5
|
+
status: shipped
|
|
6
6
|
category: CLI · DX
|
|
7
7
|
complexity: M
|
|
8
8
|
impact: High
|
|
9
9
|
wow: 4
|
|
10
|
-
note:
|
|
10
|
+
note: arguments and flags now complete; verified in real bash and zsh, not just asserted
|
|
11
11
|
order: 79
|
|
12
12
|
owner:
|
|
13
13
|
pr:
|
|
@@ -62,3 +62,40 @@ TAB, so the candidate path must not pay catalog-scan cost — it needs the c
|
|
|
62
62
|
budget (target <100 ms) measured rather than assumed. And <code>__complete</code> must never
|
|
63
63
|
fail loudly: a completer that prints a traceback into the user's prompt is worse than one that
|
|
64
64
|
returns nothing, so it should exit 0 with empty output on any error.
|
|
65
|
+
|
|
66
|
+
<b>Shipped as <code>core/complete.py</code> plus a hidden <code>boost __complete</code>, with the
|
|
67
|
+
three shell scripts reduced to shims that call it.</b> Verified by driving <b>real bash and real
|
|
68
|
+
zsh</b> rather than by asserting on emitted text — which is precisely the gap that let this
|
|
69
|
+
survive: <code>boost install <TAB></code> now offers the catalogue,
|
|
70
|
+
<code>boost uninstall <TAB></code> offers what is installed, <code>boost untap <TAB></code>
|
|
71
|
+
offers configured taps, and <code>boost search --<TAB></code> offers that command's own flags
|
|
72
|
+
(previously <b>zero</b> in every shell).
|
|
73
|
+
|
|
74
|
+
<b>A measurement decided the architecture.</b> Completion fires on a keystroke, and
|
|
75
|
+
<code>catalog.all_entries()</code> costs <b>423 ms</b> for 71,655 entries — four times
|
|
76
|
+
over the <100 ms budget this card set, before interpreter start. A flat names cache answers
|
|
77
|
+
the same question in <b>1.9 ms</b>, a <b>220×</b> difference, and a test asserts the
|
|
78
|
+
completion path never calls <code>all_entries()</code> at all. Without that number the obvious
|
|
79
|
+
implementation would have shipped a TAB that visibly stalls.
|
|
80
|
+
|
|
81
|
+
<b>Driving a real shell found a bug that no unit test would have.</b> The zsh shim passed
|
|
82
|
+
<code>${words[1,$CURRENT]}</code> unquoted, and zsh <em>drops an empty trailing word</em> — so
|
|
83
|
+
<code>boost install <TAB></code> arrived as two words and completed <em>command names</em>,
|
|
84
|
+
reproducing the exact defect this card exists to fix, in the new code. <code>"${(@)...}"</code>
|
|
85
|
+
preserves it. Bash never showed this because <code>"${COMP_WORDS[@]:0:…}"</code> already preserves
|
|
86
|
+
empty elements. A test now pins the quoting.
|
|
87
|
+
|
|
88
|
+
<b>The layering got stricter, not looser.</b> <code>completions</code> used to import
|
|
89
|
+
<code>COMMANDS</code> out of <code>cli.py</code> — the single upward edge the import-linter
|
|
90
|
+
contract allowlisted. The registry is now passed into <code>core.complete</code> as data, so the
|
|
91
|
+
allowlist entry is <b>gone</b> and <code>boost_cli</code> has no exceptions to its
|
|
92
|
+
<code>cli → commands → core</code> rule at all. <code>__complete</code>
|
|
93
|
+
is deliberately <em>not</em> a row in <code>COMMANDS</code>: that list generates
|
|
94
|
+
<code>docs/commands.html</code>, <code>--help</code> and the command counts, and plumbing belongs in
|
|
95
|
+
none of them — so the count stays 79.
|
|
96
|
+
|
|
97
|
+
<b>The old tests were replaced, not extended.</b> Four tests asserted that the bash wordlist equalled
|
|
98
|
+
<code>COMMANDS</code> and that zsh emitted 79 entries. All four passed for years while the feature
|
|
99
|
+
was broken, because each asked what the generator <em>printed</em> rather than what a shell would
|
|
100
|
+
<em>propose</em>. The replacements pin behaviour and the shim contract.
|
|
101
|
+
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: eval-corpus-is-96x-smaller-than-a-real-install
|
|
3
|
+
board: code
|
|
4
|
+
section: internals
|
|
5
|
+
status: planned
|
|
6
|
+
category: Eval · Correctness
|
|
7
|
+
complexity: M
|
|
8
|
+
impact: High
|
|
9
|
+
wow: 4
|
|
10
|
+
note: BM25 hit@1 is 0.340 on the pinned corpus and 0.040 on a real one
|
|
11
|
+
order: 80
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: The eval corpus is 96× smaller than a real install, and the floors describe the small one
|
|
15
|
+
---
|
|
16
|
+
<b>The required <code>eval</code> gate measures a catalogue almost nobody has.</b>
|
|
17
|
+
<code>tests/eval/taps.txt</code> pins 20 registries resolving to <b>743</b> entries. A real install
|
|
18
|
+
that has run <code>boost tap</code> a few times is far bigger — the machine this was measured
|
|
19
|
+
on carries <b>71,655</b> entries across 77 taps, <b>96×</b> larger.
|
|
20
|
+
|
|
21
|
+
<b>The gap changes the answer, not just the margin.</b> Over the same 50 natural-language golden
|
|
22
|
+
queries, BM25 scores <code>hit@1</code> <b>0.340</b> on the pinned corpus (published in
|
|
23
|
+
<code>#373</code>) and <b>0.040</b> on the 71,655-entry one. Both numbers are correct; they are
|
|
24
|
+
measurements of different things. The targets have not gone missing — all 50 are present, and
|
|
25
|
+
spot-checking puts them at rank <b>7</b>, <b>8</b>, <b>38</b> and <b>163</b> rather than rank 1.
|
|
26
|
+
What changed is the number of plausible distractors competing for the top slot.
|
|
27
|
+
|
|
28
|
+
<b>Why this matters more than a number moving.</b> The <code>eval</code> gate floors BM25 recall@k
|
|
29
|
+
at 0.85 and passes with wide margin, which reads as “retrieval is healthy”. It is
|
|
30
|
+
healthy <em>at 743 entries</em>. Every retrieval decision validated against that corpus —
|
|
31
|
+
blend weights, pool depths, whether a reranker earns its keep — is being validated at a scale
|
|
32
|
+
users leave behind after their third tap. The near-duplicate card predicted exactly this shape when
|
|
33
|
+
it warned the lift may <em>shrink</em> toward 50k rather than hold; this is that warning arriving
|
|
34
|
+
with a number attached.
|
|
35
|
+
|
|
36
|
+
<b>What is not being proposed.</b> Not lowering the floor, and not making the corpus enormous:
|
|
37
|
+
<code>ensure_eval_corpus.sh</code> already taps 20 repos over the network inside the
|
|
38
|
+
<code>lint</code> job, and a 77-tap corpus would make the required gate slow and flaky. The useful
|
|
39
|
+
shape is probably a <b>second, larger tier</b> — scheduled rather than required, floored on
|
|
40
|
+
its own baseline — so the small corpus keeps gating every PR cheaply while the large one
|
|
41
|
+
catches the scale effects the small one structurally cannot. Measuring <em>where</em> between 743
|
|
42
|
+
and 71,655 the metrics fall off would tell you how large that tier needs to be, and is a smaller
|
|
43
|
+
first step than building it.
|
|
44
|
+
|
|
45
|
+
<b>Provenance:</b> found while running the spike in
|
|
46
|
+
[[keyless-dense-tier-local-static-embeddings]], where the first sign was BM25 scoring 0.040 in a
|
|
47
|
+
harness that had to be checked for a bug before the number could be believed.
|
|
@@ -7,7 +7,7 @@ category: Search · Retrieval
|
|
|
7
7
|
complexity: L
|
|
8
8
|
impact: High
|
|
9
9
|
wow: 5
|
|
10
|
-
note:
|
|
10
|
+
note: spike done: the perf claims were 6-22x conservative, but rerank added +0 at real scale
|
|
11
11
|
order: 73
|
|
12
12
|
owner:
|
|
13
13
|
pr:
|
|
@@ -77,3 +77,48 @@ that holds it is a difference of more than an order of magnitude on the doc side
|
|
|
77
77
|
the cost that makes prebuilt shards mandatory today. Worth measuring the model2vec path directly
|
|
78
78
|
before committing — but the gap it claims to close is now a measured number rather than an
|
|
79
79
|
estimate.
|
|
80
|
+
|
|
81
|
+
<b>Spike done — the prerequisites this card set have all shipped, so the measurement it asked
|
|
82
|
+
for was finally runnable.</b> It says “do not ship before the eval and dedup items”;
|
|
83
|
+
dedup landed in <code>#370</code>, the index format in <code>#367</code>/<code>#371</code>, the
|
|
84
|
+
published eval in <code>#373</code>. What follows is <code>potion-retrieval-32M</code> (MIT, 63,091
|
|
85
|
+
× 512 F32 lookup table — confirmed a single tensor, no transformer) driven by a
|
|
86
|
+
hand-written pure-stdlib loader: WordPiece → gather rows → mean-pool → L2, mmap'd,
|
|
87
|
+
no numpy.
|
|
88
|
+
|
|
89
|
+
<b>The two unverified performance claims were not just right, they were conservative.</b> Query
|
|
90
|
+
embedding measured <b>0.16 ms</b> against the card's <code>~1 ms</code>. Document
|
|
91
|
+
embedding measured <b>1.34 ms</b> on a synthetic 105-token doc and <b>3.27 ms</b> on 300
|
|
92
|
+
real catalogue entries (median 61 tokens), against the card's <code>~29 ms</code>.
|
|
93
|
+
|
|
94
|
+
<b>That reverses one of this card's design arguments.</b> The doc-side cost was the reason prebuilt
|
|
95
|
+
artifacts looked mandatory: “29 ms/doc in pure Python is ~24 min for 50k
|
|
96
|
+
single-core”. At the measured 3.27 ms it is <b>2.7 min</b> — roughly the time
|
|
97
|
+
a first <code>boost tap --defaults</code> already takes. Local embedding is therefore viable on the
|
|
98
|
+
user's own machine, and shipped shards become a genuine optimisation rather than a requirement. (Not
|
|
99
|
+
to be confused with the ONNX <code>bge-small</code> path measured at ~1.2 s/chunk in
|
|
100
|
+
<code>keyless-semantic-search-for-everyone</code>; that number stands, and the gap between them
|
|
101
|
+
<em>is</em> the case for the static model.)
|
|
102
|
+
|
|
103
|
+
<b>But reranking bought nothing at real scale, which is the result that matters.</b> Over the 50
|
|
104
|
+
natural-language golden queries against a real <b>71,655-entry</b> catalogue, reranking BM25's
|
|
105
|
+
top-200 by cosine scored <code>hit@1</code> <b>2/50</b> — identical to BM25's own
|
|
106
|
+
<b>2/50</b>, a net change of <b>+0 queries</b> where this card's own statistics note says 6 net
|
|
107
|
+
queries is the smallest win reaching p<0.05. On two hand-checked pairs the ordering was right but
|
|
108
|
+
the margin was thin (related 0.154 vs unrelated 0.097).
|
|
109
|
+
|
|
110
|
+
<b>Stated limits, because this does not settle the question.</b> The document vector was built from
|
|
111
|
+
<code>name + description</code> truncated to 1,500 characters, not the full body the real dense path
|
|
112
|
+
indexes, so this measures a weaker representation than the one being proposed. No blend was tried
|
|
113
|
+
— pure rerank, no <code>w_dense</code> — and this card explicitly asks for a held-out
|
|
114
|
+
blend weight and McNemar. What it does establish is that the <em>cheap</em> version of the idea does
|
|
115
|
+
not pay for itself, so the remaining work is representation and blending, not inference speed.
|
|
116
|
+
|
|
117
|
+
<b>An unrelated finding fell out of it, and it is the more important one.</b> BM25 scored
|
|
118
|
+
<code>hit@1</code> <b>0.040</b> here against the <b>0.340</b> published in <code>#373</code>. Both
|
|
119
|
+
are correct: the published figure is measured over the pinned 6-tap eval corpus of <b>743</b>
|
|
120
|
+
entries, and this run used a real 77-tap install — <b>96× larger</b>. Golden targets are
|
|
121
|
+
all present and rank 7th, 8th, 38th, 163rd rather than 1st. The eval corpus is not a scale model of
|
|
122
|
+
a real install, and the gate's floors describe a catalogue two orders of magnitude smaller than the
|
|
123
|
+
one users have. Tracked separately in [[eval-corpus-is-96x-smaller-than-a-real-install]].
|
|
124
|
+
|