boost-skill-cli 1.2.181__tar.gz → 1.2.183__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.181 → boost_skill_cli-1.2.183}/PKG-INFO +1 -1
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/commands/intelligence.py +11 -2
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/commands/pkg.py +34 -1
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/commands/team.py +16 -1
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/complete.py +23 -2
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/scopes.py +130 -25
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/util.py +28 -2
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_skill_cli.egg-info/PKG-INFO +1 -1
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_skill_cli.egg-info/SOURCES.txt +1 -0
- boost_skill_cli-1.2.183/docs/demo.gif +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/project-scope-in-an-unmarked-tree-does-not-walk-up.md +24 -5
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/shard-weights-do-not-predict-the-job-timeout.md +42 -9
- boost_skill_cli-1.2.183/docs/roadmap/items/the-shard-model-has-no-per-job-fixed-cost.md +82 -0
- boost_skill_cli-1.2.183/docs/roadmap/items/writers-whose-bytes-are-compared-do-not-pin-their-newline.md +133 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap.html +107 -120
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/mutation_shards.py +124 -1
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/mutation_weights.json +1038 -1034
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/conftest.py +19 -5
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_workspace_scope.py +79 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_mutation_shard_count.py +149 -2
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_output.py +2 -1
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_scopes.py +312 -1
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_text_io_names_its_encoding.py +380 -6
- boost_skill_cli-1.2.181/docs/demo.gif +0 -0
- boost_skill_cli-1.2.181/docs/roadmap/items/writers-whose-bytes-are-compared-do-not-pin-their-newline.md +0 -49
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/.gitattributes +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/.gitignore +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/.lycheeignore +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/.vale/styles/boost/AIWriting.yml +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/.vale.ini +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/CLAUDE.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/DCO +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/GOVERNANCE.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/LICENSE +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/MAINTAINERS.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/MANIFEST.in +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/Makefile +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/README.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/SECURITY.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/SUPPORT.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/commands/quickstart.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/aihost.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/archive.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/bmad.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/bootstrap.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/browse.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/builtin.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/catalogbundle.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/cohort.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/compact.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/deps.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/discovery.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/hookhost.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/jsonstate.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/prereq.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/report.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/shards.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/typedvalue.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/data/rules/boost-first.mdc +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_langchain/__init__.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_langchain/_compat.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_langchain/graph.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_langchain/loader.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_langchain/py.typed +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_langchain/retriever.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/codecov.yml +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/adapters.html +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/bmad.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/carousel.html +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/chat.html +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/code-review.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/commands.html +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/commit-audit.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/demo.html +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/demo.tape +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/dependencies.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/eval-latest.json +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/eval.html +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/index.html +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/langchain.html +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/openssf-badge.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/BOOST-D27.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/a-correct-link-in-a-locked-dir-reads-as-refused.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/a-new-shipped-card-always-404s-its-own-write-up-link.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/a-refusal-and-its-remedy-never-wrapped.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/agent-dir-shapes-install-still-trips-on.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/ai-backend-fanout.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/an-item-materialized-nowhere-reads-ok-in-verify-health-drift.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-absorb-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-adapt-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-adapt-renders-every-sibling-of-a-flat-agents-dir-workflow-as.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-adapt-run-stats-edit-tag-export-reject-the-tap-name-qualifie.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-ai-degrade-note-blames-path-api-keys-regardless-of-cause-sev.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-attest-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-audit-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-bmad-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-browse-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-bundle-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-catalog-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-catalog-resolve-one-s-duplicate-name-hint-advertises-path-to.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-changelog-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-chat-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-clean-counts-failed-removals-as-cleaned-journals-the-inflate.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-cli-py-commands-summaries-and-parser-help-contradict-behavio.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-cohort-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-completions-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-config-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-config-policy-set-store-type-unchecked-values-consumers-cras.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-context-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-corrupt-settings-config-state-json-silently-read-as-empty-th.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-create-distill-infer-absorb-install-silently-replace-an-inst.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-create-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-declined-confirms-never-name-y-boost-assume-yes-snapshot-cle.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-deps-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-discover-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-distill-s-heuristic-merge-drops-repeated-fences-braces-writi.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-doctor-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-drift-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-dry-runs-disagree-with-the-real-run-compact-counts-bytes-it.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-edit-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-evolve-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-explain-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-export-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-export-o-cohort-create-and-profile-save-silently-overwrite-e.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-fingerprint-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-five-exit-70-crashes-on-bad-paths-data-catalog-export-serve.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-focus-profile-sideline-by-unlinking-without-recording-it-lis.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-git-operations-never-set-git-terminal-prompt-0-so-a-404-priv.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-health-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-hooks-remove-n-cannot-find-hooks-boost-itself-added-unknown.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-import-all-skips-the-injection-secret-scans-and-the-per-skil.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-import-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-index-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-info-stats-explain-render-a-different-smaller-shape-for-rule.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-install-dry-run-promises-agents-the-real-install-never-write.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-install-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-install-local-writes-empties-the-repo-s-mcp-json-silently-of.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-json-accepted-but-ignored-on-many-branches-cohort-config-pol.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-lint-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-log-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-log-simulate-changelog-headings-echo-the-raw-qualified-argum.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-mcp-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-mcp-register-s-boost-first-consent-names-only-the-registered.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-missing-json-on-doctor-test-health-changelog-trending-log-ho.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-name-miss-errors-unknown-tap-qualifier-unnamed-no-close-matc.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-onboard-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-out-table-clips-data-columns-to-an-assumed-80-columns-when-s.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-out-warn-defaults-to-stdout-infer-absorb-corrupt-skill-md-se.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-outdated-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-output-wrap-tokens-splits-punctuation-off-backtick-spans-ins.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-pinned-taps-silently-moved-to-head-by-update-re-clone-and-co.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-policy-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-preview-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-profile-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-project-scope-seams-uninstall-verify-list-info-reinstall-dis.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-protocol-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-pulse-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-quarantine-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-quarantine-pin-state-invisible-list-info-doctor-report-links.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-quickstart-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-recommend-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-reindex-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-reinstall-sync-repair-and-audit-resolve-by-name-tap-ignoring.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-replay-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-root-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-rules-workflows-reported-as-skills-uninstall-claims-a-store.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-run-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-schedule-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-search-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-simulate-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-singular-plural-misses-1-skills-1-issue-need-1-skill-pass-ac.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-six-count-flags-tap-chat-absorb-lint-changelog-hooks-skip-ut.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-skill-profile-name-slugging-is-inconsistent-distill-o-accept.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-snapshot-restore-replaces-the-lock-wholesale-orphaning-newer.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-stale-prose-after-shipped-changes-catalog-export-live-discov.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-stray-positionals-and-inapplicable-flags-silently-ignored-ac.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-sweep-positionals-json-lack-help-strings-and-no-command-help.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-sync-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-tag-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-tap-dry-run-is-silently-ignored-outside-catalog-spec-and-def.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-tap-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-taps-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-taps-outdated-decay-policy-snapshot-json-emit-display-string.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-test-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-trust-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-trust-verify-labels-a-manifest-tampered-after-signing-by-a-t.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-unpin-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-untap-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-update-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-verify-drift-say-nothing-installed-exit-0-and-doctor-says-lo.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-verify-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/audit-who-findings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/bare-boost-never-names-an-entry-point.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/because-that-was-not-the-reason.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/bm25-empty-tokenization-kills-catalog-fallback.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/bmad-done-contract-ignores-the-track.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/bmad-gemini-gets-claude-hook-output.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/bmad-personas-delegate-outside-the-router.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/bmad-roster-drifted-from-bmad-6-12.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/bmad-route-ignores-autopilot-state.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/bmad-router-one-keyword-decides-the-track.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/bmad-router-reads-each-prompt-alone.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/boost-first-rule.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/branch-current-gate.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/cache-writers-that-still-crash-on-a-read-only-cache.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/canary-deps-check-skips-in-the-required-job.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/cancelled-ci-on-main-is-silent-and-skips-the-release.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/capability-policy-skips-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/catalog-categories-beyond-curated.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/ci-summary-reports-the-wrong-coverage-gate.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/claude-md-instructs-the-wrong-licence-header.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/cli-audit-2026-08-full-sweep.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/cli-command-audit.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/codex-hooks-timeout-units-are-unestablished.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/codex-is-not-an-mcp-host.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/compact-answers-a-named-tap-with-a-global-all-clear.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/concurrency-probe-measured-a-race-not-the-pool.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/concurrent-rag-builds-delete-each-others-temp-index.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/config-json-edge-shapes-crash-or-disagree.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/corpus-refresh-updates-data-not-prose.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/corrupt-config-reads-as-ready-to-set-up.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/count-flags-that-silently-invert.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/delay-true-defeats-the-log-suppress.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/dense-kill-switch-has-no-reason-state.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/dense-local-built-store-displaced-by-a-key.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/dense-no-key-guard-is-unreachable.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/dense-ready-but-embedder-cannot-run.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/dense-reindex-has-no-progress-or-durability.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/dense-reindex-reuses-whole-taps.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/dense-store-holds-every-vector-once-per-copy.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/doctor-prescribes-sync-that-deletes-live-links.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/err-colour-judged-by-stdout.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/err-multiline-hint-colours-across-the-newline.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/eval-corpus-counted-by-the-method-the-repo-disavows.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/eval-corpus-duplication-is-intra-tap-not-mirrors.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/eval-floor-calibration-stale-after-pin-refresh.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/eval-gate-scores-a-body-less-corpus.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/exemplar-graded-golden-set-runs-in-no-gate.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/explain-outline-has-no-cap.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/floors-job-never-installed-setuptools.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/free-threaded-canary-warns-about-nothing.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/gate-parity-test-ignores-k-and-golden.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/gated-golden-set-has-zero-exemplars.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/gstack-tap-first-then-coexistence.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/hooks-list-drops-the-name-before-the-host.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/identifier-columns-shrink-to-a-name-no-command-accepts.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/import-budget-gate-passes-when-boost-cannot-import.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/info-deps-materialize-a-dir-they-then-reject.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/install-cannot-tell-a-skill-needs-another-one.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/install-path-disambiguation.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/install-paths-that-still-drop-the-result.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/install-writes-through-a-redirected-dotdir-uninstall-will-not.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/is-dir-follows-a-symlink-at-eleven-rmtree-call-sites.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/keyed-no-store-hint-disagrees-with-shard-remedy.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/lighthouse-flips-on-byte-identical-input.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/links-job-503s-its-own-write-up-links.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/lock-kept-links-it-had-just-removed.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/manifest-in-prunes-only-the-root-copy.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mcp-cannot-read-a-skill-before-installing.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mcp-doctor-says-healthy-where-mcp-search-says-nothing-is-tapped.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mcp-install-description-omits-antigravity.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mcp-miss-reply-echoes-the-whole-query.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mcp-registration-writes-outside-a-sandboxed-home.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mcp-search-cost-overstated-on-keyless-machines.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mcp-server-dies-on-a-valid-json-message-that-is-not-an-object.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mcp-session-dies-on-a-deeply-nested-json-line.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mcp-skip-list-absent-from-tool-descriptions.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mutation-shard-balance-hints-are-a-release-behind.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mutation-shards-rerun-full-set-every-push.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/near-identical-copies-still-eat-the-slots.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/one-bad-agent-dir-silences-the-whole-doctor-report.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/one-class-makes-registry-py-unsplittable.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/one-failed-shard-job-drops-registries-from-the-manifest.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/openssf-silver.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/osps-baseline-levels.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/panel-fits-data-to-an-assumed-80-in-a-pipe.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/project-uninstall-deletes-any-in-repo-directory-the-lock-names.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/publish-the-keyword-index.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/published-shards-have-no-consumer.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/quickstart-drops-incompatible-shard-status.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/quickstart-manifest-error-drops-hint-and-misnames-cause.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/quickstart-rerun-retargets-tapped-registries.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/quickstart-says-ready-exit-0-after-every-tap-failed.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/quickstart-shard-download-invisible-in-preview-and-run.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/read-only-boost-home-with-no-cache-dir.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/readme-81-command-table-lists-80-omits-quickstart.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/readme-hero-installs-a-name-no-starter-registry-ships.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/reclone-leaves-a-clone-on-head-when-it-cannot-reach-the-pin.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/recommend-recomputes-its-columns-per-row.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/refresh-strands-the-natural-set-baseline.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/reindex-reported-a-completeness-share-it-could-not-compute.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/release-guard-fails-open-when-it-cannot-read-tags.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/relicence-apache-2.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/required-eval-gate-still-grades-by-name.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/roadmap-boards-advertise-python-39.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/rule-and-workflow-rows-carry-a-scope-nothing-but-list-local-reads.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/sandbox-fixture-does-not-sandbox-the-working-directory.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/search-caps-the-two-copyable-identifiers.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/search-drops-symbol-language-queries-silently.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/search-footer-not-fitted-to-the-pane-its-rows-were-fitted-to.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/search-footer-overflows-40-col-pane-gate-passes-by-luck.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/search-relevance-meter-is-constant-on-default-page.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/search-rows-use-term-width-so-piping-drops-the-tap-column.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/shard-refresh-skips-processed-commits.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/shard-runs-reembed-everything-weekly.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/shrink-the-published-index.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/stale-gate-sizes-in-readme-and-contributing.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/stale-tap-hint-dead-for-tap-only-installs.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/surface-dehyphenation-rationale-is-false.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/sweep-died-at-a-page-not-at-launch.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/sync-repairs-a-disabled-agents-row-every-run.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/table-fit-widths-floor-destroys-columns-and-still-overflows.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/taps-vouches-for-a-clone-that-is-not-there.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/text-io-leaves-its-encoding-to-the-locale.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/the-install-path-hands-agy-claudes-mcp-argv.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/the-links-concurrency-cap-did-not-hold.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/the-model-back-off-mixes-two-clocks.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/the-windows-test-cap-is-five-minutes-from-the-measurement.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/tier3-ceiling-unreachable-at-default-n.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/typos-reported-as-boost-bugs.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/uninstall-local-cannot-remove-a-rule-or-workflow-list-local-shows.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/unreadable-tap-cache-healthy-doctor-crashing-heal.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/unwritable-agent-dir-has-no-remedy.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/unwritable-rule-or-workflow-dir-crashes-install.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/util-rmtree-chmods-a-symlink-target-outside-the-tree.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/vex-openvex-feed.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/weekly-vectors-had-no-ingestion-path.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/wrap-width-judged-by-stdout.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/zip-strict-audit.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/security-design.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/semantic-search.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/verifying-releases.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/vex/meta.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/vex/openvex.json +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/evals/README.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/evals/__init__.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/evals/baseline.json +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/evals/metrics.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/evals/publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/examples/README.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/index.html +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/noxfile.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/pyproject.toml +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/add_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/build_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/build_vex.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/check_branch_current.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/check_dco.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/check_reproducible.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/eval_corpus.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/eval_tools.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/measure_near_duplicate_bound.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/measure_registry.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/normalize_sdist.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/page_budget.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/publish_eval_json.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/publish_shards.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/serve_docs.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/scripts/shard_plan.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/setup.cfg +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/sonar-project.properties +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/style/README.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/style/boost.css +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/style/boost.js +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/style/demo.html +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/eval/fixtures/claude_init_event.jsonl +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/eval/taps-scale.txt +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/eval/tool_calls.jsonl +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_bad_input_is_not_a_crash.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_bmad_all_hosts.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_bmad_personas_scope.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_cli_catalog.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_cli_hooks_codex.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_cli_hooks_gemini.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_cli_identifier_columns.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_cli_json_reports.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_cli_pane_width.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_cli_quickstart.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_cli_tap_pins.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_context_sees_an_unborn_branch.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_count_flags_reject_nonpositive.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_keyed_no_store_hint.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_kind_conformance.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_recommend_because_is_true.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_repo_root_guard_covers_real_installs.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_reports_match_reality.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/langchain/conftest.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/langchain/test_graph.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/langchain/test_loader.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/langchain/test_retriever.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/data/bmad-skills-6.12.0.json +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_action_pin_lockstep.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_aihost.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_archive.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_bmad_core.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_boost_first_offer.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_bootstrap.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_bot_pr_dco.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_branch_current.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_browse.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_builtin.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_canary_deps.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_catalog_distinct.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_catalog_keyword_words.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_catalogbundle.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_check_dco.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_check_reproducible.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_claude_settings_codex.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_clean_internal_cache.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_cli_update_shards.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_cohort.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_compact.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_complete.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_complete_rc_block.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_content_identity.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_corpus_prose.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_count_flags_use_positive_int.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_coverage_gate_prose.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_crash_redaction.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_dense_boilerplate_cluster.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_dense_embed_dedupe.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_dense_entry_reuse.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_dense_entry_vectors.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_dense_model_unavailable.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_dense_progress.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_dense_quantized.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_dense_ready_order.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_dense_shard_real_schema.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_dense_status_cheap.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_dense_vector_dedupe.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_deps.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_discovery.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_distill_merge.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_doctor_output_polish.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_drift_hint.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_dry_run_parity.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_embed_outranking.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_embed_truncated_response.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_eval_corpus.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_eval_corpus_bodies.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_eval_grading.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_eval_query_sets.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_eval_tools.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_eval_tools_probe.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_first_run_pointer.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_gemini_agent_sanitize.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_gitutil_lfs.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_gitutil_sparse.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_gstack_coexistence.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_help_contracts.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_hook_settings_hosts.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_hookhost.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_hookhost_codex.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_install_permission_error.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_jsonstate.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_langchain_packaging.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_launcher_python_floor.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_lighthouse_budgets.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_link_ownership.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_mcp_install_sandbox_home.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_mcp_read.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_measure_registry.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_mutation_split_measured.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_mutation_weights_drift.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_near_duplicate_collapse.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_normalize_sdist.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_output_table_drop.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_output_table_whole.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_page_budget.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_prereq.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_quickstart_readiness.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_rag_completeness.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_rag_extra_hint.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_rag_fastpath.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_read_text_arg.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_registry_control_chars.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_registry_parallel.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_repo_root_guard.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_report.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_rerank_cache.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_retrieve_any_near_duplicates.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_sandbox_fixture_cwd.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_schedule_plist.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_sdist_contents.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_serve_docs.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_shard_plan.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_shards.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_shards_carry_forward.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_shards_incremental.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_shards_ingest.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_shards_matrix.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_smoke_covers_every_command.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_store_materialize.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_sync_blocked_links.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_sync_lost_lock.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_tap_pins.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_typedvalue.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_upstream_path.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_version_tags.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_vex.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_visual_harness_capture.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_visual_harness_flags.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_workflow_concurrency_groups.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_workflow_push_has_credentials.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.2.181 → boost_skill_cli-1.2.183}/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.183'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 2, 183)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -155,7 +155,12 @@ def _install_generated(name: str, text: str, yes: bool = False) -> None:
|
|
|
155
155
|
with tempfile.TemporaryDirectory(prefix="boost-gen-") as td:
|
|
156
156
|
src = Path(td) / name
|
|
157
157
|
src.mkdir()
|
|
158
|
-
|
|
158
|
+
# newline="\n": install_from_path copies this into the canonical
|
|
159
|
+
# store and records util.sha256_dir over it, which hashes read_bytes.
|
|
160
|
+
# Every comparison against that hash is local today, so this is
|
|
161
|
+
# latent rather than live — but the digest it stamps into the lock
|
|
162
|
+
# would otherwise depend on which OS generated the skill.
|
|
163
|
+
(src / "SKILL.md").write_text(text, encoding="utf-8", newline="\n")
|
|
159
164
|
try:
|
|
160
165
|
res = store.install_from_path(src, name=name, tap_label="local")
|
|
161
166
|
except BoostError as err:
|
|
@@ -799,7 +804,11 @@ def cmd_evolve(argv: list[str]) -> int:
|
|
|
799
804
|
if not args.apply:
|
|
800
805
|
out.info(out.role("re-run with --apply to write these changes", "muted"))
|
|
801
806
|
return 0
|
|
802
|
-
|
|
807
|
+
# newline="\n": the next line hashes this file's bytes, and the store is
|
|
808
|
+
# what gets symlinked into every agent's skills dir. Same latent class as
|
|
809
|
+
# the generated-skill write above — nothing compares across machines
|
|
810
|
+
# today, and the recorded digest should not depend on one either way.
|
|
811
|
+
skill_md.write_text(new, encoding="utf-8", newline="\n")
|
|
803
812
|
entry["sha256"] = util.sha256_dir(store.skill_store_dir(args.name))
|
|
804
813
|
entry["updated_at"] = util.now_iso()
|
|
805
814
|
entry["version"] = new_ver
|
|
@@ -506,7 +506,40 @@ def cmd_install(argv: list[str]) -> int:
|
|
|
506
506
|
# one of them used to bind it: the preview returns early, so a `pbase`
|
|
507
507
|
# assigned inside `if args.dry_run:` is unbound by the time the run path
|
|
508
508
|
# reports prerequisites. `None` for every scope but `--local`.
|
|
509
|
-
pbase = scopes.
|
|
509
|
+
pbase, pbase_kind = (scopes.project_base()
|
|
510
|
+
if args.scope == scopes.SCOPE_PROJECT
|
|
511
|
+
else (None, None))
|
|
512
|
+
# Said once, before anything is written, and naming the directory. An
|
|
513
|
+
# unmarked tree has no project root to walk up to, so this call is what
|
|
514
|
+
# decides where the project *is* — and `proj/src` stays a different project
|
|
515
|
+
# from `proj` for every command afterwards. The warning is the difference
|
|
516
|
+
# between that being a decision and being a surprise. It warns and does
|
|
517
|
+
# not redirect, so it fires in both shapes: with an older project above it
|
|
518
|
+
# names that one, and with nothing above it says a new one starts here.
|
|
519
|
+
# The single silent case is a lock at this very directory, where `above`
|
|
520
|
+
# comes back equal to `pbase` — the project being used is the one already
|
|
521
|
+
# here, and there is nothing to tell anybody.
|
|
522
|
+
if pbase is not None and pbase_kind == scopes.BASE_UNMARKED:
|
|
523
|
+
# `project_lock_root` is advisory and decides nothing: it only lets
|
|
524
|
+
# the warning NAME the project the user probably meant. Resolution
|
|
525
|
+
# stays on version control markers alone, because moving the base up
|
|
526
|
+
# to an ancestor lock orphans the rules and workflows recorded below
|
|
527
|
+
# it — see that function for what verification reproduced.
|
|
528
|
+
above = scopes.project_lock_root(pbase)
|
|
529
|
+
if above is not None and above != pbase.resolve():
|
|
530
|
+
out.warn("there is already a boost project at `%s`, and --local "
|
|
531
|
+
"here starts a second one — cd there if you meant that "
|
|
532
|
+
"one" % above, wrap=True)
|
|
533
|
+
elif above is None:
|
|
534
|
+
# "between here and your home directory", not "at or above here":
|
|
535
|
+
# the walk stops at `$HOME` without testing it, so a dotfiles repo
|
|
536
|
+
# at `~/.git` — a setup `project_root`'s own docstring calls out —
|
|
537
|
+
# is a marker above this directory that it may not use. Claiming
|
|
538
|
+
# otherwise sent the reader to `~`, where the same command refuses.
|
|
539
|
+
out.warn("nothing between `%s` and your home directory marks a "
|
|
540
|
+
"project — no git/hg/svn checkout, no "
|
|
541
|
+
".boost/skill-lock.json — so --local starts a new one "
|
|
542
|
+
"here" % pbase, wrap=True)
|
|
510
543
|
only = _check_agents(args.agent)
|
|
511
544
|
multi = len(args.names) > 1
|
|
512
545
|
entries, failed = [], 0
|
|
@@ -594,9 +594,24 @@ def cmd_protocol(argv) -> int:
|
|
|
594
594
|
paths.ensure_dirs()
|
|
595
595
|
shim = paths.launcher()
|
|
596
596
|
script = _handler_script()
|
|
597
|
+
# newline="\n" because this artifact is a bash script and bash is a
|
|
598
|
+
# non-Python parser reading it byte for byte. The write sits *above*
|
|
599
|
+
# the platform branch below, so unlike the Linux .desktop file it
|
|
600
|
+
# does run on Windows, where the stub at the end of this command
|
|
601
|
+
# tells the user to invoke the script themselves.
|
|
602
|
+
#
|
|
603
|
+
# Which CR failure bites is shell-specific and is deliberately not
|
|
604
|
+
# claimed here: "bad interpreter: bash\r" is kernel binfmt_script
|
|
605
|
+
# behaviour, and Windows has no kernel shebang support, so under
|
|
606
|
+
# Git Bash the shebang is likely tolerated while under WSL the
|
|
607
|
+
# launcher path is unexecutable for unrelated reasons. The URL route
|
|
608
|
+
# is ruled out — `_parse_boost_url` goes through `urlparse`, which
|
|
609
|
+
# strips CR. What is left is simply that the file is wrong, which is
|
|
610
|
+
# reason enough for a one-keyword pin.
|
|
597
611
|
script.write_text("#!/usr/bin/env bash\n"
|
|
598
612
|
"# boost:// URL handler — invoked with the URL as $1\n"
|
|
599
|
-
'exec "%s" protocol open "$1"\n' % shim,
|
|
613
|
+
'exec "%s" protocol open "$1"\n' % shim,
|
|
614
|
+
encoding="utf-8", newline="\n")
|
|
600
615
|
script.chmod(script.stat().st_mode | stat.S_IEXEC)
|
|
601
616
|
out.ok("wrote handler script %s" % _tilde(script))
|
|
602
617
|
if system == "Darwin":
|
|
@@ -614,9 +614,30 @@ def plan_uninstall(shell: str) -> RcPlan:
|
|
|
614
614
|
|
|
615
615
|
def apply(plan: RcPlan) -> Path:
|
|
616
616
|
"""Write ``plan``'s result. A no-op when it changes nothing, so an rc file
|
|
617
|
-
keeps its mtime (and its place in the user's backups) on a repeat run.
|
|
617
|
+
keeps its mtime (and its place in the user's backups) on a repeat run.
|
|
618
|
+
|
|
619
|
+
``newline="\\n"`` because the reader here is **bash**, which does not
|
|
620
|
+
fold. The damage is worse than a stray character: measured on bash 3.2
|
|
621
|
+
and zsh, a CRLF rc file does not merely mangle tokens, it stops parsing
|
|
622
|
+
— ``fi\\r`` gives ``syntax error: unexpected end of file``, so nothing
|
|
623
|
+
after the user's first ``if`` or ``for`` runs at all.
|
|
624
|
+
|
|
625
|
+
This rewrites the user's **whole** ``~/.bashrc`` or ``~/.zshrc``, not
|
|
626
|
+
only the lines boost added, so an unpinned write on Windows re-endings a
|
|
627
|
+
file boost does not own — ``tests (windows-latest, 3.14)`` measured
|
|
628
|
+
``b'export A=1\\r\\neval "$(boost _complete)"\\r\\n'`` from a one-line
|
|
629
|
+
rc. Pinning cuts the same way: it normalizes the whole file to LF,
|
|
630
|
+
including lines boost never wrote, which is what bash wants and is still
|
|
631
|
+
a change beyond boost's own three. The one shell that might forgive CRLF
|
|
632
|
+
is MSYS2/Cygwin bash with ``shopt igncr``, which is off by default.
|
|
633
|
+
|
|
634
|
+
Idempotence is unaffected either way: :func:`_read_rc` reads through
|
|
635
|
+
universal newlines, so the next run compares LF to LF and reports no
|
|
636
|
+
change — which is also why boost would never repair a file it had
|
|
637
|
+
mangled, and would keep saying "already wired" over it.
|
|
638
|
+
"""
|
|
618
639
|
if plan.changes:
|
|
619
|
-
plan.path.write_text(plan.after, encoding="utf-8")
|
|
640
|
+
plan.path.write_text(plan.after, encoding="utf-8", newline="\n")
|
|
620
641
|
return plan.path
|
|
621
642
|
|
|
622
643
|
|
|
@@ -22,10 +22,10 @@ from __future__ import annotations
|
|
|
22
22
|
import os
|
|
23
23
|
import re
|
|
24
24
|
from contextlib import suppress
|
|
25
|
-
from pathlib import Path
|
|
25
|
+
from pathlib import Path, PurePosixPath, PureWindowsPath
|
|
26
26
|
|
|
27
27
|
from ..errors import BoostError
|
|
28
|
-
from . import paths
|
|
28
|
+
from . import paths, projectlock
|
|
29
29
|
|
|
30
30
|
SCOPE_USER = "user"
|
|
31
31
|
SCOPE_PROJECT = "project"
|
|
@@ -48,6 +48,12 @@ PROJECT_MARKERS = (".git", ".hg", ".svn")
|
|
|
48
48
|
# before it is ever joined — the same rule the canonical store applies.
|
|
49
49
|
_SAFE_NAME = re.compile(r"[A-Za-z0-9._-]+")
|
|
50
50
|
|
|
51
|
+
# How :func:`project_base` decided, so a caller can tell the two apart without
|
|
52
|
+
# walking the tree a second time and risking a different answer than the walk
|
|
53
|
+
# that actually chose the directory.
|
|
54
|
+
BASE_VCS = "vcs" # a PROJECT_MARKERS entry at or above the start
|
|
55
|
+
BASE_UNMARKED = "unmarked" # none — the start directory becomes a project
|
|
56
|
+
|
|
51
57
|
|
|
52
58
|
def project_root(start=None) -> Path | None:
|
|
53
59
|
"""Nearest enclosing project root at or above ``start`` (default: cwd).
|
|
@@ -58,8 +64,8 @@ def project_root(start=None) -> Path | None:
|
|
|
58
64
|
repo's ``.claude/skills``, not create a stray one three levels down.
|
|
59
65
|
|
|
60
66
|
**This is the marker walk, not the answer to "where is the project".** That
|
|
61
|
-
is :func:`resolve_base`, which adds the unmarked-directory fallback
|
|
62
|
-
is what every caller should use — a command that asks this one directly
|
|
67
|
+
is :func:`resolve_base`, which adds the unmarked-directory fallback on top
|
|
68
|
+
of it, and it is what every caller should use — a command that asks this one directly
|
|
63
69
|
disagrees with ``install --local`` about whether an unmarked directory is a
|
|
64
70
|
project, which is how ``verify``/``list``/``doctor``/``uninstall`` came to
|
|
65
71
|
deny skills that ``install`` had just written and ``sync`` could still see.
|
|
@@ -87,27 +93,74 @@ def project_root(start=None) -> Path | None:
|
|
|
87
93
|
return None
|
|
88
94
|
|
|
89
95
|
|
|
90
|
-
def
|
|
91
|
-
"""
|
|
96
|
+
def project_lock_root(start=None) -> Path | None:
|
|
97
|
+
"""Nearest ancestor at or above ``start`` that already holds a project lock.
|
|
98
|
+
|
|
99
|
+
**This does not decide where anything is written.** It is an advisory
|
|
100
|
+
answer to "is there already a boost project up there?", used by
|
|
101
|
+
``install --local`` to name it in the warning it prints when it is about
|
|
102
|
+
to start a new one. :func:`project_base` is what decides the directory,
|
|
103
|
+
and it consults version control markers and nothing else.
|
|
104
|
+
|
|
105
|
+
It is deliberately not in the resolution path, and the reason is worth
|
|
106
|
+
recording because the roadmap card that produced this function proposed
|
|
107
|
+
putting it there. Moving the resolved base *up* to an ancestor lock
|
|
108
|
+
orphans every rule and workflow already recorded *below* it: those are
|
|
109
|
+
kept in the **user** lock tagged with an absolute ``base``
|
|
110
|
+
(``store._install_rule``), and ``--local`` eligibility is
|
|
111
|
+
:func:`owns` against the base resolved right now. So one
|
|
112
|
+
``install <skill> --local`` at ``proj`` would make a rule installed at
|
|
113
|
+
``proj/src`` invisible to ``list --local`` and unremovable by
|
|
114
|
+
``uninstall --local`` — from ``proj/src`` as much as from ``proj`` — with
|
|
115
|
+
``uninstall`` saying "installed in proj/src, not in this project" to
|
|
116
|
+
somebody standing in ``proj/src``. Verification reproduced that end to
|
|
117
|
+
end. The walk also only ever engages for skills: ``_install_rule`` and
|
|
118
|
+
``_install_workflow`` write no project lock at all, so it would fix one
|
|
119
|
+
kind of three.
|
|
120
|
+
|
|
121
|
+
**The marker is the lock file, not the ``.boost`` directory**, and that is
|
|
122
|
+
the whole reason this can exist beside the note on :data:`PROJECT_MARKERS`
|
|
123
|
+
refusing ``.boost``. boost's own state dir is ``~/.boost`` and it holds a
|
|
124
|
+
``config.json``, a ``cache/`` and a ``state/`` — never a
|
|
125
|
+
``skill-lock.json``, which only :mod:`.projectlock` writes and only into a
|
|
126
|
+
project. So the one directory a ``.boost`` marker would have wrongly
|
|
127
|
+
claimed is the one this never matches, and ``$HOME`` is refused outright
|
|
128
|
+
below regardless.
|
|
129
|
+
"""
|
|
130
|
+
try:
|
|
131
|
+
here = Path(start).resolve() if start is not None else Path.cwd().resolve()
|
|
132
|
+
except OSError:
|
|
133
|
+
return None
|
|
134
|
+
try:
|
|
135
|
+
home = Path(paths.home()).resolve()
|
|
136
|
+
except OSError:
|
|
137
|
+
home = None
|
|
138
|
+
for d in (here, *here.parents):
|
|
139
|
+
if home is not None and d == home:
|
|
140
|
+
return None
|
|
141
|
+
if projectlock.exists(d):
|
|
142
|
+
return d
|
|
143
|
+
return None
|
|
92
144
|
|
|
93
|
-
An explicit ``base`` always wins, so a re-materialization driven by a lock
|
|
94
|
-
record (``update``, ``sync``) lands where the original install did rather
|
|
95
|
-
than in whatever directory the command happens to be run from.
|
|
96
145
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
146
|
+
def project_base(start=None) -> tuple[Path | None, str | None]:
|
|
147
|
+
"""Where project scope materializes, **and how that was decided**.
|
|
148
|
+
|
|
149
|
+
One walk, one answer. ``install --local`` has to warn when it is the call
|
|
150
|
+
that creates the project, and re-deriving *that* in the command layer
|
|
151
|
+
would mean a second walk that can disagree with the one that chose the
|
|
152
|
+
directory — the exact shape of the reader/writer split ``fix(scope)``
|
|
153
|
+
closed. So the decision is made once, here, and the reason travels with
|
|
154
|
+
it. (The command layer does call :func:`project_lock_root` afterwards, to
|
|
155
|
+
name an existing project in the warning text. That one decides no
|
|
156
|
+
destination, so it cannot disagree with anything.)
|
|
157
|
+
|
|
158
|
+
Returns ``(None, None)`` when there is nowhere to put a project — standing
|
|
159
|
+
in ``$HOME``, or with no working directory at all.
|
|
103
160
|
"""
|
|
104
|
-
if base:
|
|
105
|
-
return Path(base)
|
|
106
|
-
if scope != SCOPE_PROJECT:
|
|
107
|
-
return None
|
|
108
161
|
found = project_root(start)
|
|
109
162
|
if found is not None:
|
|
110
|
-
return found
|
|
163
|
+
return found, BASE_VCS
|
|
111
164
|
if start is not None:
|
|
112
165
|
here = Path(start)
|
|
113
166
|
else:
|
|
@@ -118,11 +171,37 @@ def resolve_base(scope: str, base=None, start=None) -> Path | None:
|
|
|
118
171
|
# under the process. `project_root` has always answered None here;
|
|
119
172
|
# this must too, or the readers that now come through this function
|
|
120
173
|
# crash where they used to print a user-scope answer and exit 0.
|
|
121
|
-
return None
|
|
174
|
+
return None, None
|
|
122
175
|
with suppress(OSError):
|
|
123
176
|
if here.resolve() == Path(paths.home()).resolve():
|
|
124
|
-
return None
|
|
125
|
-
return here
|
|
177
|
+
return None, None
|
|
178
|
+
return here, BASE_UNMARKED
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
def resolve_base(scope: str, base=None, start=None) -> Path | None:
|
|
182
|
+
"""Directory a scope materializes under — ``None`` for user scope.
|
|
183
|
+
|
|
184
|
+
An explicit ``base`` always wins, so a re-materialization driven by a lock
|
|
185
|
+
record (``update``, ``sync``) lands where the original install did rather
|
|
186
|
+
than in whatever directory the command happens to be run from.
|
|
187
|
+
|
|
188
|
+
Project scope with no explicit base defers to :func:`project_base`: the
|
|
189
|
+
nearest version control root, else ``start``/cwd — an unmarked directory
|
|
190
|
+
is still a perfectly good place to put a project's skills, and refusing would only be
|
|
191
|
+
pedantry. The one directory that is never an acceptable fallback is
|
|
192
|
+
``$HOME``: writing "project" files there means writing into the very dirs
|
|
193
|
+
user scope owns, so callers get ``None`` and can say so.
|
|
194
|
+
|
|
195
|
+
This keeps the path and drops the kind. A caller that needs to know
|
|
196
|
+
*which* of the three answered — ``install --local`` warns when it is the
|
|
197
|
+
call that creates the project — takes the pair from :func:`project_base`
|
|
198
|
+
rather than walking again.
|
|
199
|
+
"""
|
|
200
|
+
if base:
|
|
201
|
+
return Path(base)
|
|
202
|
+
if scope != SCOPE_PROJECT:
|
|
203
|
+
return None
|
|
204
|
+
return project_base(start)[0]
|
|
126
205
|
|
|
127
206
|
|
|
128
207
|
def owned_by(entries: dict, base) -> dict:
|
|
@@ -330,14 +409,40 @@ def parent_matches_spelling(base, rel: str) -> bool:
|
|
|
330
409
|
The leaf itself is deliberately left unresolved. A materialization that
|
|
331
410
|
*is* a symlink is boost's own, and ``util.remove_path`` unlinks it without
|
|
332
411
|
following it — judging it by what it points at is the bug one layer down.
|
|
412
|
+
|
|
413
|
+
**Absolute is asked of both platforms, not of the one running.** A plain
|
|
414
|
+
``Path(rel)`` is a ``WindowsPath`` on Windows, where ``/etc/passwd``
|
|
415
|
+
carries no drive and ``is_absolute()`` is therefore ``False``. The join
|
|
416
|
+
then yields ``C:\\etc\\passwd`` — outside the base — and *both sides of
|
|
417
|
+
comparison leave it the same way*, so the walk agrees with itself and this
|
|
418
|
+
answers True for a path that is not in the repo at all. All three
|
|
419
|
+
``tests (windows-latest, 3.1x)`` jobs said so the first time these clauses
|
|
420
|
+
were tested directly. The mirror case is a drive letter or a UNC path,
|
|
421
|
+
which ``PurePosixPath`` does not call absolute either. A lock is a
|
|
422
|
+
committed file and the machine that wrote a row need not be the one
|
|
423
|
+
reading it, so the spelling to refuse is whatever is absolute *anywhere*.
|
|
424
|
+
A posix directory genuinely named ``C:`` is refused as collateral, which
|
|
425
|
+
is the safe direction for a guard whose other answer hands ``rmtree`` a
|
|
426
|
+
target.
|
|
427
|
+
|
|
428
|
+
**The NUL is refused by name, on both arguments.** Relying on ``realpath``
|
|
429
|
+
to raise is relying on the half of the behaviour that differs: posix
|
|
430
|
+
raises ``ValueError`` and the ``except`` catches it, Windows does not
|
|
431
|
+
raise and the guard returned True. ``base`` is checked as well as ``rel``
|
|
432
|
+
because it has the same provenance — ``store`` derives it from the lock's
|
|
433
|
+
own recorded ``base`` — and none of the ``rel`` clauses can see it.
|
|
333
434
|
"""
|
|
334
|
-
if not rel or not isinstance(rel, str)
|
|
435
|
+
if not rel or not isinstance(rel, str):
|
|
436
|
+
return False
|
|
437
|
+
if PurePosixPath(rel).is_absolute() or PureWindowsPath(rel).is_absolute():
|
|
335
438
|
return False
|
|
336
439
|
try:
|
|
440
|
+
if "\x00" in rel or "\x00" in os.fspath(base):
|
|
441
|
+
return False
|
|
337
442
|
anchor = Path(os.path.realpath(base))
|
|
338
443
|
return Path(os.path.realpath((Path(base) / rel).parent)) == (
|
|
339
444
|
anchor / rel).parent
|
|
340
|
-
except (OSError, ValueError):
|
|
445
|
+
except (OSError, TypeError, ValueError):
|
|
341
446
|
return False
|
|
342
447
|
|
|
343
448
|
|
|
@@ -187,7 +187,8 @@ def try_lock(path, stale_after: float = 300.0):
|
|
|
187
187
|
yield False
|
|
188
188
|
return
|
|
189
189
|
try:
|
|
190
|
-
with contextlib.suppress(OSError), os.fdopen(
|
|
190
|
+
with contextlib.suppress(OSError), os.fdopen(
|
|
191
|
+
fd, "w", encoding="utf-8") as f:
|
|
191
192
|
fd = None # fdopen owns it now
|
|
192
193
|
f.write(str(os.getpid()))
|
|
193
194
|
yield True
|
|
@@ -209,13 +210,38 @@ def atomic_write_text(path: Path, text: str, encoding: str = "utf-8") -> None:
|
|
|
209
210
|
complete new one atomically replaces it. This is the corruption-safe
|
|
210
211
|
substitute for a bare ``Path.write_text`` on any file boost must not lose —
|
|
211
212
|
the lock file, the config, the pulse journal.
|
|
213
|
+
|
|
214
|
+
``newline="\\n"`` is load-bearing, and it is the one line here that a
|
|
215
|
+
Linux run cannot check. Text mode translates ``"\\n"`` to the platform
|
|
216
|
+
separator on write, so on Windows this wrote CRLF into seventeen of the
|
|
217
|
+
nineteen — measured, not predicted: ``tests (windows-latest, 3.14)`` on
|
|
218
|
+
this branch's parent commit reported ``assert b'\\r' not in
|
|
219
|
+
b'a\\r\\nb\\r\\n'`` against the test below. The other two
|
|
220
|
+
(``rag.py``'s BM25 index and rerank cache) pass bare ``json.dumps`` and
|
|
221
|
+
emit no literal newline at all, so the pin is inert for them.
|
|
222
|
+
|
|
223
|
+
**The reader that makes it matter is git, and only one call site hands
|
|
224
|
+
it anything.** ``projectlock.write`` stamps
|
|
225
|
+
``<repo>/.boost/skill-lock.json``, which that module's own docstring
|
|
226
|
+
says "is meant to be **committed** … git is its history". Everything
|
|
227
|
+
else here is read back through ``json`` or ``read_text``, both of which
|
|
228
|
+
fold. It is explicitly **not** ``sha256_dir``: all eighteen of those
|
|
229
|
+
call sites hash a ``copytree``-populated skill dir or a tap clone, never
|
|
230
|
+
a file this function wrote — an earlier draft of this paragraph claimed
|
|
231
|
+
otherwise and was wrong.
|
|
232
|
+
|
|
233
|
+
``tests/unit/test_text_io_names_its_encoding.py``'s
|
|
234
|
+
``TestAPinnedWriterReallyEmitsLF`` asserts on bytes rather than on the
|
|
235
|
+
presence of this keyword, because an AST check proves only that it is
|
|
236
|
+
spelled. That test arrived with this change, so it corroborates the pin
|
|
237
|
+
rather than independently motivating it.
|
|
212
238
|
"""
|
|
213
239
|
path = Path(path)
|
|
214
240
|
path.parent.mkdir(parents=True, exist_ok=True)
|
|
215
241
|
fd, tmp = tempfile.mkstemp(dir=str(path.parent),
|
|
216
242
|
prefix="." + path.name + ".", suffix=".tmp")
|
|
217
243
|
try:
|
|
218
|
-
with os.fdopen(fd, "w", encoding=encoding) as f:
|
|
244
|
+
with os.fdopen(fd, "w", encoding=encoding, newline="\n") as f:
|
|
219
245
|
f.write(text)
|
|
220
246
|
f.flush()
|
|
221
247
|
os.fsync(f.fileno())
|
|
@@ -693,6 +693,7 @@ docs/roadmap/items/the-links-concurrency-cap-did-not-hold.md
|
|
|
693
693
|
docs/roadmap/items/the-model-back-off-mixes-two-clocks.md
|
|
694
694
|
docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md
|
|
695
695
|
docs/roadmap/items/the-shard-job-that-could-not-finish.md
|
|
696
|
+
docs/roadmap/items/the-shard-model-has-no-per-job-fixed-cost.md
|
|
696
697
|
docs/roadmap/items/the-windows-test-cap-is-five-minutes-from-the-measurement.md
|
|
697
698
|
docs/roadmap/items/theme-asset-linting-stylelint-eslint.md
|
|
698
699
|
docs/roadmap/items/tier3-ceiling-unreachable-at-default-n.md
|
|
Binary file
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
id: project-scope-in-an-unmarked-tree-does-not-walk-up
|
|
3
3
|
board: code
|
|
4
4
|
section: dx
|
|
5
|
-
status:
|
|
5
|
+
status: inflight
|
|
6
6
|
category: CLI · Bug
|
|
7
7
|
complexity: M
|
|
8
8
|
impact: Med
|
|
9
9
|
wow: 2
|
|
10
|
-
note:
|
|
10
|
+
note: (c) shipped; (a) built, reproduced as a regression and withdrawn — it orphans the rules and workflows recorded below the lock it walks up to, and engages for one item kind of three
|
|
11
11
|
order: 236
|
|
12
|
-
owner:
|
|
13
|
-
pr:
|
|
12
|
+
owner: loop/project-scope-walks-up
|
|
13
|
+
pr: 1034
|
|
14
14
|
title: "Project scope in an unmarked tree does not walk up, so <code>src/</code> becomes its own project"
|
|
15
15
|
---
|
|
16
16
|
<code>scopes.resolve_base</code> walks up for a VCS marker and, finding none, falls back to the
|
|
@@ -35,7 +35,26 @@ the nearest ancestor that is not <code>$HOME</code> · too greedy, it woul
|
|
|
35
35
|
sibling directories. Option (c): keep today's behaviour and say so · have
|
|
36
36
|
<code>install --local</code> warn once when it is about to create a project in a directory with no VCS
|
|
37
37
|
marker, naming the directory, so the second lock is a decision rather than a surprise. (c) is the
|
|
38
|
-
cheapest and the most honest; (a)
|
|
38
|
+
cheapest and the most honest; (a) looked worth pairing with it for every command after the first.
|
|
39
|
+
|
|
40
|
+
<b>(c) shipped alone · (a) was built, reproduced as a regression, and withdrawn.</b> The lock
|
|
41
|
+
walk exists (<code>scopes.project_lock_root</code>) but is <em>advisory</em>: it lets the warning name
|
|
42
|
+
the project above you, and decides no destination. Putting it in the resolution path broke two things
|
|
43
|
+
the sketch above did not anticipate. First, <b>it orphans the records below it</b> · a rule or
|
|
44
|
+
workflow installed with <code>--local</code> lives in the <em>user</em> lock against an absolute
|
|
45
|
+
<code>base</code>, and <code>--local</code> eligibility is <code>scopes.owns</code> against the base
|
|
46
|
+
resolved <em>now</em> — so one <code>install <skill> --local</code> at <code>proj</code>
|
|
47
|
+
made a rule at <code>proj/src</code> invisible to <code>list --local</code> and unremovable by
|
|
48
|
+
<code>uninstall --local</code>, from <code>proj/src</code> as much as from <code>proj</code>, with the
|
|
49
|
+
refusal naming the directory the user was standing in and the two error messages giving mutually
|
|
50
|
+
unsatisfiable instructions. Second, <b>it engages for one kind of three</b> ·
|
|
51
|
+
<code>_install_rule</code> and <code>_install_workflow</code> write no
|
|
52
|
+
<code>.boost/skill-lock.json</code> at all, so a tree holding only those never gains the marker, which
|
|
53
|
+
is also why the warning (c) adds can never be silenced there. The first is pinned by
|
|
54
|
+
<code>test_a_rule_below_an_ancestor_lock_is_still_removable_locally</code>, which fails the moment the
|
|
55
|
+
walk is put back; the second is a property of the installers rather than of this change, so nothing
|
|
56
|
+
here asserts it. Making the walk safe means giving rules and workflows a project boundary of their
|
|
57
|
+
own, and that is a different card.
|
|
39
58
|
|
|
40
59
|
Found by the adversarial verification of PR #998, which reproduced it end to end. <code>$HOME</code>
|
|
41
60
|
is still never a project and deletion is still gated by <code>resolve_in_base</code>, so this is a
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
id: shard-weights-do-not-predict-the-job-timeout
|
|
3
3
|
board: code
|
|
4
4
|
section: trust
|
|
5
|
-
status:
|
|
5
|
+
status: shipped
|
|
6
6
|
category: CI · Bug
|
|
7
7
|
complexity: M
|
|
8
8
|
impact: High
|
|
@@ -78,17 +78,50 @@ hide which had happened.
|
|
|
78
78
|
<b>It reproduces the failure it was derived to predict.</b> Six shards at these weights:
|
|
79
79
|
37.8 median minutes × 1.91 = a <b>72.3-minute tail</b> against a real worst job of
|
|
80
80
|
<b>72.5</b> — 96% of the cap. <code>plan --explain --timeout-minutes 75</code> now prints
|
|
81
|
-
that and exits 1. The matrix moved to <b>eight</b
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
slots. <code>tests/unit/test_mutation_shard_count.py</code> pins the shard count across
|
|
81
|
+
that and exits 1. The matrix moved to <b>eight</b> and then, once the weights were
|
|
82
|
+
re-anchored, to <b>twelve</b>, where the same arithmetic gives 28.5 × 1.91 = <b>54.4 min,
|
|
83
|
+
72% of the cap</b>; the largest unit still fits inside an even share, so the speedup cap is the
|
|
84
|
+
full width and more shards cost nothing but runner slots. <code>tests/unit/test_mutation_shard_count.py</code> pins the shard count across
|
|
85
85
|
<code>ci.yml</code> and <code>mutation-weights-refresh.yml</code> (<code>timeout-minutes</code>
|
|
86
86
|
cannot be read through <code>${{ }}</code>, so agreement is asserted rather than derived), and
|
|
87
87
|
re-runs the headroom check on the committed pack every build — a pack that would be
|
|
88
88
|
cancelled now fails in the <code>test</code> job in milliseconds.
|
|
89
89
|
|
|
90
|
-
<b>
|
|
91
|
-
|
|
92
|
-
<code>
|
|
93
|
-
|
|
90
|
+
<b>Twelve has now run, and it cost more than the plan said — which is the finding this
|
|
91
|
+
card closes on.</b> Over the 24 jobs of the two twelve-shard runs (<code>d7027cf8</code> and
|
|
92
|
+
main's <code>58ace415</code>) the observed p50 is <b>34.6 min</b> against the 28.5 predicted, and
|
|
93
|
+
the worst job <b>55.8</b> against the 54.4-minute tail those runs' own gate printed: 74% of the
|
|
94
|
+
cap. That exceedance is not new, and the tempting reading — that twelve is where the tail
|
|
95
|
+
estimate first broke — is wrong in the flattering direction. Replay every run's gate as it
|
|
96
|
+
actually stood — that commit's
|
|
97
|
+
own script against its own weights — and the predicted tail has been beaten at <b>four of
|
|
98
|
+
the six runs on record</b>: +1.1, +0.4 and <b>+8.9</b> at eight shards (<code>dd416340</code>,
|
|
99
|
+
54.2 predicted against a 63.1 worst) and +1.4 at twelve. The largest miss on record belongs to
|
|
100
|
+
eight.
|
|
101
|
+
|
|
102
|
+
<b>The width stands on that measured 74%. What does not stand is the margin the planner
|
|
103
|
+
prints.</b> On the weights committed since (#1032, a re-timing of the same mutants)
|
|
104
|
+
<code>plan --shards 12</code> said a 25.2-minute median and a 48.0-minute tail, 64% of the cap
|
|
105
|
+
— so that pack, asked about the run its own weights were timed from, under-predicted that
|
|
106
|
+
job by <b>7.8 minutes</b>. (#1038 has since re-timed the weights from the twelve-shard run on
|
|
107
|
+
<code>6fd38785</code>; <code>plan</code> now prints 26.2 / 50.1 min, 67% of the cap. That era's
|
|
108
|
+
shortfall is against <em>that</em> run's jobs, not the 55.8 above.) That is the prospective basis, which is the one that matters before
|
|
109
|
+
the next run and is <em>not</em> comparable to the replay figures above. Scored on the observed
|
|
110
|
+
median at the committed <code>TAIL_MULTIPLIER</code> the pack is 34.6 × 1.91 = 66.0 min,
|
|
111
|
+
<b>88% of the cap</b>.
|
|
112
|
+
|
|
113
|
+
<b>So the cap question is answered by a model that is the wrong shape, not merely mis-fitted.</b>
|
|
114
|
+
Graded against weights measured at its own width, eight implies a <code>RUNNER_EFFICIENCY</code>
|
|
115
|
+
of 0.832 and twelve implies 0.593 — 40% apart, and no single multiplicative constant is
|
|
116
|
+
both. The median falling only to 0.83 of itself where division through the origin predicts 0.667
|
|
117
|
+
says the same thing without reference to any weights at all.
|
|
118
|
+
|
|
119
|
+
<b>Not fixed here, and now its own card:</b> the model has no per-job <em>fixed</em> cost, so it
|
|
120
|
+
flatters every width above the one it was fitted at — see
|
|
121
|
+
<code>the-shard-model-has-no-per-job-fixed-cost</code>. Still tracked separately, and no longer
|
|
122
|
+
by the mechanism this card first described: a <code>cancelled</code> <code>ci</code> on main used
|
|
123
|
+
to notify nobody, because <code>ci-failure-alert</code> gated on <code>conclusion ==
|
|
124
|
+
'failure'</code>. #1025 inverted that to the negation of the green set, so a cancellation does
|
|
125
|
+
alert now — see <code>cancelled-ci-on-main-is-silent-and-skips-the-release</code> for what
|
|
126
|
+
is left of it.
|
|
94
127
|
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: the-shard-model-has-no-per-job-fixed-cost
|
|
3
|
+
board: code
|
|
4
|
+
section: trust
|
|
5
|
+
status: planned
|
|
6
|
+
category: CI · Model
|
|
7
|
+
complexity: M
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 3
|
|
10
|
+
note: the plan divides by every shard added, so it flatters every width above the one it was fitted at
|
|
11
|
+
order: 367
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: "The shard model runs through the origin, so <code>plan</code> gets more optimistic with every shard added"
|
|
15
|
+
---
|
|
16
|
+
<b>The cleanest statement of it needs no weights at all.</b> Going from eight shards to twelve,
|
|
17
|
+
a model that divides work by the shard count predicts the median job falls to <b>0.667</b> of
|
|
18
|
+
itself. It fell to <b>0.83</b> — 41.8 min over the 24 jobs of the three eight-shard runs to
|
|
19
|
+
34.6 over the 24 jobs of the two twelve-shard runs. Correcting for the one thing the weights
|
|
20
|
+
do say — #1032 re-timed the same mutants 0.884× cheaper — moves the prediction
|
|
21
|
+
to <b>0.589</b> and widens the gap, so the uncorrected figure is the conservative one. No value
|
|
22
|
+
of <code>RUNNER_EFFICIENCY</code> produces either, because the error is in the shape and not in the
|
|
23
|
+
constant: <code>runner_minutes</code> is <code>weight / (RUNNER_WORKERS ×
|
|
24
|
+
RUNNER_EFFICIENCY)</code>, linear through the origin, and what is missing is a per-job
|
|
25
|
+
<em>fixed</em> cost.
|
|
26
|
+
|
|
27
|
+
<b>Graded like for like, the two widths disagree by 40%.</b> Each width has to be scored against
|
|
28
|
+
weights measured at that width: #1029's 66,708,651 ms total was measured on an eight-shard run,
|
|
29
|
+
and #1032's 58,969,820 was re-timed from CI run 37200431822 — which is
|
|
30
|
+
<code>58ace415</code>, one of the two twelve-shard runs being graded. On that footing eight
|
|
31
|
+
implies an efficiency of <b>0.832</b> and twelve implies <b>0.593</b>. Reading both against one
|
|
32
|
+
frozen total hides this, and understates the gap as 24%.
|
|
33
|
+
|
|
34
|
+
<b>C is large and five routes do not agree on how large.</b> They differ in whether they use
|
|
35
|
+
medians or machine-minute sums, and in whether #1032's 0.884x re-timing is read as the work
|
|
36
|
+
really getting cheaper between the two widths: <b>20.2</b> and <b>24.2</b> min a job from the two
|
|
37
|
+
p50s, <b>14.4</b> and <b>19.8</b> from the matrix totals (347.6 machine-minutes at eight over
|
|
38
|
+
four runs, 404.9 at twelve over two), and <b>26.9</b> from the six-to-eight step of 2026-10-02
|
|
39
|
+
— 287.2 → 341.0 machine-minutes two hours apart with the width the only change. So
|
|
40
|
+
<b>C is 14 to 27 min a job</b>. A two-point solve is exactly determined and therefore not
|
|
41
|
+
falsifiable; fitting C needs a third width, not more runs at twelve.
|
|
42
|
+
|
|
43
|
+
<b>And C cannot be bolted on beside the efficiency, which is the part that makes this a card
|
|
44
|
+
rather than a one-line patch.</b> Subtract any C in that range from the matrix total and the
|
|
45
|
+
parallel work left over implies a speedup above four on a four-vCPU runner: C = 14.4 leaves 232.4
|
|
46
|
+
min against 1,111.8 weight-minutes, which is <b>4.78</b> effective workers, and C = 24.2 leaves
|
|
47
|
+
154.0, which is <b>7.22</b>. An efficiency over 1.0 is a contradiction, not a tight fit, so the
|
|
48
|
+
weights overstate real serial work by roughly the same factor and
|
|
49
|
+
<code>PLANNED_TOTAL_MS</code> cannot serve as the fixed reference a re-fit is measured against.
|
|
50
|
+
A hypothesis, named as one because it has not been measured: mutmut times each mutant while four
|
|
51
|
+
of them run at once, so a per-mutant duration may already carry the contention
|
|
52
|
+
<code>RUNNER_EFFICIENCY</code> exists to apply.
|
|
53
|
+
|
|
54
|
+
<b>The naive remedy is worse than the status quo, so it is worth writing down as refuted.</b>
|
|
55
|
+
Adding C to the existing conversion with the committed efficiency — <code>C +
|
|
56
|
+
runner_minutes(w)</code> at C = 20, each width on its own weights as this card requires —
|
|
57
|
+
predicts <b>62.7 min at eight</b> against an observed 41.8 and <b>45.2 at twelve</b> against an
|
|
58
|
+
observed 34.6: over-predicting by <b>50%</b> and <b>31%</b>. The bias is not even, which is the
|
|
59
|
+
point — a fixed term added to an unchanged efficiency does not just shift the answer, it
|
|
60
|
+
gets the width dependence wrong in the other direction. The tail it produces at twelve is
|
|
61
|
+
<b>86.2 min, 115% of the cap</b>: the planner would refuse the width CI
|
|
62
|
+
runs green today. C and <code>RUNNER_EFFICIENCY</code> have to move together, and whatever they
|
|
63
|
+
do to the predicted median then has to be reconciled with
|
|
64
|
+
<code>TAIL_MULTIPLIER</code>, whose over-estimate is currently covering for the median being low.
|
|
65
|
+
|
|
66
|
+
<b>It is not CI setup, and that is the cheap half to check.</b> Stepping all 24 twelve-shard jobs
|
|
67
|
+
through the Actions job API, everything that is not the <code>mutate shard</code> step is a
|
|
68
|
+
median <b>0.5 min</b> — the 1.7% the constant's docstring already measured at six, still
|
|
69
|
+
true. So the fixed cost is inside mutmut: a baseline test run (the <code>tests</code> job on
|
|
70
|
+
those two runs took 7.8 and 8.6 min) and per-job mutant collection are the candidates, and
|
|
71
|
+
neither has been measured. Measuring them would turn the 14-27 range into a mechanism.
|
|
72
|
+
|
|
73
|
+
<b>Why it matters even though nothing is red.</b> Twelve sits at 74% of the cap empirically and
|
|
74
|
+
the gate passes. But <code>plan</code> reported 64% on #1032's pack against that same
|
|
75
|
+
measured 74%, and goes on reporting around half the cap at sixteen — 48% on #1032's weights, 50% on
|
|
76
|
+
#1038's — where the real floor is <code>C ×
|
|
77
|
+
TAIL_MULTIPLIER</code> however many shards are added. So the one question the planner exists to
|
|
78
|
+
answer — "is this width safe?" — is answered optimistically for every width above the
|
|
79
|
+
fitted one, and the answer gets more optimistic the further you go. Until C is fitted,
|
|
80
|
+
<code>test_the_committed_width_has_actually_run</code> refuses a <code>SHARDS</code> nothing has
|
|
81
|
+
been observed at, and <code>test_todays_pack_under_predicts_the_worst_twelve_shard_job</code>
|
|
82
|
+
pins the 7.8-minute shortfall so it cannot drift unnoticed.
|