boost-skill-cli 1.2.21__tar.gz → 1.2.23__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.23/.vale/styles/boost/AIWriting.yml +69 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/.vale/styles/config/vocabularies/boost/accept.txt +2 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/CLAUDE.md +18 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/PKG-INFO +1 -1
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/discovery.py +9 -5
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/info.py +1 -1
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/intelligence.py +11 -5
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/quality.py +10 -7
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/team.py +10 -4
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/output.py +124 -9
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_skill_cli.egg-info/PKG-INFO +1 -1
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_skill_cli.egg-info/SOURCES.txt +2 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/eval-latest.json +2 -2
- boost_skill_cli-1.2.23/docs/roadmap/items/long-hints-overflow-narrow-panes.md +69 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap.html +52 -21
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/style/README.md +62 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/style/boost.css +30 -2
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/explain.feature +2 -2
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/steps/cli_steps.py +14 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_cli_discovery.py +1 -1
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_cli_info.py +1 -1
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_cli_intelligence.py +25 -12
- boost_skill_cli-1.2.23/tests/functional/test_cli_pane_width.py +137 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_cli_quality.py +2 -2
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_cli_team.py +6 -2
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_output.py +217 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/visual/package-lock.json +12 -12
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/visual/package.json +1 -1
- boost_skill_cli-1.2.21/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -38
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/.gitattributes +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/.gitignore +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/.lycheeignore +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/.vale.ini +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/LICENSE +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/MANIFEST.in +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/Makefile +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/README.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/SECURITY.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/bmad.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/bootstrap.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/browse.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/builtin.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/catalogbundle.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/complete.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/data/rules/boost-first.mdc +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_langchain/__init__.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_langchain/_compat.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_langchain/graph.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_langchain/loader.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_langchain/py.typed +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_langchain/retriever.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/codecov.yml +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/adapters.html +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel.html +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/chat.html +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/commands.html +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/demo.gif +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/demo.html +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/demo.tape +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/eval.html +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/index.html +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/langchain.html +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/boost-first-rule.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/install-path-disambiguation.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/zip-strict-audit.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/evals/README.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/evals/__init__.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/evals/baseline.json +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/evals/metrics.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/evals/publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/examples/README.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/index.html +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/noxfile.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/pyproject.toml +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/build_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/eval_corpus.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/measure_registry.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/page_budget.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/publish_eval_json.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/serve_docs.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/setup.cfg +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/sonar-project.properties +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/style/boost.js +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/style/demo.html +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/conftest.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/eval/taps-scale.txt +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_cli_catalog.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_kind_conformance.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/langchain/conftest.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/langchain/test_graph.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/langchain/test_loader.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/langchain/test_retriever.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_action_pin_lockstep.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_bmad_core.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_boost_first_offer.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_bootstrap.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_browse.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_builtin.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_catalogbundle.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_clean_internal_cache.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_compact.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_complete.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_complete_rc_block.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_content_identity.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_crash_redaction.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_dense_embed_dedupe.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_dense_quantized.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_dense_ready_order.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_dense_shard_real_schema.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_dense_status_cheap.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_embed_truncated_response.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_eval_corpus.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_eval_grading.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_gemini_agent_sanitize.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_gitutil_lfs.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_gitutil_sparse.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_install_permission_error.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_langchain_packaging.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_link_ownership.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_measure_registry.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_page_budget.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_rag_fastpath.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_registry_control_chars.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_rerank_cache.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_serve_docs.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_shards_matrix.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_smoke_covers_every_command.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_store_materialize.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_sync_blocked_links.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_visual_harness_flags.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_workflow_concurrency_groups.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_workflow_push_has_credentials.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/visual/visual_check.mjs +0 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
extends: existence
|
|
2
|
+
message: "'%s' is a common LLM writing tell — rewrite it plainly."
|
|
3
|
+
level: warning
|
|
4
|
+
ignorecase: true
|
|
5
|
+
# Vocabulary that marks generated prose, drawn from Wikipedia's
|
|
6
|
+
# "Signs of AI writing" (WP:AISIGNS) and confirmed against boost's own docs:
|
|
7
|
+
# all 13 files the prose-lint workflow checks scored ZERO hits on this list
|
|
8
|
+
# before it was added, so it gates new drafts rather than grandfathering old
|
|
9
|
+
# ones. Scope is text only — Vale never looks inside code spans or fences, so
|
|
10
|
+
# this file's own examples in `backticks` and any CLI output are unaffected.
|
|
11
|
+
#
|
|
12
|
+
# Two classes of tell are deliberately NOT listed here, because a linter reads
|
|
13
|
+
# tokens and these are properties of a whole passage:
|
|
14
|
+
# * em-dash density — one is punctuation, nine on a screen is a signature.
|
|
15
|
+
# * rule-of-three parallelism, and closing lines that assert a thing's
|
|
16
|
+
# significance instead of stating what it does.
|
|
17
|
+
# style/README.md ("Writing") carries those, since they need a human read.
|
|
18
|
+
tokens:
|
|
19
|
+
# puffery and promotional register
|
|
20
|
+
- boasts?
|
|
21
|
+
- nestled
|
|
22
|
+
- groundbreaking
|
|
23
|
+
- renowned
|
|
24
|
+
- cutting[- ]edge
|
|
25
|
+
- state[- ]of[- ]the[- ]art
|
|
26
|
+
- game[- ]chang(er|ing)
|
|
27
|
+
- best[- ]in[- ]class
|
|
28
|
+
- seamless(ly)?
|
|
29
|
+
- vibrant
|
|
30
|
+
- rich tapestry
|
|
31
|
+
- tapestry
|
|
32
|
+
# inflated significance
|
|
33
|
+
- testament to
|
|
34
|
+
- pivotal
|
|
35
|
+
- stands as
|
|
36
|
+
- serves as
|
|
37
|
+
- plays a (vital|key|crucial|significant) role
|
|
38
|
+
- underscor(e|es|ing)
|
|
39
|
+
- highlight(s|ing) the importance
|
|
40
|
+
- indelible mark
|
|
41
|
+
- ever[- ]evolving
|
|
42
|
+
- evolving landscape
|
|
43
|
+
# filler analysis and hedged attribution
|
|
44
|
+
- valuable insights?
|
|
45
|
+
- it('s| is) worth noting
|
|
46
|
+
- experts (argue|say|agree)
|
|
47
|
+
- industry reports?
|
|
48
|
+
- observers have
|
|
49
|
+
# LLM-favoured connectives and verbs
|
|
50
|
+
- delve
|
|
51
|
+
- delving
|
|
52
|
+
- meticulous(ly)?
|
|
53
|
+
- intricac(y|ies)
|
|
54
|
+
- myriad
|
|
55
|
+
- plethora
|
|
56
|
+
- realm of
|
|
57
|
+
- navigate the
|
|
58
|
+
- foster(ing)?
|
|
59
|
+
- resonate(s|d)? with
|
|
60
|
+
- align(s|ed)? with
|
|
61
|
+
# negative parallelism
|
|
62
|
+
- not just .{1,40} but
|
|
63
|
+
- not only .{1,40} but also
|
|
64
|
+
# essay scaffolding
|
|
65
|
+
- in conclusion
|
|
66
|
+
- overall,
|
|
67
|
+
- moreover,
|
|
68
|
+
- furthermore,
|
|
69
|
+
- additionally,
|
|
@@ -212,6 +212,24 @@ line coverage. Target `boost_cli/core` behavior with assertions, not just import
|
|
|
212
212
|
a workflow is rendered per agent (TOML for Gemini, see
|
|
213
213
|
`workflows.TOML_COMMAND_AGENTS`). Installing a rule therefore edits a file the
|
|
214
214
|
user reads every session — treat it as more invasive than a skill, not less.
|
|
215
|
+
- **A long line is either chrome or data, and only chrome may be wrapped.**
|
|
216
|
+
`out.wrap()` folds prose to the pane, and the emitters take it opt-in —
|
|
217
|
+
`warn`/`info`/`dim`/`kv` accept `wrap=True` and each pays for its own prefix,
|
|
218
|
+
so continuations align under the message rather than folding to column zero.
|
|
219
|
+
It is opt-in because always-on wrapping would fold the lines that must stay
|
|
220
|
+
long: `pulse`'s `source=` paths and `fingerprint`'s 64-character hash are the
|
|
221
|
+
information the line exists to carry, and a hash split across two lines
|
|
222
|
+
cannot be compared by eye. **A backtick span is one atomic token**, spaces
|
|
223
|
+
and all — `doctor` and `search` both interpolate `dense.fix_hint()`, whose
|
|
224
|
+
answers end in `pip install 'boost-skill-cli[rag]'`, and a wrap that splits
|
|
225
|
+
that hands the user a command which does not run. A token wider than the pane
|
|
226
|
+
overflows whole rather than breaking. Wrap *before* adding color: `out.role`
|
|
227
|
+
brackets its argument with a start code and a reset, so coloring first and
|
|
228
|
+
splitting after leaves line one unterminated and line two plain. And
|
|
229
|
+
budget the emitter's own indent — wrapping to the full `term_width()` and
|
|
230
|
+
then letting `out.info` add two spaces is what put `boost search`'s hint one
|
|
231
|
+
column past the pane it had just been fitted to.
|
|
232
|
+
|
|
215
233
|
- **Sub-actions of one action repo move in lockstep.** `github/codeql-action/{init,
|
|
216
234
|
analyze,upload-sarif}` and `actions/cache{,/save,/restore}` are each *one repo at
|
|
217
235
|
one commit*, but Dependabot tracks one `uses:` path as one dependency and raises a
|
|
@@ -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.23'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 2, 23)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -12,7 +12,6 @@ import re
|
|
|
12
12
|
import shutil
|
|
13
13
|
import subprocess
|
|
14
14
|
import sys
|
|
15
|
-
import textwrap
|
|
16
15
|
import threading
|
|
17
16
|
import time
|
|
18
17
|
import urllib.parse
|
|
@@ -152,7 +151,7 @@ def cmd_search(argv):
|
|
|
152
151
|
if reranked:
|
|
153
152
|
scored, ranker = reranked, "Claude Haiku relevance"
|
|
154
153
|
else:
|
|
155
|
-
out.warn(ai.fallback_note())
|
|
154
|
+
out.warn(ai.fallback_note(), wrap=True)
|
|
156
155
|
shown = scored[:args.limit]
|
|
157
156
|
# The dot marks "a skill by this name is installed" — a name match, with
|
|
158
157
|
# the known homonym caveat (13 real skills share `code-reviewer`). A lock
|
|
@@ -228,8 +227,12 @@ def _hint_semantic_search(engine: str) -> None:
|
|
|
228
227
|
# runnable — a copy-pasteable `pip install ...` matters more than a hard
|
|
229
228
|
# clamp, and _FIX is tested to hold no token long enough to overflow.
|
|
230
229
|
msg = "semantic search is off — %s" % dense.fix_hint(st.get("reason", ""), st)
|
|
231
|
-
for
|
|
232
|
-
|
|
230
|
+
# `- 2` pays for the indent `out.info` adds: wrapping to the full width and
|
|
231
|
+
# then indenting is what put this hint one column over the pane. Wrap
|
|
232
|
+
# first, colour each line after — `out.role` brackets its argument with a
|
|
233
|
+
# start code and a reset, so colouring first and splitting after leaves the
|
|
234
|
+
# first line unterminated and the second uncoloured.
|
|
235
|
+
for line in out.wrap(msg, max(out.term_width() - 2, 20)):
|
|
233
236
|
out.info(out.role(line, "muted"))
|
|
234
237
|
|
|
235
238
|
|
|
@@ -315,7 +318,8 @@ def cmd_reindex(argv):
|
|
|
315
318
|
", ".join(stats["reindexed"]) or "none"), "muted"))
|
|
316
319
|
if args.dense:
|
|
317
320
|
if dense_stats is None:
|
|
318
|
-
out.warn("dense index skipped — %s" % embed.fallback_note()
|
|
321
|
+
out.warn("dense index skipped — %s" % embed.fallback_note(),
|
|
322
|
+
wrap=True)
|
|
319
323
|
else:
|
|
320
324
|
failed = dense_stats.get("failed") or []
|
|
321
325
|
if failed:
|
|
@@ -694,7 +694,7 @@ def cmd_explain(argv):
|
|
|
694
694
|
"extractive summary instead"
|
|
695
695
|
% ", ".join(faithfulness.ungrounded_terms(reply, text)[:4]))
|
|
696
696
|
else:
|
|
697
|
-
out.warn(ai.fallback_note())
|
|
697
|
+
out.warn(ai.fallback_note(), wrap=True)
|
|
698
698
|
meta, body = frontmatter.parse(text)
|
|
699
699
|
desc = str(meta.get("description") or "").strip()
|
|
700
700
|
if desc:
|
|
@@ -46,7 +46,7 @@ def _note_fallback() -> None:
|
|
|
46
46
|
"""Warn once per invocation that the AI path is unavailable."""
|
|
47
47
|
global _warned_fallback
|
|
48
48
|
if not _warned_fallback:
|
|
49
|
-
out.warn(ai.fallback_note())
|
|
49
|
+
out.warn(ai.fallback_note(), wrap=True)
|
|
50
50
|
_warned_fallback = True
|
|
51
51
|
|
|
52
52
|
|
|
@@ -279,8 +279,12 @@ def cmd_simulate(argv: list[str]) -> int:
|
|
|
279
279
|
out.info(" • (no imperative rules found in the skill body)")
|
|
280
280
|
desc = str(meta.get("description") or "").strip()
|
|
281
281
|
if desc:
|
|
282
|
-
|
|
283
|
-
|
|
282
|
+
# Clipped to 100 characters, which is a length and not a width: at
|
|
283
|
+
# 80 columns the quoted description ran seven past the pane. Wrapping
|
|
284
|
+
# shows the same clipped text and fits it.
|
|
285
|
+
trigger = 'likely triggers when the task involves: "%s"' % desc[:100]
|
|
286
|
+
for line in out.wrap(trigger, max(out.term_width() - 2, 20)):
|
|
287
|
+
out.info(out.role(line, "muted"))
|
|
284
288
|
return 0
|
|
285
289
|
|
|
286
290
|
|
|
@@ -1191,8 +1195,10 @@ def _chat_session(args) -> int:
|
|
|
1191
1195
|
if not ai.available():
|
|
1192
1196
|
# Worth saying up front rather than letting every answer look terse for
|
|
1193
1197
|
# an unexplained reason.
|
|
1194
|
-
|
|
1195
|
-
|
|
1198
|
+
note = ("no AI configured — answers are the grounded matches "
|
|
1199
|
+
"themselves (%s)" % ai.fallback_note())
|
|
1200
|
+
for line in out.wrap(note, max(out.term_width() - 2, 20)):
|
|
1201
|
+
out.info(out.role(line, "muted"))
|
|
1196
1202
|
out.info(out.role("ask about skills; blank line or Ctrl-D to exit", "muted"))
|
|
1197
1203
|
history: list[chat_engine.Turn] = []
|
|
1198
1204
|
while True:
|
|
@@ -364,10 +364,10 @@ def cmd_doctor(argv):
|
|
|
364
364
|
|
|
365
365
|
out.heading("boost doctor")
|
|
366
366
|
|
|
367
|
-
def bad(msg):
|
|
367
|
+
def bad(msg, wrap=False):
|
|
368
368
|
nonlocal issues
|
|
369
369
|
issues += 1
|
|
370
|
-
out.warn(msg)
|
|
370
|
+
out.warn(msg, wrap=wrap)
|
|
371
371
|
|
|
372
372
|
if gitutil.has_git():
|
|
373
373
|
out.ok("git on PATH")
|
|
@@ -633,11 +633,12 @@ def _report_search_engine(bad) -> None:
|
|
|
633
633
|
elif st["reason"] == "empty":
|
|
634
634
|
detail += " but holds no vectors"
|
|
635
635
|
bad("semantic search silently off — %d-chunk vector store %s; "
|
|
636
|
-
"searches are using BM25. %s" % (st["chunks"], detail, fix)
|
|
636
|
+
"searches are using BM25. %s" % (st["chunks"], detail, fix),
|
|
637
|
+
wrap=True)
|
|
637
638
|
return
|
|
638
639
|
|
|
639
640
|
out.info("semantic search not configured — using the full-content BM25 "
|
|
640
|
-
"engine (%s)" % fix)
|
|
641
|
+
"engine (%s)" % fix, wrap=True)
|
|
641
642
|
|
|
642
643
|
|
|
643
644
|
def _print_skipped(skipped: list[dict]) -> None:
|
|
@@ -1010,7 +1011,7 @@ def cmd_conflict(argv):
|
|
|
1010
1011
|
if i in confirmed:
|
|
1011
1012
|
p["kind"] = "ai-confirmed"
|
|
1012
1013
|
elif heuristic and not args.json:
|
|
1013
|
-
out.warn(ai.fallback_note())
|
|
1014
|
+
out.warn(ai.fallback_note(), wrap=True)
|
|
1014
1015
|
|
|
1015
1016
|
if args.json:
|
|
1016
1017
|
print(json.dumps({"pairs": pairs}))
|
|
@@ -1058,8 +1059,10 @@ def cmd_changelog(argv):
|
|
|
1058
1059
|
if not lines:
|
|
1059
1060
|
out.warn("no history found for %s in %s" % (rel, tap.name))
|
|
1060
1061
|
if len(lines) < 3:
|
|
1061
|
-
|
|
1062
|
-
|
|
1062
|
+
note = ("(shallow clone: run `git -C %s fetch --unshallow` "
|
|
1063
|
+
"for full history)" % _tilde(tap.path))
|
|
1064
|
+
for line in out.wrap(note, max(out.term_width() - 2, 20)):
|
|
1065
|
+
print(out.role(" " + line, "muted"))
|
|
1063
1066
|
return 0
|
|
1064
1067
|
|
|
1065
1068
|
|
|
@@ -481,8 +481,14 @@ def cmd_protocol(argv) -> int:
|
|
|
481
481
|
if system == "Linux":
|
|
482
482
|
out.kv("desktop", _tilde(_desktop_file())
|
|
483
483
|
if _desktop_file().exists() else "not registered")
|
|
484
|
-
|
|
485
|
-
|
|
484
|
+
# One form per row rather than a `·`-joined run: the run was 100 columns,
|
|
485
|
+
# and wrapping it strands a bare `·` at the start of a line, because the
|
|
486
|
+
# separator is a word to any wrapper. A form per row needs no separator and
|
|
487
|
+
# reads the same at every width.
|
|
488
|
+
for i, form in enumerate(("boost://install/<skill>",
|
|
489
|
+
"boost://install/<tap>:<skill>",
|
|
490
|
+
"boost://tap/<owner>/<repo>")):
|
|
491
|
+
out.kv("URL forms" if i == 0 else "", form)
|
|
486
492
|
out.dim(" try it: boost protocol open boost://install/brainstorming")
|
|
487
493
|
return 0
|
|
488
494
|
|
|
@@ -713,7 +719,7 @@ def cmd_who(argv) -> int:
|
|
|
713
719
|
out.table(rows[:20], headers=("WHEN", "USER", "ACTION"))
|
|
714
720
|
print()
|
|
715
721
|
out.dim("based on the local journal — in a team setup, pulse feeds "
|
|
716
|
-
"aggregate via `boost onboard`")
|
|
722
|
+
"aggregate via `boost onboard`", wrap=True)
|
|
717
723
|
return 0
|
|
718
724
|
|
|
719
725
|
users: dict[str, dict] = {}
|
|
@@ -738,5 +744,5 @@ def cmd_who(argv) -> int:
|
|
|
738
744
|
out.table(board, headers=("USER", "EVENTS", "SKILLS", "INSTALLS", "LAST ACTIVE"))
|
|
739
745
|
print()
|
|
740
746
|
out.dim("based on the local journal — in a team setup, pulse feeds aggregate "
|
|
741
|
-
"via `boost onboard`")
|
|
747
|
+
"via `boost onboard`", wrap=True)
|
|
742
748
|
return 0
|
|
@@ -200,20 +200,38 @@ def gradient(text: str, stream=None) -> str:
|
|
|
200
200
|
return "".join(out)
|
|
201
201
|
|
|
202
202
|
|
|
203
|
+
def _wrap_lines(msg: str, lead: int) -> list[str]:
|
|
204
|
+
"""Wrap `msg` for an emitter whose own prefix costs `lead` columns.
|
|
205
|
+
|
|
206
|
+
Returns at least one line so an emitter never silently prints nothing for a
|
|
207
|
+
message it was given; the emitter decides what its prefix and continuation
|
|
208
|
+
padding look like.
|
|
209
|
+
"""
|
|
210
|
+
return wrap(msg, term_width() - lead) or [msg]
|
|
211
|
+
|
|
212
|
+
|
|
203
213
|
def ok(msg: str) -> None:
|
|
204
214
|
"""Print msg as an indented success line with a green check mark."""
|
|
205
215
|
print(" " + role("✓", "success") + " " + msg)
|
|
206
216
|
|
|
207
217
|
|
|
208
|
-
def warn(msg: str, stream=None) -> None:
|
|
218
|
+
def warn(msg: str, stream=None, wrap: bool = False) -> None:
|
|
209
219
|
"""Print msg as an indented `!` warning line, all in the warn role.
|
|
210
220
|
|
|
211
221
|
``stream`` exists for the commands that also speak JSON on stdout: a notice
|
|
212
222
|
about *which corpus answered* has to survive `--json`, and the old choice
|
|
213
223
|
was between corrupting the JSON and suppressing the notice entirely. Passing
|
|
214
224
|
``sys.stderr`` keeps both.
|
|
225
|
+
|
|
226
|
+
``wrap`` is opt-in per call site rather than always-on, because not every
|
|
227
|
+
long line is prose: `pulse`'s `source=` paths and `fingerprint`'s hash are
|
|
228
|
+
data, and folding those destroys the information the line exists to carry.
|
|
229
|
+
Prose hints pass it; data lines do not.
|
|
215
230
|
"""
|
|
216
|
-
|
|
231
|
+
body = _wrap_lines(msg, 4) if wrap else [msg]
|
|
232
|
+
for i, line in enumerate(body):
|
|
233
|
+
lead = " " + role("!", "warn") + " " if i == 0 else " "
|
|
234
|
+
print(lead + role(line, "warn"), file=stream)
|
|
217
235
|
|
|
218
236
|
|
|
219
237
|
def err(msg: str, hint: str | None = None) -> None:
|
|
@@ -223,11 +241,17 @@ def err(msg: str, hint: str | None = None) -> None:
|
|
|
223
241
|
print(c(" hint: " + hint, DIM), file=sys.stderr)
|
|
224
242
|
|
|
225
243
|
|
|
226
|
-
def info(msg: str = "", stream=None) -> None:
|
|
244
|
+
def info(msg: str = "", stream=None, wrap: bool = False) -> None:
|
|
227
245
|
"""Print msg indented two spaces; a blank line when msg is empty.
|
|
228
246
|
|
|
229
247
|
``stream`` as in :func:`warn` — so a hint can accompany a stderr notice.
|
|
248
|
+
``wrap`` as in :func:`warn`, and it never turns the empty message into no
|
|
249
|
+
output at all: a caller printing a blank spacer still gets its blank line.
|
|
230
250
|
"""
|
|
251
|
+
if wrap and msg:
|
|
252
|
+
for line in _wrap_lines(msg, 2):
|
|
253
|
+
print(" " + line, file=stream)
|
|
254
|
+
return
|
|
231
255
|
print(" " + msg if msg else "", file=stream)
|
|
232
256
|
|
|
233
257
|
|
|
@@ -252,9 +276,14 @@ def plain(text: object) -> str:
|
|
|
252
276
|
return _CONTROL_RE.sub("", str(text))
|
|
253
277
|
|
|
254
278
|
|
|
255
|
-
def dim(msg: str) -> None:
|
|
256
|
-
"""Print msg in the muted role (dim when color is on).
|
|
257
|
-
|
|
279
|
+
def dim(msg: str, wrap: bool = False) -> None:
|
|
280
|
+
"""Print msg in the muted role (dim when color is on).
|
|
281
|
+
|
|
282
|
+
``wrap`` as in :func:`warn`. `dim` prints flush left, so the wrapped
|
|
283
|
+
continuations are flush left too — there is no marker to align under.
|
|
284
|
+
"""
|
|
285
|
+
for line in (_wrap_lines(msg, 0) if wrap else [msg]):
|
|
286
|
+
print(role(line, "muted"))
|
|
258
287
|
|
|
259
288
|
|
|
260
289
|
def heading(msg: str) -> None:
|
|
@@ -310,6 +339,80 @@ def visible_len(s: str) -> int:
|
|
|
310
339
|
return len(_ANSI_RE.sub("", s))
|
|
311
340
|
|
|
312
341
|
|
|
342
|
+
_CODE_SPAN_RE = re.compile(r"`[^`]*`")
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
def _wrap_tokens(text: str) -> list[str]:
|
|
346
|
+
"""Split text into wrap units, keeping each `code span` whole.
|
|
347
|
+
|
|
348
|
+
A backtick span is one token even though it contains spaces, because the
|
|
349
|
+
spans in boost's hints are shell commands the user is meant to select and
|
|
350
|
+
paste — `pip install 'boost-skill-cli[rag]'`. Everything outside a span is
|
|
351
|
+
split on whitespace, which collapses runs and newlines the way
|
|
352
|
+
:func:`truncate` does; the span itself is copied verbatim, so a command
|
|
353
|
+
that legitimately holds two spaces survives.
|
|
354
|
+
|
|
355
|
+
An unterminated backtick simply never matches, and its text wraps as
|
|
356
|
+
ordinary words. That is the right failure: a half-open span is a typo in
|
|
357
|
+
the message, not a reason to refuse to render it.
|
|
358
|
+
"""
|
|
359
|
+
parts: list[str] = []
|
|
360
|
+
pos = 0
|
|
361
|
+
for m in _CODE_SPAN_RE.finditer(text):
|
|
362
|
+
parts.extend(text[pos:m.start()].split())
|
|
363
|
+
parts.append(m.group(0))
|
|
364
|
+
pos = m.end()
|
|
365
|
+
parts.extend(text[pos:].split())
|
|
366
|
+
return parts
|
|
367
|
+
|
|
368
|
+
|
|
369
|
+
def wrap(text: str, width: int | None = None, indent: str = "") -> list[str]:
|
|
370
|
+
"""Greedy word-wrap to `width` visible columns, never splitting a code span.
|
|
371
|
+
|
|
372
|
+
Returns one string per line: the first bare, the rest prefixed with
|
|
373
|
+
`indent`, and every one measured with :func:`visible_len` so a coloured
|
|
374
|
+
message is bounded by what the pane shows rather than by its byte count.
|
|
375
|
+
``width`` defaults to the live terminal.
|
|
376
|
+
|
|
377
|
+
**A token wider than the line is emitted whole and overflows.** That is
|
|
378
|
+
deliberate and it is the reason this is not `textwrap.wrap(break_long_words
|
|
379
|
+
=True)`: the tokens that hit this case are the backticked commands, and a
|
|
380
|
+
command chopped at column 80 is worse than useless — the user pastes it and
|
|
381
|
+
it fails. One long line the terminal soft-wraps still yields the right text
|
|
382
|
+
on a copy.
|
|
383
|
+
|
|
384
|
+
Empty (or all-whitespace) text wraps to no lines at all, so a caller can
|
|
385
|
+
tell "nothing to say" from "one blank line".
|
|
386
|
+
"""
|
|
387
|
+
width = term_width() if width is None else width
|
|
388
|
+
tokens = _wrap_tokens(text)
|
|
389
|
+
if not tokens:
|
|
390
|
+
return []
|
|
391
|
+
pad = visible_len(indent)
|
|
392
|
+
lines: list[str] = []
|
|
393
|
+
cur = ""
|
|
394
|
+
for tok in tokens:
|
|
395
|
+
# The first line spends the full width; every later one pays for the
|
|
396
|
+
# indent. No floor under the subtraction: a pane narrower than its own
|
|
397
|
+
# indent yields a limit no token can meet, and each token lands on its
|
|
398
|
+
# own line — which is the same answer a floor of 1 gives, because the
|
|
399
|
+
# fit test below is never satisfiable below 3 columns anyway.
|
|
400
|
+
limit = width if not lines else width - pad
|
|
401
|
+
if cur and visible_len(cur) + 1 + visible_len(tok) <= limit:
|
|
402
|
+
cur += " " + tok
|
|
403
|
+
else:
|
|
404
|
+
if cur:
|
|
405
|
+
lines.append(cur)
|
|
406
|
+
cur = tok
|
|
407
|
+
lines.append(cur)
|
|
408
|
+
return [lines[0]] + [indent + ln for ln in lines[1:]]
|
|
409
|
+
|
|
410
|
+
|
|
411
|
+
#: Alias for callers that take a ``wrap`` keyword argument of their own, which
|
|
412
|
+
#: would otherwise shadow the function inside their own body.
|
|
413
|
+
wrap_text = wrap
|
|
414
|
+
|
|
415
|
+
|
|
313
416
|
def panel(lines, title: str | None = None, hue: str = "cyan") -> str:
|
|
314
417
|
"""A rounded box around one or more lines, with an Aurora-tinted border and
|
|
315
418
|
an optional title set into the top rule — the terminal echo of the web
|
|
@@ -506,11 +609,23 @@ def format_search_row(name: str, desc: str, kind: str, tap: str, frac: float,
|
|
|
506
609
|
return row.rstrip()
|
|
507
610
|
|
|
508
611
|
|
|
509
|
-
def kv(key: str, value: str, width: int = 14) -> None:
|
|
510
|
-
"""Print an indented key/value line: dim key padded to width, then value.
|
|
612
|
+
def kv(key: str, value: str, width: int = 14, wrap: bool = False) -> None:
|
|
613
|
+
"""Print an indented key/value line: dim key padded to width, then value.
|
|
614
|
+
|
|
615
|
+
``wrap`` as in :func:`warn`, and the continuations align under the *value*
|
|
616
|
+
rather than the key — a value folded back to column 0 reads as a new row.
|
|
617
|
+
"""
|
|
511
618
|
# The str() is NOT redundant despite the annotation: callers pass raw ints
|
|
512
619
|
# (e.g. `boost impact` prints files_touched), which would raise TypeError.
|
|
513
|
-
|
|
620
|
+
text = str(value) # noqa: FURB123
|
|
621
|
+
if not wrap:
|
|
622
|
+
print(" " + c(key.ljust(width), DIM) + text)
|
|
623
|
+
return
|
|
624
|
+
lead = 2 + width
|
|
625
|
+
lines = wrap_text(text, term_width() - lead) or [text]
|
|
626
|
+
print(" " + c(key.ljust(width), DIM) + lines[0])
|
|
627
|
+
for line in lines[1:]:
|
|
628
|
+
print(" " * lead + line)
|
|
514
629
|
|
|
515
630
|
|
|
516
631
|
def _pad(cell: str, width: int) -> str:
|
|
@@ -24,6 +24,7 @@ noxfile.py
|
|
|
24
24
|
pyproject.toml
|
|
25
25
|
setup.cfg
|
|
26
26
|
sonar-project.properties
|
|
27
|
+
.vale/styles/boost/AIWriting.yml
|
|
27
28
|
.vale/styles/boost/Terminology.yml
|
|
28
29
|
.vale/styles/config/vocabularies/boost/accept.txt
|
|
29
30
|
boost_cli/__init__.py
|
|
@@ -543,6 +544,7 @@ tests/functional/test_cli_discovery.py
|
|
|
543
544
|
tests/functional/test_cli_hooks.py
|
|
544
545
|
tests/functional/test_cli_info.py
|
|
545
546
|
tests/functional/test_cli_intelligence.py
|
|
547
|
+
tests/functional/test_cli_pane_width.py
|
|
546
548
|
tests/functional/test_cli_pkg.py
|
|
547
549
|
tests/functional/test_cli_quality.py
|
|
548
550
|
tests/functional/test_cli_taps.py
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: long-hints-overflow-narrow-panes
|
|
3
|
+
board: code
|
|
4
|
+
section: dx
|
|
5
|
+
status: inflight
|
|
6
|
+
category: CLI · Output
|
|
7
|
+
complexity: M
|
|
8
|
+
impact: Low
|
|
9
|
+
wow: 2
|
|
10
|
+
note: a code span is one atomic token, so a hint folds to the pane without splitting the command it tells you to run
|
|
11
|
+
order: 126
|
|
12
|
+
owner: loop/wrap-long-hints
|
|
13
|
+
pr:
|
|
14
|
+
title: The hints still run past the pane, and the worst one is pinned by six test files
|
|
15
|
+
---
|
|
16
|
+
<b>Measured, at <code>COLUMNS=80</code>, over 46 commands.</b> After the box and the help screen
|
|
17
|
+
were fitted, <b>11</b> still emitted a line past 80 columns. Ranked:
|
|
18
|
+
<code>doctor</code>'s semantic-search hint at <b>127</b>; the AI-fallback notice at <b>101</b>,
|
|
19
|
+
which is one shared string surfacing in six places; <code>protocol</code>'s URL forms at 100;
|
|
20
|
+
<code>changelog</code>'s unshallow hint at 93; <code>who</code>'s footer at 87;
|
|
21
|
+
<code>search</code>'s extra hint at 82. A re-measure while claiming this found a twelfth the
|
|
22
|
+
first pass missed — <code>simulate</code>'s quoted trigger line at <b>97</b>, which clips the
|
|
23
|
+
description to 100 <em>characters</em>, a length rather than a width.
|
|
24
|
+
|
|
25
|
+
<b>Two of them must be left alone.</b> <code>pulse</code>'s <code>source=</code> paths and
|
|
26
|
+
<code>fingerprint</code>'s hash are data, not chrome — clipping them destroys the information the
|
|
27
|
+
line exists to carry, and a hash broken across two lines cannot be compared by eye. So a blanket
|
|
28
|
+
“no line exceeds <code>term_width()</code>” assertion is the wrong gate: it would
|
|
29
|
+
false-positive on exactly the lines that should be long.
|
|
30
|
+
|
|
31
|
+
<b>What shipped: a code span is one atomic token.</b> <code>out.wrap()</code> is a greedy word
|
|
32
|
+
wrap in which a backticked span is a single unbreakable unit even though it contains spaces,
|
|
33
|
+
because the spans in these hints are shell commands the user is meant to select and paste. That
|
|
34
|
+
is the whole reason this is not two lines of <code>textwrap</code>: <code>doctor</code> and
|
|
35
|
+
<code>search</code> both interpolate <code>dense.fix_hint()</code>, whose answers end in
|
|
36
|
+
<code>pip install 'boost-skill-cli[rag]'</code>, and a wrap that splits it hands the user a
|
|
37
|
+
command that does not run. A token wider than the pane is emitted whole and overflows — one long
|
|
38
|
+
line the terminal soft-wraps still yields the right text on a copy, which a bisected one does not.
|
|
39
|
+
<code>search</code> already wrapped, with a comment conceding it relied on a test that no
|
|
40
|
+
<code>_FIX</code> entry holds an over-long token; the span rule makes that structural. It also
|
|
41
|
+
wrapped to the <em>full</em> width and then let <code>out.info</code> indent by two, which is
|
|
42
|
+
precisely the 82.
|
|
43
|
+
|
|
44
|
+
<b>Wrapping is opt-in per call site, and that is the design.</b> <code>warn</code>,
|
|
45
|
+
<code>info</code>, <code>dim</code> and <code>kv</code> take <code>wrap=True</code> and each pays
|
|
46
|
+
for its own prefix — the marker, the indent, the key column — so continuations align under the
|
|
47
|
+
message rather than folding back to column zero. Always-on wrapping would have folded the two
|
|
48
|
+
data lines this item exists to protect.
|
|
49
|
+
|
|
50
|
+
<b>Two claims in the first draft of this card did not survive measurement.</b> It said the
|
|
51
|
+
101-column offender was pinned by <b>six</b> test files; only <b>one</b> pins it verbatim
|
|
52
|
+
(<code>test_ai_fallback_note_verbatim</code>, the mutant-killer, which wraps at the <em>emission
|
|
53
|
+
site</em> and so was never touched). The other five pin the substring
|
|
54
|
+
<code>using the heuristic fallback</code>, and are re-pinned against whitespace-collapsed output —
|
|
55
|
+
an idiom <code>test_cli_discovery.py</code> had already established, for this exact reason. The
|
|
56
|
+
BDD feature got a separate <code>should contain wrapped</code> step rather than collapsing inside
|
|
57
|
+
<code>the output should contain</code>, which eleven feature files use ~87 times.
|
|
58
|
+
|
|
59
|
+
<b>Result: eight overflowing lines became two, and the two are the data lines.</b> The gate splits
|
|
60
|
+
the commands by whose words are on the line — <code>search</code>, <code>who</code> and
|
|
61
|
+
<code>protocol</code> compose their whole output and are swept down to 40 columns; commands that
|
|
62
|
+
quote a skill's own rules are swept at 80 and wider, because reflowing someone else's prose is a
|
|
63
|
+
different decision from fitting boost's own hints.
|
|
64
|
+
|
|
65
|
+
<b>Still open, found by the new gate rather than by this card.</b> At 40 and 60 columns
|
|
66
|
+
<code>doctor</code>'s <code>·</code>-joined status summaries run to 71, and
|
|
67
|
+
<code>protocol</code>'s <code>try it:</code> example is a single 59-column command that cannot
|
|
68
|
+
fold. Neither is in this item's scope — both are recorded here so the next pass does not
|
|
69
|
+
rediscover them as new.
|