boost-skill-cli 1.2.26__tar.gz → 1.2.27__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.26 → boost_skill_cli-1.2.27}/.vale/styles/config/vocabularies/boost/accept.txt +28 -1
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/PKG-INFO +2 -1
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/README.md +1 -0
- boost_skill_cli-1.2.27/SECURITY.md +48 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/commands/quality.py +2 -2
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_skill_cli.egg-info/PKG-INFO +2 -1
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_skill_cli.egg-info/SOURCES.txt +3 -0
- boost_skill_cli-1.2.27/docs/openssf-badge.md +254 -0
- boost_skill_cli-1.2.27/docs/roadmap/items/openssf-best-practices-badge.md +42 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/scorecard-findings-triage.md +5 -3
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap.html +45 -4
- boost_skill_cli-1.2.27/docs/security-design.md +191 -0
- boost_skill_cli-1.2.26/SECURITY.md +0 -22
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/.gitattributes +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/.gitignore +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/.lycheeignore +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/.vale/styles/boost/AIWriting.yml +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/.vale.ini +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/CLAUDE.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/LICENSE +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/MANIFEST.in +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/Makefile +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/bmad.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/bootstrap.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/browse.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/builtin.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/catalogbundle.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/complete.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/data/rules/boost-first.mdc +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_langchain/__init__.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_langchain/_compat.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_langchain/graph.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_langchain/loader.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_langchain/py.typed +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_langchain/retriever.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/codecov.yml +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/adapters.html +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/carousel.html +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/chat.html +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/commands.html +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/demo.gif +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/demo.html +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/demo.tape +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/eval-latest.json +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/eval.html +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/index.html +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/langchain.html +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/boost-first-rule.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/install-path-disambiguation.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/zip-strict-audit.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/evals/README.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/evals/__init__.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/evals/baseline.json +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/evals/metrics.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/evals/publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/examples/README.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/index.html +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/noxfile.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/pyproject.toml +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/build_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/eval_corpus.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/measure_registry.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/page_budget.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/publish_eval_json.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/scripts/serve_docs.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/setup.cfg +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/sonar-project.properties +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/style/README.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/style/boost.css +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/style/boost.js +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/style/demo.html +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/conftest.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/eval/taps-scale.txt +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/functional/test_cli_catalog.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/functional/test_cli_pane_width.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/functional/test_kind_conformance.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/langchain/conftest.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/langchain/test_graph.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/langchain/test_loader.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/langchain/test_retriever.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_action_pin_lockstep.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_bmad_core.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_boost_first_offer.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_bootstrap.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_browse.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_builtin.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_catalogbundle.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_clean_internal_cache.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_compact.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_complete.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_complete_rc_block.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_content_identity.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_crash_redaction.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_dense_embed_dedupe.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_dense_quantized.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_dense_ready_order.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_dense_shard_real_schema.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_dense_status_cheap.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_embed_truncated_response.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_eval_corpus.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_eval_grading.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_gemini_agent_sanitize.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_gitutil_lfs.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_gitutil_sparse.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_install_permission_error.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_langchain_packaging.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_link_ownership.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_measure_registry.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_page_budget.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_rag_fastpath.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_registry_control_chars.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_rerank_cache.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_serve_docs.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_shards_matrix.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_smoke_covers_every_command.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_store_materialize.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_sync_blocked_links.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_visual_harness_flags.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_workflow_concurrency_groups.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_workflow_push_has_credentials.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/visual/package-lock.json +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/tests/visual/visual_check.mjs +0 -0
{boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/.vale/styles/config/vocabularies/boost/accept.txt
RENAMED
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
ABM
|
|
2
2
|
agentic
|
|
3
3
|
Algolia
|
|
4
|
+
allowlist
|
|
4
5
|
allowlisted
|
|
5
6
|
argparse
|
|
6
7
|
Arize
|
|
8
|
+
ASan
|
|
7
9
|
Attio
|
|
8
10
|
backtick
|
|
9
11
|
backticks
|
|
10
12
|
Bagisto
|
|
13
|
+
basename
|
|
14
|
+
basenames
|
|
15
|
+
bestpractices
|
|
11
16
|
bmad
|
|
12
17
|
bookended
|
|
13
18
|
Camunda
|
|
@@ -18,10 +23,12 @@ codespell
|
|
|
18
23
|
ColdIQ
|
|
19
24
|
config
|
|
20
25
|
configs
|
|
26
|
+
CPython
|
|
21
27
|
CRM
|
|
22
28
|
cyclomatic
|
|
23
29
|
Dependabot
|
|
24
30
|
deps
|
|
31
|
+
deserialization
|
|
25
32
|
Dev
|
|
26
33
|
DigitalOcean
|
|
27
34
|
docsite
|
|
@@ -35,6 +42,7 @@ eval
|
|
|
35
42
|
evals
|
|
36
43
|
freemium
|
|
37
44
|
frontmatter
|
|
45
|
+
fuzzer
|
|
38
46
|
GEO
|
|
39
47
|
GIF
|
|
40
48
|
gitignored
|
|
@@ -55,26 +63,36 @@ Kotlin
|
|
|
55
63
|
langchain
|
|
56
64
|
Langfuse
|
|
57
65
|
LeadMagic
|
|
66
|
+
libFuzzer
|
|
67
|
+
libsodium
|
|
58
68
|
lookups
|
|
59
69
|
lowercasing
|
|
60
70
|
Magento
|
|
61
71
|
mcp
|
|
62
72
|
mergeable
|
|
73
|
+
minisign
|
|
74
|
+
misconfiguration
|
|
63
75
|
MLflow
|
|
64
76
|
mutmut
|
|
65
77
|
mypy
|
|
78
|
+
nonces
|
|
66
79
|
npm
|
|
67
80
|
onboards
|
|
68
81
|
OpenShift
|
|
82
|
+
OpenSSF
|
|
69
83
|
overclaiming
|
|
70
84
|
Pinecone
|
|
71
85
|
pipx
|
|
86
|
+
plaintext
|
|
87
|
+
prehash
|
|
72
88
|
PrestaShop
|
|
73
89
|
Pulumi
|
|
74
90
|
pytest
|
|
75
91
|
Qdrant
|
|
76
92
|
Quarkus
|
|
77
93
|
rebased
|
|
94
|
+
reimplement
|
|
95
|
+
reimplemented
|
|
78
96
|
reindex
|
|
79
97
|
repo
|
|
80
98
|
repo's
|
|
@@ -90,11 +108,14 @@ ruleset
|
|
|
90
108
|
Rulesets
|
|
91
109
|
rulesets
|
|
92
110
|
Salesforce
|
|
111
|
+
Saltzer
|
|
93
112
|
sandboxed
|
|
94
113
|
sandboxing
|
|
95
114
|
scrollbar
|
|
96
115
|
SEO
|
|
116
|
+
setuptools
|
|
97
117
|
Shopify
|
|
118
|
+
Sigstore
|
|
98
119
|
SonarCloud
|
|
99
120
|
stderr
|
|
100
121
|
Stdlib
|
|
@@ -104,25 +125,31 @@ stemmer
|
|
|
104
125
|
stemming
|
|
105
126
|
subagents
|
|
106
127
|
subcommand
|
|
128
|
+
subprocess
|
|
107
129
|
tappable
|
|
108
130
|
teardown
|
|
109
131
|
tempdir
|
|
110
132
|
toggleable
|
|
111
|
-
tokenization
|
|
112
133
|
Tokenization
|
|
134
|
+
tokenization
|
|
113
135
|
toolchain
|
|
114
136
|
toolkits
|
|
115
137
|
traceback
|
|
116
138
|
tracebacks
|
|
139
|
+
triaged
|
|
140
|
+
triages
|
|
117
141
|
typosquat
|
|
118
142
|
typosquatted
|
|
119
143
|
unkilled
|
|
120
144
|
unlinking
|
|
145
|
+
unpatched
|
|
121
146
|
unregister
|
|
122
147
|
unstaged
|
|
123
148
|
untap
|
|
149
|
+
untrusted
|
|
124
150
|
uv
|
|
125
151
|
Vaadin
|
|
152
|
+
Valgrind
|
|
126
153
|
vendored
|
|
127
154
|
vendoring
|
|
128
155
|
venv
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: boost-skill-cli
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.27
|
|
4
4
|
Summary: boost — Homebrew for AI coding skills
|
|
5
5
|
Author: Jonathan Reyes
|
|
6
6
|
License: GNU GENERAL PUBLIC LICENSE
|
|
@@ -724,6 +724,7 @@ Dynamic: license-file
|
|
|
724
724
|
[](https://github.com/jonnyeclectic/boost/actions/workflows/ci.yml)
|
|
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
|
+
[](https://www.bestpractices.dev/projects/14275)
|
|
727
728
|
[](LICENSE)
|
|
728
729
|
|
|
729
730
|
**Homebrew for AI coding skills.** boost finds, installs, and version-tracks
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
[](https://github.com/jonnyeclectic/boost/actions/workflows/ci.yml)
|
|
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
|
+
[](https://www.bestpractices.dev/projects/14275)
|
|
9
10
|
[](LICENSE)
|
|
10
11
|
|
|
11
12
|
**Homebrew for AI coding skills.** boost finds, installs, and version-tracks
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Security policy
|
|
2
|
+
|
|
3
|
+
## Supported versions
|
|
4
|
+
|
|
5
|
+
Only the latest release receives security fixes.
|
|
6
|
+
|
|
7
|
+
## Reporting a vulnerability
|
|
8
|
+
|
|
9
|
+
Please **do not** open a public issue for security reports. Instead, use
|
|
10
|
+
GitHub's private vulnerability reporting:
|
|
11
|
+
|
|
12
|
+
**[Report a vulnerability](https://github.com/jonnyeclectic/boost/security/advisories/new)**
|
|
13
|
+
|
|
14
|
+
You can expect an acknowledgement within a few days. Please include steps to
|
|
15
|
+
reproduce and the affected command(s).
|
|
16
|
+
|
|
17
|
+
## Vulnerability fixes in release notes
|
|
18
|
+
|
|
19
|
+
Every merge to `main` cuts a release, so a fix reaches users within minutes of
|
|
20
|
+
landing. When a release fixes a publicly known vulnerability in boost itself —
|
|
21
|
+
one that already had a CVE or an equivalent identifier when the release was
|
|
22
|
+
cut — the [release notes](https://github.com/jonnyeclectic/boost/releases) will
|
|
23
|
+
name it and its identifier, so you can tell an upgrade that matters from one
|
|
24
|
+
that does not. No such vulnerability has been reported to date.
|
|
25
|
+
|
|
26
|
+
Vulnerabilities in boost's *dependencies* are handled separately: the runtime
|
|
27
|
+
has none, and the development toolchain is watched by `osv-scanner`, `pip-audit`
|
|
28
|
+
and Dependabot.
|
|
29
|
+
|
|
30
|
+
## Scope notes
|
|
31
|
+
|
|
32
|
+
boost executes `git` against registry URLs you tap and symlinks skills into
|
|
33
|
+
agent directories. Reports about tap-supplied content escaping the store,
|
|
34
|
+
path traversal via `SKILL.md` frontmatter, or command injection through
|
|
35
|
+
skill/tap names are especially valuable.
|
|
36
|
+
|
|
37
|
+
## How boost is designed to resist this
|
|
38
|
+
|
|
39
|
+
[`docs/security-design.md`](docs/security-design.md) is the threat model: what
|
|
40
|
+
boost trusts and what it does not, the design principles the code is held to,
|
|
41
|
+
and the table of error classes — path traversal, command injection, zip-slip,
|
|
42
|
+
untrusted deserialization, supply-chain compromise — each paired with the
|
|
43
|
+
mitigation that counters it. It also states the known limits plainly, including
|
|
44
|
+
the one that matters most: boost gives you a skill's provenance, integrity and
|
|
45
|
+
diff, but judging what the skill *tells your agent to do* is yours.
|
|
46
|
+
|
|
47
|
+
For how boost's badge-level security posture is assessed, see
|
|
48
|
+
[`docs/openssf-badge.md`](docs/openssf-badge.md).
|
|
@@ -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.27'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 2, 27)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -1187,9 +1187,9 @@ def cmd_trust(argv) -> int:
|
|
|
1187
1187
|
key_path = paths.expand(args.key)
|
|
1188
1188
|
key_text = (key_path.read_text(encoding="utf-8")
|
|
1189
1189
|
if key_path.is_file() else args.key)
|
|
1190
|
-
|
|
1190
|
+
provenance.add_trusted_key(args.name, key_text)
|
|
1191
1191
|
journal.log("trust", args.name, op="add-key")
|
|
1192
|
-
out.ok("trusted key
|
|
1192
|
+
out.ok("trusted key added")
|
|
1193
1193
|
return 0
|
|
1194
1194
|
|
|
1195
1195
|
if args.action == "remove":
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: boost-skill-cli
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.27
|
|
4
4
|
Summary: boost — Homebrew for AI coding skills
|
|
5
5
|
Author: Jonathan Reyes
|
|
6
6
|
License: GNU GENERAL PUBLIC LICENSE
|
|
@@ -724,6 +724,7 @@ Dynamic: license-file
|
|
|
724
724
|
[](https://github.com/jonnyeclectic/boost/actions/workflows/ci.yml)
|
|
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
|
+
[](https://www.bestpractices.dev/projects/14275)
|
|
727
728
|
[](LICENSE)
|
|
728
729
|
|
|
729
730
|
**Homebrew for AI coding skills.** boost finds, installs, and version-tracks
|
|
@@ -132,8 +132,10 @@ docs/eval.html
|
|
|
132
132
|
docs/index.html
|
|
133
133
|
docs/langchain.html
|
|
134
134
|
docs/mcp-hub.html
|
|
135
|
+
docs/openssf-badge.md
|
|
135
136
|
docs/rag-architecture.md
|
|
136
137
|
docs/roadmap.html
|
|
138
|
+
docs/security-design.md
|
|
137
139
|
docs/.claude/settings.local.json
|
|
138
140
|
docs/architecture/README.md
|
|
139
141
|
docs/architecture/c4-components-core.md
|
|
@@ -339,6 +341,7 @@ docs/roadmap/items/one-command-every-env-nox.md
|
|
|
339
341
|
docs/roadmap/items/one-commit-can-cut-two-releases.md
|
|
340
342
|
docs/roadmap/items/one-dead-tap-broke-every-update.md
|
|
341
343
|
docs/roadmap/items/one-shared-atomic-write-helper.md
|
|
344
|
+
docs/roadmap/items/openssf-best-practices-badge.md
|
|
342
345
|
docs/roadmap/items/package-metadata-validation-twine-check-friends.md
|
|
343
346
|
docs/roadmap/items/patch-coverage-gate-diff-cover.md
|
|
344
347
|
docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
# OpenSSF Best Practices badge — passing-level answers
|
|
2
|
+
|
|
3
|
+
This is boost's worked answer to all 67 **passing**-level criteria of the
|
|
4
|
+
[OpenSSF Best Practices badge](https://www.bestpractices.dev/). It exists so the
|
|
5
|
+
badge submission is a transcription job rather than a research job, and so the
|
|
6
|
+
claims stay reviewable: every "Met" below names the artifact that backs it, and
|
|
7
|
+
every "N/A" says why the criterion does not apply.
|
|
8
|
+
|
|
9
|
+
Criteria text is from the
|
|
10
|
+
[badge project's own `criteria.yml`](https://github.com/coreinfrastructure/best-practices-badge/blob/main/criteria/criteria.yml).
|
|
11
|
+
`MUST` must be Met (or N/A where the criterion permits it). `SHOULD` may be
|
|
12
|
+
Unmet **with a justification**. `SUGGESTED` need only be answered.
|
|
13
|
+
|
|
14
|
+
**Status: 66 Met or N/A, 1 SHOULD deliberately Unmet with justification
|
|
15
|
+
(`crypto_call`).** That clears the passing bar. What remains is registration —
|
|
16
|
+
see [Human actions](#human-actions) at the end.
|
|
17
|
+
|
|
18
|
+
Repository: <https://github.com/jonnyeclectic/boost> · Licence: GPL-3.0 ·
|
|
19
|
+
Package: [`boost-skill-cli`](https://pypi.org/project/boost-skill-cli/)
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Basics
|
|
24
|
+
|
|
25
|
+
### Basic project website content
|
|
26
|
+
|
|
27
|
+
| Criterion | Cat. | Answer | Evidence |
|
|
28
|
+
|---|---|---|---|
|
|
29
|
+
| `description_good` | MUST | **Met** | The README opens with what boost is and who it is for: "a package manager for AI coding skills… finds, installs, and version-tracks skills from GitHub-hosted registries". Mirrored in the repository description and the [Visual Guide](https://jonnyeclectic.github.io/boost/). |
|
|
30
|
+
| `interact` | MUST | **Met** | README carries install, quick start and command examples; CONTRIBUTING carries dev setup, the gate list and PR process; both are linked from the site nav. |
|
|
31
|
+
| `contribution` | MUST | **Met** | <https://github.com/jonnyeclectic/boost/blob/main/CONTRIBUTING.md> — dev setup, ground rules, the full gate table, generated-file rules and PR expectations. |
|
|
32
|
+
| `contribution_requirements` | SHOULD | **Met** | Same file: "Ground rules" states the stdlib-only runtime, the layering rule, and that behaviour changes need tests. [`.github/PULL_REQUEST_TEMPLATE.md`](https://github.com/jonnyeclectic/boost/blob/main/.github/PULL_REQUEST_TEMPLATE.md) pre-fills the checklist. |
|
|
33
|
+
|
|
34
|
+
### FLOSS license
|
|
35
|
+
|
|
36
|
+
| Criterion | Cat. | Answer | Evidence |
|
|
37
|
+
|---|---|---|---|
|
|
38
|
+
| `floss_license` | MUST | **Met** | GPL-3.0. |
|
|
39
|
+
| `floss_license_osi` | SUGGESTED | **Met** | GPL-3.0 is [OSI-approved](https://opensource.org/license/gpl-3-0). |
|
|
40
|
+
| `license_location` | MUST | **Met** | <https://github.com/jonnyeclectic/boost/blob/main/LICENSE>, at the repository root, and declared in `pyproject.toml`. |
|
|
41
|
+
|
|
42
|
+
### Documentation
|
|
43
|
+
|
|
44
|
+
| Criterion | Cat. | Answer | Evidence |
|
|
45
|
+
|---|---|---|---|
|
|
46
|
+
| `documentation_basics` | MUST | **Met** | README (install, quick start, concepts) plus the [Visual Guide](https://jonnyeclectic.github.io/boost/), [`docs/DEBUGGING.md`](https://github.com/jonnyeclectic/boost/blob/main/docs/DEBUGGING.md) and [`docs/rag-architecture.md`](https://github.com/jonnyeclectic/boost/blob/main/docs/rag-architecture.md). |
|
|
47
|
+
| `documentation_interface` | MUST | **Met** | [`docs/commands.html`](https://jonnyeclectic.github.io/boost/docs/commands.html) documents every command and every flag. It is *generated from the CLI itself* — the `COMMANDS` registry and each command's argparse parser — and a CI `--check` fails the build if it drifts, so the reference cannot go stale. `boost --help` and `boost <cmd> --help` are the same data. |
|
|
48
|
+
|
|
49
|
+
### Other
|
|
50
|
+
|
|
51
|
+
| Criterion | Cat. | Answer | Evidence |
|
|
52
|
+
|---|---|---|---|
|
|
53
|
+
| `sites_https` | MUST | **Met** | Every project site is HTTPS-only: `github.com/jonnyeclectic/boost`, `jonnyeclectic.github.io/boost` (GitHub Pages enforces HTTPS), `pypi.org/project/boost-skill-cli`. A link-check workflow runs over the docs. |
|
|
54
|
+
| `discussion` | MUST | **Met** | [GitHub Issues](https://github.com/jonnyeclectic/boost/issues), open to anyone, archived and searchable. |
|
|
55
|
+
| `english` | SHOULD | **Met** | All documentation, code, commit messages, issues and reviews are in English. A `vale` prose-lint gate runs on the English documentation. |
|
|
56
|
+
| `maintained` | MUST | **Met** | Active daily development — 560+ merged pull requests, and *every* merge to `main` cuts a release. The criterion asks only that the project be maintained; the project is not claiming to be unmaintained or seeking new maintainers. (Bus factor is a *silver*-level criterion and out of scope here — boost is a single-maintainer project today, which is worth saying out loud before anyone attempts silver.) |
|
|
57
|
+
|
|
58
|
+
## Change Control
|
|
59
|
+
|
|
60
|
+
### Public version-controlled source repository
|
|
61
|
+
|
|
62
|
+
| Criterion | Cat. | Answer | Evidence |
|
|
63
|
+
|---|---|---|---|
|
|
64
|
+
| `repo_public` | MUST | **Met** | Public repository, full history, at the URL above. |
|
|
65
|
+
| `repo_track` | MUST | **Met** | git — every change is a tracked commit with author and message. `main` is protected and takes changes only through a pull request that has passed the full required-check gate. Note what is *not* claimed: the ruleset deliberately does not require a human approval, because the working model is parallel `loop/*` branches that self-merge and there is no second reviewer. The criterion does not ask for review, and the [Scorecard triage card](https://jonnyeclectic.github.io/boost/docs/roadmap.html#scorecard-findings-triage) keeps that finding open rather than dismissing it, because the score is accurate. |
|
|
66
|
+
| `repo_interim` | MUST | **Met** | Interim versions are on `main` continuously; the release cadence is *per merge*, so the published version is never more than one merge behind the repository. |
|
|
67
|
+
| `repo_distributed` | SUGGESTED | **Met** | git. |
|
|
68
|
+
|
|
69
|
+
### Unique version numbering
|
|
70
|
+
|
|
71
|
+
| Criterion | Cat. | Answer | Evidence |
|
|
72
|
+
|---|---|---|---|
|
|
73
|
+
| `version_unique` | MUST | **Met** | Versions come from `setuptools-scm` reading git tags — there is no hand-maintained `__version__` to fall out of sync, and a tag is unique by construction. `boost --version` reports it. |
|
|
74
|
+
| `version_semver` | SUGGESTED | **Met** | `vMAJOR.MINOR.PATCH` (current series `v1.2.x`). |
|
|
75
|
+
| `version_tags` | SUGGESTED | **Met** | Every release is a git tag, created by the release workflow. |
|
|
76
|
+
|
|
77
|
+
### Release notes
|
|
78
|
+
|
|
79
|
+
| Criterion | Cat. | Answer | Evidence |
|
|
80
|
+
|---|---|---|---|
|
|
81
|
+
| `release_notes` | MUST | **Met** | <https://github.com/jonnyeclectic/boost/releases> — one GitHub release per version, notes assembled by [release-drafter](https://github.com/jonnyeclectic/boost/blob/main/.github/release-drafter.yml) from the merged pull-request titles, which is why CONTRIBUTING asks for the PR description to be written as the release note. |
|
|
82
|
+
| `release_notes_vulns` | MUST | **N/A** | No publicly known run-time vulnerability in boost itself has ever been reported, assigned a CVE, or fixed, so no release has had one to name. The forward policy is written down in [SECURITY.md](https://github.com/jonnyeclectic/boost/blob/main/SECURITY.md#vulnerability-fixes-in-release-notes): any release fixing a publicly known vulnerability will name it and its identifier in the release notes. Re-answer this as **Met** at the first such release. |
|
|
83
|
+
|
|
84
|
+
## Reporting
|
|
85
|
+
|
|
86
|
+
### Bug-reporting process
|
|
87
|
+
|
|
88
|
+
| Criterion | Cat. | Answer | Evidence |
|
|
89
|
+
|---|---|---|---|
|
|
90
|
+
| `report_process` | MUST | **Met** | <https://github.com/jonnyeclectic/boost/issues/new/choose> — issue templates for bug reports and feature requests; CONTRIBUTING points at the tracker. |
|
|
91
|
+
| `report_tracker` | SHOULD | **Met** | GitHub Issues, used as the sole tracker. |
|
|
92
|
+
| `report_responses` | MUST | **Met** | The maintainer triages issues as they arrive; the majority of the issue history is resolved rather than left open, and CI failures on `main` are opened automatically ([`ci-failure-issue.yml`](https://github.com/jonnyeclectic/boost/blob/main/.github/workflows/ci-failure-issue.yml)) and closed on the fix. |
|
|
93
|
+
| `enhancement_responses` | SHOULD | **Met** | Enhancement requests are answered and, where accepted, tracked as cards on the public [code roadmap](https://jonnyeclectic.github.io/boost/docs/roadmap.html). |
|
|
94
|
+
| `report_archive` | MUST | **Met** | <https://github.com/jonnyeclectic/boost/issues?q=is%3Aissue> — the full history, open and closed, publicly readable without an account. |
|
|
95
|
+
|
|
96
|
+
### Vulnerability report process
|
|
97
|
+
|
|
98
|
+
| Criterion | Cat. | Answer | Evidence |
|
|
99
|
+
|---|---|---|---|
|
|
100
|
+
| `vulnerability_report_process` | MUST | **Met** | <https://github.com/jonnyeclectic/boost/blob/main/SECURITY.md> — states the channel, the expected acknowledgement time, and what a useful report contains. |
|
|
101
|
+
| `vulnerability_report_private` | MUST | **Met** | GitHub private vulnerability reporting is **enabled** on the repository (`GET /repos/jonnyeclectic/boost/private-vulnerability-reporting` → `{"enabled": true}`). Reports go to <https://github.com/jonnyeclectic/boost/security/advisories/new>, never a public issue. |
|
|
102
|
+
| `vulnerability_report_response` | MUST | **N/A** | No vulnerability report has been received in the last six months — none has been received at all. SECURITY.md commits to an acknowledgement within a few days, well inside the criterion's 14-day bound. |
|
|
103
|
+
|
|
104
|
+
## Quality
|
|
105
|
+
|
|
106
|
+
### Working build system
|
|
107
|
+
|
|
108
|
+
| Criterion | Cat. | Answer | Evidence |
|
|
109
|
+
|---|---|---|---|
|
|
110
|
+
| `build` | MUST | **Met** | Standard PEP 517 build from `pyproject.toml` (`python -m build`), exercised end to end by the release workflow, which builds the wheel and smoke-tests it before publishing. `make venv` reproduces a development environment from the hash-pinned requirements. |
|
|
111
|
+
| `build_common_tools` | SUGGESTED | **Met** | setuptools + `build`, driven by `make` and [`noxfile.py`](https://github.com/jonnyeclectic/boost/blob/main/noxfile.py). |
|
|
112
|
+
| `build_floss_tools` | SHOULD | **Met** | Every build and gate tool is FLOSS and runs on FLOSS platforms; CI runs on Ubuntu and macOS. |
|
|
113
|
+
|
|
114
|
+
### Automated test suite
|
|
115
|
+
|
|
116
|
+
| Criterion | Cat. | Answer | Evidence |
|
|
117
|
+
|---|---|---|---|
|
|
118
|
+
| `test` | MUST | **Met** | Four tiers: `tests/unit`, `tests/functional` (drive the real CLI in-process), `tests/smoke.sh` (170 end-to-end checks through the `./boost` shim) and a Gherkin BDD suite (11 features, 47 scenarios). |
|
|
119
|
+
| `test_invocation` | SHOULD | **Met** | `make test` — or `nox`, which reproduces the exact CI gate in isolated venvs across every supported interpreter. |
|
|
120
|
+
| `test_most` | SUGGESTED | **Met** | An **80% line-coverage** gate (`fail_under = 80`), an **80% changed-line** gate on pull requests, and an **80% mutation** gate over `boost_cli/core` — the last of which means coverage cannot be satisfied by tests that merely execute the code without asserting on it. |
|
|
121
|
+
| `test_continuous_integration` | SUGGESTED | **Met** | GitHub Actions runs the full gate on every push and every pull request. |
|
|
122
|
+
|
|
123
|
+
### New functionality testing
|
|
124
|
+
|
|
125
|
+
| Criterion | Cat. | Answer | Evidence |
|
|
126
|
+
|---|---|---|---|
|
|
127
|
+
| `test_policy` | MUST | **Met** | CONTRIBUTING states it outright: "Behavior changes need tests" and "Anything under `boost_cli/core/` is mutation-tested; expect to add unit tests that actually kill your mutants." |
|
|
128
|
+
| `tests_are_added` | MUST | **Met** | The policy is mechanically enforced, not merely stated: the changed-line coverage gate fails a pull request whose new lines are under 80% covered, and the mutation gate fails one whose new `core/` logic is untested — an unexercised branch counts as an unkilled mutant. Both are required checks. |
|
|
129
|
+
| `tests_documented_added` | SUGGESTED | **Met** | Documented in CONTRIBUTING ("The gates") and re-stated in the pull-request template checklist. |
|
|
130
|
+
|
|
131
|
+
### Warning flags
|
|
132
|
+
|
|
133
|
+
| Criterion | Cat. | Answer | Evidence |
|
|
134
|
+
|---|---|---|---|
|
|
135
|
+
| `warnings` | MUST | **Met** | Python has no compiler warnings, so the criterion is met by linters: `ruff` (explicit rule set including the `S`/flake8-bandit, `B`/bugbear, `SIM`, `C4`, `PERF`, `RUF`, `UP` and `I` families), `mypy`, `pyright`, `vulture`, `xenon` and `refurb`. `pytest` additionally promotes `DeprecationWarning` raised inside `boost_cli` to an error. |
|
|
136
|
+
| `warnings_fixed` | MUST | **Met** | Not "mostly fixed" — **zero** findings are permitted. Each of those tools is a required check that fails the build on a single finding, so a warning cannot accumulate. `ruff`'s rule set is spelled out with `select`, not `extend-select`, so a tool upgrade can never silently switch families on or off. |
|
|
137
|
+
| `warnings_strict` | SUGGESTED | **Met** | The gates are already maximally strict — zero tolerance, plus a complexity ratchet (`xenon`) that fails on regression rather than on an absolute threshold. |
|
|
138
|
+
|
|
139
|
+
## Security
|
|
140
|
+
|
|
141
|
+
### Secure development knowledge
|
|
142
|
+
|
|
143
|
+
| Criterion | Cat. | Answer | Evidence |
|
|
144
|
+
|---|---|---|---|
|
|
145
|
+
| `know_secure_design` | MUST | **Met** | [`docs/security-design.md`](https://github.com/jonnyeclectic/boost/blob/main/docs/security-design.md) names boost's trust boundaries and works through Saltzer and Schroeder's eight principles — economy of mechanism, fail-safe defaults, complete mediation, open design, separation of privilege, least privilege, least common mechanism, psychological acceptability — as concrete claims about this codebase, each pointing at the code that implements it. |
|
|
146
|
+
| `know_common_errors` | MUST | **Met** | The same document carries a table of the CWE/OWASP error classes that actually apply to a Python CLI that clones repositories and writes files — path traversal, OS command injection, zip-slip, link following, untrusted deserialization, supply-chain and CI-action compromise, leaked credentials, insecure download, improper input validation — each paired with the specific mitigation in this repository. Classes that do not apply are omitted rather than padded. |
|
|
147
|
+
|
|
148
|
+
### Use basic good cryptographic practices
|
|
149
|
+
|
|
150
|
+
boost implements no cryptographic protocol, stores no secret, and generates no
|
|
151
|
+
key. It **verifies** minisign/Ed25519 signatures over tap content. See
|
|
152
|
+
[the cryptography section](https://github.com/jonnyeclectic/boost/blob/main/docs/security-design.md#cryptography-boost-uses)
|
|
153
|
+
of the security-design document for the full account.
|
|
154
|
+
|
|
155
|
+
| Criterion | Cat. | Answer | Evidence |
|
|
156
|
+
|---|---|---|---|
|
|
157
|
+
| `crypto_published` | MUST | **Met** | Ed25519 (RFC 8032), SHA-512 (FIPS 180-4), SHA-256 (FIPS 180-4) and BLAKE2b-512 (RFC 7693). All publicly published and expert-reviewed; no private or proprietary algorithm anywhere. |
|
|
158
|
+
| `crypto_call` | SHOULD | **Unmet — justified** | `boost_cli/core/ed25519.py` is a pure-standard-library implementation of Ed25519 rather than a call into `cryptography` or libsodium. It is a deliberate trade the stdlib-only runtime rule forces: CPython ships no Ed25519 primitive, so signature verification without a runtime dependency means implementing RFC 8032's verify half. The exposure is bounded — **verification only**, over public keys and public signatures, with no secret that a timing side channel could leak — and correctness is pinned to the published RFC 8032 §7.1 test vectors in the unit suite. Hashing is *not* reimplemented; it goes through `hashlib`. |
|
|
159
|
+
| `crypto_floss` | MUST | **Met** | Everything cryptographic is `hashlib` (Python standard library) plus boost's own GPL-3.0 code. No proprietary component, and every function is implementable with FLOSS. |
|
|
160
|
+
| `crypto_keylength` | MUST | **Met** | Ed25519 is a 255-bit curve — above the criterion's 224-bit elliptic-curve minimum — and the digests are 256- and 512-bit, above the 224-bit hash minimum. No shorter length is configurable, so there is nothing to disable. |
|
|
161
|
+
| `crypto_working` | MUST | **Met** | No MD4, MD5, SHA-1, single DES, RC4, Dual_EC_DRBG or ECB mode appears anywhere in the codebase; `ruff`'s `S` family fails the build on weak-hash use, so a regression is caught mechanically. |
|
|
162
|
+
| `crypto_weaknesses` | SHOULD | **Met** | Same evidence. Ed25519, SHA-2 and BLAKE2 have no known serious weakness. |
|
|
163
|
+
| `crypto_pfs` | SHOULD | **N/A** | boost implements no key-agreement protocol and no network cryptography. TLS is provided by `git` and by `pip`, not by boost. |
|
|
164
|
+
| `crypto_password_storage` | MUST | **N/A** | boost performs no inbound authentication of external users and stores no password. It is a local CLI with no accounts. |
|
|
165
|
+
| `crypto_random` | MUST | **N/A** | boost generates no cryptographic key and no nonce — signing is the publisher's job, boost only verifies. `random` is imported nowhere in `boost_cli/`, so there is no insecure generator to substitute. |
|
|
166
|
+
|
|
167
|
+
### Secured delivery against MITM attacks
|
|
168
|
+
|
|
169
|
+
| Criterion | Cat. | Answer | Evidence |
|
|
170
|
+
|---|---|---|---|
|
|
171
|
+
| `delivery_mitm` | MUST | **Met** | Distribution is PyPI over HTTPS (`pipx install boost-skill-cli`) and GitHub over HTTPS. Publishing uses [PyPI Trusted Publishing](https://github.com/jonnyeclectic/boost/blob/main/.github/workflows/publish.yml) — a short-lived OIDC identity minted for that one workflow, with no long-lived token stored anywhere — and each release carries a **SLSA build-provenance attestation** tying the artifact to the commit and workflow that produced it. Taps clone over HTTPS or SSH. |
|
|
172
|
+
| `delivery_unsigned` | MUST | **Met** | boost consumes no hash fetched over HTTP. The only hashes in the build are the sha256 values committed in `requirements/*.txt`, which `pip --require-hashes` enforces over an HTTPS connection; the tool downloads in CI are HTTPS with a pinned version. |
|
|
173
|
+
|
|
174
|
+
### Publicly known vulnerabilities fixed
|
|
175
|
+
|
|
176
|
+
| Criterion | Cat. | Answer | Evidence |
|
|
177
|
+
|---|---|---|---|
|
|
178
|
+
| `vulnerabilities_fixed_60_days` | MUST | **Met** | There are no unpatched vulnerabilities of medium or higher severity, publicly known or otherwise — none has been reported against boost. Dependency exposure is watched continuously by `osv-scanner`, `pip-audit` and Dependabot, all of which run in CI, and the runtime has no third-party dependency to inherit one from. |
|
|
179
|
+
| `vulnerabilities_critical_fixed` | SHOULD | **Met** | Same position, and the release cadence — one release per merge — means a fix reaches users within minutes of landing rather than waiting for a release train. |
|
|
180
|
+
|
|
181
|
+
### Other security issues
|
|
182
|
+
|
|
183
|
+
| Criterion | Cat. | Answer | Evidence |
|
|
184
|
+
|---|---|---|---|
|
|
185
|
+
| `no_leaked_credentials` | MUST | **Met** | `gitleaks` runs in CI on every push over the repository, and fails the build on a hit (the allowlist in `.gitleaks.toml` covers only boost's own synthetic secret-scanner test fixtures). Structurally there is little to leak in the first place: publishing uses a short-lived OIDC identity rather than a stored PyPI token, and the two optional dashboard secrets are absent by default with their jobs skipping themselves. Confirm GitHub's own secret scanning and push protection are enabled in **Settings → Code security** while registering — that setting is not readable without repository-admin credentials, so it is not asserted here. |
|
|
186
|
+
|
|
187
|
+
## Analysis
|
|
188
|
+
|
|
189
|
+
### Static code analysis
|
|
190
|
+
|
|
191
|
+
| Criterion | Cat. | Answer | Evidence |
|
|
192
|
+
|---|---|---|---|
|
|
193
|
+
| `static_analysis` | MUST | **Met** | Several tools, all required checks, all run before every release — which is *every* merge to `main`. [CodeQL](https://github.com/jonnyeclectic/boost/blob/main/.github/workflows/codeql.yml) does semantic analysis on push, on pull request and weekly; `ruff`'s `S` family is Python SAST (`shell=True`, `tempfile.mktemp`, unsafe YAML loading, weak hashing); `mypy` and `pyright` are two independent type checkers, the second adding None-flow and narrowing analysis over `core/`; `zizmor` audits the GitHub Actions workflows for excessive permissions and unpinned refs; `import-linter` enforces the architectural layering. SonarCloud is wired up as an optional non-blocking dashboard. |
|
|
194
|
+
| `static_analysis_common_vulnerabilities` | SUGGESTED | **Met** | CodeQL's Python security queries and `ruff`'s flake8-bandit family are both vulnerability-focused rather than generic-defect tools. `osv-scanner` and `pip-audit` cover known-vulnerable dependencies. |
|
|
195
|
+
| `static_analysis_fixed` | MUST | **Met** | Findings are fixed, or dismissed with a written proof of why they are false positives — never dismissed for convenience. The [Scorecard triage roadmap card](https://jonnyeclectic.github.io/boost/docs/roadmap.html#scorecard-findings-triage) records that discipline explicitly, including the rule that posture metrics must *not* be filed as false positives. One CodeQL alert is currently open and triaged as a false positive; see [Human actions](#human-actions). |
|
|
196
|
+
| `static_analysis_often` | SUGGESTED | **Met** | Every push and every pull request, plus a weekly scheduled CodeQL run to pick up new query releases against unchanged code. |
|
|
197
|
+
|
|
198
|
+
### Dynamic code analysis
|
|
199
|
+
|
|
200
|
+
| Criterion | Cat. | Answer | Evidence |
|
|
201
|
+
|---|---|---|---|
|
|
202
|
+
| `dynamic_analysis` | SUGGESTED | **Met** | [`fuzz.yml`](https://github.com/jonnyeclectic/boost/blob/main/.github/workflows/fuzz.yml) runs `atheris` (libFuzzer for Python) against the parsers over a target matrix, uploading any crashing input as an artifact. Beyond fuzzing, `tests/smoke.sh` drives the real binary end to end through 170 checks, and the functional suite executes the CLI against a throwaway `$HOME`. |
|
|
203
|
+
| `dynamic_analysis_unsafe` | SUGGESTED | **N/A** | Python is memory-safe; there is no buffer overflow or use-after-free class for a tool like ASan or Valgrind to find. The runtime has no C extension (the optional `[rag]` extra is not on the install path). |
|
|
204
|
+
| `dynamic_analysis_enable_assertions` | SUGGESTED | **Met** | The test suites are assertion-driven and run with assertions enabled (no `-O`), and `pytest` promotes `DeprecationWarning` raised inside `boost_cli` to a hard error, so a latent deprecation fails a run rather than scrolling past. |
|
|
205
|
+
| `dynamic_analysis_fixed` | MUST | **Met** | No medium-or-higher exploitable vulnerability has been found by dynamic analysis. A crashing input found by the fuzzer is uploaded as a workflow artifact and fixed; none is outstanding. |
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Human actions
|
|
210
|
+
|
|
211
|
+
Everything above is repository-side and done. These four steps need an account
|
|
212
|
+
or a repository setting, so they cannot be landed as a commit.
|
|
213
|
+
|
|
214
|
+
1. **Register the project** at <https://www.bestpractices.dev/en/projects/new>
|
|
215
|
+
with the repository URL, signing in with the GitHub account that owns it.
|
|
216
|
+
Transcribe the answers above — the criterion identifiers on the form match
|
|
217
|
+
the identifiers in these tables one-for-one.
|
|
218
|
+
2. **Add the badge to the README** once the project has an id. The Scorecard
|
|
219
|
+
`CIIBestPracticesID` check reads the same registration, so this also closes
|
|
220
|
+
that Scorecard finding:
|
|
221
|
+
|
|
222
|
+
```markdown
|
|
223
|
+
[](https://www.bestpractices.dev/projects/<ID>)
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Do not add it before registering — an unknown id renders a broken badge.
|
|
227
|
+
3. **Set the repository `homepage` field** to
|
|
228
|
+
`https://jonnyeclectic.github.io/boost/`. It is currently empty, which
|
|
229
|
+
weakens the `description_good` and `interact` evidence for anyone reading the
|
|
230
|
+
repository rather than the README.
|
|
231
|
+
4. **Close out CodeQL alert 54** ("clear-text logging of sensitive
|
|
232
|
+
information", `cmd_trust` in `boost_cli/commands/quality.py`) and its
|
|
233
|
+
Copilot-Autofix issue [#562](https://github.com/jonnyeclectic/boost/issues/562).
|
|
234
|
+
Dismiss it as a false positive, with this as the recorded reason: the values
|
|
235
|
+
printed are a minisign **public** key's name and fingerprint. A public key
|
|
236
|
+
fingerprint is meant to be published, and printing it is the entire point of
|
|
237
|
+
the line — the user compares it by eye against the publisher's advertised
|
|
238
|
+
fingerprint before trusting the key. Applying the suggested "fix" of printing
|
|
239
|
+
a constant string would remove the only verification the command offers and
|
|
240
|
+
make boost *less* secure, so it must not be merged.
|
|
241
|
+
|
|
242
|
+
## Keeping this document honest
|
|
243
|
+
|
|
244
|
+
Re-check it when any of these change, since each one moves an answer:
|
|
245
|
+
|
|
246
|
+
- a vulnerability is reported or fixed → `release_notes_vulns`,
|
|
247
|
+
`vulnerability_report_response`, `vulnerabilities_fixed_60_days`
|
|
248
|
+
- a runtime dependency is added → `crypto_call`, `crypto_floss`,
|
|
249
|
+
`dynamic_analysis_unsafe`
|
|
250
|
+
- a gate is removed or a threshold lowered → the Quality and Analysis sections
|
|
251
|
+
- the licence changes → `floss_license`, `floss_license_osi`, `crypto_floss`
|
|
252
|
+
|
|
253
|
+
The badge site re-asks for confirmation periodically; treat that prompt as the
|
|
254
|
+
cue to re-read this file rather than to click through.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: openssf-best-practices-badge
|
|
3
|
+
board: code
|
|
4
|
+
section: health
|
|
5
|
+
status: shipped
|
|
6
|
+
category: Security · Posture
|
|
7
|
+
complexity: M
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 3
|
|
10
|
+
note: 66 Met/N-A · 1 justified Unmet · registration is the only step left
|
|
11
|
+
order: 4
|
|
12
|
+
owner: loop/openssf-best-practices-badge
|
|
13
|
+
pr:
|
|
14
|
+
title: OpenSSF Best Practices — all 67 passing criteria answered
|
|
15
|
+
---
|
|
16
|
+
The <a href="roadmap.html#scorecard-findings-triage">Scorecard triage</a> left
|
|
17
|
+
<code>CIIBestPracticesID</code> as the one finding that "needs a human, not a commit". That
|
|
18
|
+
was half right. Registration needs a human; <b>answering the criteria</b> was a commit, and
|
|
19
|
+
until it was made, "the prerequisites are already in place" was an assumption nobody had
|
|
20
|
+
tested against the actual criteria text.
|
|
21
|
+
<b>Tested it.</b> All 67 passing-level criteria, parsed from the badge project's own
|
|
22
|
+
<code>criteria.yml</code> rather than a summary of it, are answered in
|
|
23
|
+
<code>docs/openssf-badge.md</code> — each with the artifact that backs it. Two were genuine
|
|
24
|
+
gaps, not paperwork:
|
|
25
|
+
<b><code>know_secure_design</code> and <code>know_common_errors</code></b> are MUST criteria
|
|
26
|
+
that no gate in this repo could satisfy, because they ask for a written threat model.
|
|
27
|
+
<code>docs/security-design.md</code> is that document: boost's trust boundaries (a tap author
|
|
28
|
+
is an attacker for modelling purposes), Saltzer and Schroeder's eight principles as concrete
|
|
29
|
+
claims about this code, the CWE classes that actually apply to a Python CLI that clones
|
|
30
|
+
repositories and writes files — each with its mitigation — and the residual limits stated
|
|
31
|
+
plainly, including that boost cannot vet what a skill tells an agent to do.
|
|
32
|
+
<b><code>crypto_call</code> is answered Unmet, with justification</b>, and that is the honest
|
|
33
|
+
answer rather than a defect. <code>core/ed25519.py</code> reimplements RFC 8032 verification
|
|
34
|
+
in pure Python because the stdlib-only runtime rule leaves no alternative — CPython ships no
|
|
35
|
+
Ed25519. The exposure is bounded (verify-only, public keys, public signatures, no secret to
|
|
36
|
+
leak through timing) and pinned to the RFC's own test vectors. A SHOULD may be Unmet with a
|
|
37
|
+
justification; stretching it to "Met" would have been the lie.
|
|
38
|
+
The audit also surfaced three settings a branch cannot change — the empty repository
|
|
39
|
+
<code>homepage</code> field, the registration itself, and CodeQL alert 54, which is a false
|
|
40
|
+
positive whose suggested autofix would print a constant instead of a minisign <b>public</b>
|
|
41
|
+
key fingerprint, deleting the only verification <code>boost trust add</code> offers. All
|
|
42
|
+
three are listed as human actions at the end of the badge document.
|
{boost_skill_cli-1.2.26 → boost_skill_cli-1.2.27}/docs/roadmap/items/scorecard-findings-triage.md
RENAMED
|
@@ -69,6 +69,8 @@ to do but not dismiss it.
|
|
|
69
69
|
<b>Needs a human, not a commit</b> — <code>CIIBestPracticesID</code> #36 is the one
|
|
70
70
|
remaining actionable finding, and it cannot be fixed from a branch: it asks whether the
|
|
71
71
|
project is registered for an OpenSSF Best Practices badge, which means creating a project
|
|
72
|
-
entry at <code>bestpractices.dev</code> under a real account and answering its criteria.
|
|
73
|
-
|
|
74
|
-
|
|
72
|
+
entry at <code>bestpractices.dev</code> under a real account and answering its criteria.
|
|
73
|
+
<i>Answering</i> them turned out to be a commit after all — see
|
|
74
|
+
<a href="roadmap.html#openssf-best-practices-badge">all 67 passing criteria answered</a>,
|
|
75
|
+
which found two MUST criteria this card had assumed were covered. Only the registration
|
|
76
|
+
itself still needs a human.
|