boost-skill-cli 1.2.34__tar.gz → 1.2.36__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.34 → boost_skill_cli-1.2.36}/CONTRIBUTING.md +11 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/Makefile +2 -0
- {boost_skill_cli-1.2.34/boost_skill_cli.egg-info → boost_skill_cli-1.2.36}/PKG-INFO +1 -1
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36/boost_skill_cli.egg-info}/PKG-INFO +1 -1
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_skill_cli.egg-info/SOURCES.txt +12 -0
- boost_skill_cli-1.2.36/docs/roadmap/items/branch-current-gate.md +39 -0
- boost_skill_cli-1.2.36/docs/roadmap/items/vex-openvex-feed.md +39 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap.html +72 -1
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/security-design.md +37 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/verifying-releases.md +9 -0
- boost_skill_cli-1.2.36/docs/vex/meta.md +12 -0
- boost_skill_cli-1.2.36/docs/vex/openvex.json +61 -0
- boost_skill_cli-1.2.36/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +15 -0
- boost_skill_cli-1.2.36/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +22 -0
- boost_skill_cli-1.2.36/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +17 -0
- boost_skill_cli-1.2.36/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +20 -0
- boost_skill_cli-1.2.36/scripts/build_vex.py +175 -0
- boost_skill_cli-1.2.36/scripts/check_branch_current.py +94 -0
- boost_skill_cli-1.2.36/tests/unit/test_branch_current.py +56 -0
- boost_skill_cli-1.2.36/tests/unit/test_vex.py +266 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/.gitattributes +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/.gitignore +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/.lycheeignore +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/.vale/styles/boost/AIWriting.yml +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/.vale.ini +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/CLAUDE.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/DCO +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/GOVERNANCE.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/LICENSE +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/MAINTAINERS.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/MANIFEST.in +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/README.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/SECURITY.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/SUPPORT.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/bmad.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/bootstrap.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/browse.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/builtin.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/catalogbundle.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/complete.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/hookhost.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/data/rules/boost-first.mdc +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_langchain/__init__.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_langchain/_compat.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_langchain/graph.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_langchain/loader.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_langchain/py.typed +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_langchain/retriever.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/codecov.yml +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/adapters.html +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/bmad.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/carousel.html +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/chat.html +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/code-review.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/commands.html +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/commit-audit.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/demo.gif +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/demo.html +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/demo.tape +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/dependencies.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/eval-latest.json +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/eval.html +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/index.html +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/langchain.html +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/openssf-badge.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/boost-first-rule.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/cli-command-audit.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/install-path-disambiguation.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/openssf-silver.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/osps-baseline-levels.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/zip-strict-audit.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/semantic-search.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/evals/README.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/evals/__init__.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/evals/baseline.json +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/evals/metrics.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/evals/publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/examples/README.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/index.html +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/noxfile.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/pyproject.toml +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/add_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/build_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/check_dco.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/check_reproducible.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/eval_corpus.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/measure_registry.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/normalize_sdist.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/page_budget.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/publish_eval_json.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/scripts/serve_docs.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/setup.cfg +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/sonar-project.properties +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/style/README.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/style/boost.css +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/style/boost.js +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/style/demo.html +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/conftest.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/eval/taps-scale.txt +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/functional/test_cli_catalog.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/functional/test_cli_hooks_gemini.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/functional/test_cli_pane_width.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/functional/test_kind_conformance.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/langchain/conftest.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/langchain/test_graph.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/langchain/test_loader.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/langchain/test_retriever.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_action_pin_lockstep.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_bmad_core.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_boost_first_offer.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_bootstrap.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_browse.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_builtin.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_catalogbundle.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_check_dco.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_check_reproducible.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_clean_internal_cache.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_compact.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_complete.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_complete_rc_block.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_content_identity.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_crash_redaction.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_dense_embed_dedupe.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_dense_quantized.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_dense_ready_order.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_dense_shard_real_schema.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_dense_status_cheap.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_embed_truncated_response.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_eval_corpus.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_eval_grading.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_gemini_agent_sanitize.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_gitutil_lfs.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_gitutil_sparse.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_hook_settings_hosts.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_hookhost.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_install_permission_error.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_langchain_packaging.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_link_ownership.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_measure_registry.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_normalize_sdist.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_page_budget.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_rag_fastpath.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_registry_control_chars.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_rerank_cache.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_serve_docs.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_shards_matrix.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_smoke_covers_every_command.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_store_materialize.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_sync_blocked_links.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_visual_harness_flags.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_workflow_concurrency_groups.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_workflow_push_has_credentials.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/visual/package-lock.json +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.2.34 → boost_skill_cli-1.2.36}/tests/visual/visual_check.mjs +0 -0
|
@@ -257,6 +257,17 @@ branch ruleset (**Settings → Rules → Rulesets**):
|
|
|
257
257
|
gate before it can merge, so an incompatible pair can't both land — the second
|
|
258
258
|
PR must include the first and re-run CI.
|
|
259
259
|
|
|
260
|
+
> **Set it in the ruleset, and verify it from the API.** This repository asks
|
|
261
|
+
> for that rule in two places, and for a while neither one enforced it. Classic
|
|
262
|
+
> branch protection had `strict: true` *and* `enforce_admins: false`, so it
|
|
263
|
+
> skipped the only account that merges; the active ruleset — no bypass actors,
|
|
264
|
+
> so it does apply — had `strict_required_status_checks_policy: false`. Two
|
|
265
|
+
> mechanisms, and the binding one had the safety off. Two PRs then merged into
|
|
266
|
+
> a red `main`, which stopped the release guard arming and left two merged PRs
|
|
267
|
+
> unreleased. Check the real state with
|
|
268
|
+
> `gh api repos/jonnyeclectic/boost/rulesets/<id>`, never the settings page,
|
|
269
|
+
> and note that the `branch-current` required check now backstops it.
|
|
270
|
+
>
|
|
260
271
|
> Check names must be **unique across workflows** — GitHub matches a required
|
|
261
272
|
> check by name alone. Three names collided before this was written (`lint` in
|
|
262
273
|
> ci/markdownlint/theme-lint, `audit` in lighthouse/pip-audit, `analyze` in
|
|
@@ -88,6 +88,7 @@ lint:
|
|
|
88
88
|
$(PY) scripts/build_registries.py --check
|
|
89
89
|
$(PY) scripts/build_roadmap.py --check
|
|
90
90
|
$(PY) scripts/build_command_reference.py --check
|
|
91
|
+
$(PY) scripts/build_vex.py --check
|
|
91
92
|
$(PY) scripts/lock_toolchain.py --check
|
|
92
93
|
$(PY) scripts/a11y_check.py
|
|
93
94
|
$(PY) scripts/page_budget.py
|
|
@@ -237,6 +238,7 @@ generate:
|
|
|
237
238
|
$(PY) scripts/build_registries.py
|
|
238
239
|
$(PY) scripts/build_roadmap.py
|
|
239
240
|
$(PY) scripts/build_command_reference.py
|
|
241
|
+
$(PY) scripts/build_vex.py
|
|
240
242
|
|
|
241
243
|
# regenerate docs/demo.gif (brew install vhs)
|
|
242
244
|
demo:
|
|
@@ -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.36'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 2, 36)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -213,6 +213,7 @@ docs/roadmap/items/boost-first-carried-the-losing-trigger.md
|
|
|
213
213
|
docs/roadmap/items/boost-first-rule.md
|
|
214
214
|
docs/roadmap/items/boost-langchain-publishing.md
|
|
215
215
|
docs/roadmap/items/boost-run-live-agents.md
|
|
216
|
+
docs/roadmap/items/branch-current-gate.md
|
|
216
217
|
docs/roadmap/items/bring-commands-under-mutation-testing.md
|
|
217
218
|
docs/roadmap/items/broken-link-and-anchor-checking-lychee.md
|
|
218
219
|
docs/roadmap/items/browse-could-not-search-two-words.md
|
|
@@ -463,6 +464,7 @@ docs/roadmap/items/update-diff-before-apply.md
|
|
|
463
464
|
docs/roadmap/items/update-refreshed-rules-without-a-gate.md
|
|
464
465
|
docs/roadmap/items/update-refreshes-rules-and-workflows.md
|
|
465
466
|
docs/roadmap/items/update-reinstall-widens-agent-scope.md
|
|
467
|
+
docs/roadmap/items/vex-openvex-feed.md
|
|
466
468
|
docs/roadmap/items/visual-regression-pass-on-the-guide.md
|
|
467
469
|
docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md
|
|
468
470
|
docs/roadmap/items/windows-in-the-ci-matrix.md
|
|
@@ -475,6 +477,12 @@ docs/roadmap/items/zip-strict-audit.md
|
|
|
475
477
|
docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md
|
|
476
478
|
docs/roadmap/items/zizmor-pin-is-a-yanked-release.md
|
|
477
479
|
docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md
|
|
480
|
+
docs/vex/meta.md
|
|
481
|
+
docs/vex/openvex.json
|
|
482
|
+
docs/vex/statements/gitleaks-secretscan-test-fixtures.md
|
|
483
|
+
docs/vex/statements/quality-trust-fingerprint-not-sensitive.md
|
|
484
|
+
docs/vex/statements/zizmor-adhoc-packages-lint-runners.md
|
|
485
|
+
docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md
|
|
478
486
|
evals/README.md
|
|
479
487
|
evals/__init__.py
|
|
480
488
|
evals/baseline.json
|
|
@@ -507,7 +515,9 @@ scripts/build_demo_index.py
|
|
|
507
515
|
scripts/build_registries.py
|
|
508
516
|
scripts/build_roadmap.py
|
|
509
517
|
scripts/build_scale_corpus.py
|
|
518
|
+
scripts/build_vex.py
|
|
510
519
|
scripts/check_anchors.py
|
|
520
|
+
scripts/check_branch_current.py
|
|
511
521
|
scripts/check_dco.py
|
|
512
522
|
scripts/check_licenses.py
|
|
513
523
|
scripts/check_reproducible.py
|
|
@@ -627,6 +637,7 @@ tests/unit/test_ai.py
|
|
|
627
637
|
tests/unit/test_bmad_core.py
|
|
628
638
|
tests/unit/test_boost_first_offer.py
|
|
629
639
|
tests/unit/test_bootstrap.py
|
|
640
|
+
tests/unit/test_branch_current.py
|
|
630
641
|
tests/unit/test_browse.py
|
|
631
642
|
tests/unit/test_builtin.py
|
|
632
643
|
tests/unit/test_capabilities.py
|
|
@@ -767,6 +778,7 @@ tests/unit/test_typosquat.py
|
|
|
767
778
|
tests/unit/test_updatediff.py
|
|
768
779
|
tests/unit/test_util.py
|
|
769
780
|
tests/unit/test_version.py
|
|
781
|
+
tests/unit/test_vex.py
|
|
770
782
|
tests/unit/test_visual_harness_flags.py
|
|
771
783
|
tests/unit/test_workflow_concurrency.py
|
|
772
784
|
tests/unit/test_workflow_concurrency_groups.py
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: branch-current-gate
|
|
3
|
+
board: code
|
|
4
|
+
section: health
|
|
5
|
+
status: inflight
|
|
6
|
+
category: CI · Release safety
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: High
|
|
9
|
+
wow: 4
|
|
10
|
+
note: two protection mechanisms disagreed; the binding one had the safety off
|
|
11
|
+
order: 10
|
|
12
|
+
owner: loop/generated-freshness
|
|
13
|
+
pr:
|
|
14
|
+
title: main went red because "require branches up to date" was never actually on
|
|
15
|
+
---
|
|
16
|
+
Two pull requests, each green against the <code>main</code> it was tested on, merged into a
|
|
17
|
+
combination that turned <code>main</code> red. Their source files did not conflict. The
|
|
18
|
+
<b>generated</b> <code>docs/roadmap.html</code> did — and a squash merge takes one side of a
|
|
19
|
+
generated file <b>without ever reporting a conflict</b>. The board's "Loop finds" counter was
|
|
20
|
+
correct on both branches and wrong for their union.
|
|
21
|
+
<b>Seventeen jobs failed on one line.</b> Ten test legs, the lint job and all six mutation
|
|
22
|
+
shards — the shards because the unit suite runs inside <code>mutants/</code>, where
|
|
23
|
+
<code>test_roadmap_fresh</code> fails baseline <i>collection</i>, so a stale generated file
|
|
24
|
+
reads as "the mutation gate could not start". And because <code>ci</code> was red on
|
|
25
|
+
<code>main</code>, the release workflow's guard never armed: two merged pull requests, one of
|
|
26
|
+
them the reproducible-build pipeline, sat on <code>main</code> with no tag.
|
|
27
|
+
<b>The root cause was a setting, and the trap was that it looked set.</b> The repository asks
|
|
28
|
+
GitHub to require branches be up to date <b>twice</b>. Classic branch protection has
|
|
29
|
+
<code>strict: true</code> — and <code>enforce_admins: false</code>, so it does not apply to the
|
|
30
|
+
one account that merges. The active ruleset, which has no bypass actors and therefore does
|
|
31
|
+
apply, had <code>strict_required_status_checks_policy: false</code>. Two mechanisms, and the
|
|
32
|
+
binding one had the safety off. They also disagreed on how many checks are required: 14, 20,
|
|
33
|
+
and 21 in <code>required-checks.txt</code>.
|
|
34
|
+
<b>Fixed both ways.</b> The ruleset now enforces up-to-date merges, verified by reading it back
|
|
35
|
+
from the API rather than trusting the settings page. And <code>branch-current</code> is now a
|
|
36
|
+
required check, because that setting is invisible config that drifted once and can drift again
|
|
37
|
+
— a required check is in the diff, in <code>required-checks.txt</code>, and shows up in review.
|
|
38
|
+
Within minutes of the fix, GitHub moved two open pull requests to <code>behind</code> and
|
|
39
|
+
refused them; an hour earlier both would have merged and broken <code>main</code> a second time.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: vex-openvex-feed
|
|
3
|
+
board: code
|
|
4
|
+
section: health
|
|
5
|
+
status: shipped
|
|
6
|
+
category: Security · Posture
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: Low
|
|
9
|
+
wow: 2
|
|
10
|
+
note: OSPS-VM-04.02 — 4 statements, zero fabricated CVEs
|
|
11
|
+
order: 45
|
|
12
|
+
owner: loop/vex
|
|
13
|
+
pr:
|
|
14
|
+
title: A machine-readable VEX feed, sourced from findings that already existed
|
|
15
|
+
---
|
|
16
|
+
<code>OSPS-VM-04.02</code> — a Level 3 Baseline criterion <a
|
|
17
|
+
href="roadmap.html#osps-baseline-levels">the audit</a> hadn't reached — asks for a VEX
|
|
18
|
+
document accounting for vulnerabilities that don't affect the project, with the
|
|
19
|
+
non-exploitability reasoning attached. boost already had that reasoning; it just wasn't in a
|
|
20
|
+
form a consumer could ingest. CodeQL dismissals carry a <code>#
|
|
21
|
+
codeql[rule-id]</code> comment, <code>.gitleaks.toml</code> allowlists boost's own synthetic
|
|
22
|
+
secret-scanner fixtures, and <code>.github/zizmor.yml</code> documents six ignores by reason.
|
|
23
|
+
<a href="https://openvex.dev/">OpenVEX</a> 0.2.0 turns those into
|
|
24
|
+
a published document at <code>docs/vex/openvex.json</code>,
|
|
25
|
+
generated by <code>scripts/build_vex.py</code> from one statement file per finding under
|
|
26
|
+
<code>docs/vex/statements/</code> — the same one-file-per-item convention the roadmap boards
|
|
27
|
+
themselves use, wired into <code>make generate</code> and a <code>--check</code> freshness
|
|
28
|
+
gate in CI.
|
|
29
|
+
<b>Four statements, and every one traces to a real, already-merged suppression</b> — not an
|
|
30
|
+
invented CVE. boost has never had one, so nothing here is named <code>CVE-</code> or
|
|
31
|
+
<code>GHSA-</code>; each statement's vulnerability name is the scanner's own rule id instead
|
|
32
|
+
(<code>codeql:py/clear-text-logging-sensitive-data</code>, <code>gitleaks:...</code>,
|
|
33
|
+
<code>zizmor:dangerous-triggers</code>, <code>zizmor:adhoc-packages</code>).
|
|
34
|
+
<b>This satisfies one criterion, not the level.</b> <code>OSPS-QA-07.01</code> — a non-author
|
|
35
|
+
human approval before merge — is the wall Level 3 hits regardless, and this change does not
|
|
36
|
+
move it; <code>docs/openssf-badge.md</code> tracks the passing-badge criteria only and has no
|
|
37
|
+
Baseline rows to flip, so the record lives here and in
|
|
38
|
+
<code>docs/security-design.md</code>
|
|
39
|
+
instead.
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
<div class="stat"><b>17</b><span>Shipped</span></div>
|
|
134
134
|
<div class="stat"><b>1</b><span>Next up</span></div>
|
|
135
135
|
<div class="stat"><b>7</b><span>Planned</span></div>
|
|
136
|
-
<div class="stat"><b>
|
|
136
|
+
<div class="stat"><b>280</b><span>Loop finds</span></div>
|
|
137
137
|
<!-- /ROADMAP:stats -->
|
|
138
138
|
</div>
|
|
139
139
|
</section>
|
|
@@ -5015,6 +5015,41 @@ re-embeds every vector already paid for.</p>
|
|
|
5015
5015
|
</div>
|
|
5016
5016
|
</article>
|
|
5017
5017
|
|
|
5018
|
+
<article class="cap rcard" id="branch-current-gate">
|
|
5019
|
+
<div class="head"><span class="pill inflight">In flight</span><span class="cat">CI · Release safety</span></div>
|
|
5020
|
+
<h3>main went red because "require branches up to date" was never actually on</h3>
|
|
5021
|
+
<p>Two pull requests, each green against the <code>main</code> it was tested on, merged into a
|
|
5022
|
+
combination that turned <code>main</code> red. Their source files did not conflict. The
|
|
5023
|
+
<b>generated</b> <code>docs/roadmap.html</code> did — and a squash merge takes one side of a
|
|
5024
|
+
generated file <b>without ever reporting a conflict</b>. The board's "Loop finds" counter was
|
|
5025
|
+
correct on both branches and wrong for their union.
|
|
5026
|
+
<b>Seventeen jobs failed on one line.</b> Ten test legs, the lint job and all six mutation
|
|
5027
|
+
shards — the shards because the unit suite runs inside <code>mutants/</code>, where
|
|
5028
|
+
<code>test_roadmap_fresh</code> fails baseline <i>collection</i>, so a stale generated file
|
|
5029
|
+
reads as "the mutation gate could not start". And because <code>ci</code> was red on
|
|
5030
|
+
<code>main</code>, the release workflow's guard never armed: two merged pull requests, one of
|
|
5031
|
+
them the reproducible-build pipeline, sat on <code>main</code> with no tag.
|
|
5032
|
+
<b>The root cause was a setting, and the trap was that it looked set.</b> The repository asks
|
|
5033
|
+
GitHub to require branches be up to date <b>twice</b>. Classic branch protection has
|
|
5034
|
+
<code>strict: true</code> — and <code>enforce_admins: false</code>, so it does not apply to the
|
|
5035
|
+
one account that merges. The active ruleset, which has no bypass actors and therefore does
|
|
5036
|
+
apply, had <code>strict_required_status_checks_policy: false</code>. Two mechanisms, and the
|
|
5037
|
+
binding one had the safety off. They also disagreed on how many checks are required: 14, 20,
|
|
5038
|
+
and 21 in <code>required-checks.txt</code>.
|
|
5039
|
+
<b>Fixed both ways.</b> The ruleset now enforces up-to-date merges, verified by reading it back
|
|
5040
|
+
from the API rather than trusting the settings page. And <code>branch-current</code> is now a
|
|
5041
|
+
required check, because that setting is invisible config that drifted once and can drift again
|
|
5042
|
+
— a required check is in the diff, in <code>required-checks.txt</code>, and shows up in review.
|
|
5043
|
+
Within minutes of the fix, GitHub moved two open pull requests to <code>behind</code> and
|
|
5044
|
+
refused them; an hour earlier both would have merged and broken <code>main</code> a second time.</p>
|
|
5045
|
+
<div class="meta">
|
|
5046
|
+
<span class="m">Complexity <b>S</b></span>
|
|
5047
|
+
<span class="m hi">Impact <b>High</b></span>
|
|
5048
|
+
<span class="m">Wow <b class="wow">★★★★</b></span>
|
|
5049
|
+
<span class="m">two protection mechanisms disagreed; the binding one had the safety off</span>
|
|
5050
|
+
</div>
|
|
5051
|
+
</article>
|
|
5052
|
+
|
|
5018
5053
|
<article class="cap rcard" id="log-timestamps-mislabeled-utc">
|
|
5019
5054
|
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Observability · Diagnostics</span></div>
|
|
5020
5055
|
<h3>Log timestamps are local time mislabeled <code>Z</code></h3>
|
|
@@ -5252,6 +5287,42 @@ composed into a blind spot, which is the shape most of these have.</p>
|
|
|
5252
5287
|
<span class="m">Gemini warned once per skill per session and no boost surface could see it</span>
|
|
5253
5288
|
</div>
|
|
5254
5289
|
</article>
|
|
5290
|
+
|
|
5291
|
+
<article class="cap rcard" id="vex-openvex-feed">
|
|
5292
|
+
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Security · Posture</span></div>
|
|
5293
|
+
<h3>A machine-readable VEX feed, sourced from findings that already existed</h3>
|
|
5294
|
+
<details class="cardbody"><summary>Write-up</summary>
|
|
5295
|
+
<p><code>OSPS-VM-04.02</code> — a Level 3 Baseline criterion <a
|
|
5296
|
+
href="roadmap.html#osps-baseline-levels">the audit</a> hadn't reached — asks for a VEX
|
|
5297
|
+
document accounting for vulnerabilities that don't affect the project, with the
|
|
5298
|
+
non-exploitability reasoning attached. boost already had that reasoning; it just wasn't in a
|
|
5299
|
+
form a consumer could ingest. CodeQL dismissals carry a <code>#
|
|
5300
|
+
codeql[rule-id]</code> comment, <code>.gitleaks.toml</code> allowlists boost's own synthetic
|
|
5301
|
+
secret-scanner fixtures, and <code>.github/zizmor.yml</code> documents six ignores by reason.
|
|
5302
|
+
<a href="https://openvex.dev/">OpenVEX</a> 0.2.0 turns those into
|
|
5303
|
+
a published document at <code>docs/vex/openvex.json</code>,
|
|
5304
|
+
generated by <code>scripts/build_vex.py</code> from one statement file per finding under
|
|
5305
|
+
<code>docs/vex/statements/</code> — the same one-file-per-item convention the roadmap boards
|
|
5306
|
+
themselves use, wired into <code>make generate</code> and a <code>--check</code> freshness
|
|
5307
|
+
gate in CI.
|
|
5308
|
+
<b>Four statements, and every one traces to a real, already-merged suppression</b> — not an
|
|
5309
|
+
invented CVE. boost has never had one, so nothing here is named <code>CVE-</code> or
|
|
5310
|
+
<code>GHSA-</code>; each statement's vulnerability name is the scanner's own rule id instead
|
|
5311
|
+
(<code>codeql:py/clear-text-logging-sensitive-data</code>, <code>gitleaks:...</code>,
|
|
5312
|
+
<code>zizmor:dangerous-triggers</code>, <code>zizmor:adhoc-packages</code>).
|
|
5313
|
+
<b>This satisfies one criterion, not the level.</b> <code>OSPS-QA-07.01</code> — a non-author
|
|
5314
|
+
human approval before merge — is the wall Level 3 hits regardless, and this change does not
|
|
5315
|
+
move it; <code>docs/openssf-badge.md</code> tracks the passing-badge criteria only and has no
|
|
5316
|
+
Baseline rows to flip, so the record lives here and in
|
|
5317
|
+
<code>docs/security-design.md</code>
|
|
5318
|
+
instead.</p></details>
|
|
5319
|
+
<div class="meta">
|
|
5320
|
+
<span class="m">Complexity <b>S</b></span>
|
|
5321
|
+
<span class="m">Impact <b>Low</b></span>
|
|
5322
|
+
<span class="m">Wow <b class="wow">★★</b></span>
|
|
5323
|
+
<span class="m">OSPS-VM-04.02 — 4 statements, zero fabricated CVEs</span>
|
|
5324
|
+
</div>
|
|
5325
|
+
</article>
|
|
5255
5326
|
<!-- /ROADMAP:cards -->
|
|
5256
5327
|
|
|
5257
5328
|
</div>
|
|
@@ -173,6 +173,43 @@ Every one of these gates blocks a merge to `main`.
|
|
|
173
173
|
| `import-linter` | the layering that keeps `core/` free of CLI concerns |
|
|
174
174
|
| SLSA provenance + PyPI Trusted Publishing | a released artifact traces to the commit and workflow that built it |
|
|
175
175
|
|
|
176
|
+
## VEX: accounting for findings that don't affect boost
|
|
177
|
+
|
|
178
|
+
Every tool in the table above finds things it does not fix — a CodeQL query
|
|
179
|
+
firing on a pattern that isn't actually sensitive here, a gitleaks match on a
|
|
180
|
+
string that was never a real credential, a zizmor rule on a trigger that
|
|
181
|
+
carries its own mitigation. Each dismissal already has a written reason living
|
|
182
|
+
next to the code it describes: a `# codeql[rule-id]` suppression comment, a
|
|
183
|
+
`.gitleaks.toml` allowlist entry, an ignore in `.github/zizmor.yml`. None of
|
|
184
|
+
that was a document a consumer could ingest, which is exactly what OSPS
|
|
185
|
+
Baseline's `OSPS-VM-04.02` asks for: *"While active, any vulnerabilities in
|
|
186
|
+
the software components not affecting the project MUST be accounted for in a
|
|
187
|
+
VEX document, augmenting the vulnerability report with non-exploitability
|
|
188
|
+
details."*
|
|
189
|
+
|
|
190
|
+
[`docs/vex/openvex.json`](vex/openvex.json) is that document — an
|
|
191
|
+
[OpenVEX](https://openvex.dev/) 0.2.0 feed, published at
|
|
192
|
+
<https://jonnyeclectic.github.io/boost/vex/openvex.json>. It is generated by
|
|
193
|
+
`scripts/build_vex.py` from one Markdown file per statement under
|
|
194
|
+
[`docs/vex/statements/`](vex/statements/) — the same one-file-per-item
|
|
195
|
+
convention `docs/roadmap/items/*.md` uses, so two people adding two different
|
|
196
|
+
findings edit two different files rather than one shared JSON blob.
|
|
197
|
+
`make generate` regenerates it; `make lint` and CI both run
|
|
198
|
+
`build_vex.py --check` and fail if the committed document has drifted from
|
|
199
|
+
its source files.
|
|
200
|
+
|
|
201
|
+
Every statement in it today is sourced from a real, already-dismissed finding
|
|
202
|
+
in this repository, not an invented one — the print-side CodeQL
|
|
203
|
+
`py/clear-text-logging-sensitive-data` finding on `trust add`'s fingerprint
|
|
204
|
+
line, the gitleaks allowlist entry for `tests/unit/test_secretscan.py`'s
|
|
205
|
+
synthetic fixtures, and the two categories of `zizmor` ignores in
|
|
206
|
+
`.github/zizmor.yml`. **boost has never had a CVE**, so the document names no
|
|
207
|
+
CVE or GHSA identifier — each statement's `vulnerability.name` is the
|
|
208
|
+
scanner's own rule id (`codeql:...`, `gitleaks:...`, `zizmor:...`) instead. An
|
|
209
|
+
empty-but-honest VEX document would have been the right call had none of these
|
|
210
|
+
findings existed to describe; naming a vulnerability that was never reported
|
|
211
|
+
would not have been.
|
|
212
|
+
|
|
176
213
|
## Security review record
|
|
177
214
|
|
|
178
215
|
OpenSSF Best Practices `security_review` asks for a review performed within the
|
|
@@ -77,6 +77,15 @@ PGP key for boost, they did not come from this project.
|
|
|
77
77
|
| Git tag | Points at the commit the release was built from | `git verify-tag` is *not* applicable — tags are unsigned; the provenance attestation is the authority |
|
|
78
78
|
| Release notes | Assembled from the merged pull requests in that release | [Releases page](https://github.com/jonnyeclectic/boost/releases) |
|
|
79
79
|
|
|
80
|
+
## VEX: findings that do not affect boost
|
|
81
|
+
|
|
82
|
+
The SBOM says what is in a release; a separate, continuously-updated
|
|
83
|
+
[OpenVEX](https://openvex.dev/) document says which known findings against
|
|
84
|
+
those components don't actually affect boost, with the reasoning attached.
|
|
85
|
+
It is not published per release — it is always current at
|
|
86
|
+
[`docs/vex/openvex.json`](vex/openvex.json). See
|
|
87
|
+
[security-design.md](security-design.md#vex-accounting-for-findings-that-dont-affect-boost).
|
|
88
|
+
|
|
80
89
|
## Can you rebuild it yourself? Yes — the measurement
|
|
81
90
|
|
|
82
91
|
A reproducible build lets a third party rebuild the artifact from source and
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: openvex
|
|
3
|
+
author: "the boost project (https://github.com/jonnyeclectic/boost)"
|
|
4
|
+
version: 1
|
|
5
|
+
timestamp: "2026-08-28T00:00:00Z"
|
|
6
|
+
---
|
|
7
|
+
Document-level identity for `docs/vex/openvex.json`, hand-edited the way a
|
|
8
|
+
changelog is: bump `version` and set `timestamp` to the date of the change
|
|
9
|
+
whenever a statement under `statements/` is added, changed, or removed.
|
|
10
|
+
Neither field is computed — `scripts/build_vex.py` deliberately never reads
|
|
11
|
+
the wall clock, so `--check` can compare byte-for-byte. This body is prose
|
|
12
|
+
for humans editing the file; it is not part of the generated document.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@context": "https://openvex.dev/ns/v0.2.0",
|
|
3
|
+
"@id": "https://jonnyeclectic.github.io/boost/vex/openvex.json",
|
|
4
|
+
"author": "the boost project (https://github.com/jonnyeclectic/boost)",
|
|
5
|
+
"timestamp": "2026-08-28T00:00:00Z",
|
|
6
|
+
"version": 1,
|
|
7
|
+
"statements": [
|
|
8
|
+
{
|
|
9
|
+
"vulnerability": {
|
|
10
|
+
"name": "gitleaks:leaked-secret-detection"
|
|
11
|
+
},
|
|
12
|
+
"products": [
|
|
13
|
+
{
|
|
14
|
+
"@id": "pkg:pypi/boost-skill-cli"
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
"status": "not_affected",
|
|
18
|
+
"justification": "vulnerable_code_not_present",
|
|
19
|
+
"impact_statement": "`tests/unit/test_secretscan.py` exists to prove `boost_cli/core/secretscan.py`\nflags private keys and API tokens, so it ships synthetic examples of both by\ndesign — strings shaped exactly like the credentials gitleaks' own ruleset\nlooks for. gitleaks correctly matches the shape; none of the matched strings\nis a real, working credential, was ever live, or grants access to anything.\n`.gitleaks.toml` allowlists only this one file, by exact path, and the\nallowlist's own comment states why: nothing else in the repository is\nexcluded from the scan."
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"vulnerability": {
|
|
23
|
+
"name": "codeql:py/clear-text-logging-sensitive-data"
|
|
24
|
+
},
|
|
25
|
+
"products": [
|
|
26
|
+
{
|
|
27
|
+
"@id": "pkg:pypi/boost-skill-cli"
|
|
28
|
+
}
|
|
29
|
+
],
|
|
30
|
+
"status": "not_affected",
|
|
31
|
+
"justification": "vulnerable_code_not_present",
|
|
32
|
+
"impact_statement": "CodeQL's `py/clear-text-logging-sensitive-data` query flags\n`boost trust add`'s success line, which prints the trusted key's name and\nminisign fingerprint, because the argument is user-supplied and `fingerprint`\nreads like a credential name. It is not one: the value is a minisign\n**public** key fingerprint, which is meant to be published, and printing it is\nthe entire point of the command — it is how a user checks by eye that the key\nthey just trusted matches the one the publisher advertises. The class of data\nthe query exists to catch (a secret, token, or password) is not present in\nwhat is logged, so the pattern the rule looks for does not apply here. An\nearlier automated fix that replaced this line with a constant string removed\nthe only verification `trust add` offers; the line was restored, the\nsuppression carries this reasoning inline\n(`# codeql[py/clear-text-logging-sensitive-data]`), and\n`tests/functional/test_tap_signing.py` pins the output so it cannot be quietly\ndropped a second time."
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"vulnerability": {
|
|
36
|
+
"name": "zizmor:adhoc-packages"
|
|
37
|
+
},
|
|
38
|
+
"products": [
|
|
39
|
+
{
|
|
40
|
+
"@id": "pkg:pypi/boost-skill-cli"
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
"status": "not_affected",
|
|
44
|
+
"justification": "inline_mitigations_already_exist",
|
|
45
|
+
"impact_statement": "zizmor's `adhoc-packages` rule flags installing packages without a lockfile,\nbecause an unpinned install can resolve to a tampered or unexpectedly newer\npackage. Two workflows do this on purpose: `theme-lint.yml` installs\nmajor-pinned linters with `--no-save` into an empty checkout — boost ships no\n`package.json`, so a lockfile would exist solely for this one step — and\n`visual.yml` installs a pinned `puppeteer-core` from\n`tests/visual/package.json`, also `--no-save`. Both run on an ephemeral\nrunner, hold only `contents: read`, and their output gates nothing but\nthemselves — a compromised lint or screenshot tool in either job cannot reach\na secret or influence a later, privileged job."
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"vulnerability": {
|
|
49
|
+
"name": "zizmor:dangerous-triggers"
|
|
50
|
+
},
|
|
51
|
+
"products": [
|
|
52
|
+
{
|
|
53
|
+
"@id": "pkg:pypi/boost-skill-cli"
|
|
54
|
+
}
|
|
55
|
+
],
|
|
56
|
+
"status": "not_affected",
|
|
57
|
+
"justification": "inline_mitigations_already_exist",
|
|
58
|
+
"impact_statement": "zizmor's `dangerous-triggers` rule flags `workflow_run`, because the classic\nfailure mode is a privileged run executing pull-request-controlled code. Four\nworkflows use it — `ci-failure-issue.yml`, `publish.yml`, `post-deploy.yml`,\n`sbom.yml` — and each carries the mitigation that makes the pattern safe in\nits specific case, recorded inline in `.github/zizmor.yml`: none of them\nchecks out the triggering run's head SHA (each explicitly checks out `main`,\na release tag, or nothing at all), so no code a fork's pull request could\ninfluence ever runs in the privileged context. `publish.yml`, the one job that\nholds write credentials (PyPI Trusted Publisher OIDC), is additionally scoped\nto `push` events from this repository only — a fork PR opened from a branch\nnamed `main` cannot satisfy that filter. `sbom.yml` is gated on\n`head_repository == this repository` for the same reason. The remaining two\nhold only `contents: read` and no secrets."
|
|
59
|
+
}
|
|
60
|
+
]
|
|
61
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: gitleaks-secretscan-test-fixtures
|
|
3
|
+
vulnerability: "gitleaks:leaked-secret-detection"
|
|
4
|
+
status: not_affected
|
|
5
|
+
justification: vulnerable_code_not_present
|
|
6
|
+
source: .gitleaks.toml, tests/unit/test_secretscan.py
|
|
7
|
+
---
|
|
8
|
+
`tests/unit/test_secretscan.py` exists to prove `boost_cli/core/secretscan.py`
|
|
9
|
+
flags private keys and API tokens, so it ships synthetic examples of both by
|
|
10
|
+
design — strings shaped exactly like the credentials gitleaks' own ruleset
|
|
11
|
+
looks for. gitleaks correctly matches the shape; none of the matched strings
|
|
12
|
+
is a real, working credential, was ever live, or grants access to anything.
|
|
13
|
+
`.gitleaks.toml` allowlists only this one file, by exact path, and the
|
|
14
|
+
allowlist's own comment states why: nothing else in the repository is
|
|
15
|
+
excluded from the scan.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: quality-trust-fingerprint-not-sensitive
|
|
3
|
+
vulnerability: "codeql:py/clear-text-logging-sensitive-data"
|
|
4
|
+
status: not_affected
|
|
5
|
+
justification: vulnerable_code_not_present
|
|
6
|
+
source: boost_cli/commands/quality.py:1248
|
|
7
|
+
---
|
|
8
|
+
CodeQL's `py/clear-text-logging-sensitive-data` query flags
|
|
9
|
+
`boost trust add`'s success line, which prints the trusted key's name and
|
|
10
|
+
minisign fingerprint, because the argument is user-supplied and `fingerprint`
|
|
11
|
+
reads like a credential name. It is not one: the value is a minisign
|
|
12
|
+
**public** key fingerprint, which is meant to be published, and printing it is
|
|
13
|
+
the entire point of the command — it is how a user checks by eye that the key
|
|
14
|
+
they just trusted matches the one the publisher advertises. The class of data
|
|
15
|
+
the query exists to catch (a secret, token, or password) is not present in
|
|
16
|
+
what is logged, so the pattern the rule looks for does not apply here. An
|
|
17
|
+
earlier automated fix that replaced this line with a constant string removed
|
|
18
|
+
the only verification `trust add` offers; the line was restored, the
|
|
19
|
+
suppression carries this reasoning inline
|
|
20
|
+
(`# codeql[py/clear-text-logging-sensitive-data]`), and
|
|
21
|
+
`tests/functional/test_tap_signing.py` pins the output so it cannot be quietly
|
|
22
|
+
dropped a second time.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: zizmor-adhoc-packages-lint-runners
|
|
3
|
+
vulnerability: "zizmor:adhoc-packages"
|
|
4
|
+
status: not_affected
|
|
5
|
+
justification: inline_mitigations_already_exist
|
|
6
|
+
source: .github/zizmor.yml (theme-lint.yml:48, visual.yml:38)
|
|
7
|
+
---
|
|
8
|
+
zizmor's `adhoc-packages` rule flags installing packages without a lockfile,
|
|
9
|
+
because an unpinned install can resolve to a tampered or unexpectedly newer
|
|
10
|
+
package. Two workflows do this on purpose: `theme-lint.yml` installs
|
|
11
|
+
major-pinned linters with `--no-save` into an empty checkout — boost ships no
|
|
12
|
+
`package.json`, so a lockfile would exist solely for this one step — and
|
|
13
|
+
`visual.yml` installs a pinned `puppeteer-core` from
|
|
14
|
+
`tests/visual/package.json`, also `--no-save`. Both run on an ephemeral
|
|
15
|
+
runner, hold only `contents: read`, and their output gates nothing but
|
|
16
|
+
themselves — a compromised lint or screenshot tool in either job cannot reach
|
|
17
|
+
a secret or influence a later, privileged job.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: zizmor-dangerous-triggers-workflow-run
|
|
3
|
+
vulnerability: "zizmor:dangerous-triggers"
|
|
4
|
+
status: not_affected
|
|
5
|
+
justification: inline_mitigations_already_exist
|
|
6
|
+
source: .github/zizmor.yml (ci-failure-issue.yml:28, publish.yml:19, post-deploy.yml:21, sbom.yml:29)
|
|
7
|
+
---
|
|
8
|
+
zizmor's `dangerous-triggers` rule flags `workflow_run`, because the classic
|
|
9
|
+
failure mode is a privileged run executing pull-request-controlled code. Four
|
|
10
|
+
workflows use it — `ci-failure-issue.yml`, `publish.yml`, `post-deploy.yml`,
|
|
11
|
+
`sbom.yml` — and each carries the mitigation that makes the pattern safe in
|
|
12
|
+
its specific case, recorded inline in `.github/zizmor.yml`: none of them
|
|
13
|
+
checks out the triggering run's head SHA (each explicitly checks out `main`,
|
|
14
|
+
a release tag, or nothing at all), so no code a fork's pull request could
|
|
15
|
+
influence ever runs in the privileged context. `publish.yml`, the one job that
|
|
16
|
+
holds write credentials (PyPI Trusted Publisher OIDC), is additionally scoped
|
|
17
|
+
to `push` events from this repository only — a fork PR opened from a branch
|
|
18
|
+
named `main` cannot satisfy that filter. `sbom.yml` is gated on
|
|
19
|
+
`head_repository == this repository` for the same reason. The remaining two
|
|
20
|
+
hold only `contents: read` and no secrets.
|