boost-skill-cli 1.0.269__tar.gz → 1.0.271__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.0.269/boost_skill_cli.egg-info → boost_skill_cli-1.0.271}/PKG-INFO +1 -1
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271/boost_skill_cli.egg-info}/PKG-INFO +1 -1
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_skill_cli.egg-info/SOURCES.txt +4 -0
- boost_skill_cli-1.0.271/docs/roadmap/items/ci-time-is-now-runner-queueing.md +40 -0
- boost_skill_cli-1.0.271/docs/roadmap/items/code-scanning-rule-can-be-restored.md +47 -0
- boost_skill_cli-1.0.271/docs/roadmap/items/mutation-shard-floor-is-one-file.md +43 -0
- boost_skill_cli-1.0.271/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +36 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap.html +151 -1
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/.gitattributes +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/.gitignore +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/.lycheeignore +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/.vale.ini +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/CLAUDE.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/LICENSE +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/MANIFEST.in +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/Makefile +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/README.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/SECURITY.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/codecov.yml +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/adapters.html +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/carousel.html +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/commands.html +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/demo.gif +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/demo.tape +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/eval.html +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/index.html +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/examples/README.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/index.html +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/noxfile.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/pyproject.toml +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/setup.cfg +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/sonar-project.properties +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/style/README.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/style/boost.css +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/style/boost.js +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/style/demo.html +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/conftest.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.0.269 → boost_skill_cli-1.0.271}/tests/visual/visual_check.mjs +0 -0
|
@@ -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.0.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 0,
|
|
21
|
+
__version__ = version = '1.0.271'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 271)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -170,7 +170,9 @@ docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md
|
|
|
170
170
|
docs/roadmap/items/capability-manifest-and-least-privilege-policy.md
|
|
171
171
|
docs/roadmap/items/ci-job-timeout-minutes.md
|
|
172
172
|
docs/roadmap/items/ci-summary-step-fails-itself.md
|
|
173
|
+
docs/roadmap/items/ci-time-is-now-runner-queueing.md
|
|
173
174
|
docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md
|
|
175
|
+
docs/roadmap/items/code-scanning-rule-can-be-restored.md
|
|
174
176
|
docs/roadmap/items/command-carousel-page.md
|
|
175
177
|
docs/roadmap/items/command-reference-docs-site.md
|
|
176
178
|
docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md
|
|
@@ -238,6 +240,7 @@ docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md
|
|
|
238
240
|
docs/roadmap/items/mutation-hardening-core-frontmatter-py.md
|
|
239
241
|
docs/roadmap/items/mutation-hardening-core-gitutil-py.md
|
|
240
242
|
docs/roadmap/items/mutation-hardening-core-store-py.md
|
|
243
|
+
docs/roadmap/items/mutation-shard-floor-is-one-file.md
|
|
241
244
|
docs/roadmap/items/mypy-strict-mode-for-commands.md
|
|
242
245
|
docs/roadmap/items/negative-limit-inverts-log-pulse-output.md
|
|
243
246
|
docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md
|
|
@@ -316,6 +319,7 @@ docs/roadmap/items/workflow-install-native-materialization.md
|
|
|
316
319
|
docs/roadmap/items/workflow-linting-actionlint.md
|
|
317
320
|
docs/roadmap/items/workflow-sast-zizmor.md
|
|
318
321
|
docs/roadmap/items/workspace-scope-install.md
|
|
322
|
+
docs/roadmap/items/zizmor-pin-is-a-yanked-release.md
|
|
319
323
|
examples/README.md
|
|
320
324
|
examples/adapt-demo.sh
|
|
321
325
|
examples/boost-run-prototype.sh
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: ci-time-is-now-runner-queueing
|
|
3
|
+
board: code
|
|
4
|
+
section: pipeline
|
|
5
|
+
status: planned
|
|
6
|
+
category: CI speed
|
|
7
|
+
complexity: M
|
|
8
|
+
impact: High
|
|
9
|
+
wow: 4
|
|
10
|
+
note: 104 job-min queued vs 236 executing — 31% of CI is waiting for a runner
|
|
11
|
+
order: 62
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: A third of CI job time is spent waiting for a runner, not running
|
|
15
|
+
---
|
|
16
|
+
With the mutation gate no longer dominating, the largest remaining term in CI wall clock is
|
|
17
|
+
<b>queueing</b>. Measured over six consecutive successful <code>ci</code> runs: <b>104
|
|
18
|
+
job-minutes queued</b> against <b>236 job-minutes executing</b> — <b>31%</b> of all job
|
|
19
|
+
time spent waiting for a runner.
|
|
20
|
+
|
|
21
|
+
<b>The obvious metric lies.</b> A run's <code>run_started_at</code> minus
|
|
22
|
+
<code>created_at</code> is <b>0.0 for every run</b>, which reads as "no queueing anywhere".
|
|
23
|
+
Queueing happens per <em>job</em>, not per run, so it is only visible as
|
|
24
|
+
<code>job.started_at - job.created_at</code>. Anything measuring this at run level will
|
|
25
|
+
conclude, wrongly, that there is nothing to fix.
|
|
26
|
+
|
|
27
|
+
The per-run spread shows what drives it — median job queue by run:
|
|
28
|
+
<code>c36c53a7</code> 0.1 min, <code>c15ed9da</code> 0.1, <code>903b704f</code> 0.2,
|
|
29
|
+
<code>638bffeb</code> 0.7, <code>ad71ba99</code> <b>2.5</b>, <code>9e190537</code> <b>2.9</b>.
|
|
30
|
+
That is a 29× swing driven not by the change under test but by how many sibling
|
|
31
|
+
<code>loop/*</code> branches and Dependabot PRs happen to be live at the same moment. It is why
|
|
32
|
+
one merge took <b>41 minutes</b> wall clock with a max shard of only 11.4.
|
|
33
|
+
|
|
34
|
+
Sharding the mutation gate made this worse on purpose: it traded one runner slot for six. That
|
|
35
|
+
is the right trade for latency in isolation, and the wrong one to keep making blindly while a
|
|
36
|
+
dozen branches are in flight, because every concurrent PR now multiplies its footprint. Options,
|
|
37
|
+
roughly in increasing order of intrusiveness: a <code>concurrency</code> group that cancels
|
|
38
|
+
superseded PR runs; capping the shard matrix with <code>max-parallel</code>; or making the shard
|
|
39
|
+
count adaptive. Worth measuring before choosing — this item is the measurement, not the
|
|
40
|
+
fix.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: code-scanning-rule-can-be-restored
|
|
3
|
+
board: code
|
|
4
|
+
section: trust
|
|
5
|
+
status: planned
|
|
6
|
+
category: Release safety
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 4
|
|
10
|
+
note: safe scoped to CodeQL (0 open) — adding Scorecard deadlocks every merge
|
|
11
|
+
order: 54
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: The <code>code_scanning</code> ruleset rule can go back on — but only scoped to CodeQL
|
|
15
|
+
---
|
|
16
|
+
Repairing the <code>main</code> ruleset dropped its <code>code_scanning</code> rule in favour of
|
|
17
|
+
<code>codeql-analyze</code> as a required status check (see
|
|
18
|
+
<code>main-ruleset-ref-pattern-has-literal-quotes</code>). That was the safe call at the time, and
|
|
19
|
+
it left an open question: can the rule come back? <b>Yes — and the thing that would break it
|
|
20
|
+
is not what it looks like.</b>
|
|
21
|
+
|
|
22
|
+
<b>Nothing is blocking it.</b> Verified without touching the live ruleset: POST a throwaway
|
|
23
|
+
ruleset with <code>enforcement: disabled</code> and a ref pattern matching no branch, carrying
|
|
24
|
+
<code>code_scanning</code> for tool <code>CodeQL</code> → <b>HTTP 201</b>, rule stored intact.
|
|
25
|
+
Delete it, then diff the live ruleset against a backup taken beforehand → no drift. That
|
|
26
|
+
disabled-and-non-matching probe is the general way to test a ruleset change without risking
|
|
27
|
+
anyone's in-flight pull request.
|
|
28
|
+
|
|
29
|
+
<b>The stale analyses are a red herring.</b> 693 analyses still carry the old
|
|
30
|
+
<code>codeql.yml:analyze</code> category against 122 on the current <code>codeql-analyze</code>,
|
|
31
|
+
which looks like it should matter and does not: the rule keys on <b>tool name</b>, not category.
|
|
32
|
+
Deleting them is irreversible, destroys alert history, and fixes nothing. Don't.
|
|
33
|
+
|
|
34
|
+
<b>The actual hazard is the tool list.</b> Three tools file into the same code-scanning inbox.
|
|
35
|
+
CodeQL has <b>0 open</b> alerts (9 dismissed, 17 fixed). Scorecard has <b>7 open, every one
|
|
36
|
+
<code>severity=error</code></b> — and they are posture metrics that must not be dismissed,
|
|
37
|
+
so they will stay open. Enabling the rule with Scorecard in its tool list therefore blocks
|
|
38
|
+
<em>every merge in the repository, immediately</em>. The GitHub UI offers every tool that has
|
|
39
|
+
reported analyses, so Scorecard sits right next to CodeQL in the picker. That is almost certainly
|
|
40
|
+
why this has been assumed to be blocked.
|
|
41
|
+
|
|
42
|
+
Scoped to CodeQL alone it is safe and adds real protection: <code>codeql.yml</code> carries no
|
|
43
|
+
path filters and runs on <code>push</code>, <code>pull_request</code> and
|
|
44
|
+
<code>merge_group</code>, so it always reports and cannot produce the never-reports deadlock this
|
|
45
|
+
repo has hit twice. And it catches something the status check does not —
|
|
46
|
+
<code>codeql-analyze</code> passes when the <em>job</em> succeeds, including when it succeeds
|
|
47
|
+
having found error-severity alerts.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: mutation-shard-floor-is-one-file
|
|
3
|
+
board: code
|
|
4
|
+
section: pipeline
|
|
5
|
+
status: planned
|
|
6
|
+
category: CI speed
|
|
7
|
+
complexity: M
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 3
|
|
10
|
+
note: shard 0 is store.py alone — 9.3-11.7 min against a 6.1 even split
|
|
11
|
+
order: 61
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: The mutation gate's floor is a single file — shard 0 <em>is</em> <code>store.py</code>
|
|
15
|
+
---
|
|
16
|
+
Sharding took the mutation gate from ~28 minutes to ~12 (see
|
|
17
|
+
<code>mutation-gate-was-the-whole-critical-path</code>), but it cannot go lower without
|
|
18
|
+
splitting one file. Measured across four consecutive six-shard runs:
|
|
19
|
+
|
|
20
|
+
<code>638bffeb</code> ran 1.9, 3.9, 5.7, 6.7, 7.2, <b>11.7</b> minutes;
|
|
21
|
+
<code>02c18bd6</code> ran 2.7, 5.0, 5.2, 5.5, 5.9, <b>11.7</b>; <code>fc427839</code> ran 3.1,
|
|
22
|
+
4.8, 5.3, 6.4, 7.3, <b>9.7</b>; and <code>f42e617b</code> ran 2.9, 4.9, 5.5, 6.6, 7.3,
|
|
23
|
+
<b>9.3</b>.
|
|
24
|
+
<b><code>mutation-shard (0)</code> was the slowest leg in all four.</b> Total work is
|
|
25
|
+
36–37 job-minutes, so a perfectly even split would be <b>6.1</b>; the actual critical
|
|
26
|
+
path is 9.3–11.7, or <b>1.5–1.9×</b> that. The gap is not bad packing —
|
|
27
|
+
the planner balances mutant <em>count</em> to within 1.10× of ideal. It is that count is
|
|
28
|
+
a poor proxy for time: measured throughput spans <b>3.39 to 14.19 mutants/second</b>, because a
|
|
29
|
+
<code>store.py</code> mutant re-runs a far larger covering test set than an
|
|
30
|
+
<code>ed25519.py</code> one, and survivors run their tests to completion where kills exit early.
|
|
31
|
+
|
|
32
|
+
Re-weighting the planner by seconds would even out the <em>billed</em> minutes but not the wall
|
|
33
|
+
clock, because <code>store.py</code> is <b>1931 mutants (18.4% of the repo)</b> in one file and
|
|
34
|
+
longest-processing-time packing cannot place a single file across two bins. The floor is that
|
|
35
|
+
file.
|
|
36
|
+
|
|
37
|
+
The way under it: mutant names are addressable per function, so
|
|
38
|
+
<code>boost_cli.core.store.install_*</code> can be its own shard. That would bring the critical
|
|
39
|
+
path toward the 6.1-minute even split. Two things must survive the change —
|
|
40
|
+
<code>pattern_for()</code> still has to emit patterns that match nothing else, and
|
|
41
|
+
<code>cmd_merge</code>'s completeness assertion has to keep failing closed, since mutmut counts
|
|
42
|
+
an unrun mutant inside <code>total</code> and a partial merge would silently depress the score
|
|
43
|
+
rather than error.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: zizmor-pin-is-a-yanked-release
|
|
3
|
+
board: code
|
|
4
|
+
section: pipeline
|
|
5
|
+
status: planned
|
|
6
|
+
category: Security · CI/CD
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 4
|
|
10
|
+
note: the only yanked release of 66 — and the required lint job pins exactly it
|
|
11
|
+
order: 63
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: The required <code>lint</code> job pins <code>zizmor==1.27.0</code> — a yanked release
|
|
15
|
+
---
|
|
16
|
+
<code>ci.yml</code> runs the workflow SAST step as
|
|
17
|
+
<code>pipx run zizmor==1.27.0 .github/workflows</code>. PyPI marks <b>1.27.0 as yanked</b>, with
|
|
18
|
+
<code>yanked_reason: GHSA-f42p-wjw5-97qh</code>. It is the <b>only yanked release out of 66</b>,
|
|
19
|
+
and <b>1.28.0</b> is the successor.
|
|
20
|
+
|
|
21
|
+
Exact-pinning the security scanner is correct — an unpinned linter is how
|
|
22
|
+
<code>ruff-defaults-broke-boost-lint</code> happened. Pinning to a version its maintainer has
|
|
23
|
+
<em>withdrawn for a security advisory</em> is the failure mode on the other side, and it is
|
|
24
|
+
quieter: a yank does not stop an exact pin from resolving. <code>pip</code> installs
|
|
25
|
+
<code>1.27.0</code> and emits a warning nobody reads in CI logs, so the required <code>lint</code>
|
|
26
|
+
gate goes on passing while running a withdrawn build of the tool that audits the workflows
|
|
27
|
+
driving a Trusted-Publisher release.
|
|
28
|
+
|
|
29
|
+
Two things worth doing together. Bump to <code>1.28.0</code> and confirm the four documented
|
|
30
|
+
<code>dangerous-triggers</code> exemptions in <code>.github/zizmor.yml</code> still suppress
|
|
31
|
+
cleanly — the line-anchored ignore entries (<code>publish.yml:19</code>,
|
|
32
|
+
<code>sbom.yml:29</code>, …) are exactly the kind of thing a version bump can invalidate.
|
|
33
|
+
And sweep the other exact pins for yanks: nothing currently checks for this. <code>pip-audit</code>
|
|
34
|
+
catches CVEs in the resolved dependency closure, but a yanked <em>pinned tool</em> is neither a
|
|
35
|
+
CVE in the closure nor a manifest diff, so <code>osv-scanner</code> does not see it either. This
|
|
36
|
+
was found by accident, while installing zizmor locally to verify an unrelated change.
|
|
@@ -110,7 +110,7 @@
|
|
|
110
110
|
<div class="stat"><b>16</b><span>Shipped</span></div>
|
|
111
111
|
<div class="stat"><b>1</b><span>Next up</span></div>
|
|
112
112
|
<div class="stat"><b>4</b><span>Planned</span></div>
|
|
113
|
-
<div class="stat"><b>
|
|
113
|
+
<div class="stat"><b>166</b><span>Loop finds</span></div>
|
|
114
114
|
<!-- /ROADMAP:stats -->
|
|
115
115
|
</div>
|
|
116
116
|
</section>
|
|
@@ -2326,6 +2326,113 @@ toward the 5.1-minute even split of the 30.8 minutes of total work.</p>
|
|
|
2326
2326
|
<span class="m">28 min of CI became 12; the new floor is one file, store.py</span>
|
|
2327
2327
|
</div>
|
|
2328
2328
|
</article>
|
|
2329
|
+
|
|
2330
|
+
<article class="cap rcard" id="mutation-shard-floor-is-one-file">
|
|
2331
|
+
<div class="head"><span class="pill planned">Planned</span><span class="cat">CI speed</span></div>
|
|
2332
|
+
<h3>The mutation gate's floor is a single file — shard 0 <em>is</em> <code>store.py</code></h3>
|
|
2333
|
+
<p>Sharding took the mutation gate from ~28 minutes to ~12 (see
|
|
2334
|
+
<code>mutation-gate-was-the-whole-critical-path</code>), but it cannot go lower without
|
|
2335
|
+
splitting one file. Measured across four consecutive six-shard runs:
|
|
2336
|
+
|
|
2337
|
+
<code>638bffeb</code> ran 1.9, 3.9, 5.7, 6.7, 7.2, <b>11.7</b> minutes;
|
|
2338
|
+
<code>02c18bd6</code> ran 2.7, 5.0, 5.2, 5.5, 5.9, <b>11.7</b>; <code>fc427839</code> ran 3.1,
|
|
2339
|
+
4.8, 5.3, 6.4, 7.3, <b>9.7</b>; and <code>f42e617b</code> ran 2.9, 4.9, 5.5, 6.6, 7.3,
|
|
2340
|
+
<b>9.3</b>.
|
|
2341
|
+
<b><code>mutation-shard (0)</code> was the slowest leg in all four.</b> Total work is
|
|
2342
|
+
36–37 job-minutes, so a perfectly even split would be <b>6.1</b>; the actual critical
|
|
2343
|
+
path is 9.3–11.7, or <b>1.5–1.9×</b> that. The gap is not bad packing —
|
|
2344
|
+
the planner balances mutant <em>count</em> to within 1.10× of ideal. It is that count is
|
|
2345
|
+
a poor proxy for time: measured throughput spans <b>3.39 to 14.19 mutants/second</b>, because a
|
|
2346
|
+
<code>store.py</code> mutant re-runs a far larger covering test set than an
|
|
2347
|
+
<code>ed25519.py</code> one, and survivors run their tests to completion where kills exit early.
|
|
2348
|
+
|
|
2349
|
+
Re-weighting the planner by seconds would even out the <em>billed</em> minutes but not the wall
|
|
2350
|
+
clock, because <code>store.py</code> is <b>1931 mutants (18.4% of the repo)</b> in one file and
|
|
2351
|
+
longest-processing-time packing cannot place a single file across two bins. The floor is that
|
|
2352
|
+
file.
|
|
2353
|
+
|
|
2354
|
+
The way under it: mutant names are addressable per function, so
|
|
2355
|
+
<code>boost_cli.core.store.install_*</code> can be its own shard. That would bring the critical
|
|
2356
|
+
path toward the 6.1-minute even split. Two things must survive the change —
|
|
2357
|
+
<code>pattern_for()</code> still has to emit patterns that match nothing else, and
|
|
2358
|
+
<code>cmd_merge</code>'s completeness assertion has to keep failing closed, since mutmut counts
|
|
2359
|
+
an unrun mutant inside <code>total</code> and a partial merge would silently depress the score
|
|
2360
|
+
rather than error.</p>
|
|
2361
|
+
<div class="meta">
|
|
2362
|
+
<span class="m">Complexity <b>M</b></span>
|
|
2363
|
+
<span class="m">Impact <b>Med</b></span>
|
|
2364
|
+
<span class="m">Wow <b class="wow">★★★</b></span>
|
|
2365
|
+
<span class="m">shard 0 is store.py alone — 9.3-11.7 min against a 6.1 even split</span>
|
|
2366
|
+
</div>
|
|
2367
|
+
</article>
|
|
2368
|
+
|
|
2369
|
+
<article class="cap rcard" id="ci-time-is-now-runner-queueing">
|
|
2370
|
+
<div class="head"><span class="pill planned">Planned</span><span class="cat">CI speed</span></div>
|
|
2371
|
+
<h3>A third of CI job time is spent waiting for a runner, not running</h3>
|
|
2372
|
+
<p>With the mutation gate no longer dominating, the largest remaining term in CI wall clock is
|
|
2373
|
+
<b>queueing</b>. Measured over six consecutive successful <code>ci</code> runs: <b>104
|
|
2374
|
+
job-minutes queued</b> against <b>236 job-minutes executing</b> — <b>31%</b> of all job
|
|
2375
|
+
time spent waiting for a runner.
|
|
2376
|
+
|
|
2377
|
+
<b>The obvious metric lies.</b> A run's <code>run_started_at</code> minus
|
|
2378
|
+
<code>created_at</code> is <b>0.0 for every run</b>, which reads as "no queueing anywhere".
|
|
2379
|
+
Queueing happens per <em>job</em>, not per run, so it is only visible as
|
|
2380
|
+
<code>job.started_at - job.created_at</code>. Anything measuring this at run level will
|
|
2381
|
+
conclude, wrongly, that there is nothing to fix.
|
|
2382
|
+
|
|
2383
|
+
The per-run spread shows what drives it — median job queue by run:
|
|
2384
|
+
<code>c36c53a7</code> 0.1 min, <code>c15ed9da</code> 0.1, <code>903b704f</code> 0.2,
|
|
2385
|
+
<code>638bffeb</code> 0.7, <code>ad71ba99</code> <b>2.5</b>, <code>9e190537</code> <b>2.9</b>.
|
|
2386
|
+
That is a 29× swing driven not by the change under test but by how many sibling
|
|
2387
|
+
<code>loop/*</code> branches and Dependabot PRs happen to be live at the same moment. It is why
|
|
2388
|
+
one merge took <b>41 minutes</b> wall clock with a max shard of only 11.4.
|
|
2389
|
+
|
|
2390
|
+
Sharding the mutation gate made this worse on purpose: it traded one runner slot for six. That
|
|
2391
|
+
is the right trade for latency in isolation, and the wrong one to keep making blindly while a
|
|
2392
|
+
dozen branches are in flight, because every concurrent PR now multiplies its footprint. Options,
|
|
2393
|
+
roughly in increasing order of intrusiveness: a <code>concurrency</code> group that cancels
|
|
2394
|
+
superseded PR runs; capping the shard matrix with <code>max-parallel</code>; or making the shard
|
|
2395
|
+
count adaptive. Worth measuring before choosing — this item is the measurement, not the
|
|
2396
|
+
fix.</p>
|
|
2397
|
+
<div class="meta">
|
|
2398
|
+
<span class="m">Complexity <b>M</b></span>
|
|
2399
|
+
<span class="m hi">Impact <b>High</b></span>
|
|
2400
|
+
<span class="m">Wow <b class="wow">★★★★</b></span>
|
|
2401
|
+
<span class="m">104 job-min queued vs 236 executing — 31% of CI is waiting for a runner</span>
|
|
2402
|
+
</div>
|
|
2403
|
+
</article>
|
|
2404
|
+
|
|
2405
|
+
<article class="cap rcard" id="zizmor-pin-is-a-yanked-release">
|
|
2406
|
+
<div class="head"><span class="pill planned">Planned</span><span class="cat">Security · CI/CD</span></div>
|
|
2407
|
+
<h3>The required <code>lint</code> job pins <code>zizmor==1.27.0</code> — a yanked release</h3>
|
|
2408
|
+
<p><code>ci.yml</code> runs the workflow SAST step as
|
|
2409
|
+
<code>pipx run zizmor==1.27.0 .github/workflows</code>. PyPI marks <b>1.27.0 as yanked</b>, with
|
|
2410
|
+
<code>yanked_reason: GHSA-f42p-wjw5-97qh</code>. It is the <b>only yanked release out of 66</b>,
|
|
2411
|
+
and <b>1.28.0</b> is the successor.
|
|
2412
|
+
|
|
2413
|
+
Exact-pinning the security scanner is correct — an unpinned linter is how
|
|
2414
|
+
<code>ruff-defaults-broke-boost-lint</code> happened. Pinning to a version its maintainer has
|
|
2415
|
+
<em>withdrawn for a security advisory</em> is the failure mode on the other side, and it is
|
|
2416
|
+
quieter: a yank does not stop an exact pin from resolving. <code>pip</code> installs
|
|
2417
|
+
<code>1.27.0</code> and emits a warning nobody reads in CI logs, so the required <code>lint</code>
|
|
2418
|
+
gate goes on passing while running a withdrawn build of the tool that audits the workflows
|
|
2419
|
+
driving a Trusted-Publisher release.
|
|
2420
|
+
|
|
2421
|
+
Two things worth doing together. Bump to <code>1.28.0</code> and confirm the four documented
|
|
2422
|
+
<code>dangerous-triggers</code> exemptions in <code>.github/zizmor.yml</code> still suppress
|
|
2423
|
+
cleanly — the line-anchored ignore entries (<code>publish.yml:19</code>,
|
|
2424
|
+
<code>sbom.yml:29</code>, …) are exactly the kind of thing a version bump can invalidate.
|
|
2425
|
+
And sweep the other exact pins for yanks: nothing currently checks for this. <code>pip-audit</code>
|
|
2426
|
+
catches CVEs in the resolved dependency closure, but a yanked <em>pinned tool</em> is neither a
|
|
2427
|
+
CVE in the closure nor a manifest diff, so <code>osv-scanner</code> does not see it either. This
|
|
2428
|
+
was found by accident, while installing zizmor locally to verify an unrelated change.</p>
|
|
2429
|
+
<div class="meta">
|
|
2430
|
+
<span class="m">Complexity <b>S</b></span>
|
|
2431
|
+
<span class="m">Impact <b>Med</b></span>
|
|
2432
|
+
<span class="m">Wow <b class="wow">★★★★</b></span>
|
|
2433
|
+
<span class="m">the only yanked release of 66 — and the required lint job pins exactly it</span>
|
|
2434
|
+
</div>
|
|
2435
|
+
</article>
|
|
2329
2436
|
<!-- /ROADMAP:cards -->
|
|
2330
2437
|
|
|
2331
2438
|
</div>
|
|
@@ -3726,6 +3833,49 @@ same-repo PRs and red CI.</p>
|
|
|
3726
3833
|
<span class="m">a PR branch named main could cut a PyPI release</span>
|
|
3727
3834
|
</div>
|
|
3728
3835
|
</article>
|
|
3836
|
+
|
|
3837
|
+
<article class="cap rcard" id="code-scanning-rule-can-be-restored">
|
|
3838
|
+
<div class="head"><span class="pill planned">Planned</span><span class="cat">Release safety</span></div>
|
|
3839
|
+
<h3>The <code>code_scanning</code> ruleset rule can go back on — but only scoped to CodeQL</h3>
|
|
3840
|
+
<p>Repairing the <code>main</code> ruleset dropped its <code>code_scanning</code> rule in favour of
|
|
3841
|
+
<code>codeql-analyze</code> as a required status check (see
|
|
3842
|
+
<code>main-ruleset-ref-pattern-has-literal-quotes</code>). That was the safe call at the time, and
|
|
3843
|
+
it left an open question: can the rule come back? <b>Yes — and the thing that would break it
|
|
3844
|
+
is not what it looks like.</b>
|
|
3845
|
+
|
|
3846
|
+
<b>Nothing is blocking it.</b> Verified without touching the live ruleset: POST a throwaway
|
|
3847
|
+
ruleset with <code>enforcement: disabled</code> and a ref pattern matching no branch, carrying
|
|
3848
|
+
<code>code_scanning</code> for tool <code>CodeQL</code> → <b>HTTP 201</b>, rule stored intact.
|
|
3849
|
+
Delete it, then diff the live ruleset against a backup taken beforehand → no drift. That
|
|
3850
|
+
disabled-and-non-matching probe is the general way to test a ruleset change without risking
|
|
3851
|
+
anyone's in-flight pull request.
|
|
3852
|
+
|
|
3853
|
+
<b>The stale analyses are a red herring.</b> 693 analyses still carry the old
|
|
3854
|
+
<code>codeql.yml:analyze</code> category against 122 on the current <code>codeql-analyze</code>,
|
|
3855
|
+
which looks like it should matter and does not: the rule keys on <b>tool name</b>, not category.
|
|
3856
|
+
Deleting them is irreversible, destroys alert history, and fixes nothing. Don't.
|
|
3857
|
+
|
|
3858
|
+
<b>The actual hazard is the tool list.</b> Three tools file into the same code-scanning inbox.
|
|
3859
|
+
CodeQL has <b>0 open</b> alerts (9 dismissed, 17 fixed). Scorecard has <b>7 open, every one
|
|
3860
|
+
<code>severity=error</code></b> — and they are posture metrics that must not be dismissed,
|
|
3861
|
+
so they will stay open. Enabling the rule with Scorecard in its tool list therefore blocks
|
|
3862
|
+
<em>every merge in the repository, immediately</em>. The GitHub UI offers every tool that has
|
|
3863
|
+
reported analyses, so Scorecard sits right next to CodeQL in the picker. That is almost certainly
|
|
3864
|
+
why this has been assumed to be blocked.
|
|
3865
|
+
|
|
3866
|
+
Scoped to CodeQL alone it is safe and adds real protection: <code>codeql.yml</code> carries no
|
|
3867
|
+
path filters and runs on <code>push</code>, <code>pull_request</code> and
|
|
3868
|
+
<code>merge_group</code>, so it always reports and cannot produce the never-reports deadlock this
|
|
3869
|
+
repo has hit twice. And it catches something the status check does not —
|
|
3870
|
+
<code>codeql-analyze</code> passes when the <em>job</em> succeeds, including when it succeeds
|
|
3871
|
+
having found error-severity alerts.</p>
|
|
3872
|
+
<div class="meta">
|
|
3873
|
+
<span class="m">Complexity <b>S</b></span>
|
|
3874
|
+
<span class="m">Impact <b>Med</b></span>
|
|
3875
|
+
<span class="m">Wow <b class="wow">★★★★</b></span>
|
|
3876
|
+
<span class="m">safe scoped to CodeQL (0 open) — adding Scorecard deadlocks every merge</span>
|
|
3877
|
+
</div>
|
|
3878
|
+
</article>
|
|
3729
3879
|
<!-- /ROADMAP:cards -->
|
|
3730
3880
|
|
|
3731
3881
|
</div>
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|