boost-skill-cli 1.2.28__tar.gz → 1.2.30__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.30}/.vale/styles/config/vocabularies/boost/accept.txt +3 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/CONTRIBUTING.md +7 -0
- boost_skill_cli-1.2.30/GOVERNANCE.md +103 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/PKG-INFO +2 -1
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/README.md +1 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_skill_cli.egg-info/PKG-INFO +2 -1
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_skill_cli.egg-info/SOURCES.txt +4 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/openssf-badge.md +7 -0
- boost_skill_cli-1.2.30/docs/openssf-playbook.md +238 -0
- boost_skill_cli-1.2.30/docs/roadmap/items/openssf-playbook.md +33 -0
- boost_skill_cli-1.2.30/docs/roadmap/items/openssf-silver.md +39 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap.html +66 -1
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/.gitattributes +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/.gitignore +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/.lycheeignore +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/.vale/styles/boost/AIWriting.yml +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/.vale.ini +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/CLAUDE.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/DCO +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/LICENSE +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/MAINTAINERS.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/MANIFEST.in +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/Makefile +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/SECURITY.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/SUPPORT.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/bmad.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/bootstrap.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/browse.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/builtin.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/catalogbundle.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/complete.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/data/rules/boost-first.mdc +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_langchain/__init__.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_langchain/_compat.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_langchain/graph.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_langchain/loader.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_langchain/py.typed +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_langchain/retriever.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/codecov.yml +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/adapters.html +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel.html +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/chat.html +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/commands.html +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/commit-audit.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/demo.gif +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/demo.html +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/demo.tape +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/dependencies.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/eval-latest.json +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/eval.html +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/index.html +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/langchain.html +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/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.30}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/boost-first-rule.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/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.30}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/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.30}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/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.30}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/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.30}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/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.30}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/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.30}/docs/roadmap/items/install-path-disambiguation.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/osps-baseline-levels.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/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.30}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/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.30}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/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.30}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/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.30}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/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.30}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/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.30}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/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.30}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/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.30}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/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.30}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/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.30}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/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.30}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/zip-strict-audit.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/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.30}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/security-design.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/verifying-releases.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/evals/README.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/evals/__init__.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/evals/baseline.json +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/evals/metrics.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/evals/publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/examples/README.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/index.html +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/noxfile.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/pyproject.toml +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/build_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/check_dco.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/eval_corpus.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/measure_registry.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/page_budget.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/publish_eval_json.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/serve_docs.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/setup.cfg +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/sonar-project.properties +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/style/README.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/style/boost.css +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/style/boost.js +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/style/demo.html +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/conftest.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/eval/taps-scale.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_catalog.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_pane_width.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_kind_conformance.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/langchain/conftest.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/langchain/test_graph.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/langchain/test_loader.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/langchain/test_retriever.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_action_pin_lockstep.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_bmad_core.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_boost_first_offer.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_bootstrap.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_browse.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_builtin.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_catalogbundle.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_check_dco.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_clean_internal_cache.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_compact.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_complete.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_complete_rc_block.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_content_identity.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_crash_redaction.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_dense_embed_dedupe.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_dense_quantized.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_dense_ready_order.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_dense_shard_real_schema.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_dense_status_cheap.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_embed_truncated_response.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_eval_corpus.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_eval_grading.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_gemini_agent_sanitize.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_gitutil_lfs.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_gitutil_sparse.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_install_permission_error.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_langchain_packaging.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_link_ownership.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_measure_registry.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_page_budget.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_rag_fastpath.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_registry_control_chars.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_rerank_cache.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_serve_docs.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_shards_matrix.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_smoke_covers_every_command.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_store_materialize.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_sync_blocked_links.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_visual_harness_flags.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_workflow_concurrency_groups.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_workflow_push_has_credentials.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/visual/package-lock.json +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/visual/visual_check.mjs +0 -0
{boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/.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
|
|
@@ -128,6 +128,13 @@ published release, to record an assertion nobody actually made.
|
|
|
128
128
|
Bot authors (Dependabot and friends) are exempt — an account cannot agree to a
|
|
129
129
|
certificate.
|
|
130
130
|
|
|
131
|
+
## Governance
|
|
132
|
+
|
|
133
|
+
Who decides, how a decision gets made, and what happens when people disagree:
|
|
134
|
+
[GOVERNANCE.md](GOVERNANCE.md). Who holds which role and which credential:
|
|
135
|
+
[MAINTAINERS.md](MAINTAINERS.md). Both say plainly that this is a
|
|
136
|
+
single-maintainer project today rather than implying a committee.
|
|
137
|
+
|
|
131
138
|
## Code of conduct
|
|
132
139
|
|
|
133
140
|
Participation is governed by the [Code of Conduct](CODE_OF_CONDUCT.md)
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Governance
|
|
2
|
+
|
|
3
|
+
How boost makes decisions, who makes them, and what happens when people
|
|
4
|
+
disagree. [MAINTAINERS.md](MAINTAINERS.md) is the companion: it lists who holds
|
|
5
|
+
which role and which credential. This file is about the *process*.
|
|
6
|
+
|
|
7
|
+
## The short version
|
|
8
|
+
|
|
9
|
+
boost is a **single-maintainer project** run in the open. The lead maintainer
|
|
10
|
+
decides; everything that shapes a decision — the roadmap, the quality gates, the
|
|
11
|
+
reasoning behind a change — is public and arguable before it lands. That is a
|
|
12
|
+
benevolent-dictator model, and naming it plainly is better than implying a
|
|
13
|
+
committee that does not exist.
|
|
14
|
+
|
|
15
|
+
This is stated as the current state, not an aspiration. It changes when a second
|
|
16
|
+
maintainer is appointed under
|
|
17
|
+
[MAINTAINERS.md](MAINTAINERS.md#becoming-a-maintainer), and this file changes
|
|
18
|
+
with it.
|
|
19
|
+
|
|
20
|
+
## How a decision gets made
|
|
21
|
+
|
|
22
|
+
**1. Anyone may propose.** Open an issue, or open a pull request. There is no
|
|
23
|
+
membership requirement and no form to fill in.
|
|
24
|
+
|
|
25
|
+
**2. The argument happens in public, on the artifact.** Issues, pull requests,
|
|
26
|
+
and the roadmap boards. A decision made in a private channel is not a decision
|
|
27
|
+
this project recognises; if something was settled elsewhere, it gets written
|
|
28
|
+
down in the open before it is acted on.
|
|
29
|
+
|
|
30
|
+
**3. The gates decide what they can.** A large class of decisions is not a
|
|
31
|
+
matter of opinion here — the change either passes the required checks or it does
|
|
32
|
+
not. Coverage, mutation score, retrieval quality, the lint and type gates, the
|
|
33
|
+
generated-file freshness checks: these are stated thresholds, and a maintainer
|
|
34
|
+
does not get to wave one through. Changing a *threshold* is itself a decision
|
|
35
|
+
that goes through this process, in its own pull request, with the measurement
|
|
36
|
+
that justifies it.
|
|
37
|
+
|
|
38
|
+
**4. The lead maintainer decides what the gates cannot.** Scope, design,
|
|
39
|
+
priority, and whether a proposal fits the project at all. The decision is
|
|
40
|
+
recorded where the work is: in the pull request, or as a roadmap card.
|
|
41
|
+
|
|
42
|
+
**5. A "no" is recorded, not dropped.** The roadmap has a `declined` status
|
|
43
|
+
precisely so a rejected proposal stops reading as backlog. Without it the same
|
|
44
|
+
refuted question gets re-opened by the next person — or the next agent — who
|
|
45
|
+
scans the board for work. If your proposal is declined you get the reason in
|
|
46
|
+
writing, and it stays there.
|
|
47
|
+
|
|
48
|
+
## Disagreements
|
|
49
|
+
|
|
50
|
+
**With a decision.** Say so on the issue or pull request. Bring the thing that
|
|
51
|
+
would change the answer: a measurement, a failing case, a constraint that was
|
|
52
|
+
missed. This project changes its mind on evidence and says so when it does —
|
|
53
|
+
several roadmap cards exist specifically to record that an earlier claim was
|
|
54
|
+
wrong.
|
|
55
|
+
|
|
56
|
+
**With the process, or with a person.** Conduct concerns go through the private
|
|
57
|
+
reporting route in [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md), never a public
|
|
58
|
+
issue.
|
|
59
|
+
|
|
60
|
+
**When you cannot reach agreement.** With a single maintainer there is no appeal
|
|
61
|
+
body, and pretending otherwise would be dishonest. The real backstop is the
|
|
62
|
+
licence: boost is GPL-3.0 with full public history, so anyone who thinks the
|
|
63
|
+
project is being run badly can fork it and prove it. That is a genuine check on
|
|
64
|
+
the maintainer, not a consolation prize.
|
|
65
|
+
|
|
66
|
+
## What is deliberately not decided by discussion
|
|
67
|
+
|
|
68
|
+
Some things are settled by rule, and a pull request arguing the opposite gets
|
|
69
|
+
declined on sight unless it changes the rule first:
|
|
70
|
+
|
|
71
|
+
- **The runtime imports no third-party package.** Enforced by `import-linter`.
|
|
72
|
+
- **Generated files are never hand-edited.** `registries.json`, both roadmap
|
|
73
|
+
boards, `commands.html`. Edit the source and regenerate.
|
|
74
|
+
- **A suppressed finding needs a written argument**, naming what would have to
|
|
75
|
+
change for the suppression to stop being true. See
|
|
76
|
+
[`docs/dependencies.md`](docs/dependencies.md).
|
|
77
|
+
- **A badge answer or a security claim must be checkable.** If the evidence
|
|
78
|
+
needs credentials nobody reading has, the claim gets softened to what *is*
|
|
79
|
+
checkable rather than asserted.
|
|
80
|
+
|
|
81
|
+
## Roadmap and priority
|
|
82
|
+
|
|
83
|
+
Priority is public and data-driven. Both boards are generated from one file per
|
|
84
|
+
item under `docs/roadmap/items/`, so proposing work is a pull request adding a
|
|
85
|
+
card, and claiming work is a pull request setting `status` and `owner` on one.
|
|
86
|
+
Two people claiming different items touch different files and merge cleanly; two
|
|
87
|
+
claiming the *same* item conflict on that one small file, which is the intended
|
|
88
|
+
"already claimed" signal — first to merge wins.
|
|
89
|
+
|
|
90
|
+
There is no private backlog. What is on the boards is what is planned.
|
|
91
|
+
|
|
92
|
+
## Releases
|
|
93
|
+
|
|
94
|
+
Every merge to `main` cuts a release. There is no release manager, no release
|
|
95
|
+
meeting, and no window: the decision to release *is* the decision to merge.
|
|
96
|
+
Consequences of that are set out in [SUPPORT.md](SUPPORT.md) — only the latest
|
|
97
|
+
release is supported — and in
|
|
98
|
+
[`docs/verifying-releases.md`](docs/verifying-releases.md), which is how you
|
|
99
|
+
check that a release came from this repository.
|
|
100
|
+
|
|
101
|
+
## Changing this document
|
|
102
|
+
|
|
103
|
+
Like anything else: a pull request, argued in public, merged through the gates.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: boost-skill-cli
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.30
|
|
4
4
|
Summary: boost — Homebrew for AI coding skills
|
|
5
5
|
Author: Jonathan Reyes
|
|
6
6
|
License: GNU GENERAL PUBLIC LICENSE
|
|
@@ -725,6 +725,7 @@ Dynamic: license-file
|
|
|
725
725
|
[](https://github.com/jonnyeclectic/boost/blob/main/scripts/mutation_gate.py)
|
|
726
726
|
[](https://github.com/jonnyeclectic/boost/actions/workflows/ci.yml)
|
|
727
727
|
[](https://www.bestpractices.dev/projects/14275)
|
|
728
|
+
[](https://www.bestpractices.dev/projects/14275/baseline-2)
|
|
728
729
|
[](LICENSE)
|
|
729
730
|
|
|
730
731
|
**Homebrew for AI coding skills.** boost finds, installs, and version-tracks
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
[](https://github.com/jonnyeclectic/boost/blob/main/scripts/mutation_gate.py)
|
|
8
8
|
[](https://github.com/jonnyeclectic/boost/actions/workflows/ci.yml)
|
|
9
9
|
[](https://www.bestpractices.dev/projects/14275)
|
|
10
|
+
[](https://www.bestpractices.dev/projects/14275/baseline-2)
|
|
10
11
|
[](LICENSE)
|
|
11
12
|
|
|
12
13
|
**Homebrew for AI coding skills.** boost finds, installs, and version-tracks
|
|
@@ -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.30'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 2, 30)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: boost-skill-cli
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.30
|
|
4
4
|
Summary: boost — Homebrew for AI coding skills
|
|
5
5
|
Author: Jonathan Reyes
|
|
6
6
|
License: GNU GENERAL PUBLIC LICENSE
|
|
@@ -725,6 +725,7 @@ Dynamic: license-file
|
|
|
725
725
|
[](https://github.com/jonnyeclectic/boost/blob/main/scripts/mutation_gate.py)
|
|
726
726
|
[](https://github.com/jonnyeclectic/boost/actions/workflows/ci.yml)
|
|
727
727
|
[](https://www.bestpractices.dev/projects/14275)
|
|
728
|
+
[](https://www.bestpractices.dev/projects/14275/baseline-2)
|
|
728
729
|
[](LICENSE)
|
|
729
730
|
|
|
730
731
|
**Homebrew for AI coding skills.** boost finds, installs, and version-tracks
|
|
@@ -12,6 +12,7 @@ CLAUDE.md
|
|
|
12
12
|
CODE_OF_CONDUCT.md
|
|
13
13
|
CONTRIBUTING.md
|
|
14
14
|
DCO
|
|
15
|
+
GOVERNANCE.md
|
|
15
16
|
LICENSE
|
|
16
17
|
MAINTAINERS.md
|
|
17
18
|
MANIFEST.in
|
|
@@ -138,6 +139,7 @@ docs/index.html
|
|
|
138
139
|
docs/langchain.html
|
|
139
140
|
docs/mcp-hub.html
|
|
140
141
|
docs/openssf-badge.md
|
|
142
|
+
docs/openssf-playbook.md
|
|
141
143
|
docs/rag-architecture.md
|
|
142
144
|
docs/roadmap.html
|
|
143
145
|
docs/security-design.md
|
|
@@ -348,6 +350,8 @@ docs/roadmap/items/one-commit-can-cut-two-releases.md
|
|
|
348
350
|
docs/roadmap/items/one-dead-tap-broke-every-update.md
|
|
349
351
|
docs/roadmap/items/one-shared-atomic-write-helper.md
|
|
350
352
|
docs/roadmap/items/openssf-best-practices-badge.md
|
|
353
|
+
docs/roadmap/items/openssf-playbook.md
|
|
354
|
+
docs/roadmap/items/openssf-silver.md
|
|
351
355
|
docs/roadmap/items/osps-baseline-levels.md
|
|
352
356
|
docs/roadmap/items/package-metadata-validation-twine-check-friends.md
|
|
353
357
|
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.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: openssf-silver
|
|
3
|
+
board: code
|
|
4
|
+
section: health
|
|
5
|
+
status: inflight
|
|
6
|
+
category: Security · Posture
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 3
|
|
10
|
+
note: 55 criteria, 31% → the gap was two documents, not fifty
|
|
11
|
+
order: 7
|
|
12
|
+
owner: loop/openssf-silver
|
|
13
|
+
pr:
|
|
14
|
+
title: OpenSSF silver — reachable solo, and mostly already true
|
|
15
|
+
---
|
|
16
|
+
Silver reads like a wall — <b>55 criteria</b> on top of passing — and the board showed 31%
|
|
17
|
+
with 37 unanswered. Reading them rather than assuming turned the estimate from "a day" into
|
|
18
|
+
<b>two documents</b>. The same lesson <a href="roadmap.html#osps-baseline-levels">the Baseline
|
|
19
|
+
audit</a> taught: most unanswered criteria are already satisfied and merely unrecorded.
|
|
20
|
+
Eighteen were <b>already answered</b>, because the badge site carries a justification across
|
|
21
|
+
levels wherever a criterion name repeats — so <code>assurance_case</code>,
|
|
22
|
+
<code>signed_releases</code>, <code>dco</code> and <code>roles_responsibilities</code> arrived
|
|
23
|
+
already Met from the passing and Baseline work. Most of the remaining 37 are evidence that
|
|
24
|
+
exists and had never been written into a form: the coverage and mutation gates, the
|
|
25
|
+
hash-pinned toolchain, the C4 architecture docs, the generated command reference with its
|
|
26
|
+
freshness check.
|
|
27
|
+
<b>The two genuine gaps.</b> <code>governance</code> wanted the decision-making model, which
|
|
28
|
+
<code>MAINTAINERS.md</code> did not cover — it lists roles, not how a decision gets made or
|
|
29
|
+
what happens when people disagree. <code>GOVERNANCE.md</code> now says it plainly: a
|
|
30
|
+
benevolent-dictator model, the gates decide what they can, a "no" is recorded rather than
|
|
31
|
+
dropped, and the real backstop on a single maintainer is the GPL and a public history —
|
|
32
|
+
anyone who thinks it is run badly can fork and prove it. <code>documentation_achievements</code>
|
|
33
|
+
wanted the badges hyperlinked from the front page.
|
|
34
|
+
<b>What stays honestly Unmet</b>, all SHOULD or SUGGESTED, so the badge still passes:
|
|
35
|
+
<code>bus_factor</code> (one maintainer), <code>version_tags_signed</code> (tags are
|
|
36
|
+
unsigned; releases carry SLSA provenance instead), <code>crypto_algorithm_agility</code>
|
|
37
|
+
(minisign is Ed25519-only by format) and <code>internationalization</code> (the CLI is
|
|
38
|
+
English-only). Gold remains out of reach for the reason it always was — it needs a second
|
|
39
|
+
human, not a commit.
|
|
@@ -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>271</b><span>Loop finds</span></div>
|
|
137
137
|
<!-- /ROADMAP:stats -->
|
|
138
138
|
</div>
|
|
139
139
|
</section>
|
|
@@ -4759,6 +4759,41 @@ improvement is real (or isn't)."</p></details>
|
|
|
4759
4759
|
</div>
|
|
4760
4760
|
</article>
|
|
4761
4761
|
|
|
4762
|
+
<article class="cap rcard" id="openssf-silver">
|
|
4763
|
+
<div class="head"><span class="pill inflight">In flight</span><span class="cat">Security · Posture</span></div>
|
|
4764
|
+
<h3>OpenSSF silver — reachable solo, and mostly already true</h3>
|
|
4765
|
+
<p>Silver reads like a wall — <b>55 criteria</b> on top of passing — and the board showed 31%
|
|
4766
|
+
with 37 unanswered. Reading them rather than assuming turned the estimate from "a day" into
|
|
4767
|
+
<b>two documents</b>. The same lesson <a href="roadmap.html#osps-baseline-levels">the Baseline
|
|
4768
|
+
audit</a> taught: most unanswered criteria are already satisfied and merely unrecorded.
|
|
4769
|
+
Eighteen were <b>already answered</b>, because the badge site carries a justification across
|
|
4770
|
+
levels wherever a criterion name repeats — so <code>assurance_case</code>,
|
|
4771
|
+
<code>signed_releases</code>, <code>dco</code> and <code>roles_responsibilities</code> arrived
|
|
4772
|
+
already Met from the passing and Baseline work. Most of the remaining 37 are evidence that
|
|
4773
|
+
exists and had never been written into a form: the coverage and mutation gates, the
|
|
4774
|
+
hash-pinned toolchain, the C4 architecture docs, the generated command reference with its
|
|
4775
|
+
freshness check.
|
|
4776
|
+
<b>The two genuine gaps.</b> <code>governance</code> wanted the decision-making model, which
|
|
4777
|
+
<code>MAINTAINERS.md</code> did not cover — it lists roles, not how a decision gets made or
|
|
4778
|
+
what happens when people disagree. <code>GOVERNANCE.md</code> now says it plainly: a
|
|
4779
|
+
benevolent-dictator model, the gates decide what they can, a "no" is recorded rather than
|
|
4780
|
+
dropped, and the real backstop on a single maintainer is the GPL and a public history —
|
|
4781
|
+
anyone who thinks it is run badly can fork and prove it. <code>documentation_achievements</code>
|
|
4782
|
+
wanted the badges hyperlinked from the front page.
|
|
4783
|
+
<b>What stays honestly Unmet</b>, all SHOULD or SUGGESTED, so the badge still passes:
|
|
4784
|
+
<code>bus_factor</code> (one maintainer), <code>version_tags_signed</code> (tags are
|
|
4785
|
+
unsigned; releases carry SLSA provenance instead), <code>crypto_algorithm_agility</code>
|
|
4786
|
+
(minisign is Ed25519-only by format) and <code>internationalization</code> (the CLI is
|
|
4787
|
+
English-only). Gold remains out of reach for the reason it always was — it needs a second
|
|
4788
|
+
human, not a commit.</p>
|
|
4789
|
+
<div class="meta">
|
|
4790
|
+
<span class="m">Complexity <b>S</b></span>
|
|
4791
|
+
<span class="m">Impact <b>Med</b></span>
|
|
4792
|
+
<span class="m">Wow <b class="wow">★★★</b></span>
|
|
4793
|
+
<span class="m">55 criteria, 31% → the gap was two documents, not fifty</span>
|
|
4794
|
+
</div>
|
|
4795
|
+
</article>
|
|
4796
|
+
|
|
4762
4797
|
<article class="cap rcard" id="property-based-tests-hypothesis-on-the-parsers">
|
|
4763
4798
|
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Testing · Bug</span></div>
|
|
4764
4799
|
<h3>Property-based tests — <code>hypothesis</code> on the parsers</h3>
|
|
@@ -9405,6 +9440,36 @@ and the work stays visible.</p></details>
|
|
|
9405
9440
|
</div>
|
|
9406
9441
|
</article>
|
|
9407
9442
|
|
|
9443
|
+
<article class="cap rcard" id="openssf-playbook">
|
|
9444
|
+
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Docs</span></div>
|
|
9445
|
+
<h3>The OpenSSF badge playbook</h3>
|
|
9446
|
+
<details class="cardbody"><summary>Write-up</summary>
|
|
9447
|
+
<p>Three badges in one session left two kinds of artifact behind. <a href="roadmap.html#openssf-best-practices-badge">The
|
|
9448
|
+
answer sheets</a> record <i>what boost answered</i>, which is worth exactly nothing to
|
|
9449
|
+
anybody else. This records <b>the method</b>.
|
|
9450
|
+
The parts that cost real time to discover: the badge site issues <b>four independent
|
|
9451
|
+
badges</b>, not one with tiers, each at its own <code>/<level>/edit</code> form. The
|
|
9452
|
+
authoritative criteria need <b>two</b> upstream files — <code>criteria.yml</code> has the
|
|
9453
|
+
MUST/SHOULD and <code>na_allowed</code> flags but no prose, <code>en.yml</code> has the
|
|
9454
|
+
prose — and the obvious <code>/criteria/0.json</code> endpoint returns 406. A parser that
|
|
9455
|
+
does not stop at <code>- '1':</code> folds silver into passing; passing is exactly 67, so
|
|
9456
|
+
the count is the check.
|
|
9457
|
+
The part that changes how you plan: <b>most unanswered criteria are already satisfied and
|
|
9458
|
+
merely unrecorded</b>. Nine of Baseline Level 1's 24 were open and every one was already
|
|
9459
|
+
true — the work was proving it, not building it, and the badge went 63% → 100% with no code.
|
|
9460
|
+
So every criterion sorts into three buckets: documentation you can write, a repository
|
|
9461
|
+
setting you cannot do from a branch, and <b>structurally blocked — say so and move on</b>.
|
|
9462
|
+
Also records the three honesty traps this project walked into and had to back out of:
|
|
9463
|
+
claiming a setting that needs credentials to read, restating a claim the repo's own
|
|
9464
|
+
Scorecard triage refuses to make, and inheriting "the licence is MIT" when it is GPL-3.0.</p></details>
|
|
9465
|
+
<div class="meta">
|
|
9466
|
+
<span class="m">Complexity <b>S</b></span>
|
|
9467
|
+
<span class="m">Impact <b>Med</b></span>
|
|
9468
|
+
<span class="m">Wow <b class="wow">★★★</b></span>
|
|
9469
|
+
<span class="m">the method, not the answers — so another repo can repeat it</span>
|
|
9470
|
+
</div>
|
|
9471
|
+
</article>
|
|
9472
|
+
|
|
9408
9473
|
<article class="cap rcard" id="prose-and-terminology-linting-vale">
|
|
9409
9474
|
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Quality · Content</span></div>
|
|
9410
9475
|
<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
|