boost-skill-cli 1.0.213__tar.gz → 1.0.215__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.213 → boost_skill_cli-1.0.215}/CLAUDE.md +80 -2
- {boost_skill_cli-1.0.213/boost_skill_cli.egg-info → boost_skill_cli-1.0.215}/PKG-INFO +1 -1
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215/boost_skill_cli.egg-info}/PKG-INFO +1 -1
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_skill_cli.egg-info/SOURCES.txt +26 -0
- boost_skill_cli-1.0.215/docs/roadmap/items/ai-bridge-silent-failure-logging.md +20 -0
- boost_skill_cli-1.0.215/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +22 -0
- boost_skill_cli-1.0.215/docs/roadmap/items/ci-job-timeout-minutes.md +20 -0
- boost_skill_cli-1.0.215/docs/roadmap/items/crash-listing-branch-untested.md +20 -0
- boost_skill_cli-1.0.215/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +23 -0
- boost_skill_cli-1.0.215/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +28 -0
- boost_skill_cli-1.0.215/docs/roadmap/items/github-community-health-files.md +21 -0
- boost_skill_cli-1.0.215/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +23 -0
- boost_skill_cli-1.0.215/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +22 -0
- boost_skill_cli-1.0.215/docs/roadmap/items/license-compliance-scanning.md +21 -0
- boost_skill_cli-1.0.215/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +21 -0
- boost_skill_cli-1.0.215/docs/roadmap/items/mypy-strict-mode-for-commands.md +23 -0
- boost_skill_cli-1.0.215/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +21 -0
- boost_skill_cli-1.0.215/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +21 -0
- boost_skill_cli-1.0.215/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +24 -0
- boost_skill_cli-1.0.215/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +21 -0
- boost_skill_cli-1.0.215/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +36 -0
- boost_skill_cli-1.0.215/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +36 -0
- boost_skill_cli-1.0.215/docs/roadmap/items/required-checks-config-drift.md +21 -0
- boost_skill_cli-1.0.215/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +22 -0
- boost_skill_cli-1.0.215/docs/roadmap/items/serve-py-traversal-guards-untested.md +21 -0
- boost_skill_cli-1.0.215/docs/roadmap/items/structured-json-log-output-mode.md +21 -0
- boost_skill_cli-1.0.215/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +22 -0
- boost_skill_cli-1.0.215/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +21 -0
- boost_skill_cli-1.0.215/docs/roadmap/items/update-reinstall-widens-agent-scope.md +22 -0
- boost_skill_cli-1.0.215/docs/roadmap/items/wire-bdd-suite-into-ci.md +21 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap.html +472 -1
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/.gitattributes +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/.gitignore +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/.lycheeignore +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/.vale.ini +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/LICENSE +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/MANIFEST.in +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/Makefile +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/README.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/SECURITY.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/adapters.html +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel.html +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/commands.html +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/demo.gif +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/demo.tape +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/eval.html +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/index.html +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/examples/README.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/index.html +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/noxfile.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/pyproject.toml +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/setup.cfg +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/style/README.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/style/boost.css +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/style/boost.js +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/style/demo.html +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/conftest.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/visual/visual_check.mjs +0 -0
|
@@ -4,6 +4,36 @@ boost is a "Homebrew for AI coding skills": a Python CLI (`boost_cli`) that find
|
|
|
4
4
|
installs, and governs the skill/rule/workflow files that AI coding agents run on.
|
|
5
5
|
Package name on PyPI is `boost-skill-cli`; the command is `boost`.
|
|
6
6
|
|
|
7
|
+
## Common commands
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
make venv # .venv from the hash-pinned requirements/*.txt
|
|
11
|
+
.venv/bin/pytest tests/unit/test_catalog.py -q # one test file
|
|
12
|
+
.venv/bin/pytest tests/unit/test_catalog.py::test_scan_dir -q # one test
|
|
13
|
+
.venv/bin/pytest tests/functional -q -k install # functional tests matching "install"
|
|
14
|
+
make lint # the whole static tier — see the recipe, it is 18 commands
|
|
15
|
+
make test # unit + functional with 80% coverage gate
|
|
16
|
+
make check # the full required gate — see table below
|
|
17
|
+
|
|
18
|
+
# run boost itself against a disposable HOME (never your real ~/.boost):
|
|
19
|
+
export HOME=/tmp/boost-sandbox && mkdir -p $HOME
|
|
20
|
+
python3 tests/make_fixture.py /tmp/fixture-tap
|
|
21
|
+
./boost tap /tmp/fixture-tap
|
|
22
|
+
./boost install brainstorming
|
|
23
|
+
./boost doctor
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
`make venv` installs from `requirements/*.txt`, which are hash-pinned and are the
|
|
27
|
+
same files CI installs (`scripts/lock_toolchain.py --check` gates them against
|
|
28
|
+
drift) — so a dev venv and a runner resolve to identical bytes. Don't `pip
|
|
29
|
+
install` a lint or test tool by hand; add it to the right requirements file and
|
|
30
|
+
regenerate the lock, or `make lint` passes for you and fails in CI.
|
|
31
|
+
|
|
32
|
+
The functional/unit `sandbox` fixture (`tests/conftest.py`) also sets
|
|
33
|
+
`BOOST_NO_AI=1` and `BOOST_ASSUME_YES=1` so tests are deterministic and never
|
|
34
|
+
block on a confirm prompt or a real AI call — override explicitly in a test
|
|
35
|
+
that means to exercise the AI or confirmation path.
|
|
36
|
+
|
|
7
37
|
## The one gate that matters
|
|
8
38
|
|
|
9
39
|
Before calling any change done, run the full gate:
|
|
@@ -124,9 +154,57 @@ Both boards are data-driven: `docs/roadmap.html` from `board: code` items and
|
|
|
124
154
|
into the per-track sections; the filter JS and counters are computed). Same rule
|
|
125
155
|
for both — edit items, run `build_roadmap.py`, never touch the HTML by hand.
|
|
126
156
|
|
|
157
|
+
## Architecture
|
|
158
|
+
|
|
159
|
+
**CLI dispatch.** `boost_cli/cli.py` holds `COMMANDS`, the single
|
|
160
|
+
source-of-truth list of `(name, group, module, summary)` for all 78 commands.
|
|
161
|
+
Each command is implemented as `def cmd_<name_with_underscores>(argv) -> int`
|
|
162
|
+
inside `boost_cli/commands/<module>.py`, and `_dispatch` imports that module
|
|
163
|
+
lazily on invocation — so `boost --help` stays instant and command modules are
|
|
164
|
+
decoupled from each other. To add a command: add a row to `COMMANDS`, add the
|
|
165
|
+
`cmd_*` function to the named module, and it's live. `docs/commands.html` is
|
|
166
|
+
**generated** from `COMMANDS` by `scripts/build_command_reference.py`, so a new
|
|
167
|
+
row means regenerating it (`make generate`) or the `--check` gate fails.
|
|
168
|
+
|
|
169
|
+
**commands/ vs core/.** `boost_cli/commands/` is thin CLI glue — argument
|
|
170
|
+
parsing, output formatting, calling into `core/`. `boost_cli/core/` is the
|
|
171
|
+
actual engine (catalog scanning, install/link logic, the lock file, registries,
|
|
172
|
+
search) and is what the mutation gate targets — put behavior there, not in
|
|
173
|
+
the command layer, so it's covered by both the unit suite and mutation
|
|
174
|
+
testing.
|
|
175
|
+
|
|
176
|
+
**Storage layout**, all resolved at call time from `$HOME` (or `$BOOST_HOME`)
|
|
177
|
+
in `boost_cli/core/paths.py`, which is what makes `HOME=<tempdir>` sandboxing
|
|
178
|
+
work in tests and the dev loop:
|
|
179
|
+
|
|
180
|
+
```text
|
|
181
|
+
~/.boost/repos/ shallow git clones of tapped registries
|
|
182
|
+
~/.boost/cache/ JSON catalogs built from SKILL.md/rule/workflow frontmatter
|
|
183
|
+
~/.boost/logs/ rotating diagnostic log + crash reports
|
|
184
|
+
~/.boost/state/ pins, tags, policy, profiles, pulse feed, snapshots
|
|
185
|
+
~/.boost/config.json
|
|
186
|
+
~/.agents/skills/ canonical store — single source of truth for installed skills
|
|
187
|
+
~/.agents/skills/.skill-lock.json v3 lock file
|
|
188
|
+
~/.claude/skills/ ~/.windsurf/skills/ ~/.cursor/skills/ symlinked out from the canonical store
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
`core/catalog.scan_dir` walks a tap's clone and classifies each file into one
|
|
192
|
+
of the three item kinds (see Non-obvious rules above); `core/store.py` owns
|
|
193
|
+
install, uninstall and sync — copying into the canonical store, symlinking into
|
|
194
|
+
each agent's skills dir, and updating the lock file.
|
|
195
|
+
|
|
196
|
+
**Search has two engines**, both in `core/`: `rag.py` is the always-on,
|
|
197
|
+
zero-dependency BM25 engine (full-content index, auto-builds on first
|
|
198
|
+
search — this is what the required `eval` gate floors at recall@k ≥ 0.85).
|
|
199
|
+
`dense.py` is optional dense/vector retrieval behind the `[rag]` extra plus
|
|
200
|
+
an embeddings key (`VOYAGE_API_KEY`/`OPENAI_API_KEY`); it's used when both
|
|
201
|
+
are present and falls back to BM25 otherwise. `core/ai.py` wraps the
|
|
202
|
+
opt-in LLM-assisted paths (`search --smart`, `explain`, `distill`, `infer`,
|
|
203
|
+
`absorb`, `evolve`, `simulate`, …), shelling out to the `claude` CLI or
|
|
204
|
+
`ANTHROPIC_API_KEY` when available and degrading to heuristics when not.
|
|
205
|
+
|
|
127
206
|
## Layout
|
|
128
207
|
|
|
129
|
-
- `boost_cli/commands/` — CLI command groups · `boost_cli/core/` — engine (the mutation-gated code)
|
|
130
208
|
- `boost_cli/data/` — shipped catalog data (generated) · `scripts/` — build/gate tooling
|
|
131
209
|
- `tests/unit`, `tests/functional`, `tests/smoke.sh` — the three test tiers
|
|
132
|
-
- `docs/` — `
|
|
210
|
+
- `docs/` — `index.html` (visual guide), `commands.html` (every flag, generated), `DEBUGGING.md`; `roadmap.html` is generated from `docs/roadmap/items/*.md` (see above)
|
|
@@ -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.215'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 215)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -151,6 +151,8 @@ docs/roadmap/items/BOOST-D24.md
|
|
|
151
151
|
docs/roadmap/items/BOOST-D25.md
|
|
152
152
|
docs/roadmap/items/BOOST-D26.md
|
|
153
153
|
docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md
|
|
154
|
+
docs/roadmap/items/ai-bridge-silent-failure-logging.md
|
|
155
|
+
docs/roadmap/items/ambiguous-tap-short-name-resolution.md
|
|
154
156
|
docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md
|
|
155
157
|
docs/roadmap/items/atomic-skill-install-temp-dir-swap.md
|
|
156
158
|
docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md
|
|
@@ -161,6 +163,7 @@ docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md
|
|
|
161
163
|
docs/roadmap/items/build-provenance-slsa-attestations.md
|
|
162
164
|
docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md
|
|
163
165
|
docs/roadmap/items/capability-manifest-and-least-privilege-policy.md
|
|
166
|
+
docs/roadmap/items/ci-job-timeout-minutes.md
|
|
164
167
|
docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md
|
|
165
168
|
docs/roadmap/items/command-carousel-page.md
|
|
166
169
|
docs/roadmap/items/command-reference-docs-site.md
|
|
@@ -168,7 +171,10 @@ docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md
|
|
|
168
171
|
docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md
|
|
169
172
|
docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md
|
|
170
173
|
docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md
|
|
174
|
+
docs/roadmap/items/crash-listing-branch-untested.md
|
|
171
175
|
docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md
|
|
176
|
+
docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md
|
|
177
|
+
docs/roadmap/items/dependabot-missing-pip-ecosystem.md
|
|
172
178
|
docs/roadmap/items/dependency-cve-gate-pip-audit.md
|
|
173
179
|
docs/roadmap/items/docsite-chrome-and-content-audit.md
|
|
174
180
|
docs/roadmap/items/docstring-coverage-interrogate.md
|
|
@@ -183,17 +189,22 @@ docs/roadmap/items/framework-adapter-langgraph.md
|
|
|
183
189
|
docs/roadmap/items/framework-adapter-multi-agent.md
|
|
184
190
|
docs/roadmap/items/framework-adapters-boost-adapt.md
|
|
185
191
|
docs/roadmap/items/frontmatter-scalar-over-coercion.md
|
|
192
|
+
docs/roadmap/items/github-community-health-files.md
|
|
186
193
|
docs/roadmap/items/github-pages-deploy-is-broken-every-push.md
|
|
187
194
|
docs/roadmap/items/golden-set-statistical-power.md
|
|
188
195
|
docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md
|
|
189
196
|
docs/roadmap/items/html-validation-html-validate.md
|
|
197
|
+
docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md
|
|
190
198
|
docs/roadmap/items/install-resolves-skill-dependencies.md
|
|
191
199
|
docs/roadmap/items/install-scope-user-or-project.md
|
|
192
200
|
docs/roadmap/items/installed-skill-trust-audit.md
|
|
193
201
|
docs/roadmap/items/integrity-verification-boost-verify.md
|
|
194
202
|
docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md
|
|
203
|
+
docs/roadmap/items/journal-rotation-race-and-handle-leak.md
|
|
195
204
|
docs/roadmap/items/layering-guard-import-linter.md
|
|
205
|
+
docs/roadmap/items/license-compliance-scanning.md
|
|
196
206
|
docs/roadmap/items/lighthouse-ci-on-the-pages-site.md
|
|
207
|
+
docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md
|
|
197
208
|
docs/roadmap/items/list-rules-and-workflows.md
|
|
198
209
|
docs/roadmap/items/localize-the-stored-bm25-snippet.md
|
|
199
210
|
docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md
|
|
@@ -212,10 +223,14 @@ docs/roadmap/items/modernization-smells-refurb-pyupgrade.md
|
|
|
212
223
|
docs/roadmap/items/mutation-hardening-core-frontmatter-py.md
|
|
213
224
|
docs/roadmap/items/mutation-hardening-core-gitutil-py.md
|
|
214
225
|
docs/roadmap/items/mutation-hardening-core-store-py.md
|
|
226
|
+
docs/roadmap/items/mypy-strict-mode-for-commands.md
|
|
227
|
+
docs/roadmap/items/negative-limit-inverts-log-pulse-output.md
|
|
228
|
+
docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md
|
|
215
229
|
docs/roadmap/items/one-command-every-env-nox.md
|
|
216
230
|
docs/roadmap/items/one-shared-atomic-write-helper.md
|
|
217
231
|
docs/roadmap/items/package-metadata-validation-twine-check-friends.md
|
|
218
232
|
docs/roadmap/items/patch-coverage-gate-diff-cover.md
|
|
233
|
+
docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md
|
|
219
234
|
docs/roadmap/items/performance-regression-gate-pytest-benchmark.md
|
|
220
235
|
docs/roadmap/items/pin-the-lint-toolchain.md
|
|
221
236
|
docs/roadmap/items/post-deploy-smoke-headless-load-check.md
|
|
@@ -227,10 +242,14 @@ docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md
|
|
|
227
242
|
docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md
|
|
228
243
|
docs/roadmap/items/prose-and-terminology-linting-vale.md
|
|
229
244
|
docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md
|
|
245
|
+
docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md
|
|
246
|
+
docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md
|
|
230
247
|
docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md
|
|
231
248
|
docs/roadmap/items/ranx-significance-monitor.md
|
|
232
249
|
docs/roadmap/items/reconcile-the-theme-drift.md
|
|
233
250
|
docs/roadmap/items/refresh-the-marketing-surface.md
|
|
251
|
+
docs/roadmap/items/rel-time-tests-race-the-wall-clock.md
|
|
252
|
+
docs/roadmap/items/required-checks-config-drift.md
|
|
234
253
|
docs/roadmap/items/retrieval-quality-eval-harness.md
|
|
235
254
|
docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md
|
|
236
255
|
docs/roadmap/items/robust-tag-argument-parsing.md
|
|
@@ -244,25 +263,32 @@ docs/roadmap/items/second-type-checker-pyright.md
|
|
|
244
263
|
docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md
|
|
245
264
|
docs/roadmap/items/secret-scanning-gitleaks-push-protection.md
|
|
246
265
|
docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md
|
|
266
|
+
docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md
|
|
267
|
+
docs/roadmap/items/serve-py-traversal-guards-untested.md
|
|
247
268
|
docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md
|
|
248
269
|
docs/roadmap/items/single-imperative-rule-extractor.md
|
|
249
270
|
docs/roadmap/items/single-tech-stack-prober.md
|
|
250
271
|
docs/roadmap/items/split-oversized-command-modules.md
|
|
251
272
|
docs/roadmap/items/startup-and-import-time-budget-x-importtime.md
|
|
252
273
|
docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md
|
|
274
|
+
docs/roadmap/items/structured-json-log-output-mode.md
|
|
253
275
|
docs/roadmap/items/supply-chain-posture-openssf-scorecard.md
|
|
254
276
|
docs/roadmap/items/surface-every-docs-page-from-the-guide.md
|
|
277
|
+
docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md
|
|
255
278
|
docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md
|
|
256
279
|
docs/roadmap/items/theme-asset-linting-stylelint-eslint.md
|
|
257
280
|
docs/roadmap/items/typo-detection-codespell.md
|
|
258
281
|
docs/roadmap/items/typosquat-and-name-confusion-detection.md
|
|
259
282
|
docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md
|
|
283
|
+
docs/roadmap/items/uninstall-has-no-confirmation-prompt.md
|
|
260
284
|
docs/roadmap/items/untrack-generated-build-noise.md
|
|
261
285
|
docs/roadmap/items/update-diff-before-apply.md
|
|
262
286
|
docs/roadmap/items/update-refreshes-rules-and-workflows.md
|
|
287
|
+
docs/roadmap/items/update-reinstall-widens-agent-scope.md
|
|
263
288
|
docs/roadmap/items/visual-regression-pass-on-the-guide.md
|
|
264
289
|
docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md
|
|
265
290
|
docs/roadmap/items/windows-in-the-ci-matrix.md
|
|
291
|
+
docs/roadmap/items/wire-bdd-suite-into-ci.md
|
|
266
292
|
docs/roadmap/items/workflow-install-native-materialization.md
|
|
267
293
|
docs/roadmap/items/workflow-linting-actionlint.md
|
|
268
294
|
docs/roadmap/items/workflow-sast-zizmor.md
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: ai-bridge-silent-failure-logging
|
|
3
|
+
board: code
|
|
4
|
+
section: internals
|
|
5
|
+
status: planned
|
|
6
|
+
category: Observability
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 2
|
|
10
|
+
note:
|
|
11
|
+
order: 40
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: AI bridge swallows failures with zero diagnostic trail
|
|
15
|
+
---
|
|
16
|
+
<code>core/ai.py</code>'s CLI and API call paths both catch their failure modes (timeout, OS error,
|
|
17
|
+
URL error, bad JSON) and return <code>None</code> — but neither ever calls into the logger, unlike
|
|
18
|
+
the rest of boost. A user whose expired key or flaky network silently degrades every AI-assisted
|
|
19
|
+
command to its heuristic fallback has no trail to diagnose why, even with <code>--debug</code>. Add
|
|
20
|
+
a one-line <code>logger.debug(...)</code> in each except branch.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: ambiguous-tap-short-name-resolution
|
|
3
|
+
board: code
|
|
4
|
+
section: internals
|
|
5
|
+
status: planned
|
|
6
|
+
category: Bug
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: High
|
|
9
|
+
wow: 3
|
|
10
|
+
note:
|
|
11
|
+
order: 28
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: Ambiguous tap short-name resolution silently picks the wrong tap
|
|
15
|
+
---
|
|
16
|
+
<code>registry.get(name)</code> matches on full name, safe-name, or trailing path segment and returns
|
|
17
|
+
the <em>first</em> hit with no ambiguity check — unlike <code>catalog.resolve_one</code>, which
|
|
18
|
+
explicitly errors on a multi-tap ambiguous match. Three of the five default taps end in
|
|
19
|
+
<code>/skills</code>, so after <code>boost tap --defaults</code>, <code>boost untap skills</code> or
|
|
20
|
+
<code>boost update skills</code> silently resolves to whichever tap sorts first and the others
|
|
21
|
+
become unreachable by short name. Raise on an ambiguous short-name match, mirroring
|
|
22
|
+
<code>resolve_one</code>.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: ci-job-timeout-minutes
|
|
3
|
+
board: code
|
|
4
|
+
section: pipeline
|
|
5
|
+
status: planned
|
|
6
|
+
category: CI/CD
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: Low
|
|
9
|
+
wow: 1
|
|
10
|
+
note:
|
|
11
|
+
order: 10
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: No <code>timeout-minutes</code> on any CI job
|
|
15
|
+
---
|
|
16
|
+
None of the 8 workflow files set <code>timeout-minutes</code>, so a hung step — a stalled tap
|
|
17
|
+
clone, a wedged smoke-test subprocess — runs until GitHub's default job timeout instead of failing
|
|
18
|
+
fast, costliest across the 2 OS × 3 Python <code>tests</code> matrix. Add explicit per-job
|
|
19
|
+
timeouts: short for <code>lint</code>/<code>pip-audit</code>, longer for
|
|
20
|
+
<code>tests</code>/<code>mutation</code>.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: crash-listing-branch-untested
|
|
3
|
+
board: code
|
|
4
|
+
section: internals
|
|
5
|
+
status: planned
|
|
6
|
+
category: Testing · Bug
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: Low
|
|
9
|
+
wow: 1
|
|
10
|
+
note:
|
|
11
|
+
order: 37
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: <code>boost log --crashes</code> listing branch has no non-empty test
|
|
15
|
+
---
|
|
16
|
+
<code>_show_crashes</code> has an empty-state branch and a listing branch that reads each
|
|
17
|
+
<code>crash-*.log</code>, extracts its summary line, and swallows <code>OSError</code> on an
|
|
18
|
+
unreadable report — only the empty-state message is exercised by any test. A regression in the glob
|
|
19
|
+
sort, the summary-extraction regex, or the <code>OSError</code> fallback would ship undetected. Add
|
|
20
|
+
a test that seeds one or more crash logs and asserts on the rendered listing.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: dense-search-fallback-and-stale-tap-pruning
|
|
3
|
+
board: code
|
|
4
|
+
section: internals
|
|
5
|
+
status: planned
|
|
6
|
+
category: Bug
|
|
7
|
+
complexity: M
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 2
|
|
10
|
+
note:
|
|
11
|
+
order: 30
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: Dense search's empty result skips the BM25 fallback
|
|
15
|
+
---
|
|
16
|
+
<code>_retrieve_any</code> treats any non-<code>None</code> dense result as final, but
|
|
17
|
+
<code>dense.retrieve()</code> returns <code>[]</code> (not <code>None</code>) whenever every KNN
|
|
18
|
+
neighbor gets filtered by kind mismatch or staleness — silently short-circuiting the documented
|
|
19
|
+
"everything degrades to BM25" contract. Compounding it, <code>dense.build()</code>'s incremental
|
|
20
|
+
path only prunes chunks for taps still present in the current entry set, so a tap removed via
|
|
21
|
+
<code>boost tap remove</code> leaves ghost vectors in <code>rag_vectors.sqlite</code> forever,
|
|
22
|
+
crowding the KNN pool on every future query. Distinguish "dense unavailable" from "dense had zero
|
|
23
|
+
live hits," and prune removed taps on every build, not just changed ones.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: dependabot-missing-pip-ecosystem
|
|
3
|
+
board: code
|
|
4
|
+
section: pipeline
|
|
5
|
+
status: planned
|
|
6
|
+
category: Supply chain
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: Low
|
|
9
|
+
wow: 1
|
|
10
|
+
note: extras only — <code>/requirements</code> is covered
|
|
11
|
+
order: 11
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: Dependabot's <code>pip</code> entry misses <code>pyproject.toml</code>'s extras
|
|
15
|
+
---
|
|
16
|
+
<code>.github/dependabot.yml</code> declares <code>pip</code> for
|
|
17
|
+
<code>directory: /requirements</code>, so the hash-pinned dev/CI toolchain does get weekly
|
|
18
|
+
bump PRs. What it does <b>not</b> cover is <code>pyproject.toml</code> at the repo root:
|
|
19
|
+
Dependabot only scans manifests under the declared <code>directory</code>, so the optional
|
|
20
|
+
extras — <code>[rag]</code> (sqlite-vec), <code>[eval]</code> (ranx, ragas and the pinned
|
|
21
|
+
langchain 0.3 stack), <code>[bdd]</code> (behave), <code>[perf]</code> (pytest-benchmark) —
|
|
22
|
+
never get proactive version-bump PRs, only reactive <code>pip-audit</code> CVE flags.
|
|
23
|
+
Low impact by design: <code>[project].dependencies</code> is empty, so none of this reaches
|
|
24
|
+
anyone who installs <code>boost-skill-cli</code> — it is contributor-facing only. The fix is
|
|
25
|
+
a second <code>pip</code> entry with <code>directory: /</code>. Weigh it against the noise:
|
|
26
|
+
the <code>[eval]</code> stack is <b>deliberately</b> held at langchain 0.3 because ragas
|
|
27
|
+
0.2.x breaks against langchain ≥1.0, so that one will raise PRs that must be closed
|
|
28
|
+
unmerged until ragas catches up.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: github-community-health-files
|
|
3
|
+
board: code
|
|
4
|
+
section: dx
|
|
5
|
+
status: planned
|
|
6
|
+
category: Developer Experience
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 2
|
|
10
|
+
note:
|
|
11
|
+
order: 11
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: No issue/PR templates or a code of conduct
|
|
15
|
+
---
|
|
16
|
+
The repo has <code>SECURITY.md</code>, <code>CONTRIBUTING.md</code>, and
|
|
17
|
+
<code>dependabot.yml</code>, but no <code>.github/ISSUE_TEMPLATE/</code>, no
|
|
18
|
+
<code>.github/PULL_REQUEST_TEMPLATE.md</code>, and no <code>CODE_OF_CONDUCT.md</code>. For a project
|
|
19
|
+
that explicitly expects parallel external contributors (per the worktree-coordination rules in
|
|
20
|
+
<code>CONTRIBUTING.md</code>), a bug-report template built around <code>boost doctor</code>/crash-log
|
|
21
|
+
output and a PR checklist would cut triage friction more cheaply than most engine work.
|
boost_skill_cli-1.0.215/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: install-from-path-bypasses-policy-and-pin-checks
|
|
3
|
+
board: code
|
|
4
|
+
section: trust
|
|
5
|
+
status: planned
|
|
6
|
+
category: Security · Bug
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: High
|
|
9
|
+
wow: 3
|
|
10
|
+
note: code-scan finding
|
|
11
|
+
order: 9
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: <code>install_from_path</code> bypasses pin & policy checks
|
|
15
|
+
---
|
|
16
|
+
<code>boost import</code>, <code>boost migrate --from-skills-cli</code>, <code>boost rename</code>,
|
|
17
|
+
and the local-install paths behind the AI <code>distill</code>/<code>evolve</code> commands all
|
|
18
|
+
route through <code>store.install_from_path()</code>, which never calls
|
|
19
|
+
<code>policy.check_install()</code> and never checks <code>existing.get("pinned")</code> the way
|
|
20
|
+
<code>store.install()</code> does. Any of those commands can silently overwrite a pinned skill, or
|
|
21
|
+
one that <code>blocked_skills</code>/<code>allowed_taps</code>/<code>max_skills</code>/<code>pin_only</code>
|
|
22
|
+
policy would otherwise refuse. Route <code>install_from_path</code> through the same
|
|
23
|
+
pinned/existing/policy gates as <code>install()</code>.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: journal-rotation-race-and-handle-leak
|
|
3
|
+
board: code
|
|
4
|
+
section: internals
|
|
5
|
+
status: planned
|
|
6
|
+
category: Concurrency · Bug
|
|
7
|
+
complexity: M
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 2
|
|
10
|
+
note:
|
|
11
|
+
order: 31
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: Journal rotation has a lost-update race between concurrent processes
|
|
15
|
+
---
|
|
16
|
+
<code>_maybe_rotate</code> reads the whole pulse file and atomically replaces it with a truncated
|
|
17
|
+
snapshot — but two concurrent boost processes (explicitly expected per this repo's parallel-loop
|
|
18
|
+
model) can both read, then both write their own snapshot, and whichever writes last silently
|
|
19
|
+
discards any event the other appended in between. <code>rotation_healthy()</code> also opens the
|
|
20
|
+
file with a bare <code>p.open()</code> and never closes it, relying on GC instead of a
|
|
21
|
+
<code>with</code> block like every other open in the module. Rotate under a lock (or an
|
|
22
|
+
append-only rename scheme), and close the handle explicitly.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: license-compliance-scanning
|
|
3
|
+
board: code
|
|
4
|
+
section: pipeline
|
|
5
|
+
status: planned
|
|
6
|
+
category: Supply chain
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 2
|
|
10
|
+
note:
|
|
11
|
+
order: 12
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: License-compliance scanning of the dependency closure
|
|
15
|
+
---
|
|
16
|
+
Nothing in CI checks SPDX license compatibility of resolved dependencies — <code>pip-audit</code>
|
|
17
|
+
gates known CVEs, not license terms, and the <code>[eval]</code>/<code>[rag]</code> extras pull in a
|
|
18
|
+
nontrivial transitive closure (the langchain stack, ragas, sqlite-vec) whose licenses are never
|
|
19
|
+
verified against boost's own. Add a <code>pip-licenses --fail-on</code> (or <code>reuse lint</code>)
|
|
20
|
+
step to <code>package-metadata.yml</code> to catch an incompatible transitive dependency before an
|
|
21
|
+
extra ships it.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: lint-tap-misscopes-rule-workflow-entries
|
|
3
|
+
board: code
|
|
4
|
+
section: internals
|
|
5
|
+
status: planned
|
|
6
|
+
category: Bug
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 2
|
|
10
|
+
note:
|
|
11
|
+
order: 34
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: <code>lint --tap</code> mis-scores rule/workflow entries as broken
|
|
15
|
+
---
|
|
16
|
+
<code>boost lint --tap</code> builds its target list without filtering by kind, so rule/workflow
|
|
17
|
+
catalog entries (which have no <code>SKILL.md</code>) always report "missing SKILL.md," and
|
|
18
|
+
repo-root items get scored against the entire tap directory instead of their actual file. Running
|
|
19
|
+
it against any tap that mixes rules/workflows with skills makes every rule/workflow entry show a
|
|
20
|
+
bogus error and a garbage score. Skip or special-case non-skill kinds, mirroring the kind-branching
|
|
21
|
+
already used elsewhere in <code>pkg.py</code>.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: mypy-strict-mode-for-commands
|
|
3
|
+
board: code
|
|
4
|
+
section: health
|
|
5
|
+
status: planned
|
|
6
|
+
category: Testing · Type
|
|
7
|
+
complexity: M
|
|
8
|
+
impact: High
|
|
9
|
+
wow: 3
|
|
10
|
+
note:
|
|
11
|
+
order: 11
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: mypy's default mode skips untyped command bodies
|
|
15
|
+
---
|
|
16
|
+
<code>[tool.mypy]</code> in <code>pyproject.toml</code> sets only <code>python_version</code>/
|
|
17
|
+
<code>files</code>, leaving mypy in its default permissive mode — a function with any untyped
|
|
18
|
+
parameter has its <em>body</em> skipped entirely. All 76 <code>cmd_*</code> functions across
|
|
19
|
+
<code>boost_cli/commands/*.py</code> take a bare <code>argv</code>, and a third have no return-type
|
|
20
|
+
annotation, so the required "zero mypy errors" lint gate isn't actually checking most of the CLI's
|
|
21
|
+
dispatch logic. Scoping <code>disallow_untyped_defs</code> (or at least
|
|
22
|
+
<code>check_untyped_defs</code>) to <code>boost_cli.commands</code> will surface a real backlog —
|
|
23
|
+
exactly what the gate is supposed to catch.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: negative-limit-inverts-log-pulse-output
|
|
3
|
+
board: code
|
|
4
|
+
section: internals
|
|
5
|
+
status: planned
|
|
6
|
+
category: CLI ergonomics
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: Low
|
|
9
|
+
wow: 1
|
|
10
|
+
note:
|
|
11
|
+
order: 36
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: Negative <code>-n</code> silently inverts <code>log</code>/<code>pulse</code> output
|
|
15
|
+
---
|
|
16
|
+
<code>boost log</code>/<code>boost pulse</code> accept <code>-n</code>/<code>--limit</code> as a bare
|
|
17
|
+
<code>type=int</code> with no positivity check, and the slicing does
|
|
18
|
+
<code>out[:n] if n else out</code> — a negative <code>n</code> becomes a Python negative slice, so
|
|
19
|
+
<code>-n -1</code> silently returns everything except the most recent event instead of erroring.
|
|
20
|
+
<code>discovery.py</code>'s <code>--limit</code> flags already share a <code>_positive_int</code>
|
|
21
|
+
validator that rejects values below 1; reuse it here.
|
boost_skill_cli-1.0.215/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: onboard-overwrites-generated-files-without-confirm
|
|
3
|
+
board: code
|
|
4
|
+
section: internals
|
|
5
|
+
status: planned
|
|
6
|
+
category: UX · Bug
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 2
|
|
10
|
+
note:
|
|
11
|
+
order: 35
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: <code>boost onboard</code> silently overwrites existing generated files
|
|
15
|
+
---
|
|
16
|
+
<code>boost onboard</code> writes <code>.boost/telemetry.json</code>, a GitHub Actions workflow, and
|
|
17
|
+
<code>.skill-lock.json</code> via a bare <code>write_text()</code> with no existence check,
|
|
18
|
+
confirmation, or diff — unlike the sibling "write a generated file" helper elsewhere in the
|
|
19
|
+
codebase, which always confirms before overwriting. Re-running it on a repo with its own tracked
|
|
20
|
+
lock file silently clobbers it and still reports "created," even though it overwrote. Check
|
|
21
|
+
<code>dest.exists()</code> and route through <code>out.confirm()</code> first.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: path-traversal-unsanitized-rule-workflow-name
|
|
3
|
+
board: code
|
|
4
|
+
section: trust
|
|
5
|
+
status: planned
|
|
6
|
+
category: Security · Bug
|
|
7
|
+
complexity: M
|
|
8
|
+
impact: High
|
|
9
|
+
wow: 3
|
|
10
|
+
note: live-reproduced
|
|
11
|
+
order: 10
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: Path traversal via unsanitized rule/workflow name
|
|
15
|
+
---
|
|
16
|
+
<code>catalog._make_entry</code> only slugifies a catalog name when it contains a space, so a tap's
|
|
17
|
+
rule/workflow frontmatter carrying <code>name: ../../../../.ssh/authorized_keys</code> sails straight
|
|
18
|
+
through into <code>rule_target</code>/<code>workflow_target</code>, which build the destination as
|
|
19
|
+
<code>root / "rules" / (name + ext)</code> with zero traversal guard — unlike
|
|
20
|
+
<code>skill_store_dir()</code>'s <code>[A-Za-z0-9._-]+</code> regex. A malicious tap can write an
|
|
21
|
+
arbitrary file outside <code>.cursor/rules/</code> or <code>.claude/</code>, and it is worse under
|
|
22
|
+
<code>--scope project</code> since <code>base</code> is the victim's own repo. Apply the same
|
|
23
|
+
name-validation regex used by <code>skill_store_dir()</code> before any rule/workflow install path
|
|
24
|
+
is built.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: publish-gate-ignores-pip-audit-and-metadata
|
|
3
|
+
board: code
|
|
4
|
+
section: pipeline
|
|
5
|
+
status: planned
|
|
6
|
+
category: CI/CD
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: High
|
|
9
|
+
wow: 3
|
|
10
|
+
note: gates PyPI
|
|
11
|
+
order: 9
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: <code>publish.yml</code> ignores the <code>pip-audit</code> / metadata gates
|
|
15
|
+
---
|
|
16
|
+
<code>publish.yml</code> triggers on <code>workflow_run: [ci]</code> and gates only on
|
|
17
|
+
<code>github.event.workflow_run.conclusion == 'success'</code> — it never checks the
|
|
18
|
+
independently-triggered <code>pip-audit.yml</code> or <code>package-metadata.yml</code> workflows
|
|
19
|
+
that run on the same push. A merge that fails the live-CVE gate or the twine/metadata check still
|
|
20
|
+
auto-publishes to PyPI as long as <code>ci</code> itself is green. Fold both as jobs inside
|
|
21
|
+
<code>ci.yml</code>, or have the release job poll their run status via the API before publishing.
|