boost-skill-cli 1.2.28__tar.gz → 1.2.29__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.28 → boost_skill_cli-1.2.29}/.vale/styles/config/vocabularies/boost/accept.txt +3 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/PKG-INFO +1 -1
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_skill_cli.egg-info/PKG-INFO +1 -1
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_skill_cli.egg-info/SOURCES.txt +2 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/openssf-badge.md +7 -0
- boost_skill_cli-1.2.29/docs/openssf-playbook.md +238 -0
- boost_skill_cli-1.2.29/docs/roadmap/items/openssf-playbook.md +33 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap.html +31 -1
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/.gitattributes +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/.gitignore +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/.lycheeignore +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/.vale/styles/boost/AIWriting.yml +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/.vale.ini +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/CLAUDE.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/DCO +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/LICENSE +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/MAINTAINERS.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/MANIFEST.in +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/Makefile +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/README.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/SECURITY.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/SUPPORT.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/bmad.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/bootstrap.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/browse.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/builtin.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/catalogbundle.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/complete.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/data/rules/boost-first.mdc +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_langchain/__init__.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_langchain/_compat.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_langchain/graph.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_langchain/loader.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_langchain/py.typed +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_langchain/retriever.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/codecov.yml +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/adapters.html +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel.html +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/chat.html +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/commands.html +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/commit-audit.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/demo.gif +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/demo.html +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/demo.tape +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/dependencies.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/eval-latest.json +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/eval.html +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/index.html +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/langchain.html +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/boost-first-rule.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/install-path-disambiguation.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/osps-baseline-levels.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/zip-strict-audit.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/security-design.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/verifying-releases.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/evals/README.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/evals/__init__.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/evals/baseline.json +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/evals/metrics.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/evals/publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/examples/README.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/index.html +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/noxfile.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/pyproject.toml +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/build_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/check_dco.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/eval_corpus.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/measure_registry.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/page_budget.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/publish_eval_json.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/serve_docs.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/setup.cfg +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/sonar-project.properties +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/style/README.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/style/boost.css +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/style/boost.js +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/style/demo.html +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/conftest.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/eval/taps-scale.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_catalog.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_pane_width.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_kind_conformance.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/langchain/conftest.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/langchain/test_graph.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/langchain/test_loader.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/langchain/test_retriever.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_action_pin_lockstep.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_bmad_core.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_boost_first_offer.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_bootstrap.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_browse.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_builtin.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_catalogbundle.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_check_dco.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_clean_internal_cache.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_compact.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_complete.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_complete_rc_block.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_content_identity.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_crash_redaction.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_dense_embed_dedupe.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_dense_quantized.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_dense_ready_order.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_dense_shard_real_schema.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_dense_status_cheap.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_embed_truncated_response.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_eval_corpus.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_eval_grading.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_gemini_agent_sanitize.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_gitutil_lfs.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_gitutil_sparse.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_install_permission_error.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_langchain_packaging.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_link_ownership.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_measure_registry.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_page_budget.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_rag_fastpath.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_registry_control_chars.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_rerank_cache.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_serve_docs.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_shards_matrix.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_smoke_covers_every_command.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_store_materialize.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_sync_blocked_links.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_visual_harness_flags.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_workflow_concurrency_groups.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_workflow_push_has_credentials.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/visual/package-lock.json +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/visual/visual_check.mjs +0 -0
{boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/.vale/styles/config/vocabularies/boost/accept.txt
RENAMED
|
@@ -52,6 +52,7 @@ fuzzer
|
|
|
52
52
|
GEO
|
|
53
53
|
GIF
|
|
54
54
|
gitignored
|
|
55
|
+
gitleaks
|
|
55
56
|
GitOps
|
|
56
57
|
glassmorphic
|
|
57
58
|
Grafana
|
|
@@ -100,6 +101,7 @@ Quarkus
|
|
|
100
101
|
rebased
|
|
101
102
|
reimplement
|
|
102
103
|
reimplemented
|
|
104
|
+
reimplements
|
|
103
105
|
reindex
|
|
104
106
|
repo
|
|
105
107
|
repo's
|
|
@@ -138,6 +140,7 @@ subprocess
|
|
|
138
140
|
tappable
|
|
139
141
|
teardown
|
|
140
142
|
tempdir
|
|
143
|
+
textarea
|
|
141
144
|
toggleable
|
|
142
145
|
Tokenization
|
|
143
146
|
tokenization
|
|
@@ -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.29'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 2, 29)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -138,6 +138,7 @@ docs/index.html
|
|
|
138
138
|
docs/langchain.html
|
|
139
139
|
docs/mcp-hub.html
|
|
140
140
|
docs/openssf-badge.md
|
|
141
|
+
docs/openssf-playbook.md
|
|
141
142
|
docs/rag-architecture.md
|
|
142
143
|
docs/roadmap.html
|
|
143
144
|
docs/security-design.md
|
|
@@ -348,6 +349,7 @@ docs/roadmap/items/one-commit-can-cut-two-releases.md
|
|
|
348
349
|
docs/roadmap/items/one-dead-tap-broke-every-update.md
|
|
349
350
|
docs/roadmap/items/one-shared-atomic-write-helper.md
|
|
350
351
|
docs/roadmap/items/openssf-best-practices-badge.md
|
|
352
|
+
docs/roadmap/items/openssf-playbook.md
|
|
351
353
|
docs/roadmap/items/osps-baseline-levels.md
|
|
352
354
|
docs/roadmap/items/package-metadata-validation-twine-check-friends.md
|
|
353
355
|
docs/roadmap/items/patch-coverage-gate-diff-cover.md
|
|
@@ -248,6 +248,13 @@ or a repository setting, so they cannot be landed as a commit.
|
|
|
248
248
|
silently a second time. The missing test was the real defect; the alert was
|
|
249
249
|
only the trigger.
|
|
250
250
|
|
|
251
|
+
## Doing this on another project
|
|
252
|
+
|
|
253
|
+
[`openssf-playbook.md`](openssf-playbook.md) is the repeatable method behind
|
|
254
|
+
this document: where the authoritative criteria actually live, how to audit a
|
|
255
|
+
repository against them rather than assuming, the three buckets every criterion
|
|
256
|
+
sorts into, and the four documents Baseline Level 2 asks for.
|
|
257
|
+
|
|
251
258
|
## Keeping this document honest
|
|
252
259
|
|
|
253
260
|
Re-check it when any of these change, since each one moves an answer:
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
# Earning the OpenSSF badges: a playbook
|
|
2
|
+
|
|
3
|
+
boost went from unregistered to three badges — **passing**, **Baseline Level 1**
|
|
4
|
+
and **Baseline Level 2** — in one working session. This is the method, written
|
|
5
|
+
so another project can follow it, including the parts that cost time to
|
|
6
|
+
discover and the parts where the honest answer is "no".
|
|
7
|
+
|
|
8
|
+
It is not a checklist of criteria. The criteria live upstream and change; what
|
|
9
|
+
transfers is how to find them, how to decide an answer, and which kinds of
|
|
10
|
+
criterion are worth attacking in which order.
|
|
11
|
+
|
|
12
|
+
## What you are actually applying for
|
|
13
|
+
|
|
14
|
+
bestpractices.dev issues **four independent badges**, not one with tiers. This
|
|
15
|
+
is the first thing most people get wrong, including this project's own earlier
|
|
16
|
+
notes.
|
|
17
|
+
|
|
18
|
+
| Badge | Criteria | Nature |
|
|
19
|
+
|---|---|---|
|
|
20
|
+
| **Passing** | 67 | The classic CII set — process, quality, security basics |
|
|
21
|
+
| **Baseline Level 1** | 24 | OSPS Baseline: repository hygiene and CI safety |
|
|
22
|
+
| **Baseline Level 2** | 19 | OSPS Baseline: governance, supply chain, documented policy |
|
|
23
|
+
| **Baseline Level 3** | 21 | OSPS Baseline: review, VEX, SCA policy |
|
|
24
|
+
|
|
25
|
+
Passing also has **silver** (55 more criteria) and **gold** (20 more) above it,
|
|
26
|
+
which *are* tiers — silver requires passing, gold requires silver.
|
|
27
|
+
|
|
28
|
+
Each badge is a separate form at
|
|
29
|
+
`bestpractices.dev/en/projects/<id>/<level>/edit`, where `<level>` is `passing`,
|
|
30
|
+
`baseline-1`, `baseline-2`, `baseline-3`, `silver` or `gold`. They share a
|
|
31
|
+
project id and nothing else. Register once, then work them independently.
|
|
32
|
+
|
|
33
|
+
## Step 1 — get the real criteria, not a summary
|
|
34
|
+
|
|
35
|
+
Do not work from a blog post, and do not work from what an LLM recalls. Both
|
|
36
|
+
will be plausible and subtly wrong about which criteria allow N/A, which demand
|
|
37
|
+
a URL, and which are MUST versus SHOULD — and those three facts decide most of
|
|
38
|
+
your answers.
|
|
39
|
+
|
|
40
|
+
The authoritative source is the badge application's own repository, and it takes
|
|
41
|
+
**two files**, because they are split:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# Metadata: category (MUST/SHOULD/SUGGESTED), na_allowed, met_url_required,
|
|
45
|
+
# met_justification_required. Carries NO descriptions.
|
|
46
|
+
curl -sL https://raw.githubusercontent.com/coreinfrastructure/best-practices-badge/main/criteria/criteria.yml
|
|
47
|
+
|
|
48
|
+
# The actual description: and details: prose for each criterion.
|
|
49
|
+
curl -sL https://raw.githubusercontent.com/coreinfrastructure/best-practices-badge/main/config/locales/en.yml
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
`https://www.bestpractices.dev/criteria/0.json` looks like the obvious endpoint
|
|
53
|
+
and returns **HTTP 406**. Skip it.
|
|
54
|
+
|
|
55
|
+
`criteria.yml` is an ordered map keyed by level — `- '0':` is passing, `'1'` is
|
|
56
|
+
silver, `'2'` is gold. Indentation is 2 / 4 / 6 / 10 spaces for major group,
|
|
57
|
+
minor group, criterion name, and keys. A parser that does not stop at `- '1':`
|
|
58
|
+
will silently fold silver criteria into your passing set; passing is **exactly
|
|
59
|
+
67**, so check your count before trusting your parse.
|
|
60
|
+
|
|
61
|
+
The OSPS Baseline criteria are not in that file at all. The fastest way to read
|
|
62
|
+
them, and the one that guarantees you are looking at what the form will actually
|
|
63
|
+
ask, is to open the form and scrape it — each criterion's full text sits in an
|
|
64
|
+
element whose `id` is the criterion name (`osps_qa_05_02`). Collapsed panels
|
|
65
|
+
return empty `innerText`, so read `textContent`.
|
|
66
|
+
|
|
67
|
+
## Step 2 — audit, do not assume
|
|
68
|
+
|
|
69
|
+
**The single highest-value finding: most unanswered criteria are already
|
|
70
|
+
satisfied and merely unrecorded.**
|
|
71
|
+
|
|
72
|
+
Nine of Baseline Level 1's 24 criteria were open when boost started. Every one
|
|
73
|
+
was already true. Branch protection plus a ruleset already refused direct
|
|
74
|
+
commits to `main`. No workflow used `pull_request_target`, so a fork's code
|
|
75
|
+
already could not reach a secret. An audit of every tracked file for binary
|
|
76
|
+
content turned up three zero-byte marker files and a 10-byte fuzz seed. The work
|
|
77
|
+
was proving it, not building it — and the badge went from 63% to 100% without a
|
|
78
|
+
line of code.
|
|
79
|
+
|
|
80
|
+
So audit before you plan. Concretely, for each open criterion, find the evidence
|
|
81
|
+
or establish that it is missing:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
# Branch protection and rulesets (rulesets are separate from classic protection,
|
|
85
|
+
# and a repo can have both — checking only one will mislead you)
|
|
86
|
+
curl -s https://api.github.com/repos/OWNER/REPO/branches/main
|
|
87
|
+
curl -s https://api.github.com/repos/OWNER/REPO/rules/branches/main
|
|
88
|
+
|
|
89
|
+
# Private vulnerability reporting — a yes/no you should never guess
|
|
90
|
+
curl -s https://api.github.com/repos/OWNER/REPO/private-vulnerability-reporting
|
|
91
|
+
|
|
92
|
+
# Untrusted code reaching secrets
|
|
93
|
+
grep -rl pull_request_target .github/workflows/
|
|
94
|
+
|
|
95
|
+
# Binary and executable artifacts in version control
|
|
96
|
+
git ls-files | while read -r f; do
|
|
97
|
+
[ -x "$f" ] && echo "EXEC: $f"
|
|
98
|
+
file -b --mime "$f" | grep -q charset=binary && echo "BINARY: $f"
|
|
99
|
+
done
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Two traps in that last one. Files carrying the executable bit are usually
|
|
103
|
+
*source scripts*, not the "generated executable artifacts" the criterion means.
|
|
104
|
+
And `file` reports zero-byte files as binary, so `__init__.py` and `py.typed`
|
|
105
|
+
will show up; check sizes before you believe them.
|
|
106
|
+
|
|
107
|
+
## Step 3 — sort every criterion into three buckets
|
|
108
|
+
|
|
109
|
+
This is the whole planning step, and it is what stops the work sprawling.
|
|
110
|
+
|
|
111
|
+
**Bucket 1 — documentation you can write.** By far the largest, and the one an
|
|
112
|
+
agent can close. Nothing about the software changes; you are recording what is
|
|
113
|
+
already true. Attack these first.
|
|
114
|
+
|
|
115
|
+
**Bucket 2 — a repository setting.** A checkbox or a field. Fast, but you cannot
|
|
116
|
+
do it from a branch, so collect them into one list and hand it over. For boost:
|
|
117
|
+
the empty `homepage` field, a CodeQL alert dismissal, enabling private
|
|
118
|
+
vulnerability reporting.
|
|
119
|
+
|
|
120
|
+
**Bucket 3 — structurally blocked.** Requires something you do not have, usually
|
|
121
|
+
another person. **Say so and move on.** Do not stretch an answer to make a
|
|
122
|
+
number go up; a badge that misrepresents your posture is worse than a missing
|
|
123
|
+
one, and the criteria are written by people who have seen every stretch.
|
|
124
|
+
|
|
125
|
+
For boost, bucket 3 was one thing wearing four hats: `OSPS-QA-07.01` (Level 3),
|
|
126
|
+
`two_person_review`, `bus_factor` and `contributors_unassociated` (gold) all
|
|
127
|
+
require a **non-author human reviewer**. A single-maintainer project cannot
|
|
128
|
+
satisfy them, and no commit changes that.
|
|
129
|
+
|
|
130
|
+
## Step 4 — write the four documents Level 2 asks for
|
|
131
|
+
|
|
132
|
+
Every project that reaches Baseline Level 2 writes approximately these four.
|
|
133
|
+
They are worth having irrespective of any badge, which is the test of whether a
|
|
134
|
+
compliance exercise was worth doing.
|
|
135
|
+
|
|
136
|
+
| Document | The question it answers | Where it usually goes wrong |
|
|
137
|
+
|---|---|---|
|
|
138
|
+
| `MAINTAINERS.md` | Who holds which credential, what each role may do, how someone gets more access, what happens if you vanish | Listing people but not *credentials*. The criterion asks about access to sensitive resources. If you publish with OIDC/Trusted Publishing, the honest entry is "nobody holds it — there is no token", which is a stronger answer than a name |
|
|
139
|
+
| `SUPPORT.md` | What is supported, on what platforms, for how long, and when a version stops getting security fixes | Implying a supported older line you do not actually maintain. If you only support latest, say only latest |
|
|
140
|
+
| `docs/dependencies.md` | How a dependency is chosen, obtained, tracked — and **the severity threshold at which a finding blocks a release** | Describing your scanners and calling it a policy. "We run osv-scanner" is not a policy; "critical and high block the merge, medium blocks if reachable, suppression requires a written argument" is |
|
|
141
|
+
| `docs/verifying-releases.md` | The exact commands a consumer runs to verify an artifact came from you | Omitting the identity check. `gh attestation verify FILE --repo O/R` proves *someone* built it; adding `--signer-workflow O/R/.github/workflows/publish.yml` proves **which workflow** did |
|
|
142
|
+
|
|
143
|
+
And a threat model — `docs/security-design.md` — which passing needs for
|
|
144
|
+
`know_secure_design` and `know_common_errors`, and Baseline Level 2 reuses for
|
|
145
|
+
`osps_sa_01_01` and `osps_sa_03_01`. One document, four criteria. Write it early.
|
|
146
|
+
|
|
147
|
+
Make it specific or it satisfies nobody. Work through Saltzer and Schroeder's
|
|
148
|
+
eight principles as **claims about your code**, each pointing at the file that
|
|
149
|
+
implements it. Table your CWE classes with the mitigation that counters each,
|
|
150
|
+
and **omit the ones that do not apply** rather than padding — a threat model
|
|
151
|
+
listing SQL injection for a project with no database advertises that nobody
|
|
152
|
+
thought about it.
|
|
153
|
+
|
|
154
|
+
## Step 5 — answer honestly, including when the answer is "no"
|
|
155
|
+
|
|
156
|
+
A `SHOULD` may be answered **Unmet with a justification** and the badge still
|
|
157
|
+
passes. Use that. It is there precisely so you do not have to lie.
|
|
158
|
+
|
|
159
|
+
boost answered `crypto_call` Unmet: it reimplements Ed25519 verification in pure
|
|
160
|
+
Python because its stdlib-only rule leaves no alternative. The justification
|
|
161
|
+
states the trade, bounds the exposure (verify-only, public keys, no secret for a
|
|
162
|
+
timing channel), and cites the RFC test vectors that pin correctness. That is a
|
|
163
|
+
better answer than a stretched "Met", and it is the kind of thing a reviewer
|
|
164
|
+
reads and trusts the rest of your form because of.
|
|
165
|
+
|
|
166
|
+
Three specific honesty traps worth naming, all of which caught this project:
|
|
167
|
+
|
|
168
|
+
- **Do not claim a setting you cannot read.** `no_leaked_credentials` was
|
|
169
|
+
drafted asserting "GitHub secret scanning is on". That setting needs
|
|
170
|
+
repo-admin credentials to read. The answer became what *was* checkable —
|
|
171
|
+
gitleaks failing the build, OIDC publishing leaving no stored token — plus a
|
|
172
|
+
note asking the registrant to confirm the setting themselves.
|
|
173
|
+
- **Do not restate a claim your own repo refuses to make.** A draft said `main`
|
|
174
|
+
"takes changes only through reviewed pull requests". The ruleset deliberately
|
|
175
|
+
requires status checks and *not* human approval, and this repo's Scorecard
|
|
176
|
+
triage keeps that finding open rather than dismissing it, because the score is
|
|
177
|
+
accurate. The badge form nearly contradicted the repo's own honesty.
|
|
178
|
+
- **Re-verify anything you inherited.** A note said the licence was MIT. It is
|
|
179
|
+
GPL-3.0. That single check changed three answers.
|
|
180
|
+
|
|
181
|
+
## Step 6 — filling the forms
|
|
182
|
+
|
|
183
|
+
Each form is one radio group per criterion (`project[<name>_status]`, values
|
|
184
|
+
`Met` / `Unmet` / `N/A` / `?`) and one textarea
|
|
185
|
+
(`project[<name>_justification]`). Filling 67 by hand is a bad use of a
|
|
186
|
+
session; drive it, then audit that nothing is left at `?` before submitting:
|
|
187
|
+
|
|
188
|
+
```javascript
|
|
189
|
+
// Set a status + justification, dispatching the events the app listens for
|
|
190
|
+
const r = document.querySelector(
|
|
191
|
+
`input[type=radio][name="project[${key}_status]"][value="${status}"]`);
|
|
192
|
+
r.click();
|
|
193
|
+
const ta = document.querySelector(`textarea[name="project[${key}_justification]"]`);
|
|
194
|
+
ta.value = justification;
|
|
195
|
+
ta.dispatchEvent(new Event('input', {bubbles: true}));
|
|
196
|
+
ta.dispatchEvent(new Event('change', {bubbles: true}));
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Two operational notes. Prefer the **"Submit (and exit)"** button over "Save (and
|
|
200
|
+
continue) 🤖" — the latter runs automation that fills unknown values, which you
|
|
201
|
+
do not want once you have answered everything deliberately. And the form's
|
|
202
|
+
progress percentage is the fastest correctness check you have: if you answered
|
|
203
|
+
every criterion and it does not read 100%, something did not take.
|
|
204
|
+
|
|
205
|
+
## Step 7 — keep the answer sheet in the repository
|
|
206
|
+
|
|
207
|
+
Write your answers into a tracked document — boost's is
|
|
208
|
+
[`openssf-badge.md`](openssf-badge.md) — with each answer's evidence beside it.
|
|
209
|
+
This matters more than it sounds:
|
|
210
|
+
|
|
211
|
+
- The badge site periodically asks you to reconfirm. Re-reading your own
|
|
212
|
+
reasoning beats re-deriving it.
|
|
213
|
+
- Answers go stale in predictable ways. Note them: a vulnerability being
|
|
214
|
+
reported moves three answers; adding a runtime dependency moves three more; a
|
|
215
|
+
licence change moves three.
|
|
216
|
+
- It makes the claims reviewable by people who do not have a badge account,
|
|
217
|
+
which is most of your users.
|
|
218
|
+
|
|
219
|
+
## What this cost, and what it found
|
|
220
|
+
|
|
221
|
+
Three badges, six new documents, and — the part worth the whole exercise — a
|
|
222
|
+
**live regression on `main`**. Auditing commits against their messages surfaced
|
|
223
|
+
a merged Copilot autofix that had replaced `boost trust add`'s printed key
|
|
224
|
+
fingerprint with a constant string, deleting the only verification the command
|
|
225
|
+
offered. It passed every gate because no test asserted that line.
|
|
226
|
+
|
|
227
|
+
That is the honest argument for doing this. The badges are a forcing function;
|
|
228
|
+
what you get is the audit.
|
|
229
|
+
|
|
230
|
+
## Related
|
|
231
|
+
|
|
232
|
+
- [`openssf-badge.md`](openssf-badge.md) — boost's worked answers, all 67
|
|
233
|
+
passing criteria with evidence
|
|
234
|
+
- [`security-design.md`](security-design.md) — the threat model the knowledge
|
|
235
|
+
criteria require
|
|
236
|
+
- [`dependencies.md`](dependencies.md) · [`verifying-releases.md`](verifying-releases.md)
|
|
237
|
+
· [`../MAINTAINERS.md`](../MAINTAINERS.md) · [`../SUPPORT.md`](../SUPPORT.md)
|
|
238
|
+
— the Level 2 four
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: openssf-playbook
|
|
3
|
+
board: code
|
|
4
|
+
section: docsite
|
|
5
|
+
status: shipped
|
|
6
|
+
category: Docs
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 3
|
|
10
|
+
note: the method, not the answers — so another repo can repeat it
|
|
11
|
+
order: 6
|
|
12
|
+
owner: loop/openssf-playbook
|
|
13
|
+
pr:
|
|
14
|
+
title: The OpenSSF badge playbook
|
|
15
|
+
---
|
|
16
|
+
Three badges in one session left two kinds of artifact behind. <a href="roadmap.html#openssf-best-practices-badge">The
|
|
17
|
+
answer sheets</a> record <i>what boost answered</i>, which is worth exactly nothing to
|
|
18
|
+
anybody else. This records <b>the method</b>.
|
|
19
|
+
The parts that cost real time to discover: the badge site issues <b>four independent
|
|
20
|
+
badges</b>, not one with tiers, each at its own <code>/<level>/edit</code> form. The
|
|
21
|
+
authoritative criteria need <b>two</b> upstream files — <code>criteria.yml</code> has the
|
|
22
|
+
MUST/SHOULD and <code>na_allowed</code> flags but no prose, <code>en.yml</code> has the
|
|
23
|
+
prose — and the obvious <code>/criteria/0.json</code> endpoint returns 406. A parser that
|
|
24
|
+
does not stop at <code>- '1':</code> folds silver into passing; passing is exactly 67, so
|
|
25
|
+
the count is the check.
|
|
26
|
+
The part that changes how you plan: <b>most unanswered criteria are already satisfied and
|
|
27
|
+
merely unrecorded</b>. Nine of Baseline Level 1's 24 were open and every one was already
|
|
28
|
+
true — the work was proving it, not building it, and the badge went 63% → 100% with no code.
|
|
29
|
+
So every criterion sorts into three buckets: documentation you can write, a repository
|
|
30
|
+
setting you cannot do from a branch, and <b>structurally blocked — say so and move on</b>.
|
|
31
|
+
Also records the three honesty traps this project walked into and had to back out of:
|
|
32
|
+
claiming a setting that needs credentials to read, restating a claim the repo's own
|
|
33
|
+
Scorecard triage refuses to make, and inheriting "the licence is MIT" when it is GPL-3.0.
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
<div class="stat"><b>16</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>270</b><span>Loop finds</span></div>
|
|
137
137
|
<!-- /ROADMAP:stats -->
|
|
138
138
|
</div>
|
|
139
139
|
</section>
|
|
@@ -9405,6 +9405,36 @@ and the work stays visible.</p></details>
|
|
|
9405
9405
|
</div>
|
|
9406
9406
|
</article>
|
|
9407
9407
|
|
|
9408
|
+
<article class="cap rcard" id="openssf-playbook">
|
|
9409
|
+
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Docs</span></div>
|
|
9410
|
+
<h3>The OpenSSF badge playbook</h3>
|
|
9411
|
+
<details class="cardbody"><summary>Write-up</summary>
|
|
9412
|
+
<p>Three badges in one session left two kinds of artifact behind. <a href="roadmap.html#openssf-best-practices-badge">The
|
|
9413
|
+
answer sheets</a> record <i>what boost answered</i>, which is worth exactly nothing to
|
|
9414
|
+
anybody else. This records <b>the method</b>.
|
|
9415
|
+
The parts that cost real time to discover: the badge site issues <b>four independent
|
|
9416
|
+
badges</b>, not one with tiers, each at its own <code>/<level>/edit</code> form. The
|
|
9417
|
+
authoritative criteria need <b>two</b> upstream files — <code>criteria.yml</code> has the
|
|
9418
|
+
MUST/SHOULD and <code>na_allowed</code> flags but no prose, <code>en.yml</code> has the
|
|
9419
|
+
prose — and the obvious <code>/criteria/0.json</code> endpoint returns 406. A parser that
|
|
9420
|
+
does not stop at <code>- '1':</code> folds silver into passing; passing is exactly 67, so
|
|
9421
|
+
the count is the check.
|
|
9422
|
+
The part that changes how you plan: <b>most unanswered criteria are already satisfied and
|
|
9423
|
+
merely unrecorded</b>. Nine of Baseline Level 1's 24 were open and every one was already
|
|
9424
|
+
true — the work was proving it, not building it, and the badge went 63% → 100% with no code.
|
|
9425
|
+
So every criterion sorts into three buckets: documentation you can write, a repository
|
|
9426
|
+
setting you cannot do from a branch, and <b>structurally blocked — say so and move on</b>.
|
|
9427
|
+
Also records the three honesty traps this project walked into and had to back out of:
|
|
9428
|
+
claiming a setting that needs credentials to read, restating a claim the repo's own
|
|
9429
|
+
Scorecard triage refuses to make, and inheriting "the licence is MIT" when it is GPL-3.0.</p></details>
|
|
9430
|
+
<div class="meta">
|
|
9431
|
+
<span class="m">Complexity <b>S</b></span>
|
|
9432
|
+
<span class="m">Impact <b>Med</b></span>
|
|
9433
|
+
<span class="m">Wow <b class="wow">★★★</b></span>
|
|
9434
|
+
<span class="m">the method, not the answers — so another repo can repeat it</span>
|
|
9435
|
+
</div>
|
|
9436
|
+
</article>
|
|
9437
|
+
|
|
9408
9438
|
<article class="cap rcard" id="prose-and-terminology-linting-vale">
|
|
9409
9439
|
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Quality · Content</span></div>
|
|
9410
9440
|
<h3>Prose & terminology linting — <code>vale</code></h3>
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|