boost-skill-cli 1.0.275__tar.gz → 1.0.277__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.275 → boost_skill_cli-1.0.277}/Makefile +6 -3
- {boost_skill_cli-1.0.275/boost_skill_cli.egg-info → boost_skill_cli-1.0.277}/PKG-INFO +1 -1
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277/boost_skill_cli.egg-info}/PKG-INFO +1 -1
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_skill_cli.egg-info/SOURCES.txt +4 -0
- boost_skill_cli-1.0.277/docs/roadmap/items/demo-cannot-open-its-own-pr.md +56 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +8 -0
- boost_skill_cli-1.0.277/docs/roadmap/items/make-lint-masks-actionlint-failures.md +61 -0
- boost_skill_cli-1.0.277/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +47 -0
- boost_skill_cli-1.0.277/docs/roadmap/items/release-verifies-the-wrong-commit.md +57 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +18 -2
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap.html +234 -5
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/requirements/coverage-tools.txt +63 -63
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/requirements/mutation-tools.txt +63 -63
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/requirements/release-tools.txt +3 -3
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/requirements/test-tools.txt +63 -63
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/lock_toolchain.py +40 -4
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_toolchain_lock.py +109 -4
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/.gitattributes +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/.gitignore +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/.lycheeignore +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/.vale.ini +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/CLAUDE.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/LICENSE +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/MANIFEST.in +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/README.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/SECURITY.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/codecov.yml +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/adapters.html +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel.html +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/commands.html +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/demo.gif +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/demo.tape +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/eval.html +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/index.html +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/examples/README.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/index.html +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/noxfile.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/pyproject.toml +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/setup.cfg +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/sonar-project.properties +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/style/README.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/style/boost.css +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/style/boost.js +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/style/demo.html +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/conftest.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/visual/visual_check.mjs +0 -0
|
@@ -61,7 +61,8 @@ lint:
|
|
|
61
61
|
$(VENV)/bin/interrogate boost_cli/core
|
|
62
62
|
$(VENV)/bin/refurb boost_cli
|
|
63
63
|
$(VENV)/bin/codespell boost_cli docs README.md
|
|
64
|
-
@command -v actionlint >/dev/null 2>&1
|
|
64
|
+
@if command -v actionlint >/dev/null 2>&1; then actionlint; \
|
|
65
|
+
else echo "actionlint not on PATH — skipping (CI enforces it)"; fi
|
|
65
66
|
$(PY) scripts/build_registries.py --check
|
|
66
67
|
$(PY) scripts/build_roadmap.py --check
|
|
67
68
|
$(PY) scripts/build_command_reference.py --check
|
|
@@ -140,7 +141,8 @@ bench:
|
|
|
140
141
|
# part of `make check`; degrades cleanly (prints a skip message, exits 0) when
|
|
141
142
|
# hyperfine isn't installed (`brew install hyperfine`).
|
|
142
143
|
bench-cli:
|
|
143
|
-
@command -v hyperfine >/dev/null 2>&1
|
|
144
|
+
@if command -v hyperfine >/dev/null 2>&1; then bash scripts/bench_cli.sh; \
|
|
145
|
+
else echo "hyperfine not on PATH — install via 'brew install hyperfine', skipping"; fi
|
|
144
146
|
|
|
145
147
|
# Opt-in coverage-guided fuzzing of the hand-rolled parsers (atheris/libFuzzer).
|
|
146
148
|
# Not part of `make check` — a fuzzer is a search, not a pass/fail gate; the
|
|
@@ -164,7 +166,8 @@ fuzz:
|
|
|
164
166
|
BOOST_SITE ?= https://jonnyeclectic.github.io/boost/
|
|
165
167
|
post-deploy:
|
|
166
168
|
$(PY) scripts/post_deploy_smoke.py --base-url "$(BOOST_SITE)" -v
|
|
167
|
-
@command -v node >/dev/null 2>&1
|
|
169
|
+
@if command -v node >/dev/null 2>&1; then BOOST_SITE="$(BOOST_SITE)" node tests/visual/console_check.mjs; \
|
|
170
|
+
else echo "node not on PATH — skipping the console check (CI runs it)"; fi
|
|
168
171
|
|
|
169
172
|
# regenerate generated artifacts from their source (registries + roadmap boards)
|
|
170
173
|
generate:
|
|
@@ -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.277'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 277)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -181,6 +181,7 @@ docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md
|
|
|
181
181
|
docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md
|
|
182
182
|
docs/roadmap/items/crash-listing-branch-untested.md
|
|
183
183
|
docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md
|
|
184
|
+
docs/roadmap/items/demo-cannot-open-its-own-pr.md
|
|
184
185
|
docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md
|
|
185
186
|
docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md
|
|
186
187
|
docs/roadmap/items/dependabot-missing-pip-ecosystem.md
|
|
@@ -225,6 +226,7 @@ docs/roadmap/items/log-timestamps-mislabeled-utc.md
|
|
|
225
226
|
docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md
|
|
226
227
|
docs/roadmap/items/main-has-no-branch-protection.md
|
|
227
228
|
docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md
|
|
229
|
+
docs/roadmap/items/make-lint-masks-actionlint-failures.md
|
|
228
230
|
docs/roadmap/items/make-the-roadmaps-discoverable.md
|
|
229
231
|
docs/roadmap/items/markdown-consistency-markdownlint-cli2.md
|
|
230
232
|
docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md
|
|
@@ -236,6 +238,7 @@ docs/roadmap/items/mcp-search-before-reinventing.md
|
|
|
236
238
|
docs/roadmap/items/mcp-startup-self-harden-fork-safety.md
|
|
237
239
|
docs/roadmap/items/memoize-config-load-in-process.md
|
|
238
240
|
docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md
|
|
241
|
+
docs/roadmap/items/merged-loop-branches-are-never-pruned.md
|
|
239
242
|
docs/roadmap/items/modernization-smells-refurb-pyupgrade.md
|
|
240
243
|
docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md
|
|
241
244
|
docs/roadmap/items/mutation-hardening-core-frontmatter-py.md
|
|
@@ -270,6 +273,7 @@ docs/roadmap/items/ranx-significance-monitor.md
|
|
|
270
273
|
docs/roadmap/items/reconcile-the-theme-drift.md
|
|
271
274
|
docs/roadmap/items/refresh-the-marketing-surface.md
|
|
272
275
|
docs/roadmap/items/rel-time-tests-race-the-wall-clock.md
|
|
276
|
+
docs/roadmap/items/release-verifies-the-wrong-commit.md
|
|
273
277
|
docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md
|
|
274
278
|
docs/roadmap/items/required-checks-config-drift.md
|
|
275
279
|
docs/roadmap/items/retrieval-quality-eval-harness.md
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: demo-cannot-open-its-own-pr
|
|
3
|
+
board: code
|
|
4
|
+
section: pipeline
|
|
5
|
+
status: planned
|
|
6
|
+
category: CI reporting
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 4
|
|
10
|
+
note: a repo setting blocks it — no edit to demo.yml can fix this one
|
|
11
|
+
order: 65
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: <code>demo.yml</code> still fails on every push — and the fix is not in the workflow
|
|
15
|
+
---
|
|
16
|
+
<code>demo-gif-workflow-has-never-succeeded</code> (shipped, PR 294) fixed the recorder:
|
|
17
|
+
<code>charmbracelet/vhs-action</code>'s broken ffmpeg installer was replaced with apt plus
|
|
18
|
+
ttyd/vhs pinned by release-asset id. That worked. The recording step now succeeds on both event
|
|
19
|
+
paths. <b>The workflow still fails on every push to <code>main</code></b> — observed
|
|
20
|
+
2026-07-28 at 20:56, 20:04 and 09:27, and it is the only failing workflow in the last 60 runs.
|
|
21
|
+
|
|
22
|
+
The failure moved one step later, to <code>open a PR if the recording changed</code>. The run
|
|
23
|
+
annotation gives it verbatim:
|
|
24
|
+
|
|
25
|
+
<code>GitHub Actions is not permitted to create or approve pull requests.</code>
|
|
26
|
+
|
|
27
|
+
<b>Nothing in <code>demo.yml</code> is wrong, so nothing in <code>demo.yml</code> will fix it.</b>
|
|
28
|
+
The job already declares <code>contents: write</code> and <code>pull-requests: write</code>,
|
|
29
|
+
which is exactly what <code>peter-evans/create-pull-request</code> documents as required. The
|
|
30
|
+
workflow uses no secrets. <code>persist-credentials: false</code> on the checkout is correct and
|
|
31
|
+
is the repo-wide convention across all 31 checkout steps — the action supplies its own git
|
|
32
|
+
auth and explicitly unsets any persisted credential. Every one of those is a plausible-looking
|
|
33
|
+
false lead. The actual blocker is a <b>repository setting</b>: Actions → General
|
|
34
|
+
→ Workflow permissions → "Allow GitHub Actions to create and
|
|
35
|
+
approve pull requests", which the API reports as
|
|
36
|
+
<code>can_approve_pull_request_reviews: false</code>. This is the same shape as
|
|
37
|
+
<code>sbom.yml</code>: a workflow that is correct in the file and inert in reality.
|
|
38
|
+
|
|
39
|
+
Deciding it is a real decision, not a formality. Turning that toggle on grants <em>every</em>
|
|
40
|
+
workflow in the repo the ability to open pull requests, which is a genuine widening of what a
|
|
41
|
+
compromised action can do. The alternative is to accept that this step cannot work and change
|
|
42
|
+
what the push path does — upload the GIF as an artifact on both paths, as the pull-request
|
|
43
|
+
path already does, and drop the PR-opening step.
|
|
44
|
+
|
|
45
|
+
<b>A second, independent defect in the same file.</b> Its concurrency group is
|
|
46
|
+
<code>group: demo</code>, not ref-scoped. Every other per-ref workflow scopes it —
|
|
47
|
+
<code>sonarcloud-${{ github.ref }}</code>, <code>fuzz-${{ github.ref }}</code>,
|
|
48
|
+
<code>eval-stats-${{ github.ref }}</code>, <code>eval-explain-${{ github.ref }}</code>; only the
|
|
49
|
+
deliberately-singleton <code>release</code> and <code>post-deploy</code> are global. With
|
|
50
|
+
<code>cancel-in-progress: true</code>, a pull-request run and a <code>main</code> run therefore
|
|
51
|
+
cancel each other, which is where demo's <code>cancelled</code> runs come from. Fix is
|
|
52
|
+
<code>group: demo-${{ github.ref }}</code> regardless of what is decided about the toggle.
|
|
53
|
+
|
|
54
|
+
Worth reconciling while here: the tree disagrees with itself on the history.
|
|
55
|
+
<code>demo-gif-workflow-has-never-succeeded</code> says "3 runs, 3 failures", while
|
|
56
|
+
<code>demo.yml</code> and <code>ci-failure-issue.yml</code> both say six of six.
|
|
@@ -44,3 +44,11 @@ with <code>lock_toolchain.py</code> instead. Whatever is chosen, it needs a guar
|
|
|
44
44
|
<i>loses</i> a platform-markered pin should fail its own gate rather than fail three Windows jobs
|
|
45
45
|
two steps later, because the current failure names the install step and never mentions the missing
|
|
46
46
|
package. Related: [[dependabot-root-pip-entry-duplicates-requirements]].
|
|
47
|
+
<b>Progress:</b> <code>lock_toolchain.py</code> now takes <code>-P/--upgrade-package</code>, so a
|
|
48
|
+
Dependabot bump can be <i>reproduced</i> rather than merged — take the version it proposes,
|
|
49
|
+
re-resolve that one package universally, and every other pin (markers included) stays as committed.
|
|
50
|
+
Both open bumps were landed that way: <code>hypothesis</code> 6.161.6 to 6.163.0 and
|
|
51
|
+
<code>twine</code> 6.2.0 to 7.0.0, four changed lines across five locks, with
|
|
52
|
+
<code>colorama</code> and <code>pywin32-ctypes</code> intact. What remains is the config half —
|
|
53
|
+
stopping Dependabot raising these at all — which is deliberately still open because its effect is
|
|
54
|
+
only observable on the next scheduled run.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: make-lint-masks-actionlint-failures
|
|
3
|
+
board: code
|
|
4
|
+
section: dx
|
|
5
|
+
status: shipped
|
|
6
|
+
category: Testing · Bug
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 4
|
|
10
|
+
note: fixed — a failing actionlint now fails make, in all three targets
|
|
11
|
+
order: 60
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: <code>make lint</code> reports success when <code>actionlint</code> fails — and says it wasn't installed
|
|
15
|
+
---
|
|
16
|
+
<code>Makefile:64</code> guards the workflow linter like this:
|
|
17
|
+
|
|
18
|
+
<code>@command -v actionlint >/dev/null 2>&1 && actionlint || echo "actionlint not on PATH — skipping (CI enforces it)"</code>
|
|
19
|
+
|
|
20
|
+
Because <code>||</code> binds to the whole <code>&&</code> chain, the fallback fires in
|
|
21
|
+
<b>both</b> failure modes — actionlint absent, <em>and</em> actionlint present and reporting
|
|
22
|
+
findings. Reproduced with a stub that exits 1:
|
|
23
|
+
|
|
24
|
+
<code>actionlint: FAKE ERROR</code><br>
|
|
25
|
+
<code>actionlint not on PATH — skipping (CI enforces it)</code><br>
|
|
26
|
+
<code>make exit=0</code>
|
|
27
|
+
|
|
28
|
+
So a real workflow-lint failure is swallowed, and the message asserts something false — that
|
|
29
|
+
the tool is not installed, when it is installed and just failed. <b><code>make lint</code> and
|
|
30
|
+
therefore <code>make check</code> can never fail on actionlint.</b> CLAUDE.md calls
|
|
31
|
+
<code>make check</code> "the one gate that matters" and tells every agent to run it before calling
|
|
32
|
+
a change done; for this tool it returns green unconditionally, and the developer who reads the
|
|
33
|
+
output is told the opposite of what happened.
|
|
34
|
+
|
|
35
|
+
The local-versus-CI gap is wider than this one line. CI's required <code>lint</code> job runs
|
|
36
|
+
three workflow/security tools that <code>make lint</code> has no equivalent for at all:
|
|
37
|
+
<b>actionlint</b> (present but unfailable), <b>zizmor</b> and <b>gitleaks</b> (absent from the
|
|
38
|
+
Makefile entirely). No CI job invokes <code>make lint</code>, so the two lists are hand-maintained
|
|
39
|
+
duplicates with nothing checking they agree — which is how they drifted.
|
|
40
|
+
|
|
41
|
+
Minimal fix is to stop discarding the exit status:
|
|
42
|
+
|
|
43
|
+
<code>@if command -v actionlint >/dev/null 2>&1; then actionlint; else echo "actionlint not on PATH — skipping (CI enforces it)"; fi</code>
|
|
44
|
+
|
|
45
|
+
The stricter option is to install actionlint in <code>make venv</code> and let absence itself
|
|
46
|
+
fail, so <code>make check</code> cannot report success while skipping a required gate. The same
|
|
47
|
+
masking idiom appears at <code>Makefile:143</code> (hyperfine) and <code>Makefile:167</code>
|
|
48
|
+
(node); neither is reached by <code>check</code>, so they are cosmetic by comparison, but they are
|
|
49
|
+
the same bug. Incidental drift found alongside: <code>CLAUDE.md</code> describes the lint recipe
|
|
50
|
+
as "18 commands" and it is 19.
|
|
51
|
+
|
|
52
|
+
<b>Shipped.</b> All three occurrences of the idiom were rewritten to an
|
|
53
|
+
<code>if/then/else</code> so the tool's exit status is no longer discarded —
|
|
54
|
+
<code>Makefile:64</code> (actionlint, inside <code>lint</code> and therefore inside
|
|
55
|
+
<code>check</code>), plus <code>bench-cli</code> and <code>post-deploy</code>, which had the same
|
|
56
|
+
bug without being reachable from the gate. Verified against the patched recipe itself, in all
|
|
57
|
+
three states: a <b>failing</b> actionlint now fails <code>make</code> (exit 2) instead of printing
|
|
58
|
+
"not on PATH" and returning 0; a <b>passing</b> one still exits 0; an <b>absent</b> one still exits
|
|
59
|
+
0 with the skip message intact. The wider local-versus-CI gap this card also names —
|
|
60
|
+
<code>zizmor</code> and <code>gitleaks</code> run only in CI and are absent from the Makefile
|
|
61
|
+
— is untouched and still open.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: merged-loop-branches-are-never-pruned
|
|
3
|
+
board: code
|
|
4
|
+
section: pipeline
|
|
5
|
+
status: planned
|
|
6
|
+
category: Hygiene · DX
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: Low
|
|
9
|
+
wow: 2
|
|
10
|
+
note: 68 of 70 loop/* branches have a merged PR; one setting fixes it
|
|
11
|
+
order: 66
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: 68 of the repo's 77 branches are merged <code>loop/*</code> branches nobody deletes
|
|
15
|
+
---
|
|
16
|
+
The repository carries <b>77 branches, 70 of them <code>loop/*</code></b>. Classifying each by the
|
|
17
|
+
state of its pull request: <b>68 have a merged PR</b> and are safe to delete, <b>1</b> has an open
|
|
18
|
+
PR (<code>loop/dependabot-findings</code>), and 1 has no PR on record. The default branch list is
|
|
19
|
+
almost entirely finished work.
|
|
20
|
+
|
|
21
|
+
<b>The obvious measurement is wrong here, which is worth recording.</b> Testing "is it merged?"
|
|
22
|
+
with <code>compare(main...branch).ahead_by == 0</code> reports <b>0 of 70</b> as merged —
|
|
23
|
+
because this repo squash-merges, and a squash leaves the branch's original commits outside
|
|
24
|
+
<code>main</code>'s history forever. Every merged branch looks permanently ahead. The state has to
|
|
25
|
+
come from the pull request, not from commit reachability.
|
|
26
|
+
|
|
27
|
+
The cause is a single repository setting: <code>delete_branch_on_merge</code> is <b>false</b>, so
|
|
28
|
+
nothing removes a head branch when its PR merges. No workflow prunes them either — none of
|
|
29
|
+
the 25 workflow files triggers on <code>create</code>/<code>delete</code> or touches
|
|
30
|
+
<code>loop/*</code>, and no <code>scripts/</code> entry or Makefile target does branch cleanup.
|
|
31
|
+
The one branch-deletion automation in the tree is <code>demo.yml</code>'s
|
|
32
|
+
<code>delete-branch: true</code>, which is <code>create-pull-request</code> tidying its own
|
|
33
|
+
<code>bot/demo-gif</code> branch and has nothing to do with <code>loop/*</code>. No documentation
|
|
34
|
+
asks anyone to clean up either: <code>CONTRIBUTING.md</code>, <code>CLAUDE.md</code> and
|
|
35
|
+
<code>.claude/commands/roadmap-loop.md</code> all describe branching and squash-merging, and none
|
|
36
|
+
of the three mentions deleting the branch afterwards.
|
|
37
|
+
|
|
38
|
+
<b>Not a claim that branches are never deleted.</b> The item files name <b>144 distinct</b>
|
|
39
|
+
<code>owner: loop/<topic></code> values against 70 surviving branches, so roughly 98 have
|
|
40
|
+
gone at some point — by hand, or by topic reuse. The accurate statement is narrower:
|
|
41
|
+
nothing in the repo <em>causes</em> cleanup, so merged branches accumulate until someone does it
|
|
42
|
+
manually.
|
|
43
|
+
|
|
44
|
+
Low impact and near-zero risk to fix — flip <code>delete_branch_on_merge</code> to true and
|
|
45
|
+
the backlog can be pruned by listing merged PR head refs. The reason it is worth doing at all is
|
|
46
|
+
that CLAUDE.md tells every agent to run <code>git worktree list</code> and inspect branch state
|
|
47
|
+
before touching a tree, and 68 stale entries make that check noisier for every concurrent loop.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: release-verifies-the-wrong-commit
|
|
3
|
+
board: code
|
|
4
|
+
section: pipeline
|
|
5
|
+
status: planned
|
|
6
|
+
category: Release safety
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: High
|
|
9
|
+
wow: 4
|
|
10
|
+
note: 2 of 18 required contexts are re-checked against the sha actually shipped
|
|
11
|
+
order: 64
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: The release verifies one commit and ships another
|
|
15
|
+
---
|
|
16
|
+
<code>publish.yml</code> fires on <code>workflow_run</code> when <code>ci</code> completes, gates
|
|
17
|
+
on that run's <code>conclusion == 'success'</code> (plus <code>event == 'push'</code> and
|
|
18
|
+
<code>head_repository == this repo</code>), and then checks out <code>ref: main</code>. Those are
|
|
19
|
+
not the same commit. <b>Observed 2026-07-28:</b> <code>ci</code> for <code>ecfe38bc</code>
|
|
20
|
+
completed at 20:19:05Z; the release run was created at 20:19:07Z; it tagged and shipped
|
|
21
|
+
<code>c1727bac</code> as <b>v1.0.271</b> — while <code>c1727bac</code>'s own
|
|
22
|
+
<code>ci</code>, started 20:18:40Z, was still <code>in_progress</code>. One commit's green
|
|
23
|
+
verdict authorised a different commit's release.
|
|
24
|
+
|
|
25
|
+
<b>Most of this is already mitigated, and the card should not be read as "untested code ships".</b>
|
|
26
|
+
A strict "require branches to be up to date" policy means the shipped commit was green as a pull
|
|
27
|
+
request before it could merge, so its <em>tree</em> was gated. And
|
|
28
|
+
<code>release_preflight.py</code> is already pointed at the right commit —
|
|
29
|
+
<code>--sha "$(git rev-parse HEAD)"</code>, with an explicit comment that this is "not the trigger
|
|
30
|
+
sha". It polls each required workflow for that exact sha and fails closed on red, cancelled,
|
|
31
|
+
skipped, never-ran or still-running-at-deadline. The machinery is correct.
|
|
32
|
+
|
|
33
|
+
<b>Its coverage is the gap.</b> <code>.github/required-checks.txt</code> lists <b>18</b> required
|
|
34
|
+
contexts. <code>publish.yml</code> passes preflight exactly two of them —
|
|
35
|
+
<code>--require pip-audit.yml</code> and <code>--require package-metadata.yml</code>. The other
|
|
36
|
+
<b>16 are never re-checked against the commit being shipped</b>, including all 14 that come from
|
|
37
|
+
<code>ci.yml</code> and <code>codeql-analyze</code>. The clearest evidence this is an oversight
|
|
38
|
+
rather than a decision is in-tree: <code>release_preflight.py</code>'s own docstring says it waits
|
|
39
|
+
for <em>every</em> required workflow for the exact commit being released, and the caller hands it
|
|
40
|
+
two.
|
|
41
|
+
|
|
42
|
+
<b>A required context that can never report on <code>main</code> at all.</b> While checking the
|
|
43
|
+
other 16: <code>osv-scanner.yml</code> declares only <code>pull_request</code> and
|
|
44
|
+
<code>merge_group</code> triggers — no <code>push</code>. So <code>scan-pr / osv-scan</code>
|
|
45
|
+
is green as a PR gate and produces <em>nothing</em> for any commit on <code>main</code>, race or
|
|
46
|
+
no race. Adding it to preflight without first giving that workflow a
|
|
47
|
+
<code>push: branches: [main]</code> trigger would fail the release closed every time.
|
|
48
|
+
|
|
49
|
+
The fix is not to change the checkout ref. Pinning to
|
|
50
|
+
<code>github.event.workflow_run.head_sha</code> would build the older commit while release-drafter
|
|
51
|
+
still tags the default branch's head — artifact and tag would disagree. The lower-risk
|
|
52
|
+
change is to widen preflight's <code>--require</code> set to the contexts that actually run on
|
|
53
|
+
<code>main</code>, and optionally fail the job when <code>git rev-parse HEAD</code> differs from
|
|
54
|
+
the triggering run's <code>head_sha</code>. This is the third defect found in the same few lines
|
|
55
|
+
— see <code>publish-trigger-was-reachable-from-a-fork</code> (who can fire it) and
|
|
56
|
+
<code>publish-gate-ignores-pip-audit-and-metadata</code> (which gates are consulted); this one is
|
|
57
|
+
<em>which commit</em> they were consulted about.
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
id: zizmor-pin-is-a-yanked-release
|
|
3
3
|
board: code
|
|
4
4
|
section: pipeline
|
|
5
|
-
status:
|
|
5
|
+
status: shipped
|
|
6
6
|
category: Security · CI/CD
|
|
7
7
|
complexity: S
|
|
8
8
|
impact: Med
|
|
9
9
|
wow: 4
|
|
10
|
-
note:
|
|
10
|
+
note: already fixed by a4450f76 twelve hours before this card was filed
|
|
11
11
|
order: 63
|
|
12
12
|
owner:
|
|
13
13
|
pr:
|
|
@@ -34,3 +34,19 @@ And sweep the other exact pins for yanks: nothing currently checks for this. <co
|
|
|
34
34
|
catches CVEs in the resolved dependency closure, but a yanked <em>pinned tool</em> is neither a
|
|
35
35
|
CVE in the closure nor a manifest diff, so <code>osv-scanner</code> does not see it either. This
|
|
36
36
|
was found by accident, while installing zizmor locally to verify an unrelated change.
|
|
37
|
+
|
|
38
|
+
<b>Already shipped when this card was written — the card was filed stale, and that is the
|
|
39
|
+
more useful finding.</b> Commit <code>a4450f76</code>, "ci(security): zizmor 1.27.0 is yanked
|
|
40
|
+
— take 1.28.0", landed at <b>08:07Z</b>; this card was filed at <b>20:18Z</b>, twelve hours
|
|
41
|
+
later, against a base that already carried <code>1.28.0</code>. The yank was observed correctly
|
|
42
|
+
against a tree extracted earlier in the day and then never re-checked against the branch point.
|
|
43
|
+
<code>ci.yml</code> now runs <code>pipx run zizmor==1.28.0</code>.
|
|
44
|
+
|
|
45
|
+
Two things worth keeping from it. The predicted risk did not materialise: <code>zizmor
|
|
46
|
+
1.28.0</code> runs clean over all 25 workflows (exit 0, "no findings to report"), and the
|
|
47
|
+
line-anchored ignores in <code>.github/zizmor.yml</code> — including
|
|
48
|
+
<code>sbom.yml:29</code> — all still resolve, so the bump needed no config change. And the
|
|
49
|
+
gap the card names remains real and unclosed: <b>nothing checks whether an exact pin has been
|
|
50
|
+
yanked</b>. <code>pip-audit</code> scans the resolved dependency closure and
|
|
51
|
+
<code>osv-scanner</code> diffs the manifest; a yanked <em>pinned tool</em> is neither, so this was
|
|
52
|
+
caught by a human noticing a pip warning, twice, by luck.
|