boost-skill-cli 1.2.27__tar.gz → 1.2.28__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.27 → boost_skill_cli-1.2.28}/.vale/styles/config/vocabularies/boost/accept.txt +10 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/.vale.ini +7 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/CONTRIBUTING.md +30 -0
- boost_skill_cli-1.2.28/DCO +34 -0
- boost_skill_cli-1.2.28/MAINTAINERS.md +102 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/PKG-INFO +1 -1
- boost_skill_cli-1.2.28/SECURITY.md +86 -0
- boost_skill_cli-1.2.28/SUPPORT.md +78 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/commands/quality.py +13 -2
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_skill_cli.egg-info/PKG-INFO +1 -1
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_skill_cli.egg-info/SOURCES.txt +9 -0
- boost_skill_cli-1.2.28/docs/commit-audit.md +129 -0
- boost_skill_cli-1.2.28/docs/dependencies.md +119 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/openssf-badge.md +19 -10
- boost_skill_cli-1.2.28/docs/roadmap/items/osps-baseline-levels.md +53 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap.html +50 -1
- boost_skill_cli-1.2.28/docs/verifying-releases.md +101 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/pyproject.toml +3 -1
- boost_skill_cli-1.2.28/scripts/check_dco.py +112 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/functional/test_tap_signing.py +18 -0
- boost_skill_cli-1.2.28/tests/unit/test_check_dco.py +179 -0
- boost_skill_cli-1.2.27/SECURITY.md +0 -48
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/.gitattributes +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/.gitignore +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/.lycheeignore +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/.vale/styles/boost/AIWriting.yml +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/CLAUDE.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/LICENSE +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/MANIFEST.in +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/Makefile +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/README.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/bmad.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/bootstrap.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/browse.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/builtin.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/catalogbundle.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/complete.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/data/rules/boost-first.mdc +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_langchain/__init__.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_langchain/_compat.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_langchain/graph.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_langchain/loader.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_langchain/py.typed +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_langchain/retriever.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/codecov.yml +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/adapters.html +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/carousel.html +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/chat.html +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/commands.html +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/demo.gif +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/demo.html +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/demo.tape +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/eval-latest.json +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/eval.html +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/index.html +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/langchain.html +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/boost-first-rule.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/install-path-disambiguation.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/zip-strict-audit.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/security-design.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/evals/README.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/evals/__init__.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/evals/baseline.json +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/evals/metrics.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/evals/publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/examples/README.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/index.html +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/noxfile.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/build_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/eval_corpus.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/measure_registry.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/page_budget.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/publish_eval_json.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/scripts/serve_docs.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/setup.cfg +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/sonar-project.properties +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/style/README.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/style/boost.css +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/style/boost.js +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/style/demo.html +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/conftest.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/eval/taps-scale.txt +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/functional/test_cli_catalog.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/functional/test_cli_pane_width.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/functional/test_kind_conformance.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/langchain/conftest.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/langchain/test_graph.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/langchain/test_loader.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/langchain/test_retriever.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_action_pin_lockstep.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_bmad_core.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_boost_first_offer.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_bootstrap.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_browse.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_builtin.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_catalogbundle.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_clean_internal_cache.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_compact.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_complete.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_complete_rc_block.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_content_identity.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_crash_redaction.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_dense_embed_dedupe.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_dense_quantized.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_dense_ready_order.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_dense_shard_real_schema.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_dense_status_cheap.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_embed_truncated_response.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_eval_corpus.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_eval_grading.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_gemini_agent_sanitize.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_gitutil_lfs.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_gitutil_sparse.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_install_permission_error.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_langchain_packaging.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_link_ownership.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_measure_registry.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_page_budget.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_rag_fastpath.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_registry_control_chars.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_rerank_cache.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_serve_docs.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_shards_matrix.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_smoke_covers_every_command.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_store_materialize.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_sync_blocked_links.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_visual_harness_flags.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_workflow_concurrency_groups.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_workflow_push_has_credentials.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/visual/package-lock.json +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/tests/visual/visual_check.mjs +0 -0
{boost_skill_cli-1.2.27 → boost_skill_cli-1.2.28}/.vale/styles/config/vocabularies/boost/accept.txt
RENAMED
|
@@ -7,6 +7,12 @@ argparse
|
|
|
7
7
|
Arize
|
|
8
8
|
ASan
|
|
9
9
|
Attio
|
|
10
|
+
Autofix
|
|
11
|
+
autofix
|
|
12
|
+
Backfilling
|
|
13
|
+
backfilling
|
|
14
|
+
backport
|
|
15
|
+
backported
|
|
10
16
|
backtick
|
|
11
17
|
backticks
|
|
12
18
|
Bagisto
|
|
@@ -72,6 +78,7 @@ mcp
|
|
|
72
78
|
mergeable
|
|
73
79
|
minisign
|
|
74
80
|
misconfiguration
|
|
81
|
+
mitigations
|
|
75
82
|
MLflow
|
|
76
83
|
mutmut
|
|
77
84
|
mypy
|
|
@@ -112,8 +119,10 @@ Saltzer
|
|
|
112
119
|
sandboxed
|
|
113
120
|
sandboxing
|
|
114
121
|
scrollbar
|
|
122
|
+
sdist
|
|
115
123
|
SEO
|
|
116
124
|
setuptools
|
|
125
|
+
SHAs
|
|
117
126
|
Shopify
|
|
118
127
|
Sigstore
|
|
119
128
|
SonarCloud
|
|
@@ -144,6 +153,7 @@ unkilled
|
|
|
144
153
|
unlinking
|
|
145
154
|
unpatched
|
|
146
155
|
unregister
|
|
156
|
+
unremediated
|
|
147
157
|
unstaged
|
|
148
158
|
untap
|
|
149
159
|
untrusted
|
|
@@ -20,5 +20,12 @@ Vale.Terms = NO
|
|
|
20
20
|
[docs/roadmap/items/*.md]
|
|
21
21
|
BasedOnStyles =
|
|
22
22
|
|
|
23
|
+
; docs/commit-audit.md is a generated record: a table of short SHAs, file paths
|
|
24
|
+
; and tool identifiers produced by an audit pass, not authored prose. Spelling
|
|
25
|
+
; it would mean adding ~27 one-off identifiers to the shared vocabulary, which
|
|
26
|
+
; would weaken the check everywhere else to lint one machine-written file.
|
|
27
|
+
[docs/commit-audit.md]
|
|
28
|
+
BasedOnStyles =
|
|
29
|
+
|
|
23
30
|
[.claude/**/*.md]
|
|
24
31
|
BasedOnStyles =
|
|
@@ -98,6 +98,36 @@ list, and neither should be added to it.
|
|
|
98
98
|
| `refurb boost_cli` | modernization smells the ruff families miss, zero findings |
|
|
99
99
|
| `scripts/lock_toolchain.py --check` | the hash-pinned toolchain matches its `.in` declarations |
|
|
100
100
|
|
|
101
|
+
## Sign your commits (DCO)
|
|
102
|
+
|
|
103
|
+
Every commit needs a `Signed-off-by` trailer naming **you**, the author. It is
|
|
104
|
+
your assertion, under the [Developer Certificate of Origin](DCO), that you have
|
|
105
|
+
the right to submit the work. Git writes it for you:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
git commit -s # sign off as you go
|
|
109
|
+
git commit --amend --signoff --no-edit # fix the last commit
|
|
110
|
+
git rebase --signoff origin/main # fix a whole branch
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
`scripts/check_dco.py` enforces it as a required check, and you can run the
|
|
114
|
+
exact same check locally:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
python3 scripts/check_dco.py # HEAD against origin/main
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Two things it deliberately will not accept. The trailer must name the **author** of
|
|
121
|
+
the commit it sits on — a sign-off from anyone else certifies nothing, so it is
|
|
122
|
+
rejected rather than counted. And the check only ever looks at the commits your
|
|
123
|
+
pull request adds: DCO applies from the commit that introduced it, and history
|
|
124
|
+
before that is left alone. Backfilling sign-offs would mean rewriting `main`,
|
|
125
|
+
breaking 478 tags and invalidating the build-provenance attestation on every
|
|
126
|
+
published release, to record an assertion nobody actually made.
|
|
127
|
+
|
|
128
|
+
Bot authors (Dependabot and friends) are exempt — an account cannot agree to a
|
|
129
|
+
certificate.
|
|
130
|
+
|
|
101
131
|
## Code of conduct
|
|
102
132
|
|
|
103
133
|
Participation is governed by the [Code of Conduct](CODE_OF_CONDUCT.md)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
Developer Certificate of Origin
|
|
2
|
+
Version 1.1
|
|
3
|
+
|
|
4
|
+
Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
|
|
5
|
+
|
|
6
|
+
Everyone is permitted to copy and distribute verbatim copies of this
|
|
7
|
+
license document, but changing it is not allowed.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
Developer's Certificate of Origin 1.1
|
|
11
|
+
|
|
12
|
+
By making a contribution to this project, I certify that:
|
|
13
|
+
|
|
14
|
+
(a) The contribution was created in whole or in part by me and I
|
|
15
|
+
have the right to submit it under the open source license
|
|
16
|
+
indicated in the file; or
|
|
17
|
+
|
|
18
|
+
(b) The contribution is based upon previous work that, to the best
|
|
19
|
+
of my knowledge, is covered under an appropriate open source
|
|
20
|
+
license and I have the right under that license to submit that
|
|
21
|
+
work with modifications, whether created in whole or in part
|
|
22
|
+
by me, under the same open source license (unless I am
|
|
23
|
+
permitted to submit under a different license), as indicated
|
|
24
|
+
in the file; or
|
|
25
|
+
|
|
26
|
+
(c) The contribution was provided directly to me by some other
|
|
27
|
+
person who certified (a), (b) or (c) and I have not modified
|
|
28
|
+
it.
|
|
29
|
+
|
|
30
|
+
(d) I understand and agree that this project and the contribution
|
|
31
|
+
are public and that a record of the contribution (including all
|
|
32
|
+
personal information I submit with it, including my sign-off) is
|
|
33
|
+
maintained indefinitely and may be redistributed consistent with
|
|
34
|
+
this project or the open source license(s) involved.
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Maintainers
|
|
2
|
+
|
|
3
|
+
Who has access to what, what each role is expected to do, and what has to
|
|
4
|
+
happen before anyone is granted more. This file is the authoritative list; if it
|
|
5
|
+
disagrees with someone's memory, this file is right and the memory is stale.
|
|
6
|
+
|
|
7
|
+
## Current maintainers
|
|
8
|
+
|
|
9
|
+
| Name | GitHub | Role | Since |
|
|
10
|
+
|---|---|---|---|
|
|
11
|
+
| Jonathan Reyes | [@jonnyeclectic](https://github.com/jonnyeclectic) | Lead maintainer | 2026-07 |
|
|
12
|
+
|
|
13
|
+
boost is a **single-maintainer project today**. That is stated plainly rather
|
|
14
|
+
than glossed, because it is the single largest risk to the project and it
|
|
15
|
+
changes what you should expect: review latency depends on one person, and the
|
|
16
|
+
bus factor is one. See [Continuity](#continuity) for what happens if that
|
|
17
|
+
person becomes unavailable, and [Becoming a maintainer](#becoming-a-maintainer)
|
|
18
|
+
for how that changes.
|
|
19
|
+
|
|
20
|
+
## Access to sensitive resources
|
|
21
|
+
|
|
22
|
+
Every credential and privileged surface the project depends on, and who holds
|
|
23
|
+
it. Nothing not listed here grants access to anything.
|
|
24
|
+
|
|
25
|
+
| Resource | Who has access | How access works |
|
|
26
|
+
|---|---|---|
|
|
27
|
+
| GitHub repository (admin) | Lead maintainer | GitHub account with 2FA |
|
|
28
|
+
| `main` branch | **No one directly.** | A ruleset requires a pull request and the full required-check gate; `non_fast_forward` blocks history rewrites. Admin included. |
|
|
29
|
+
| PyPI project `boost-skill-cli` | **No stored credential exists.** | Publishing is a [PyPI Trusted Publisher](https://docs.pypi.org/trusted-publishers/): GitHub mints a short-lived OIDC token for `publish.yml` on `main` only. There is no API token to leak, share, or rotate. |
|
|
30
|
+
| GitHub Actions secrets | Lead maintainer | Only optional dashboard tokens (`CODECOV_TOKEN`, `SONAR_TOKEN`) and optional evaluation API keys. Every job reading one skips itself when it is absent, so none is required to build, test, or release. |
|
|
31
|
+
| Security advisories / private vulnerability reports | Lead maintainer | GitHub private vulnerability reporting |
|
|
32
|
+
| GitHub Pages docs site | Lead maintainer | Published from `main` by CI; no separate credential |
|
|
33
|
+
|
|
34
|
+
## Roles and responsibilities
|
|
35
|
+
|
|
36
|
+
**Lead maintainer.** Sets direction; reviews and merges pull requests; owns the
|
|
37
|
+
release process; is the recipient of private vulnerability reports and owns the
|
|
38
|
+
response; administers repository settings, branch rulesets and the required-check
|
|
39
|
+
list; maintains this file.
|
|
40
|
+
|
|
41
|
+
**Maintainer** (none appointed yet). Reviews and merges pull requests within an
|
|
42
|
+
agreed area; may not change repository settings, rulesets, or the release path.
|
|
43
|
+
A maintainer is expected to keep the quality gates green rather than route
|
|
44
|
+
around them, and to say so publicly when a gate is wrong instead of disabling it
|
|
45
|
+
quietly.
|
|
46
|
+
|
|
47
|
+
**Contributor.** Anyone who opens a pull request. No standing permissions; a
|
|
48
|
+
contribution is merged by a maintainer after the gates pass. See
|
|
49
|
+
[CONTRIBUTING.md](CONTRIBUTING.md).
|
|
50
|
+
|
|
51
|
+
**Security reporter.** Anyone who reports a vulnerability through the process in
|
|
52
|
+
[SECURITY.md](SECURITY.md). Reporters are credited by name in the advisory and
|
|
53
|
+
the release notes unless they ask not to be.
|
|
54
|
+
|
|
55
|
+
## Becoming a maintainer
|
|
56
|
+
|
|
57
|
+
Escalated permission is granted deliberately and never by default. The policy:
|
|
58
|
+
|
|
59
|
+
1. **A track record first.** A sustained series of merged, non-trivial
|
|
60
|
+
contributions — enough that their judgement on this codebase is a known
|
|
61
|
+
quantity, not an assumption.
|
|
62
|
+
2. **Review before the grant.** The lead maintainer reviews that history and
|
|
63
|
+
proposes the change in a public issue, naming the scope of access being
|
|
64
|
+
granted and why. Existing maintainers may object there.
|
|
65
|
+
3. **Least privilege at the grant.** New collaborators receive the lowest
|
|
66
|
+
permission that lets them do the job. Write access is a separate, later
|
|
67
|
+
decision from repository administration, which is a separate decision again
|
|
68
|
+
from anything touching the release path.
|
|
69
|
+
4. **This file is updated in the same change** that grants the permission. An
|
|
70
|
+
access grant that is not recorded here has not happened.
|
|
71
|
+
|
|
72
|
+
The same review applies when an existing maintainer is given more access, not
|
|
73
|
+
only to a first grant.
|
|
74
|
+
|
|
75
|
+
## Removing access
|
|
76
|
+
|
|
77
|
+
Access is removed promptly when a maintainer steps down, becomes unreachable for
|
|
78
|
+
an extended period, or at their own request — and immediately if an account is
|
|
79
|
+
believed compromised. Removal does not require agreement from the person losing
|
|
80
|
+
access. Because publishing uses a short-lived OIDC identity rather than a stored
|
|
81
|
+
token, removing someone's GitHub access removes their ability to release; there
|
|
82
|
+
is no separate credential left behind to revoke.
|
|
83
|
+
|
|
84
|
+
## Continuity
|
|
85
|
+
|
|
86
|
+
If the lead maintainer becomes unavailable:
|
|
87
|
+
|
|
88
|
+
- **The code is safe regardless.** It is GPL-3.0, the full history is public,
|
|
89
|
+
and every release is reproducible from a public tag. Anyone may fork.
|
|
90
|
+
- **The published artifacts stay published.** PyPI releases and GitHub releases
|
|
91
|
+
remain available; nothing expires if no one logs in.
|
|
92
|
+
- **Recovery of the canonical repository** would go through
|
|
93
|
+
[GitHub's account-recovery and inactive-repository processes](https://docs.github.com/en/site-policy).
|
|
94
|
+
Because the release path is a GitHub OIDC identity bound to this repository,
|
|
95
|
+
whoever legitimately controls the repository controls releases — there is no
|
|
96
|
+
personal token that has to be handed over.
|
|
97
|
+
- **The practical answer is to fork.** Until a second maintainer exists, that
|
|
98
|
+
is the honest continuity plan, and the project would rather say so than
|
|
99
|
+
imply a succession process it does not have.
|
|
100
|
+
|
|
101
|
+
Reducing this risk is open work: if you have been contributing and want to help
|
|
102
|
+
carry it, say so in an issue.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Security policy
|
|
2
|
+
|
|
3
|
+
## Supported versions
|
|
4
|
+
|
|
5
|
+
Only the latest release receives security fixes. [SUPPORT.md](SUPPORT.md) sets
|
|
6
|
+
out the scope and duration of support in full, including when a version stops
|
|
7
|
+
receiving security updates.
|
|
8
|
+
|
|
9
|
+
## Reporting a vulnerability
|
|
10
|
+
|
|
11
|
+
Please **do not** open a public issue for security reports. Instead, use
|
|
12
|
+
GitHub's private vulnerability reporting:
|
|
13
|
+
|
|
14
|
+
**[Report a vulnerability](https://github.com/jonnyeclectic/boost/security/advisories/new)**
|
|
15
|
+
|
|
16
|
+
You can expect an acknowledgement within a few days. Please include steps to
|
|
17
|
+
reproduce and the affected command(s).
|
|
18
|
+
|
|
19
|
+
## Vulnerability fixes in release notes
|
|
20
|
+
|
|
21
|
+
Every merge to `main` cuts a release, so a fix reaches users within minutes of
|
|
22
|
+
landing. When a release fixes a publicly known vulnerability in boost itself —
|
|
23
|
+
one that already had a CVE or an equivalent identifier when the release was
|
|
24
|
+
cut — the [release notes](https://github.com/jonnyeclectic/boost/releases) will
|
|
25
|
+
name it and its identifier, so you can tell an upgrade that matters from one
|
|
26
|
+
that does not. No such vulnerability has been reported to date.
|
|
27
|
+
|
|
28
|
+
Vulnerabilities in boost's *dependencies* are handled separately: the runtime
|
|
29
|
+
has none, and the development toolchain is watched by `osv-scanner`, `pip-audit`
|
|
30
|
+
and Dependabot.
|
|
31
|
+
|
|
32
|
+
## Scope notes
|
|
33
|
+
|
|
34
|
+
boost executes `git` against registry URLs you tap and symlinks skills into
|
|
35
|
+
agent directories. Reports about tap-supplied content escaping the store,
|
|
36
|
+
path traversal via `SKILL.md` frontmatter, or command injection through
|
|
37
|
+
skill/tap names are especially valuable.
|
|
38
|
+
|
|
39
|
+
## Secrets and credentials
|
|
40
|
+
|
|
41
|
+
The policy in one line: **boost stores no credential it could leak.**
|
|
42
|
+
|
|
43
|
+
- **Releases use no stored token.** Publishing goes through PyPI Trusted
|
|
44
|
+
Publishing — GitHub mints a short-lived OIDC identity for `publish.yml` at the
|
|
45
|
+
moment of upload. There is no PyPI API token in a secret, on a laptop, or in a
|
|
46
|
+
password manager, so there is nothing to rotate and nothing to steal.
|
|
47
|
+
- **Every secret that does exist is optional.** Only `CODECOV_TOKEN`,
|
|
48
|
+
`SONAR_TOKEN` and the optional evaluation API keys are configured, all as
|
|
49
|
+
GitHub Actions repository secrets. Every job reading one skips itself when it
|
|
50
|
+
is absent, so none is required to build, test or release.
|
|
51
|
+
- **Secrets never reach untrusted code.** No workflow uses
|
|
52
|
+
`pull_request_target`, so a fork's pull request runs with a read-only token
|
|
53
|
+
and no secret access. Secrets are bound at job level, never interpolated into
|
|
54
|
+
a `run:` block, and `zizmor` fails a pull request that breaks either rule.
|
|
55
|
+
- **Access follows the maintainer list.** Who holds what is recorded in
|
|
56
|
+
[MAINTAINERS.md](MAINTAINERS.md), which also states the policy that escalated
|
|
57
|
+
permissions are reviewed before they are granted. Access is removed promptly
|
|
58
|
+
when someone steps down and immediately if an account is believed compromised.
|
|
59
|
+
- **Rotation.** An optional dashboard token is rotated on suspicion of exposure
|
|
60
|
+
or when the holder's access is removed — revoked at the issuing service, then
|
|
61
|
+
replaced or deleted in repository settings. Because none is required, deleting
|
|
62
|
+
one is always a safe first move.
|
|
63
|
+
- **Committed secrets are caught.** `gitleaks` runs in CI on every push and
|
|
64
|
+
fails the build on a hit; the allowlist covers only boost's own synthetic
|
|
65
|
+
scanner test fixtures.
|
|
66
|
+
|
|
67
|
+
If you believe a boost credential has been exposed, report it through the
|
|
68
|
+
private channel above rather than opening an issue.
|
|
69
|
+
|
|
70
|
+
## How boost is designed to resist this
|
|
71
|
+
|
|
72
|
+
[`docs/security-design.md`](docs/security-design.md) is the threat model: what
|
|
73
|
+
boost trusts and what it does not, the design principles the code is held to,
|
|
74
|
+
and the table of error classes — path traversal, command injection, zip-slip,
|
|
75
|
+
untrusted deserialization, supply-chain compromise — each paired with the
|
|
76
|
+
mitigation that counters it. It also states the known limits plainly, including
|
|
77
|
+
the one that matters most: boost gives you a skill's provenance, integrity and
|
|
78
|
+
diff, but judging what the skill *tells your agent to do* is yours.
|
|
79
|
+
|
|
80
|
+
For how boost's badge-level security posture is assessed, see
|
|
81
|
+
[`docs/openssf-badge.md`](docs/openssf-badge.md). Two companion documents cover
|
|
82
|
+
the supply chain either side of a release:
|
|
83
|
+
[`docs/dependencies.md`](docs/dependencies.md) — how dependencies are chosen,
|
|
84
|
+
pinned by hash, tracked, and at what threshold a finding blocks a merge — and
|
|
85
|
+
[`docs/verifying-releases.md`](docs/verifying-releases.md) — how to verify for
|
|
86
|
+
yourself that an artifact you installed was built by this repository.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Support
|
|
2
|
+
|
|
3
|
+
What boost supports, for how long, and where to ask.
|
|
4
|
+
|
|
5
|
+
## Where to ask
|
|
6
|
+
|
|
7
|
+
| You want to | Go here |
|
|
8
|
+
|---|---|
|
|
9
|
+
| Report a bug | [Open an issue](https://github.com/jonnyeclectic/boost/issues/new/choose) |
|
|
10
|
+
| Request a feature | [Open an issue](https://github.com/jonnyeclectic/boost/issues/new/choose) |
|
|
11
|
+
| Report a vulnerability | **Not an issue** — [SECURITY.md](SECURITY.md) |
|
|
12
|
+
| Diagnose a broken install | [`docs/DEBUGGING.md`](docs/DEBUGGING.md), then `boost doctor` |
|
|
13
|
+
| Contribute a change | [CONTRIBUTING.md](CONTRIBUTING.md) |
|
|
14
|
+
|
|
15
|
+
`boost doctor` is the first thing to run for anything that looks like a
|
|
16
|
+
misconfiguration. It names the single next action for each problem it finds
|
|
17
|
+
rather than printing a menu, and its output is the most useful thing to paste
|
|
18
|
+
into an issue.
|
|
19
|
+
|
|
20
|
+
## What is supported
|
|
21
|
+
|
|
22
|
+
**Only the latest release.** boost releases on every merge to `main`, so the
|
|
23
|
+
latest version is usually minutes old and the gap between "what you have" and
|
|
24
|
+
"what is fixed" is small by design. Bug fixes and security fixes go into the
|
|
25
|
+
next release; there are no backport branches and no long-term-support line.
|
|
26
|
+
|
|
27
|
+
If you are on an older version, the supported answer is to upgrade:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
pipx upgrade boost-skill-cli # or: pip install -U boost-skill-cli
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Supported environments** — these are what CI runs on every pull request, so a
|
|
34
|
+
regression on any of them fails the build:
|
|
35
|
+
|
|
36
|
+
| | Supported |
|
|
37
|
+
|---|---|
|
|
38
|
+
| Python | 3.12, 3.13, 3.14 (and a non-blocking 3.14 free-threaded canary) |
|
|
39
|
+
| Operating system | Linux, macOS, Windows |
|
|
40
|
+
| Required external tools | `git` |
|
|
41
|
+
|
|
42
|
+
Python 3.11 and earlier are **not** supported: the project's floor is
|
|
43
|
+
`requires-python = ">=3.12"`.
|
|
44
|
+
|
|
45
|
+
## When a version stops receiving security updates
|
|
46
|
+
|
|
47
|
+
**The moment a newer release exists.** A version other than the latest receives
|
|
48
|
+
no security updates, and none will be backported to it.
|
|
49
|
+
|
|
50
|
+
This is stated as a policy rather than left implicit because the alternative
|
|
51
|
+
would be misleading. With a release cut on every merge, maintaining a supported
|
|
52
|
+
older line would mean supporting hundreds of versions; the project does not do
|
|
53
|
+
that and will not pretend to. In exchange, the upgrade path is deliberately
|
|
54
|
+
cheap — a single `pipx upgrade`, a stdlib-only runtime with no dependency
|
|
55
|
+
resolution to go wrong, and no configuration migration between patch releases.
|
|
56
|
+
|
|
57
|
+
If a release fixes a publicly known vulnerability, the release notes name it and
|
|
58
|
+
its identifier — see
|
|
59
|
+
[SECURITY.md](SECURITY.md#vulnerability-fixes-in-release-notes).
|
|
60
|
+
|
|
61
|
+
## What is not supported
|
|
62
|
+
|
|
63
|
+
- **The content of third-party skills, rules and workflows.** boost gives you a
|
|
64
|
+
skill's provenance, its integrity digest and a diff. Judging what a skill
|
|
65
|
+
tells your agent to do is yours; see the limits section of
|
|
66
|
+
[`docs/security-design.md`](docs/security-design.md).
|
|
67
|
+
- **`boost serve`** as a hardened server. It is a local development
|
|
68
|
+
convenience for a trusted network.
|
|
69
|
+
- **Optional extras** (`[rag]`, `[eval]`, `[bdd]`, `[langchain]`) carry
|
|
70
|
+
third-party dependencies and their own compatibility constraints. The default
|
|
71
|
+
install is stdlib-only and is what the support statement above covers.
|
|
72
|
+
|
|
73
|
+
## Response expectations
|
|
74
|
+
|
|
75
|
+
This is a single-maintainer project ([MAINTAINERS.md](MAINTAINERS.md)), so
|
|
76
|
+
response times depend on one person's availability. Vulnerability reports are
|
|
77
|
+
acknowledged within a few days and are the highest priority; ordinary issues are
|
|
78
|
+
triaged as they arrive but carry no service-level guarantee.
|
|
@@ -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.28'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 2, 28)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -1187,9 +1187,20 @@ 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
|
-
provenance.add_trusted_key(args.name, key_text)
|
|
1190
|
+
rec = provenance.add_trusted_key(args.name, key_text)
|
|
1191
1191
|
journal.log("trust", args.name, op="add-key")
|
|
1192
|
-
|
|
1192
|
+
# The fingerprint is the point of this line, not incidental detail: it
|
|
1193
|
+
# is how the user checks by eye that the key they just trusted is the
|
|
1194
|
+
# one the publisher advertises. CodeQL's py/clear-text-logging-sensitive
|
|
1195
|
+
# -data flags it because `name` is user-supplied and `fingerprint` reads
|
|
1196
|
+
# like a credential, but a minisign PUBLIC key fingerprint is meant to
|
|
1197
|
+
# be published — printing it is the verification, and an autofix that
|
|
1198
|
+
# replaced this with a constant string (dc6e827) removed the only check
|
|
1199
|
+
# `trust add` offers. Restored, suppressed with the reason, and pinned
|
|
1200
|
+
# by tests/functional/test_tap_signing.py so it cannot be quietly
|
|
1201
|
+
# dropped a second time.
|
|
1202
|
+
out.ok("trusted key %s (%s)" # codeql[py/clear-text-logging-sensitive-data]
|
|
1203
|
+
% (rec["name"], rec["fingerprint"]))
|
|
1193
1204
|
return 0
|
|
1194
1205
|
|
|
1195
1206
|
if args.action == "remove":
|
|
@@ -11,11 +11,14 @@
|
|
|
11
11
|
CLAUDE.md
|
|
12
12
|
CODE_OF_CONDUCT.md
|
|
13
13
|
CONTRIBUTING.md
|
|
14
|
+
DCO
|
|
14
15
|
LICENSE
|
|
16
|
+
MAINTAINERS.md
|
|
15
17
|
MANIFEST.in
|
|
16
18
|
Makefile
|
|
17
19
|
README.md
|
|
18
20
|
SECURITY.md
|
|
21
|
+
SUPPORT.md
|
|
19
22
|
boost
|
|
20
23
|
codecov.yml
|
|
21
24
|
eslint.config.mjs
|
|
@@ -122,10 +125,12 @@ docs/adapters.html
|
|
|
122
125
|
docs/carousel.html
|
|
123
126
|
docs/chat.html
|
|
124
127
|
docs/commands.html
|
|
128
|
+
docs/commit-audit.md
|
|
125
129
|
docs/demo-index.json
|
|
126
130
|
docs/demo.gif
|
|
127
131
|
docs/demo.html
|
|
128
132
|
docs/demo.tape
|
|
133
|
+
docs/dependencies.md
|
|
129
134
|
docs/design-roadmap.html
|
|
130
135
|
docs/eval-latest.json
|
|
131
136
|
docs/eval.html
|
|
@@ -136,6 +141,7 @@ docs/openssf-badge.md
|
|
|
136
141
|
docs/rag-architecture.md
|
|
137
142
|
docs/roadmap.html
|
|
138
143
|
docs/security-design.md
|
|
144
|
+
docs/verifying-releases.md
|
|
139
145
|
docs/.claude/settings.local.json
|
|
140
146
|
docs/architecture/README.md
|
|
141
147
|
docs/architecture/c4-components-core.md
|
|
@@ -342,6 +348,7 @@ docs/roadmap/items/one-commit-can-cut-two-releases.md
|
|
|
342
348
|
docs/roadmap/items/one-dead-tap-broke-every-update.md
|
|
343
349
|
docs/roadmap/items/one-shared-atomic-write-helper.md
|
|
344
350
|
docs/roadmap/items/openssf-best-practices-badge.md
|
|
351
|
+
docs/roadmap/items/osps-baseline-levels.md
|
|
345
352
|
docs/roadmap/items/package-metadata-validation-twine-check-friends.md
|
|
346
353
|
docs/roadmap/items/patch-coverage-gate-diff-cover.md
|
|
347
354
|
docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md
|
|
@@ -485,6 +492,7 @@ scripts/build_registries.py
|
|
|
485
492
|
scripts/build_roadmap.py
|
|
486
493
|
scripts/build_scale_corpus.py
|
|
487
494
|
scripts/check_anchors.py
|
|
495
|
+
scripts/check_dco.py
|
|
488
496
|
scripts/check_licenses.py
|
|
489
497
|
scripts/check_required_checks.py
|
|
490
498
|
scripts/ensure_eval_corpus.sh
|
|
@@ -607,6 +615,7 @@ tests/unit/test_catalog.py
|
|
|
607
615
|
tests/unit/test_catalogbundle.py
|
|
608
616
|
tests/unit/test_chat.py
|
|
609
617
|
tests/unit/test_check_anchors.py
|
|
618
|
+
tests/unit/test_check_dco.py
|
|
610
619
|
tests/unit/test_check_licenses.py
|
|
611
620
|
tests/unit/test_claude_settings.py
|
|
612
621
|
tests/unit/test_clean_internal_cache.py
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# Commit audit — message versus diff
|
|
2
|
+
|
|
3
|
+
Every commit claims something in its message. This is a record of an
|
|
4
|
+
independent pass checking whether the diff actually delivers it, produced while
|
|
5
|
+
adopting the [Developer Certificate of Origin](../CONTRIBUTING.md#sign-your-commits-dco).
|
|
6
|
+
|
|
7
|
+
It exists because the DCO itself could not be applied backwards. A
|
|
8
|
+
`Signed-off-by` is the *contributor* asserting they may submit the work, so a
|
|
9
|
+
trailer added later by a reviewer certifies nothing — and backfilling one across
|
|
10
|
+
569 commits would rewrite `main`, breaking 478 tags and invalidating the
|
|
11
|
+
build-provenance attestation on every published release. The review still had
|
|
12
|
+
value; the history rewrite did not. So the review happened and was written down
|
|
13
|
+
here instead.
|
|
14
|
+
|
|
15
|
+
Repo: `/private/tmp/claude-501/boost-osps` (worktree of github.com/jonnyeclectic/boost)
|
|
16
|
+
Range: 60 commits, `9ca72fd` through `c8c9075` inclusive (i.e. `git log -60 c8c9075`). NOTE: while this audit ran, a peer session
|
|
17
|
+
re-committed the tip to add a DCO sign-off, so `c8c9075` is now `0939f53` (identical
|
|
18
|
+
tree, message differs only by a `Signed-off-by:` trailer) and a 61st commit `b23b98f`
|
|
19
|
+
sits on top. The findings below are unaffected.
|
|
20
|
+
Method: read subject + full body, then the diff (generated payloads — `docs/roadmap.html`,
|
|
21
|
+
`registries.json`, `demo.gif` — checked at the stat level and judged against the
|
|
22
|
+
source-of-truth files and tests instead). Read-only: only `git log` / `git show`.
|
|
23
|
+
|
|
24
|
+
## Counts
|
|
25
|
+
|
|
26
|
+
| Verdict | Count |
|
|
27
|
+
|---|---|
|
|
28
|
+
| MATCHES | 57 |
|
|
29
|
+
| OVERSTATES | 1 |
|
|
30
|
+
| UNDERSTATES | 1 |
|
|
31
|
+
| SUPERSEDED | 1 |
|
|
32
|
+
| UNCLEAR | 0 |
|
|
33
|
+
|
|
34
|
+
## Needs a human look
|
|
35
|
+
|
|
36
|
+
- **`dc6e827` — UNDERSTATES.** "Potential fix for code scanning alert no. 54: Clear-text
|
|
37
|
+
logging of sensitive information". The diff (`boost_cli/commands/quality.py`, `cmd_trust`)
|
|
38
|
+
does not merely stop logging — it deletes the trusted-key **name and fingerprint** from
|
|
39
|
+
`boost trust add`'s success line and replaces it with the constant `"trusted key added"`,
|
|
40
|
+
discarding `rec` entirely. Nothing in the message says a user-facing verification output
|
|
41
|
+
was removed. Two seconds later `560652b` shipped `docs/openssf-badge.md:231-240`, which
|
|
42
|
+
states this exact autofix "would remove the only verification the command offers and make
|
|
43
|
+
boost *less* secure, **so it must not be merged**" — and lists dismissing the alert as a
|
|
44
|
+
pending human action. It was already merged, and it is still in `HEAD`.
|
|
45
|
+
- **`d82467a` — OVERSTATES.** Subject: "…and stop Dependabot auto-rebasing". The diff adds
|
|
46
|
+
`rebase-strategy: disabled` to 3 of the 5 `package-ecosystem` blocks in
|
|
47
|
+
`.github/dependabot.yml` (github-actions, npm `/`, npm `/tests/visual`); the two `pip`
|
|
48
|
+
blocks are untouched. Those blocks carry `open-pull-requests-limit: 0`, but the file's own
|
|
49
|
+
comment says "Security updates ignore the limit and keep firing" — so a live PR-producing
|
|
50
|
+
path is still auto-rebased. Low severity, but the claim is unqualified.
|
|
51
|
+
- **`e4f2491` — SUPERSEDED by `838aa81`.** "fix(ci): give eval-stats credentials to push
|
|
52
|
+
with" delivers the credentials (`git push origin HEAD:main` → an
|
|
53
|
+
`x-access-token:${{ github.token }}@github.com/...` URL) plus a guard test, and the body
|
|
54
|
+
implies the publisher now lands. It could not: `838aa81` establishes that `main` carries a
|
|
55
|
+
ruleset with an empty bypass list so *no* token can push to it, and replaces the whole
|
|
56
|
+
push-to-main with a PR flow off an `eval-metrics` branch.
|
|
57
|
+
|
|
58
|
+
## Cross-cutting note (not a verdict)
|
|
59
|
+
|
|
60
|
+
`560652b`'s `docs/openssf-badge.md` and the tree disagree about alert 54 — see `dc6e827`
|
|
61
|
+
above. `560652b`'s own subject claim ("all 67 passing criteria, with a threat model") is
|
|
62
|
+
delivered: 67 criteria rows (61 Met / 6 N/A / 1 Unmet-justified) plus
|
|
63
|
+
`docs/security-design.md` with trust boundaries, Saltzer–Schroeder principles, and CWE
|
|
64
|
+
classes.
|
|
65
|
+
|
|
66
|
+
## Per-commit table
|
|
67
|
+
|
|
68
|
+
| SHA | Subject (60 chars) | Verdict | Evidence |
|
|
69
|
+
|---|---|---|---|
|
|
70
|
+
| c8c9075 (now 0939f53) | docs: the four documents OSPS Baseline Level 2 asks for | MATCHES | Exactly four new docs (MAINTAINERS.md, SUPPORT.md, docs/dependencies.md, docs/verifying-releases.md) + roadmap item; all four added to the vale list in prose-lint.yml; SECURITY.md gains a Secrets section. |
|
|
71
|
+
| 560652b | docs(security): answer all 67 OpenSSF passing criteria, wit | MATCHES | 67 criteria rows in docs/openssf-badge.md; docs/security-design.md is the threat model. See cross-cutting note re: alert 54. |
|
|
72
|
+
| dc6e827 | Potential fix for code scanning alert no. 54: Clear-text lo | UNDERSTATES | quality.py `cmd_trust` drops `rec["name"]`/`rec["fingerprint"]` for a constant string, removing the key-verification output; undisclosed, and contradicted by docs/openssf-badge.md:231. |
|
|
73
|
+
| b0b1c6e | chore: drop permission entries for paths that no longer exi | MATCHES | Exactly 5 `Bash(...)` entries removed from .claude/settings.local.json, all naming `~/vibe`/`vibe_cli`. |
|
|
74
|
+
| 8658e8f | fix(ci): exempt cramjam from the licence gate, with the ups | MATCHES | `"cramjam": "MIT upstream; wheel metadata omits it"` in UNDECLARED_OK + `test_cramjam_is_exempt`. |
|
|
75
|
+
| 714e879 | chore(deps-dev): bump eslint from 10.8.1 to 10.9.1 | MATCHES | Routine bot bump (batched with the other dependabot rows below). |
|
|
76
|
+
| 61d6097 | chore(deps): bump the codeql-action group with 3 updates | MATCHES | Routine bot bump; all three sub-action pins move together, as 731a598's grouping intends. |
|
|
77
|
+
| d82467a | docs(style): display-face traps, an AI-tells prose rule, an | OVERSTATES | `rebase-strategy: disabled` on 3 of 5 `package-ecosystem` blocks in .github/dependabot.yml; both pip blocks untouched. |
|
|
78
|
+
| f75d85d | chore(deps): bump step-security/harden-runner 2.20.1→2.21.0 | MATCHES | Routine bot bump across 18 workflows. |
|
|
79
|
+
| e6e1d31 | chore(eval): refresh published metrics | MATCHES | docs/eval-latest.json: `generated`/`commit` re-stamped; no metric value moved (nothing claimed one would). |
|
|
80
|
+
| 7819053 | chore(deps): bump google/osv-scanner-action reusable workfl | MATCHES | Routine bot bump. |
|
|
81
|
+
| e3d1ccd | chore(deps): bump puppeteer-core 25.6.0→25.8.0 in /tests/vi | MATCHES | Routine bot bump, lockfile + manifest only. |
|
|
82
|
+
| d6f6e80 | chore(deps): bump the codeql-action group with 3 updates | MATCHES | Routine bot bump, grouped. |
|
|
83
|
+
| 351f558 | fix(cli): fold long hints to the pane without splitting the | MATCHES | `out.wrap()` + `wrap=` kwarg on warn/info/dim/kv in core/output.py; 5 command modules converted; test_cli_pane_width.py (137 lines) + test_output.py (+217). |
|
|
84
|
+
| fc70c8a | fix(search): a term with no postings falls back to the comm | MATCHES | `rag.stem_expansions()` range-scan + `_note_stem_expansions` in discovery.py so the substitution is reported; 14 unit + 3 functional tests added. |
|
|
85
|
+
| 7a5816f | fix(cli): fit the boxes and the help screen to the terminal | MATCHES | Both literal `%%` strings removed from commands/team.py; `panel()` clamps to `term_width() - 4`; `print_help` measures via `out.term_width()`. |
|
|
86
|
+
| 8687c40 | feat(catalog): curate a marketing / CRM / email / outreach d | MATCHES | 16 new `marketing` rows + 4 recategorised = 20, in scripts/build_registries.py (the source of truth); registries.json + taps-scale.txt regenerated; test_registry_categories.py +94. |
|
|
87
|
+
| 1167bcd | docs(demo): re-record demo.gif against the current CLI | MATCHES | Bot; docs/demo.gif binary only. |
|
|
88
|
+
| 3387607 | perf(dense): rank on one bit per dimension, rescore the sur | MATCHES | `vec_chunks_bin` + `vec_raw` + `quantize()`/`quantized()` in core/dense.py; `reindex --dense` calls quantize and doctor reports `quantized`; test_dense_quantized.py (376) incl. `test_the_rescore_is_load_bearing`; test_dense_status_cheap.py (281) covers the COUNT(*) removal. |
|
|
89
|
+
| 7db0477 | perf(search): cache the LLM rerank order, keyed on exactly | MATCHES | `rerank_cache_path()` + FIFO get/put in core/rag.py; `"rerank_cache.json"` added to paths.INTERNAL_CACHE_FILES; MCP cost wording updated + test_rerank_cache.py. |
|
|
90
|
+
| 45a6dfa | perf(search): rank from the index, materialise only the sur | MATCHES | `_retrieve_from_index` + `_windowed` in core/rag.py; dense.ready() stats before importing; test_rag_fastpath.py (279) + test_dense_ready_order.py. |
|
|
91
|
+
| d53354e | docs(demo): re-record demo.gif against the current CLI | MATCHES | Bot; binary only. |
|
|
92
|
+
| f54b72b | chore(eval): refresh published metrics | MATCHES | Timestamp/commit re-stamp only. |
|
|
93
|
+
| 7f1a9a8 | feat(ui): one design system across search and browse | MATCHES | `search_layout`, `format_search_row`, `meter_hue`, `kind_label` in core/output.py; `rule_segments`, `scrollbar`, `empty_lines`, `badge_positions`, `state_glyph`, `session_summary`, `install_target`, `count_tail` in core/browse.py (12 helpers, as claimed); `_aurora_theme`/`_subseq`/`_match_positions` removed. |
|
|
94
|
+
| 3a28b3f | test(eval): re-pin the Tier 1b scale corpus | MATCHES | Bot; exactly 165/165 lines in taps-scale.txt — the distractors gain SHAs, the 20 required rows are byte-identical. Confirms 007f1dd's fix held. |
|
|
95
|
+
| 007f1dd | fix(eval): the scale re-pin moved the twenty rows it does n | MATCHES | `frozen_rows()` + `frozen=` in `relock_text` (scripts/eval_corpus.py); eval-scale.yml gains a post-refresh `build_scale_corpus.py --check`; test_eval_corpus.py +153, test_scale_corpus.py +34. |
|
|
96
|
+
| 422570f | chore(eval): refresh published metrics | MATCHES | Timestamp/commit re-stamp only. |
|
|
97
|
+
| a3a751a | docs(shards): replace the scale estimate with what the job | MATCHES | shards.yml comment-only rewrite carrying the measured 77,423→24,246 / 2 h 07 m / 129 MB figures; no timeout or logic changed, as the `docs(` prefix implies. |
|
|
98
|
+
| 838aa81 | fix(ci): a publisher that could not publish, and an alert t | MATCHES | eval-stats.yml: push-to-main replaced by a branch + PR, `contents`/`pull-requests: write`; ci-failure-issue.yml gains the `close-issue` job keyed on the per-workflow marker and moves `issues: write` from workflow to job level; two guard tests. |
|
|
99
|
+
| ec87983 | fix(registry): a tap spec too long for the filesystem is an | MATCHES | `MAX_NAME_BYTES = 255` + total `_looks_like_a_directory()` in core/registry.py; both reproducers added as fuzz corpus seeds; test_registry_control_chars.py +120. |
|
|
100
|
+
| 3f7bd86 | fix(deps): bump two transitive npm advisories out of the th | MATCHES | package-lock.json only: brace-expansion 5.0.8→5.0.9 and nanoid 3.3.16→3.3.18, exactly the two named. |
|
|
101
|
+
| 06b6246 | fix(registries): stop advertising two repos that no longer | MATCHES | `RETIRED = {...}` + `verify_live()` + `--verify-live` in scripts/build_registries.py; 28 lines removed from registries.json; 3 new tests in test_registry_categories.py. |
|
|
102
|
+
| 709eb05 | feat(catalog): give an entry an identity for what it is, no | MATCHES | `catalog._content_digest` + `CACHE_FORMAT = 1` with rescan-on-stale; browse.dedupe and `resolve_one` key on the digest; dense chunk-dedupe; test_content_identity.py (437) + test_dense_embed_dedupe.py (216). |
|
|
103
|
+
| 0861e7f | chore(deps-dev): bump eslint from 10.8.0 to 10.8.1 | MATCHES | Routine bot bump. |
|
|
104
|
+
| c289c88 | chore(deps): bump puppeteer-core 25.5.0→25.6.0 in /tests/vi | MATCHES | Routine bot bump. |
|
|
105
|
+
| 0fd70ba | docs(demo): re-record demo.gif against the current CLI | MATCHES | Bot; binary only. |
|
|
106
|
+
| 717b8c8 | feat(browse): let space reach the query, and rebuild the br | MATCHES | Printable-range fix with the keymap move (Enter/Tab/Esc/^T) in commands/discovery.py; new core/browse.py (470) holding the pure logic; scripts/build_roadmap.py gains the raw-`<` guard the second sub-commit describes; test_browse.py (687) + test_roadmap_fresh.py. |
|
|
107
|
+
| 3e6b494 | fix(completions): stop --install deleting the config betwee | MATCHES | `_spans`/`_outside` single-scan rewrite of `_merge_rc`/`_strip_rc` plus `RcPlan`/`plan_install`/`plan_uninstall`/`apply` and `--dry-run`; test_complete_rc_block.py (367) incl. the 672-arrangement property test. |
|
|
108
|
+
| 35eb03f | fix(visual): stop handing --single-process to a full Chrome | MATCHES | `needsSingleProcess` predicate gates both `--single-process`/`--in-process-gpu` and `headless: "shell"` in visual_check.mjs; test_visual_harness_flags.py pins parity with a11y_check.mjs. |
|
|
109
|
+
| 4be314c | perf(taps): stop checking out the 84% of a repo boost never | MATCHES | `SPARSE_PATTERNS` + `--filter=blob:none --sparse` + memoized `materialize`/`narrow` in core/gitutil.py; `cmd_compact`; `paths.INTERNAL_CACHE_FILES` guard for `boost clean`; command counters corrected; 5 new test modules incl. test_gitutil_sparse.py (293). |
|
|
110
|
+
| 15b129e | fix: four defects found by reading a real machine's crash r | MATCHES | All four present: `logs._redact` (name + value-shape), `PermissionError` handling in store `_copy_skill`, `IncompleteRead` in embed `_post`, and `blocked_links` in sync_plan/sync_apply + doctor; four dedicated test modules. |
|
|
111
|
+
| bf85de1 | feat(catalog): share the catalogue instead of making everyo | MATCHES | New core/catalogbundle.py (265) with `export_bundle`/`import_bundle`/`_safe_members` (traversal, symlink, member-count and size caps); `cmd_catalog` + COMMANDS row; test_catalogbundle.py (405) + test_cli_catalog.py (190); the pinned command-count literals updated across README/CLAUDE/docs/tests. |
|
|
112
|
+
| 5b27b41 | fix(self-update): stop claiming "already up to date" withou | MATCHES | `PYPI_JSON` + `latest_version()` + `is_behind()` in core/selfupdate.py; per-manager index-refresh flags (`--refresh` / `--no-cache-dir`); test_selfupdate.py +272. |
|
|
113
|
+
| c4a8584 | chore(deps): bump step-security/harden-runner 2.20.0→2.20.1 | MATCHES | Routine bot bump to the peeled SHA, as the body states. |
|
|
114
|
+
| aba4e27 | fix(shards): make the shard pipeline able to produce a shar | MATCHES | `--list-repos` in scripts/eval_corpus.py and shards.yml switched to it; `_tap_chunk_count`/`_unreadable_vectors` separate the two states in core/dense.py; three new test modules incl. one that runs without sqlite-vec. |
|
|
115
|
+
| 14ba426 | chore(deps): bump puppeteer-core 25.4.0→25.5.0 in /tests/vi | MATCHES | Human-authored regeneration, but touches only tests/visual/package{,-lock}.json; puppeteer-core 25.4.0→25.5.0, @puppeteer/browsers 3.0.6→3.1.0, axe-core held at 4.13.0 — exactly as the body states. |
|
|
116
|
+
| f5ecc54 | fix(store): let `boost sync` repair a skill whose SKILL.md | MATCHES | One-condition change `if not sdir.is_dir()` → `or not (sdir / "SKILL.md").is_file()`; test_sync_repairs_gutted_skill.py (96) pins both directions. |
|
|
117
|
+
| 0b5b317 | docs: correct five measurably-wrong claims, and stop the sm | MATCHES | All five: recall floor 0.85→0.78, the UP006/UP035/UP045 sweep note, UP031 ~860→1,005/1,800 with the reproducing command, index.html 5→7 pre-tapped (both places), smoke 170→174; plus 5 commands added to smoke.sh and test_smoke_covers_every_command.py mirroring COMMANDS. |
|
|
118
|
+
| 470b9de | fix(registry): reject control characters in a tap spec, and | MATCHES | Control-char rejection at `parse_spec`; the watched list goes from 2 to exactly 26 workflows; Makefile `lint` now runs `zizmor --offline`; test_failure_alerting_covers_unattended.py + test_zizmor_ignores_still_anchor.py. |
|
|
119
|
+
| 13891fa | docs(demo): re-record demo.gif against the current CLI | MATCHES | Bot; binary only. |
|
|
120
|
+
| 93f16d9 | test(langsmith): cover the golden-set publisher, which had | MATCHES | Single new file tests/unit/test_publish_golden_dataset.py (226); no production change, as the `test(` prefix implies. |
|
|
121
|
+
| e4f2491 | fix(ci): give eval-stats credentials to push with | SUPERSEDED | Credentials added as claimed, but the push to `main` still could not succeed; `838aa81` replaces `git push … HEAD:main` with an `eval-metrics` branch + PR because main's ruleset has an empty bypass list. |
|
|
122
|
+
| 3ebccb0 | chore(deps): bump google/osv-scanner-action/... | MATCHES | Routine bot bump. |
|
|
123
|
+
| 844675e | chore(deps): bump actions/attest-build-provenance 4.1.1→4.2 | MATCHES | Routine bot bump. |
|
|
124
|
+
| 08a7744 | fix(ci): stop one PR's demo run from cancelling another PR' | MATCHES | demo.yml `group: demo` → `demo-${{ pull_request.number \|\| sha }}` with `cancel-in-progress` gated on `pull_request`; sonarcloud.yml given the same shape; test_workflow_concurrency_groups.py (144). |
|
|
125
|
+
| 8a4a211 | chore(deps): bump axe-core from 4.12.1 to 4.13.0 in /tests/ | MATCHES | Routine bot bump. |
|
|
126
|
+
| 731a598 | fix(ci): move every sub-action of one action repo in lockst | MATCHES | `groups:` for `github/codeql-action*` and `actions/cache*` in dependabot.yml; all three codeql pins moved to the same peeled SHA; test_action_pin_lockstep.py (290) parametrised over both families. |
|
|
127
|
+
| ff969c8 | fix(gitutil): never download Git LFS payloads when cloning | MATCHES | `env=os.environ \| {"GIT_LFS_SKIP_SMUDGE": "1"}` passed per-call in core/gitutil.py; test_gitutil_lfs.py (67). |
|
|
128
|
+
| 3827fea | docs(demo): re-record demo.gif against the current CLI | MATCHES | Bot; binary only. |
|
|
129
|
+
| 9ca72fd | feat(serve): a searchable, faceted catalogue and a graph of | MATCHES | core/serve.py +793: `catalog_rows`, `search_rows` (reusing catalog.search), `entry_tags` namespaced facets, `_label_propagate` graph, fingerprint-keyed `cached_view`/`cached_graph`, `public_row` \u-escaping; test_serve.py +571 incl. the reflection payload tests. |
|