boost-skill-cli 1.2.67__tar.gz → 1.2.69__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.67/boost_skill_cli.egg-info → boost_skill_cli-1.2.69}/PKG-INFO +1 -1
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69/boost_skill_cli.egg-info}/PKG-INFO +1 -1
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_skill_cli.egg-info/SOURCES.txt +2 -0
- boost_skill_cli-1.2.69/docs/roadmap/items/delay-true-defeats-the-log-suppress.md +52 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +9 -0
- boost_skill_cli-1.2.69/docs/roadmap/items/near-identical-copies-still-eat-the-slots.md +69 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap.html +129 -3
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_bot_pr_dco.py +54 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.gitattributes +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.gitignore +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.lycheeignore +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.vale/styles/boost/AIWriting.yml +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.vale.ini +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/CLAUDE.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/DCO +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/GOVERNANCE.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/LICENSE +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/MAINTAINERS.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/MANIFEST.in +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/Makefile +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/README.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/SECURITY.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/SUPPORT.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/quickstart.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/aihost.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/bmad.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/bootstrap.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/browse.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/builtin.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/catalogbundle.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/complete.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/hookhost.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/shards.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/data/rules/boost-first.mdc +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_langchain/__init__.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_langchain/_compat.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_langchain/graph.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_langchain/loader.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_langchain/py.typed +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_langchain/retriever.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/codecov.yml +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/adapters.html +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/bmad.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel.html +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/chat.html +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/code-review.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/commands.html +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/commit-audit.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/demo.gif +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/demo.html +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/demo.tape +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/dependencies.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/eval-latest.json +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/eval.html +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/index.html +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/langchain.html +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/openssf-badge.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D27.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/ai-backend-fanout.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/boost-first-rule.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/branch-current-gate.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/cli-command-audit.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/dense-reindex-has-no-progress-or-durability.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/dense-reindex-reuses-whole-taps.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/dense-store-holds-every-vector-once-per-copy.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/gstack-tap-first-then-coexistence.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/install-path-disambiguation.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-cannot-read-a-skill-before-installing.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/openssf-silver.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/osps-baseline-levels.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/published-shards-have-no-consumer.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/relicence-apache-2.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/shard-runs-reembed-everything-weekly.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/vex-openvex-feed.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/weekly-vectors-had-no-ingestion-path.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/zip-strict-audit.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/security-design.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/semantic-search.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/verifying-releases.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/vex/meta.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/vex/openvex.json +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/evals/README.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/evals/__init__.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/evals/baseline.json +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/evals/metrics.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/evals/publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/examples/README.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/index.html +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/noxfile.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/pyproject.toml +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/add_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/build_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/build_vex.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/check_branch_current.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/check_dco.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/check_reproducible.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/eval_corpus.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/eval_tools.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/measure_registry.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/normalize_sdist.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/page_budget.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/publish_eval_json.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/publish_shards.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/serve_docs.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/shard_plan.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/setup.cfg +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/sonar-project.properties +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/style/README.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/style/boost.css +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/style/boost.js +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/style/demo.html +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/conftest.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/eval/fixtures/claude_init_event.jsonl +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/eval/taps-scale.txt +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/eval/tool_calls.jsonl +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_bmad_all_hosts.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_catalog.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_hooks_gemini.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_pane_width.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_quickstart.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_tap_pins.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_kind_conformance.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/langchain/conftest.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/langchain/test_graph.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/langchain/test_loader.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/langchain/test_retriever.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_action_pin_lockstep.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_aihost.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_bmad_core.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_boost_first_offer.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_bootstrap.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_branch_current.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_browse.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_builtin.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_catalogbundle.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_check_dco.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_check_reproducible.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_clean_internal_cache.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_cli_update_shards.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_compact.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_complete.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_complete_rc_block.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_content_identity.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_crash_redaction.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_boilerplate_cluster.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_embed_dedupe.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_entry_reuse.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_progress.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_quantized.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_ready_order.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_shard_real_schema.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_status_cheap.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_vector_dedupe.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_embed_truncated_response.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_eval_corpus.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_eval_grading.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_eval_tools.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_eval_tools_probe.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_gemini_agent_sanitize.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_gitutil_lfs.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_gitutil_sparse.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_gstack_coexistence.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_hook_settings_hosts.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_hookhost.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_install_permission_error.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_langchain_packaging.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_link_ownership.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_mcp_read.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_measure_registry.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_normalize_sdist.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_page_budget.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_rag_fastpath.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_registry_control_chars.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_registry_parallel.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_rerank_cache.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_serve_docs.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_shard_plan.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_shards.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_shards_incremental.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_shards_ingest.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_shards_matrix.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_smoke_covers_every_command.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_store_materialize.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_sync_blocked_links.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_tap_pins.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_version_tags.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_vex.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_visual_harness_flags.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_workflow_concurrency_groups.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_workflow_push_has_credentials.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/visual/package-lock.json +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/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.69'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 2, 69)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -250,6 +250,7 @@ docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md
|
|
|
250
250
|
docs/roadmap/items/crash-listing-branch-untested.md
|
|
251
251
|
docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md
|
|
252
252
|
docs/roadmap/items/crash-reports-leak-api-keys.md
|
|
253
|
+
docs/roadmap/items/delay-true-defeats-the-log-suppress.md
|
|
253
254
|
docs/roadmap/items/demo-cannot-open-its-own-pr.md
|
|
254
255
|
docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md
|
|
255
256
|
docs/roadmap/items/demo-workflow-cancels-other-prs.md
|
|
@@ -363,6 +364,7 @@ docs/roadmap/items/mutation-hardening-core-store-py.md
|
|
|
363
364
|
docs/roadmap/items/mutation-shard-floor-is-one-file.md
|
|
364
365
|
docs/roadmap/items/mypy-strict-mode-for-commands.md
|
|
365
366
|
docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md
|
|
367
|
+
docs/roadmap/items/near-identical-copies-still-eat-the-slots.md
|
|
366
368
|
docs/roadmap/items/negative-limit-inverts-log-pulse-output.md
|
|
367
369
|
docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md
|
|
368
370
|
docs/roadmap/items/one-command-every-env-nox.md
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: delay-true-defeats-the-log-suppress
|
|
3
|
+
board: code
|
|
4
|
+
section: planned
|
|
5
|
+
status: planned
|
|
6
|
+
category: Health · Robustness
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: Medium
|
|
9
|
+
wow: 2
|
|
10
|
+
note: the suppress guards construction; delay=True moves the failure to emit
|
|
11
|
+
order: 130
|
|
12
|
+
title: A best-effort log handler prints a traceback over every command's output
|
|
13
|
+
---
|
|
14
|
+
<code>logs.configure</code> says what it means to do — <em>“File handler — always
|
|
15
|
+
DEBUG, best-effort (never break the CLI over a log)”</em> — and wraps the handler in
|
|
16
|
+
<code>contextlib.suppress(OSError)</code> to guarantee it. The guarantee does not hold, and the
|
|
17
|
+
reason is one keyword inside the block: <code>with contextlib.suppress(OSError):</code> ·
|
|
18
|
+
<code>paths.logs_dir().mkdir(parents=True, exist_ok=True)</code> ·
|
|
19
|
+
<code>fh = logging.handlers.RotatingFileHandler(log_path(), maxBytes=MAX_BYTES,
|
|
20
|
+
backupCount=BACKUP_COUNT, encoding="utf-8", <b>delay=True</b>)</code>.
|
|
21
|
+
|
|
22
|
+
<code>delay=True</code> means the file is <b>not opened during construction</b>. It is opened on the
|
|
23
|
+
first <code>emit()</code>, inside <code>shouldRollover</code> — which happens later, on a
|
|
24
|
+
different stack, outside the <code>suppress</code>. So the <code>OSError</code> the block exists to
|
|
25
|
+
swallow is relocated to exactly where nothing is catching it. <code>logging.raiseExceptions</code>
|
|
26
|
+
is left at its default <code>True</code>, so Python's logging module prints
|
|
27
|
+
<code>--- Logging error ---</code> and a full traceback to stderr instead.
|
|
28
|
+
|
|
29
|
+
<b>Observed on a real machine</b>, with the log at <code>rw-r--r--</code> owned by the invoking user
|
|
30
|
+
and the directory writable, under a harness whose filesystem policy did not include
|
|
31
|
+
<code>~/.boost/logs</code>. Every <code>boost</code> command emitted <b>two</b> tracebacks —
|
|
32
|
+
one from <code>log_invocation</code> at <code>cli.py:311</code> and one from
|
|
33
|
+
<code>log_completion</code> at <code>cli.py:343</code> — roughly thirty lines of Python
|
|
34
|
+
internals wrapped around the fifteen lines of search results the user actually asked for. The
|
|
35
|
+
command itself returned <code>rc=0</code>. Nothing was broken except the output.
|
|
36
|
+
|
|
37
|
+
<b>Two things to get right.</b> First, catching the error is not the same as reporting it: a handler
|
|
38
|
+
that silently swallows every write means a user whose diagnostics have been dead for months learns
|
|
39
|
+
nothing, which is the failure <code>doctor</code>'s log check already exists to prevent. The right
|
|
40
|
+
shape is to fail <em>quietly per emit</em> and let <code>doctor</code> stay the surface that says
|
|
41
|
+
so — it already reports <code>“diagnostic log … is not writable — every
|
|
42
|
+
invocation is failing to record”</code>, which was accurate the whole time this was spewing
|
|
43
|
+
tracebacks. Second, <code>logging.raiseExceptions</code> is a <b>module-global</b>: boost sets it
|
|
44
|
+
for every library in the process, so flipping it wholesale is louder than it looks. Overriding
|
|
45
|
+
<code>handleError</code> on boost's own handler is the scoped version of the same fix.
|
|
46
|
+
|
|
47
|
+
<b>Worth checking while here</b>: whether <code>doctor</code>'s writability check and the handler
|
|
48
|
+
agree about what “writable” means. The check passed (<code>✓ diagnostic log at
|
|
49
|
+
~/.boost/logs/boost.log</code>) in the same session where the handler was failing on every emit,
|
|
50
|
+
because the two ask different questions — one about the path's mode bits, the other about
|
|
51
|
+
what an <code>open()</code> actually returns. A health check that reports green while the thing it
|
|
52
|
+
checks fails on every invocation is the more expensive half of this card.
|
|
@@ -208,3 +208,12 @@ bodies cannot merge two genuinely different skills, which name-clustering would
|
|
|
208
208
|
vendors its own skills produced an unanswerable disambiguation prompt. Tracked separately in
|
|
209
209
|
<code>resolve-vendored-duplicate-copies</code>.
|
|
210
210
|
|
|
211
|
+
<b>The remainder now has its own card, and it is not a rounding error.</b> This card's last open
|
|
212
|
+
item — near-identical rather than byte-identical clustering — was left as a footnote
|
|
213
|
+
under a <code>shipped</code> status, described by the 0.60 residual duplicate slots per query. On a
|
|
214
|
+
real 466-tap install a single query (<code>exa search</code>) puts the same skill in <b>10 of 10
|
|
215
|
+
slots</b>, in Japanese, Chinese and five English phrasings, every copy passing content-hash dedup
|
|
216
|
+
correctly because the bodies genuinely differ. The averaged residual hid a per-query maximum an
|
|
217
|
+
order of magnitude larger. See
|
|
218
|
+
<a href="#near-identical-copies-still-eat-the-slots">near-identical copies still eat the slots</a>.
|
|
219
|
+
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: near-identical-copies-still-eat-the-slots
|
|
3
|
+
board: code
|
|
4
|
+
section: planned
|
|
5
|
+
status: planned
|
|
6
|
+
category: Search · Ranking
|
|
7
|
+
complexity: M
|
|
8
|
+
impact: High
|
|
9
|
+
wow: 4
|
|
10
|
+
note: 10 of 10 slots on a real 466-tap install, all past byte-identical dedup
|
|
11
|
+
order: 131
|
|
12
|
+
title: Near-identical copies survive content-hash dedup and take the whole result page
|
|
13
|
+
---
|
|
14
|
+
<a href="#near-duplicate-items-eat-the-result-slots">Content-hash dedup</a> shipped and worked:
|
|
15
|
+
<code>rag.dedupe_by_content</code> took duplicate result slots from <b>4.94 to 0.60 per query</b>
|
|
16
|
+
over a 77-tap corpus. That card closed naming one thing still open — <em>near-identical
|
|
17
|
+
rather than byte-identical clustering, where <code>core/typosquat.py</code>'s confusion machinery
|
|
18
|
+
would apply</em> — and buried it under a <code>shipped</code> status where nobody would claim
|
|
19
|
+
it. This card is that remainder, with a measurement that makes it look considerably worse than
|
|
20
|
+
“refinement”.
|
|
21
|
+
|
|
22
|
+
<b>Observed on a real 466-tap install</b> with hybrid RRF serving (658,131 chunks): for the query
|
|
23
|
+
<code>exa search</code>, every one of the top ten rows is <code>exa-search</code>, and the
|
|
24
|
+
descriptions are what give the
|
|
25
|
+
shape away — one Japanese (<code>Exa MCPによるウェブ、コード、企業調査</code>), two Chinese
|
|
26
|
+
(<code>通过Exa MCP进行神经搜索</code>), five English variants of <code>Neural search via Exa MCP</code>,
|
|
27
|
+
plus <code>Use Exa MCP for current web…</code> and <code>AI-powered web search…</code>.
|
|
28
|
+
All ten are <code>★ curated</code>. The footer reads
|
|
29
|
+
<code>51 matches · ranked by hybrid RRF (BM25 + dense)</code>.
|
|
30
|
+
|
|
31
|
+
<b>Every one of those passed dedup correctly.</b> They are not byte-identical: they are the same
|
|
32
|
+
skill in Japanese, in Chinese, and in five English phrasings across different registries. The body
|
|
33
|
+
digest differs, so <code>dedupe_by_content</code> keeps them all — which is exactly the
|
|
34
|
+
behaviour <code>#366</code> proved must be preserved, since two entries sharing a name can be
|
|
35
|
+
genuinely different rules. The shipped fix is not misbehaving. It simply does not reach this shape.
|
|
36
|
+
|
|
37
|
+
<b>What the 0.60 residual actually was.</b> The prior card described its leftover as “entries
|
|
38
|
+
sharing a <em>name</em> whose bodies genuinely differ, which must stay separate” — true
|
|
39
|
+
as stated, and it reads as a rounding error. At 466 taps the same residual is a full result page.
|
|
40
|
+
The gap between 0.60 and 10.0 is worth understanding before designing anything: the 77-tap
|
|
41
|
+
measurement used 50 natural-language queries averaged, and an <em>average</em> hides the shape here.
|
|
42
|
+
Duplicate pressure was already known to be a step function of <em>which</em> registries are tapped
|
|
43
|
+
rather than how many; near-identical pressure looks like a step function of <b>which query</b> —
|
|
44
|
+
harmless across a query set, total on any query that lands on a widely-mirrored skill. Re-measure
|
|
45
|
+
per-query maxima, not means.
|
|
46
|
+
|
|
47
|
+
<b>The hard part is the safety proof, not the clustering.</b> Content hashing was adoptable because
|
|
48
|
+
one count settled it: of 14,153 distinct bodies, clusters spanning more than one name numbered
|
|
49
|
+
<b>zero</b>, so collapsing could not merge two different skills. Near-identical clustering has no
|
|
50
|
+
such free proof — any similarity threshold loose enough to merge a Japanese translation with
|
|
51
|
+
its English original is loose enough to merge two genuinely different skills that share boilerplate.
|
|
52
|
+
Establish the equivalent bound first (over a real corpus, at the chosen threshold, count clusters
|
|
53
|
+
spanning more than one <em>meaning</em>) or the fix trades a visible problem for a silent one.
|
|
54
|
+
|
|
55
|
+
<b>Three things to get right.</b> <em>Translations are the motivating case and the hardest</em>: they
|
|
56
|
+
share almost no tokens with the original, so token-overlap similarity will not find them while an
|
|
57
|
+
embedding will — and the vectors are already on disk, which makes this cheaper here than it
|
|
58
|
+
would be anywhere else. <em>Collapse before <code>k</code></em>, and at both the
|
|
59
|
+
<code>retrieve</code> and <code>retrieve_any</code> seams, for the reason the shipped dedup already
|
|
60
|
+
documents: fusion reintroduces copies either engine dropped, because the copies are distinct
|
|
61
|
+
<code>(tap, skill_md)</code> keys and RRF has no reason to treat them as one. <em>The existing
|
|
62
|
+
quality prior carries over unchanged</em> — <code>rag.source_rank</code> orders on the user's
|
|
63
|
+
<code>curated</code> flag first and shipped <code>confidence</code> second, and choosing among
|
|
64
|
+
near-identical copies is the same question as choosing among identical ones: where should the user
|
|
65
|
+
install from.
|
|
66
|
+
|
|
67
|
+
<b>Not to be confused with <code>#629</code></b>, which deduplicated vector <em>storage</em> (one
|
|
68
|
+
row per distinct embedding, 39.7% repeats reclaimed). That is a disk-size fix beneath the index and
|
|
69
|
+
changes no ranking; this is about which rows reach the user's screen.
|
|
@@ -132,8 +132,8 @@
|
|
|
132
132
|
<!-- ROADMAP:stats -->
|
|
133
133
|
<div class="stat"><b>20</b><span>Shipped</span></div>
|
|
134
134
|
<div class="stat"><b>1</b><span>Next up</span></div>
|
|
135
|
-
<div class="stat"><b>
|
|
136
|
-
<div class="stat"><b>
|
|
135
|
+
<div class="stat"><b>9</b><span>Planned</span></div>
|
|
136
|
+
<div class="stat"><b>293</b><span>Loop finds</span></div>
|
|
137
137
|
<!-- /ROADMAP:stats -->
|
|
138
138
|
</div>
|
|
139
139
|
</section>
|
|
@@ -1010,6 +1010,123 @@ published version works against PyPI as it stands today.</p>
|
|
|
1010
1010
|
<span class="m">declined — superseded by shipping the integration inside the boost-skill-cli wheel (see langchain-in-the-wheel)</span>
|
|
1011
1011
|
</div>
|
|
1012
1012
|
</article>
|
|
1013
|
+
|
|
1014
|
+
<article class="cap rcard" id="delay-true-defeats-the-log-suppress">
|
|
1015
|
+
<div class="head"><span class="pill planned">Planned</span><span class="cat">Health · Robustness</span></div>
|
|
1016
|
+
<h3>A best-effort log handler prints a traceback over every command's output</h3>
|
|
1017
|
+
<p><code>logs.configure</code> says what it means to do — <em>“File handler — always
|
|
1018
|
+
DEBUG, best-effort (never break the CLI over a log)”</em> — and wraps the handler in
|
|
1019
|
+
<code>contextlib.suppress(OSError)</code> to guarantee it. The guarantee does not hold, and the
|
|
1020
|
+
reason is one keyword inside the block: <code>with contextlib.suppress(OSError):</code> ·
|
|
1021
|
+
<code>paths.logs_dir().mkdir(parents=True, exist_ok=True)</code> ·
|
|
1022
|
+
<code>fh = logging.handlers.RotatingFileHandler(log_path(), maxBytes=MAX_BYTES,
|
|
1023
|
+
backupCount=BACKUP_COUNT, encoding="utf-8", <b>delay=True</b>)</code>.
|
|
1024
|
+
|
|
1025
|
+
<code>delay=True</code> means the file is <b>not opened during construction</b>. It is opened on the
|
|
1026
|
+
first <code>emit()</code>, inside <code>shouldRollover</code> — which happens later, on a
|
|
1027
|
+
different stack, outside the <code>suppress</code>. So the <code>OSError</code> the block exists to
|
|
1028
|
+
swallow is relocated to exactly where nothing is catching it. <code>logging.raiseExceptions</code>
|
|
1029
|
+
is left at its default <code>True</code>, so Python's logging module prints
|
|
1030
|
+
<code>--- Logging error ---</code> and a full traceback to stderr instead.
|
|
1031
|
+
|
|
1032
|
+
<b>Observed on a real machine</b>, with the log at <code>rw-r--r--</code> owned by the invoking user
|
|
1033
|
+
and the directory writable, under a harness whose filesystem policy did not include
|
|
1034
|
+
<code>~/.boost/logs</code>. Every <code>boost</code> command emitted <b>two</b> tracebacks —
|
|
1035
|
+
one from <code>log_invocation</code> at <code>cli.py:311</code> and one from
|
|
1036
|
+
<code>log_completion</code> at <code>cli.py:343</code> — roughly thirty lines of Python
|
|
1037
|
+
internals wrapped around the fifteen lines of search results the user actually asked for. The
|
|
1038
|
+
command itself returned <code>rc=0</code>. Nothing was broken except the output.
|
|
1039
|
+
|
|
1040
|
+
<b>Two things to get right.</b> First, catching the error is not the same as reporting it: a handler
|
|
1041
|
+
that silently swallows every write means a user whose diagnostics have been dead for months learns
|
|
1042
|
+
nothing, which is the failure <code>doctor</code>'s log check already exists to prevent. The right
|
|
1043
|
+
shape is to fail <em>quietly per emit</em> and let <code>doctor</code> stay the surface that says
|
|
1044
|
+
so — it already reports <code>“diagnostic log … is not writable — every
|
|
1045
|
+
invocation is failing to record”</code>, which was accurate the whole time this was spewing
|
|
1046
|
+
tracebacks. Second, <code>logging.raiseExceptions</code> is a <b>module-global</b>: boost sets it
|
|
1047
|
+
for every library in the process, so flipping it wholesale is louder than it looks. Overriding
|
|
1048
|
+
<code>handleError</code> on boost's own handler is the scoped version of the same fix.
|
|
1049
|
+
|
|
1050
|
+
<b>Worth checking while here</b>: whether <code>doctor</code>'s writability check and the handler
|
|
1051
|
+
agree about what “writable” means. The check passed (<code>✓ diagnostic log at
|
|
1052
|
+
~/.boost/logs/boost.log</code>) in the same session where the handler was failing on every emit,
|
|
1053
|
+
because the two ask different questions — one about the path's mode bits, the other about
|
|
1054
|
+
what an <code>open()</code> actually returns. A health check that reports green while the thing it
|
|
1055
|
+
checks fails on every invocation is the more expensive half of this card.</p>
|
|
1056
|
+
<div class="meta">
|
|
1057
|
+
<span class="m">Complexity <b>S</b></span>
|
|
1058
|
+
<span class="m">Impact <b>Medium</b></span>
|
|
1059
|
+
<span class="m">Wow <b class="wow">★★</b></span>
|
|
1060
|
+
<span class="m">the suppress guards construction; delay=True moves the failure to emit</span>
|
|
1061
|
+
</div>
|
|
1062
|
+
</article>
|
|
1063
|
+
|
|
1064
|
+
<article class="cap rcard" id="near-identical-copies-still-eat-the-slots">
|
|
1065
|
+
<div class="head"><span class="pill planned">Planned</span><span class="cat">Search · Ranking</span></div>
|
|
1066
|
+
<h3>Near-identical copies survive content-hash dedup and take the whole result page</h3>
|
|
1067
|
+
<p><a href="#near-duplicate-items-eat-the-result-slots">Content-hash dedup</a> shipped and worked:
|
|
1068
|
+
<code>rag.dedupe_by_content</code> took duplicate result slots from <b>4.94 to 0.60 per query</b>
|
|
1069
|
+
over a 77-tap corpus. That card closed naming one thing still open — <em>near-identical
|
|
1070
|
+
rather than byte-identical clustering, where <code>core/typosquat.py</code>'s confusion machinery
|
|
1071
|
+
would apply</em> — and buried it under a <code>shipped</code> status where nobody would claim
|
|
1072
|
+
it. This card is that remainder, with a measurement that makes it look considerably worse than
|
|
1073
|
+
“refinement”.
|
|
1074
|
+
|
|
1075
|
+
<b>Observed on a real 466-tap install</b> with hybrid RRF serving (658,131 chunks): for the query
|
|
1076
|
+
<code>exa search</code>, every one of the top ten rows is <code>exa-search</code>, and the
|
|
1077
|
+
descriptions are what give the
|
|
1078
|
+
shape away — one Japanese (<code>Exa MCPによるウェブ、コード、企業調査</code>), two Chinese
|
|
1079
|
+
(<code>通过Exa MCP进行神经搜索</code>), five English variants of <code>Neural search via Exa MCP</code>,
|
|
1080
|
+
plus <code>Use Exa MCP for current web…</code> and <code>AI-powered web search…</code>.
|
|
1081
|
+
All ten are <code>★ curated</code>. The footer reads
|
|
1082
|
+
<code>51 matches · ranked by hybrid RRF (BM25 + dense)</code>.
|
|
1083
|
+
|
|
1084
|
+
<b>Every one of those passed dedup correctly.</b> They are not byte-identical: they are the same
|
|
1085
|
+
skill in Japanese, in Chinese, and in five English phrasings across different registries. The body
|
|
1086
|
+
digest differs, so <code>dedupe_by_content</code> keeps them all — which is exactly the
|
|
1087
|
+
behaviour <code>#366</code> proved must be preserved, since two entries sharing a name can be
|
|
1088
|
+
genuinely different rules. The shipped fix is not misbehaving. It simply does not reach this shape.
|
|
1089
|
+
|
|
1090
|
+
<b>What the 0.60 residual actually was.</b> The prior card described its leftover as “entries
|
|
1091
|
+
sharing a <em>name</em> whose bodies genuinely differ, which must stay separate” — true
|
|
1092
|
+
as stated, and it reads as a rounding error. At 466 taps the same residual is a full result page.
|
|
1093
|
+
The gap between 0.60 and 10.0 is worth understanding before designing anything: the 77-tap
|
|
1094
|
+
measurement used 50 natural-language queries averaged, and an <em>average</em> hides the shape here.
|
|
1095
|
+
Duplicate pressure was already known to be a step function of <em>which</em> registries are tapped
|
|
1096
|
+
rather than how many; near-identical pressure looks like a step function of <b>which query</b> —
|
|
1097
|
+
harmless across a query set, total on any query that lands on a widely-mirrored skill. Re-measure
|
|
1098
|
+
per-query maxima, not means.
|
|
1099
|
+
|
|
1100
|
+
<b>The hard part is the safety proof, not the clustering.</b> Content hashing was adoptable because
|
|
1101
|
+
one count settled it: of 14,153 distinct bodies, clusters spanning more than one name numbered
|
|
1102
|
+
<b>zero</b>, so collapsing could not merge two different skills. Near-identical clustering has no
|
|
1103
|
+
such free proof — any similarity threshold loose enough to merge a Japanese translation with
|
|
1104
|
+
its English original is loose enough to merge two genuinely different skills that share boilerplate.
|
|
1105
|
+
Establish the equivalent bound first (over a real corpus, at the chosen threshold, count clusters
|
|
1106
|
+
spanning more than one <em>meaning</em>) or the fix trades a visible problem for a silent one.
|
|
1107
|
+
|
|
1108
|
+
<b>Three things to get right.</b> <em>Translations are the motivating case and the hardest</em>: they
|
|
1109
|
+
share almost no tokens with the original, so token-overlap similarity will not find them while an
|
|
1110
|
+
embedding will — and the vectors are already on disk, which makes this cheaper here than it
|
|
1111
|
+
would be anywhere else. <em>Collapse before <code>k</code></em>, and at both the
|
|
1112
|
+
<code>retrieve</code> and <code>retrieve_any</code> seams, for the reason the shipped dedup already
|
|
1113
|
+
documents: fusion reintroduces copies either engine dropped, because the copies are distinct
|
|
1114
|
+
<code>(tap, skill_md)</code> keys and RRF has no reason to treat them as one. <em>The existing
|
|
1115
|
+
quality prior carries over unchanged</em> — <code>rag.source_rank</code> orders on the user's
|
|
1116
|
+
<code>curated</code> flag first and shipped <code>confidence</code> second, and choosing among
|
|
1117
|
+
near-identical copies is the same question as choosing among identical ones: where should the user
|
|
1118
|
+
install from.
|
|
1119
|
+
|
|
1120
|
+
<b>Not to be confused with <code>#629</code></b>, which deduplicated vector <em>storage</em> (one
|
|
1121
|
+
row per distinct embedding, 39.7% repeats reclaimed). That is a disk-size fix beneath the index and
|
|
1122
|
+
changes no ranking; this is about which rows reach the user's screen.</p>
|
|
1123
|
+
<div class="meta">
|
|
1124
|
+
<span class="m">Complexity <b>M</b></span>
|
|
1125
|
+
<span class="m hi">Impact <b>High</b></span>
|
|
1126
|
+
<span class="m">Wow <b class="wow">★★★★</b></span>
|
|
1127
|
+
<span class="m">10 of 10 slots on a real 466-tap install, all past byte-identical dedup</span>
|
|
1128
|
+
</div>
|
|
1129
|
+
</article>
|
|
1013
1130
|
<!-- /ROADMAP:cards -->
|
|
1014
1131
|
|
|
1015
1132
|
</div>
|
|
@@ -7327,7 +7444,16 @@ bodies cannot merge two genuinely different skills, which name-clustering would
|
|
|
7327
7444
|
|
|
7328
7445
|
<b>Related follow-on:</b> the same duplicate shape reaches <code>resolve_one</code>, where a tap that
|
|
7329
7446
|
vendors its own skills produced an unanswerable disambiguation prompt. Tracked separately in
|
|
7330
|
-
<code>resolve-vendored-duplicate-copies</code
|
|
7447
|
+
<code>resolve-vendored-duplicate-copies</code>.
|
|
7448
|
+
|
|
7449
|
+
<b>The remainder now has its own card, and it is not a rounding error.</b> This card's last open
|
|
7450
|
+
item — near-identical rather than byte-identical clustering — was left as a footnote
|
|
7451
|
+
under a <code>shipped</code> status, described by the 0.60 residual duplicate slots per query. On a
|
|
7452
|
+
real 466-tap install a single query (<code>exa search</code>) puts the same skill in <b>10 of 10
|
|
7453
|
+
slots</b>, in Japanese, Chinese and five English phrasings, every copy passing content-hash dedup
|
|
7454
|
+
correctly because the bodies genuinely differ. The averaged residual hid a per-query maximum an
|
|
7455
|
+
order of magnitude larger. See
|
|
7456
|
+
<a href="#near-identical-copies-still-eat-the-slots">near-identical copies still eat the slots</a>.</p></details>
|
|
7331
7457
|
<div class="meta">
|
|
7332
7458
|
<span class="m">Complexity <b>M</b></span>
|
|
7333
7459
|
<span class="m hi">Impact <b>High</b></span>
|
|
@@ -27,6 +27,7 @@ satisfy.
|
|
|
27
27
|
from __future__ import annotations
|
|
28
28
|
|
|
29
29
|
import importlib.util
|
|
30
|
+
import re
|
|
30
31
|
from pathlib import Path
|
|
31
32
|
|
|
32
33
|
import pytest
|
|
@@ -110,6 +111,59 @@ class TestEveryBotPullRequestPassesTheDcoGate:
|
|
|
110
111
|
"%s does not set `sign-commits: true`" % workflow)
|
|
111
112
|
|
|
112
113
|
|
|
114
|
+
class TestTheirPullRequestsCanActuallyRunChecks:
|
|
115
|
+
"""A PR the default token opened cannot start the checks it is gated on.
|
|
116
|
+
|
|
117
|
+
GitHub suppresses workflow triggers for anything done with the repository's
|
|
118
|
+
own `GITHUB_TOKEN`, to stop a workflow re-triggering itself forever. So a
|
|
119
|
+
pull request these workflows open with it gets **no** `on: pull_request`
|
|
120
|
+
run: `ci.yml`'s twenty required checks never start, and branch protection
|
|
121
|
+
refuses the merge with "20 of 20 required status checks are expected".
|
|
122
|
+
|
|
123
|
+
That is not theoretical. #617 and #631 both sat unmergeable in exactly that
|
|
124
|
+
state, and #617's recording never reached main — the workflow had been
|
|
125
|
+
faithfully opening pull requests nobody could land.
|
|
126
|
+
|
|
127
|
+
Passing a token that belongs to an account rather than to the workflow is
|
|
128
|
+
the fix the action's own docs name as standard. The fallback to
|
|
129
|
+
`github.token` matters as much as the token: without it a fork, or this
|
|
130
|
+
repo before the secret exists, would fail the step outright rather than
|
|
131
|
+
degrade to the old behaviour.
|
|
132
|
+
"""
|
|
133
|
+
|
|
134
|
+
@pytest.mark.parametrize("workflow,With", _pr_steps(),
|
|
135
|
+
ids=[w for w, _ in _pr_steps()])
|
|
136
|
+
def test_the_step_passes_an_explicit_token(self, workflow, With):
|
|
137
|
+
assert "token" in With, (
|
|
138
|
+
"%s opens a PR with the default GITHUB_TOKEN, so none of ci.yml's "
|
|
139
|
+
"required checks will run on it and branch protection can never "
|
|
140
|
+
"be satisfied" % workflow)
|
|
141
|
+
|
|
142
|
+
@pytest.mark.parametrize("workflow,With", _pr_steps(),
|
|
143
|
+
ids=[w for w, _ in _pr_steps()])
|
|
144
|
+
def test_that_token_is_not_just_the_default_again(self, workflow, With):
|
|
145
|
+
# `token: ${{ github.token }}` would satisfy the test above and change
|
|
146
|
+
# nothing at all.
|
|
147
|
+
tok = str(With.get("token", ""))
|
|
148
|
+
assert "secrets." in tok, tok
|
|
149
|
+
|
|
150
|
+
@pytest.mark.parametrize("workflow,With", _pr_steps(),
|
|
151
|
+
ids=[w for w, _ in _pr_steps()])
|
|
152
|
+
def test_it_still_works_where_the_secret_does_not_exist(self, workflow,
|
|
153
|
+
With):
|
|
154
|
+
# A fork has no secrets. Without a fallback the step fails there, which
|
|
155
|
+
# trades an unmergeable PR for a red workflow — strictly worse.
|
|
156
|
+
tok = str(With.get("token", ""))
|
|
157
|
+
assert "||" in tok and "github.token" in tok, tok
|
|
158
|
+
|
|
159
|
+
def test_every_pr_opening_workflow_uses_the_same_secret(self):
|
|
160
|
+
# One name, so creating the secret fixes all five at once and a typo in
|
|
161
|
+
# one cannot leave a single workflow silently on the old behaviour.
|
|
162
|
+
names = {re.search(r"secrets\.([A-Z_0-9]+)", str(w.get("token", ""))).group(1)
|
|
163
|
+
for _n, w in _pr_steps() if "secrets." in str(w.get("token", ""))}
|
|
164
|
+
assert len(names) == 1, names
|
|
165
|
+
|
|
166
|
+
|
|
113
167
|
class TestTheDefaultIsRecordedAsTheBug:
|
|
114
168
|
"""Without this the fix above reads as an arbitrary preference."""
|
|
115
169
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.vale/styles/config/vocabularies/boost/accept.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|