boost-skill-cli 1.2.36__tar.gz → 1.2.37__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {boost_skill_cli-1.2.36/boost_skill_cli.egg-info → boost_skill_cli-1.2.37}/PKG-INFO +1 -1
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/cli.py +6 -1
- boost_skill_cli-1.2.37/boost_cli/cliparse.py +66 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/bmad.py +5 -1
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/discovery.py +1 -1
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/info.py +21 -8
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/intelligence.py +6 -3
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/team.py +15 -7
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/output.py +45 -7
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37/boost_skill_cli.egg-info}/PKG-INFO +1 -1
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_skill_cli.egg-info/SOURCES.txt +1 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/commands.html +8 -8
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/design-roadmap.html +16 -2
- boost_skill_cli-1.2.37/docs/roadmap/items/BOOST-D27.md +22 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_bmad.py +15 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_discovery.py +10 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_info.py +85 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_intelligence.py +21 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_team.py +41 -0
- boost_skill_cli-1.2.37/tests/unit/test_cliparse.py +92 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_errors_and_cli_table.py +21 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_output.py +113 -0
- boost_skill_cli-1.2.36/boost_cli/cliparse.py +0 -33
- boost_skill_cli-1.2.36/tests/unit/test_cliparse.py +0 -45
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/.gitattributes +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/.gitignore +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/.lycheeignore +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/.vale/styles/boost/AIWriting.yml +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/.vale.ini +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/CLAUDE.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/DCO +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/GOVERNANCE.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/LICENSE +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/MAINTAINERS.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/MANIFEST.in +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/Makefile +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/README.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/SECURITY.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/SUPPORT.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/bmad.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/bootstrap.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/browse.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/builtin.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/catalogbundle.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/complete.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/hookhost.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/data/rules/boost-first.mdc +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_langchain/__init__.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_langchain/_compat.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_langchain/graph.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_langchain/loader.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_langchain/py.typed +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_langchain/retriever.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/codecov.yml +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/adapters.html +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/bmad.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel.html +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/chat.html +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/code-review.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/commit-audit.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/demo.gif +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/demo.html +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/demo.tape +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/dependencies.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/eval-latest.json +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/eval.html +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/index.html +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/langchain.html +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/openssf-badge.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/boost-first-rule.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/branch-current-gate.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/cli-command-audit.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/install-path-disambiguation.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/openssf-silver.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/osps-baseline-levels.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/vex-openvex-feed.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/zip-strict-audit.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap.html +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/security-design.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/semantic-search.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/verifying-releases.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/vex/meta.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/vex/openvex.json +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/evals/README.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/evals/__init__.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/evals/baseline.json +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/evals/metrics.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/evals/publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/examples/README.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/index.html +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/noxfile.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/pyproject.toml +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/add_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/build_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/build_vex.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/check_branch_current.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/check_dco.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/check_reproducible.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/eval_corpus.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/measure_registry.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/normalize_sdist.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/page_budget.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/publish_eval_json.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/serve_docs.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/setup.cfg +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/sonar-project.properties +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/style/README.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/style/boost.css +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/style/boost.js +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/style/demo.html +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/conftest.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/eval/taps-scale.txt +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_catalog.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_hooks_gemini.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_pane_width.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_kind_conformance.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/langchain/conftest.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/langchain/test_graph.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/langchain/test_loader.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/langchain/test_retriever.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_action_pin_lockstep.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_bmad_core.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_boost_first_offer.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_bootstrap.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_branch_current.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_browse.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_builtin.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_catalogbundle.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_check_dco.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_check_reproducible.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_clean_internal_cache.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_compact.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_complete.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_complete_rc_block.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_content_identity.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_crash_redaction.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_dense_embed_dedupe.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_dense_quantized.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_dense_ready_order.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_dense_shard_real_schema.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_dense_status_cheap.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_embed_truncated_response.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_eval_corpus.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_eval_grading.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_gemini_agent_sanitize.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_gitutil_lfs.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_gitutil_sparse.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_hook_settings_hosts.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_hookhost.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_install_permission_error.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_langchain_packaging.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_link_ownership.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_measure_registry.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_normalize_sdist.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_page_budget.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_rag_fastpath.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_registry_control_chars.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_rerank_cache.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_serve_docs.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_shards_matrix.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_smoke_covers_every_command.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_store_materialize.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_sync_blocked_links.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_vex.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_visual_harness_flags.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_workflow_concurrency_groups.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_workflow_push_has_credentials.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/visual/package-lock.json +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/visual/visual_check.mjs +0 -0
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '1.2.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 2,
|
|
21
|
+
__version__ = version = '1.2.37'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 2, 37)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -199,7 +199,12 @@ def print_help() -> None:
|
|
|
199
199
|
else:
|
|
200
200
|
print(head)
|
|
201
201
|
for n, s in cmds:
|
|
202
|
-
|
|
202
|
+
# accent, not a raw 16-color CYAN: every other command-name
|
|
203
|
+
# surface (search rows, info badges) resolves through this same
|
|
204
|
+
# semantic role, which is Aurora truecolor cyan with the correct
|
|
205
|
+
# 16-color/plain degradation — a raw CYAN here painted a visibly
|
|
206
|
+
# different cyan on any truecolor terminal.
|
|
207
|
+
print(" " + out.role(n.ljust(width + 2), "accent")
|
|
203
208
|
+ out.truncate(s, max(0, cols - width - 4)))
|
|
204
209
|
print()
|
|
205
210
|
print(out.c("%d commands · %d groups" % (len(COMMANDS), len(GROUPS)), out.DIM))
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Copyright the boost contributors.
|
|
2
|
+
# SPDX-License-Identifier: GPL-3.0-only
|
|
3
|
+
"""A branded ArgumentParser.
|
|
4
|
+
|
|
5
|
+
Argparse's default failure output is a raw, unstyled ``usage:`` block with a
|
|
6
|
+
bare ``prog: error: …`` line — nothing like boost's branded top-level dispatch
|
|
7
|
+
(which routes through :func:`output.err` and offers a "did you mean"). This
|
|
8
|
+
subclass routes a parser's own errors through the same Aurora output layer, so
|
|
9
|
+
a wrong invocation looks as designed as a right one.
|
|
10
|
+
|
|
11
|
+
Adopt it via :func:`parser` in place of ``argparse.ArgumentParser``. Sub-parsers
|
|
12
|
+
created with ``add_subparsers()`` inherit this class automatically, so a single
|
|
13
|
+
top-level swap brands a command's whole tree.
|
|
14
|
+
"""
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
import argparse
|
|
18
|
+
import sys
|
|
19
|
+
|
|
20
|
+
from .core import output as out
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class _BoostHelpFormatter(argparse.HelpFormatter):
|
|
24
|
+
"""Wraps help/description text the way :func:`output.wrap` does,
|
|
25
|
+
keeping a backtick-quoted command atomic instead of splitting it across
|
|
26
|
+
lines — the same rule every other long line in this CLI follows.
|
|
27
|
+
|
|
28
|
+
argparse's own ``HelpFormatter`` wraps with plain ``textwrap``, which
|
|
29
|
+
knows nothing about a backtick span (``doctor``/``search`` interpolate
|
|
30
|
+
hints ending in a pasteable ``pip install '...'``-style command; several
|
|
31
|
+
``help=`` strings quote a ``boost`` invocation the same way) — so a
|
|
32
|
+
narrow terminal could split one across two lines, handing the user a
|
|
33
|
+
command that does not run. Only the two text-filling hooks are
|
|
34
|
+
overridden; ``_format_usage``'s own line-splitting already treats a
|
|
35
|
+
metavar as one atomic part and is left alone.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
def _split_lines(self, text: str, width: int) -> list[str]:
|
|
39
|
+
text = self._whitespace_matcher.sub(" ", text).strip()
|
|
40
|
+
return out.wrap(text, width) or [text]
|
|
41
|
+
|
|
42
|
+
def _fill_text(self, text: str, width: int, indent: str) -> str:
|
|
43
|
+
text = self._whitespace_matcher.sub(" ", text).strip()
|
|
44
|
+
lines = out.wrap(text, max(width - len(indent), 1)) or [text]
|
|
45
|
+
return "\n".join(indent + ln for ln in lines)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class BoostArgumentParser(argparse.ArgumentParser):
|
|
49
|
+
def __init__(self, *args, **kwargs):
|
|
50
|
+
# add_subparsers() creates each sub-parser via type(self)(**kwargs)
|
|
51
|
+
# without forwarding formatter_class, so defaulting it here (rather
|
|
52
|
+
# than in parser() below) is what brands every subcommand's --help
|
|
53
|
+
# too, not just the top-level one.
|
|
54
|
+
kwargs.setdefault("formatter_class", _BoostHelpFormatter)
|
|
55
|
+
super().__init__(*args, **kwargs)
|
|
56
|
+
|
|
57
|
+
def error(self, message: str):
|
|
58
|
+
"""Print a branded error + dimmed usage, then exit 2 (argparse's code)."""
|
|
59
|
+
out.err(message)
|
|
60
|
+
sys.stderr.write(out.c(self.format_usage(), out.DIM))
|
|
61
|
+
self.exit(2)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def parser(*args, **kwargs) -> BoostArgumentParser:
|
|
65
|
+
"""Drop-in replacement for ``argparse.ArgumentParser(...)``."""
|
|
66
|
+
return BoostArgumentParser(*args, **kwargs)
|
|
@@ -78,7 +78,11 @@ def cmd_bmad(argv) -> int:
|
|
|
78
78
|
p = cliparse.parser(
|
|
79
79
|
prog="boost bmad",
|
|
80
80
|
description="BMAD Method autopilot: personas, prompt routing, workflows")
|
|
81
|
-
|
|
81
|
+
# metavar="ACTION": the auto-generated {on,off,...,status} metavar (13
|
|
82
|
+
# entries) is one unbreakable token and overflowed the usage line up to
|
|
83
|
+
# 100 columns wide. The full list still shows in `help=` below.
|
|
84
|
+
p.add_argument("action", choices=_ACTIONS, metavar="ACTION",
|
|
85
|
+
help=" | ".join(_ACTIONS))
|
|
82
86
|
p.add_argument("value", nargs="?",
|
|
83
87
|
help="startup: on | off | status · route: the prompt to classify")
|
|
84
88
|
p.add_argument("-s", "--scope", choices=("project", "global"), default=None,
|
|
@@ -13,7 +13,6 @@ import re
|
|
|
13
13
|
import shlex
|
|
14
14
|
import subprocess
|
|
15
15
|
import sys
|
|
16
|
-
import textwrap
|
|
17
16
|
import webbrowser
|
|
18
17
|
from itertools import chain
|
|
19
18
|
from pathlib import Path
|
|
@@ -197,9 +196,12 @@ def _mark(installed: bool) -> str:
|
|
|
197
196
|
|
|
198
197
|
|
|
199
198
|
def _print_wrapped(text: str) -> None:
|
|
199
|
+
"""Wrap prose to the *real* pane via out.wrap(), not a hardcoded width —
|
|
200
|
+
a fixed textwrap width=76 neither shrank for a narrow terminal nor grew
|
|
201
|
+
for a wide one, and did not know a backtick span must stay whole."""
|
|
200
202
|
paras = [p for p in re.split(r"\n\s*\n", text.strip()) if p.strip()]
|
|
201
203
|
for i, para in enumerate(paras):
|
|
202
|
-
for line in
|
|
204
|
+
for line in out.wrap(" ".join(para.split()), out.term_width() - 2):
|
|
203
205
|
out.info(line)
|
|
204
206
|
if i < len(paras) - 1:
|
|
205
207
|
print()
|
|
@@ -471,10 +473,11 @@ def cmd_info(argv):
|
|
|
471
473
|
if badges:
|
|
472
474
|
out.info(" ".join(badges))
|
|
473
475
|
if desc:
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
476
|
+
# kv's own wrap=True already folds to the real terminal width and
|
|
477
|
+
# aligns continuations under the value — the hand-rolled version this
|
|
478
|
+
# replaced hardcoded width=62 (a hand copy of kv's default 16-column
|
|
479
|
+
# lead against a fixed 78-column pane) and ignored COLUMNS entirely.
|
|
480
|
+
out.kv("description", desc, wrap=True)
|
|
478
481
|
if lock:
|
|
479
482
|
inst_v = str(lock.get("version", "?"))
|
|
480
483
|
out.kv("version", inst_v)
|
|
@@ -630,9 +633,19 @@ def _render_markdown(body: str) -> None:
|
|
|
630
633
|
continue
|
|
631
634
|
m = re.match(r"^(\s*)[-*]\s+(.*)$", line)
|
|
632
635
|
if m:
|
|
633
|
-
|
|
636
|
+
prefix = "%s • " % m.group(1)
|
|
637
|
+
# Wrap the raw markdown first, THEN colorize each wrapped chunk —
|
|
638
|
+
# coloring before wrapping (the old behavior for the plain-prose
|
|
639
|
+
# branch below) would either split an inline `code` span or leave
|
|
640
|
+
# line 1's color code unterminated. A backtick span is one atomic
|
|
641
|
+
# token either way, via out.wrap().
|
|
642
|
+
wrapped = out.wrap(m.group(2), out.term_width() - len(prefix)) or [""]
|
|
643
|
+
for i, chunk in enumerate(wrapped):
|
|
644
|
+
lead = prefix if i == 0 else " " * len(prefix)
|
|
645
|
+
print(lead + _inline(chunk))
|
|
634
646
|
continue
|
|
635
|
-
|
|
647
|
+
for chunk in out.wrap(line, out.term_width()) or [""]:
|
|
648
|
+
print(_inline(chunk))
|
|
636
649
|
|
|
637
650
|
|
|
638
651
|
def cmd_preview(argv):
|
|
@@ -772,8 +772,10 @@ _CONTEXT_DEFAULT = {"enabled": False, "rules": []}
|
|
|
772
772
|
def cmd_context(argv: list[str]) -> int:
|
|
773
773
|
ap = cliparse.parser(
|
|
774
774
|
prog="boost context", description="Branch-aware skill activation")
|
|
775
|
-
|
|
776
|
-
|
|
775
|
+
# metavar="ACTION": the full "status|enable|disable|map|unmap|apply"
|
|
776
|
+
# spelling is one unbreakable token that overflowed the usage line at 60
|
|
777
|
+
# columns. Each subcommand still lists its own help= below.
|
|
778
|
+
sub = ap.add_subparsers(dest="action", metavar="ACTION")
|
|
777
779
|
sp = sub.add_parser("status", help="show rules, enabled flag & branch")
|
|
778
780
|
sp.add_argument("--json", action="store_true")
|
|
779
781
|
sub.add_parser("enable", help="turn on branch-aware activation (runs apply)")
|
|
@@ -873,7 +875,8 @@ def _context_status(state: dict, as_json: bool) -> int:
|
|
|
873
875
|
out.kv("branch", branch or "(not in a git repository)")
|
|
874
876
|
rules = state.get("rules", [])
|
|
875
877
|
if not rules:
|
|
876
|
-
out.info("no rules — add one with `boost context map 'feature/*'
|
|
878
|
+
out.info("no rules — add one with `boost context map 'feature/*' "
|
|
879
|
+
"skill1,skill2`", wrap=True)
|
|
877
880
|
return 0
|
|
878
881
|
rows = [(r.get("pattern", "?"), ", ".join(r.get("skills", [])),
|
|
879
882
|
"*" if branch and fnmatch.fnmatch(branch, r.get("pattern", "")) else "")
|
|
@@ -128,7 +128,7 @@ def cmd_cohort(argv) -> int:
|
|
|
128
128
|
raise BoostError("no cohort named %s" % args.name,
|
|
129
129
|
hint="list cohorts with `boost cohort list`")
|
|
130
130
|
if not targets:
|
|
131
|
-
out.
|
|
131
|
+
print(out.empty_state("no cohorts defined"))
|
|
132
132
|
return 0
|
|
133
133
|
applied = skipped = 0
|
|
134
134
|
for cname in targets:
|
|
@@ -174,8 +174,11 @@ def cmd_cohort(argv) -> int:
|
|
|
174
174
|
print(json.dumps(data, indent=2))
|
|
175
175
|
return 0
|
|
176
176
|
if not rows:
|
|
177
|
-
out.
|
|
178
|
-
|
|
177
|
+
print(out.empty_state(
|
|
178
|
+
"no cohorts defined",
|
|
179
|
+
hint="create one: `boost cohort create pilot --skills "
|
|
180
|
+
"tdd-workflow --percent 50`",
|
|
181
|
+
wrap=True))
|
|
179
182
|
return 0
|
|
180
183
|
out.table(rows, headers=("COHORT", "SKILLS", "ROLLOUT", "YOU"))
|
|
181
184
|
print()
|
|
@@ -518,7 +521,9 @@ def cmd_pulse(argv) -> int:
|
|
|
518
521
|
print(json.dumps(events, indent=2))
|
|
519
522
|
return 0
|
|
520
523
|
if not events:
|
|
521
|
-
out.
|
|
524
|
+
print(out.empty_state(
|
|
525
|
+
"no activity yet — events appear as you install and manage skills",
|
|
526
|
+
wrap=True))
|
|
522
527
|
return 0
|
|
523
528
|
for e in events:
|
|
524
529
|
action = e.get("action", "?")
|
|
@@ -557,7 +562,9 @@ def cmd_replay(argv) -> int:
|
|
|
557
562
|
print(json.dumps(history, indent=2))
|
|
558
563
|
return 0
|
|
559
564
|
if not history:
|
|
560
|
-
out.
|
|
565
|
+
print(out.empty_state(
|
|
566
|
+
"no lock history yet — every install/uninstall snapshots "
|
|
567
|
+
"the lock file", wrap=True))
|
|
561
568
|
return 0
|
|
562
569
|
rows = []
|
|
563
570
|
prev_items = None
|
|
@@ -693,8 +700,9 @@ def cmd_who(argv) -> int:
|
|
|
693
700
|
|
|
694
701
|
events = journal.events(subject=args.skill) if args.skill else journal.events()
|
|
695
702
|
if not events:
|
|
696
|
-
out.
|
|
697
|
-
|
|
703
|
+
print(out.empty_state(
|
|
704
|
+
"no journal activity yet — expertise builds as people install, "
|
|
705
|
+
"edit, and evolve skills", wrap=True))
|
|
698
706
|
return 0
|
|
699
707
|
|
|
700
708
|
if args.skill:
|
|
@@ -16,6 +16,7 @@ import os
|
|
|
16
16
|
import re
|
|
17
17
|
import shutil
|
|
18
18
|
import sys
|
|
19
|
+
import unicodedata
|
|
19
20
|
from collections.abc import Sequence
|
|
20
21
|
from dataclasses import dataclass
|
|
21
22
|
|
|
@@ -336,9 +337,30 @@ def badge(label: str, hue: str = "cyan") -> str:
|
|
|
336
337
|
_ANSI_RE = re.compile(r"\033\[[0-9;]*m")
|
|
337
338
|
|
|
338
339
|
|
|
340
|
+
def _char_width(ch: str) -> int:
|
|
341
|
+
"""Terminal display width of one character: 2 for wide/fullwidth CJK and
|
|
342
|
+
most emoji, 0 for a combining mark, 1 otherwise.
|
|
343
|
+
|
|
344
|
+
A pure-stdlib approximation of wcwidth via ``unicodedata`` — no dependency
|
|
345
|
+
to earn just for column math, and the two classes it distinguishes
|
|
346
|
+
(``unicodedata.east_asian_width`` returning "W"/"F") are exactly the ones
|
|
347
|
+
that render two columns wide in every terminal this CLI targets.
|
|
348
|
+
"""
|
|
349
|
+
if unicodedata.combining(ch):
|
|
350
|
+
return 0
|
|
351
|
+
return 2 if unicodedata.east_asian_width(ch) in ("W", "F") else 1
|
|
352
|
+
|
|
353
|
+
|
|
339
354
|
def visible_len(s: str) -> int:
|
|
340
|
-
"""
|
|
341
|
-
|
|
355
|
+
"""Column width of a string: ANSI escapes cost nothing, a wide character
|
|
356
|
+
(CJK, most emoji) costs 2, everything else costs 1.
|
|
357
|
+
|
|
358
|
+
``len()`` alone undercounts any string holding a double-width character,
|
|
359
|
+
which is what silently misaligned a table the moment a cell held an emoji
|
|
360
|
+
or CJK text — the column budget was measured a codepoint short of what
|
|
361
|
+
the terminal actually draws.
|
|
362
|
+
"""
|
|
363
|
+
return sum(_char_width(ch) for ch in _ANSI_RE.sub("", s))
|
|
342
364
|
|
|
343
365
|
|
|
344
366
|
_CODE_SPAN_RE = re.compile(r"`[^`]*`")
|
|
@@ -457,13 +479,26 @@ _TRAFFIC = ((0xff, 0x5f, 0x57, RED), (0xfe, 0xbc, 0x2e, YELLOW),
|
|
|
457
479
|
(0x28, 0xc8, 0x40, GREEN))
|
|
458
480
|
|
|
459
481
|
|
|
460
|
-
def empty_state(message: str, hint: str | None = None) -> str:
|
|
482
|
+
def empty_state(message: str, hint: str | None = None, wrap: bool = False) -> str:
|
|
461
483
|
"""A standardized empty-state: a muted ○ bullet + message, with an optional
|
|
462
484
|
dim → hint on the next line. One affordance so 'nothing here' always reads
|
|
463
|
-
the same across commands.
|
|
464
|
-
|
|
485
|
+
the same across commands.
|
|
486
|
+
|
|
487
|
+
``wrap`` as in :func:`warn`: opt-in, folding each block to the pane rather
|
|
488
|
+
than always-on, so a call site with an atomic backtick-quoted command
|
|
489
|
+
(e.g. cohort's create hint) still gets that command whole rather than
|
|
490
|
+
split across lines. Both markers ("○ " / "→ ") are two visible columns,
|
|
491
|
+
matching the module's other 4-column-lead emitters (2-space indent + a
|
|
492
|
+
2-wide marker), so message and hint wrap to the same budget.
|
|
493
|
+
"""
|
|
494
|
+
def _block(marker: str, text: str) -> list[str]:
|
|
495
|
+
body = _wrap_lines(text, 4) if wrap else [text]
|
|
496
|
+
return ([" " + c(marker + body[0], DIM)]
|
|
497
|
+
+ [" " + c(ln, DIM) for ln in body[1:]])
|
|
498
|
+
|
|
499
|
+
out_lines = _block("○ ", message)
|
|
465
500
|
if hint:
|
|
466
|
-
out_lines
|
|
501
|
+
out_lines += _block("→ ", hint)
|
|
467
502
|
return "\n".join(out_lines)
|
|
468
503
|
|
|
469
504
|
|
|
@@ -676,8 +711,11 @@ def _clip_visible(s: str, width: int, ellipsis: str = "…") -> str:
|
|
|
676
711
|
had_escape = True
|
|
677
712
|
i = m.end()
|
|
678
713
|
continue
|
|
714
|
+
w = _char_width(s[i])
|
|
715
|
+
if vis + w > keep:
|
|
716
|
+
break # a wide character never gets cut in half for the ellipsis
|
|
679
717
|
out_chars.append(s[i])
|
|
680
|
-
vis +=
|
|
718
|
+
vis += w
|
|
681
719
|
i += 1
|
|
682
720
|
result = "".join(out_chars) + ellipsis
|
|
683
721
|
if had_escape and not result.endswith(RESET):
|
|
@@ -196,6 +196,7 @@ docs/roadmap/items/BOOST-D23.md
|
|
|
196
196
|
docs/roadmap/items/BOOST-D24.md
|
|
197
197
|
docs/roadmap/items/BOOST-D25.md
|
|
198
198
|
docs/roadmap/items/BOOST-D26.md
|
|
199
|
+
docs/roadmap/items/BOOST-D27.md
|
|
199
200
|
docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md
|
|
200
201
|
docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md
|
|
201
202
|
docs/roadmap/items/actionlint-skips-shellcheck-silently.md
|
|
@@ -156,7 +156,7 @@
|
|
|
156
156
|
<a class="cmd-link" href="#cmd-infer" data-search="infer generate a skill.md from your codebase patterns --path dir --name n -o, --output file --install">infer</a>
|
|
157
157
|
<a class="cmd-link" href="#cmd-absorb" data-search="absorb turn recurring chat-history patterns into a skill --history path --limit n --install">absorb</a>
|
|
158
158
|
<a class="cmd-link" href="#cmd-evolve" data-search="evolve iteratively improve a skill from feedback --feedback text --apply name">evolve</a>
|
|
159
|
-
<a class="cmd-link" href="#cmd-context" data-search="context branch-aware skill activation
|
|
159
|
+
<a class="cmd-link" href="#cmd-context" data-search="context branch-aware skill activation action">context</a>
|
|
160
160
|
<a class="cmd-link" href="#cmd-focus" data-search="focus temporarily prioritize skills for a work session --clear --status --json skill">focus</a>
|
|
161
161
|
<a class="cmd-link" href="#cmd-impact" data-search="impact measure a skill's influence on code quality --json name">impact</a>
|
|
162
162
|
</div>
|
|
@@ -191,7 +191,7 @@
|
|
|
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>
|
|
193
193
|
<a class="cmd-link" href="#cmd-hooks" data-search="hooks manage agent hooks (claude code, gemini cli) in settings.json manage agent hooks (scope- and host-aware) in settings.json --host h -c, --command command -n, --name name -s, --scope {global,project} -m, --matcher matcher --timeout timeout {add,remove,list} event">hooks</a>
|
|
194
|
-
<a class="cmd-link" href="#cmd-bmad" data-search="bmad bmad method autopilot — `bmad on` routes every task to a persona bmad method autopilot: personas, prompt routing, workflows -s, --scope {project,global} --modules modules -y, --yes --startup --plain
|
|
194
|
+
<a class="cmd-link" href="#cmd-bmad" data-search="bmad bmad method autopilot — `bmad on` routes every task to a persona bmad method autopilot: personas, prompt routing, workflows -s, --scope {project,global} --modules modules -y, --yes --startup --plain action value">bmad</a>
|
|
195
195
|
<a class="cmd-link" href="#cmd-self-update" data-search="self-update update boost itself to the latest version --dry-run">self-update</a>
|
|
196
196
|
</div>
|
|
197
197
|
<div class="group" data-group="team">
|
|
@@ -766,13 +766,13 @@
|
|
|
766
766
|
<div class="arg"><code>--apply</code><span>write the revision to the installed skill</span></div>
|
|
767
767
|
</div>
|
|
768
768
|
</section>
|
|
769
|
-
<section class="cmd" id="cmd-context" data-search="context branch-aware skill activation
|
|
769
|
+
<section class="cmd" id="cmd-context" data-search="context branch-aware skill activation action">
|
|
770
770
|
<h3><span class="cname">context</span><span class="gtag">ai</span></h3>
|
|
771
771
|
<p class="summary">Branch-aware skill activation</p>
|
|
772
|
-
<pre class="syn">boost context
|
|
772
|
+
<pre class="syn">boost context ACTION</pre>
|
|
773
773
|
<div class="args-h">Arguments</div>
|
|
774
774
|
<div class="args">
|
|
775
|
-
<div class="arg"><code>
|
|
775
|
+
<div class="arg"><code>ACTION</code><span></span></div>
|
|
776
776
|
</div>
|
|
777
777
|
</section>
|
|
778
778
|
<section class="cmd" id="cmd-focus" data-search="focus temporarily prioritize skills for a work session --clear --status --json skill">
|
|
@@ -1127,14 +1127,14 @@
|
|
|
1127
1127
|
<div class="arg"><code>--timeout TIMEOUT</code><span>hook timeout in seconds (default: 10)</span></div>
|
|
1128
1128
|
</div>
|
|
1129
1129
|
</section>
|
|
1130
|
-
<section class="cmd" id="cmd-bmad" data-search="bmad bmad method autopilot — `bmad on` routes every task to a persona bmad method autopilot: personas, prompt routing, workflows -s, --scope {project,global} --modules modules -y, --yes --startup --plain
|
|
1130
|
+
<section class="cmd" id="cmd-bmad" data-search="bmad bmad method autopilot — `bmad on` routes every task to a persona bmad method autopilot: personas, prompt routing, workflows -s, --scope {project,global} --modules modules -y, --yes --startup --plain action value">
|
|
1131
1131
|
<h3><span class="cname">bmad</span><span class="gtag">cfg</span></h3>
|
|
1132
1132
|
<p class="summary">BMAD Method autopilot — `bmad on` routes every task to a persona</p>
|
|
1133
|
-
<pre class="syn">boost bmad [--scope {project,global}] [--modules MODULES] [--yes] [--startup] [--plain]
|
|
1133
|
+
<pre class="syn">boost bmad [--scope {project,global}] [--modules MODULES] [--yes] [--startup] [--plain] ACTION [value]</pre>
|
|
1134
1134
|
<p class="desc">BMAD Method autopilot: personas, prompt routing, workflows</p>
|
|
1135
1135
|
<div class="args-h">Arguments</div>
|
|
1136
1136
|
<div class="args">
|
|
1137
|
-
<div class="arg"><code>
|
|
1137
|
+
<div class="arg"><code>ACTION</code><span>on | off | route | personas | install | init | startup | orient | uninstall | disable | enable | doctor | status</span></div>
|
|
1138
1138
|
<div class="arg"><code>value</code><span>startup: on | off | status · route: the prompt to classify</span></div>
|
|
1139
1139
|
</div>
|
|
1140
1140
|
<div class="args-h">Options</div>
|
|
@@ -227,7 +227,7 @@
|
|
|
227
227
|
<button class="pill" data-filter="impact" data-val="med">Med</button>
|
|
228
228
|
<button class="pill" data-filter="impact" data-val="low">Low</button>
|
|
229
229
|
</div>
|
|
230
|
-
<p class="roadmap-count"><b id="shown"><!-- ROADMAP:count shown -->
|
|
230
|
+
<p class="roadmap-count"><b id="shown"><!-- ROADMAP:count shown -->27<!-- /ROADMAP:count --></b> of <b><!-- ROADMAP:count total -->27<!-- /ROADMAP:count --></b> opportunities shown</p>
|
|
231
231
|
</div>
|
|
232
232
|
|
|
233
233
|
<div class="wrap" id="board">
|
|
@@ -289,7 +289,7 @@
|
|
|
289
289
|
<h2>Structure & Layout</h2>
|
|
290
290
|
<p>Width-aware output, glass panels, and results that never blow up the pane.</p>
|
|
291
291
|
</div>
|
|
292
|
-
<span class="n"><!-- ROADMAP:count track=layout -->
|
|
292
|
+
<span class="n"><!-- ROADMAP:count track=layout -->8 items<!-- /ROADMAP:count --></span>
|
|
293
293
|
</div>
|
|
294
294
|
<div class="rcards">
|
|
295
295
|
|
|
@@ -349,6 +349,20 @@
|
|
|
349
349
|
<div class="rmeta"><span class="m-cat">layout</span><span>Complexity L</span><span class="m-imp med">Impact Med</span><span class="m-wow">★★★★☆</span></div>
|
|
350
350
|
<div class="rref"><code>core/output.py:table() / _fit_widths / _clip_visible</code></div>
|
|
351
351
|
</article>
|
|
352
|
+
|
|
353
|
+
<article class="ritem" id="BOOST-D27" data-track="layout" data-impact="med">
|
|
354
|
+
<div class="ritem-top"><span class="rid">BOOST-D27</span><span class="rstatus proposed">Proposed</span></div>
|
|
355
|
+
<h3>Finish the wrap-law rollout across the CLI's remaining hand-rolled spots</h3>
|
|
356
|
+
<p>A narrow-pane audit across all 80 commands fixed the concrete overflow bugs it found — a hardcoded <code>textwrap</code> width in <code>info</code>/<code>preview</code>/<code>explain</code>, two argparse usage lines with no <code>metavar</code>, help text that split a backtick-quoted command across lines, five "nothing here" screens that overflowed unwrapped, and a <code>print_help</code> command column painted in raw 16-color <code>CYAN</code> instead of the Aurora <code>accent</code> role — and added wide-character measurement (<code>unicodedata.east_asian_width</code>) to <code>visible_len()</code>/<code>_clip_visible()</code> so <code>table()</code> stays aligned when a cell holds CJK or an emoji. Three related gaps remain, deliberately left rather than folded into that pass because each is a wider, riskier sweep on its own:
|
|
357
|
+
|
|
358
|
+
<b>1. <code>dim(" text")</code>'s embedded 2-space indent has no wrap path.</b> 39 call sites (<code>bmad</code>'s hint lines, <code>schedule status</code>, <code>impact</code>'s caveat, …) hand-embed a leading <code>" "</code> because <code>dim()</code> prints flush-left by contract; passing <code>wrap=True</code> today would silently drop that margin on the first wrapped line (the tokenizer discards leading whitespace). One of the 39 measurably overflows a 60-column pane by a single character (<code>schedule status</code>'s enable hint) — not worth an inconsistent one-off fix. <code>dim()</code> needs a real <code>indent</code>/margin parameter (mirroring <code>kv</code>'s lead-column math) before any of the 39 can safely opt into wrapping.
|
|
359
|
+
|
|
360
|
+
<b>2. <code>empty_state()</code> adoption is 7 of ~35 "nothing to show" screens.</b> This pass converted cohort/replay/pulse/who's overflowing messages to the standard helper; roughly 28 more (<code>hooks</code>, <code>hallmarks of "no taps configured"</code>, <code>no skills installed</code> across five modules, …) still print via ad hoc <code>out.info("no X")</code>. None of them currently overflow, so converting all 28 in one shot would be a same-behavior refactor risking 28 screens' worth of rendered-text drift for no measured bug — better done a few at a time, verified against real content.
|
|
361
|
+
|
|
362
|
+
<b>3. Wide-character width stopped at <code>visible_len()</code>/<code>_clip_visible()</code>.</b> <code>truncate()</code> (plain-text clipping before coloring) and <code>search_layout()</code>'s column-budget math still count with <code>len()</code>, not display width — so a skill description containing an emoji would still truncate mid-character or throw off a search row's column budget. Not observed in real catalog data (skill names/taps are near-universal ASCII slugs), and widening it touches layout-budget code, not just measurement, so it stayed out of the audit's contained fix.</p>
|
|
363
|
+
<div class="rmeta"><span class="m-cat">layout</span><span>Complexity M</span><span class="m-imp med">Impact Med</span><span class="m-wow">★★☆☆☆</span></div>
|
|
364
|
+
<div class="rref"><code>core/output.py · dim()/empty_state() call sites; truncate()/search_layout()</code></div>
|
|
365
|
+
</article>
|
|
352
366
|
<!-- /ROADMAP:cards -->
|
|
353
367
|
|
|
354
368
|
</div>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: BOOST-D27
|
|
3
|
+
board: design
|
|
4
|
+
track: layout
|
|
5
|
+
status: proposed
|
|
6
|
+
impact: med
|
|
7
|
+
complexity: M
|
|
8
|
+
wow: 2
|
|
9
|
+
category: layout
|
|
10
|
+
ref: "core/output.py · dim()/empty_state() call sites; truncate()/search_layout()"
|
|
11
|
+
order: 8
|
|
12
|
+
owner: loop/aesthetics
|
|
13
|
+
pr:
|
|
14
|
+
title: Finish the wrap-law rollout across the CLI's remaining hand-rolled spots
|
|
15
|
+
---
|
|
16
|
+
A narrow-pane audit across all 80 commands fixed the concrete overflow bugs it found — a hardcoded <code>textwrap</code> width in <code>info</code>/<code>preview</code>/<code>explain</code>, two argparse usage lines with no <code>metavar</code>, help text that split a backtick-quoted command across lines, five "nothing here" screens that overflowed unwrapped, and a <code>print_help</code> command column painted in raw 16-color <code>CYAN</code> instead of the Aurora <code>accent</code> role — and added wide-character measurement (<code>unicodedata.east_asian_width</code>) to <code>visible_len()</code>/<code>_clip_visible()</code> so <code>table()</code> stays aligned when a cell holds CJK or an emoji. Three related gaps remain, deliberately left rather than folded into that pass because each is a wider, riskier sweep on its own:
|
|
17
|
+
|
|
18
|
+
<b>1. <code>dim(" text")</code>'s embedded 2-space indent has no wrap path.</b> 39 call sites (<code>bmad</code>'s hint lines, <code>schedule status</code>, <code>impact</code>'s caveat, …) hand-embed a leading <code>" "</code> because <code>dim()</code> prints flush-left by contract; passing <code>wrap=True</code> today would silently drop that margin on the first wrapped line (the tokenizer discards leading whitespace). One of the 39 measurably overflows a 60-column pane by a single character (<code>schedule status</code>'s enable hint) — not worth an inconsistent one-off fix. <code>dim()</code> needs a real <code>indent</code>/margin parameter (mirroring <code>kv</code>'s lead-column math) before any of the 39 can safely opt into wrapping.
|
|
19
|
+
|
|
20
|
+
<b>2. <code>empty_state()</code> adoption is 7 of ~35 "nothing to show" screens.</b> This pass converted cohort/replay/pulse/who's overflowing messages to the standard helper; roughly 28 more (<code>hooks</code>, <code>hallmarks of "no taps configured"</code>, <code>no skills installed</code> across five modules, …) still print via ad hoc <code>out.info("no X")</code>. None of them currently overflow, so converting all 28 in one shot would be a same-behavior refactor risking 28 screens' worth of rendered-text drift for no measured bug — better done a few at a time, verified against real content.
|
|
21
|
+
|
|
22
|
+
<b>3. Wide-character width stopped at <code>visible_len()</code>/<code>_clip_visible()</code>.</b> <code>truncate()</code> (plain-text clipping before coloring) and <code>search_layout()</code>'s column-budget math still count with <code>len()</code>, not display width — so a skill description containing an emoji would still truncate mid-character or throw off a search row's column budget. Not observed in real catalog data (skill names/taps are near-universal ASCII slugs), and widening it touches layout-budget code, not just measurement, so it stayed out of the audit's contained fix.
|
|
@@ -290,6 +290,21 @@ class TestDoctor:
|
|
|
290
290
|
assert r.rc == 0 and "MISSING" in r.out
|
|
291
291
|
|
|
292
292
|
|
|
293
|
+
class TestHelpFitsNarrowPane:
|
|
294
|
+
"""`boost bmad --help`'s action list is 13 choices long — spelled out as
|
|
295
|
+
argparse's auto {a,b,c,...} metavar it overflowed every width up to 100
|
|
296
|
+
columns, because that whole bracketed list is one unbreakable token."""
|
|
297
|
+
|
|
298
|
+
def test_help_has_no_line_over_60_columns(self, boost, sandbox,
|
|
299
|
+
monkeypatch):
|
|
300
|
+
monkeypatch.setenv("COLUMNS", "60")
|
|
301
|
+
r = boost("bmad", "--help")
|
|
302
|
+
for ln in r.out.split("\n"):
|
|
303
|
+
assert len(ln) <= 60, ln
|
|
304
|
+
# the choices themselves must still be discoverable somewhere in help
|
|
305
|
+
assert "route" in r.out and "personas" in r.out
|
|
306
|
+
|
|
307
|
+
|
|
293
308
|
# ------------------------------------------------------------------- autopilot
|
|
294
309
|
|
|
295
310
|
class TestAutopilotOn:
|
|
@@ -1365,6 +1365,16 @@ class TestStats:
|
|
|
1365
1365
|
assert "1.4.0 (up to date)" in lines["latest"]
|
|
1366
1366
|
assert "fixture skills" in lines["upstream"] # fixture commit subject
|
|
1367
1367
|
|
|
1368
|
+
def test_upstream_wraps_to_a_narrow_pane(self, boost, installed,
|
|
1369
|
+
monkeypatch):
|
|
1370
|
+
# "b2b9486 2026-08-28 Boost Fixture fixture skills" (50 cols) plus
|
|
1371
|
+
# the 16-column kv lead ran to 66 — over a 60-column pane.
|
|
1372
|
+
monkeypatch.setenv("COLUMNS", "60")
|
|
1373
|
+
r = boost("stats", "brainstorming")
|
|
1374
|
+
for ln in r.out.split("\n"):
|
|
1375
|
+
assert len(ln) <= 60, ln
|
|
1376
|
+
assert "fixture" in r.out and "skills" in r.out
|
|
1377
|
+
|
|
1368
1378
|
def test_update_available(self, boost, installed):
|
|
1369
1379
|
p = paths.lockfile_path()
|
|
1370
1380
|
lock = json.loads(p.read_text(encoding="utf-8"))
|