boost-skill-cli 1.2.37__tar.gz → 1.2.38__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.37 → boost_skill_cli-1.2.38}/.vale/styles/config/vocabularies/boost/accept.txt +2 -0
- {boost_skill_cli-1.2.37/boost_skill_cli.egg-info → boost_skill_cli-1.2.38}/PKG-INFO +1 -1
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/bmad.py +105 -21
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38/boost_skill_cli.egg-info}/PKG-INFO +1 -1
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_skill_cli.egg-info/SOURCES.txt +2 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/bmad.md +30 -3
- boost_skill_cli-1.2.38/docs/roadmap/items/bmad-hooks-all-hosts.md +42 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap.html +41 -2
- boost_skill_cli-1.2.38/tests/functional/test_bmad_all_hosts.py +124 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/.gitattributes +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/.gitignore +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/.lycheeignore +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/.vale/styles/boost/AIWriting.yml +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/.vale.ini +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/CLAUDE.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/DCO +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/GOVERNANCE.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/LICENSE +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/MAINTAINERS.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/MANIFEST.in +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/Makefile +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/README.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/SECURITY.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/SUPPORT.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/bmad.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/bootstrap.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/browse.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/builtin.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/catalogbundle.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/complete.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/hookhost.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/data/rules/boost-first.mdc +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_langchain/__init__.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_langchain/_compat.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_langchain/graph.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_langchain/loader.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_langchain/py.typed +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_langchain/retriever.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/codecov.yml +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/adapters.html +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel.html +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/chat.html +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/code-review.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/commands.html +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/commit-audit.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/demo.gif +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/demo.html +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/demo.tape +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/dependencies.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/eval-latest.json +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/eval.html +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/index.html +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/langchain.html +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/openssf-badge.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D27.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/boost-first-rule.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/branch-current-gate.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/cli-command-audit.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/install-path-disambiguation.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/openssf-silver.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/osps-baseline-levels.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/vex-openvex-feed.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/zip-strict-audit.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/security-design.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/semantic-search.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/verifying-releases.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/vex/meta.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/vex/openvex.json +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/evals/README.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/evals/__init__.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/evals/baseline.json +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/evals/metrics.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/evals/publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/examples/README.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/index.html +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/noxfile.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/pyproject.toml +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/add_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/build_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/build_vex.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/check_branch_current.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/check_dco.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/check_reproducible.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/eval_corpus.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/measure_registry.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/normalize_sdist.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/page_budget.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/publish_eval_json.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/serve_docs.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/setup.cfg +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/sonar-project.properties +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/style/README.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/style/boost.css +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/style/boost.js +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/style/demo.html +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/conftest.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/eval/taps-scale.txt +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_catalog.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_hooks_gemini.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_pane_width.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_kind_conformance.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/langchain/conftest.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/langchain/test_graph.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/langchain/test_loader.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/langchain/test_retriever.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_action_pin_lockstep.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_bmad_core.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_boost_first_offer.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_bootstrap.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_branch_current.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_browse.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_builtin.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_catalogbundle.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_check_dco.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_check_reproducible.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_clean_internal_cache.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_compact.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_complete.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_complete_rc_block.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_content_identity.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_crash_redaction.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_dense_embed_dedupe.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_dense_quantized.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_dense_ready_order.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_dense_shard_real_schema.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_dense_status_cheap.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_embed_truncated_response.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_eval_corpus.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_eval_grading.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_gemini_agent_sanitize.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_gitutil_lfs.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_gitutil_sparse.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_hook_settings_hosts.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_hookhost.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_install_permission_error.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_langchain_packaging.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_link_ownership.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_measure_registry.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_normalize_sdist.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_page_budget.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_rag_fastpath.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_registry_control_chars.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_rerank_cache.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_serve_docs.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_shards_matrix.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_smoke_covers_every_command.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_store_materialize.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_sync_blocked_links.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_vex.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_visual_harness_flags.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_workflow_concurrency_groups.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_workflow_push_has_credentials.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/visual/package-lock.json +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/visual/visual_check.mjs +0 -0
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '1.2.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 2,
|
|
21
|
+
__version__ = version = '1.2.38'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 2, 38)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -38,11 +38,25 @@ stage the installer in a temp dir and copy only the `bmad-*` skills into
|
|
|
38
38
|
~/.claude/skills, so $HOME never gets a stray `_bmad/`; the runtime is
|
|
39
39
|
per-project by design.
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
41
|
+
The **hooks fan out; the personas do not**, and the split is not arbitrary.
|
|
42
|
+
|
|
43
|
+
A subagent definition is a Claude Code contract, and BMAD's own installer takes
|
|
44
|
+
`--tools claude-code`, so personas stay in `~/.claude/agents/`. Copying them
|
|
45
|
+
into Gemini's `agents/` slot would also ship files its schema rejects — that
|
|
46
|
+
slot validates, and a Claude-dialect persona fails it.
|
|
47
|
+
|
|
48
|
+
The hooks are a different case, and an earlier version of this docstring got it
|
|
49
|
+
wrong by lumping them together: it claimed `SessionStart` and
|
|
50
|
+
`UserPromptSubmit` had "no equivalent in the other three agents", which stopped
|
|
51
|
+
being true when `core/hookhost.py` learned Gemini's vocabulary. They map to
|
|
52
|
+
`SessionStart` and `BeforeAgent`, so `bmad on` now installs them on every host
|
|
53
|
+
with evidence of use, translating the event names and the timeout units on the
|
|
54
|
+
way. Matchers are *not* translated — `hookhost` passes them through
|
|
55
|
+
host-native — so Claude's `startup|resume|clear` source matcher is applied only
|
|
56
|
+
on Claude.
|
|
57
|
+
|
|
58
|
+
What that buys on a second host is prompt shaping, not full parity: the routing
|
|
59
|
+
banner names personas Gemini cannot spawn.
|
|
46
60
|
"""
|
|
47
61
|
from __future__ import annotations
|
|
48
62
|
|
|
@@ -61,7 +75,7 @@ from pathlib import Path
|
|
|
61
75
|
from .. import cliparse
|
|
62
76
|
from ..core import bmad as core
|
|
63
77
|
from ..core import claude_settings as cs
|
|
64
|
-
from ..core import journal, paths, util
|
|
78
|
+
from ..core import hookhost, journal, paths, util
|
|
65
79
|
from ..core import output as out
|
|
66
80
|
from ..errors import BoostError
|
|
67
81
|
|
|
@@ -148,6 +162,74 @@ def _never_fails(command: str) -> str:
|
|
|
148
162
|
return command + " || true"
|
|
149
163
|
|
|
150
164
|
|
|
165
|
+
def _hook_hosts(scope: str) -> list[str]:
|
|
166
|
+
"""Hosts to write hooks into: Claude always, others on evidence of use.
|
|
167
|
+
|
|
168
|
+
Claude is unconditional. It is boost's primary host and the behaviour every
|
|
169
|
+
release before this one had, and the check cannot be `shutil.which` the way
|
|
170
|
+
`boost mcp register`'s is: that command *shells out* to `claude mcp add` and
|
|
171
|
+
genuinely cannot work without the binary, while this one only writes a
|
|
172
|
+
settings.json. A user running inside Claude Code whose launcher is not on
|
|
173
|
+
boost's PATH would otherwise silently get no hooks at all.
|
|
174
|
+
|
|
175
|
+
A second host earns its hooks by evidence that it is actually in use —
|
|
176
|
+
its CLI on PATH, or its dotdir already present. Writing into
|
|
177
|
+
`~/.gemini/settings.json` for someone who has never run Gemini is litter in
|
|
178
|
+
a file boost does not own. A host that appears later is picked up by the
|
|
179
|
+
next `boost bmad on`, which is idempotent.
|
|
180
|
+
"""
|
|
181
|
+
chosen = [hookhost.CLAUDE]
|
|
182
|
+
for host in hookhost.hosts():
|
|
183
|
+
if host == hookhost.CLAUDE:
|
|
184
|
+
continue
|
|
185
|
+
dotdir = cs.settings_path(scope, host=host).parent
|
|
186
|
+
if shutil.which(hookhost.cli(host)) or dotdir.is_dir():
|
|
187
|
+
chosen.append(host)
|
|
188
|
+
return chosen
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
#: (Claude event, hook name, matcher). The matcher is Claude's own
|
|
192
|
+
#: `SessionStart` source vocabulary, and `hookhost` deliberately does not
|
|
193
|
+
#: translate matchers — they pass through host-native — so it is applied only
|
|
194
|
+
#: on the host it was written for. Omitting it elsewhere means "every start",
|
|
195
|
+
#: which is what a session briefing wants anyway.
|
|
196
|
+
_ORIENT_HOOK = ("SessionStart", HOOK_NAME, HOOK_MATCHER)
|
|
197
|
+
_ROUTE_HOOK = ("UserPromptSubmit", ROUTE_HOOK_NAME, None)
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
def _add_hook_everywhere(scope: str, spec: tuple, command: str) -> list[str]:
|
|
201
|
+
"""Install one hook on every installed host. Returns the hosts written."""
|
|
202
|
+
event, name, matcher = spec
|
|
203
|
+
written = []
|
|
204
|
+
for host in _hook_hosts(scope):
|
|
205
|
+
target = hookhost.translate(host, event)
|
|
206
|
+
if target is None:
|
|
207
|
+
# Refused out loud rather than dropped: a hook the user asked for
|
|
208
|
+
# and silently never got is worse than one that cannot exist.
|
|
209
|
+
out.warn("%s has no counterpart for %s — skipped"
|
|
210
|
+
% (hookhost.label(host), event))
|
|
211
|
+
continue
|
|
212
|
+
cs.add_hook(scope, target, name, command,
|
|
213
|
+
matcher=matcher if host == hookhost.CLAUDE else None,
|
|
214
|
+
host=host)
|
|
215
|
+
written.append(host)
|
|
216
|
+
return written
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
def _remove_hook_everywhere(scope: str, *specs: tuple) -> None:
|
|
220
|
+
"""Remove hooks from every host, installed or not.
|
|
221
|
+
|
|
222
|
+
Unlike install this does not filter on `shutil.which`: someone who removed
|
|
223
|
+
an agent CLI still wants boost's hooks gone from its settings.json, and
|
|
224
|
+
`remove_hook` against a file that was never written is a no-op.
|
|
225
|
+
"""
|
|
226
|
+
for host in hookhost.hosts():
|
|
227
|
+
for event, name, _matcher in specs:
|
|
228
|
+
target = hookhost.translate(host, event)
|
|
229
|
+
if target is not None:
|
|
230
|
+
cs.remove_hook(scope, target, name, host=host)
|
|
231
|
+
|
|
232
|
+
|
|
151
233
|
def _autopilot_on(scope) -> int:
|
|
152
234
|
"""The one command. Personas + orientation + router, in one idempotent pass.
|
|
153
235
|
|
|
@@ -160,11 +242,11 @@ def _autopilot_on(scope) -> int:
|
|
|
160
242
|
slugs, skipped = core.write_personas(agents)
|
|
161
243
|
|
|
162
244
|
launcher = shlex.quote(str(paths.launcher()))
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
245
|
+
hosts = _add_hook_everywhere(
|
|
246
|
+
scope, _ORIENT_HOOK,
|
|
247
|
+
_never_fails("%s bmad orient --scope %s" % (launcher, scope)))
|
|
248
|
+
_add_hook_everywhere(scope, _ROUTE_HOOK,
|
|
249
|
+
_never_fails("%s bmad route" % launcher))
|
|
168
250
|
_set_scope_state(scope, autopilot=True, startup=True, personas=len(slugs),
|
|
169
251
|
enabled_at=util.now_iso())
|
|
170
252
|
journal.log("bmad-autopilot", "on", scope=scope, personas=len(slugs))
|
|
@@ -176,8 +258,11 @@ def _autopilot_on(scope) -> int:
|
|
|
176
258
|
% (len(skipped), ", ".join(skipped)))
|
|
177
259
|
out.dim(" delete the file to let `boost bmad on` restore the stock version")
|
|
178
260
|
out.dim(" personas → %s" % paths.tilde(agents))
|
|
179
|
-
|
|
180
|
-
|
|
261
|
+
for host in hosts:
|
|
262
|
+
out.dim(" hooks → %s (%s + %s)"
|
|
263
|
+
% (paths.tilde(cs.settings_path(scope, host=host)),
|
|
264
|
+
hookhost.translate(host, "SessionStart"),
|
|
265
|
+
hookhost.translate(host, "UserPromptSubmit")))
|
|
181
266
|
out.dim(" every substantive prompt now names its lead persona and its "
|
|
182
267
|
"definition of done; trivial asks are left alone")
|
|
183
268
|
# Claude Code only watches an agents dir that existed when the session
|
|
@@ -189,8 +274,7 @@ def _autopilot_on(scope) -> int:
|
|
|
189
274
|
|
|
190
275
|
def _autopilot_off(scope) -> int:
|
|
191
276
|
scope = scope or "global"
|
|
192
|
-
|
|
193
|
-
cs.remove_hook(scope, "UserPromptSubmit", ROUTE_HOOK_NAME)
|
|
277
|
+
_remove_hook_everywhere(scope, _ORIENT_HOOK, _ROUTE_HOOK)
|
|
194
278
|
removed = core.remove_personas(_agents_dir(scope))
|
|
195
279
|
_set_scope_state(scope, autopilot=False, startup=False, personas=0)
|
|
196
280
|
journal.log("bmad-autopilot", "off", scope=scope, personas=len(removed))
|
|
@@ -374,14 +458,15 @@ def _startup(value, scope) -> int:
|
|
|
374
458
|
if value == "on":
|
|
375
459
|
cmd = "%s bmad orient --scope %s" % (
|
|
376
460
|
shlex.quote(str(paths.launcher())), scope)
|
|
377
|
-
|
|
461
|
+
started = _add_hook_everywhere(scope, _ORIENT_HOOK, cmd)
|
|
378
462
|
_set_scope_state(scope, startup=True)
|
|
379
463
|
journal.log("bmad-startup", "on", scope=scope)
|
|
380
464
|
out.ok("BMAD startup ON (%s) — new sessions get orientation" % scope)
|
|
381
|
-
|
|
465
|
+
for host in started:
|
|
466
|
+
out.dim(" hook → %s" % cs.settings_path(scope, host=host))
|
|
382
467
|
return 0
|
|
383
468
|
if value == "off":
|
|
384
|
-
|
|
469
|
+
_remove_hook_everywhere(scope, _ORIENT_HOOK)
|
|
385
470
|
_set_scope_state(scope, startup=False)
|
|
386
471
|
journal.log("bmad-startup", "off", scope=scope)
|
|
387
472
|
out.ok("BMAD startup OFF (%s) — skills stay installed" % scope)
|
|
@@ -419,8 +504,7 @@ def _uninstall(scope, yes) -> int:
|
|
|
419
504
|
scope, " + _bmad/, _bmad-output/" if scope == "project" else ""))):
|
|
420
505
|
out.info("aborted")
|
|
421
506
|
return 0
|
|
422
|
-
|
|
423
|
-
cs.remove_hook(scope, "UserPromptSubmit", ROUTE_HOOK_NAME)
|
|
507
|
+
_remove_hook_everywhere(scope, _ORIENT_HOOK, _ROUTE_HOOK)
|
|
424
508
|
removed = _rm_skills(_skills_dir(scope))
|
|
425
509
|
removed += len(core.remove_personas(_agents_dir(scope)))
|
|
426
510
|
if scope == "project":
|
|
@@ -438,7 +522,7 @@ def _uninstall(scope, yes) -> int:
|
|
|
438
522
|
def _disable(scope) -> int:
|
|
439
523
|
"""Quarantine: turn startup off and move skills aside (recoverable)."""
|
|
440
524
|
scope = scope or "project"
|
|
441
|
-
|
|
525
|
+
_remove_hook_everywhere(scope, _ORIENT_HOOK)
|
|
442
526
|
qdir = _quarantine_dir(scope)
|
|
443
527
|
qdir.mkdir(parents=True, exist_ok=True)
|
|
444
528
|
moved = 0
|
|
@@ -210,6 +210,7 @@ docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md
|
|
|
210
210
|
docs/roadmap/items/bm25-has-no-stemming.md
|
|
211
211
|
docs/roadmap/items/bm25-index-is-one-json-blob.md
|
|
212
212
|
docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md
|
|
213
|
+
docs/roadmap/items/bmad-hooks-all-hosts.md
|
|
213
214
|
docs/roadmap/items/boost-first-carried-the-losing-trigger.md
|
|
214
215
|
docs/roadmap/items/boost-first-rule.md
|
|
215
216
|
docs/roadmap/items/boost-langchain-publishing.md
|
|
@@ -574,6 +575,7 @@ tests/eval/golden.jsonl
|
|
|
574
575
|
tests/eval/recommend.jsonl
|
|
575
576
|
tests/eval/taps-scale.txt
|
|
576
577
|
tests/eval/taps.txt
|
|
578
|
+
tests/functional/test_bmad_all_hosts.py
|
|
577
579
|
tests/functional/test_capabilities_policy.py
|
|
578
580
|
tests/functional/test_cli_adapt.py
|
|
579
581
|
tests/functional/test_cli_bmad.py
|
|
@@ -48,9 +48,9 @@ boost bmad on
|
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
It writes seven BMAD persona subagents into `~/.claude/agents/` and installs two
|
|
51
|
-
hooks. A `SessionStart` hook briefs the session on the
|
|
52
|
-
`UserPromptSubmit` hook classifies each incoming prompt and prefixes
|
|
53
|
-
short routing banner:
|
|
51
|
+
hooks on every host it finds. A `SessionStart` hook briefs the session on the
|
|
52
|
+
roster. A `UserPromptSubmit` hook classifies each incoming prompt and prefixes
|
|
53
|
+
it with a short routing banner:
|
|
54
54
|
|
|
55
55
|
```text
|
|
56
56
|
[BMAD autopilot] track: build
|
|
@@ -92,6 +92,33 @@ contents, so the moment you edit one it stops being boost's. `boost bmad on`
|
|
|
92
92
|
reports it as kept rather than overwriting it, and `boost bmad off` leaves it
|
|
93
93
|
alone. Delete the file if you want the stock version back.
|
|
94
94
|
|
|
95
|
+
### Which hosts get the hooks
|
|
96
|
+
|
|
97
|
+
`boost bmad on` writes its two hooks into every host it has evidence you use,
|
|
98
|
+
and re-running it changes nothing that is already correct.
|
|
99
|
+
|
|
100
|
+
- **Claude always.** It is boost's primary host, and the check deliberately is
|
|
101
|
+
not "is the `claude` binary on `PATH`" — `bmad on` only writes a
|
|
102
|
+
settings.json, so someone running inside Claude Code whose launcher is not on
|
|
103
|
+
boost's `PATH` would otherwise silently get no hooks. (`boost mcp register`
|
|
104
|
+
does gate on the binary, because it shells out to `claude mcp add` and
|
|
105
|
+
genuinely cannot work without it.)
|
|
106
|
+
- **Any other host on evidence of use** — its CLI on `PATH`, or its dotdir
|
|
107
|
+
already there. Writing into `~/.gemini/settings.json` for someone who has
|
|
108
|
+
never run Gemini is litter in a file boost does not own. Install that agent
|
|
109
|
+
later and the next `boost bmad on` picks it up.
|
|
110
|
+
|
|
111
|
+
boost translates on the way in. `UserPromptSubmit` is written as Gemini's
|
|
112
|
+
`BeforeAgent`, and `--timeout 10` means ten seconds on both hosts even though
|
|
113
|
+
Gemini's field is milliseconds. Matchers are **not** translated — they pass
|
|
114
|
+
through host-native — so Claude's `startup|resume|clear` source matcher is
|
|
115
|
+
applied only on Claude, where that vocabulary exists.
|
|
116
|
+
|
|
117
|
+
**The personas stay Claude-only.** A subagent definition is a Claude Code
|
|
118
|
+
contract, and Gemini's `agents/` slot validates its input, so a Claude-dialect
|
|
119
|
+
persona would be rejected. What a second host gets is prompt shaping: the
|
|
120
|
+
routing banner arrives and names a lead persona, but Gemini cannot spawn it.
|
|
121
|
+
|
|
95
122
|
## The full BMAD method
|
|
96
123
|
|
|
97
124
|
The method itself is a separate, heavier install. `boost bmad install` delegates
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: bmad-hooks-all-hosts
|
|
3
|
+
board: code
|
|
4
|
+
section: shipped
|
|
5
|
+
status: shipped
|
|
6
|
+
category: Agents · Parity
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 3
|
|
10
|
+
note: the autopilot wrote hooks to Claude and nowhere else, long after boost knew a second host
|
|
11
|
+
order: 12
|
|
12
|
+
owner: loop/bmad-all-hosts
|
|
13
|
+
pr:
|
|
14
|
+
title: bmad on knew about a second host and wrote to one anyway
|
|
15
|
+
---
|
|
16
|
+
<code>boost bmad on</code> installed its two hooks into Claude's
|
|
17
|
+
<code>settings.json</code> and nowhere else — not because of a decision, but because
|
|
18
|
+
<code>_autopilot_on</code> called <code>claude_settings.add_hook</code> without a
|
|
19
|
+
<code>host=</code> and took the default. That kept being true after
|
|
20
|
+
<code>core/hookhost.py</code> taught boost Gemini's event vocabulary and timeout units. The
|
|
21
|
+
capability was there; six call sites never used it.
|
|
22
|
+
<b>Six, not two.</b> <code>bmad on</code> and <code>off</code> were the obvious pair, but
|
|
23
|
+
<code>startup on|off</code>, <code>uninstall</code> and <code>disable</code> all manage the same
|
|
24
|
+
hooks, and a fan-out that fixed only the first two would have left
|
|
25
|
+
<code>boost bmad off</code> unable to remove what <code>boost bmad on</code> wrote.
|
|
26
|
+
<b>An existing test caught a real design error.</b> The first version chose hosts the way
|
|
27
|
+
<code>boost mcp register</code> does — <code>shutil.which</code> on the agent's CLI — and a test
|
|
28
|
+
that stubs <code>which</code> to <code>None</code> went red. It was right to. <code>mcp
|
|
29
|
+
register</code> <i>shells out</i> to <code>claude mcp add</code> and genuinely cannot work
|
|
30
|
+
without the binary; <code>bmad on</code> only writes a settings file. Gating on the binary
|
|
31
|
+
would have left a user running inside Claude Code with no hooks whenever the launcher was not
|
|
32
|
+
on boost's <code>PATH</code>. The rule is now <b>Claude unconditionally, any other host on
|
|
33
|
+
evidence of use</b> — its CLI on <code>PATH</code>, or its dotdir already present — so boost
|
|
34
|
+
never litters <code>~/.gemini/</code> for someone who has never run Gemini.
|
|
35
|
+
<b>What fans out and what does not.</b> Hooks do, translated: <code>UserPromptSubmit</code> is
|
|
36
|
+
written as Gemini's <code>BeforeAgent</code>, and ten seconds is written as
|
|
37
|
+
<code>10000</code> because Gemini's field is milliseconds. Matchers are not translated —
|
|
38
|
+
<code>hookhost</code> passes them through host-native — so Claude's
|
|
39
|
+
<code>startup|resume|clear</code> is applied only on Claude. The personas stay Claude-only: a
|
|
40
|
+
subagent is a Claude contract and Gemini's <code>agents/</code> slot would reject the dialect.
|
|
41
|
+
The module docstring claimed those events had "no equivalent in the other three agents", which
|
|
42
|
+
had quietly stopped being true; it says what is actually so now.
|
|
@@ -130,10 +130,10 @@
|
|
|
130
130
|
<section class="block reveal">
|
|
131
131
|
<div class="stats">
|
|
132
132
|
<!-- ROADMAP:stats -->
|
|
133
|
-
<div class="stat"><b>
|
|
133
|
+
<div class="stat"><b>18</b><span>Shipped</span></div>
|
|
134
134
|
<div class="stat"><b>1</b><span>Next up</span></div>
|
|
135
135
|
<div class="stat"><b>7</b><span>Planned</span></div>
|
|
136
|
-
<div class="stat"><b>
|
|
136
|
+
<div class="stat"><b>281</b><span>Loop finds</span></div>
|
|
137
137
|
<!-- /ROADMAP:stats -->
|
|
138
138
|
</div>
|
|
139
139
|
</section>
|
|
@@ -426,6 +426,45 @@ by new unit tests covering every branch.</p></details>
|
|
|
426
426
|
</div>
|
|
427
427
|
</article>
|
|
428
428
|
|
|
429
|
+
<article class="cap rcard" id="bmad-hooks-all-hosts">
|
|
430
|
+
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Agents · Parity</span></div>
|
|
431
|
+
<h3>bmad on knew about a second host and wrote to one anyway</h3>
|
|
432
|
+
<details class="cardbody"><summary>Write-up</summary>
|
|
433
|
+
<p><code>boost bmad on</code> installed its two hooks into Claude's
|
|
434
|
+
<code>settings.json</code> and nowhere else — not because of a decision, but because
|
|
435
|
+
<code>_autopilot_on</code> called <code>claude_settings.add_hook</code> without a
|
|
436
|
+
<code>host=</code> and took the default. That kept being true after
|
|
437
|
+
<code>core/hookhost.py</code> taught boost Gemini's event vocabulary and timeout units. The
|
|
438
|
+
capability was there; six call sites never used it.
|
|
439
|
+
<b>Six, not two.</b> <code>bmad on</code> and <code>off</code> were the obvious pair, but
|
|
440
|
+
<code>startup on|off</code>, <code>uninstall</code> and <code>disable</code> all manage the same
|
|
441
|
+
hooks, and a fan-out that fixed only the first two would have left
|
|
442
|
+
<code>boost bmad off</code> unable to remove what <code>boost bmad on</code> wrote.
|
|
443
|
+
<b>An existing test caught a real design error.</b> The first version chose hosts the way
|
|
444
|
+
<code>boost mcp register</code> does — <code>shutil.which</code> on the agent's CLI — and a test
|
|
445
|
+
that stubs <code>which</code> to <code>None</code> went red. It was right to. <code>mcp
|
|
446
|
+
register</code> <i>shells out</i> to <code>claude mcp add</code> and genuinely cannot work
|
|
447
|
+
without the binary; <code>bmad on</code> only writes a settings file. Gating on the binary
|
|
448
|
+
would have left a user running inside Claude Code with no hooks whenever the launcher was not
|
|
449
|
+
on boost's <code>PATH</code>. The rule is now <b>Claude unconditionally, any other host on
|
|
450
|
+
evidence of use</b> — its CLI on <code>PATH</code>, or its dotdir already present — so boost
|
|
451
|
+
never litters <code>~/.gemini/</code> for someone who has never run Gemini.
|
|
452
|
+
<b>What fans out and what does not.</b> Hooks do, translated: <code>UserPromptSubmit</code> is
|
|
453
|
+
written as Gemini's <code>BeforeAgent</code>, and ten seconds is written as
|
|
454
|
+
<code>10000</code> because Gemini's field is milliseconds. Matchers are not translated —
|
|
455
|
+
<code>hookhost</code> passes them through host-native — so Claude's
|
|
456
|
+
<code>startup|resume|clear</code> is applied only on Claude. The personas stay Claude-only: a
|
|
457
|
+
subagent is a Claude contract and Gemini's <code>agents/</code> slot would reject the dialect.
|
|
458
|
+
The module docstring claimed those events had "no equivalent in the other three agents", which
|
|
459
|
+
had quietly stopped being true; it says what is actually so now.</p></details>
|
|
460
|
+
<div class="meta">
|
|
461
|
+
<span class="m">Complexity <b>S</b></span>
|
|
462
|
+
<span class="m">Impact <b>Med</b></span>
|
|
463
|
+
<span class="m">Wow <b class="wow">★★★</b></span>
|
|
464
|
+
<span class="m">the autopilot wrote hooks to Claude and nowhere else, long after boost knew a second host</span>
|
|
465
|
+
</div>
|
|
466
|
+
</article>
|
|
467
|
+
|
|
429
468
|
<article class="cap rcard" id="reuse-helpers-kill-minor-dead-work">
|
|
430
469
|
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Tech-debt</span></div>
|
|
431
470
|
<h3>Reuse helpers; kill minor dead work</h3>
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Copyright the boost contributors.
|
|
2
|
+
# SPDX-License-Identifier: GPL-3.0-only
|
|
3
|
+
"""`boost bmad on` installs its hooks on every installed host, idempotently.
|
|
4
|
+
|
|
5
|
+
The autopilot's two hooks were written to Claude's settings.json and nowhere
|
|
6
|
+
else, even after `boost hooks` learned about a second host: `_autopilot_on`
|
|
7
|
+
called `claude_settings.add_hook` without a `host=`, so it took the default.
|
|
8
|
+
A user with Gemini CLI installed had to add both by hand, translating the event
|
|
9
|
+
names themselves -- which is the part boost exists to know.
|
|
10
|
+
|
|
11
|
+
Idempotence is asserted rather than assumed because these hooks are written
|
|
12
|
+
into a file the user owns and may re-run `bmad on` against at any time.
|
|
13
|
+
"""
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
import json
|
|
17
|
+
|
|
18
|
+
import pytest
|
|
19
|
+
|
|
20
|
+
from boost_cli.core import hookhost
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _settings(home, host, name="settings.json"):
|
|
24
|
+
p = home / hookhost.settings_dir(host) / name
|
|
25
|
+
return json.loads(p.read_text(encoding="utf-8")) if p.exists() else {}
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _boost_hooks(data):
|
|
29
|
+
"""{event: [names]} for the hooks boost owns, by its `# boost:` marker."""
|
|
30
|
+
found = {}
|
|
31
|
+
for event, entries in (data.get("hooks") or {}).items():
|
|
32
|
+
for block in entries:
|
|
33
|
+
for h in block.get("hooks", []):
|
|
34
|
+
if "# boost:" in h.get("command", ""):
|
|
35
|
+
found.setdefault(event, []).append(
|
|
36
|
+
h["command"].rsplit("# boost:", 1)[1].strip())
|
|
37
|
+
return found
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@pytest.fixture()
|
|
41
|
+
def both_hosts(sandbox, monkeypatch):
|
|
42
|
+
"""Pretend every known host's CLI is installed."""
|
|
43
|
+
monkeypatch.setattr("shutil.which", lambda name: "/usr/bin/" + name)
|
|
44
|
+
return sandbox
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class TestAutopilotFansOut:
|
|
48
|
+
def test_hooks_land_on_every_installed_host(self, both_hosts, boost):
|
|
49
|
+
boost("bmad", "on", "--scope", "global")
|
|
50
|
+
home = both_hosts
|
|
51
|
+
claude = _boost_hooks(_settings(home, hookhost.CLAUDE))
|
|
52
|
+
gemini = _boost_hooks(_settings(home, hookhost.GEMINI))
|
|
53
|
+
assert "bmad" in claude.get("SessionStart", [])
|
|
54
|
+
assert "bmad-route" in claude.get("UserPromptSubmit", [])
|
|
55
|
+
# Gemini spells them differently; boost must translate, not copy.
|
|
56
|
+
assert "bmad" in gemini.get("SessionStart", []), gemini
|
|
57
|
+
assert "bmad-route" in gemini.get("BeforeAgent", []), gemini
|
|
58
|
+
|
|
59
|
+
def test_gemini_timeout_is_milliseconds(self, both_hosts, boost):
|
|
60
|
+
"""The unit bug boost exists to absorb: 10s is 10000 on Gemini."""
|
|
61
|
+
boost("bmad", "on", "--scope", "global")
|
|
62
|
+
data = _settings(both_hosts, hookhost.GEMINI)
|
|
63
|
+
entries = [h for blocks in data["hooks"].values()
|
|
64
|
+
for b in blocks for h in b.get("hooks", [])]
|
|
65
|
+
assert entries, data
|
|
66
|
+
assert all(h["timeout"] == 10000 for h in entries), entries
|
|
67
|
+
|
|
68
|
+
def test_running_twice_does_not_duplicate(self, both_hosts, boost):
|
|
69
|
+
boost("bmad", "on", "--scope", "global")
|
|
70
|
+
first = _settings(both_hosts, hookhost.GEMINI)
|
|
71
|
+
boost("bmad", "on", "--scope", "global")
|
|
72
|
+
assert _settings(both_hosts, hookhost.GEMINI) == first
|
|
73
|
+
|
|
74
|
+
def test_off_removes_them_from_every_host(self, both_hosts, boost):
|
|
75
|
+
boost("bmad", "on", "--scope", "global")
|
|
76
|
+
boost("bmad", "off", "--scope", "global")
|
|
77
|
+
for host in (hookhost.CLAUDE, hookhost.GEMINI):
|
|
78
|
+
assert _boost_hooks(_settings(both_hosts, host)) == {}, host
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class TestUninstalledHostsAreSkipped:
|
|
82
|
+
def test_a_host_without_its_cli_gets_no_settings_file(self, sandbox, boost,
|
|
83
|
+
monkeypatch):
|
|
84
|
+
"""Writing into ~/.gemini for someone who has no Gemini is litter."""
|
|
85
|
+
monkeypatch.setattr("shutil.which",
|
|
86
|
+
lambda name: "/usr/bin/claude" if name == "claude" else None)
|
|
87
|
+
boost("bmad", "on", "--scope", "global")
|
|
88
|
+
gem = sandbox / hookhost.settings_dir(hookhost.GEMINI) / "settings.json"
|
|
89
|
+
assert not gem.exists(), "wrote Gemini settings with no Gemini installed"
|
|
90
|
+
assert _boost_hooks(_settings(sandbox, hookhost.CLAUDE)), "Claude missed"
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
class TestHostSelectionRule:
|
|
94
|
+
"""Claude unconditionally; a second host on evidence that it is in use.
|
|
95
|
+
|
|
96
|
+
The rule is not `boost mcp register`'s. That command shells out to
|
|
97
|
+
`claude mcp add` and genuinely cannot work without the binary; this one
|
|
98
|
+
only writes a settings.json. Gating Claude on `shutil.which` would leave a
|
|
99
|
+
user running inside Claude Code with no hooks whenever the launcher is not
|
|
100
|
+
on boost's PATH — which is exactly what an existing test caught.
|
|
101
|
+
"""
|
|
102
|
+
|
|
103
|
+
def test_claude_gets_hooks_even_with_no_cli_anywhere(self, sandbox, boost,
|
|
104
|
+
monkeypatch):
|
|
105
|
+
monkeypatch.setattr("shutil.which", lambda _n: None)
|
|
106
|
+
boost("bmad", "on", "--scope", "global")
|
|
107
|
+
assert _boost_hooks(_settings(sandbox, hookhost.CLAUDE)), \
|
|
108
|
+
"Claude must get hooks regardless of what is on PATH"
|
|
109
|
+
|
|
110
|
+
def test_a_dotdir_is_evidence_enough_without_the_cli(self, sandbox, boost,
|
|
111
|
+
monkeypatch):
|
|
112
|
+
"""Someone who has run Gemini has ~/.gemini, whatever their PATH says."""
|
|
113
|
+
monkeypatch.setattr("shutil.which", lambda _n: None)
|
|
114
|
+
(sandbox / hookhost.settings_dir(hookhost.GEMINI)).mkdir(parents=True)
|
|
115
|
+
boost("bmad", "on", "--scope", "global")
|
|
116
|
+
assert _boost_hooks(_settings(sandbox, hookhost.GEMINI)), \
|
|
117
|
+
"an existing dotdir should have earned the hooks"
|
|
118
|
+
|
|
119
|
+
def test_no_cli_and_no_dotdir_means_no_file(self, sandbox, boost,
|
|
120
|
+
monkeypatch):
|
|
121
|
+
monkeypatch.setattr("shutil.which", lambda _n: None)
|
|
122
|
+
boost("bmad", "on", "--scope", "global")
|
|
123
|
+
gem = sandbox / hookhost.settings_dir(hookhost.GEMINI) / "settings.json"
|
|
124
|
+
assert not gem.exists()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|