boost-skill-cli 1.2.121__tar.gz → 1.2.123__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.121/boost_skill_cli.egg-info → boost_skill_cli-1.2.123}/PKG-INFO +1 -1
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/commands/pkg.py +11 -1
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/commands/quality.py +9 -3
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/store.py +94 -5
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123/boost_skill_cli.egg-info}/PKG-INFO +1 -1
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_skill_cli.egg-info/SOURCES.txt +1 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/bmad-personas-delegate-outside-the-router.md +2 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/doctor-prescribes-sync-that-deletes-live-links.md +6 -4
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap.html +13 -45
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_cli_pkg.py +3 -2
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_cli_quality.py +36 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_store.py +2 -1
- boost_skill_cli-1.2.123/tests/unit/test_sync_lost_lock.py +226 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/.gitattributes +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/.gitignore +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/.lycheeignore +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/.vale/styles/boost/AIWriting.yml +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/.vale.ini +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/CLAUDE.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/DCO +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/GOVERNANCE.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/LICENSE +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/MAINTAINERS.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/MANIFEST.in +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/Makefile +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/README.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/SECURITY.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/SUPPORT.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/commands/quickstart.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/aihost.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/archive.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/bmad.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/bootstrap.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/browse.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/builtin.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/catalogbundle.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/cohort.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/complete.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/deps.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/discovery.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/hookhost.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/jsonstate.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/report.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/shards.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/typedvalue.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/data/rules/boost-first.mdc +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_langchain/__init__.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_langchain/_compat.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_langchain/graph.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_langchain/loader.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_langchain/py.typed +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_langchain/retriever.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/codecov.yml +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/adapters.html +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/bmad.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/carousel.html +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/chat.html +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/code-review.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/commands.html +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/commit-audit.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/demo.gif +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/demo.html +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/demo.tape +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/dependencies.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/eval-latest.json +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/eval.html +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/index.html +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/langchain.html +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/openssf-badge.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/BOOST-D27.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/a-new-shipped-card-always-404s-its-own-write-up-link.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/ai-backend-fanout.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-absorb-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-adapt-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-adapt-renders-every-sibling-of-a-flat-agents-dir-workflow-as.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-adapt-run-stats-edit-tag-export-reject-the-tap-name-qualifie.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-ai-degrade-note-blames-path-api-keys-regardless-of-cause-sev.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-attest-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-audit-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-bmad-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-browse-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-bundle-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-catalog-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-catalog-resolve-one-s-duplicate-name-hint-advertises-path-to.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-changelog-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-chat-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-clean-counts-failed-removals-as-cleaned-journals-the-inflate.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-cli-py-commands-summaries-and-parser-help-contradict-behavio.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-cohort-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-completions-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-config-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-config-policy-set-store-type-unchecked-values-consumers-cras.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-context-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-corrupt-settings-config-state-json-silently-read-as-empty-th.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-create-distill-infer-absorb-install-silently-replace-an-inst.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-create-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-declined-confirms-never-name-y-boost-assume-yes-snapshot-cle.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-deps-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-discover-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-distill-s-heuristic-merge-drops-repeated-fences-braces-writi.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-doctor-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-drift-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-dry-runs-disagree-with-the-real-run-compact-counts-bytes-it.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-edit-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-evolve-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-explain-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-export-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-export-o-cohort-create-and-profile-save-silently-overwrite-e.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-fingerprint-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-five-exit-70-crashes-on-bad-paths-data-catalog-export-serve.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-focus-profile-sideline-by-unlinking-without-recording-it-lis.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-git-operations-never-set-git-terminal-prompt-0-so-a-404-priv.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-health-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-hooks-remove-n-cannot-find-hooks-boost-itself-added-unknown.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-import-all-skips-the-injection-secret-scans-and-the-per-skil.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-import-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-index-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-info-stats-explain-render-a-different-smaller-shape-for-rule.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-install-dry-run-promises-agents-the-real-install-never-write.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-install-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-install-local-writes-empties-the-repo-s-mcp-json-silently-of.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-json-accepted-but-ignored-on-many-branches-cohort-config-pol.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-lint-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-log-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-log-simulate-changelog-headings-echo-the-raw-qualified-argum.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-mcp-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-mcp-register-s-boost-first-consent-names-only-the-registered.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-missing-json-on-doctor-test-health-changelog-trending-log-ho.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-name-miss-errors-unknown-tap-qualifier-unnamed-no-close-matc.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-onboard-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-out-table-clips-data-columns-to-an-assumed-80-columns-when-s.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-out-warn-defaults-to-stdout-infer-absorb-corrupt-skill-md-se.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-outdated-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-output-wrap-tokens-splits-punctuation-off-backtick-spans-ins.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-pinned-taps-silently-moved-to-head-by-update-re-clone-and-co.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-policy-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-preview-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-profile-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-project-scope-seams-uninstall-verify-list-info-reinstall-dis.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-protocol-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-pulse-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-quarantine-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-quarantine-pin-state-invisible-list-info-doctor-report-links.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-quickstart-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-recommend-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-reindex-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-reinstall-sync-repair-and-audit-resolve-by-name-tap-ignoring.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-replay-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-root-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-rules-workflows-reported-as-skills-uninstall-claims-a-store.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-run-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-schedule-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-search-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-simulate-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-singular-plural-misses-1-skills-1-issue-need-1-skill-pass-ac.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-six-count-flags-tap-chat-absorb-lint-changelog-hooks-skip-ut.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-skill-profile-name-slugging-is-inconsistent-distill-o-accept.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-snapshot-restore-replaces-the-lock-wholesale-orphaning-newer.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-stale-prose-after-shipped-changes-catalog-export-live-discov.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-stray-positionals-and-inapplicable-flags-silently-ignored-ac.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-sweep-positionals-json-lack-help-strings-and-no-command-help.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-sync-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-tag-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-tap-dry-run-is-silently-ignored-outside-catalog-spec-and-def.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-tap-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-taps-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-taps-outdated-decay-policy-snapshot-json-emit-display-string.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-test-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-trust-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-trust-verify-labels-a-manifest-tampered-after-signing-by-a-t.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-unpin-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-untap-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-update-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-verify-drift-say-nothing-installed-exit-0-and-doctor-says-lo.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-verify-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/audit-who-findings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/bare-boost-never-names-an-entry-point.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/because-that-was-not-the-reason.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/bm25-empty-tokenization-kills-catalog-fallback.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/bmad-done-contract-ignores-the-track.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/bmad-gemini-gets-claude-hook-output.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/bmad-roster-drifted-from-bmad-6-12.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/bmad-route-ignores-autopilot-state.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/bmad-router-one-keyword-decides-the-track.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/bmad-router-reads-each-prompt-alone.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/boost-first-rule.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/branch-current-gate.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/capability-policy-skips-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/catalog-categories-beyond-curated.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/cli-audit-2026-08-full-sweep.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/cli-command-audit.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/compact-answers-a-named-tap-with-a-global-all-clear.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/concurrent-rag-builds-delete-each-others-temp-index.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/corpus-refresh-updates-data-not-prose.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/corrupt-config-reads-as-ready-to-set-up.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/count-flags-that-silently-invert.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/delay-true-defeats-the-log-suppress.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/dense-kill-switch-has-no-reason-state.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/dense-no-key-guard-is-unreachable.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/dense-ready-but-embedder-cannot-run.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/dense-reindex-has-no-progress-or-durability.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/dense-reindex-reuses-whole-taps.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/dense-store-holds-every-vector-once-per-copy.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/err-multiline-hint-colours-across-the-newline.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/eval-corpus-counted-by-the-method-the-repo-disavows.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/eval-corpus-duplication-is-intra-tap-not-mirrors.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/eval-floor-calibration-stale-after-pin-refresh.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/eval-gate-scores-a-body-less-corpus.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/exemplar-graded-golden-set-runs-in-no-gate.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/explain-outline-has-no-cap.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/gate-parity-test-ignores-k-and-golden.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/gated-golden-set-has-zero-exemplars.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/gstack-tap-first-then-coexistence.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/info-deps-materialize-a-dir-they-then-reject.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/install-path-disambiguation.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/lighthouse-flips-on-byte-identical-input.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/lock-kept-links-it-had-just-removed.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/mcp-cannot-read-a-skill-before-installing.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/mcp-install-description-omits-antigravity.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/mcp-search-cost-overstated-on-keyless-machines.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/mcp-skip-list-absent-from-tool-descriptions.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/mutation-shards-rerun-full-set-every-push.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/near-identical-copies-still-eat-the-slots.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/openssf-silver.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/osps-baseline-levels.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/panel-fits-data-to-an-assumed-80-in-a-pipe.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/publish-the-keyword-index.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/published-shards-have-no-consumer.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/quickstart-drops-incompatible-shard-status.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/quickstart-manifest-error-drops-hint-and-misnames-cause.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/quickstart-says-ready-exit-0-after-every-tap-failed.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/quickstart-shard-download-invisible-in-preview-and-run.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/readme-81-command-table-lists-80-omits-quickstart.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/readme-hero-installs-a-name-no-starter-registry-ships.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/reclone-leaves-a-clone-on-head-when-it-cannot-reach-the-pin.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/recommend-recomputes-its-columns-per-row.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/refresh-strands-the-natural-set-baseline.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/reindex-reported-a-completeness-share-it-could-not-compute.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/relicence-apache-2.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/required-eval-gate-still-grades-by-name.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/roadmap-boards-advertise-python-39.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/search-caps-the-two-copyable-identifiers.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/search-drops-symbol-language-queries-silently.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/search-footer-not-fitted-to-the-pane-its-rows-were-fitted-to.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/search-footer-overflows-40-col-pane-gate-passes-by-luck.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/search-relevance-meter-is-constant-on-default-page.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/search-rows-use-term-width-so-piping-drops-the-tap-column.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/shard-refresh-skips-processed-commits.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/shard-runs-reembed-everything-weekly.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/shrink-the-published-index.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/stale-gate-sizes-in-readme-and-contributing.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/stale-tap-hint-dead-for-tap-only-installs.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/surface-dehyphenation-rationale-is-false.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/sweep-died-at-a-page-not-at-launch.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/table-fit-widths-floor-destroys-columns-and-still-overflows.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/taps-vouches-for-a-clone-that-is-not-there.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/tier3-ceiling-unreachable-at-default-n.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/typos-reported-as-boost-bugs.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/unreadable-tap-cache-healthy-doctor-crashing-heal.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/unwritable-agent-dir-has-no-remedy.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/vex-openvex-feed.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/weekly-vectors-had-no-ingestion-path.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/zip-strict-audit.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/security-design.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/semantic-search.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/verifying-releases.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/vex/meta.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/vex/openvex.json +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/evals/README.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/evals/__init__.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/evals/baseline.json +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/evals/metrics.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/evals/publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/examples/README.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/index.html +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/noxfile.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/pyproject.toml +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/add_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/build_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/build_vex.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/check_branch_current.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/check_dco.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/check_reproducible.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/eval_corpus.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/eval_tools.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/measure_near_duplicate_bound.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/measure_registry.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/normalize_sdist.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/page_budget.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/publish_eval_json.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/publish_shards.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/serve_docs.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/scripts/shard_plan.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/setup.cfg +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/sonar-project.properties +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/style/README.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/style/boost.css +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/style/boost.js +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/style/demo.html +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/conftest.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/eval/fixtures/claude_init_event.jsonl +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/eval/taps-scale.txt +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/eval/tool_calls.jsonl +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_bad_input_is_not_a_crash.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_bmad_all_hosts.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_bmad_personas_scope.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_cli_catalog.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_cli_hooks_gemini.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_cli_json_reports.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_cli_pane_width.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_cli_quickstart.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_cli_tap_pins.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_context_sees_an_unborn_branch.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_count_flags_reject_nonpositive.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_kind_conformance.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_recommend_because_is_true.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_reports_match_reality.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/langchain/conftest.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/langchain/test_graph.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/langchain/test_loader.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/langchain/test_retriever.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/data/bmad-skills-6.12.0.json +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_action_pin_lockstep.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_aihost.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_archive.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_bmad_core.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_boost_first_offer.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_bootstrap.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_bot_pr_dco.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_branch_current.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_browse.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_builtin.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_catalog_keyword_words.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_catalogbundle.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_check_dco.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_check_reproducible.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_clean_internal_cache.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_cli_update_shards.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_cohort.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_compact.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_complete.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_complete_rc_block.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_content_identity.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_count_flags_use_positive_int.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_crash_redaction.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_dense_boilerplate_cluster.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_dense_embed_dedupe.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_dense_entry_reuse.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_dense_entry_vectors.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_dense_progress.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_dense_quantized.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_dense_ready_order.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_dense_shard_real_schema.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_dense_status_cheap.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_dense_vector_dedupe.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_deps.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_discovery.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_distill_merge.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_doctor_output_polish.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_drift_hint.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_embed_truncated_response.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_eval_corpus.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_eval_grading.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_eval_tools.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_eval_tools_probe.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_gemini_agent_sanitize.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_gitutil_lfs.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_gitutil_sparse.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_gstack_coexistence.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_hook_settings_hosts.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_hookhost.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_install_permission_error.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_jsonstate.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_langchain_packaging.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_launcher_python_floor.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_link_ownership.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_mcp_read.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_measure_registry.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_near_duplicate_collapse.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_normalize_sdist.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_page_budget.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_rag_completeness.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_rag_fastpath.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_registry_control_chars.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_registry_parallel.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_report.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_rerank_cache.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_retrieve_any_near_duplicates.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_schedule_plist.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_serve_docs.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_shard_plan.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_shards.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_shards_incremental.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_shards_ingest.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_shards_matrix.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_smoke_covers_every_command.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_store_materialize.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_sync_blocked_links.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_tap_pins.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_typedvalue.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_version_tags.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_vex.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_visual_harness_capture.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_visual_harness_flags.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_workflow_concurrency_groups.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_workflow_push_has_credentials.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/visual/package-lock.json +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.2.121 → boost_skill_cli-1.2.123}/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.123'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 2, 123)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -619,6 +619,7 @@ _PLAN_LABELS = [
|
|
|
619
619
|
("blocked_links", "agent links blocked by a foreign file"),
|
|
620
620
|
("stale_links", "stale links"),
|
|
621
621
|
("orphaned_store", "orphaned store dirs"),
|
|
622
|
+
("unrecorded_store", "store dirs the lock file has lost"),
|
|
622
623
|
("missing_materializations", "missing rule/workflow files"),
|
|
623
624
|
("out_of_scope_links", "linked outside declared scope"),
|
|
624
625
|
]
|
|
@@ -711,17 +712,26 @@ def cmd_sync(argv: list[str]) -> int:
|
|
|
711
712
|
journal.log("prune", name)
|
|
712
713
|
pruned.append(name)
|
|
713
714
|
left = [n for n in orphans if n not in pruned]
|
|
715
|
+
# Re-recorded by sync_apply when the lock was merely missing; still here
|
|
716
|
+
# only when it is corrupt or in another schema, which sync never overwrites.
|
|
717
|
+
unrecorded = [n for n in plan["unrecorded_store"]
|
|
718
|
+
if lockfile.get_skill(n) is None]
|
|
714
719
|
blocked = plan["blocked_links"]
|
|
715
720
|
if args.json:
|
|
716
721
|
# `sync --diff --json` above is indent=2; this printed one unindented
|
|
717
722
|
# line, so the two `--json` shapes of the same command disagreed on
|
|
718
723
|
# style for no reason tied to their content.
|
|
719
724
|
print(json.dumps({"actions": actions, "pruned": pruned,
|
|
720
|
-
"orphaned_store": left, "
|
|
725
|
+
"orphaned_store": left, "unrecorded_store": unrecorded,
|
|
726
|
+
"out_of_scope_links": oos,
|
|
721
727
|
"blocked_links": blocked}, indent=2))
|
|
722
728
|
return 0
|
|
723
729
|
for a in actions:
|
|
724
730
|
out.ok(a)
|
|
731
|
+
if unrecorded:
|
|
732
|
+
out.warn("%s the lock file cannot record, left as they are: %s — "
|
|
733
|
+
"restore the lock with `boost replay`"
|
|
734
|
+
% (_plural(len(unrecorded), "store dir"), ", ".join(unrecorded)))
|
|
725
735
|
for name in pruned:
|
|
726
736
|
out.ok("pruned %s" % _tilde(store.skill_store_dir(name)))
|
|
727
737
|
if left:
|
|
@@ -447,8 +447,8 @@ def cmd_doctor(argv):
|
|
|
447
447
|
if store.has_content():
|
|
448
448
|
n = sum(1 for c in paths.store_dir().iterdir()
|
|
449
449
|
if c.is_dir() and not c.name.startswith("."))
|
|
450
|
-
bad("lockfile", "lock file missing — %d store dir%s unrecorded,
|
|
451
|
-
% (n, _s(n)))
|
|
450
|
+
bad("lockfile", "lock file missing — %d store dir%s unrecorded, "
|
|
451
|
+
"run `boost sync` to re-record %s" % (n, _s(n), "it" if n == 1 else "them"))
|
|
452
452
|
lock_ok = False
|
|
453
453
|
else:
|
|
454
454
|
rep.note("lockfile", "no lock file yet — nothing installed")
|
|
@@ -613,7 +613,10 @@ def cmd_doctor(argv):
|
|
|
613
613
|
orphans = [c.name for c in sorted(root.iterdir())
|
|
614
614
|
if c.is_dir() and not c.name.startswith(".") and c.name not in skills
|
|
615
615
|
] if root.is_dir() else []
|
|
616
|
-
|
|
616
|
+
# Only while the lock can vouch. Without one every store dir reads as an
|
|
617
|
+
# orphan, the lock line above already names the state and its remedy, and
|
|
618
|
+
# a second "run `boost sync`" line counted the same fault twice.
|
|
619
|
+
if orphans and store.lock_vouches():
|
|
617
620
|
bad("orphans", "%d orphaned store dir%s (%s) — run `boost sync`"
|
|
618
621
|
% (len(orphans), _s(len(orphans)), ", ".join(orphans[:5])))
|
|
619
622
|
|
|
@@ -1104,6 +1107,9 @@ def cmd_heal(argv):
|
|
|
1104
1107
|
for name in plan["missing_store"]:
|
|
1105
1108
|
out.info("would restore %s from its tap (or drop it from the lock)" % name)
|
|
1106
1109
|
actions.append("restore %s" % name)
|
|
1110
|
+
for name in plan["unrecorded_store"]:
|
|
1111
|
+
out.info("would re-record %s, which the lock file has lost" % name)
|
|
1112
|
+
actions.append("re-record %s" % name)
|
|
1107
1113
|
else:
|
|
1108
1114
|
for msg in store.sync_apply(plan):
|
|
1109
1115
|
out.ok(msg.replace(str(paths.home()), "~"))
|
|
@@ -1680,6 +1680,21 @@ def restore_preserve_newer_lock_sections(
|
|
|
1680
1680
|
return kept
|
|
1681
1681
|
|
|
1682
1682
|
|
|
1683
|
+
def lock_vouches() -> bool:
|
|
1684
|
+
"""Whether the lock file can say which store dirs and links are boost's.
|
|
1685
|
+
|
|
1686
|
+
It can when it parses, and when it is missing over an empty store — that
|
|
1687
|
+
is a fresh install with nothing to disown. It cannot when it is missing
|
|
1688
|
+
over a populated store, corrupt, or written in another schema:
|
|
1689
|
+
:func:`lockfile.installed` collapses all three into an empty record, and
|
|
1690
|
+
reading that as "nothing is installed" turned `boost sync` — the command
|
|
1691
|
+
`boost doctor` prescribes for exactly this state — into an uninstaller that
|
|
1692
|
+
removed every live link of an intact install with green ticks and exit 0.
|
|
1693
|
+
"""
|
|
1694
|
+
integ = lockfile.check()
|
|
1695
|
+
return integ.ok or (integ.problem == "missing" and not has_content())
|
|
1696
|
+
|
|
1697
|
+
|
|
1683
1698
|
def sync_plan() -> dict[str, list]:
|
|
1684
1699
|
"""Compare lock file <-> store <-> agent symlinks.
|
|
1685
1700
|
|
|
@@ -1691,6 +1706,9 @@ def sync_plan() -> dict[str, list]:
|
|
|
1691
1706
|
symlink occupies the link path — sync will not clobber it
|
|
1692
1707
|
stale_links: paths in agent dirs that are broken/unmanaged symlinks
|
|
1693
1708
|
orphaned_store: store dirs not present in the lock file
|
|
1709
|
+
unrecorded_store: the same, while the lock cannot vouch for anything
|
|
1710
|
+
(:func:`lock_vouches`) — never pruned, re-recorded by
|
|
1711
|
+
:func:`sync_apply` when the lock is merely missing
|
|
1694
1712
|
out_of_scope_links: (skill, agent) pairs linked outside a declared
|
|
1695
1713
|
``--agent`` narrowing — reported, never auto-removed
|
|
1696
1714
|
|
|
@@ -1704,9 +1722,11 @@ def sync_plan() -> dict[str, list]:
|
|
|
1704
1722
|
as a directory: a closed loop with no exit.
|
|
1705
1723
|
"""
|
|
1706
1724
|
lock = lockfile.installed()
|
|
1725
|
+
vouches = lock_vouches()
|
|
1707
1726
|
plan: dict[str, list] = {"missing_store": [], "missing_links": [],
|
|
1708
1727
|
"blocked_links": [], "stale_links": [], "orphaned_store": [],
|
|
1709
|
-
"
|
|
1728
|
+
"unrecorded_store": [], "missing_materializations": [],
|
|
1729
|
+
"out_of_scope_links": []}
|
|
1710
1730
|
for name, entry in lock.items():
|
|
1711
1731
|
sdir = skill_store_dir(name)
|
|
1712
1732
|
# A directory with no SKILL.md counts as missing, not as healthy. The
|
|
@@ -1780,9 +1800,11 @@ def sync_plan() -> dict[str, list]:
|
|
|
1780
1800
|
plan["out_of_scope_links"].append((name, agent))
|
|
1781
1801
|
store_root = paths.store_dir()
|
|
1782
1802
|
if store_root.is_dir():
|
|
1783
|
-
for child in store_root.iterdir():
|
|
1784
|
-
if child.is_dir() and child.name
|
|
1785
|
-
|
|
1803
|
+
for child in sorted(store_root.iterdir()):
|
|
1804
|
+
if (child.is_dir() and not child.name.startswith(".")
|
|
1805
|
+
and child.name not in lock):
|
|
1806
|
+
plan["orphaned_store" if vouches else "unrecorded_store"].append(
|
|
1807
|
+
child.name)
|
|
1786
1808
|
for adir in agents.enabled_agents().values():
|
|
1787
1809
|
if not adir.is_dir():
|
|
1788
1810
|
continue
|
|
@@ -1790,8 +1812,13 @@ def sync_plan() -> dict[str, list]:
|
|
|
1790
1812
|
# Ownership first, for broken links too: the old test short-circuited
|
|
1791
1813
|
# on `not link.exists()`, so any dangling symlink a user happened to
|
|
1792
1814
|
# keep in ~/.claude/skills was swept up by `boost sync`.
|
|
1815
|
+
#
|
|
1816
|
+
# "Not in the lock" means "not installed" only while the lock can
|
|
1817
|
+
# vouch. Without that guard a missing lock made every live link
|
|
1818
|
+
# into an intact store look stale, and sync removed them all.
|
|
1793
1819
|
if (link.is_symlink() and points_into_store(link)
|
|
1794
|
-
and (not link.exists()
|
|
1820
|
+
and (not link.exists()
|
|
1821
|
+
or (vouches and link.name not in lock))):
|
|
1795
1822
|
plan["stale_links"].append(str(link))
|
|
1796
1823
|
# Rules/workflows don't live in the store — they materialize into agent dirs.
|
|
1797
1824
|
# A materialization whose file (or CLAUDE.md block) is gone can be repaired
|
|
@@ -1893,9 +1920,71 @@ def _pinned_repair_blocked(entry: dict, source_sha: str | None) -> bool:
|
|
|
1893
1920
|
return source_sha is None or source_sha != entry.get("sha256")
|
|
1894
1921
|
|
|
1895
1922
|
|
|
1923
|
+
def recover_unrecorded(name: str) -> str | None:
|
|
1924
|
+
"""Re-record one store dir the lock has lost; return how, or None.
|
|
1925
|
+
|
|
1926
|
+
Only ever called while the lock file is missing over a populated store, so
|
|
1927
|
+
writing a record cannot overwrite a newer or merely unreadable lock. The
|
|
1928
|
+
store copy is authoritative and is never replaced: re-installing would
|
|
1929
|
+
have been the obvious repair, and it silently discards any edits made to
|
|
1930
|
+
the store copy.
|
|
1931
|
+
|
|
1932
|
+
A dir whose content is byte-identical to exactly one tapped source is
|
|
1933
|
+
recorded as installed from that tap, the record a fresh install would have
|
|
1934
|
+
written. Anything else — edited, or from a tap no longer tapped — is
|
|
1935
|
+
recorded as a local skill whose source is the store dir itself, so nothing
|
|
1936
|
+
is lost and nothing is left unrecorded: a dir left out would read as an
|
|
1937
|
+
orphan the moment this pass creates a lock, and the next sync would remove
|
|
1938
|
+
its links, the defect this function exists to close.
|
|
1939
|
+
"""
|
|
1940
|
+
sdir = skill_store_dir(name)
|
|
1941
|
+
if not (sdir / "SKILL.md").is_file():
|
|
1942
|
+
return None
|
|
1943
|
+
from . import catalog, gitutil
|
|
1944
|
+
have = util.sha256_dir(sdir)
|
|
1945
|
+
matches = [e for e in catalog.find(name)
|
|
1946
|
+
if e.get("kind", "skill") == "skill"
|
|
1947
|
+
and _skill_source_sha(e) == have]
|
|
1948
|
+
linked = linked_agents(name)
|
|
1949
|
+
linking = list(agents.linking_agents())
|
|
1950
|
+
# Record what is on disk: a skill linked into fewer agents than are enabled
|
|
1951
|
+
# was narrowed, and recording no narrowing would have the next sync link it
|
|
1952
|
+
# everywhere behind the user's back.
|
|
1953
|
+
narrowed = sorted(linked) if linked and set(linked) != set(linking) else None
|
|
1954
|
+
now = util.now_iso()
|
|
1955
|
+
record: dict[str, object]
|
|
1956
|
+
if len(matches) == 1:
|
|
1957
|
+
cat = matches[0]
|
|
1958
|
+
tap = registry.get(cat["tap"])
|
|
1959
|
+
record = {"version": cat.get("version", "0.0.0"), "tap": cat["tap"],
|
|
1960
|
+
"source_dir": cat.get("rel_dir", "."),
|
|
1961
|
+
"commit": gitutil.head_commit(tap.path)}
|
|
1962
|
+
how = "from %s" % cat["tap"]
|
|
1963
|
+
else:
|
|
1964
|
+
# The shape `import_local` writes for a skill with no tap behind it.
|
|
1965
|
+
record = {"version": "0.0.0", "tap": "local", "source_dir": str(sdir),
|
|
1966
|
+
"commit": ""}
|
|
1967
|
+
how = ("as a local skill (its content matches %s tapped source; "
|
|
1968
|
+
"`boost reinstall %s` replaces it with a tap's copy)"
|
|
1969
|
+
% ("no" if not matches else "more than one", name))
|
|
1970
|
+
record.update({"sha256": have, "installed_at": now, "updated_at": now,
|
|
1971
|
+
"pinned": False, "quarantined": False, "agents": linked,
|
|
1972
|
+
"only_agents": narrowed, "tags": []})
|
|
1973
|
+
lockfile.set_skill(name, record)
|
|
1974
|
+
journal.log("recover", name, how=record["tap"])
|
|
1975
|
+
return "re-recorded %s %s" % (name, how)
|
|
1976
|
+
|
|
1977
|
+
|
|
1896
1978
|
def sync_apply(plan: dict[str, list]) -> list[str]:
|
|
1897
1979
|
"""Fix what sync_plan found. Returns human-readable actions taken."""
|
|
1898
1980
|
actions = []
|
|
1981
|
+
# First, so every re-recorded skill is in the lock before anything else
|
|
1982
|
+
# runs; and only when the lock is *missing* — a corrupt or other-schema
|
|
1983
|
+
# lock is left for `boost replay`, never overwritten.
|
|
1984
|
+
if plan.get("unrecorded_store") and lockfile.check().problem == "missing":
|
|
1985
|
+
for name in plan["unrecorded_store"]:
|
|
1986
|
+
how = recover_unrecorded(name)
|
|
1987
|
+
actions.append(how or "left %s unrecorded (no SKILL.md to record)" % name)
|
|
1899
1988
|
for name, agent in plan["missing_links"]:
|
|
1900
1989
|
res = link_agents(name, only=[agent])
|
|
1901
1990
|
if agent in res.linked:
|
|
@@ -1018,6 +1018,7 @@ tests/unit/test_staleness.py
|
|
|
1018
1018
|
tests/unit/test_store.py
|
|
1019
1019
|
tests/unit/test_store_materialize.py
|
|
1020
1020
|
tests/unit/test_sync_blocked_links.py
|
|
1021
|
+
tests/unit/test_sync_lost_lock.py
|
|
1021
1022
|
tests/unit/test_sync_repairs_gutted_skill.py
|
|
1022
1023
|
tests/unit/test_tap_pins.py
|
|
1023
1024
|
tests/unit/test_token_parity.py
|
|
@@ -79,3 +79,5 @@ description lacks <code>proactively</code> in any case and contains its persona'
|
|
|
79
79
|
and no unit test can observe delegation, so the headless run is the acceptance check. Only re-running
|
|
80
80
|
<code>boost bmad on</code> rewrites unedited persona files (<code>boost_cli/core/bmad.py:672</code>), so the
|
|
81
81
|
release note must tell users to re-run it.
|
|
82
|
+
|
|
83
|
+
<b>Measured after #865 shipped, and it does not show the defect.</b> The headless run above, 12 router-trivial prompts per arm (the 3 fixtures plus 9 trivial prompts from one real history), counted <code>bmad-*</code> spawns by the main agent: <b>0/12 with no personas, 0/12 with the shipped <code>Use PROACTIVELY</code> descriptions, 0/12 with the fixed ones</b>. At 0/12 the 95% Wilson upper bound is 24%, so this rules out a common spawn, not a rare one. The shipped arm spawned no more than the no-persona arm, which is this card's own stop condition: the fix is harmless, and there was no delegation for it to remove. Two limits. Each run stopped after 4 main-agent tool calls, and 7 of the 12 shipped-arm runs hit that cap, so a spawn later in a long session would not be counted. And the fourth arm, routed prompts with the real hook, measured nothing: in the nested sandboxed session the hooks failed with <code>EPERM</code>, all 6 runs ended in about a second, and no banner reached the context. So whether the fixed wording still delegates when a banner names the persona is <b>not established</b>; re-run that arm outside a sandbox. Cost: $6.20 over the runs that reported one, a floor, since runs stopped early report none.
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
---
|
|
2
2
|
id: doctor-prescribes-sync-that-deletes-live-links
|
|
3
3
|
board: code
|
|
4
|
-
section:
|
|
5
|
-
status:
|
|
4
|
+
section: health
|
|
5
|
+
status: shipped
|
|
6
6
|
category: Onboarding · Bug
|
|
7
7
|
complexity: L
|
|
8
8
|
impact: High
|
|
9
9
|
wow: 4
|
|
10
10
|
note: store.sync_plan decides staleness with link.name not in lock where lock = lockfile.in…
|
|
11
11
|
order: 206
|
|
12
|
-
owner:
|
|
13
|
-
pr:
|
|
12
|
+
owner: loop/sync-keeps-live-links
|
|
13
|
+
pr: 869
|
|
14
14
|
title: A missing or corrupt lock file makes doctor prescribe <code>boost sync</code>/<code>boost heal</code>, and both delete every live agent symlink of an intact install
|
|
15
15
|
---
|
|
16
16
|
<b>Measured.</b> With the lock file deleted from an otherwise intact install, <code>boost doctor</code> exits 1 and prescribes <code>boost sync</code> on two separate lines; running that prescription removes 4 of 4 live, boost-owned, store-resolving agent symlinks (claude-code, windsurf, cursor, antigravity) with four green ✓ marks, no confirmation prompt of any kind, and exit code 0 — because <code>store.sync_plan</code> (store.py:1785-1787) tests <code>link.name not in lock</code> against <code>lockfile.installed()</code>, which collapses a missing lock into an empty skeleton (lockfile.py:44-45), and <code>sync_apply</code>'s unlink loop (store.py:1895) has no confirm while cmd_sync's only two confirms (pkg.py:694, 704) are both <code>--prune</code>-gated.
|
|
@@ -46,3 +46,5 @@ NOT A DUPLICATE — I re-checked all 432 items independently rather than trustin
|
|
|
46
46
|
<b>Why it is worth doing.</b> This is the recovery surface behaving as a destroyer at the exact moment a user reaches for it. The lock file is the one file with no atomic-write protection story a new user knows about (an interrupted install, a full disk, a bad restore), the skill on disk and its four agent links are all still correct, and the single command doctor prints — twice — silently uninstalls it from Claude Code, Cursor, Windsurf and Antigravity, exits 0, and calls the result healthy two commands later. The one command that actually recovers (<code>boost install <name></code>) is never mentioned, and the corrupt-lock alternative (<code>boost replay</code>) is empty on any machine with a single install — i.e.
|
|
47
47
|
|
|
48
48
|
<em>Found by an automated audit of retrieval/eval quality, the search & browse surfaces, and first-run onboarding; every finding was then re-measured from scratch by an independent adversarial verifier whose instruction was to refute it. Verdict: <b>CORRECTED</b>. No fix is prescribed here — the measurement is the contribution.</em>
|
|
49
|
+
|
|
50
|
+
<b>Fixed.</b> The lock is authoritative only while it can vouch (<code>store.lock_vouches</code>): a missing lock over a populated store, a corrupt one or one in another schema cannot, and then nothing it lacks is a stale link or an orphan — the store dirs are reported as <code>unrecorded_store</code>, which <code>--prune</code> never touches. A merely <em>missing</em> lock is rebuilt by <code>boost sync</code> from what is on disk: a dir byte-identical to exactly one tapped source is re-recorded from that tap, anything else as a local skill whose source is the store copy (reinstalling was the obvious repair, and it silently discards edits), and a narrowed install keeps its narrowing. A corrupt lock is never overwritten; sync leaves the links alone and points at <code>boost replay</code>. Re-running the reproduction above: sync prints <code>re-recorded brainstorming from …</code> and all four links survive.
|
|
@@ -132,7 +132,7 @@
|
|
|
132
132
|
<!-- ROADMAP:stats -->
|
|
133
133
|
<div class="stat"><b>20</b><span>Shipped</span></div>
|
|
134
134
|
<div class="stat"><b>1</b><span>Next up</span></div>
|
|
135
|
-
<div class="stat"><b>
|
|
135
|
+
<div class="stat"><b>53</b><span>Planned</span></div>
|
|
136
136
|
<div class="stat"><b>468</b><span>Loop finds</span></div>
|
|
137
137
|
<!-- /ROADMAP:stats -->
|
|
138
138
|
</div>
|
|
@@ -1293,50 +1293,6 @@ PRIOR DISCLOSURE (the finder declared it, and I confirmed it): docs/roadmap/item
|
|
|
1293
1293
|
</div>
|
|
1294
1294
|
</article>
|
|
1295
1295
|
|
|
1296
|
-
<article class="cap rcard" id="doctor-prescribes-sync-that-deletes-live-links">
|
|
1297
|
-
<div class="head"><span class="pill planned">Planned</span><span class="cat">Onboarding · Bug</span></div>
|
|
1298
|
-
<h3>A missing or corrupt lock file makes doctor prescribe <code>boost sync</code>/<code>boost heal</code>, and both delete every live agent symlink of an intact install</h3>
|
|
1299
|
-
<p><b>Measured.</b> With the lock file deleted from an otherwise intact install, <code>boost doctor</code> exits 1 and prescribes <code>boost sync</code> on two separate lines; running that prescription removes 4 of 4 live, boost-owned, store-resolving agent symlinks (claude-code, windsurf, cursor, antigravity) with four green ✓ marks, no confirmation prompt of any kind, and exit code 0 — because <code>store.sync_plan</code> (store.py:1785-1787) tests <code>link.name not in lock</code> against <code>lockfile.installed()</code>, which collapses a missing lock into an empty skeleton (lockfile.py:44-45), and <code>sync_apply</code>'s unlink loop (store.py:1895) has no confirm while cmd_sync's only two confirms (pkg.py:694, 704) are both <code>--prune</code>-gated.
|
|
1300
|
-
|
|
1301
|
-
<b>Reproduce it.</b>
|
|
1302
|
-
|
|
1303
|
-
<code>cd <repo> || exit 1</code><br>
|
|
1304
|
-
<code>export HOME=$TMPDIR/audit-doctor-verify1; export BOOST_HOME=$HOME/.boost; mkdir -p "$HOME"</code><br>
|
|
1305
|
-
<code>python3 tests/make_fixture.py $TMPDIR/audit-doctor-fix1 >/dev/null</code><br>
|
|
1306
|
-
<code>./boost tap $TMPDIR/audit-doctor-fix1 >/dev/null 2>&1</code><br>
|
|
1307
|
-
<code>BOOST_ASSUME_YES=1 ./boost install brainstorming >/dev/null 2>&1</code><br>
|
|
1308
|
-
<code>ls -l $HOME/.claude/skills/ # link present and resolving</code><br>
|
|
1309
|
-
<code>rm $HOME/.agents/skills/.skill-lock.json</code><br>
|
|
1310
|
-
<code>./boost doctor; echo "DOCTOR_EXIT=$?" # prescribes `boost sync` twice</code><br>
|
|
1311
|
-
<code>./boost sync; echo "SYNC_EXIT=$?" # removes all 4 live links, exit 0, no prompt</code><br>
|
|
1312
|
-
<code>ls -A $HOME/.claude/skills/ $HOME/.cursor/skills/ $HOME/.windsurf/skills/ $HOME/.gemini/antigravity-cli/skills/</code><br>
|
|
1313
|
-
…
|
|
1314
|
-
|
|
1315
|
-
<b>What adversarial verification corrected.</b> This card's numbers are the re-measured ones, not the ones first reported.
|
|
1316
|
-
|
|
1317
|
-
The defect is real and the mechanism is exactly as described. Five corrections, two of them citation drift and three substantive enough that a card must not inherit them:
|
|
1318
|
-
|
|
1319
|
-
1. CITATION (minor). <code>store.py:1784-1787</code> — line 1784 is a comment (<code># keep in ~/.claude/skills was swept up by \</code>boost sync\<code>.</code>). The predicate is at <b>1785-1786</b> and <code>plan["stale_links"].append(str(link))</code> at <b>1787</b>. Cite <b>store.py:1785-1787</b>. (store.py:1684 docstring, store.py:1895, lockfile.py:44-45, lockfile.py:226-228, pkg.py:694 and pkg.py:704 are all EXACT as stated.)
|
|
1320
|
-
|
|
1321
|
-
2. CITATION (minor). <code>read()</code> returns the skeleton for corrupt at <b>lockfile.py:54</b>, not 53. Line 52 is a comment, line 53 is <code>_preserve_corrupt(p)</code>, line 54 is <code>return _skeleton()</code>. Cite <b>lockfile.py:53-54</b> (or 50-54 for the whole except block).
|
|
1322
|
-
|
|
1323
|
-
3. SUBSTANTIVE — the root-cause story in <code>why_it_matters</code> is wrong. It claims the lock file is "the one file with no atomic-write protection story ... (an interrupted install, a full disk, a bad restore)". The lock file <b>is</b> written atomically: <code>lockfile.write</code> ends at <code>lockfile.py:160</code> with <code>util.atomic_write_text(...)</code>, which writes to a same-directory temp file, flushes, fsyncs and <code>os.replace</code>s (util.py:123-135, docstring names the lock file explicitly), and the roadmap card <code>docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md</code> is <code>status: shipped</code>, <code>pr: 65</code>.
|
|
1324
|
-
|
|
1325
|
-
<b>What is NOT established.</b> Recorded because a card that overstates its own evidence is worse than no card.
|
|
1326
|
-
|
|
1327
|
-
NOT A DUPLICATE — I re-checked all 432 items independently rather than trusting the finder's list. - <code>audit-verify-drift-say-nothing-installed-exit-0-and-doctor-says-lo.md</code> (shipped, PR #674) is the closest and is the direct predecessor, not a duplicate: read in full, it is explicitly scoped to REPORTING in <code>cmd_verify</code>/<code>cmd_drift</code>/<code>cmd_doctor</code>, and it is the card that INTRODUCED the exact wording measured here ("! lock file missing — N store dirs unrecorded, run <code>boost sync</code>"). Grep confirms <code>lockfile.check()</code>/<code>store.has_content()</code> appear ONLY in <code>quality.py:442,447</code> and <code>_common.py:57,61</code> — never in <code>store.py</code>. The repair engine was never converted. - <code>sync-deletes-unowned-broken-symlinks.md</code> (PR #273) and <code>heal-deleted-links-it-never-made.md</code> (PR #459) both concern ownership of BROKEN/foreign links; the links here are live, owned, and resolve. Sharpest near-miss evidence: the heal card's own body says ownership must be read from the link "because the two moments a dangling link is most likely to exist — a skill uninstalled mid-sweep, <b>a lock file that has gone missing</b> — are exactly the moments the lock cannot answer", then applies that reasoning only to the <code>points_into_store</code> half of the predicate, leaving <code>link.name not in lock</code> still consulting the lock. - <code>audit-focus-profile-sideline-...md</code> (PR #741) is the inverse direction — sync RELINKS via <code>missing_links</code>, undoing a sideline.
|
|
1328
|
-
|
|
1329
|
-
<b>Why it is worth doing.</b> This is the recovery surface behaving as a destroyer at the exact moment a user reaches for it. The lock file is the one file with no atomic-write protection story a new user knows about (an interrupted install, a full disk, a bad restore), the skill on disk and its four agent links are all still correct, and the single command doctor prints — twice — silently uninstalls it from Claude Code, Cursor, Windsurf and Antigravity, exits 0, and calls the result healthy two commands later. The one command that actually recovers (<code>boost install <name></code>) is never mentioned, and the corrupt-lock alternative (<code>boost replay</code>) is empty on any machine with a single install — i.e.
|
|
1330
|
-
|
|
1331
|
-
<em>Found by an automated audit of retrieval/eval quality, the search & browse surfaces, and first-run onboarding; every finding was then re-measured from scratch by an independent adversarial verifier whose instruction was to refute it. Verdict: <b>CORRECTED</b>. No fix is prescribed here — the measurement is the contribution.</em></p>
|
|
1332
|
-
<div class="meta">
|
|
1333
|
-
<span class="m">Complexity <b>L</b></span>
|
|
1334
|
-
<span class="m hi">Impact <b>High</b></span>
|
|
1335
|
-
<span class="m">Wow <b class="wow">★★★★</b></span>
|
|
1336
|
-
<span class="m">store.sync_plan decides staleness with link.name not in lock where lock = lockfile.in…</span>
|
|
1337
|
-
</div>
|
|
1338
|
-
</article>
|
|
1339
|
-
|
|
1340
1296
|
<article class="cap rcard" id="err-multiline-hint-colours-across-the-newline">
|
|
1341
1297
|
<div class="head"><span class="pill planned">Planned</span><span class="cat">UX · Bug</span></div>
|
|
1342
1298
|
<h3><code>out.err</code>'s multi-line hint is coloured as one span, so line 1 ends with no RESET and lines 2+ carry no start code</h3>
|
|
@@ -4545,6 +4501,18 @@ rather than leaving <code>doctor</code> as the only command that knows.</p>
|
|
|
4545
4501
|
</div>
|
|
4546
4502
|
</article>
|
|
4547
4503
|
|
|
4504
|
+
<article class="cap rcard" id="doctor-prescribes-sync-that-deletes-live-links">
|
|
4505
|
+
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Onboarding · Bug</span></div>
|
|
4506
|
+
<h3>A missing or corrupt lock file makes doctor prescribe <code>boost sync</code>/<code>boost heal</code>, and both delete every live agent symlink of an intact install</h3>
|
|
4507
|
+
<p class="cardbody"><a class="writeup" href="https://github.com/jonnyeclectic/boost/blob/main/docs/roadmap/items/doctor-prescribes-sync-that-deletes-live-links.md">Write-up · doctor-prescribes-sync-that-deletes-live-links.md</a></p>
|
|
4508
|
+
<div class="meta">
|
|
4509
|
+
<span class="m">Complexity <b>L</b></span>
|
|
4510
|
+
<span class="m hi">Impact <b>High</b></span>
|
|
4511
|
+
<span class="m">Wow <b class="wow">★★★★</b></span>
|
|
4512
|
+
<span class="m">store.sync_plan decides staleness with link.name not in lock where lock = lockfile.in…</span>
|
|
4513
|
+
</div>
|
|
4514
|
+
</article>
|
|
4515
|
+
|
|
4548
4516
|
<article class="cap rcard" id="audit-import-all-skips-the-injection-secret-scans-and-the-per-skil">
|
|
4549
4517
|
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Safety · Bug</span></div>
|
|
4550
4518
|
<h3>import <code>--all</code> skips the injection/secret scans and the per-skill report single import runs</h3>
|
|
@@ -1609,12 +1609,13 @@ class TestSyncJson:
|
|
|
1609
1609
|
plan = json.loads(boost("sync", "--diff", "--json").out)
|
|
1610
1610
|
assert plan == {"missing_store": [], "missing_links": [],
|
|
1611
1611
|
"blocked_links": [], "stale_links": [],
|
|
1612
|
-
"orphaned_store": [],
|
|
1612
|
+
"orphaned_store": [], "unrecorded_store": [],
|
|
1613
1613
|
"missing_materializations": [], "out_of_scope_links": [],
|
|
1614
1614
|
"project": {"missing": [], "orphaned": []}}
|
|
1615
1615
|
data = json.loads(boost("sync", "--json").out)
|
|
1616
1616
|
assert data == {"actions": [], "pruned": [], "orphaned_store": [],
|
|
1617
|
-
"
|
|
1617
|
+
"unrecorded_store": [], "out_of_scope_links": [],
|
|
1618
|
+
"blocked_links": []}
|
|
1618
1619
|
|
|
1619
1620
|
def test_a_narrowing_reinstall_is_reported_and_pruned_only_on_request(
|
|
1620
1621
|
self, boost, installed):
|
|
@@ -181,6 +181,42 @@ class TestDoctor:
|
|
|
181
181
|
assert "lock file missing — 1 store dir unrecorded, run `boost sync`" in r.out
|
|
182
182
|
assert "lock file integrity OK" not in r.out
|
|
183
183
|
|
|
184
|
+
def test_following_the_missing_lock_prescription_repairs_not_uninstalls(
|
|
185
|
+
self, boost, installed):
|
|
186
|
+
"""The prescription used to be an uninstaller: `boost sync` removed
|
|
187
|
+
every live agent link with green ticks and exit 0. It must now be the
|
|
188
|
+
repair doctor promises, and doctor must say so once, not twice."""
|
|
189
|
+
links = [p for p in (paths.home() / d / "brainstorming" for d in (
|
|
190
|
+
".claude/skills", ".cursor/skills", ".windsurf/skills",
|
|
191
|
+
".gemini/antigravity-cli/skills")) if p.is_symlink()]
|
|
192
|
+
assert len(links) == 4
|
|
193
|
+
paths.lockfile_path().unlink()
|
|
194
|
+
r = boost("doctor", expect=1)
|
|
195
|
+
assert "run `boost sync` to re-record it" in r.out
|
|
196
|
+
assert "orphaned store dir" not in r.out
|
|
197
|
+
r = boost("sync")
|
|
198
|
+
assert "re-recorded brainstorming from" in r.out
|
|
199
|
+
assert "removed stale link" not in r.out
|
|
200
|
+
assert all(p.is_symlink() and p.exists() for p in links)
|
|
201
|
+
r = boost("doctor")
|
|
202
|
+
assert "lock file parses (v3)" in r.out
|
|
203
|
+
|
|
204
|
+
def test_a_corrupt_lock_leaves_sync_non_destructive(self, boost, installed):
|
|
205
|
+
link = paths.home() / ".claude/skills" / "brainstorming"
|
|
206
|
+
paths.lockfile_path().write_text("{oops", encoding="utf-8")
|
|
207
|
+
r = boost("sync")
|
|
208
|
+
assert "removed stale link" not in r.out
|
|
209
|
+
assert "restore the lock with `boost replay`" in r.out + r.err
|
|
210
|
+
assert link.is_symlink() and link.exists()
|
|
211
|
+
r = boost("doctor", expect=1)
|
|
212
|
+
assert "orphaned store dir" not in r.out
|
|
213
|
+
|
|
214
|
+
def test_heal_previews_the_re_record(self, boost, installed):
|
|
215
|
+
paths.lockfile_path().unlink()
|
|
216
|
+
r = boost("heal", "--dry-run")
|
|
217
|
+
assert "would re-record brainstorming" in r.out
|
|
218
|
+
assert "would remove stale link" not in r.out
|
|
219
|
+
|
|
184
220
|
def test_missing_lock_with_empty_store_is_not_an_issue(self, boost, sandbox):
|
|
185
221
|
# No lock file and nothing in the store either: a fresh install, not
|
|
186
222
|
# a fault. Must not claim "parses" for a file that isn't there.
|
|
@@ -912,7 +912,8 @@ class TestUninstall:
|
|
|
912
912
|
class TestSyncPlan:
|
|
913
913
|
EMPTY: ClassVar[dict] = {"missing_store": [], "missing_links": [],
|
|
914
914
|
"blocked_links": [], "stale_links": [], "orphaned_store": [],
|
|
915
|
-
"
|
|
915
|
+
"unrecorded_store": [], "missing_materializations": [],
|
|
916
|
+
"out_of_scope_links": []}
|
|
916
917
|
|
|
917
918
|
def test_clean_state_empty_plan(self, brainstorming):
|
|
918
919
|
assert store.sync_plan() == self.EMPTY
|