boost-skill-cli 1.2.165__tar.gz → 1.2.167__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.165 → boost_skill_cli-1.2.167}/PKG-INFO +1 -1
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/journal.py +1 -1
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_skill_cli.egg-info/PKG-INFO +1 -1
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_skill_cli.egg-info/SOURCES.txt +3 -1
- boost_skill_cli-1.2.167/docs/roadmap/items/shard-weights-do-not-predict-the-job-timeout.md +57 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/text-io-leaves-its-encoding-to-the-locale.md +44 -24
- boost_skill_cli-1.2.167/docs/roadmap/items/writers-whose-bytes-are-compared-do-not-pin-their-newline.md +49 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap.html +106 -75
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_workspace_scope.py +5 -3
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_canary_deps.py +2 -2
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_eval_baseline.py +7 -5
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_eval_corpus.py +1 -1
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_gemini_agent_sanitize.py +3 -2
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_journal.py +32 -1
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_mutation_shards.py +51 -36
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_mutation_subfile_shards.py +28 -21
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_mutation_weights_drift.py +1 -1
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_shards.py +1 -1
- boost_skill_cli-1.2.167/tests/unit/test_text_io_names_its_encoding.py +496 -0
- boost_skill_cli-1.2.165/tests/unit/test_mutation_shards_names_its_encoding.py +0 -296
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/.gitattributes +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/.gitignore +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/.lycheeignore +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/.vale/styles/boost/AIWriting.yml +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/.vale.ini +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/CLAUDE.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/DCO +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/GOVERNANCE.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/LICENSE +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/MAINTAINERS.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/MANIFEST.in +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/Makefile +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/README.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/SECURITY.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/SUPPORT.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/commands/quickstart.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/aihost.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/archive.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/bmad.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/bootstrap.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/browse.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/builtin.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/catalogbundle.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/cohort.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/compact.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/complete.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/deps.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/discovery.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/hookhost.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/jsonstate.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/prereq.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/report.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/shards.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/typedvalue.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/data/rules/boost-first.mdc +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_langchain/__init__.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_langchain/_compat.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_langchain/graph.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_langchain/loader.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_langchain/py.typed +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_langchain/retriever.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/codecov.yml +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/adapters.html +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/bmad.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/carousel.html +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/chat.html +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/code-review.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/commands.html +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/commit-audit.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/demo.gif +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/demo.html +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/demo.tape +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/dependencies.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/eval-latest.json +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/eval.html +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/index.html +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/langchain.html +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/openssf-badge.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/BOOST-D27.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/a-correct-link-in-a-locked-dir-reads-as-refused.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/a-new-shipped-card-always-404s-its-own-write-up-link.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/a-refusal-and-its-remedy-never-wrapped.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/agent-dir-shapes-install-still-trips-on.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/ai-backend-fanout.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/an-item-materialized-nowhere-reads-ok-in-verify-health-drift.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-absorb-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-adapt-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-adapt-renders-every-sibling-of-a-flat-agents-dir-workflow-as.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-adapt-run-stats-edit-tag-export-reject-the-tap-name-qualifie.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-ai-degrade-note-blames-path-api-keys-regardless-of-cause-sev.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-attest-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-audit-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-bmad-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-browse-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-bundle-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-catalog-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-catalog-resolve-one-s-duplicate-name-hint-advertises-path-to.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-changelog-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-chat-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-clean-counts-failed-removals-as-cleaned-journals-the-inflate.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-cli-py-commands-summaries-and-parser-help-contradict-behavio.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-cohort-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-completions-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-config-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-config-policy-set-store-type-unchecked-values-consumers-cras.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-context-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-corrupt-settings-config-state-json-silently-read-as-empty-th.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-create-distill-infer-absorb-install-silently-replace-an-inst.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-create-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-declined-confirms-never-name-y-boost-assume-yes-snapshot-cle.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-deps-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-discover-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-distill-s-heuristic-merge-drops-repeated-fences-braces-writi.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-doctor-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-drift-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-dry-runs-disagree-with-the-real-run-compact-counts-bytes-it.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-edit-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-evolve-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-explain-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-export-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-export-o-cohort-create-and-profile-save-silently-overwrite-e.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-fingerprint-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-five-exit-70-crashes-on-bad-paths-data-catalog-export-serve.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-focus-profile-sideline-by-unlinking-without-recording-it-lis.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-git-operations-never-set-git-terminal-prompt-0-so-a-404-priv.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-health-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-hooks-remove-n-cannot-find-hooks-boost-itself-added-unknown.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-import-all-skips-the-injection-secret-scans-and-the-per-skil.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-import-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-index-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-info-stats-explain-render-a-different-smaller-shape-for-rule.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-install-dry-run-promises-agents-the-real-install-never-write.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-install-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-install-local-writes-empties-the-repo-s-mcp-json-silently-of.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-json-accepted-but-ignored-on-many-branches-cohort-config-pol.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-lint-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-log-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-log-simulate-changelog-headings-echo-the-raw-qualified-argum.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-mcp-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-mcp-register-s-boost-first-consent-names-only-the-registered.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-missing-json-on-doctor-test-health-changelog-trending-log-ho.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-name-miss-errors-unknown-tap-qualifier-unnamed-no-close-matc.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-onboard-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-out-table-clips-data-columns-to-an-assumed-80-columns-when-s.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-out-warn-defaults-to-stdout-infer-absorb-corrupt-skill-md-se.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-outdated-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-output-wrap-tokens-splits-punctuation-off-backtick-spans-ins.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-pinned-taps-silently-moved-to-head-by-update-re-clone-and-co.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-policy-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-preview-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-profile-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-project-scope-seams-uninstall-verify-list-info-reinstall-dis.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-protocol-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-pulse-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-quarantine-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-quarantine-pin-state-invisible-list-info-doctor-report-links.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-quickstart-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-recommend-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-reindex-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-reinstall-sync-repair-and-audit-resolve-by-name-tap-ignoring.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-replay-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-root-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-rules-workflows-reported-as-skills-uninstall-claims-a-store.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-run-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-schedule-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-search-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-simulate-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-singular-plural-misses-1-skills-1-issue-need-1-skill-pass-ac.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-six-count-flags-tap-chat-absorb-lint-changelog-hooks-skip-ut.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-skill-profile-name-slugging-is-inconsistent-distill-o-accept.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-snapshot-restore-replaces-the-lock-wholesale-orphaning-newer.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-stale-prose-after-shipped-changes-catalog-export-live-discov.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-stray-positionals-and-inapplicable-flags-silently-ignored-ac.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-sweep-positionals-json-lack-help-strings-and-no-command-help.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-sync-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-tag-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-tap-dry-run-is-silently-ignored-outside-catalog-spec-and-def.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-tap-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-taps-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-taps-outdated-decay-policy-snapshot-json-emit-display-string.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-test-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-trust-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-trust-verify-labels-a-manifest-tampered-after-signing-by-a-t.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-unpin-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-untap-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-update-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-verify-drift-say-nothing-installed-exit-0-and-doctor-says-lo.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-verify-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/audit-who-findings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/bare-boost-never-names-an-entry-point.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/because-that-was-not-the-reason.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/bm25-empty-tokenization-kills-catalog-fallback.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/bmad-done-contract-ignores-the-track.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/bmad-gemini-gets-claude-hook-output.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/bmad-personas-delegate-outside-the-router.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/bmad-roster-drifted-from-bmad-6-12.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/bmad-route-ignores-autopilot-state.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/bmad-router-one-keyword-decides-the-track.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/bmad-router-reads-each-prompt-alone.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/boost-first-rule.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/branch-current-gate.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/cache-writers-that-still-crash-on-a-read-only-cache.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/canary-deps-check-skips-in-the-required-job.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/capability-policy-skips-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/catalog-categories-beyond-curated.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/ci-summary-reports-the-wrong-coverage-gate.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/claude-md-instructs-the-wrong-licence-header.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/cli-audit-2026-08-full-sweep.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/cli-command-audit.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/codex-hooks-timeout-units-are-unestablished.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/codex-is-not-an-mcp-host.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/compact-answers-a-named-tap-with-a-global-all-clear.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/concurrency-probe-measured-a-race-not-the-pool.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/concurrent-rag-builds-delete-each-others-temp-index.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/config-json-edge-shapes-crash-or-disagree.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/corpus-refresh-updates-data-not-prose.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/corrupt-config-reads-as-ready-to-set-up.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/count-flags-that-silently-invert.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/delay-true-defeats-the-log-suppress.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/dense-kill-switch-has-no-reason-state.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/dense-local-built-store-displaced-by-a-key.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/dense-no-key-guard-is-unreachable.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/dense-ready-but-embedder-cannot-run.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/dense-reindex-has-no-progress-or-durability.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/dense-reindex-reuses-whole-taps.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/dense-store-holds-every-vector-once-per-copy.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/doctor-prescribes-sync-that-deletes-live-links.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/err-colour-judged-by-stdout.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/err-multiline-hint-colours-across-the-newline.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/eval-corpus-counted-by-the-method-the-repo-disavows.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/eval-corpus-duplication-is-intra-tap-not-mirrors.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/eval-floor-calibration-stale-after-pin-refresh.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/eval-gate-scores-a-body-less-corpus.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/exemplar-graded-golden-set-runs-in-no-gate.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/explain-outline-has-no-cap.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/floors-job-never-installed-setuptools.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/free-threaded-canary-warns-about-nothing.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/gate-parity-test-ignores-k-and-golden.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/gated-golden-set-has-zero-exemplars.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/gstack-tap-first-then-coexistence.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/hooks-list-drops-the-name-before-the-host.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/identifier-columns-shrink-to-a-name-no-command-accepts.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/import-budget-gate-passes-when-boost-cannot-import.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/info-deps-materialize-a-dir-they-then-reject.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/install-cannot-tell-a-skill-needs-another-one.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/install-path-disambiguation.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/install-paths-that-still-drop-the-result.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/is-dir-follows-a-symlink-at-eleven-rmtree-call-sites.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/keyed-no-store-hint-disagrees-with-shard-remedy.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/lighthouse-flips-on-byte-identical-input.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/links-job-503s-its-own-write-up-links.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/lock-kept-links-it-had-just-removed.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/manifest-in-prunes-only-the-root-copy.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mcp-cannot-read-a-skill-before-installing.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mcp-doctor-says-healthy-where-mcp-search-says-nothing-is-tapped.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mcp-install-description-omits-antigravity.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mcp-miss-reply-echoes-the-whole-query.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mcp-registration-writes-outside-a-sandboxed-home.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mcp-search-cost-overstated-on-keyless-machines.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mcp-server-dies-on-a-valid-json-message-that-is-not-an-object.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mcp-session-dies-on-a-deeply-nested-json-line.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mcp-skip-list-absent-from-tool-descriptions.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mutation-shard-balance-hints-are-a-release-behind.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mutation-shards-rerun-full-set-every-push.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/near-identical-copies-still-eat-the-slots.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/one-bad-agent-dir-silences-the-whole-doctor-report.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/one-failed-shard-job-drops-registries-from-the-manifest.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/openssf-silver.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/osps-baseline-levels.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/panel-fits-data-to-an-assumed-80-in-a-pipe.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/project-scope-in-an-unmarked-tree-does-not-walk-up.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/project-uninstall-deletes-any-in-repo-directory-the-lock-names.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/publish-the-keyword-index.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/published-shards-have-no-consumer.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/quickstart-drops-incompatible-shard-status.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/quickstart-manifest-error-drops-hint-and-misnames-cause.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/quickstart-rerun-retargets-tapped-registries.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/quickstart-says-ready-exit-0-after-every-tap-failed.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/quickstart-shard-download-invisible-in-preview-and-run.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/read-only-boost-home-with-no-cache-dir.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/readme-81-command-table-lists-80-omits-quickstart.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/readme-hero-installs-a-name-no-starter-registry-ships.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/reclone-leaves-a-clone-on-head-when-it-cannot-reach-the-pin.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/recommend-recomputes-its-columns-per-row.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/refresh-strands-the-natural-set-baseline.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/reindex-reported-a-completeness-share-it-could-not-compute.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/release-guard-fails-open-when-it-cannot-read-tags.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/relicence-apache-2.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/required-eval-gate-still-grades-by-name.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/roadmap-boards-advertise-python-39.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/rule-and-workflow-rows-carry-a-scope-nothing-but-list-local-reads.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/sandbox-fixture-does-not-sandbox-the-working-directory.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/search-caps-the-two-copyable-identifiers.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/search-drops-symbol-language-queries-silently.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/search-footer-not-fitted-to-the-pane-its-rows-were-fitted-to.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/search-footer-overflows-40-col-pane-gate-passes-by-luck.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/search-relevance-meter-is-constant-on-default-page.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/search-rows-use-term-width-so-piping-drops-the-tap-column.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/shard-refresh-skips-processed-commits.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/shard-runs-reembed-everything-weekly.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/shrink-the-published-index.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/stale-gate-sizes-in-readme-and-contributing.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/stale-tap-hint-dead-for-tap-only-installs.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/surface-dehyphenation-rationale-is-false.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/sweep-died-at-a-page-not-at-launch.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/sync-repairs-a-disabled-agents-row-every-run.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/table-fit-widths-floor-destroys-columns-and-still-overflows.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/taps-vouches-for-a-clone-that-is-not-there.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/the-install-path-hands-agy-claudes-mcp-argv.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/the-links-concurrency-cap-did-not-hold.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/the-model-back-off-mixes-two-clocks.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/the-windows-test-cap-is-five-minutes-from-the-measurement.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/tier3-ceiling-unreachable-at-default-n.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/typos-reported-as-boost-bugs.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/uninstall-local-cannot-remove-a-rule-or-workflow-list-local-shows.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/unreadable-tap-cache-healthy-doctor-crashing-heal.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/unwritable-agent-dir-has-no-remedy.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/unwritable-rule-or-workflow-dir-crashes-install.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/util-rmtree-chmods-a-symlink-target-outside-the-tree.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/vex-openvex-feed.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/weekly-vectors-had-no-ingestion-path.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/wrap-width-judged-by-stdout.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/zip-strict-audit.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/security-design.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/semantic-search.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/verifying-releases.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/vex/meta.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/vex/openvex.json +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/evals/README.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/evals/__init__.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/evals/baseline.json +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/evals/metrics.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/evals/publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/examples/README.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/index.html +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/noxfile.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/pyproject.toml +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/add_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/build_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/build_vex.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/check_branch_current.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/check_dco.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/check_reproducible.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/eval_corpus.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/eval_tools.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/measure_near_duplicate_bound.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/measure_registry.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/normalize_sdist.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/page_budget.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/publish_eval_json.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/publish_shards.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/serve_docs.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/scripts/shard_plan.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/setup.cfg +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/sonar-project.properties +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/style/README.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/style/boost.css +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/style/boost.js +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/style/demo.html +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/conftest.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/eval/fixtures/claude_init_event.jsonl +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/eval/taps-scale.txt +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/eval/tool_calls.jsonl +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_bad_input_is_not_a_crash.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_bmad_all_hosts.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_bmad_personas_scope.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_cli_catalog.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_cli_hooks_codex.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_cli_hooks_gemini.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_cli_identifier_columns.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_cli_json_reports.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_cli_pane_width.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_cli_quickstart.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_cli_tap_pins.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_context_sees_an_unborn_branch.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_count_flags_reject_nonpositive.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_keyed_no_store_hint.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_kind_conformance.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_recommend_because_is_true.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_repo_root_guard_covers_real_installs.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_reports_match_reality.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/langchain/conftest.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/langchain/test_graph.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/langchain/test_loader.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/langchain/test_retriever.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/data/bmad-skills-6.12.0.json +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_action_pin_lockstep.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_aihost.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_archive.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_bmad_core.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_boost_first_offer.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_bootstrap.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_bot_pr_dco.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_branch_current.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_browse.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_builtin.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_catalog_distinct.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_catalog_keyword_words.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_catalogbundle.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_check_dco.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_check_reproducible.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_claude_settings_codex.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_clean_internal_cache.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_cli_update_shards.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_cohort.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_compact.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_complete.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_complete_rc_block.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_content_identity.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_corpus_prose.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_count_flags_use_positive_int.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_coverage_gate_prose.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_crash_redaction.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_dense_boilerplate_cluster.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_dense_embed_dedupe.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_dense_entry_reuse.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_dense_entry_vectors.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_dense_model_unavailable.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_dense_progress.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_dense_quantized.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_dense_ready_order.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_dense_shard_real_schema.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_dense_status_cheap.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_dense_vector_dedupe.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_deps.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_discovery.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_distill_merge.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_doctor_output_polish.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_drift_hint.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_dry_run_parity.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_embed_outranking.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_embed_truncated_response.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_eval_corpus_bodies.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_eval_grading.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_eval_query_sets.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_eval_tools.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_eval_tools_probe.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_first_run_pointer.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_gitutil_lfs.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_gitutil_sparse.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_gstack_coexistence.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_help_contracts.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_hook_settings_hosts.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_hookhost.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_hookhost_codex.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_install_permission_error.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_jsonstate.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_langchain_packaging.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_launcher_python_floor.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_lighthouse_budgets.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_link_ownership.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_mcp_install_sandbox_home.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_mcp_read.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_measure_registry.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_near_duplicate_collapse.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_normalize_sdist.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_output_table_drop.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_output_table_whole.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_page_budget.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_prereq.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_quickstart_readiness.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_rag_completeness.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_rag_extra_hint.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_rag_fastpath.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_read_text_arg.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_registry_control_chars.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_registry_parallel.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_repo_root_guard.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_report.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_rerank_cache.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_retrieve_any_near_duplicates.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_sandbox_fixture_cwd.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_schedule_plist.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_sdist_contents.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_serve_docs.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_shard_plan.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_shards_carry_forward.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_shards_incremental.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_shards_ingest.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_shards_matrix.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_smoke_covers_every_command.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_store_materialize.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_sync_blocked_links.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_sync_lost_lock.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_tap_pins.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_typedvalue.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_upstream_path.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_version_tags.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_vex.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_visual_harness_capture.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_visual_harness_flags.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_workflow_concurrency_groups.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_workflow_push_has_credentials.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/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.167'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 2, 167)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -52,7 +52,7 @@ def log(action: str, subject: str = "", **fields) -> None:
|
|
|
52
52
|
p = paths.pulse_path()
|
|
53
53
|
try:
|
|
54
54
|
p.parent.mkdir(parents=True, exist_ok=True)
|
|
55
|
-
with p.open("a") as f:
|
|
55
|
+
with p.open("a", encoding="utf-8") as f:
|
|
56
56
|
f.write(json.dumps(event) + "\n")
|
|
57
57
|
except OSError as e:
|
|
58
58
|
if not _WARNED_UNSAVED:
|
|
@@ -655,6 +655,7 @@ docs/roadmap/items/serve-is-a-searchable-catalogue.md
|
|
|
655
655
|
docs/roadmap/items/serve-py-traversal-guards-untested.md
|
|
656
656
|
docs/roadmap/items/shard-refresh-skips-processed-commits.md
|
|
657
657
|
docs/roadmap/items/shard-runs-reembed-everything-weekly.md
|
|
658
|
+
docs/roadmap/items/shard-weights-do-not-predict-the-job-timeout.md
|
|
658
659
|
docs/roadmap/items/shards-pipeline-never-produced-a-shard.md
|
|
659
660
|
docs/roadmap/items/shareable-catalogue-bundle.md
|
|
660
661
|
docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md
|
|
@@ -723,6 +724,7 @@ docs/roadmap/items/workflow-linting-actionlint.md
|
|
|
723
724
|
docs/roadmap/items/workflow-sast-zizmor.md
|
|
724
725
|
docs/roadmap/items/workspace-scope-install.md
|
|
725
726
|
docs/roadmap/items/wrap-width-judged-by-stdout.md
|
|
727
|
+
docs/roadmap/items/writers-whose-bytes-are-compared-do-not-pin-their-newline.md
|
|
726
728
|
docs/roadmap/items/zip-strict-audit.md
|
|
727
729
|
docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md
|
|
728
730
|
docs/roadmap/items/zizmor-pin-is-a-yanked-release.md
|
|
@@ -1031,7 +1033,6 @@ tests/unit/test_measure_registry.py
|
|
|
1031
1033
|
tests/unit/test_minisign.py
|
|
1032
1034
|
tests/unit/test_mutation_hardening.py
|
|
1033
1035
|
tests/unit/test_mutation_shards.py
|
|
1034
|
-
tests/unit/test_mutation_shards_names_its_encoding.py
|
|
1035
1036
|
tests/unit/test_mutation_subfile_shards.py
|
|
1036
1037
|
tests/unit/test_mutation_weights_drift.py
|
|
1037
1038
|
tests/unit/test_mutmut_source_paths.py
|
|
@@ -1103,6 +1104,7 @@ tests/unit/test_sync_blocked_links.py
|
|
|
1103
1104
|
tests/unit/test_sync_lost_lock.py
|
|
1104
1105
|
tests/unit/test_sync_repairs_gutted_skill.py
|
|
1105
1106
|
tests/unit/test_tap_pins.py
|
|
1107
|
+
tests/unit/test_text_io_names_its_encoding.py
|
|
1106
1108
|
tests/unit/test_token_parity.py
|
|
1107
1109
|
tests/unit/test_toolchain_lock.py
|
|
1108
1110
|
tests/unit/test_trustaudit.py
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: shard-weights-do-not-predict-the-job-timeout
|
|
3
|
+
board: code
|
|
4
|
+
section: trust
|
|
5
|
+
status: planned
|
|
6
|
+
category: CI · Bug
|
|
7
|
+
complexity: M
|
|
8
|
+
impact: High
|
|
9
|
+
wow: 4
|
|
10
|
+
note: the pack is balanced to within 700ms of ideal and a shard still timed out at 75 min, cancelling a release
|
|
11
|
+
order: 364
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: "Mutation shard weights balance perfectly and predict nothing, so a shard can time out and cancel a release"
|
|
15
|
+
---
|
|
16
|
+
<b>Observed, on the merge of #1015.</b> <code>mutation-shard (4)</code> ran 75 minutes against the
|
|
17
|
+
job's <code>timeout-minutes: 75</code> and was cancelled. The aggregate <code>mutation</code> job
|
|
18
|
+
then failed, the whole <code>ci</code> run concluded <code>cancelled</code> rather than
|
|
19
|
+
<code>failure</code>, and <code>publish.yml</code> — which gates on
|
|
20
|
+
<code>workflow_run.conclusion == 'success'</code> — skipped. <b>A merge to main silently did
|
|
21
|
+
not ship</b>, which is the exact failure mode the long comment above <code>ci.yml</code>'s
|
|
22
|
+
<code>concurrency:</code> block was written to prevent by a different route.
|
|
23
|
+
|
|
24
|
+
<b>The packer is not at fault, and that is the finding.</b>
|
|
25
|
+
<code>mutation_shards.py plan --shards 6 --explain</code> reports every shard within <b>700 ms</b>
|
|
26
|
+
of the ideal 6,884,259 ms — a balance of 0.01%. The same run measured 39, 27, 38, 36,
|
|
27
|
+
<b>76</b> and 65 minutes. Perfect balance against numbers that do not predict wall clock.
|
|
28
|
+
|
|
29
|
+
<b>The units are the tell.</b> Total weight is 41,305,555 ms over six shards, so the plan
|
|
30
|
+
predicts <b>114 minutes per shard</b> while shards finish in 27–76. The weights are
|
|
31
|
+
self-consistent ratios measured somewhere other than a CI runner, and ratios are all the
|
|
32
|
+
packer needs — but it means <b>nothing in the repo can answer "will a shard exceed the
|
|
33
|
+
cap?"</b>. <code>plan --explain</code> prints the speedup cap and the largest unit; it never
|
|
34
|
+
mentions <code>timeout-minutes</code>, and <code>grep</code> finds no comparison between the two
|
|
35
|
+
anywhere in <code>scripts/mutation_shards.py</code>.
|
|
36
|
+
|
|
37
|
+
<b>Run-to-run variance eats the margin.</b> The same tree, built twice: shard 4 took 66 min on
|
|
38
|
+
<code>5aaf8bc4</code> (the PR) and 76 min on <code>f196160d</code> (its merge commit); shard 5 went
|
|
39
|
+
42 → 65. On <code>8c4a5094</code> shard 4 was 32. So the heaviest shard's observed range is
|
|
40
|
+
32–76 minutes for identical work, and the cap is 75. Related and probably the same cause:
|
|
41
|
+
<code>mutation-shard (4)</code> on #1012 died at 15.1 minutes with exit 143 (SIGTERM), diagnosed
|
|
42
|
+
then as runner eviction.
|
|
43
|
+
|
|
44
|
+
<b>Why the open weights-refresh PR does not fix it.</b> #1014 re-measures and re-packs; under its
|
|
45
|
+
weights the plan is again balanced to within ~400 ms, and predicts 121 min/shard. Re-measuring a
|
|
46
|
+
quantity that was never in runner time produces a better-calibrated version of the same
|
|
47
|
+
unanswerable question.
|
|
48
|
+
|
|
49
|
+
<b>Shape of the work.</b> Three independent pieces, in increasing order of how much they fix:
|
|
50
|
+
calibrate the weights against observed job duration (the API has it per shard, per run) so the
|
|
51
|
+
plan is in minutes a human can compare to the cap; have <code>plan</code> fail, or at least warn,
|
|
52
|
+
when a packed shard's predicted time is within some margin of <code>timeout-minutes</code>; and
|
|
53
|
+
give the heaviest shard headroom — at eight shards the ideal drops by a quarter, and the
|
|
54
|
+
speedup cap is 6.0x only because <code>store.py</code> is split per function already, so more
|
|
55
|
+
shards is cheap. Separately, a cancelled <code>ci</code> on main should be loud: it currently
|
|
56
|
+
looks identical to a success from the release path's point of view, because
|
|
57
|
+
<code>publish.yml</code> only asks whether the conclusion was <code>success</code>.
|
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
id: text-io-leaves-its-encoding-to-the-locale
|
|
3
3
|
board: code
|
|
4
4
|
section: compat
|
|
5
|
-
status:
|
|
5
|
+
status: shipped
|
|
6
6
|
category: Portability · Windows
|
|
7
7
|
complexity: M
|
|
8
8
|
impact: Med
|
|
9
9
|
wow: 2
|
|
10
|
-
note: 73
|
|
10
|
+
note: all 73 encoded; the guard is repo-wide over 414 files; the newline half is its own card
|
|
11
11
|
order: 362
|
|
12
|
-
owner:
|
|
13
|
-
pr:
|
|
14
|
-
title: "73 reads and writes
|
|
12
|
+
owner: loop/text-io-encoding
|
|
13
|
+
pr: 1015
|
|
14
|
+
title: "73 reads and writes left the text encoding to the locale, and the Windows jobs were the only thing that noticed"
|
|
15
15
|
---
|
|
16
16
|
<code>Path.read_text()</code>, <code>Path.write_text()</code> and <code>open()</code> in text mode use
|
|
17
17
|
<code>locale.getencoding()</code> when no <code>encoding=</code> is given. On Linux and macOS that is UTF-8
|
|
@@ -52,21 +52,35 @@ have refused a valid measurement and said "not readable JSON".
|
|
|
52
52
|
<b>preview</b> rule, so <code>ruff check --select PLW1514</code> without <code>--preview</code> checks
|
|
53
53
|
nothing at all and prints "All checks passed" — indistinguishable from a clean tree, and a trap
|
|
54
54
|
this card fell into once already. And with <code>--preview</code> it resolves the receiver
|
|
55
|
-
syntactically
|
|
56
|
-
<
|
|
57
|
-
<code>
|
|
58
|
-
<code>tmp_path</code> fixture
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
<code>
|
|
62
|
-
|
|
63
|
-
rather than by being rewritten.
|
|
55
|
+
<em>syntactically</em>, which over this repo means it sees almost nothing: run against the
|
|
56
|
+
pre-sweep tree it reports <b>0</b> sites to the walker's <b>73</b>. It flags
|
|
57
|
+
<code>p.read_text()</code> only where <code>p = Path(...)</code> is in view, and all 73 are a
|
|
58
|
+
<code>tmp_path / "x"</code> fixture, a chained call or a parameter — including the
|
|
59
|
+
<code>md.read_text()</code> that actually broke CI. 0 against 73 is the clearest statement of the gap
|
|
60
|
+
there is, and the reason the rule was not simply switched on. Turning it on also means turning
|
|
61
|
+
<code>preview</code> on in <code>pyproject.toml</code>, which changes how every other selected rule
|
|
62
|
+
behaves; one rule, for 0 of the 73, is not that trade.
|
|
64
63
|
|
|
65
|
-
<b>
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
<code>
|
|
64
|
+
<b>What shipped.</b> All 73 sites name <code>encoding="utf-8"</code>, and the guard
|
|
65
|
+
— renamed <code>tests/unit/test_text_io_names_its_encoding.py</code>, since it is no longer about
|
|
66
|
+
the shard planner — walks every root holding Python rather than a <code>WATCHED</code> list of two:
|
|
67
|
+
<code>boost_cli</code>, <code>boost_langchain</code>, <code>evals</code>, <code>scripts</code>,
|
|
68
|
+
<code>tests</code> and <code>noxfile.py</code>, <b>414</b> files. Its <code>EXEMPT</code> set is empty and
|
|
69
|
+
documented to stay empty: a call that should not be flagged is a bug in <code>_is_file_open</code> or
|
|
70
|
+
<code>_mode</code>, where fixing it covers every file, not an entry that mutes one. The
|
|
71
|
+
<code>./boost</code> launcher is the one deliberate omission — it is a bash shim that
|
|
72
|
+
<code>ast.parse</code> cannot read and that opens no files.
|
|
73
|
+
|
|
74
|
+
<b>The single <code>boost_cli</code> site was the interesting one.</b>
|
|
75
|
+
<code>journal.log</code> appended to the pulse feed with <code>p.open("a")</code> while
|
|
76
|
+
<code>journal.events</code> read it back with <code>encoding="utf-8"</code>. That asymmetry is latent
|
|
77
|
+
rather than live: <code>json.dumps</code> defaults to <code>ensure_ascii=True</code>, so every byte
|
|
78
|
+
written today is ASCII and cp1252 agrees with UTF-8 about all of them. What makes it worth fixing is
|
|
79
|
+
the reader's <code>errors="replace"</code>, which would turn the first byte they ever disagreed about
|
|
80
|
+
into U+FFFD without raising — a feed that silently loses a character rather than failing. A
|
|
81
|
+
round-trip test cannot show any of this on Linux, so the test watches the argument reaching
|
|
82
|
+
<code>Path.open</code> instead of the bytes on disk; dropping the keyword and misspelling the codec
|
|
83
|
+
both fail it.
|
|
70
84
|
|
|
71
85
|
<b>The encoding is only half of what text mode decides.</b> It also translates <code>\n</code> to the
|
|
72
86
|
platform separator on write, so a file written with <code>encoding="utf-8"</code> on a Windows runner
|
|
@@ -76,8 +90,14 @@ the encoding leaves every writer whose output is compared against a string, a ha
|
|
|
76
90
|
still platform-dependent, so this card covers <code>newline="\n"</code> on writers as well —
|
|
77
91
|
readers need nothing, since universal newlines already fold CRLF on the way in.
|
|
78
92
|
|
|
79
|
-
That second sweep is <b>
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
93
|
+
That second sweep is <b>917</b> writes on the tree this change ships (858 <code>tests</code>, 32
|
|
94
|
+
<code>boost_cli</code>, 21 <code>scripts</code>, 6 <code>evals</code>; 916 on <code>origin/main</code>,
|
|
95
|
+
and the 910 this card first quoted was the same count taken before <code>evals</code> was in the walk)
|
|
96
|
+
and is <b>deliberately not in this change</b>, because unlike the encoding it
|
|
97
|
+
must <em>not</em> be applied everywhere: a write whose bytes nobody compares is fine as it is, so a
|
|
98
|
+
blanket pass would be 917 edits of which most are churn and none is a fix. Scoping the subset that
|
|
99
|
+
is read back and compared is work of its own, and it has its own card —
|
|
100
|
+
<code>writers-whose-bytes-are-compared-do-not-pin-their-newline</code>. The newline walker
|
|
101
|
+
(<code>unpinned_newline</code>) ships here beside the encoding one, still scoped to
|
|
102
|
+
<code>scripts/mutation_shards.py</code>, which is the one file whose writers are already known to be
|
|
103
|
+
byte-compared.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: writers-whose-bytes-are-compared-do-not-pin-their-newline
|
|
3
|
+
board: code
|
|
4
|
+
section: compat
|
|
5
|
+
status: planned
|
|
6
|
+
category: Portability · Windows
|
|
7
|
+
complexity: M
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 2
|
|
10
|
+
note: 917 text writes take the platform line ending; only the compared ones are bugs
|
|
11
|
+
order: 363
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: "917 text writes leave the line ending to the platform, and only some of them are bugs"
|
|
15
|
+
---
|
|
16
|
+
Text mode decides two things, and naming the encoding fixes one of them. It also translates
|
|
17
|
+
<code>\n</code> to the platform separator <em>on write</em>, so a file written with
|
|
18
|
+
<code>encoding="utf-8"</code> on a GitHub <b>Windows</b> runner still holds CRLF. The sibling card
|
|
19
|
+
<code>text-io-leaves-its-encoding-to-the-locale</code> closed the encoding half across 414 files; this
|
|
20
|
+
is the other half, and it is deliberately not the same kind of sweep.
|
|
21
|
+
|
|
22
|
+
<b>#1012 hit both, one after the other, and the first fix hid the second.</b> Naming the encoding
|
|
23
|
+
turned the three <code>tests (windows-latest, 3.1x)</code> jobs green on the assertion that had failed
|
|
24
|
+
— and the next run put them straight back to red on the line endings of the same line. Two
|
|
25
|
+
platform defects in one call, and no way to see the second until the first was gone.
|
|
26
|
+
|
|
27
|
+
<b>The count is 917, and a blanket pass would be wrong.</b> 858 in <code>tests</code>, 32 in
|
|
28
|
+
<code>boost_cli</code>, 21 in <code>scripts</code>, 6 in <code>evals</code>. Most of those writes
|
|
29
|
+
produce files whose line endings nothing ever compares, so pinning
|
|
30
|
+
<code>newline="\n"</code> on all of them is 917 edits of which the overwhelming majority are churn
|
|
31
|
+
and none is a fix — and churn in a diff is what makes the real change unreviewable. Readers need
|
|
32
|
+
nothing at all: universal newlines already fold CRLF to LF on the way in, which is why the guard that
|
|
33
|
+
ships with the encoding card walks <em>writers only</em>.
|
|
34
|
+
|
|
35
|
+
<b>So the work is the scoping, not the edit.</b> The subset that matters is writers whose output is
|
|
36
|
+
read back and compared — against a string, a hash, a golden file, or the same report printed to a
|
|
37
|
+
log beside it. Three shapes are known to qualify and are a good place to start the inventory:
|
|
38
|
+
a file written here and read back by an assertion in the same test; anything hashed or diffed
|
|
39
|
+
(<code>fingerprint</code>, the generated-file <code>--check</code> gates, golden fixtures); and
|
|
40
|
+
anything a <em>second</em> process parses line by line, which is how
|
|
41
|
+
<code>$GITHUB_OUTPUT</code> got onto the list. <code>scripts/mutation_shards.py</code> is already
|
|
42
|
+
pinned and already guarded by <code>TestTheScriptPinsItsNewlines</code> — extending that guard a
|
|
43
|
+
scoped set at a time, with the reason each set is in it, is the shape this should take.
|
|
44
|
+
|
|
45
|
+
<b>What would make it falsifiable.</b> A Windows job that asserts byte equality, not string
|
|
46
|
+
equality: today a round trip on Linux passes whether the newline is pinned or not, which is exactly
|
|
47
|
+
the class of test the encoding card's own verification pass caught twice. The AST walker
|
|
48
|
+
(<code>unpinned_newline</code> in <code>tests/unit/test_text_io_names_its_encoding.py</code>) is the
|
|
49
|
+
platform-independent half and already exists; what it cannot tell you is which of the 917 are bugs.
|
|
@@ -143,7 +143,7 @@
|
|
|
143
143
|
<div class="stat"><b>27</b><span>Shipped</span></div>
|
|
144
144
|
<div class="stat"><b>1</b><span>Next up</span></div>
|
|
145
145
|
<div class="stat"><b>75</b><span>Planned</span></div>
|
|
146
|
-
<div class="stat"><b>
|
|
146
|
+
<div class="stat"><b>520</b><span>Loop finds</span></div>
|
|
147
147
|
<!-- /ROADMAP:stats -->
|
|
148
148
|
</div>
|
|
149
149
|
</section>
|
|
@@ -7185,81 +7185,59 @@ the stripped block. Found while verifying
|
|
|
7185
7185
|
</article>
|
|
7186
7186
|
|
|
7187
7187
|
<article class="cap rcard" id="text-io-leaves-its-encoding-to-the-locale">
|
|
7188
|
+
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Portability · Windows</span></div>
|
|
7189
|
+
<h3>73 reads and writes left the text encoding to the locale, and the Windows jobs were the only thing that noticed</h3>
|
|
7190
|
+
<p class="cardbody"><a class="writeup" href="https://github.com/jonnyeclectic/boost/blob/main/docs/roadmap/items/text-io-leaves-its-encoding-to-the-locale.md">Write-up · text-io-leaves-its-encoding-to-the-locale.md</a></p>
|
|
7191
|
+
<div class="meta">
|
|
7192
|
+
<span class="m">Complexity <b>M</b></span>
|
|
7193
|
+
<span class="m">Impact <b>Med</b></span>
|
|
7194
|
+
<span class="m">Wow <b class="wow">★★</b></span>
|
|
7195
|
+
<span class="m">all 73 encoded; the guard is repo-wide over 414 files; the newline half is its own card</span>
|
|
7196
|
+
</div>
|
|
7197
|
+
</article>
|
|
7198
|
+
|
|
7199
|
+
<article class="cap rcard" id="writers-whose-bytes-are-compared-do-not-pin-their-newline">
|
|
7188
7200
|
<div class="head"><span class="pill planned">Planned</span><span class="cat">Portability · Windows</span></div>
|
|
7189
|
-
<h3>
|
|
7190
|
-
<p
|
|
7191
|
-
<code
|
|
7192
|
-
|
|
7193
|
-
|
|
7194
|
-
|
|
7195
|
-
|
|
7196
|
-
|
|
7197
|
-
<
|
|
7198
|
-
|
|
7199
|
-
|
|
7200
|
-
|
|
7201
|
-
|
|
7202
|
-
<
|
|
7203
|
-
|
|
7204
|
-
|
|
7205
|
-
|
|
7206
|
-
|
|
7207
|
-
|
|
7208
|
-
|
|
7209
|
-
|
|
7210
|
-
|
|
7211
|
-
|
|
7212
|
-
|
|
7213
|
-
|
|
7214
|
-
<
|
|
7215
|
-
<code>
|
|
7216
|
-
|
|
7217
|
-
|
|
7218
|
-
|
|
7219
|
-
<b>
|
|
7220
|
-
|
|
7221
|
-
|
|
7222
|
-
|
|
7223
|
-
|
|
7224
|
-
|
|
7225
|
-
<
|
|
7226
|
-
<
|
|
7227
|
-
|
|
7228
|
-
|
|
7229
|
-
syntactically: over <code>origin/main</code> it reports exactly <b>one</b> site,
|
|
7230
|
-
<code>scripts/mutation_shards.py:718</code>, because it sees <code>path.read_text()</code> where
|
|
7231
|
-
<code>path = Path(...)</code> is in view; it never saw the <code>md.read_text()</code> off a pytest
|
|
7232
|
-
<code>tmp_path</code> fixture that actually broke CI. #1012 fixed that one site, so on <code>main</code>
|
|
7233
|
-
after this merge the rule reports <b>zero</b> while the walker still reports 73 — which is the
|
|
7234
|
-
clearest statement of the gap there is. The sweep wants the AST walker in
|
|
7235
|
-
<code>tests/unit/test_mutation_shards_names_its_encoding.py</code>, whose <code>WATCHED</code> tuple is the
|
|
7236
|
-
list to grow — it already pins the two files #1012 owns, so the guard generalises by adding a path
|
|
7237
|
-
rather than by being rewritten.
|
|
7238
|
-
|
|
7239
|
-
<b>Shape of the work.</b> Mechanical but not blind: each site needs a decision between
|
|
7240
|
-
<code>encoding="utf-8"</code> and <code>read_bytes()</code>/binary mode, and a handful read files boost did
|
|
7241
|
-
not write (a user's <code>CLAUDE.md</code>, a tapped repo's Markdown) where <code>errors="replace"</code> may
|
|
7242
|
-
be the honest answer rather than a crash. Land it per-directory so each PR stays reviewable, extending
|
|
7243
|
-
<code>WATCHED</code> as it goes.
|
|
7244
|
-
|
|
7245
|
-
<b>The encoding is only half of what text mode decides.</b> It also translates <code>\n</code> to the
|
|
7246
|
-
platform separator on write, so a file written with <code>encoding="utf-8"</code> on a Windows runner
|
|
7247
|
-
still holds CRLF. #1012 hit both, one after the other: naming the encoding turned the three Windows
|
|
7248
|
-
jobs green on that assertion and straight back to red on the line endings. A sweep that fixes only
|
|
7249
|
-
the encoding leaves every writer whose output is compared against a string, a hash or another file
|
|
7250
|
-
still platform-dependent, so this card covers <code>newline="\n"</code> on writers as well —
|
|
7251
|
-
readers need nothing, since universal newlines already fold CRLF on the way in.
|
|
7252
|
-
|
|
7253
|
-
That second sweep is <b>910</b> writes (857 tests, 32 <code>boost_cli</code>, 21 <code>scripts</code>),
|
|
7254
|
-
and unlike the encoding it should <em>not</em> be applied everywhere: a write whose bytes nobody
|
|
7255
|
-
compares is fine as it is. The ones that matter are writers whose output is read back and compared
|
|
7256
|
-
— against a string, a hash, a golden file, or the same report printed to a log. Scoping that
|
|
7257
|
-
subset is the first task of this card, not a mechanical pass.</p>
|
|
7258
|
-
<div class="meta">
|
|
7259
|
-
<span class="m">Complexity <b>M</b></span>
|
|
7260
|
-
<span class="m">Impact <b>Med</b></span>
|
|
7261
|
-
<span class="m">Wow <b class="wow">★★</b></span>
|
|
7262
|
-
<span class="m">73 reads and writes take the locale's encoding; 910 writes take its line ending</span>
|
|
7201
|
+
<h3>917 text writes leave the line ending to the platform, and only some of them are bugs</h3>
|
|
7202
|
+
<p>Text mode decides two things, and naming the encoding fixes one of them. It also translates
|
|
7203
|
+
<code>\n</code> to the platform separator <em>on write</em>, so a file written with
|
|
7204
|
+
<code>encoding="utf-8"</code> on a GitHub <b>Windows</b> runner still holds CRLF. The sibling card
|
|
7205
|
+
<code>text-io-leaves-its-encoding-to-the-locale</code> closed the encoding half across 414 files; this
|
|
7206
|
+
is the other half, and it is deliberately not the same kind of sweep.
|
|
7207
|
+
|
|
7208
|
+
<b>#1012 hit both, one after the other, and the first fix hid the second.</b> Naming the encoding
|
|
7209
|
+
turned the three <code>tests (windows-latest, 3.1x)</code> jobs green on the assertion that had failed
|
|
7210
|
+
— and the next run put them straight back to red on the line endings of the same line. Two
|
|
7211
|
+
platform defects in one call, and no way to see the second until the first was gone.
|
|
7212
|
+
|
|
7213
|
+
<b>The count is 917, and a blanket pass would be wrong.</b> 858 in <code>tests</code>, 32 in
|
|
7214
|
+
<code>boost_cli</code>, 21 in <code>scripts</code>, 6 in <code>evals</code>. Most of those writes
|
|
7215
|
+
produce files whose line endings nothing ever compares, so pinning
|
|
7216
|
+
<code>newline="\n"</code> on all of them is 917 edits of which the overwhelming majority are churn
|
|
7217
|
+
and none is a fix — and churn in a diff is what makes the real change unreviewable. Readers need
|
|
7218
|
+
nothing at all: universal newlines already fold CRLF to LF on the way in, which is why the guard that
|
|
7219
|
+
ships with the encoding card walks <em>writers only</em>.
|
|
7220
|
+
|
|
7221
|
+
<b>So the work is the scoping, not the edit.</b> The subset that matters is writers whose output is
|
|
7222
|
+
read back and compared — against a string, a hash, a golden file, or the same report printed to a
|
|
7223
|
+
log beside it. Three shapes are known to qualify and are a good place to start the inventory:
|
|
7224
|
+
a file written here and read back by an assertion in the same test; anything hashed or diffed
|
|
7225
|
+
(<code>fingerprint</code>, the generated-file <code>--check</code> gates, golden fixtures); and
|
|
7226
|
+
anything a <em>second</em> process parses line by line, which is how
|
|
7227
|
+
<code>$GITHUB_OUTPUT</code> got onto the list. <code>scripts/mutation_shards.py</code> is already
|
|
7228
|
+
pinned and already guarded by <code>TestTheScriptPinsItsNewlines</code> — extending that guard a
|
|
7229
|
+
scoped set at a time, with the reason each set is in it, is the shape this should take.
|
|
7230
|
+
|
|
7231
|
+
<b>What would make it falsifiable.</b> A Windows job that asserts byte equality, not string
|
|
7232
|
+
equality: today a round trip on Linux passes whether the newline is pinned or not, which is exactly
|
|
7233
|
+
the class of test the encoding card's own verification pass caught twice. The AST walker
|
|
7234
|
+
(<code>unpinned_newline</code> in <code>tests/unit/test_text_io_names_its_encoding.py</code>) is the
|
|
7235
|
+
platform-independent half and already exists; what it cannot tell you is which of the 917 are bugs.</p>
|
|
7236
|
+
<div class="meta">
|
|
7237
|
+
<span class="m">Complexity <b>M</b></span>
|
|
7238
|
+
<span class="m">Impact <b>Med</b></span>
|
|
7239
|
+
<span class="m">Wow <b class="wow">★★</b></span>
|
|
7240
|
+
<span class="m">917 text writes take the platform line ending; only the compared ones are bugs</span>
|
|
7263
7241
|
</div>
|
|
7264
7242
|
</article>
|
|
7265
7243
|
<!-- /ROADMAP:cards -->
|
|
@@ -7768,6 +7746,59 @@ had 4 clones in flight".</p>
|
|
|
7768
7746
|
<span class="m">it skipped in all six jobs that run the suite, not the three this card first counted</span>
|
|
7769
7747
|
</div>
|
|
7770
7748
|
</article>
|
|
7749
|
+
|
|
7750
|
+
<article class="cap rcard" id="shard-weights-do-not-predict-the-job-timeout">
|
|
7751
|
+
<div class="head"><span class="pill planned">Planned</span><span class="cat">CI · Bug</span></div>
|
|
7752
|
+
<h3>Mutation shard weights balance perfectly and predict nothing, so a shard can time out and cancel a release</h3>
|
|
7753
|
+
<p><b>Observed, on the merge of #1015.</b> <code>mutation-shard (4)</code> ran 75 minutes against the
|
|
7754
|
+
job's <code>timeout-minutes: 75</code> and was cancelled. The aggregate <code>mutation</code> job
|
|
7755
|
+
then failed, the whole <code>ci</code> run concluded <code>cancelled</code> rather than
|
|
7756
|
+
<code>failure</code>, and <code>publish.yml</code> — which gates on
|
|
7757
|
+
<code>workflow_run.conclusion == 'success'</code> — skipped. <b>A merge to main silently did
|
|
7758
|
+
not ship</b>, which is the exact failure mode the long comment above <code>ci.yml</code>'s
|
|
7759
|
+
<code>concurrency:</code> block was written to prevent by a different route.
|
|
7760
|
+
|
|
7761
|
+
<b>The packer is not at fault, and that is the finding.</b>
|
|
7762
|
+
<code>mutation_shards.py plan --shards 6 --explain</code> reports every shard within <b>700 ms</b>
|
|
7763
|
+
of the ideal 6,884,259 ms — a balance of 0.01%. The same run measured 39, 27, 38, 36,
|
|
7764
|
+
<b>76</b> and 65 minutes. Perfect balance against numbers that do not predict wall clock.
|
|
7765
|
+
|
|
7766
|
+
<b>The units are the tell.</b> Total weight is 41,305,555 ms over six shards, so the plan
|
|
7767
|
+
predicts <b>114 minutes per shard</b> while shards finish in 27–76. The weights are
|
|
7768
|
+
self-consistent ratios measured somewhere other than a CI runner, and ratios are all the
|
|
7769
|
+
packer needs — but it means <b>nothing in the repo can answer "will a shard exceed the
|
|
7770
|
+
cap?"</b>. <code>plan --explain</code> prints the speedup cap and the largest unit; it never
|
|
7771
|
+
mentions <code>timeout-minutes</code>, and <code>grep</code> finds no comparison between the two
|
|
7772
|
+
anywhere in <code>scripts/mutation_shards.py</code>.
|
|
7773
|
+
|
|
7774
|
+
<b>Run-to-run variance eats the margin.</b> The same tree, built twice: shard 4 took 66 min on
|
|
7775
|
+
<code>5aaf8bc4</code> (the PR) and 76 min on <code>f196160d</code> (its merge commit); shard 5 went
|
|
7776
|
+
42 → 65. On <code>8c4a5094</code> shard 4 was 32. So the heaviest shard's observed range is
|
|
7777
|
+
32–76 minutes for identical work, and the cap is 75. Related and probably the same cause:
|
|
7778
|
+
<code>mutation-shard (4)</code> on #1012 died at 15.1 minutes with exit 143 (SIGTERM), diagnosed
|
|
7779
|
+
then as runner eviction.
|
|
7780
|
+
|
|
7781
|
+
<b>Why the open weights-refresh PR does not fix it.</b> #1014 re-measures and re-packs; under its
|
|
7782
|
+
weights the plan is again balanced to within ~400 ms, and predicts 121 min/shard. Re-measuring a
|
|
7783
|
+
quantity that was never in runner time produces a better-calibrated version of the same
|
|
7784
|
+
unanswerable question.
|
|
7785
|
+
|
|
7786
|
+
<b>Shape of the work.</b> Three independent pieces, in increasing order of how much they fix:
|
|
7787
|
+
calibrate the weights against observed job duration (the API has it per shard, per run) so the
|
|
7788
|
+
plan is in minutes a human can compare to the cap; have <code>plan</code> fail, or at least warn,
|
|
7789
|
+
when a packed shard's predicted time is within some margin of <code>timeout-minutes</code>; and
|
|
7790
|
+
give the heaviest shard headroom — at eight shards the ideal drops by a quarter, and the
|
|
7791
|
+
speedup cap is 6.0x only because <code>store.py</code> is split per function already, so more
|
|
7792
|
+
shards is cheap. Separately, a cancelled <code>ci</code> on main should be loud: it currently
|
|
7793
|
+
looks identical to a success from the release path's point of view, because
|
|
7794
|
+
<code>publish.yml</code> only asks whether the conclusion was <code>success</code>.</p>
|
|
7795
|
+
<div class="meta">
|
|
7796
|
+
<span class="m">Complexity <b>M</b></span>
|
|
7797
|
+
<span class="m hi">Impact <b>High</b></span>
|
|
7798
|
+
<span class="m">Wow <b class="wow">★★★★</b></span>
|
|
7799
|
+
<span class="m">the pack is balanced to within 700ms of ideal and a shard still timed out at 75 min, cancelling a release</span>
|
|
7800
|
+
</div>
|
|
7801
|
+
</article>
|
|
7771
7802
|
<!-- /ROADMAP:cards -->
|
|
7772
7803
|
|
|
7773
7804
|
</div>
|
{boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/functional/test_workspace_scope.py
RENAMED
|
@@ -400,7 +400,7 @@ def test_a_local_install_records_mcp_servers_in_the_repo(boost, tapped, repo):
|
|
|
400
400
|
boost("install", "brainstorming", "--local")
|
|
401
401
|
sidecar = repo / mcpdecl.SIDECAR
|
|
402
402
|
assert sidecar.is_file(), "no .mcp.json written into the repo"
|
|
403
|
-
servers = json.loads(sidecar.read_text())[mcpdecl.SERVERS_KEY]
|
|
403
|
+
servers = json.loads(sidecar.read_text(encoding="utf-8"))[mcpdecl.SERVERS_KEY]
|
|
404
404
|
assert "gh" in servers
|
|
405
405
|
assert servers["gh"][mcpdecl.MARKER_KEY] == "brainstorming", \
|
|
406
406
|
"the entry must name the skill that asked for it, so uninstall can reverse it"
|
|
@@ -423,7 +423,8 @@ def test_uninstalling_locally_removes_the_servers_it_added(boost, tapped, repo):
|
|
|
423
423
|
_declare_mcp(tapped, "brainstorming")
|
|
424
424
|
boost("install", "brainstorming", "--local")
|
|
425
425
|
boost("uninstall", "brainstorming", "--local")
|
|
426
|
-
servers = json.loads(
|
|
426
|
+
servers = json.loads(
|
|
427
|
+
(repo / mcpdecl.SIDECAR).read_text(encoding="utf-8"))[mcpdecl.SERVERS_KEY]
|
|
427
428
|
assert "gh" not in servers, \
|
|
428
429
|
"a skill removed from the repo must stop launching its server"
|
|
429
430
|
|
|
@@ -445,7 +446,8 @@ def test_uninstall_leaves_a_hand_written_server_alone(boost, tapped, repo):
|
|
|
445
446
|
_declare_mcp(tapped, "brainstorming")
|
|
446
447
|
boost("install", "brainstorming", "--local")
|
|
447
448
|
boost("uninstall", "brainstorming", "--local")
|
|
448
|
-
servers = json.loads(
|
|
449
|
+
servers = json.loads(
|
|
450
|
+
(repo / mcpdecl.SIDECAR).read_text(encoding="utf-8"))[mcpdecl.SERVERS_KEY]
|
|
449
451
|
assert servers["mine"] == {"command": "my-own-thing"}, \
|
|
450
452
|
"boost must only reverse what boost wrote"
|
|
451
453
|
|
|
@@ -918,8 +918,8 @@ class TestGuardDetection:
|
|
|
918
918
|
files never touch it, and one imports it without a guard.
|
|
919
919
|
"""
|
|
920
920
|
(tmp_path / "a_test.py").write_text(
|
|
921
|
-
"import pytest\nwidget = pytest.importorskip('widget')\n")
|
|
922
|
-
(tmp_path / "b_test.py").write_text("import widget\n")
|
|
921
|
+
"import pytest\nwidget = pytest.importorskip('widget')\n", encoding="utf-8")
|
|
922
|
+
(tmp_path / "b_test.py").write_text("import widget\n", encoding="utf-8")
|
|
923
923
|
required, optional = _scan([tmp_path])
|
|
924
924
|
assert "widget" in required
|
|
925
925
|
assert "widget" not in optional
|
|
@@ -73,7 +73,7 @@ class TestBaselineIsKeyedToItsQuerySet:
|
|
|
73
73
|
ev.save_baseline(10, [_result()], golden=KEYWORD)
|
|
74
74
|
ev.save_baseline(10, [_result(**{"recall@k": 0.69, "hit@1": 0.24})],
|
|
75
75
|
golden=NATURAL)
|
|
76
|
-
data = json.loads(baseline.read_text())
|
|
76
|
+
data = json.loads(baseline.read_text(encoding="utf-8"))
|
|
77
77
|
keys = set(data["sets"])
|
|
78
78
|
assert len(keys) == 2, "one set's baseline overwrote the other: %s" % keys
|
|
79
79
|
|
|
@@ -96,9 +96,11 @@ class TestBaselineIsKeyedToItsQuerySet:
|
|
|
96
96
|
# Editing the queries changes what the numbers mean, even under the same
|
|
97
97
|
# filename — so identity is the content, not the path.
|
|
98
98
|
golden = tmp_path / "golden.jsonl"
|
|
99
|
-
golden.write_text('{"query": "a", "relevant": ["x"], "kind": "skill"}\n'
|
|
99
|
+
golden.write_text('{"query": "a", "relevant": ["x"], "kind": "skill"}\n',
|
|
100
|
+
encoding="utf-8")
|
|
100
101
|
ev.save_baseline(10, [_result()], golden=golden)
|
|
101
|
-
golden.write_text('{"query": "b", "relevant": ["y"], "kind": "skill"}\n'
|
|
102
|
+
golden.write_text('{"query": "b", "relevant": ["y"], "kind": "skill"}\n',
|
|
103
|
+
encoding="utf-8")
|
|
102
104
|
assert ev.check_regressions([_result(**{"recall@k": 0.1})],
|
|
103
105
|
eps=0.02, golden=golden) == []
|
|
104
106
|
|
|
@@ -111,7 +113,7 @@ class TestBackCompat:
|
|
|
111
113
|
"k": 10,
|
|
112
114
|
"engines": {"BM25 full-content": {
|
|
113
115
|
"recall@k": 1.0, "hit@1": 0.78, "MRR": 0.86, "nDCG@k": 0.89}},
|
|
114
|
-
}))
|
|
116
|
+
}), encoding="utf-8")
|
|
115
117
|
problems = ev.check_regressions([_result(**{"hit@1": 0.10})],
|
|
116
118
|
eps=0.02, golden=KEYWORD)
|
|
117
119
|
assert problems, "a pre-existing baseline stopped catching regressions"
|
|
@@ -121,7 +123,7 @@ class TestBackCompat:
|
|
|
121
123
|
"k": 10,
|
|
122
124
|
"engines": {"BM25 full-content": {
|
|
123
125
|
"recall@k": 1.0, "hit@1": 0.78, "MRR": 0.86, "nDCG@k": 0.89}},
|
|
124
|
-
}))
|
|
126
|
+
}), encoding="utf-8")
|
|
125
127
|
assert ev.check_regressions([_result(**{"hit@1": 0.10})],
|
|
126
128
|
eps=0.02, golden=NATURAL) == []
|
|
127
129
|
|
|
@@ -663,7 +663,7 @@ class TestTheCorpusSizeBlock:
|
|
|
663
663
|
# wrong — which is how the cross-population ratio survived: the number
|
|
664
664
|
# in taps.txt looked settled because nobody recomputed it.
|
|
665
665
|
m = _load()
|
|
666
|
-
text = _TAPS.read_text()
|
|
666
|
+
text = _TAPS.read_text(encoding="utf-8")
|
|
667
667
|
assert m.with_size(text) == text
|
|
668
668
|
|
|
669
669
|
def test_the_content_line_never_says_entries(self):
|
{boost_skill_cli-1.2.165 → boost_skill_cli-1.2.167}/tests/unit/test_gemini_agent_sanitize.py
RENAMED
|
@@ -1219,8 +1219,9 @@ def _bundle_source() -> str:
|
|
|
1219
1219
|
if not entry.is_file():
|
|
1220
1220
|
continue
|
|
1221
1221
|
for chunk in sorted(set(re.findall(
|
|
1222
|
-
r"chunk-[A-Z0-9]+\.js", entry.read_text(errors="replace"
|
|
1223
|
-
|
|
1222
|
+
r"chunk-[A-Z0-9]+\.js", entry.read_text(errors="replace",
|
|
1223
|
+
encoding="utf-8")))):
|
|
1224
|
+
src = (root / chunk).read_text(encoding="utf-8", errors="replace")
|
|
1224
1225
|
if BUNDLE_MARKER in src:
|
|
1225
1226
|
return src
|
|
1226
1227
|
return pytest.skip("Gemini CLI bundle not installed")
|