boost-skill-cli 1.1.0__tar.gz → 1.1.2__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.1.0 → boost_skill_cli-1.1.2}/PKG-INFO +1 -1
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/configuration.py +58 -3
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/complete.py +132 -30
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_skill_cli.egg-info/PKG-INFO +1 -1
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_skill_cli.egg-info/SOURCES.txt +4 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/commands.html +4 -3
- boost_skill_cli-1.1.2/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +82 -0
- boost_skill_cli-1.1.2/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +64 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap.html +139 -1
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_complete.py +10 -1
- boost_skill_cli-1.1.2/tests/unit/test_complete_rc_block.py +367 -0
- boost_skill_cli-1.1.2/tests/unit/test_visual_harness_flags.py +121 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/visual/visual_check.mjs +31 -3
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/.gitattributes +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/.gitignore +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/.lycheeignore +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/.vale.ini +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/CLAUDE.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/LICENSE +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/MANIFEST.in +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/Makefile +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/README.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/SECURITY.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/bmad.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/bootstrap.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/builtin.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/catalogbundle.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/data/rules/boost-first.mdc +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_langchain/__init__.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_langchain/_compat.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_langchain/graph.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_langchain/loader.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_langchain/py.typed +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_langchain/retriever.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/codecov.yml +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/adapters.html +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel.html +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/chat.html +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/demo.gif +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/demo.html +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/demo.tape +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/eval-latest.json +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/eval.html +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/index.html +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/langchain.html +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/boost-first-rule.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/install-path-disambiguation.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/zip-strict-audit.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/evals/README.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/evals/__init__.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/evals/baseline.json +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/evals/metrics.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/evals/publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/examples/README.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/index.html +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/noxfile.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/pyproject.toml +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/build_scale_corpus.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/eval_corpus.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/measure_registry.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/page_budget.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/publish_eval_json.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/serve_docs.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/setup.cfg +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/sonar-project.properties +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/style/README.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/style/boost.css +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/style/boost.js +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/style/demo.html +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/conftest.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/eval/taps-scale.txt +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_cli_catalog.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_kind_conformance.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/langchain/conftest.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/langchain/test_graph.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/langchain/test_loader.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/langchain/test_retriever.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_action_pin_lockstep.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_bmad_core.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_boost_first_offer.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_bootstrap.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_builtin.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_catalogbundle.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_clean_internal_cache.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_compact.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_crash_redaction.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_dense_shard_real_schema.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_embed_truncated_response.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_eval_corpus.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_eval_grading.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_gemini_agent_sanitize.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_gitutil_lfs.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_gitutil_sparse.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_install_permission_error.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_langchain_packaging.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_link_ownership.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_measure_registry.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_page_budget.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_registry_control_chars.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_scale_corpus.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_serve_docs.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_shards_matrix.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_smoke_covers_every_command.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_store_materialize.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_sync_blocked_links.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_workflow_concurrency_groups.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_workflow_push_has_credentials.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/visual/package-lock.json +0 -0
- {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/visual/package.json +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.1.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 1,
|
|
21
|
+
__version__ = version = '1.1.2'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 1, 2)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -3,6 +3,7 @@ completions, schedule, serve, mcp, self-update."""
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import argparse
|
|
6
|
+
import difflib
|
|
6
7
|
import json
|
|
7
8
|
import os
|
|
8
9
|
import re
|
|
@@ -659,8 +660,42 @@ def _sq(s: str) -> str:
|
|
|
659
660
|
return s.replace("'", "'\\''")
|
|
660
661
|
|
|
661
662
|
|
|
663
|
+
def _report_rc_plan(plan, install: bool, shell: str) -> None:
|
|
664
|
+
"""Print what `--dry-run` would do to an rc file, and nothing else."""
|
|
665
|
+
if not plan.changes:
|
|
666
|
+
out.ok("%s already %s — no change"
|
|
667
|
+
% (_tilde(plan.path),
|
|
668
|
+
"wired for boost completions" if install
|
|
669
|
+
else "free of boost completions"))
|
|
670
|
+
return
|
|
671
|
+
verb = {
|
|
672
|
+
"create": "would create %s and wire boost completions into it",
|
|
673
|
+
"add": "would wire boost completions into %s",
|
|
674
|
+
# `replace` also covers collapsing a duplicated block back to one.
|
|
675
|
+
"replace": "would rewrite the boost completions block in %s",
|
|
676
|
+
"remove": "would remove boost completions from %s",
|
|
677
|
+
}[plan.action]
|
|
678
|
+
out.info(verb % _tilde(plan.path))
|
|
679
|
+
for line in _rc_plan_diff(plan):
|
|
680
|
+
out.dim(" " + line)
|
|
681
|
+
out.dim(" re-run without --dry-run to apply")
|
|
682
|
+
|
|
683
|
+
|
|
684
|
+
def _rc_plan_diff(plan) -> list[str]:
|
|
685
|
+
"""The +/- lines between a plan's before and after, for the dry run.
|
|
686
|
+
|
|
687
|
+
The ``---``/``+++``/``@@`` scaffolding is dropped: the file is named on the
|
|
688
|
+
line above, and line numbers earn nothing on a five-line rc edit.
|
|
689
|
+
"""
|
|
690
|
+
return [ln.rstrip("\n")
|
|
691
|
+
for ln in difflib.unified_diff(plan.before.splitlines(),
|
|
692
|
+
plan.after.splitlines(), n=1)
|
|
693
|
+
if not ln.startswith(("---", "+++", "@@"))]
|
|
694
|
+
|
|
695
|
+
|
|
662
696
|
def cmd_completions(argv) -> int:
|
|
663
|
-
"""boost completions [bash|zsh|fish] [--install|--uninstall] [--eval]
|
|
697
|
+
"""boost completions [bash|zsh|fish] [--install|--uninstall] [--eval]
|
|
698
|
+
[--dry-run]"""
|
|
664
699
|
p = cliparse.parser(
|
|
665
700
|
prog="boost completions",
|
|
666
701
|
description="Generate shell tab-completion scripts")
|
|
@@ -669,6 +704,9 @@ def cmd_completions(argv) -> int:
|
|
|
669
704
|
p.add_argument("--eval", action="store_true",
|
|
670
705
|
help="print the variant safe to `eval` directly "
|
|
671
706
|
"(what --install wires up)")
|
|
707
|
+
p.add_argument("--dry-run", action="store_true",
|
|
708
|
+
help="with --install/--uninstall: report what would change "
|
|
709
|
+
"in the rc file without writing it")
|
|
672
710
|
group = p.add_mutually_exclusive_group()
|
|
673
711
|
group.add_argument("--install", action="store_true",
|
|
674
712
|
help="wire completions into the shell's rc file "
|
|
@@ -679,11 +717,28 @@ def cmd_completions(argv) -> int:
|
|
|
679
717
|
|
|
680
718
|
detected = args.shell or Path(os.environ.get("SHELL", "")).name
|
|
681
719
|
|
|
720
|
+
if args.dry_run and not (args.install or args.uninstall):
|
|
721
|
+
p.error("--dry-run qualifies --install or --uninstall; "
|
|
722
|
+
"pass one of them")
|
|
723
|
+
|
|
682
724
|
if args.install or args.uninstall:
|
|
683
|
-
|
|
725
|
+
# Plan first either way, so a malformed rc file is reported before
|
|
726
|
+
# anything is written rather than after.
|
|
727
|
+
plan = (complete.plan_install if args.install
|
|
728
|
+
else complete.plan_uninstall)(detected)
|
|
729
|
+
if args.dry_run:
|
|
730
|
+
_report_rc_plan(plan, install=args.install, shell=detected)
|
|
731
|
+
return 0
|
|
732
|
+
complete.apply(plan)
|
|
733
|
+
if not plan.changes:
|
|
734
|
+
out.ok("%s already %s — no change"
|
|
735
|
+
% (_tilde(plan.path),
|
|
736
|
+
"wired for boost completions" if args.install
|
|
737
|
+
else "free of boost completions"))
|
|
738
|
+
return 0
|
|
684
739
|
out.ok("%s boost completions %s %s"
|
|
685
740
|
% ("wired" if args.install else "removed",
|
|
686
|
-
"into" if args.install else "from", _tilde(
|
|
741
|
+
"into" if args.install else "from", _tilde(plan.path)))
|
|
687
742
|
if args.install:
|
|
688
743
|
out.dim(" restart your shell (or run `exec %s`) to pick it up"
|
|
689
744
|
% detected)
|
|
@@ -29,6 +29,7 @@ from __future__ import annotations
|
|
|
29
29
|
import os
|
|
30
30
|
import re
|
|
31
31
|
from collections.abc import Callable, Sequence
|
|
32
|
+
from dataclasses import dataclass
|
|
32
33
|
from pathlib import Path
|
|
33
34
|
|
|
34
35
|
from ..errors import BoostError
|
|
@@ -257,31 +258,78 @@ def _rc_block(shell: str) -> str:
|
|
|
257
258
|
% (_RC_START, shell, _RC_END))
|
|
258
259
|
|
|
259
260
|
|
|
260
|
-
def
|
|
261
|
+
def _spans(text: str, rc: Path | None = None) -> list[tuple[int, int]]:
|
|
262
|
+
"""Half-open (start, end) index pairs of every managed block in ``text``.
|
|
263
|
+
|
|
264
|
+
Raises :class:`BoostError` for a start marker with no matching end, because
|
|
265
|
+
an rc file in that state cannot be edited safely by index. Both writers used
|
|
266
|
+
to pair the *first* start with the *next* end found anywhere after it, so an
|
|
267
|
+
orphan start marker sitting above real config made the next edit delete
|
|
268
|
+
every line in between — reported as ``✓ wired boost completions``. Refusing
|
|
269
|
+
costs the user one hand-edit; guessing cost them their shell config.
|
|
270
|
+
|
|
271
|
+
An orphan *end* is not an error: nothing pairs to it, it is skipped, and the
|
|
272
|
+
file keeps working. Only an unclosed block is ambiguous.
|
|
273
|
+
"""
|
|
274
|
+
spans: list[tuple[int, int]] = []
|
|
275
|
+
i = 0
|
|
276
|
+
while (s := text.find(_RC_START, i)) != -1:
|
|
277
|
+
after = s + len(_RC_START)
|
|
278
|
+
e = text.find(_RC_END, after)
|
|
279
|
+
nxt = text.find(_RC_START, after)
|
|
280
|
+
# A block must close before the next one opens. Testing only `e == -1`
|
|
281
|
+
# is the original bug in a new place: an orphan start sitting above a
|
|
282
|
+
# real block finds *that* block's end and swallows every line between.
|
|
283
|
+
if e == -1 or (nxt != -1 and nxt < e):
|
|
284
|
+
where = " in %s" % paths.tilde(rc) if rc is not None else ""
|
|
285
|
+
raise BoostError(
|
|
286
|
+
"boost completions block%s starts but never ends" % where,
|
|
287
|
+
hint="%s has no matching %s — delete the stray start line (or "
|
|
288
|
+
"close the block), then re-run"
|
|
289
|
+
% (_RC_START, _RC_END))
|
|
290
|
+
e += len(_RC_END)
|
|
291
|
+
spans.append((s, e))
|
|
292
|
+
i = e
|
|
293
|
+
return spans
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
def _outside(text: str, spans: list[tuple[int, int]]) -> list[str]:
|
|
297
|
+
"""The stretches of ``text`` that sit outside every managed block."""
|
|
298
|
+
parts, prev = [], 0
|
|
299
|
+
for s, e in spans:
|
|
300
|
+
parts.append(text[prev:s])
|
|
301
|
+
prev = e
|
|
302
|
+
parts.append(text[prev:])
|
|
303
|
+
return parts
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
def _merge_rc(text: str, block: str, rc: Path | None = None) -> str:
|
|
261
307
|
"""Idempotently set ``block`` in ``text``: replace a prior boost block in
|
|
262
308
|
place, or append one after a single blank line. Mirrors
|
|
263
|
-
:func:`core.rules.merge_block`'s shape with rc-file-safe markers.
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
309
|
+
:func:`core.rules.merge_block`'s shape with rc-file-safe markers.
|
|
310
|
+
|
|
311
|
+
Collapses to exactly one block. Replacing only the first left a second one
|
|
312
|
+
live, so `--install` was idempotent in content but not in count.
|
|
313
|
+
"""
|
|
314
|
+
spans = _spans(text, rc)
|
|
315
|
+
if not spans:
|
|
316
|
+
base = text.rstrip("\n")
|
|
317
|
+
return (base + "\n\n" + block + "\n") if base else block + "\n"
|
|
318
|
+
parts = _outside(text, spans)
|
|
319
|
+
return (parts[0] + block + "".join(parts[1:])).rstrip("\n") + "\n"
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
def _strip_rc(text: str, rc: Path | None = None) -> str:
|
|
323
|
+
"""Inverse of :func:`_merge_rc`: remove every managed block, if present.
|
|
324
|
+
|
|
325
|
+
Every, not the first: `--uninstall` on a doubled block used to report
|
|
326
|
+
"removed" while the shell went on sourcing the survivor.
|
|
327
|
+
"""
|
|
328
|
+
spans = _spans(text, rc)
|
|
329
|
+
if not spans:
|
|
278
330
|
return text
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
return text # no end marker: malformed, leave the file untouched
|
|
282
|
-
j += len(_RC_END)
|
|
283
|
-
before, after = text[:i].rstrip("\n"), text[j:].strip("\n")
|
|
284
|
-
parts = [p for p in (before, after) if p]
|
|
331
|
+
parts = [p.strip("\n") for p in _outside(text, spans)]
|
|
332
|
+
parts = [p for p in parts if p]
|
|
285
333
|
return "\n\n".join(parts) + "\n" if parts else ""
|
|
286
334
|
|
|
287
335
|
|
|
@@ -295,22 +343,76 @@ def _rc_path(shell: str) -> Path:
|
|
|
295
343
|
return paths.expand("~/" + RC_FILE[shell])
|
|
296
344
|
|
|
297
345
|
|
|
346
|
+
@dataclass(frozen=True)
|
|
347
|
+
class RcPlan:
|
|
348
|
+
"""What an install/uninstall would do to one rc file, before it does it.
|
|
349
|
+
|
|
350
|
+
``--dry-run`` prints this; ``install``/``uninstall`` apply it. One code path
|
|
351
|
+
computes both, so the preview cannot disagree with the write.
|
|
352
|
+
"""
|
|
353
|
+
path: Path
|
|
354
|
+
action: str # create | add | replace | remove | none
|
|
355
|
+
before: str
|
|
356
|
+
after: str
|
|
357
|
+
|
|
358
|
+
@property
|
|
359
|
+
def changes(self) -> bool:
|
|
360
|
+
"""True when applying this would alter the file."""
|
|
361
|
+
return self.before != self.after
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
def _read_rc(shell: str) -> tuple[Path, str, bool]:
|
|
365
|
+
rc = _rc_path(shell)
|
|
366
|
+
exists = rc.exists()
|
|
367
|
+
return rc, (rc.read_text(encoding="utf-8") if exists else ""), exists
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
def plan_install(shell: str) -> RcPlan:
|
|
371
|
+
"""Describe wiring ``shell``'s rc file, writing nothing.
|
|
372
|
+
|
|
373
|
+
Raises :class:`BoostError` for a shell with no rc-file install path, and for
|
|
374
|
+
an rc file holding an unclosed block — so a dry run answers the dangerous
|
|
375
|
+
question too, rather than only the safe one.
|
|
376
|
+
"""
|
|
377
|
+
rc, text, exists = _read_rc(shell)
|
|
378
|
+
after = _merge_rc(text, _rc_block(shell), rc)
|
|
379
|
+
if not exists:
|
|
380
|
+
action = "create"
|
|
381
|
+
elif after == text:
|
|
382
|
+
action = "none"
|
|
383
|
+
elif _spans(text, rc):
|
|
384
|
+
action = "replace"
|
|
385
|
+
else:
|
|
386
|
+
action = "add"
|
|
387
|
+
return RcPlan(path=rc, action=action, before=text, after=after)
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
def plan_uninstall(shell: str) -> RcPlan:
|
|
391
|
+
"""Describe removing what :func:`install` wired up, writing nothing."""
|
|
392
|
+
rc, text, _ = _read_rc(shell)
|
|
393
|
+
after = _strip_rc(text, rc)
|
|
394
|
+
return RcPlan(path=rc, action=("remove" if after != text else "none"),
|
|
395
|
+
before=text, after=after)
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
def apply(plan: RcPlan) -> Path:
|
|
399
|
+
"""Write ``plan``'s result. A no-op when it changes nothing, so an rc file
|
|
400
|
+
keeps its mtime (and its place in the user's backups) on a repeat run."""
|
|
401
|
+
if plan.changes:
|
|
402
|
+
plan.path.write_text(plan.after, encoding="utf-8")
|
|
403
|
+
return plan.path
|
|
404
|
+
|
|
405
|
+
|
|
298
406
|
def install(shell: str) -> Path:
|
|
299
407
|
"""Idempotently wire ``shell``'s rc file to eval boost's completions on
|
|
300
408
|
every startup. Returns the rc file path. Raises :class:`BoostError` for
|
|
301
409
|
a shell with no rc-file install path (currently anything but bash/zsh)."""
|
|
302
|
-
|
|
303
|
-
text = rc.read_text(encoding="utf-8") if rc.exists() else ""
|
|
304
|
-
rc.write_text(_merge_rc(text, _rc_block(shell)), encoding="utf-8")
|
|
305
|
-
return rc
|
|
410
|
+
return apply(plan_install(shell))
|
|
306
411
|
|
|
307
412
|
|
|
308
413
|
def uninstall(shell: str) -> Path:
|
|
309
414
|
"""Remove what :func:`install` wired up. A no-op if never installed."""
|
|
310
|
-
|
|
311
|
-
if rc.exists():
|
|
312
|
-
rc.write_text(_strip_rc(rc.read_text(encoding="utf-8")), encoding="utf-8")
|
|
313
|
-
return rc
|
|
415
|
+
return apply(plan_uninstall(shell))
|
|
314
416
|
|
|
315
417
|
|
|
316
418
|
def detect_shell() -> str:
|
|
@@ -213,6 +213,7 @@ docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md
|
|
|
213
213
|
docs/roadmap/items/command-carousel-page.md
|
|
214
214
|
docs/roadmap/items/command-reference-docs-site.md
|
|
215
215
|
docs/roadmap/items/completions-complete-only-command-names.md
|
|
216
|
+
docs/roadmap/items/completions-install-could-eat-your-rc-file.md
|
|
216
217
|
docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md
|
|
217
218
|
docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md
|
|
218
219
|
docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md
|
|
@@ -399,6 +400,7 @@ docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md
|
|
|
399
400
|
docs/roadmap/items/structured-json-log-output-mode.md
|
|
400
401
|
docs/roadmap/items/supply-chain-posture-openssf-scorecard.md
|
|
401
402
|
docs/roadmap/items/surface-every-docs-page-from-the-guide.md
|
|
403
|
+
docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md
|
|
402
404
|
docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md
|
|
403
405
|
docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md
|
|
404
406
|
docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md
|
|
@@ -588,6 +590,7 @@ tests/unit/test_command_reference_fresh.py
|
|
|
588
590
|
tests/unit/test_community_health_files.py
|
|
589
591
|
tests/unit/test_compact.py
|
|
590
592
|
tests/unit/test_complete.py
|
|
593
|
+
tests/unit/test_complete_rc_block.py
|
|
591
594
|
tests/unit/test_config.py
|
|
592
595
|
tests/unit/test_content_dedupe.py
|
|
593
596
|
tests/unit/test_crash_redaction.py
|
|
@@ -698,6 +701,7 @@ tests/unit/test_typosquat.py
|
|
|
698
701
|
tests/unit/test_updatediff.py
|
|
699
702
|
tests/unit/test_util.py
|
|
700
703
|
tests/unit/test_version.py
|
|
704
|
+
tests/unit/test_visual_harness_flags.py
|
|
701
705
|
tests/unit/test_workflow_concurrency.py
|
|
702
706
|
tests/unit/test_workflow_concurrency_groups.py
|
|
703
707
|
tests/unit/test_workflow_push_has_credentials.py
|
|
@@ -186,7 +186,7 @@
|
|
|
186
186
|
<a class="cmd-link" href="#cmd-create" data-search="create scaffold a new skill from a template --description description --dir dir --install name">create</a>
|
|
187
187
|
<a class="cmd-link" href="#cmd-policy" data-search="policy manage & enforce skill governance policies --json {list,set,unset,check} key value">policy</a>
|
|
188
188
|
<a class="cmd-link" href="#cmd-onboard" data-search="onboard add skill-tracker telemetry to a repo & open a pr --repo repo --pr --dry-run -f, --force">onboard</a>
|
|
189
|
-
<a class="cmd-link" href="#cmd-completions" data-search="completions generate shell tab-completion scripts --eval --install --uninstall {bash,zsh,fish}">completions</a>
|
|
189
|
+
<a class="cmd-link" href="#cmd-completions" data-search="completions generate shell tab-completion scripts --eval --dry-run --install --uninstall {bash,zsh,fish}">completions</a>
|
|
190
190
|
<a class="cmd-link" href="#cmd-schedule" data-search="schedule manage automatic skill-sync scheduling --interval {6h,12h,daily} --json {status,enable,disable}">schedule</a>
|
|
191
191
|
<a class="cmd-link" href="#cmd-serve" data-search="serve browse the catalogue in a browser: search, facets and a tap graph --port port --host host">serve</a>
|
|
192
192
|
<a class="cmd-link" href="#cmd-mcp" data-search="mcp register boost as an mcp server (claude code, gemini cli) register boost as an mcp server for your agent clis --host h --stdio --seed --no-seed {register,unregister}">mcp</a>
|
|
@@ -1049,10 +1049,10 @@
|
|
|
1049
1049
|
<div class="arg"><code>-f, --force</code><span>overwrite existing files without confirming</span></div>
|
|
1050
1050
|
</div>
|
|
1051
1051
|
</section>
|
|
1052
|
-
<section class="cmd" id="cmd-completions" data-search="completions generate shell tab-completion scripts --eval --install --uninstall {bash,zsh,fish}">
|
|
1052
|
+
<section class="cmd" id="cmd-completions" data-search="completions generate shell tab-completion scripts --eval --dry-run --install --uninstall {bash,zsh,fish}">
|
|
1053
1053
|
<h3><span class="cname">completions</span><span class="gtag">cfg</span></h3>
|
|
1054
1054
|
<p class="summary">Generate shell tab-completion scripts</p>
|
|
1055
|
-
<pre class="syn">boost completions [--eval] [--install] [--uninstall] [{bash,zsh,fish}]</pre>
|
|
1055
|
+
<pre class="syn">boost completions [--eval] [--dry-run] [--install] [--uninstall] [{bash,zsh,fish}]</pre>
|
|
1056
1056
|
<div class="args-h">Arguments</div>
|
|
1057
1057
|
<div class="args">
|
|
1058
1058
|
<div class="arg"><code>{bash,zsh,fish}</code><span>target shell (default: from $SHELL)</span></div>
|
|
@@ -1060,6 +1060,7 @@
|
|
|
1060
1060
|
<div class="args-h">Options</div>
|
|
1061
1061
|
<div class="args">
|
|
1062
1062
|
<div class="arg"><code>--eval</code><span>print the variant safe to `eval` directly (what --install wires up)</span></div>
|
|
1063
|
+
<div class="arg"><code>--dry-run</code><span>with --install/--uninstall: report what would change in the rc file without writing it</span></div>
|
|
1063
1064
|
<div class="arg"><code>--install</code><span>wire completions into the shell's rc file (bash/zsh — one-shot, no manual editing)</span></div>
|
|
1064
1065
|
<div class="arg"><code>--uninstall</code><span>remove what --install wired up</span></div>
|
|
1065
1066
|
</div>
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: completions-install-could-eat-your-rc-file
|
|
3
|
+
board: code
|
|
4
|
+
section: dx
|
|
5
|
+
status: inflight
|
|
6
|
+
category: Bug
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: High
|
|
9
|
+
wow: 4
|
|
10
|
+
note: two runs of a "no-op" command deleted the lines between two markers
|
|
11
|
+
order: 113
|
|
12
|
+
owner: fix/completions-malformed-block
|
|
13
|
+
pr:
|
|
14
|
+
title: <code>completions --install</code> could delete the config between its own markers
|
|
15
|
+
---
|
|
16
|
+
Found by asking a plain question — <em>is <code>boost completions</code>
|
|
17
|
+
idempotent?</em> — and testing the answer rather than reading the docstring. For
|
|
18
|
+
every ordinary input it is: seven paths reach a fixed point on the second run,
|
|
19
|
+
and the managed block is replaced in place rather than appended. Three states
|
|
20
|
+
were not ordinary, and each is reachable from one hand-edit of a shell rc file.
|
|
21
|
+
|
|
22
|
+
<b>A start marker with no end deleted user config.</b> <code>_merge_rc</code>
|
|
23
|
+
paired the first start marker with the next end marker found <em>anywhere</em>
|
|
24
|
+
after it. With an orphan start above real config, run one appended a second
|
|
25
|
+
block, and run two matched the orphan start against that new block's end and
|
|
26
|
+
removed everything in between — the user's own lines — while printing
|
|
27
|
+
<code>✓ wired boost completions into ~/.zshrc</code>. It converged, to a file
|
|
28
|
+
with the user's aliases gone.
|
|
29
|
+
|
|
30
|
+
<b>The inverse function already refused this exact input</b>, ten lines below:
|
|
31
|
+
<code>_strip_rc</code> carried the comment <em>"no end marker: malformed, leave
|
|
32
|
+
the file untouched."</em> So the state was recognised and only the writer failed
|
|
33
|
+
to handle it. That asymmetry is the whole bug, and it is why this was worth
|
|
34
|
+
fixing rather than filing: the reasoning was already in the file.
|
|
35
|
+
|
|
36
|
+
<b>Uninstall had the same hole from the mirror precondition.</b>
|
|
37
|
+
<code>_strip_rc</code> was safe only while the orphan start was the sole marker.
|
|
38
|
+
Put a well-formed block below it and uninstall paired the orphan with that
|
|
39
|
+
block's end: an rc file of <code>export A=1</code> plus four user lines came
|
|
40
|
+
back as <code>export A=1</code> alone.
|
|
41
|
+
|
|
42
|
+
<b>Two blocks made uninstall lie.</b> It removed the first and left the second,
|
|
43
|
+
so boost reported <em>removed</em> while the shell went on sourcing
|
|
44
|
+
completions — the same shape as the <code>sync</code> defect in
|
|
45
|
+
<code>#515</code>, a command reporting success for work it declined to do.
|
|
46
|
+
|
|
47
|
+
<b>The fix is one scan with the right invariant:</b> a block must close before
|
|
48
|
+
the next one opens. Testing only for a missing end marker is the original bug in
|
|
49
|
+
a new place, which the first draft of this fix reproduced and a test caught.
|
|
50
|
+
Install now collapses to exactly one block, uninstall removes every block, and
|
|
51
|
+
both refuse an unclosed one by name instead of guessing. An orphan
|
|
52
|
+
<em>end</em> marker stays harmless and is pinned as such, so a later
|
|
53
|
+
"tighten the parser" change cannot start rejecting a file that works.
|
|
54
|
+
|
|
55
|
+
<b><code>--dry-run</code> makes it answerable before it is written.</b>
|
|
56
|
+
<code>boost completions --install --dry-run</code> prints the exact +/- lines
|
|
57
|
+
and touches nothing, and it raises on the malformed file too — a validation that
|
|
58
|
+
only reports the safe cases is not a validation. Plan and apply are one code
|
|
59
|
+
path (<code>plan_install</code> → <code>apply</code>), so the preview cannot
|
|
60
|
+
disagree with the write, and a test pins that equality. Applying a no-op change
|
|
61
|
+
now also leaves the file's mtime alone rather than rewriting identical bytes.
|
|
62
|
+
|
|
63
|
+
<b>Verified exhaustively, not just by example.</b> A property test enumerates
|
|
64
|
+
every arrangement of up to four fragments — user line, stray start, stray end,
|
|
65
|
+
real block — and asserts three invariants over all 672 orderings: a user line
|
|
66
|
+
boost does not own is never lost, a successful uninstall never leaves a block,
|
|
67
|
+
and a refusal never modifies the file. Against the pre-fix code the same test
|
|
68
|
+
reports <b>220 violations</b> (198 of the second, 22 of the first); against the
|
|
69
|
+
fix, zero. It runs in 0.38s.
|
|
70
|
+
|
|
71
|
+
That sweep also corrected its own first draft. Its initial invariant counted
|
|
72
|
+
every user line, and flagged 16 "failures" that were the managed block behaving
|
|
73
|
+
exactly as conda, nvm and rbenv do — content between the markers is boost's to
|
|
74
|
+
replace. The real invariant is about lines boost does <em>not</em> own, and the
|
|
75
|
+
reference parser has to resolve the orphan-start ambiguity the way the fix does
|
|
76
|
+
rather than the way the bug did, or it under-reports the data loss it exists to
|
|
77
|
+
catch.
|
|
78
|
+
|
|
79
|
+
An rc file is the user's own hand-written config and the worst file boost owns
|
|
80
|
+
an edit to, which is what moves this from tidy-up to High impact. The old tests
|
|
81
|
+
covered only the well-formed path — a double install leaving one marker — so
|
|
82
|
+
none of the three states had a failing test to find them.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: sweep-died-at-launch-not-at-a-page
|
|
3
|
+
board: code
|
|
4
|
+
section: pipeline
|
|
5
|
+
status: inflight
|
|
6
|
+
category: CI · Bug
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: High
|
|
9
|
+
wow: 4
|
|
10
|
+
note: a comment in the sibling file predicted this exact failure
|
|
11
|
+
order: 114
|
|
12
|
+
owner: fix/visual-sweep-single-process
|
|
13
|
+
pr:
|
|
14
|
+
title: The <code>sweep</code> gate died at browser launch, not at a page
|
|
15
|
+
---
|
|
16
|
+
Every <code>sweep</code> run failed from 2026-08-15 onward — on <code>main</code>
|
|
17
|
+
and on every branch — and the failure was not a visual regression at all. Chrome
|
|
18
|
+
died during the CDP startup handshake, before a single page loaded:
|
|
19
|
+
|
|
20
|
+
<code>TargetCloseError: Protocol error (Target.setAutoAttach): Target closed</code>
|
|
21
|
+
out of <code>ChromeLauncher.launch</code>.
|
|
22
|
+
|
|
23
|
+
<b>The trigger was the environment, and the evidence is an A/B on identical
|
|
24
|
+
trees.</b> <code>#515</code>'s own PR run passed on 2026-08-13 at 17:22; the
|
|
25
|
+
byte-identical squash-merge failed on 2026-08-15 at 22:10. Same content, opposite
|
|
26
|
+
result, two days apart — the <code>ubuntu-latest</code> runner image bumped
|
|
27
|
+
Chrome underneath it. Nothing in the repo changed;
|
|
28
|
+
<code>visual_check.mjs</code> had carried the same flags since <code>#209</code>.
|
|
29
|
+
|
|
30
|
+
<b>The sibling file predicted it, in a comment, by name.</b>
|
|
31
|
+
<code>a11y_check.mjs</code> was fixed earlier to scope <code>--single-process</code>
|
|
32
|
+
to the <code>chrome-headless-shell</code> binary, and its comment recorded why the
|
|
33
|
+
other half of the directory was still exposed: <em>"visual_check.mjs already
|
|
34
|
+
passes the flag … <code>--single-process</code> is a debug-only flag there whose
|
|
35
|
+
interaction with new headless nothing in this repo exercises."</em> That is
|
|
36
|
+
exactly the interaction that broke.
|
|
37
|
+
|
|
38
|
+
<b>Two candidate causes, both addressed, because the CI path cannot be
|
|
39
|
+
reproduced locally.</b> <code>--single-process</code> is debug-only and
|
|
40
|
+
unsupported against full Chrome; and <code>headless: "shell"</code> asks for the
|
|
41
|
+
old headless mode, which Chrome removed from the main binary and now ships only
|
|
42
|
+
as the separate <code>chrome-headless-shell</code> executable. Both are now
|
|
43
|
+
conditioned on the same predicate the a11y harness uses, so against
|
|
44
|
+
<code>/usr/bin/google-chrome</code> the sweep launches in new headless with
|
|
45
|
+
neither flag — the shape <code>a11y_check.mjs</code> has been driving on this
|
|
46
|
+
runner all along. Keyed on the <em>binary</em> rather than on
|
|
47
|
+
<code>process.platform</code>: a macOS run pointed at full Chrome must not
|
|
48
|
+
inherit a flag meant for the shell.
|
|
49
|
+
|
|
50
|
+
<b>What was verified, and what was not.</b> The harness runs end to end and
|
|
51
|
+
passes <b>10 pages × 5 widths clean</b> against a downloaded
|
|
52
|
+
<code>chrome-headless-shell</code> 152 — which also proves the docs pages
|
|
53
|
+
themselves were never the problem. The flag selection was evaluated directly for
|
|
54
|
+
four binary paths. The <em>CI</em> path is not locally reproducible and this card
|
|
55
|
+
says so rather than implying otherwise: full Chrome cannot start under this macOS
|
|
56
|
+
sandbox at all, aborting with <code>The browser is already running for
|
|
57
|
+
<fresh profile dir></code> from ProcessSingleton — a different error from
|
|
58
|
+
CI's, so it is interference, not a reproduction. CI is the verifier.
|
|
59
|
+
|
|
60
|
+
<b>The ratchet.</b> <code>tests/unit/test_visual_harness_flags.py</code> fails
|
|
61
|
+
the build if either harness hands a sandbox-only flag to a full Chrome, and if
|
|
62
|
+
the two stop agreeing on the predicate. The bug here was not the flag — it was
|
|
63
|
+
that one file was fixed and the other was not, and the only thing recording that
|
|
64
|
+
was a comment. A comment cannot fail a build.
|