boost-skill-cli 1.2.33__tar.gz → 1.2.35__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.33 → boost_skill_cli-1.2.35}/CONTRIBUTING.md +11 -0
- {boost_skill_cli-1.2.33/boost_skill_cli.egg-info → boost_skill_cli-1.2.35}/PKG-INFO +1 -1
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/configuration.py +21 -1
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/quality.py +20 -2
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/safety.py +7 -1
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/store.py +12 -1
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35/boost_skill_cli.egg-info}/PKG-INFO +1 -1
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_skill_cli.egg-info/SOURCES.txt +9 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/openssf-badge.md +6 -9
- boost_skill_cli-1.2.35/docs/roadmap/items/branch-current-gate.md +39 -0
- boost_skill_cli-1.2.35/docs/roadmap/items/cli-command-audit.md +72 -0
- boost_skill_cli-1.2.35/docs/roadmap/items/reproducible-release-artifacts.md +62 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap.html +165 -2
- boost_skill_cli-1.2.35/docs/verifying-releases.md +214 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/pyproject.toml +13 -1
- boost_skill_cli-1.2.35/scripts/check_branch_current.py +94 -0
- boost_skill_cli-1.2.35/scripts/check_reproducible.py +181 -0
- boost_skill_cli-1.2.35/scripts/normalize_sdist.py +158 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_catalog.py +24 -1
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_configuration.py +26 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_quality.py +43 -0
- boost_skill_cli-1.2.35/tests/unit/test_branch_current.py +56 -0
- boost_skill_cli-1.2.35/tests/unit/test_check_reproducible.py +192 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_link_ownership.py +35 -0
- boost_skill_cli-1.2.35/tests/unit/test_normalize_sdist.py +216 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_store.py +33 -0
- boost_skill_cli-1.2.33/docs/verifying-releases.md +0 -146
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/.gitattributes +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/.gitignore +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/.lycheeignore +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/.vale/styles/boost/AIWriting.yml +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/.vale.ini +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/CLAUDE.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/DCO +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/GOVERNANCE.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/LICENSE +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/MAINTAINERS.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/MANIFEST.in +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/Makefile +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/README.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/SECURITY.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/SUPPORT.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/bmad.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/bootstrap.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/browse.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/builtin.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/catalogbundle.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/complete.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/hookhost.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/data/rules/boost-first.mdc +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_langchain/__init__.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_langchain/_compat.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_langchain/graph.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_langchain/loader.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_langchain/py.typed +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_langchain/retriever.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/codecov.yml +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/adapters.html +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/bmad.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel.html +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/chat.html +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/code-review.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/commands.html +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/commit-audit.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/demo.gif +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/demo.html +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/demo.tape +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/dependencies.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/eval-latest.json +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/eval.html +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/index.html +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/langchain.html +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/boost-first-rule.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/install-path-disambiguation.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/openssf-silver.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/osps-baseline-levels.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/zip-strict-audit.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/security-design.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/semantic-search.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/evals/README.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/evals/__init__.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/evals/baseline.json +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/evals/metrics.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/evals/publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/examples/README.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/index.html +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/noxfile.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/add_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/build_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/check_dco.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/eval_corpus.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/measure_registry.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/page_budget.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/publish_eval_json.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/serve_docs.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/setup.cfg +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/sonar-project.properties +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/style/README.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/style/boost.css +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/style/boost.js +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/style/demo.html +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/conftest.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/eval/taps-scale.txt +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_hooks_gemini.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_pane_width.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_kind_conformance.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/langchain/conftest.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/langchain/test_graph.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/langchain/test_loader.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/langchain/test_retriever.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_action_pin_lockstep.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_bmad_core.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_boost_first_offer.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_bootstrap.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_browse.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_builtin.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_catalogbundle.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_check_dco.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_clean_internal_cache.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_compact.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_complete.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_complete_rc_block.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_content_identity.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_crash_redaction.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_dense_embed_dedupe.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_dense_quantized.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_dense_ready_order.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_dense_shard_real_schema.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_dense_status_cheap.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_embed_truncated_response.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_eval_corpus.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_eval_grading.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_gemini_agent_sanitize.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_gitutil_lfs.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_gitutil_sparse.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_hook_settings_hosts.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_hookhost.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_install_permission_error.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_langchain_packaging.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_measure_registry.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_page_budget.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_rag_fastpath.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_registry_control_chars.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_rerank_cache.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_serve_docs.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_shards_matrix.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_smoke_covers_every_command.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_store_materialize.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_sync_blocked_links.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_visual_harness_flags.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_workflow_concurrency_groups.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_workflow_push_has_credentials.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/visual/package-lock.json +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/visual/visual_check.mjs +0 -0
|
@@ -257,6 +257,17 @@ branch ruleset (**Settings → Rules → Rulesets**):
|
|
|
257
257
|
gate before it can merge, so an incompatible pair can't both land — the second
|
|
258
258
|
PR must include the first and re-run CI.
|
|
259
259
|
|
|
260
|
+
> **Set it in the ruleset, and verify it from the API.** This repository asks
|
|
261
|
+
> for that rule in two places, and for a while neither one enforced it. Classic
|
|
262
|
+
> branch protection had `strict: true` *and* `enforce_admins: false`, so it
|
|
263
|
+
> skipped the only account that merges; the active ruleset — no bypass actors,
|
|
264
|
+
> so it does apply — had `strict_required_status_checks_policy: false`. Two
|
|
265
|
+
> mechanisms, and the binding one had the safety off. Two PRs then merged into
|
|
266
|
+
> a red `main`, which stopped the release guard arming and left two merged PRs
|
|
267
|
+
> unreleased. Check the real state with
|
|
268
|
+
> `gh api repos/jonnyeclectic/boost/rulesets/<id>`, never the settings page,
|
|
269
|
+
> and note that the `branch-current` required check now backstops it.
|
|
270
|
+
>
|
|
260
271
|
> Check names must be **unique across workflows** — GitHub matches a required
|
|
261
272
|
> check by name alone. Three names collided before this was written (`lint` in
|
|
262
273
|
> ci/markdownlint/theme-lint, `audit` in lighthouse/pip-audit, `analyze` in
|
|
@@ -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.35'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 2, 35)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -570,6 +570,26 @@ def _write_onboard_file(dest: Path, content: str, force: bool) -> bool:
|
|
|
570
570
|
return True
|
|
571
571
|
|
|
572
572
|
|
|
573
|
+
def _telemetry_created(dest: Path) -> str:
|
|
574
|
+
"""The existing file's ``created`` timestamp, or now for a fresh write.
|
|
575
|
+
|
|
576
|
+
``_write_onboard_file`` treats a byte-identical re-run as a no-op — but
|
|
577
|
+
stamping a fresh ``util.now_iso()`` into telemetry.json on every
|
|
578
|
+
invocation meant the comparison could only match by wall-clock luck (two
|
|
579
|
+
invocations landing in the same second), defeating the "re-running
|
|
580
|
+
onboard regenerates the workflow byte-for-byte" guarantee documented
|
|
581
|
+
above for the one file whose content is otherwise fully deterministic.
|
|
582
|
+
"""
|
|
583
|
+
try:
|
|
584
|
+
data = json.loads(dest.read_text(encoding="utf-8"))
|
|
585
|
+
created = data.get("created")
|
|
586
|
+
if isinstance(created, str) and created:
|
|
587
|
+
return created
|
|
588
|
+
except (OSError, UnicodeDecodeError, json.JSONDecodeError):
|
|
589
|
+
pass
|
|
590
|
+
return util.now_iso()
|
|
591
|
+
|
|
592
|
+
|
|
573
593
|
def cmd_onboard(argv) -> int:
|
|
574
594
|
"""boost onboard [--repo DIR] [--pr] [--dry-run] [--force]"""
|
|
575
595
|
p = cliparse.parser(
|
|
@@ -593,7 +613,7 @@ def cmd_onboard(argv) -> int:
|
|
|
593
613
|
telemetry = json.dumps({
|
|
594
614
|
"enabled": True,
|
|
595
615
|
"share_pulse": True,
|
|
596
|
-
"created":
|
|
616
|
+
"created": _telemetry_created(repo / _TELEMETRY_REL),
|
|
597
617
|
"by": util.user(),
|
|
598
618
|
}, indent=2) + "\n"
|
|
599
619
|
files = [(_TELEMETRY_REL, telemetry), (_WORKFLOW_REL, _WORKFLOW_YML)]
|
|
@@ -94,7 +94,12 @@ def _resolve_as_far_as_it_exists(path: Path) -> Path:
|
|
|
94
94
|
while cur != cur.parent and not cur.exists():
|
|
95
95
|
tail.append(cur.name)
|
|
96
96
|
cur = cur.parent
|
|
97
|
-
with
|
|
97
|
+
# RuntimeError is not redundant with OSError here: Python 3.12's
|
|
98
|
+
# `Path.resolve()` raises RuntimeError("Symlink loop from ...") for a
|
|
99
|
+
# cycle even in non-strict mode, and RuntimeError is NOT an OSError
|
|
100
|
+
# subclass — 3.13+ raises OSError for the same input. See
|
|
101
|
+
# store.resolves_into_store for the identical split, caught the same way.
|
|
102
|
+
with suppress(OSError, RuntimeError):
|
|
98
103
|
cur = cur.resolve()
|
|
99
104
|
return cur.joinpath(*reversed(tail))
|
|
100
105
|
|
|
@@ -907,10 +912,18 @@ def cmd_heal(argv):
|
|
|
907
912
|
|
|
908
913
|
plan = store.sync_plan()
|
|
909
914
|
if dry:
|
|
915
|
+
# `ours` above is exactly what a real run unlinks before computing
|
|
916
|
+
# this plan, so `sync_plan`'s stale-link sweep never sees those paths
|
|
917
|
+
# on a real run — only here, where nothing was unlinked yet. Skip
|
|
918
|
+
# them so a preview doesn't report the same path twice under two
|
|
919
|
+
# different actions.
|
|
920
|
+
already_reported = {str(link) for link in ours}
|
|
910
921
|
for name, agent in plan["missing_links"]:
|
|
911
922
|
out.info("would link %s → %s" % (name, agent))
|
|
912
923
|
actions.append("link %s" % name)
|
|
913
924
|
for p in plan["stale_links"]:
|
|
925
|
+
if p in already_reported:
|
|
926
|
+
continue
|
|
914
927
|
out.info("would remove stale link %s" % _tilde(p))
|
|
915
928
|
actions.append("stale %s" % p)
|
|
916
929
|
for name in plan["missing_store"]:
|
|
@@ -988,7 +1001,12 @@ def cmd_conflict(argv):
|
|
|
988
1001
|
ap.add_argument("--json", action="store_true")
|
|
989
1002
|
args = ap.parse_args(argv)
|
|
990
1003
|
|
|
991
|
-
|
|
1004
|
+
# Quarantine removes a skill's active links/materialization on purpose
|
|
1005
|
+
# (see _drift_status_materialized's docstring) — a quarantined skill has
|
|
1006
|
+
# nothing live to be contradicted by, so it is excluded from both sides
|
|
1007
|
+
# of conflict detection rather than surfacing a conflict finding no
|
|
1008
|
+
# `boost quarantine` can ever clear.
|
|
1009
|
+
installed = [(n, e) for n, e in _iter_installed() if not e.get("quarantined")]
|
|
992
1010
|
rules: list[tuple[str, str, str, set]] = [] # skill, line, polarity, stems
|
|
993
1011
|
declared: list[tuple[str, str]] = [] # skill, conflicting skill
|
|
994
1012
|
installed_names = {n for n, _e in installed}
|
|
@@ -268,7 +268,13 @@ def _trust_audit(as_json: bool) -> int:
|
|
|
268
268
|
"""`boost audit --skills` — one trust-health answer for the installed set."""
|
|
269
269
|
installed = dict(_iter_installed())
|
|
270
270
|
peers: dict = {}
|
|
271
|
-
|
|
271
|
+
# Quarantine removes a skill's active links on purpose — pairing it as a
|
|
272
|
+
# conflict source or target would report a finding `boost quarantine`
|
|
273
|
+
# (its own documented remedy) can never clear. Non-quarantined skills are
|
|
274
|
+
# still checked against a quarantined peer's *declared* conflicts via
|
|
275
|
+
# `_installed_conflicts`, so only the pairing set is trimmed here.
|
|
276
|
+
active_names = [n for n, lk in installed.items() if not lk.get("quarantined")]
|
|
277
|
+
for name, peer in trustaudit.conflict_pairs(active_names,
|
|
272
278
|
_installed_conflicts(installed)):
|
|
273
279
|
peers.setdefault(name, []).append(peer)
|
|
274
280
|
|
|
@@ -80,7 +80,16 @@ def installed() -> dict:
|
|
|
80
80
|
def source_dir_for(entry: dict) -> Path:
|
|
81
81
|
"""Absolute path of a catalog entry's skill dir inside its tap clone.
|
|
82
82
|
|
|
83
|
-
|
|
83
|
+
Clones the tap first if it is only *registered* and not yet cloned — the
|
|
84
|
+
state `boost catalog --import` deliberately leaves a tap in (a bundle
|
|
85
|
+
ships the catalogue, not the repo, precisely so the receiver can search
|
|
86
|
+
before paying for any clone). `catalog --import`'s own hint promises
|
|
87
|
+
"`boost install` clones just the one registry it needs"; without this, a
|
|
88
|
+
tap that was imported rather than tapped raised "source vanished from
|
|
89
|
+
tap" — a message that implies the source *used to* exist, when really it
|
|
90
|
+
was never fetched.
|
|
91
|
+
|
|
92
|
+
Materializes the directory next. Taps check out Markdown only, so a skill
|
|
84
93
|
that ships `scripts/` or `assets/` has them in the index and not on disk;
|
|
85
94
|
`_copy_skill` is a copytree, and handed a partial directory it copies what
|
|
86
95
|
is there and reports success. Every consumer of a tap's real files — both
|
|
@@ -88,6 +97,8 @@ def source_dir_for(entry: dict) -> Path:
|
|
|
88
97
|
the one place that has to get it right.
|
|
89
98
|
"""
|
|
90
99
|
tap = registry.get(entry["tap"])
|
|
100
|
+
if not tap.is_cloned:
|
|
101
|
+
gitutil.clone_shallow(tap.url, tap.path)
|
|
91
102
|
src = tap.path if entry["rel_dir"] == "." else tap.path / entry["rel_dir"]
|
|
92
103
|
gitutil.materialize(tap.path, entry["rel_dir"])
|
|
93
104
|
if not (src / "SKILL.md").exists():
|
|
@@ -213,6 +213,7 @@ docs/roadmap/items/boost-first-carried-the-losing-trigger.md
|
|
|
213
213
|
docs/roadmap/items/boost-first-rule.md
|
|
214
214
|
docs/roadmap/items/boost-langchain-publishing.md
|
|
215
215
|
docs/roadmap/items/boost-run-live-agents.md
|
|
216
|
+
docs/roadmap/items/branch-current-gate.md
|
|
216
217
|
docs/roadmap/items/bring-commands-under-mutation-testing.md
|
|
217
218
|
docs/roadmap/items/broken-link-and-anchor-checking-lychee.md
|
|
218
219
|
docs/roadmap/items/browse-could-not-search-two-words.md
|
|
@@ -227,6 +228,7 @@ docs/roadmap/items/ci-job-timeout-minutes.md
|
|
|
227
228
|
docs/roadmap/items/ci-summary-step-fails-itself.md
|
|
228
229
|
docs/roadmap/items/ci-time-is-now-runner-queueing.md
|
|
229
230
|
docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md
|
|
231
|
+
docs/roadmap/items/cli-command-audit.md
|
|
230
232
|
docs/roadmap/items/cli-output-ignored-the-terminal.md
|
|
231
233
|
docs/roadmap/items/code-scanning-rule-can-be-restored.md
|
|
232
234
|
docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md
|
|
@@ -391,6 +393,7 @@ docs/roadmap/items/reconcile-the-theme-drift.md
|
|
|
391
393
|
docs/roadmap/items/refresh-the-marketing-surface.md
|
|
392
394
|
docs/roadmap/items/rel-time-tests-race-the-wall-clock.md
|
|
393
395
|
docs/roadmap/items/release-verifies-the-wrong-commit.md
|
|
396
|
+
docs/roadmap/items/reproducible-release-artifacts.md
|
|
394
397
|
docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md
|
|
395
398
|
docs/roadmap/items/required-checks-config-drift.md
|
|
396
399
|
docs/roadmap/items/resolve-vendored-duplicate-copies.md
|
|
@@ -506,8 +509,10 @@ scripts/build_registries.py
|
|
|
506
509
|
scripts/build_roadmap.py
|
|
507
510
|
scripts/build_scale_corpus.py
|
|
508
511
|
scripts/check_anchors.py
|
|
512
|
+
scripts/check_branch_current.py
|
|
509
513
|
scripts/check_dco.py
|
|
510
514
|
scripts/check_licenses.py
|
|
515
|
+
scripts/check_reproducible.py
|
|
511
516
|
scripts/check_required_checks.py
|
|
512
517
|
scripts/ensure_eval_corpus.sh
|
|
513
518
|
scripts/eval_corpus.py
|
|
@@ -522,6 +527,7 @@ scripts/measure_registry.py
|
|
|
522
527
|
scripts/mutation_gate.py
|
|
523
528
|
scripts/mutation_shards.py
|
|
524
529
|
scripts/mutation_weights.json
|
|
530
|
+
scripts/normalize_sdist.py
|
|
525
531
|
scripts/page_budget.py
|
|
526
532
|
scripts/perf_gate.py
|
|
527
533
|
scripts/post_deploy_smoke.py
|
|
@@ -623,6 +629,7 @@ tests/unit/test_ai.py
|
|
|
623
629
|
tests/unit/test_bmad_core.py
|
|
624
630
|
tests/unit/test_boost_first_offer.py
|
|
625
631
|
tests/unit/test_bootstrap.py
|
|
632
|
+
tests/unit/test_branch_current.py
|
|
626
633
|
tests/unit/test_browse.py
|
|
627
634
|
tests/unit/test_builtin.py
|
|
628
635
|
tests/unit/test_capabilities.py
|
|
@@ -632,6 +639,7 @@ tests/unit/test_chat.py
|
|
|
632
639
|
tests/unit/test_check_anchors.py
|
|
633
640
|
tests/unit/test_check_dco.py
|
|
634
641
|
tests/unit/test_check_licenses.py
|
|
642
|
+
tests/unit/test_check_reproducible.py
|
|
635
643
|
tests/unit/test_claude_settings.py
|
|
636
644
|
tests/unit/test_clean_internal_cache.py
|
|
637
645
|
tests/unit/test_cliparse.py
|
|
@@ -710,6 +718,7 @@ tests/unit/test_mutation_shards.py
|
|
|
710
718
|
tests/unit/test_mutation_subfile_shards.py
|
|
711
719
|
tests/unit/test_mutmut_source_paths.py
|
|
712
720
|
tests/unit/test_nethttp.py
|
|
721
|
+
tests/unit/test_normalize_sdist.py
|
|
713
722
|
tests/unit/test_output.py
|
|
714
723
|
tests/unit/test_page_budget.py
|
|
715
724
|
tests/unit/test_paths.py
|
|
@@ -213,8 +213,8 @@ of the security-design document for the full account.
|
|
|
213
213
|
|
|
214
214
|
## Gold
|
|
215
215
|
|
|
216
|
-
Gold is **23** criteria on top of silver.
|
|
217
|
-
|
|
216
|
+
Gold is **23** criteria on top of silver. Seventeen are Met, two are N/A and
|
|
217
|
+
four are Unmet. Three of the four are about how many people work on boost
|
|
218
218
|
rather than about the code, so no pull request can close them.
|
|
219
219
|
|
|
220
220
|
That count is worth a note, because an earlier version of this section said 21
|
|
@@ -225,10 +225,9 @@ like a plausible total, so nothing flagged it; the gap only appeared on the
|
|
|
225
225
|
submission form, where 23 rows were waiting. A count that looks reasonable is
|
|
226
226
|
not a checked count.
|
|
227
227
|
|
|
228
|
-
Read this section as the honest ceiling.
|
|
229
|
-
boost stops on its own: of the
|
|
230
|
-
|
|
231
|
-
recruiting problem.
|
|
228
|
+
Read this section as the honest ceiling. Nineteen of twenty-three is where
|
|
229
|
+
boost stops on its own: of the four that remain, one is engineering (a host
|
|
230
|
+
that sets response headers) and three are a recruiting problem.
|
|
232
231
|
|
|
233
232
|
### Prerequisites and project oversight
|
|
234
233
|
|
|
@@ -265,7 +264,7 @@ recruiting problem.
|
|
|
265
264
|
|
|
266
265
|
| Criterion | Cat. | Answer | Evidence |
|
|
267
266
|
|---|---|---|---|
|
|
268
|
-
| `build_reproducible` | MUST | **
|
|
267
|
+
| `build_reproducible` | MUST | **Met** | Measured, not assumed: `scripts/check_reproducible.py` builds the project twice with `SOURCE_DATE_EPOCH` pinned to the same value both times and diffs the results — both the **wheel and the sdist are now bit-identical**. They were not: `setuptools` writes each sdist tar member's real mtime plus the builder's `uid`/`gid`/user name with no override, so 54 members differed between builds two seconds apart ([pypa/setuptools#2133](https://github.com/pypa/setuptools/issues/2133), open since 2020). `scripts/normalize_sdist.py` now clamps that in `publish.yml`, between the build and `twine check`, and the release toolchain that produces the artifacts is hash-pinned (`requirements/release-tools.txt`) with `pyproject.toml`'s `[build-system].requires` exact-pinned rather than left as a floor. The full measurement and the commands to reproduce it are in [docs/verifying-releases.md](https://github.com/jonnyeclectic/boost/blob/main/docs/verifying-releases.md#can-you-rebuild-it-yourself-yes--the-measurement). N/A would be wrong: boost ships wheels. |
|
|
269
268
|
|
|
270
269
|
### Test invocation and coverage
|
|
271
270
|
|
|
@@ -303,8 +302,6 @@ recruiting problem.
|
|
|
303
302
|
- `bus_factor`, `contributors_unassociated`, `two_person_review` — **a second
|
|
304
303
|
person**, sustained. Not a document, not a check, and not something to
|
|
305
304
|
simulate with a second account.
|
|
306
|
-
- `build_reproducible` — pin the release build toolchain, then normalise the
|
|
307
|
-
sdist tarball.
|
|
308
305
|
- `hardened_site` — host the documentation somewhere that lets you set
|
|
309
306
|
response headers.
|
|
310
307
|
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: branch-current-gate
|
|
3
|
+
board: code
|
|
4
|
+
section: health
|
|
5
|
+
status: inflight
|
|
6
|
+
category: CI · Release safety
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: High
|
|
9
|
+
wow: 4
|
|
10
|
+
note: two protection mechanisms disagreed; the binding one had the safety off
|
|
11
|
+
order: 10
|
|
12
|
+
owner: loop/generated-freshness
|
|
13
|
+
pr:
|
|
14
|
+
title: main went red because "require branches up to date" was never actually on
|
|
15
|
+
---
|
|
16
|
+
Two pull requests, each green against the <code>main</code> it was tested on, merged into a
|
|
17
|
+
combination that turned <code>main</code> red. Their source files did not conflict. The
|
|
18
|
+
<b>generated</b> <code>docs/roadmap.html</code> did — and a squash merge takes one side of a
|
|
19
|
+
generated file <b>without ever reporting a conflict</b>. The board's "Loop finds" counter was
|
|
20
|
+
correct on both branches and wrong for their union.
|
|
21
|
+
<b>Seventeen jobs failed on one line.</b> Ten test legs, the lint job and all six mutation
|
|
22
|
+
shards — the shards because the unit suite runs inside <code>mutants/</code>, where
|
|
23
|
+
<code>test_roadmap_fresh</code> fails baseline <i>collection</i>, so a stale generated file
|
|
24
|
+
reads as "the mutation gate could not start". And because <code>ci</code> was red on
|
|
25
|
+
<code>main</code>, the release workflow's guard never armed: two merged pull requests, one of
|
|
26
|
+
them the reproducible-build pipeline, sat on <code>main</code> with no tag.
|
|
27
|
+
<b>The root cause was a setting, and the trap was that it looked set.</b> The repository asks
|
|
28
|
+
GitHub to require branches be up to date <b>twice</b>. Classic branch protection has
|
|
29
|
+
<code>strict: true</code> — and <code>enforce_admins: false</code>, so it does not apply to the
|
|
30
|
+
one account that merges. The active ruleset, which has no bypass actors and therefore does
|
|
31
|
+
apply, had <code>strict_required_status_checks_policy: false</code>. Two mechanisms, and the
|
|
32
|
+
binding one had the safety off. They also disagreed on how many checks are required: 14, 20,
|
|
33
|
+
and 21 in <code>required-checks.txt</code>.
|
|
34
|
+
<b>Fixed both ways.</b> The ruleset now enforces up-to-date merges, verified by reading it back
|
|
35
|
+
from the API rather than trusting the settings page. And <code>branch-current</code> is now a
|
|
36
|
+
required check, because that setting is invisible config that drifted once and can drift again
|
|
37
|
+
— a required check is in the diff, in <code>required-checks.txt</code>, and shows up in review.
|
|
38
|
+
Within minutes of the fix, GitHub moved two open pull requests to <code>behind</code> and
|
|
39
|
+
refused them; an hour earlier both would have merged and broken <code>main</code> a second time.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: cli-command-audit
|
|
3
|
+
board: code
|
|
4
|
+
section: shipped
|
|
5
|
+
status: shipped
|
|
6
|
+
category: Quality · CLI
|
|
7
|
+
complexity: M
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 3
|
|
10
|
+
note: audited all 80 COMMANDS entries against a disposable HOME; 4 real defects fixed with tests
|
|
11
|
+
order: 128
|
|
12
|
+
owner: loop/verify
|
|
13
|
+
pr:
|
|
14
|
+
title: All 80 <code>boost</code> commands audited against a disposable HOME — four defects fixed
|
|
15
|
+
---
|
|
16
|
+
Every command in <code>boost_cli/cli.py</code>'s <code>COMMANDS</code> table (not memory of
|
|
17
|
+
what the CLI does) was exercised for real: <code>--help</code> against its actual
|
|
18
|
+
<code>argparse</code> definition, the happy path against its one-line summary and
|
|
19
|
+
<code>docs/commands.html</code>, exit codes on success/error/empty-store/nonexistent-name,
|
|
20
|
+
and — for anything that mutates state — the real lock file, symlinks and cache on
|
|
21
|
+
disk, not just stdout. Four parallel audits split the ~80 commands by
|
|
22
|
+
<code>COMMANDS</code>'s own groups (pkg+find, info+tap+ai, quality/safety, cfg+team) so
|
|
23
|
+
every command got adversarial testing (tampered store content, corrupted lock JSON,
|
|
24
|
+
deleted store dirs, real signed/tampered minisign manifests) rather than a clean-state
|
|
25
|
+
smoke pass.
|
|
26
|
+
|
|
27
|
+
The known failure modes this codebase has shipped before were hunted deliberately: a
|
|
28
|
+
command reporting success without doing the thing, a raw read that misses a tap's sparse
|
|
29
|
+
checkout, <code>Path.resolve(strict=True)</code>'s <code>RuntimeError</code>/<code>OSError</code>
|
|
30
|
+
split between Python 3.12 and 3.13+, and a dry-run that silently no-ops or over-reports.
|
|
31
|
+
<code>boost trust add</code> — the one command with a documented history of exactly the
|
|
32
|
+
first failure mode (a merged autofix once deleted its fingerprint line) — was
|
|
33
|
+
re-verified against real Ed25519 signatures and tampering and held up.
|
|
34
|
+
|
|
35
|
+
Four real defects, each fixed with a failing-then-passing test. <code>boost conflict</code>
|
|
36
|
+
and <code>boost audit --skills</code> kept reporting a MED conflict finding against a skill
|
|
37
|
+
after it was quarantined — quarantine's own documented purpose ("isolate a problematic
|
|
38
|
+
skill") gave no relief from the one command whose entire job is to report that condition;
|
|
39
|
+
both now exclude quarantined skills from conflict pairing. <code>boost catalog
|
|
40
|
+
--import</code> tells the receiver "<code>boost install</code> clones just the one registry
|
|
41
|
+
it needs", but <code>install</code> performed no lazy clone — the one end-to-end path the
|
|
42
|
+
command advertises (import → search → install) failed with a misleading "source
|
|
43
|
+
vanished from tap" error; <code>store.source_dir_for</code> now clones a
|
|
44
|
+
registered-but-uncloned tap on demand, the single choke point every consumer of tap content
|
|
45
|
+
already goes through. <code>boost onboard</code>'s own docstring promises a byte-for-byte
|
|
46
|
+
no-op on an unchanged re-run, but <code>.boost/telemetry.json</code> stamped a fresh
|
|
47
|
+
timestamp on every invocation, so the comparison could only pass by wall-clock luck — a
|
|
48
|
+
scripted <code>boost onboard --pr</code> on an already-onboarded repo would open a PR
|
|
49
|
+
containing only a timestamp bump, forever; it now preserves the existing file's
|
|
50
|
+
<code>created</code> field. <code>boost heal --dry-run</code> double-reported the same
|
|
51
|
+
broken symlink under two different messages ("would remove broken link" and "would remove
|
|
52
|
+
stale link") because the real run unlinks before computing <code>sync_plan()</code> while
|
|
53
|
+
dry-run never unlinks anything — a preview overstating what running <code>heal</code> for
|
|
54
|
+
real actually does.
|
|
55
|
+
|
|
56
|
+
A fifth, latent-only finding was fixed alongside them: <code>quality.py</code>'s
|
|
57
|
+
<code>_resolve_as_far_as_it_exists</code> caught only <code>OSError</code> around a
|
|
58
|
+
non-strict <code>Path.resolve()</code>, the same symlink-loop gap
|
|
59
|
+
<code>store.resolves_into_store</code> had already been fixed for. Verified empirically
|
|
60
|
+
(not just read) on both interpreters: <code>Path.resolve(strict=False)</code> on a
|
|
61
|
+
symlink-loop path returns silently on 3.14 and raises <code>RuntimeError</code> on 3.12 —
|
|
62
|
+
confirmed with a live symlink cycle on both, and the full affected test suite reran green
|
|
63
|
+
on a real Python 3.12 venv.
|
|
64
|
+
|
|
65
|
+
Two findings were investigated and deliberately left alone after checking the existing
|
|
66
|
+
test suite rather than trusting the audit's framing: <code>boost drift</code> always
|
|
67
|
+
exiting 0 is pinned as intentional by <code>tests/functional/test_cli_quality.py</code>'s
|
|
68
|
+
own comment ("rc stays 0: drift only reports"), and <code>boost who</code>'s aggregate view
|
|
69
|
+
counting every journal subject (not just install/edit/evolve/distill/tag actions) toward
|
|
70
|
+
"skill expertise" is pinned the same way by an existing test asserting a tap name in the
|
|
71
|
+
skills set. Flipping either would contradict a deliberately written existing test, not fix
|
|
72
|
+
an oversight.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: reproducible-release-artifacts
|
|
3
|
+
board: code
|
|
4
|
+
section: pipeline
|
|
5
|
+
status: shipped
|
|
6
|
+
category: Security · Reproducibility
|
|
7
|
+
complexity: M
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 3
|
|
10
|
+
note: wheel + sdist now bit-identical; setuptools#2133 has no native fix
|
|
11
|
+
order: 128
|
|
12
|
+
owner: loop/repro
|
|
13
|
+
pr:
|
|
14
|
+
title: Reproducible release builds — the sdist half nobody's setuptools does for you
|
|
15
|
+
---
|
|
16
|
+
<code>build_reproducible</code> was Unmet on measurement: with <code>SOURCE_DATE_EPOCH</code> set,
|
|
17
|
+
two builds of the same commit produced a <b>bit-identical wheel</b> and a <b>differing
|
|
18
|
+
sdist</b>. <code>setuptools</code> writes each tar member's real build-time mtime, and the
|
|
19
|
+
builder's <code>uid</code>/<code>gid</code>/user name, into the sdist with no environment
|
|
20
|
+
variable to override either — 54 members differed between builds two seconds apart on the
|
|
21
|
+
same machine, and a build on another machine would have differed in the ownership fields too.
|
|
22
|
+
|
|
23
|
+
<b>The upstream knob doesn't exist.</b> <a href="https://github.com/pypa/setuptools/issues/2133">
|
|
24
|
+
pypa/setuptools#2133</a> has asked for <code>SOURCE_DATE_EPOCH</code> support in sdist since 2020;
|
|
25
|
+
it is still open, with no fix in the version this project pins. The one PyPI package that already
|
|
26
|
+
patches it, <code>setuptools-reproducible</code>, does so by replacing
|
|
27
|
+
<code>build-backend</code> entirely — and its dependency closure could not be hash-pinned
|
|
28
|
+
the way the rest of boost's toolchain is, because <code>[build-system].requires</code> is a bare
|
|
29
|
+
PEP 508 requirement string with no hash field. So the fix is a small, stdlib-only
|
|
30
|
+
post-processing step instead: <code>scripts/normalize_sdist.py</code> clamps every member's
|
|
31
|
+
mtime, zeroes uid/gid, blanks uname/gname, and resets the gzip container's own header
|
|
32
|
+
timestamp, run in <code>publish.yml</code> between <code>python -m build</code> and
|
|
33
|
+
<code>twine check</code> — so nothing is ever attested un-normalized.
|
|
34
|
+
|
|
35
|
+
<b>The wheel had a real gap too, not just the sdist.</b> <code>publish.yml</code> never set
|
|
36
|
+
<code>SOURCE_DATE_EPOCH</code> at all before this — the "bit-identical wheel" measurement
|
|
37
|
+
only held in a controlled local test where the variable was exported by hand. The actual release
|
|
38
|
+
pipeline was building an unreproducible wheel as well, and nothing had noticed.
|
|
39
|
+
|
|
40
|
+
<b>The toolchain that determines the bytes is now pinned twice.</b>
|
|
41
|
+
<code>requirements/release-tools.txt</code> hash-pins the outer <code>build</code>/
|
|
42
|
+
<code>twine</code> install (<code>publish.yml</code> used to run
|
|
43
|
+
<code>pip install build twine</code> unpinned, so last month's toolchain was not recoverable
|
|
44
|
+
from the repository). But <code>python -m build</code> resolves <code>setuptools</code> and
|
|
45
|
+
<code>setuptools-scm</code> fresh into an isolated build environment regardless of what the
|
|
46
|
+
outer install has — that's the part that actually produces the artifact bytes — so
|
|
47
|
+
<code>pyproject.toml</code>'s <code>[build-system].requires</code> is now exact-pinned
|
|
48
|
+
(<code>setuptools==83.0.0</code>, <code>setuptools-scm==10.2.1</code>) rather than left as
|
|
49
|
+
<code>>=64</code>/<code>>=8</code>. No hash field exists at that layer; exact-pinning is
|
|
50
|
+
the strongest promise PEP 508 allows there.
|
|
51
|
+
|
|
52
|
+
<b>Falsifiable, not asserted.</b> <code>scripts/check_reproducible.py</code> builds the project
|
|
53
|
+
twice with the same <code>SOURCE_DATE_EPOCH</code>, runs the same sdist fix the release pipeline
|
|
54
|
+
runs, and diffs the results by sha256 — <code>--skip-normalize</code> reruns without the fix
|
|
55
|
+
to show the gap it closes. Degrades to exit 2 ("could not check") rather than exit 0
|
|
56
|
+
when <code>build</code> isn't installed, matching how boost's own CI controls have failed
|
|
57
|
+
silently before: a check that can't run must never read as a pass.
|
|
58
|
+
|
|
59
|
+
<code>docs/openssf-badge.md</code>'s <code>build_reproducible</code> row now reads <b>Met</b>;
|
|
60
|
+
<code>docs/verifying-releases.md</code> carries the re-run measurement and how to rebuild from a
|
|
61
|
+
git tag (the sdist itself carries no <code>.git</code> history, so <code>SOURCE_DATE_EPOCH</code>
|
|
62
|
+
has to come from a checkout, not the tarball).
|