boost-skill-cli 1.2.170__tar.gz → 1.2.171__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.170 → boost_skill_cli-1.2.171}/PKG-INFO +1 -1
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/scopes.py +62 -5
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/store.py +164 -8
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_skill_cli.egg-info/PKG-INFO +1 -1
- boost_skill_cli-1.2.171/docs/roadmap/items/uninstall-local-cannot-remove-a-rule-or-workflow-list-local-shows.md +80 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap.html +7 -31
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_workspace_scope.py +119 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_scopes.py +100 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_store.py +214 -0
- boost_skill_cli-1.2.170/docs/roadmap/items/uninstall-local-cannot-remove-a-rule-or-workflow-list-local-shows.md +0 -40
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/.gitattributes +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/.gitignore +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/.lycheeignore +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/.vale/styles/boost/AIWriting.yml +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/.vale.ini +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/CLAUDE.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/DCO +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/GOVERNANCE.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/LICENSE +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/MAINTAINERS.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/MANIFEST.in +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/Makefile +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/README.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/SECURITY.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/SUPPORT.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/commands/quickstart.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/aihost.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/archive.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/bmad.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/bootstrap.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/browse.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/builtin.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/catalogbundle.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/cohort.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/compact.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/complete.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/deps.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/discovery.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/hookhost.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/jsonstate.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/prereq.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/report.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/shards.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/typedvalue.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/data/rules/boost-first.mdc +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_langchain/__init__.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_langchain/_compat.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_langchain/graph.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_langchain/loader.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_langchain/py.typed +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_langchain/retriever.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_skill_cli.egg-info/SOURCES.txt +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/codecov.yml +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/adapters.html +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/bmad.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/carousel.html +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/chat.html +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/code-review.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/commands.html +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/commit-audit.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/demo.gif +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/demo.html +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/demo.tape +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/dependencies.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/eval-latest.json +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/eval.html +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/index.html +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/langchain.html +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/openssf-badge.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/BOOST-D27.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/a-correct-link-in-a-locked-dir-reads-as-refused.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/a-new-shipped-card-always-404s-its-own-write-up-link.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/a-refusal-and-its-remedy-never-wrapped.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/agent-dir-shapes-install-still-trips-on.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/ai-backend-fanout.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/an-item-materialized-nowhere-reads-ok-in-verify-health-drift.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-absorb-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-adapt-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-adapt-renders-every-sibling-of-a-flat-agents-dir-workflow-as.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-adapt-run-stats-edit-tag-export-reject-the-tap-name-qualifie.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-ai-degrade-note-blames-path-api-keys-regardless-of-cause-sev.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-attest-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-audit-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-bmad-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-browse-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-bundle-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-catalog-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-catalog-resolve-one-s-duplicate-name-hint-advertises-path-to.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-changelog-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-chat-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-clean-counts-failed-removals-as-cleaned-journals-the-inflate.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-cli-py-commands-summaries-and-parser-help-contradict-behavio.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-cohort-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-completions-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-config-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-config-policy-set-store-type-unchecked-values-consumers-cras.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-context-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-corrupt-settings-config-state-json-silently-read-as-empty-th.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-create-distill-infer-absorb-install-silently-replace-an-inst.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-create-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-declined-confirms-never-name-y-boost-assume-yes-snapshot-cle.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-deps-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-discover-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-distill-s-heuristic-merge-drops-repeated-fences-braces-writi.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-doctor-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-drift-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-dry-runs-disagree-with-the-real-run-compact-counts-bytes-it.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-edit-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-evolve-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-explain-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-export-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-export-o-cohort-create-and-profile-save-silently-overwrite-e.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-fingerprint-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-five-exit-70-crashes-on-bad-paths-data-catalog-export-serve.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-focus-profile-sideline-by-unlinking-without-recording-it-lis.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-git-operations-never-set-git-terminal-prompt-0-so-a-404-priv.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-health-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-hooks-remove-n-cannot-find-hooks-boost-itself-added-unknown.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-import-all-skips-the-injection-secret-scans-and-the-per-skil.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-import-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-index-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-info-stats-explain-render-a-different-smaller-shape-for-rule.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-install-dry-run-promises-agents-the-real-install-never-write.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-install-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-install-local-writes-empties-the-repo-s-mcp-json-silently-of.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-json-accepted-but-ignored-on-many-branches-cohort-config-pol.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-lint-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-log-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-log-simulate-changelog-headings-echo-the-raw-qualified-argum.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-mcp-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-mcp-register-s-boost-first-consent-names-only-the-registered.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-missing-json-on-doctor-test-health-changelog-trending-log-ho.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-name-miss-errors-unknown-tap-qualifier-unnamed-no-close-matc.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-onboard-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-out-table-clips-data-columns-to-an-assumed-80-columns-when-s.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-out-warn-defaults-to-stdout-infer-absorb-corrupt-skill-md-se.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-outdated-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-output-wrap-tokens-splits-punctuation-off-backtick-spans-ins.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-pinned-taps-silently-moved-to-head-by-update-re-clone-and-co.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-policy-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-preview-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-profile-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-project-scope-seams-uninstall-verify-list-info-reinstall-dis.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-protocol-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-pulse-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-quarantine-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-quarantine-pin-state-invisible-list-info-doctor-report-links.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-quickstart-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-recommend-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-reindex-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-reinstall-sync-repair-and-audit-resolve-by-name-tap-ignoring.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-replay-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-root-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-rules-workflows-reported-as-skills-uninstall-claims-a-store.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-run-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-schedule-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-search-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-simulate-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-singular-plural-misses-1-skills-1-issue-need-1-skill-pass-ac.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-six-count-flags-tap-chat-absorb-lint-changelog-hooks-skip-ut.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-skill-profile-name-slugging-is-inconsistent-distill-o-accept.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-snapshot-restore-replaces-the-lock-wholesale-orphaning-newer.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-stale-prose-after-shipped-changes-catalog-export-live-discov.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-stray-positionals-and-inapplicable-flags-silently-ignored-ac.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-sweep-positionals-json-lack-help-strings-and-no-command-help.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-sync-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-tag-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-tap-dry-run-is-silently-ignored-outside-catalog-spec-and-def.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-tap-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-taps-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-taps-outdated-decay-policy-snapshot-json-emit-display-string.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-test-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-trust-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-trust-verify-labels-a-manifest-tampered-after-signing-by-a-t.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-unpin-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-untap-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-update-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-verify-drift-say-nothing-installed-exit-0-and-doctor-says-lo.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-verify-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/audit-who-findings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/bare-boost-never-names-an-entry-point.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/because-that-was-not-the-reason.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/bm25-empty-tokenization-kills-catalog-fallback.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/bmad-done-contract-ignores-the-track.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/bmad-gemini-gets-claude-hook-output.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/bmad-personas-delegate-outside-the-router.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/bmad-roster-drifted-from-bmad-6-12.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/bmad-route-ignores-autopilot-state.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/bmad-router-one-keyword-decides-the-track.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/bmad-router-reads-each-prompt-alone.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/boost-first-rule.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/branch-current-gate.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/cache-writers-that-still-crash-on-a-read-only-cache.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/canary-deps-check-skips-in-the-required-job.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/capability-policy-skips-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/catalog-categories-beyond-curated.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/ci-summary-reports-the-wrong-coverage-gate.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/claude-md-instructs-the-wrong-licence-header.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/cli-audit-2026-08-full-sweep.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/cli-command-audit.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/codex-hooks-timeout-units-are-unestablished.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/codex-is-not-an-mcp-host.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/compact-answers-a-named-tap-with-a-global-all-clear.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/concurrency-probe-measured-a-race-not-the-pool.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/concurrent-rag-builds-delete-each-others-temp-index.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/config-json-edge-shapes-crash-or-disagree.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/corpus-refresh-updates-data-not-prose.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/corrupt-config-reads-as-ready-to-set-up.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/count-flags-that-silently-invert.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/delay-true-defeats-the-log-suppress.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/dense-kill-switch-has-no-reason-state.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/dense-local-built-store-displaced-by-a-key.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/dense-no-key-guard-is-unreachable.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/dense-ready-but-embedder-cannot-run.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/dense-reindex-has-no-progress-or-durability.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/dense-reindex-reuses-whole-taps.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/dense-store-holds-every-vector-once-per-copy.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/doctor-prescribes-sync-that-deletes-live-links.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/err-colour-judged-by-stdout.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/err-multiline-hint-colours-across-the-newline.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/eval-corpus-counted-by-the-method-the-repo-disavows.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/eval-corpus-duplication-is-intra-tap-not-mirrors.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/eval-floor-calibration-stale-after-pin-refresh.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/eval-gate-scores-a-body-less-corpus.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/exemplar-graded-golden-set-runs-in-no-gate.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/explain-outline-has-no-cap.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/floors-job-never-installed-setuptools.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/free-threaded-canary-warns-about-nothing.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/gate-parity-test-ignores-k-and-golden.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/gated-golden-set-has-zero-exemplars.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/gstack-tap-first-then-coexistence.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/hooks-list-drops-the-name-before-the-host.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/identifier-columns-shrink-to-a-name-no-command-accepts.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/import-budget-gate-passes-when-boost-cannot-import.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/info-deps-materialize-a-dir-they-then-reject.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/install-cannot-tell-a-skill-needs-another-one.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/install-path-disambiguation.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/install-paths-that-still-drop-the-result.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/install-writes-through-a-redirected-dotdir-uninstall-will-not.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/is-dir-follows-a-symlink-at-eleven-rmtree-call-sites.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/keyed-no-store-hint-disagrees-with-shard-remedy.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/lighthouse-flips-on-byte-identical-input.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/links-job-503s-its-own-write-up-links.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/lock-kept-links-it-had-just-removed.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/manifest-in-prunes-only-the-root-copy.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mcp-cannot-read-a-skill-before-installing.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mcp-doctor-says-healthy-where-mcp-search-says-nothing-is-tapped.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mcp-install-description-omits-antigravity.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mcp-miss-reply-echoes-the-whole-query.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mcp-registration-writes-outside-a-sandboxed-home.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mcp-search-cost-overstated-on-keyless-machines.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mcp-server-dies-on-a-valid-json-message-that-is-not-an-object.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mcp-session-dies-on-a-deeply-nested-json-line.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mcp-skip-list-absent-from-tool-descriptions.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mutation-shard-balance-hints-are-a-release-behind.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mutation-shards-rerun-full-set-every-push.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/near-identical-copies-still-eat-the-slots.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/one-bad-agent-dir-silences-the-whole-doctor-report.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/one-failed-shard-job-drops-registries-from-the-manifest.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/openssf-silver.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/osps-baseline-levels.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/panel-fits-data-to-an-assumed-80-in-a-pipe.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/project-scope-in-an-unmarked-tree-does-not-walk-up.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/project-uninstall-deletes-any-in-repo-directory-the-lock-names.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/publish-the-keyword-index.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/published-shards-have-no-consumer.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/quickstart-drops-incompatible-shard-status.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/quickstart-manifest-error-drops-hint-and-misnames-cause.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/quickstart-rerun-retargets-tapped-registries.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/quickstart-says-ready-exit-0-after-every-tap-failed.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/quickstart-shard-download-invisible-in-preview-and-run.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/read-only-boost-home-with-no-cache-dir.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/readme-81-command-table-lists-80-omits-quickstart.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/readme-hero-installs-a-name-no-starter-registry-ships.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/reclone-leaves-a-clone-on-head-when-it-cannot-reach-the-pin.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/recommend-recomputes-its-columns-per-row.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/refresh-strands-the-natural-set-baseline.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/reindex-reported-a-completeness-share-it-could-not-compute.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/release-guard-fails-open-when-it-cannot-read-tags.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/relicence-apache-2.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/required-eval-gate-still-grades-by-name.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/roadmap-boards-advertise-python-39.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/rule-and-workflow-rows-carry-a-scope-nothing-but-list-local-reads.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/sandbox-fixture-does-not-sandbox-the-working-directory.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/search-caps-the-two-copyable-identifiers.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/search-drops-symbol-language-queries-silently.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/search-footer-not-fitted-to-the-pane-its-rows-were-fitted-to.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/search-footer-overflows-40-col-pane-gate-passes-by-luck.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/search-relevance-meter-is-constant-on-default-page.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/search-rows-use-term-width-so-piping-drops-the-tap-column.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/shard-refresh-skips-processed-commits.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/shard-runs-reembed-everything-weekly.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/shard-weights-do-not-predict-the-job-timeout.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/shrink-the-published-index.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/stale-gate-sizes-in-readme-and-contributing.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/stale-tap-hint-dead-for-tap-only-installs.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/surface-dehyphenation-rationale-is-false.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/sweep-died-at-a-page-not-at-launch.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/sync-repairs-a-disabled-agents-row-every-run.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/table-fit-widths-floor-destroys-columns-and-still-overflows.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/taps-vouches-for-a-clone-that-is-not-there.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/text-io-leaves-its-encoding-to-the-locale.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/the-install-path-hands-agy-claudes-mcp-argv.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/the-links-concurrency-cap-did-not-hold.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/the-model-back-off-mixes-two-clocks.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/the-windows-test-cap-is-five-minutes-from-the-measurement.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/tier3-ceiling-unreachable-at-default-n.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/typos-reported-as-boost-bugs.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/unreadable-tap-cache-healthy-doctor-crashing-heal.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/unwritable-agent-dir-has-no-remedy.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/unwritable-rule-or-workflow-dir-crashes-install.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/util-rmtree-chmods-a-symlink-target-outside-the-tree.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/vex-openvex-feed.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/weekly-vectors-had-no-ingestion-path.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/wrap-width-judged-by-stdout.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/writers-whose-bytes-are-compared-do-not-pin-their-newline.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/zip-strict-audit.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/security-design.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/semantic-search.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/verifying-releases.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/vex/meta.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/vex/openvex.json +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/evals/README.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/evals/__init__.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/evals/baseline.json +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/evals/metrics.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/evals/publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/examples/README.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/index.html +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/noxfile.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/pyproject.toml +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/add_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/build_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/build_vex.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/check_branch_current.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/check_dco.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/check_reproducible.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/eval_corpus.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/eval_tools.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/measure_near_duplicate_bound.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/measure_registry.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/normalize_sdist.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/page_budget.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/publish_eval_json.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/publish_shards.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/serve_docs.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/scripts/shard_plan.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/setup.cfg +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/sonar-project.properties +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/style/README.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/style/boost.css +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/style/boost.js +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/style/demo.html +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/conftest.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/eval/fixtures/claude_init_event.jsonl +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/eval/taps-scale.txt +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/eval/tool_calls.jsonl +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_bad_input_is_not_a_crash.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_bmad_all_hosts.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_bmad_personas_scope.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_cli_catalog.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_cli_hooks_codex.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_cli_hooks_gemini.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_cli_identifier_columns.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_cli_json_reports.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_cli_pane_width.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_cli_quickstart.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_cli_tap_pins.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_context_sees_an_unborn_branch.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_count_flags_reject_nonpositive.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_keyed_no_store_hint.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_kind_conformance.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_recommend_because_is_true.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_repo_root_guard_covers_real_installs.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_reports_match_reality.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/langchain/conftest.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/langchain/test_graph.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/langchain/test_loader.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/langchain/test_retriever.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/data/bmad-skills-6.12.0.json +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_action_pin_lockstep.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_aihost.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_archive.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_bmad_core.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_boost_first_offer.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_bootstrap.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_bot_pr_dco.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_branch_current.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_browse.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_builtin.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_canary_deps.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_catalog_distinct.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_catalog_keyword_words.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_catalogbundle.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_check_dco.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_check_reproducible.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_claude_settings_codex.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_clean_internal_cache.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_cli_update_shards.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_cohort.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_compact.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_complete.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_complete_rc_block.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_content_identity.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_corpus_prose.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_count_flags_use_positive_int.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_coverage_gate_prose.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_crash_redaction.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_dense_boilerplate_cluster.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_dense_embed_dedupe.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_dense_entry_reuse.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_dense_entry_vectors.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_dense_model_unavailable.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_dense_progress.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_dense_quantized.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_dense_ready_order.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_dense_shard_real_schema.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_dense_status_cheap.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_dense_vector_dedupe.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_deps.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_discovery.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_distill_merge.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_doctor_output_polish.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_drift_hint.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_dry_run_parity.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_embed_outranking.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_embed_truncated_response.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_eval_corpus.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_eval_corpus_bodies.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_eval_grading.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_eval_query_sets.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_eval_tools.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_eval_tools_probe.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_first_run_pointer.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_gemini_agent_sanitize.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_gitutil_lfs.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_gitutil_sparse.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_gstack_coexistence.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_help_contracts.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_hook_settings_hosts.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_hookhost.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_hookhost_codex.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_install_permission_error.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_jsonstate.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_langchain_packaging.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_launcher_python_floor.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_lighthouse_budgets.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_link_ownership.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_mcp_install_sandbox_home.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_mcp_read.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_measure_registry.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_mutation_weights_drift.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_near_duplicate_collapse.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_normalize_sdist.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_output_table_drop.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_output_table_whole.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_page_budget.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_prereq.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_quickstart_readiness.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_rag_completeness.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_rag_extra_hint.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_rag_fastpath.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_read_text_arg.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_registry_control_chars.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_registry_parallel.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_repo_root_guard.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_report.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_rerank_cache.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_retrieve_any_near_duplicates.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_sandbox_fixture_cwd.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_schedule_plist.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_sdist_contents.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_serve_docs.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_shard_plan.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_shards.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_shards_carry_forward.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_shards_incremental.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_shards_ingest.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_shards_matrix.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_smoke_covers_every_command.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_store_materialize.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_sync_blocked_links.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_sync_lost_lock.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_tap_pins.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_text_io_names_its_encoding.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_typedvalue.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_upstream_path.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_version_tags.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_vex.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_visual_harness_capture.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_visual_harness_flags.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_workflow_concurrency_groups.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_workflow_push_has_credentials.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/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.171'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 2, 171)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -146,8 +146,40 @@ def owned_by(entries: dict, base) -> dict:
|
|
|
146
146
|
if base is None:
|
|
147
147
|
return {}
|
|
148
148
|
want = os.path.realpath(base)
|
|
149
|
-
return {n: e for n, e in entries.items()
|
|
150
|
-
|
|
149
|
+
return {n: e for n, e in entries.items() if _owns(e, want)}
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def owns(entry: dict, base) -> bool:
|
|
153
|
+
"""Does one user-lock entry belong to the project rooted at ``base``?
|
|
154
|
+
|
|
155
|
+
The single-entry form of :func:`owned_by`, and the same predicate rather
|
|
156
|
+
than a second opinion about it — ``list --local`` decides what a repo has
|
|
157
|
+
with the filter, and ``uninstall --local`` decides what it may remove with
|
|
158
|
+
this, so the two cannot disagree about one row.
|
|
159
|
+
|
|
160
|
+
**Both halves are load bearing, and the ``scope`` half defends a shape
|
|
161
|
+
boost's own install path does not write.** ``_install_rule`` and
|
|
162
|
+
``_install_workflow`` emit ``scope`` and ``base`` in one dict, so the two
|
|
163
|
+
agree on every row an install produces. Two things read a row back and do
|
|
164
|
+
not: a hand-edited lock — the project lock is a *committed* file — and
|
|
165
|
+
``update``/``reinstall``, which rebuild the install from
|
|
166
|
+
``lk.get("scope", "user")`` and ``lk.get("base")`` *independently*
|
|
167
|
+
(``commands/pkg.py``), so a row carrying a ``base`` and no ``scope`` comes
|
|
168
|
+
back as user scope with the base intact. Dropping the ``scope`` test would
|
|
169
|
+
hand ``--local`` that row, which lives in the user's own config.
|
|
170
|
+
|
|
171
|
+
``False`` for ``base is None`` — a caller standing outside any project
|
|
172
|
+
owns nothing — which is answered before ``realpath``, since resolving
|
|
173
|
+
``None`` is a TypeError rather than an answer.
|
|
174
|
+
"""
|
|
175
|
+
if base is None:
|
|
176
|
+
return False
|
|
177
|
+
return _owns(entry, os.path.realpath(base))
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
def _owns(entry: dict, want: str) -> bool:
|
|
181
|
+
""":func:`owns` over an already-resolved ``want``, for the bulk filter."""
|
|
182
|
+
return entry.get("scope") == SCOPE_PROJECT and _claims(entry.get("base"), want)
|
|
151
183
|
|
|
152
184
|
|
|
153
185
|
def _claims(recorded, want: str) -> bool:
|
|
@@ -160,13 +192,38 @@ def _claims(recorded, want: str) -> bool:
|
|
|
160
192
|
against whatever directory the user happens to be standing in, so `"."`
|
|
161
193
|
would make one entry belong to every repo at once.
|
|
162
194
|
"""
|
|
163
|
-
if not
|
|
164
|
-
return False
|
|
165
|
-
if not os.path.isabs(recorded):
|
|
195
|
+
if not names_a_directory(recorded):
|
|
166
196
|
return False
|
|
167
197
|
return os.path.realpath(recorded) == want
|
|
168
198
|
|
|
169
199
|
|
|
200
|
+
def names_a_directory(recorded) -> bool:
|
|
201
|
+
"""Is a recorded ``base`` a claim on *some* directory at all?
|
|
202
|
+
|
|
203
|
+
The half of :func:`_claims` that needs no directory to compare against,
|
|
204
|
+
split out because one caller has none to offer: ``store`` decides whether
|
|
205
|
+
a removal result may *name* the repo it came from, where the question is
|
|
206
|
+
only whether the lock recorded a directory. Sharing the predicate is the
|
|
207
|
+
point — a base this rejects is one no project claims, so a result that
|
|
208
|
+
named it would print a repo that owns nothing.
|
|
209
|
+
|
|
210
|
+
The three clauses are **ordered, not independent**. ``isabs`` raises
|
|
211
|
+
``TypeError: expected str, bytes or os.PathLike object, not dict`` on a
|
|
212
|
+
hand-edited lock's ``{"base": {}}``, so the ``isinstance`` test has to
|
|
213
|
+
come first and is what makes the last one safe to call at all. ``bool``
|
|
214
|
+
first is for reading, not for filtering: ``isabs("")`` is already False,
|
|
215
|
+
so the empty case would be caught anyway, and saying so up front is
|
|
216
|
+
cheaper than making the reader work it out.
|
|
217
|
+
|
|
218
|
+
What it rejects that a plain truthiness check does not is therefore two
|
|
219
|
+
things: a *truthy* non-string, and a *relative* path — which ``realpath``
|
|
220
|
+
would resolve against wherever the user happens to be standing, making
|
|
221
|
+
one entry belong to whichever repo is read from.
|
|
222
|
+
"""
|
|
223
|
+
return (bool(recorded) and isinstance(recorded, str | os.PathLike)
|
|
224
|
+
and os.path.isabs(recorded))
|
|
225
|
+
|
|
226
|
+
|
|
170
227
|
def check_scope(scope: str) -> str:
|
|
171
228
|
"""Return ``scope`` if it is one boost knows, else raise BoostError."""
|
|
172
229
|
if scope not in SCOPES:
|
|
@@ -1327,6 +1327,83 @@ def _install_project_skill(entry: dict, force: bool = False,
|
|
|
1327
1327
|
return res
|
|
1328
1328
|
|
|
1329
1329
|
|
|
1330
|
+
def project_materialized(name: str, base) -> tuple[str, dict] | None:
|
|
1331
|
+
"""The user-lock rule or workflow row ``base``'s project owns — or None.
|
|
1332
|
+
|
|
1333
|
+
The two kinds a project lock cannot hold, looked up where they actually
|
|
1334
|
+
live. Ownership is :func:`scopes.owns`, the same predicate ``list --local``
|
|
1335
|
+
filters with, so the command that shows a row and the command that removes
|
|
1336
|
+
it cannot disagree about whose it is.
|
|
1337
|
+
|
|
1338
|
+
**Ownership is tested before the name is resolved anywhere else.**
|
|
1339
|
+
``lockfile.find_any`` would be the obvious lookup and is the wrong one
|
|
1340
|
+
here: it answers with the first *section* that holds the name, so a
|
|
1341
|
+
user-scope skill called ``x`` outranks a project rule called ``x`` that
|
|
1342
|
+
this repo owns, and ``--local`` would refuse to remove the row it can see
|
|
1343
|
+
in ``list --local``. Rules before workflows only to fix an order; a name
|
|
1344
|
+
in both sections is already ambiguous for bare ``uninstall``, which
|
|
1345
|
+
resolves it the same way.
|
|
1346
|
+
|
|
1347
|
+
No ``base is None`` short-circuit, deliberately: :func:`scopes.owns`
|
|
1348
|
+
answers ``False`` for it, so a guard here would be a branch no input can
|
|
1349
|
+
reach — a falsification pass deleted one and every test still passed,
|
|
1350
|
+
which is the definition of a line that is not doing anything. The cost of
|
|
1351
|
+
leaving it out is two dict lookups on a path that then returns None.
|
|
1352
|
+
"""
|
|
1353
|
+
for kind, get in (("rule", lockfile.get_rule),
|
|
1354
|
+
("workflow", lockfile.get_workflow)):
|
|
1355
|
+
row = get(name)
|
|
1356
|
+
if row and scopes.owns(row, base):
|
|
1357
|
+
return kind, row
|
|
1358
|
+
return None
|
|
1359
|
+
|
|
1360
|
+
|
|
1361
|
+
def _not_in_this_project(name: str) -> BoostError:
|
|
1362
|
+
"""``uninstall --local``'s refusal, worded from where the item really is.
|
|
1363
|
+
|
|
1364
|
+
One sentence covered three states. It is **true** in all three — a rule
|
|
1365
|
+
in the user's own config really is not installed in this project — and
|
|
1366
|
+
useless in two, because it reports the one fact the reader already has
|
|
1367
|
+
and withholds the one they need. Its hint sends them to ``boost list
|
|
1368
|
+
--local``, which correctly shows nothing, so the message and the remedy
|
|
1369
|
+
agree with each other and not with the machine. Each branch now names the
|
|
1370
|
+
scope it found and the command that removes it from there, because the
|
|
1371
|
+
item *is* removable and only the flag naming where it lives was not.
|
|
1372
|
+
|
|
1373
|
+
**No ``base`` parameter**, though the caller has one resolved. Every
|
|
1374
|
+
branch is decided by :func:`lockfile.find_any`, which searches the user
|
|
1375
|
+
lock as a whole and answers with the first *section* holding the name.
|
|
1376
|
+
That is wider than what ``--local`` just rejected:
|
|
1377
|
+
:func:`project_materialized` put ``scopes.owns`` only to the rules and
|
|
1378
|
+
workflows sections, so a row this reports can be a **skill** no ownership
|
|
1379
|
+
test has seen. Which is right for a message whose whole job is to say
|
|
1380
|
+
where the item is *instead* — the row's own ``scope`` decides the wording,
|
|
1381
|
+
and a user-scope skill is named as one. A parameter nothing reads is one
|
|
1382
|
+
no test can pin — a mutation of it is unkillable by construction — so it
|
|
1383
|
+
is not taken.
|
|
1384
|
+
"""
|
|
1385
|
+
found = lockfile.find_any(name)
|
|
1386
|
+
if found is not None:
|
|
1387
|
+
kind, row = found
|
|
1388
|
+
if row.get("scope") == scopes.SCOPE_PROJECT:
|
|
1389
|
+
# Owned by some other checkout — `owns` already said not this one.
|
|
1390
|
+
# The recorded base is named: it is the user's own lock, and a
|
|
1391
|
+
# reader who cannot see which repo has it cannot act on this.
|
|
1392
|
+
return BoostError(
|
|
1393
|
+
"%s is a %s installed in %s, not in this project"
|
|
1394
|
+
% (name, kind, row.get("base") or "another project"),
|
|
1395
|
+
hint="remove it from there, or with `boost uninstall %s`"
|
|
1396
|
+
% name)
|
|
1397
|
+
return BoostError(
|
|
1398
|
+
"%s is a %s installed at user scope, not in this project" % (name, kind),
|
|
1399
|
+
hint="remove it with `boost uninstall %s` (no --local)" % name)
|
|
1400
|
+
# Genuinely absent. Byte-identical to what this raised before — the one
|
|
1401
|
+
# state where naming where the item is instead is no help, because it is
|
|
1402
|
+
# nowhere.
|
|
1403
|
+
return BoostError("%s is not installed in this project" % name,
|
|
1404
|
+
hint="see what is with `boost list --local`")
|
|
1405
|
+
|
|
1406
|
+
|
|
1330
1407
|
def project_skill_targets(base, name: str) -> set[Path]:
|
|
1331
1408
|
"""Every path a project install of ``name`` could legally have written.
|
|
1332
1409
|
|
|
@@ -1427,12 +1504,35 @@ def uninstall_project(name: str, base=None) -> dict:
|
|
|
1427
1504
|
redirect as easily as a doctored path, so keeping it would be the same
|
|
1428
1505
|
denial of service by another route. ``uninstall`` has no ``--json``, so
|
|
1429
1506
|
the warning lines are the whole signal a caller gets.
|
|
1507
|
+
|
|
1508
|
+
**A rule or workflow gets none of those guards, and that is correct.**
|
|
1509
|
+
A project lock holds a ``skills`` key and nothing else, so an
|
|
1510
|
+
``install --local`` of the other two kinds materializes into the repo but
|
|
1511
|
+
records itself in the *user* lock tagged ``scope``/``base``. Everything
|
|
1512
|
+
above exists because the project lock is a **committed** file that anyone
|
|
1513
|
+
with merge rights can edit — a path out of it is input. The user lock is
|
|
1514
|
+
not committed; it is the same file bare ``boost uninstall`` has always
|
|
1515
|
+
read, and :func:`_uninstall_rule` / :func:`_uninstall_workflow` are the
|
|
1516
|
+
same functions it has always called. So the fall-through adds no path
|
|
1517
|
+
boost could not already be asked to delete, and re-deriving a legal set
|
|
1518
|
+
for it would be ceremony over a threat that is not there.
|
|
1519
|
+
|
|
1520
|
+
What ``--local`` does is **narrow** eligibility, never widen it:
|
|
1521
|
+
:func:`scopes.owns` admits only a row this repo claims, so a user-scope
|
|
1522
|
+
rule and another checkout's rule both stay put. Before this,
|
|
1523
|
+
``list --local`` printed the rule and ``uninstall --local`` answered "not
|
|
1524
|
+
installed in this project" — so the flag that performed the install could
|
|
1525
|
+
not undo it, and said something false while refusing.
|
|
1430
1526
|
"""
|
|
1431
1527
|
resolved_base = _resolve_base(scopes.SCOPE_PROJECT, base)
|
|
1432
1528
|
entry = projectlock.get_skill(resolved_base, name) if resolved_base else None
|
|
1433
1529
|
if not entry:
|
|
1434
|
-
|
|
1435
|
-
|
|
1530
|
+
owned = project_materialized(name, resolved_base)
|
|
1531
|
+
if owned is not None:
|
|
1532
|
+
owned_kind, owned_entry = owned
|
|
1533
|
+
return (_uninstall_rule if owned_kind == "rule"
|
|
1534
|
+
else _uninstall_workflow)(name, owned_entry)
|
|
1535
|
+
raise _not_in_this_project(name)
|
|
1436
1536
|
removed: list[str] = []
|
|
1437
1537
|
refused: list[str] = []
|
|
1438
1538
|
redirected: list[str] = []
|
|
@@ -1912,8 +2012,8 @@ def _refused_removal(name: str, path: Path):
|
|
|
1912
2012
|
raise _removal_refused(name, path) from None
|
|
1913
2013
|
|
|
1914
2014
|
|
|
1915
|
-
def _remove_all_or_nothing(name: str, plan: list[tuple[Path, str]]) ->
|
|
1916
|
-
"""Apply an uninstall's removals, or none of them.
|
|
2015
|
+
def _remove_all_or_nothing(name: str, plan: list[tuple[Path, str]]) -> int:
|
|
2016
|
+
"""Apply an uninstall's removals, or none of them. Returns how many files.
|
|
1917
2017
|
|
|
1918
2018
|
``plan`` holds ``(path, new_text)`` for each file to change: ``""`` to
|
|
1919
2019
|
delete it, other text to rewrite it. Every dir is checked before the
|
|
@@ -1924,6 +2024,18 @@ def _remove_all_or_nothing(name: str, plan: list[tuple[Path, str]]) -> None:
|
|
|
1924
2024
|
Two rows can name one file (two enabled agents whose dirs resolve to one
|
|
1925
2025
|
path), so the plan is de-duplicated on the resolved dir, not the resolved
|
|
1926
2026
|
file, and a file already gone counts as removed.
|
|
2027
|
+
|
|
2028
|
+
The count is **files**, after that de-duplication, and never ``len(plan)``.
|
|
2029
|
+
On the default agent table the two agree — a project rule measures five
|
|
2030
|
+
rows at five distinct paths, because ``rules.CONTEXT_FILES`` gives each
|
|
2031
|
+
context-file agent its own name there (``CLAUDE.local.md``,
|
|
2032
|
+
``GEMINI.md``, ``AGENTS.md``) and Cursor and Windsurf take a rules dir
|
|
2033
|
+
each. They diverge on exactly what the de-duplication is for: two agents
|
|
2034
|
+
configured at one dir, or a dotdir that is a symlink to another, which
|
|
2035
|
+
``path.parent.resolve()`` collapses. ``len(plan)`` would then tell the
|
|
2036
|
+
user boost removed a file it removed once. The caller reports "removed
|
|
2037
|
+
from <repo>" off this, the way :func:`uninstall_project` reports it off
|
|
2038
|
+
paths that came off disk rather than off the agent list.
|
|
1927
2039
|
"""
|
|
1928
2040
|
once: dict[Path, tuple[Path, str]] = {}
|
|
1929
2041
|
for path, text in plan:
|
|
@@ -1937,6 +2049,7 @@ def _remove_all_or_nothing(name: str, plan: list[tuple[Path, str]]) -> None:
|
|
|
1937
2049
|
util.atomic_write_text(path, text)
|
|
1938
2050
|
else:
|
|
1939
2051
|
path.unlink(missing_ok=True)
|
|
2052
|
+
return len(once)
|
|
1940
2053
|
|
|
1941
2054
|
|
|
1942
2055
|
def _present(path: Path) -> bool:
|
|
@@ -1977,10 +2090,10 @@ def _uninstall_rule(name: str, rule: dict) -> dict:
|
|
|
1977
2090
|
plan.append((path, ""))
|
|
1978
2091
|
if m.get("agent"):
|
|
1979
2092
|
removed.append(m["agent"])
|
|
1980
|
-
_remove_all_or_nothing(name, plan)
|
|
2093
|
+
gone = _remove_all_or_nothing(name, plan)
|
|
1981
2094
|
lockfile.remove_rule(name)
|
|
1982
2095
|
journal.log("uninstall", name)
|
|
1983
|
-
return
|
|
2096
|
+
return _materialized_result(name, removed, rule, "rule", gone)
|
|
1984
2097
|
|
|
1985
2098
|
|
|
1986
2099
|
def quarantine_materialized(kind: str, name: str, entry: dict) -> list[str]:
|
|
@@ -2234,10 +2347,53 @@ def _uninstall_workflow(name: str, workflow: dict) -> dict:
|
|
|
2234
2347
|
plan.append((path, ""))
|
|
2235
2348
|
if m.get("agent"):
|
|
2236
2349
|
removed.append(m["agent"])
|
|
2237
|
-
_remove_all_or_nothing(name, plan)
|
|
2350
|
+
gone = _remove_all_or_nothing(name, plan)
|
|
2238
2351
|
lockfile.remove_workflow(name)
|
|
2239
2352
|
journal.log("uninstall", name)
|
|
2240
|
-
return
|
|
2353
|
+
return _materialized_result(name, removed, workflow, "workflow", gone)
|
|
2354
|
+
|
|
2355
|
+
|
|
2356
|
+
def _materialized_result(name: str, removed: list[str], entry: dict,
|
|
2357
|
+
kind: str, gone: int) -> dict:
|
|
2358
|
+
"""The uninstall result for a rule or workflow, scope carried through.
|
|
2359
|
+
|
|
2360
|
+
``scope`` and ``base`` come off the lock entry rather than off how the
|
|
2361
|
+
caller got here, because both callers reach the same row: bare
|
|
2362
|
+
``boost uninstall`` and ``boost uninstall --local`` remove one
|
|
2363
|
+
``--local`` rule by the same two functions. Reporting the repo only on
|
|
2364
|
+
the flagged path would make the same removal describe itself two ways.
|
|
2365
|
+
|
|
2366
|
+
A user-scope entry has neither key and gets neither, so ``cmd_uninstall``
|
|
2367
|
+
reads ``scope`` as absent and prints exactly what it printed before.
|
|
2368
|
+
|
|
2369
|
+
**Both keys or neither**, and a ``base`` that names a directory is
|
|
2370
|
+
required for it. A lock is a file on disk, so a row can say
|
|
2371
|
+
``scope: project`` and record no usable directory —
|
|
2372
|
+
:func:`scopes.owned_by` already treats that shape as real and drops it,
|
|
2373
|
+
because a row that claims no directory is claimed by none. Carrying
|
|
2374
|
+
``scope`` without one would put the key in the dict with that value,
|
|
2375
|
+
where the caller's ``info.get("base", "this repo")`` default can never
|
|
2376
|
+
fire: ``paths.tilde`` is ``str(p)``, so ``None`` prints as *removed from
|
|
2377
|
+
None* and a hand-edited ``{"base": {}}`` prints as *removed from {}* —
|
|
2378
|
+
over a removal that worked.
|
|
2379
|
+
|
|
2380
|
+
The test is :func:`scopes.names_a_directory`, the same one ownership is
|
|
2381
|
+
decided with, rather than a truthiness check beside it. Measured, the two
|
|
2382
|
+
agree on every *falsy* base — ``None``, ``""``, ``{}``, ``0`` are dropped
|
|
2383
|
+
either way — and differ on exactly two things, both of which a lock can
|
|
2384
|
+
hold and an install cannot write: a **truthy** non-string, which would
|
|
2385
|
+
print *removed from 17*, and a **relative** path, which names a different
|
|
2386
|
+
repo depending on where the reader is standing. The relative case is the
|
|
2387
|
+
one that carries the difference in practice, so it is the one the test
|
|
2388
|
+
turns on.
|
|
2389
|
+
"""
|
|
2390
|
+
res = {"name": name, "unlinked": removed, "entry": entry, "kind": kind,
|
|
2391
|
+
"removed_count": gone}
|
|
2392
|
+
if (entry.get("scope") == scopes.SCOPE_PROJECT
|
|
2393
|
+
and scopes.names_a_directory(entry.get("base"))):
|
|
2394
|
+
res["scope"] = scopes.SCOPE_PROJECT
|
|
2395
|
+
res["base"] = entry["base"]
|
|
2396
|
+
return res
|
|
2241
2397
|
|
|
2242
2398
|
|
|
2243
2399
|
def install_from_path(src_dir: Path, name: str | None = None,
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: uninstall-local-cannot-remove-a-rule-or-workflow-list-local-shows
|
|
3
|
+
board: code
|
|
4
|
+
section: dx
|
|
5
|
+
status: shipped
|
|
6
|
+
category: CLI · Bug
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 3
|
|
10
|
+
note: shipped — the fall-through, plus a refusal that names where the item really is
|
|
11
|
+
order: 355
|
|
12
|
+
owner: loop/uninstall-local-rules
|
|
13
|
+
pr: 1021
|
|
14
|
+
title: "<code>uninstall --local</code> cannot remove a rule or workflow that <code>list --local</code> shows"
|
|
15
|
+
---
|
|
16
|
+
<code>boost install <rule> --local</code> works, and since PR #998 <code>boost list
|
|
17
|
+
--local</code> prints the rule it installed. <code>boost uninstall <rule> --local</code>
|
|
18
|
+
then exits 1 with “<code><rule> is not installed in this project</code>” and the
|
|
19
|
+
hint <code>see what is with `boost list --local`</code> · which is the command that just
|
|
20
|
+
showed it. There is no way to undo the install through the scope flag that performed it.
|
|
21
|
+
|
|
22
|
+
The cause is one line: <code>store.uninstall_project</code> (store.py:1291) reads
|
|
23
|
+
<code>projectlock.get_skill</code> and nothing else, because a project lock holds a
|
|
24
|
+
<code>skills</code> key alone. A rule or workflow installed <code>--local</code> is recorded in
|
|
25
|
+
the <em>user</em> lock tagged <code>scope: project</code> with a <code>base</code>, so the
|
|
26
|
+
project lock genuinely has no row · but the user lock does, and bare <code>boost
|
|
27
|
+
uninstall <rule></code> finds it and works. So the item is removable; only the flag that
|
|
28
|
+
names where it lives is not.
|
|
29
|
+
|
|
30
|
+
Two candidate fixes, and the choice is a design decision rather than a typo. Either
|
|
31
|
+
<code>uninstall_project</code> falls through to the user lock for a row whose <code>scope</code>
|
|
32
|
+
is project and whose <code>base</code> is this repo (<code>scopes.owned_by</code> already answers
|
|
33
|
+
exactly that question, and is what <code>list --local</code> now uses), or <code>--local</code>
|
|
34
|
+
refuses a non-skill with a message that says <em>use bare <code>uninstall</code></em> rather
|
|
35
|
+
than claiming the thing is not installed. The first is what a reader expects; the second is one
|
|
36
|
+
line. Either way the current message is wrong on its facts, which is the part that must not
|
|
37
|
+
survive. Found while verifying
|
|
38
|
+
<code>audit-project-scope-seams-uninstall-verify-list-info-reinstall-dis</code>.
|
|
39
|
+
|
|
40
|
+
<b>Shipped: the fall-through, and the message fixed anyway.</b> Reproduced first — a real
|
|
41
|
+
<code>install house-style --local</code> materializes five rows (<code>CLAUDE.local.md</code>,
|
|
42
|
+
<code>GEMINI.md</code>, <code>AGENTS.md</code>, <code>.cursor/rules/*.mdc</code>,
|
|
43
|
+
<code>.windsurf/rules/*.md</code>), <code>list --local --kind rule</code> prints it, and
|
|
44
|
+
<code>uninstall --local</code> exited 1 saying it was not installed.
|
|
45
|
+
<code>store.project_materialized</code> now looks the name up in the rule and workflow sections
|
|
46
|
+
of the user lock and admits a row only when <code>scopes.owns</code> says this repo claims it;
|
|
47
|
+
<code>uninstall_project</code> hands that row to the same
|
|
48
|
+
<code>_uninstall_rule</code>/<code>_uninstall_workflow</code> bare <code>uninstall</code> has
|
|
49
|
+
always called.
|
|
50
|
+
|
|
51
|
+
<b>Why those functions get none of the guards the skill path has.</b> Everything in
|
|
52
|
+
<code>uninstall_project</code>'s derived-legal-set machinery exists because the <em>project</em>
|
|
53
|
+
lock is a committed file — a path out of it is input. The user lock is not committed, and is the
|
|
54
|
+
same file bare <code>boost uninstall</code> already reads, so the fall-through adds no path boost
|
|
55
|
+
could not already be asked to delete. What <code>--local</code> does is <b>narrow</b>
|
|
56
|
+
eligibility, never widen it.
|
|
57
|
+
|
|
58
|
+
<b>Three details that were not free.</b>
|
|
59
|
+
<code>scopes.owns</code> is the single-entry form of the filter <code>list --local</code> uses,
|
|
60
|
+
not a second opinion about it — the two commands disagreeing about whose a row is <em>is</em> this
|
|
61
|
+
bug.
|
|
62
|
+
Ownership is asked of the rule and workflow sections <em>directly</em>, never through
|
|
63
|
+
<code>lockfile.find_any</code>, which answers with the first section holding the name: a
|
|
64
|
+
user-scope skill called <code>x</code> would outrank a project rule called <code>x</code> this
|
|
65
|
+
repo owns, and <code>--local</code> would go on refusing the row <code>list --local</code> shows.
|
|
66
|
+
And <code>_remove_all_or_nothing</code> now returns a count of <em>files</em> after its
|
|
67
|
+
de-duplication rather than rows. The two agree on the default agent table — five rows at
|
|
68
|
+
five distinct paths, since <code>rules.CONTEXT_FILES</code> gives each context-file agent its
|
|
69
|
+
own name at project scope — and diverge on what the de-duplication exists for: two agents
|
|
70
|
+
configured at one dir, or a dotdir symlinked to another. Counting rows there would report a file
|
|
71
|
+
removed twice.
|
|
72
|
+
|
|
73
|
+
<b>The message was useless in two of its three states</b>, which is not the same as wrong: a rule
|
|
74
|
+
in the user’s own config really is not installed in this project. It reported the one fact
|
|
75
|
+
the reader already had and withheld the one they needed, and its hint sent them to
|
|
76
|
+
<code>list --local</code>, which correctly shows nothing. Both branches now name where the item
|
|
77
|
+
really is: a user-scope rule says so and points at bare <code>uninstall</code>; a row owned by
|
|
78
|
+
another checkout names that checkout, and both carry the command that removes it from there. The
|
|
79
|
+
genuinely-absent branch is kept byte-identical — it is the one state where naming where the
|
|
80
|
+
item is instead is no help, because it is nowhere.
|
|
@@ -6551,38 +6551,14 @@ its own pass rather than a bolt-on inside this PR. Left <code>inflight</code> ra
|
|
|
6551
6551
|
</article>
|
|
6552
6552
|
|
|
6553
6553
|
<article class="cap rcard" id="uninstall-local-cannot-remove-a-rule-or-workflow-list-local-shows">
|
|
6554
|
-
<div class="head"><span class="pill
|
|
6554
|
+
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">CLI · Bug</span></div>
|
|
6555
6555
|
<h3><code>uninstall --local</code> cannot remove a rule or workflow that <code>list --local</code> shows</h3>
|
|
6556
|
-
<p><
|
|
6557
|
-
|
|
6558
|
-
|
|
6559
|
-
|
|
6560
|
-
|
|
6561
|
-
|
|
6562
|
-
The cause is one line: <code>store.uninstall_project</code> (store.py:1291) reads
|
|
6563
|
-
<code>projectlock.get_skill</code> and nothing else, because a project lock holds a
|
|
6564
|
-
<code>skills</code> key alone. A rule or workflow installed <code>--local</code> is recorded in
|
|
6565
|
-
the <em>user</em> lock tagged <code>scope: project</code> with a <code>base</code>, so the
|
|
6566
|
-
project lock genuinely has no row · but the user lock does, and bare <code>boost
|
|
6567
|
-
uninstall <rule></code> finds it and works. So the item is removable; only the flag that
|
|
6568
|
-
names where it lives is not.
|
|
6569
|
-
|
|
6570
|
-
Two candidate fixes, and the choice is a design decision rather than a typo. Either
|
|
6571
|
-
<code>uninstall_project</code> falls through to the user lock for a row whose <code>scope</code>
|
|
6572
|
-
is project and whose <code>base</code> is this repo (<code>scopes.owned_by</code> already answers
|
|
6573
|
-
exactly that question, and is what <code>list --local</code> now uses), or <code>--local</code>
|
|
6574
|
-
refuses a non-skill with a message that says <em>use bare <code>uninstall</code></em> rather
|
|
6575
|
-
than claiming the thing is not installed. The first is what a reader expects; the second is one
|
|
6576
|
-
line. Either way the current message is wrong on its facts, which is the part that must not
|
|
6577
|
-
survive. A test wants a rule installed <code>--local</code>, asserted present in <code>list
|
|
6578
|
-
--local</code>, then removed by <code>uninstall --local</code> with the context file checked for
|
|
6579
|
-
the stripped block. Found while verifying
|
|
6580
|
-
<code>audit-project-scope-seams-uninstall-verify-list-info-reinstall-dis</code>.</p>
|
|
6581
|
-
<div class="meta">
|
|
6582
|
-
<span class="m">Complexity <b>S</b></span>
|
|
6583
|
-
<span class="m">Impact <b>Med</b></span>
|
|
6584
|
-
<span class="m">Wow <b class="wow">★★★</b></span>
|
|
6585
|
-
<span class="m">list --local prints the repo's rule; uninstall --local says it is not installed</span>
|
|
6556
|
+
<p class="cardbody"><a class="writeup" href="https://github.com/jonnyeclectic/boost/blob/main/docs/roadmap/items/uninstall-local-cannot-remove-a-rule-or-workflow-list-local-shows.md">Write-up · uninstall-local-cannot-remove-a-rule-or-workflow-list-local-shows.md</a></p>
|
|
6557
|
+
<div class="meta">
|
|
6558
|
+
<span class="m">Complexity <b>S</b></span>
|
|
6559
|
+
<span class="m">Impact <b>Med</b></span>
|
|
6560
|
+
<span class="m">Wow <b class="wow">★★★</b></span>
|
|
6561
|
+
<span class="m">shipped — the fall-through, plus a refusal that names where the item really is</span>
|
|
6586
6562
|
</div>
|
|
6587
6563
|
</article>
|
|
6588
6564
|
<!-- /ROADMAP:cards -->
|
{boost_skill_cli-1.2.170 → boost_skill_cli-1.2.171}/tests/functional/test_workspace_scope.py
RENAMED
|
@@ -739,6 +739,125 @@ def test_list_local_json_keeps_the_four_key_shape(boost, tapped, repo):
|
|
|
739
739
|
assert data["skills"] == {}
|
|
740
740
|
|
|
741
741
|
|
|
742
|
+
# ── uninstall --local: the flag that installed it can undo it ────────────
|
|
743
|
+
#
|
|
744
|
+
# These drive a REAL install rather than a synthesized lock row, because the
|
|
745
|
+
# bug was that two commands read two different files for one answer: a
|
|
746
|
+
# hand-written row can agree with whichever of them the test happens to call.
|
|
747
|
+
|
|
748
|
+
|
|
749
|
+
@pytest.fixture()
|
|
750
|
+
def trio_tap(boost, fixture_tap_src, tmp_path):
|
|
751
|
+
"""The fixture tap plus one rule and one workflow, tapped.
|
|
752
|
+
|
|
753
|
+
The session fixture ships skills only, and the kinds that reproduce this
|
|
754
|
+
are the two a project lock cannot hold.
|
|
755
|
+
"""
|
|
756
|
+
tap = tmp_path / "trio-tap"
|
|
757
|
+
shutil.copytree(fixture_tap_src, tap)
|
|
758
|
+
(tap / "rules").mkdir()
|
|
759
|
+
(tap / "rules" / "house.mdc").write_text(
|
|
760
|
+
"---\nname: house-style\nversion: 1.0.0\n---\n\nAlways write tests first.\n",
|
|
761
|
+
encoding="utf-8")
|
|
762
|
+
(tap / "commands").mkdir()
|
|
763
|
+
(tap / "commands" / "ship-it.md").write_text(
|
|
764
|
+
"---\nname: ship-it\nversion: 1.0.0\n---\n\nShip-it checklist body.\n",
|
|
765
|
+
encoding="utf-8")
|
|
766
|
+
run = lambda *a: subprocess.run(a, cwd=tap, check=True, capture_output=True)
|
|
767
|
+
run("git", "add", "-A")
|
|
768
|
+
run("git", "commit", "-qm", "add a rule and a workflow")
|
|
769
|
+
boost("tap", str(tap))
|
|
770
|
+
return tap
|
|
771
|
+
|
|
772
|
+
|
|
773
|
+
def test_uninstall_local_removes_the_project_rule_list_local_shows(
|
|
774
|
+
boost, trio_tap, repo):
|
|
775
|
+
"""The card, end to end: shown by one command, denied by the other."""
|
|
776
|
+
boost("install", "house-style", "--local")
|
|
777
|
+
rows = [Path(m["path"])
|
|
778
|
+
for m in lockfile.get_rule("house-style")["materializations"]]
|
|
779
|
+
assert rows, "nothing materialized — this would assert nothing"
|
|
780
|
+
assert "house-style" in boost("list", "--local", "--kind", "rule").out
|
|
781
|
+
|
|
782
|
+
res = boost("uninstall", "house-style", "--local", "-y")
|
|
783
|
+
|
|
784
|
+
assert lockfile.get_rule("house-style") is None
|
|
785
|
+
for p in rows:
|
|
786
|
+
# The claude-mode rows are a managed block in a context file boost
|
|
787
|
+
# created, so the file goes with the block; the file rows are deleted
|
|
788
|
+
# outright. Either way nothing the install wrote is left behind.
|
|
789
|
+
assert not p.exists(), p
|
|
790
|
+
assert "no rules installed" in boost("list", "--local", "--kind", "rule").out
|
|
791
|
+
# The *repo*, not just the agents. `cmd_uninstall` prints "removed from
|
|
792
|
+
# <agent · agent · …>" for any rule, so a bare `"removed from" in out`
|
|
793
|
+
# passes with the scope and base never reaching the result at all — it
|
|
794
|
+
# asserts the line this change did not add. Wrapping folds the path, so
|
|
795
|
+
# compare against the unfolded output.
|
|
796
|
+
flat = " ".join(res.out.split())
|
|
797
|
+
assert "removed from %s" % paths.tilde(repo) in flat, flat
|
|
798
|
+
|
|
799
|
+
|
|
800
|
+
def test_uninstall_local_removes_a_project_workflow(boost, trio_tap, repo):
|
|
801
|
+
boost("install", "ship-it", "--local")
|
|
802
|
+
rows = [Path(m["path"])
|
|
803
|
+
for m in lockfile.get_workflow("ship-it")["materializations"]]
|
|
804
|
+
assert rows
|
|
805
|
+
boost("uninstall", "ship-it", "--local", "-y")
|
|
806
|
+
assert lockfile.get_workflow("ship-it") is None
|
|
807
|
+
for p in rows:
|
|
808
|
+
assert not p.exists(), p
|
|
809
|
+
|
|
810
|
+
|
|
811
|
+
def test_uninstall_local_leaves_a_user_scope_rule_alone(boost, trio_tap, repo):
|
|
812
|
+
"""`--local` narrows what may be removed; it never widens it.
|
|
813
|
+
|
|
814
|
+
The rule lives in the user's own config. Removing it under a flag that
|
|
815
|
+
names the repo would be the opposite of this command's contract, and the
|
|
816
|
+
old message — "not installed in this project" — sent the reader to `boost
|
|
817
|
+
list --local`, which correctly shows nothing. Message and remedy agreed
|
|
818
|
+
with each other and not with the machine.
|
|
819
|
+
"""
|
|
820
|
+
boost("install", "house-style")
|
|
821
|
+
rows = [Path(m["path"])
|
|
822
|
+
for m in lockfile.get_rule("house-style")["materializations"]]
|
|
823
|
+
|
|
824
|
+
res = boost("uninstall", "house-style", "--local", "-y", expect=1)
|
|
825
|
+
|
|
826
|
+
assert lockfile.get_rule("house-style") is not None
|
|
827
|
+
assert all(p.exists() for p in rows)
|
|
828
|
+
flat = " ".join((res.out + " " + res.err).split())
|
|
829
|
+
assert "user scope" in flat
|
|
830
|
+
assert "boost uninstall house-style" in flat
|
|
831
|
+
|
|
832
|
+
|
|
833
|
+
def test_uninstall_local_leaves_another_repos_rule_alone(boost, trio_tap, repo,
|
|
834
|
+
tmp_path):
|
|
835
|
+
other = tmp_path / "elsewhere"
|
|
836
|
+
(other / ".git").mkdir(parents=True)
|
|
837
|
+
# Hand-written, because the point is a row this repo must not touch: a
|
|
838
|
+
# real second install would need a second cwd and would prove no more.
|
|
839
|
+
lockfile.set_rule("theirs", {
|
|
840
|
+
"kind": "rule", "version": "1.0.0", "tap": "trio-tap",
|
|
841
|
+
"scope": "project", "base": str(other),
|
|
842
|
+
"materializations": [{"agent": "claude-code", "mode": "claude",
|
|
843
|
+
"path": str(other / "CLAUDE.local.md")}]})
|
|
844
|
+
(other / "CLAUDE.local.md").write_text("their rules\n", encoding="utf-8")
|
|
845
|
+
|
|
846
|
+
res = boost("uninstall", "theirs", "--local", "-y", expect=1)
|
|
847
|
+
|
|
848
|
+
assert lockfile.get_rule("theirs") is not None
|
|
849
|
+
assert (other / "CLAUDE.local.md").read_text(encoding="utf-8") == "their rules\n"
|
|
850
|
+
flat = " ".join((res.out + " " + res.err).split())
|
|
851
|
+
assert str(other) in flat
|
|
852
|
+
|
|
853
|
+
|
|
854
|
+
def test_uninstall_local_still_denies_a_name_nothing_installed(boost, tapped,
|
|
855
|
+
repo):
|
|
856
|
+
res = boost("uninstall", "nope", "--local", "-y", expect=1)
|
|
857
|
+
flat = " ".join((res.out + " " + res.err).split())
|
|
858
|
+
assert "nope is not installed in this project" in flat
|
|
859
|
+
|
|
860
|
+
|
|
742
861
|
# ── info on a project-scoped skill ───────────────────────────────────────
|
|
743
862
|
|
|
744
863
|
def test_info_project_skill_shows_its_identity_rows(boost, tapped, repo):
|