boost-skill-cli 1.0.296__tar.gz → 1.0.298__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.296 → boost_skill_cli-1.0.298}/.vale/styles/config/vocabularies/boost/accept.txt +3 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/CLAUDE.md +9 -2
- {boost_skill_cli-1.0.296/boost_skill_cli.egg-info → boost_skill_cli-1.0.298}/PKG-INFO +4 -2
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/README.md +3 -1
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298/boost_skill_cli.egg-info}/PKG-INFO +4 -2
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_skill_cli.egg-info/SOURCES.txt +9 -0
- boost_skill_cli-1.0.298/docs/architecture/README.md +45 -0
- boost_skill_cli-1.0.298/docs/architecture/c4-components-core.md +92 -0
- boost_skill_cli-1.0.298/docs/architecture/c4-containers.md +78 -0
- boost_skill_cli-1.0.298/docs/architecture/c4-context.md +45 -0
- boost_skill_cli-1.0.298/docs/architecture/c4-dynamic-install.md +63 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +19 -6
- boost_skill_cli-1.0.298/docs/roadmap/items/internal-architecture-diagrams.md +44 -0
- boost_skill_cli-1.0.298/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +45 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap.html +99 -5
- boost_skill_cli-1.0.298/requirements/platform-pins.lock +58 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/scripts/lock_toolchain.py +179 -0
- boost_skill_cli-1.0.298/tests/unit/test_platform_pins.py +383 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/.gitattributes +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/.gitignore +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/.lycheeignore +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/.vale.ini +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/LICENSE +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/MANIFEST.in +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/Makefile +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/SECURITY.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/codecov.yml +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/adapters.html +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/carousel.html +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/commands.html +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/demo.gif +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/demo.tape +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/eval.html +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/index.html +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/evals/README.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/evals/__init__.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/evals/baseline.json +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/evals/metrics.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/examples/README.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/index.html +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/noxfile.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/pyproject.toml +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/setup.cfg +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/sonar-project.properties +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/style/README.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/style/boost.css +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/style/boost.js +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/style/demo.html +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/conftest.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/visual/package-lock.json +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.0.296 → boost_skill_cli-1.0.298}/tests/visual/visual_check.mjs +0 -0
|
@@ -101,8 +101,15 @@ line coverage. Target `boost_cli/core` behavior with assertions, not just import
|
|
|
101
101
|
(structural pattern matching, `X | Y` runtime unions in non-annotation context).
|
|
102
102
|
- **Three item kinds, one scanner.** `core/catalog.scan_dir` indexes `skill`
|
|
103
103
|
(SKILL.md), `rule` (.mdc/.cursorrules/.windsurfrules/.clinerules), and
|
|
104
|
-
`workflow` (commands/agents/workflows Markdown). **
|
|
105
|
-
`store.install`
|
|
104
|
+
`workflow` (commands/agents/workflows Markdown). **All three install**, and
|
|
105
|
+
each honors `scope`: `store.install` dispatches to `_install_rule` /
|
|
106
|
+
`_install_workflow` and only raises for a kind outside those three. They land
|
|
107
|
+
in different places, which is the part to get right — a skill is copied into
|
|
108
|
+
the canonical store and symlinked out, a rule is materialised into each
|
|
109
|
+
agent's context file (`rules.CONTEXT_FILES`, e.g. `~/.claude/CLAUDE.md`), and
|
|
110
|
+
a workflow is rendered per agent (TOML for Gemini, see
|
|
111
|
+
`workflows.TOML_COMMAND_AGENTS`). Installing a rule therefore edits a file the
|
|
112
|
+
user reads every session — treat it as more invasive than a skill, not less.
|
|
106
113
|
|
|
107
114
|
## Parallel work & concurrent loops
|
|
108
115
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: boost-skill-cli
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.298
|
|
4
4
|
Summary: boost — Homebrew for AI coding skills
|
|
5
5
|
Author: Jonathan Reyes
|
|
6
6
|
License: GNU GENERAL PUBLIC LICENSE
|
|
@@ -911,7 +911,9 @@ boost bundle dump > Boostfile # everyone else runs: boost bundle install
|
|
|
911
911
|
[`docs/index.html`](docs/index.html), and for every flag of every command see
|
|
912
912
|
[`docs/commands.html`](docs/commands.html). For a GIF of one flagship command
|
|
913
913
|
per group — recorded live with [VHS](https://github.com/charmbracelet/vhs) — see
|
|
914
|
-
[`docs/carousel.html`](docs/carousel.html).
|
|
914
|
+
[`docs/carousel.html`](docs/carousel.html). For how boost is put together
|
|
915
|
+
internally — C4 diagrams of the context, containers, engine components and the
|
|
916
|
+
install path — see [`docs/architecture/`](docs/architecture/README.md).
|
|
915
917
|
|
|
916
918
|
| Group | Commands |
|
|
917
919
|
|---|---|
|
|
@@ -195,7 +195,9 @@ boost bundle dump > Boostfile # everyone else runs: boost bundle install
|
|
|
195
195
|
[`docs/index.html`](docs/index.html), and for every flag of every command see
|
|
196
196
|
[`docs/commands.html`](docs/commands.html). For a GIF of one flagship command
|
|
197
197
|
per group — recorded live with [VHS](https://github.com/charmbracelet/vhs) — see
|
|
198
|
-
[`docs/carousel.html`](docs/carousel.html).
|
|
198
|
+
[`docs/carousel.html`](docs/carousel.html). For how boost is put together
|
|
199
|
+
internally — C4 diagrams of the context, containers, engine components and the
|
|
200
|
+
install path — see [`docs/architecture/`](docs/architecture/README.md).
|
|
199
201
|
|
|
200
202
|
| Group | Commands |
|
|
201
203
|
|---|---|
|
|
@@ -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.298'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 298)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: boost-skill-cli
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.298
|
|
4
4
|
Summary: boost — Homebrew for AI coding skills
|
|
5
5
|
Author: Jonathan Reyes
|
|
6
6
|
License: GNU GENERAL PUBLIC LICENSE
|
|
@@ -911,7 +911,9 @@ boost bundle dump > Boostfile # everyone else runs: boost bundle install
|
|
|
911
911
|
[`docs/index.html`](docs/index.html), and for every flag of every command see
|
|
912
912
|
[`docs/commands.html`](docs/commands.html). For a GIF of one flagship command
|
|
913
913
|
per group — recorded live with [VHS](https://github.com/charmbracelet/vhs) — see
|
|
914
|
-
[`docs/carousel.html`](docs/carousel.html).
|
|
914
|
+
[`docs/carousel.html`](docs/carousel.html). For how boost is put together
|
|
915
|
+
internally — C4 diagrams of the context, containers, engine components and the
|
|
916
|
+
install path — see [`docs/architecture/`](docs/architecture/README.md).
|
|
915
917
|
|
|
916
918
|
| Group | Commands |
|
|
917
919
|
|---|---|
|
|
@@ -114,6 +114,11 @@ docs/mcp-hub.html
|
|
|
114
114
|
docs/rag-architecture.md
|
|
115
115
|
docs/roadmap.html
|
|
116
116
|
docs/.claude/settings.local.json
|
|
117
|
+
docs/architecture/README.md
|
|
118
|
+
docs/architecture/c4-components-core.md
|
|
119
|
+
docs/architecture/c4-containers.md
|
|
120
|
+
docs/architecture/c4-context.md
|
|
121
|
+
docs/architecture/c4-dynamic-install.md
|
|
117
122
|
docs/carousel/gifs/distill.gif
|
|
118
123
|
docs/carousel/gifs/doctor.gif
|
|
119
124
|
docs/carousel/gifs/explain.gif
|
|
@@ -217,6 +222,7 @@ docs/roadmap/items/install-resolves-skill-dependencies.md
|
|
|
217
222
|
docs/roadmap/items/install-scope-user-or-project.md
|
|
218
223
|
docs/roadmap/items/installed-skill-trust-audit.md
|
|
219
224
|
docs/roadmap/items/integrity-verification-boost-verify.md
|
|
225
|
+
docs/roadmap/items/internal-architecture-diagrams.md
|
|
220
226
|
docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md
|
|
221
227
|
docs/roadmap/items/journal-rotation-race-and-handle-leak.md
|
|
222
228
|
docs/roadmap/items/layering-guard-import-linter.md
|
|
@@ -297,6 +303,7 @@ docs/roadmap/items/sbom-declares-the-wrong-version.md
|
|
|
297
303
|
docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md
|
|
298
304
|
docs/roadmap/items/sbom-release-event-never-fires.md
|
|
299
305
|
docs/roadmap/items/scan-and-sync-rules-and-workflows.md
|
|
306
|
+
docs/roadmap/items/scheduled-toolchain-lock-regeneration.md
|
|
300
307
|
docs/roadmap/items/scorecard-findings-triage.md
|
|
301
308
|
docs/roadmap/items/second-type-checker-pyright.md
|
|
302
309
|
docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md
|
|
@@ -352,6 +359,7 @@ requirements/lint-tools.in
|
|
|
352
359
|
requirements/lint-tools.txt
|
|
353
360
|
requirements/mutation-tools.in
|
|
354
361
|
requirements/mutation-tools.txt
|
|
362
|
+
requirements/platform-pins.lock
|
|
355
363
|
requirements/release-tools.in
|
|
356
364
|
requirements/release-tools.txt
|
|
357
365
|
requirements/test-tools.in
|
|
@@ -506,6 +514,7 @@ tests/unit/test_perf_gate.py
|
|
|
506
514
|
tests/unit/test_pkg_confusions.py
|
|
507
515
|
tests/unit/test_pkg_injection.py
|
|
508
516
|
tests/unit/test_pkg_secrets.py
|
|
517
|
+
tests/unit/test_platform_pins.py
|
|
509
518
|
tests/unit/test_policy.py
|
|
510
519
|
tests/unit/test_post_deploy_smoke.py
|
|
511
520
|
tests/unit/test_projectlock.py
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# boost architecture
|
|
2
|
+
|
|
3
|
+
C4-model diagrams of how boost is put together, in Mermaid so they render on GitHub and stay
|
|
4
|
+
reviewable in a diff. Read them in order — each one opens a box the previous one drew.
|
|
5
|
+
|
|
6
|
+
| Level | Diagram | Answers |
|
|
7
|
+
|-------|---------|---------|
|
|
8
|
+
| 1 | [System context](c4-context.md) | Who uses boost and what it talks to |
|
|
9
|
+
| 2 | [Containers](c4-containers.md) | The processes and the directories on disk |
|
|
10
|
+
| 3 | [Core components](c4-components-core.md) | How the 45 engine modules group, and the layering rule |
|
|
11
|
+
| — | [Dynamic: install](c4-dynamic-install.md) | What `boost install` actually does, step by step |
|
|
12
|
+
|
|
13
|
+
Subsystem designs live beside these rather than inside them:
|
|
14
|
+
[rag-architecture.md](../rag-architecture.md) covers retrieval in depth, and
|
|
15
|
+
[DEBUGGING.md](../DEBUGGING.md) covers the diagnostic surfaces.
|
|
16
|
+
|
|
17
|
+
## The three invariants worth knowing before you read code
|
|
18
|
+
|
|
19
|
+
**1. Layering is enforced.** `cli → commands → core`, checked by `import-linter` in `make lint` and
|
|
20
|
+
CI. `core/` is the engine and the only layer the mutation gate targets; `commands/` is thin glue.
|
|
21
|
+
Putting behaviour in the command layer means it is covered by neither.
|
|
22
|
+
|
|
23
|
+
**2. Paths resolve at call time.** `core/paths.py` reads `$HOME` (or `$BOOST_HOME`) on every call
|
|
24
|
+
rather than caching at import. That is not incidental — it is what lets the whole test suite point
|
|
25
|
+
a temporary directory at `HOME` and exercise real install paths without touching your machine.
|
|
26
|
+
|
|
27
|
+
**3. Optional is always optional.** Dense retrieval falls back to BM25; the AI bridge falls back to
|
|
28
|
+
heuristics. The shipped runtime is stdlib-only and `[project].dependencies` is empty. Any new
|
|
29
|
+
dependency belongs behind an extra, and any new path through it needs a degraded branch.
|
|
30
|
+
|
|
31
|
+
## Keeping these honest
|
|
32
|
+
|
|
33
|
+
These diagrams are hand-written, not generated, so they can drift. They describe *structure* —
|
|
34
|
+
layers, boundaries, which component owns which decision — rather than anything that changes with a
|
|
35
|
+
routine edit, so drift should be rare and visible. The claims most worth re-checking when the
|
|
36
|
+
engine changes:
|
|
37
|
+
|
|
38
|
+
- the component groupings in [c4-components-core.md](c4-components-core.md), against
|
|
39
|
+
`ls boost_cli/core/`
|
|
40
|
+
- the layering contract, against `[tool.importlinter]` in `pyproject.toml`
|
|
41
|
+
- the install sequence, against `core/store.py::install`
|
|
42
|
+
- the agent-target split, against `agents.linking_agents()` and `agents.native_store_agents()`
|
|
43
|
+
|
|
44
|
+
Command-level reference is generated and lives elsewhere: `docs/commands.html` is built from the
|
|
45
|
+
`COMMANDS` registry by `scripts/build_command_reference.py`. Do not hand-edit it.
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# C4 Level 3 — Components of the core engine
|
|
2
|
+
|
|
3
|
+
`boost_cli/core/` is the engine: 45 modules that hold all the behaviour. This diagram groups them
|
|
4
|
+
into the ten components that actually have distinct responsibilities, and shows the one-way
|
|
5
|
+
dependency rule the build enforces.
|
|
6
|
+
|
|
7
|
+
```mermaid
|
|
8
|
+
C4Component
|
|
9
|
+
title Component Diagram — boost_cli/core
|
|
10
|
+
|
|
11
|
+
Container(cli, "boost_cli/cli.py", "Python", "COMMANDS registry; lazy dispatch")
|
|
12
|
+
Container(cmds, "boost_cli/commands/", "Python", "Thin CLI glue — parse, format, delegate")
|
|
13
|
+
|
|
14
|
+
Container_Boundary(core, "boost_cli/core — the engine") {
|
|
15
|
+
Component(registry, "Registry & catalog", "registry, catalog, frontmatter, staleness", "Clones taps; classifies skill / rule / workflow")
|
|
16
|
+
Component(bm25, "BM25 retrieval", "rag", "Always-on, zero-dependency full-content index")
|
|
17
|
+
Component(dense, "Dense retrieval", "dense, embed", "Optional vectors behind the [rag] extra")
|
|
18
|
+
Component(ai, "AI bridge", "ai, faithfulness, stackprobe, imperative", "LLM-assisted paths; heuristics when absent")
|
|
19
|
+
Component(resolve, "Resolution", "resolve, scopes, updatediff", "Dependency closure; user vs project scope")
|
|
20
|
+
Component(store, "Store & lock", "store, lockfile, projectlock, integrity, installscan", "Install, uninstall, sync; owns the lock file")
|
|
21
|
+
Component(targets, "Agent targets", "agents, rules, workflows, adapters, claude_settings, mcphost", "Per-agent formats, linking and MCP grammar")
|
|
22
|
+
Component(trust, "Trust & safety", "provenance, minisign, ed25519, secretscan, injectscan, typosquat, capabilities, policy, trustaudit", "Signing, scanning and governance")
|
|
23
|
+
Component(found, "Foundation", "paths, config, util, output", "Path resolution at call time; rendering")
|
|
24
|
+
Component(obs, "Diagnostics & I/O", "logs, journal, gitutil, nethttp", "Rotating log, pulse feed, git and HTTP")
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
Rel(cli, cmds, "Lazy-imports one module per invocation")
|
|
28
|
+
Rel(cmds, registry, "Taps and indexes")
|
|
29
|
+
Rel(cmds, bm25, "Searches")
|
|
30
|
+
Rel(cmds, store, "Installs and syncs")
|
|
31
|
+
Rel(cmds, trust, "Audits")
|
|
32
|
+
Rel(bm25, registry, "Indexes the catalog of")
|
|
33
|
+
Rel(dense, bm25, "Falls back to")
|
|
34
|
+
Rel(ai, bm25, "Reranks results from")
|
|
35
|
+
Rel(resolve, registry, "Looks up dependencies in")
|
|
36
|
+
Rel(store, resolve, "Expands the request with")
|
|
37
|
+
Rel(store, targets, "Links and materialises through")
|
|
38
|
+
Rel(store, trust, "Gates the install on")
|
|
39
|
+
Rel(registry, obs, "Clones via")
|
|
40
|
+
|
|
41
|
+
UpdateLayoutConfig($c4ShapeInRow="3", $c4BoundaryInRow="1")
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Every component depends on **Foundation** (`paths`, `config`, `util`, `output`); those arrows are
|
|
45
|
+
omitted because drawing ten of them into one box hides the structure rather than showing it.
|
|
46
|
+
|
|
47
|
+
## The layering rule is enforced, not aspirational
|
|
48
|
+
|
|
49
|
+
`import-linter` runs in `make lint` and CI, with the contract declared in `pyproject.toml`:
|
|
50
|
+
|
|
51
|
+
```text
|
|
52
|
+
layers = ["cli", "commands", "core"]
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Higher layers may import lower ones, never the reverse. `core/` must import neither `commands/` nor
|
|
56
|
+
`cli`, and `commands/` must not reach up into `cli`. There is exactly one allowlisted exception —
|
|
57
|
+
`boost_cli.commands.configuration -> boost_cli.cli` — because `boost completions` reads the
|
|
58
|
+
`COMMANDS` registry, which lives in `cli.py` by design. Any other upward import fails the build.
|
|
59
|
+
|
|
60
|
+
This is why behaviour belongs in `core/` and not in `commands/`: the mutation gate targets
|
|
61
|
+
`boost_cli/core` at an 80% kill floor, so logic placed in the command layer is covered by neither
|
|
62
|
+
mutation testing nor the layering contract.
|
|
63
|
+
|
|
64
|
+
## Why retrieval is two components, not one
|
|
65
|
+
|
|
66
|
+
`rag.py` is the always-on BM25 engine — pure stdlib, full-content index, auto-builds on first
|
|
67
|
+
search. It is what the required `eval` gate floors at recall@k ≥ 0.85 over the pinned golden set.
|
|
68
|
+
|
|
69
|
+
`dense.py` is optional vector retrieval, active only when both the `[rag]` extra and an embeddings
|
|
70
|
+
key are present, and falling back to BM25 otherwise. Modelling them as one "search" component would
|
|
71
|
+
hide the property that matters most: **the zero-dependency path is the default, and the optional
|
|
72
|
+
one can never be a hard requirement.**
|
|
73
|
+
|
|
74
|
+
The same shape governs the AI bridge. `ai.py` shells out to the `claude` CLI or
|
|
75
|
+
`ANTHROPIC_API_KEY` when available and degrades to heuristics when not, so `search --smart`,
|
|
76
|
+
`explain` and `distill` get worse without a key, never broken.
|
|
77
|
+
|
|
78
|
+
## Three item kinds, one scanner
|
|
79
|
+
|
|
80
|
+
`catalog.scan_dir` walks a tap's clone and classifies every file into one of three kinds:
|
|
81
|
+
|
|
82
|
+
| Kind | Recognised by | Installable |
|
|
83
|
+
|------|---------------|-------------|
|
|
84
|
+
| `skill` | `SKILL.md` | yes — copied into the canonical store |
|
|
85
|
+
| `rule` | `.mdc`, `.cursorrules`, `.windsurfrules`, `.clinerules` | yes — materialised into each agent's context file |
|
|
86
|
+
| `workflow` | Markdown under `commands/`, `agents/`, `workflows/` | yes — rendered per agent, TOML for Gemini |
|
|
87
|
+
|
|
88
|
+
Per-agent *formats* are pure functions in `core/`: `rules.CONTEXT_FILES` maps an agent with no
|
|
89
|
+
rules directory to its context file, and `workflows.TOML_COMMAND_AGENTS` marks the agents whose
|
|
90
|
+
slash commands are TOML. Gemini's `commands/` slot is `.toml`
|
|
91
|
+
(`workflows.render_gemini_command`) while its `agents/` slot stays verbatim Markdown — getting that
|
|
92
|
+
backwards produces a file the agent silently never loads.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# C4 Level 2 — Containers
|
|
2
|
+
|
|
3
|
+
The deployable and persistent pieces inside boost. Everything here lives on one machine: boost has
|
|
4
|
+
no server side, and every path is resolved at call time from `$HOME` (or `$BOOST_HOME`) by
|
|
5
|
+
`core/paths.py`, which is what makes `HOME=<tempdir>` sandboxing work in tests.
|
|
6
|
+
|
|
7
|
+
```mermaid
|
|
8
|
+
C4Container
|
|
9
|
+
title Container Diagram — boost
|
|
10
|
+
|
|
11
|
+
Person(dev, "Developer", "Runs boost commands")
|
|
12
|
+
System_Ext(agents, "AI coding agents", "Claude Code, Cursor, Windsurf, Gemini CLI")
|
|
13
|
+
System_Ext(github, "GitHub", "Registry repos and skill sources")
|
|
14
|
+
|
|
15
|
+
Container_Boundary(boost, "boost") {
|
|
16
|
+
Container(cli, "boost CLI", "Python 3.9+, stdlib only", "78 commands in 8 groups; lazy-imports one module per invocation")
|
|
17
|
+
Container(mcp, "MCP server", "JSON-RPC over stdio", "Exposes search/install/doctor as agent tools")
|
|
18
|
+
Container(web, "boost serve", "http.server", "Local read-only web UI")
|
|
19
|
+
Container(engine, "core engine", "Python package", "Catalog, retrieval, store, trust — see the component diagram")
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
Boundary(state, "boost state — ~/.boost") {
|
|
23
|
+
ContainerDb(repos, "repos/", "shallow git clones", "Tapped registries")
|
|
24
|
+
ContainerDb(cache, "cache/", "JSON", "Catalogs built from frontmatter")
|
|
25
|
+
ContainerDb(statedir, "state/", "JSON", "Pins, policy, profiles, snapshots")
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
Boundary(installed, "installed skills") {
|
|
29
|
+
ContainerDb(store, "~/.agents/skills", "files + .skill-lock.json v3", "Canonical store — single source of truth")
|
|
30
|
+
ContainerDb(links, "~/.claude, ~/.cursor, ~/.windsurf", "symlinks into the store", "Three linking agents")
|
|
31
|
+
ContainerDb(gemini, "~/.gemini", "GEMINI.md + TOML commands", "Rules and workflows only")
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
Rel(dev, cli, "Invokes")
|
|
35
|
+
Rel(agents, mcp, "Calls tools", "stdio")
|
|
36
|
+
Rel(cli, engine, "Delegates to")
|
|
37
|
+
Rel(mcp, engine, "Delegates to")
|
|
38
|
+
Rel(web, engine, "Reads from")
|
|
39
|
+
Rel(engine, github, "Clones and searches", "git, REST")
|
|
40
|
+
Rel(engine, repos, "Clones taps into")
|
|
41
|
+
Rel(engine, cache, "Indexes catalogs into")
|
|
42
|
+
Rel(engine, statedir, "Persists policy and pins")
|
|
43
|
+
Rel(engine, store, "Copies skills into")
|
|
44
|
+
Rel(engine, links, "Symlinks out to")
|
|
45
|
+
Rel(engine, gemini, "Materialises rules and commands")
|
|
46
|
+
Rel(agents, store, "Reads directly", "Gemini CLI only")
|
|
47
|
+
Rel(agents, links, "Reads")
|
|
48
|
+
|
|
49
|
+
UpdateLayoutConfig($c4ShapeInRow="2", $c4BoundaryInRow="2")
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Four agent targets, but only three get symlinks
|
|
53
|
+
|
|
54
|
+
Gemini CLI implements the Agent Skills standard and discovers `~/.agents/skills` — the canonical
|
|
55
|
+
store — *directly*, so it is configured with `links_skills: false`. Linking into `~/.gemini/skills`
|
|
56
|
+
as well would put one skill in two of its discovery tiers, where the `.agents` alias out-ranks
|
|
57
|
+
whatever was linked, costing a "Skill conflict detected" line per skill per session and buying
|
|
58
|
+
nothing.
|
|
59
|
+
|
|
60
|
+
That distinction is load-bearing for anything you write:
|
|
61
|
+
|
|
62
|
+
- Iterate `agents.linking_agents()` for anything symlink-shaped — linking, unlinking, stale-link
|
|
63
|
+
sweeps, coverage counts.
|
|
64
|
+
- Use `agents.enabled_agents()` for rules and workflows, which materialise into `~/.gemini/` like
|
|
65
|
+
any other agent's dotdir. `agents.native_store_agents()` is the complement, for reporting.
|
|
66
|
+
|
|
67
|
+
## Why the canonical store exists
|
|
68
|
+
|
|
69
|
+
One copy of each skill lives in `~/.agents/skills`; every linking agent gets a symlink to it. That
|
|
70
|
+
is what makes "install once, available everywhere" true without N copies drifting apart, and it is
|
|
71
|
+
why `.skill-lock.json` lives beside the store rather than per-agent. Uninstall removes the copy and
|
|
72
|
+
sweeps the links; `boost sync` reconciles reality against the lock.
|
|
73
|
+
|
|
74
|
+
## The state directory is not the store
|
|
75
|
+
|
|
76
|
+
`~/.boost` is *derived* data — clones, indexes and preferences that boost can rebuild. `~/.agents`
|
|
77
|
+
is *user* data: the skills themselves. Deleting `~/.boost` costs a re-tap and a re-index; deleting
|
|
78
|
+
`~/.agents/skills` uninstalls everything. Keeping them apart is deliberate.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# C4 Level 1 — System context
|
|
2
|
+
|
|
3
|
+
Who uses boost, and what it talks to. This is the only diagram that shows boost as a single box;
|
|
4
|
+
every other diagram in this directory opens that box.
|
|
5
|
+
|
|
6
|
+
```mermaid
|
|
7
|
+
C4Context
|
|
8
|
+
title System Context — boost
|
|
9
|
+
|
|
10
|
+
Person(dev, "Developer", "Installs and governs agent skills")
|
|
11
|
+
|
|
12
|
+
System(boost, "boost", "CLI + MCP server that finds, installs and governs the skill, rule and workflow files AI coding agents run on")
|
|
13
|
+
|
|
14
|
+
System_Ext(agents, "AI coding agents", "Claude Code, Cursor, Windsurf, Gemini CLI")
|
|
15
|
+
System_Ext(github, "GitHub", "Hosts registry repos (taps) and skill sources")
|
|
16
|
+
System_Ext(llm, "Anthropic API / claude CLI", "Optional LLM-assisted ranking and authoring")
|
|
17
|
+
System_Ext(embed, "Voyage / OpenAI embeddings", "Optional vectors for dense retrieval")
|
|
18
|
+
System_Ext(pypi, "PyPI", "Distributes the boost-skill-cli package")
|
|
19
|
+
|
|
20
|
+
Rel(dev, boost, "Runs commands", "terminal")
|
|
21
|
+
Rel(dev, pypi, "Installs boost from", "pipx / pip")
|
|
22
|
+
Rel(agents, boost, "Calls boost_search / boost_install", "MCP, JSON-RPC over stdio")
|
|
23
|
+
Rel(boost, github, "Clones taps and searches code", "git, REST")
|
|
24
|
+
Rel(boost, agents, "Writes skills, rules and slash-commands", "files + symlinks")
|
|
25
|
+
Rel(boost, llm, "Ranks, explains, distills", "optional, degrades to heuristics")
|
|
26
|
+
Rel(boost, embed, "Embeds the catalog", "optional, falls back to BM25")
|
|
27
|
+
|
|
28
|
+
UpdateLayoutConfig($c4ShapeInRow="3", $c4BoundaryInRow="1")
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## What the boundaries mean
|
|
32
|
+
|
|
33
|
+
**boost never requires the network to be useful.** Both external AI services are optional and
|
|
34
|
+
degrade rather than fail: `core/ai.py` falls back to heuristics when neither the `claude` CLI nor
|
|
35
|
+
`ANTHROPIC_API_KEY` is present, and `core/dense.py` falls back to BM25 when the `[rag]` extra or an
|
|
36
|
+
embeddings key is missing. Only tapping and installing genuinely need GitHub.
|
|
37
|
+
|
|
38
|
+
**The agents are consumers, not integrations.** boost does not drive an agent or run inside one.
|
|
39
|
+
It writes files into the locations agents already read, so a skill installed once is visible to
|
|
40
|
+
every configured agent with no per-agent wiring — see
|
|
41
|
+
[c4-containers.md](c4-containers.md) for where those files land.
|
|
42
|
+
|
|
43
|
+
**The shipped runtime is stdlib-only.** `[project].dependencies` is empty by design, so the arrow
|
|
44
|
+
to PyPI carries a package with no runtime dependency closure of its own. Everything optional lives
|
|
45
|
+
behind an extra.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# C4 Dynamic — what `boost install` actually does
|
|
2
|
+
|
|
3
|
+
The install path is where most of the engine meets. This is the `user`-scope skill case; rules and
|
|
4
|
+
workflows branch at step 5 into `_install_rule` / `_install_workflow`, and `project` scope writes
|
|
5
|
+
real directories inside the repo instead of symlinking out of the canonical store.
|
|
6
|
+
|
|
7
|
+
```mermaid
|
|
8
|
+
C4Dynamic
|
|
9
|
+
title Dynamic Diagram — boost install <name> (user scope, kind=skill)
|
|
10
|
+
|
|
11
|
+
Person(dev, "Developer", "Runs the command")
|
|
12
|
+
|
|
13
|
+
Container_Boundary(engine, "boost_cli") {
|
|
14
|
+
Component(cmd, "commands/pkg", "Python", "Thin CLI glue")
|
|
15
|
+
Component(cat, "core/registry + catalog", "Python", "Resolves the entry")
|
|
16
|
+
Component(res, "core/resolve", "Python", "Dependency closure")
|
|
17
|
+
Component(trust, "core/policy + capabilities + scanners", "Python", "Governance gate")
|
|
18
|
+
Component(store, "core/store", "Python", "Copy and link")
|
|
19
|
+
Component(targets, "core/agents + rules + workflows", "Python", "Per-agent materialisation")
|
|
20
|
+
Component(lock, "core/lockfile + integrity", "Python", "Records the digest")
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
ContainerDb(canon, "~/.agents/skills", "files", "Canonical store")
|
|
24
|
+
ContainerDb(links, "~/.claude, ~/.cursor, ~/.windsurf", "symlinks", "Linking agents")
|
|
25
|
+
|
|
26
|
+
Rel(dev, cmd, "1. boost install <name>")
|
|
27
|
+
Rel(cmd, cat, "2. Look up the entry in the cached catalog")
|
|
28
|
+
Rel(cmd, res, "3. Expand to the full dependency closure")
|
|
29
|
+
Rel(cmd, store, "4. install(entry)")
|
|
30
|
+
Rel(store, trust, "5. Gate: policy, capabilities, typosquat, secrets, injection")
|
|
31
|
+
Rel(store, canon, "6. Copy the skill directory in")
|
|
32
|
+
Rel(store, targets, "7. Link and materialise per agent")
|
|
33
|
+
Rel(targets, links, "8. Symlink into each linking agent")
|
|
34
|
+
Rel(store, lock, "9. Record version + sha256 in .skill-lock.json")
|
|
35
|
+
Rel(store, dev, "10. Report what was written")
|
|
36
|
+
|
|
37
|
+
UpdateRelStyle(store, trust, $offsetY="-20")
|
|
38
|
+
UpdateRelStyle(store, lock, $offsetY="20")
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## The parts that are easy to get wrong
|
|
42
|
+
|
|
43
|
+
**Step 5 fails closed.** The gate raises `BoostError` rather than warning. A skill whose declared
|
|
44
|
+
capabilities exceed policy, or that trips the secret / prompt-injection / typosquat scanners, is
|
|
45
|
+
not installed at all — there is no "installed but quarantined" state to reason about later.
|
|
46
|
+
|
|
47
|
+
**Step 7 is not "symlink into every agent".** Only `agents.linking_agents()` get symlinks. Gemini
|
|
48
|
+
CLI reads `~/.agents/skills` natively and is deliberately excluded, because linking into
|
|
49
|
+
`~/.gemini/skills` too would put one skill in two of its discovery tiers and produce a "Skill
|
|
50
|
+
conflict detected" line per skill per session. Rules and workflows *do* materialise into
|
|
51
|
+
`~/.gemini/`, so the right helper depends on what you are writing —
|
|
52
|
+
see [c4-containers.md](c4-containers.md).
|
|
53
|
+
|
|
54
|
+
**Step 9 is binding, not advisory.** `core/integrity` makes the recorded digest enforceable, which
|
|
55
|
+
is what lets `boost sync` and `boost doctor` tell "the user edited this skill" apart from "the tap
|
|
56
|
+
moved underneath it". `core/staleness` is the single source of truth for the second question.
|
|
57
|
+
|
|
58
|
+
## Where uninstall differs
|
|
59
|
+
|
|
60
|
+
Uninstall is not the reverse of this diagram. It removes the canonical copy, sweeps every symlink
|
|
61
|
+
that pointed at it — including stale links left by an agent that was disabled since install — and
|
|
62
|
+
drops the lock entry. Sweeping links for agents that are *not* currently enabled is the part
|
|
63
|
+
hand-rolled reversals miss, which is why `store.uninstall` owns it rather than the command layer.
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
id: dependabot-regeneration-drops-platform-pins
|
|
3
3
|
board: code
|
|
4
4
|
section: internals
|
|
5
|
-
status:
|
|
5
|
+
status: shipped
|
|
6
6
|
category: Build · Bug
|
|
7
7
|
complexity: M
|
|
8
8
|
impact: High
|
|
9
9
|
wow: 3
|
|
10
10
|
note: every pip bump PR is unmergeable — 2 of 2 observed, both red on the install step
|
|
11
11
|
order: 36
|
|
12
|
-
owner:
|
|
13
|
-
pr:
|
|
12
|
+
owner: loop/dependabot-lock-guard
|
|
13
|
+
pr: 342
|
|
14
14
|
title: Dependabot cannot regenerate the hash-pinned locks
|
|
15
15
|
---
|
|
16
16
|
<b>Every Dependabot PR that touches <code>requirements/*.txt</code> is unmergeable</b>, and the
|
|
@@ -49,6 +49,19 @@ Dependabot bump can be <i>reproduced</i> rather than merged — take the version
|
|
|
49
49
|
re-resolve that one package universally, and every other pin (markers included) stays as committed.
|
|
50
50
|
Both open bumps were landed that way: <code>hypothesis</code> 6.161.6 to 6.163.0 and
|
|
51
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.
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
<code>colorama</code> and <code>pywin32-ctypes</code> intact.
|
|
53
|
+
<b>Shipped:</b> both remaining halves. The <code>/requirements</code> entry now carries
|
|
54
|
+
<code>open-pull-requests-limit: 0</code>, which switches off <i>version</i> updates — the ones that
|
|
55
|
+
regenerate the lock — while <b>security</b> updates ignore the limit and keep firing, so the entry
|
|
56
|
+
still earns its place. The <code>/</code> entry is untouched; narrowing that one is
|
|
57
|
+
[[dependabot-root-pip-entry-duplicates-requirements]].
|
|
58
|
+
And the guard the card asked for exists: <code>requirements/platform-pins.lock</code> records every
|
|
59
|
+
marker-gated pin <b>by name and marker but not version</b>, so a routine bump leaves it untouched
|
|
60
|
+
and only a change in the <i>shape</i> of a resolution moves a line.
|
|
61
|
+
<code>lock_toolchain.py --audit</code> diffs the locks against it and <b>runs first inside
|
|
62
|
+
<code>--check</code></b>, before uv is invoked at all — it reads only committed files, so it also
|
|
63
|
+
runs in the unit suite and on a runner that could not resolve. A lost pin now fails naming the
|
|
64
|
+
package, the group and the marker it lost, and prints the <code>-P</code> command that reproduces
|
|
65
|
+
the bump properly. A <i>lost</i> pin and a <i>new</i> pin are reported differently on purpose: the
|
|
66
|
+
same textual drift, but one is a broken install on a platform CI never resolves on and the other is
|
|
67
|
+
routine — collapsing them into one "stale" message is how this stayed invisible the first time.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: internal-architecture-diagrams
|
|
3
|
+
board: code
|
|
4
|
+
section: docsite
|
|
5
|
+
status: shipped
|
|
6
|
+
category: Docs · Onboarding
|
|
7
|
+
complexity: M
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 3
|
|
10
|
+
note: 45 core modules and an enforced layering rule, with no diagram of either
|
|
11
|
+
order: 12
|
|
12
|
+
owner: loop/architecture-diagrams
|
|
13
|
+
pr: 345
|
|
14
|
+
title: The engine had no architecture diagram — and the one written rule was documented backwards
|
|
15
|
+
---
|
|
16
|
+
boost had <b>no internal architecture diagram of any kind</b>. <code>docs/rag-architecture.md</code>
|
|
17
|
+
covers retrieval and <code>docs/DEBUGGING.md</code> covers diagnostics, but nothing described the
|
|
18
|
+
shape of the thing: 45 modules in <code>boost_cli/core</code>, 78 commands across 12 command
|
|
19
|
+
modules, four agent targets that are deliberately <i>not</i> symmetric, and a
|
|
20
|
+
<code>cli → commands → core</code> layering rule that
|
|
21
|
+
<code>import-linter</code> enforces on every build. A new contributor — or a new agent session —
|
|
22
|
+
had to reconstruct all of that from <code>ls</code>.
|
|
23
|
+
|
|
24
|
+
Shipped as C4-model diagrams in Mermaid under <code>docs/architecture/</code>, so they render on
|
|
25
|
+
GitHub and stay reviewable in a diff rather than being a binary nobody updates: context, containers,
|
|
26
|
+
core components, and a dynamic walk through <code>boost install</code>. Mermaid was already a
|
|
27
|
+
dependency-free choice here — the repo had none before this, so nothing new ships.
|
|
28
|
+
|
|
29
|
+
Writing them turned up a documentation bug worth more than the diagrams. <code>CLAUDE.md</code>
|
|
30
|
+
stated <b>"Only <code>skill</code> installs — <code>store.install</code> refuses non-skill kinds;
|
|
31
|
+
rules/workflows are search/tap-only."</b> That is backwards: <code>store.install</code> dispatches
|
|
32
|
+
to <code>_install_rule</code> and <code>_install_workflow</code>, every kind honours
|
|
33
|
+
<code>scope</code>, and it raises only for a kind outside the three. The consequence is not
|
|
34
|
+
cosmetic — installing a <i>rule</i> materialises it into the agent's context file, so a
|
|
35
|
+
<code>boost install</code> of a rule appends to <code>~/.claude/CLAUDE.md</code> and is read every
|
|
36
|
+
session afterwards. Every agent reading <code>CLAUDE.md</code> to learn this repo was being told the
|
|
37
|
+
most invasive install kind could not happen. Corrected in the same change, with the landing places
|
|
38
|
+
for all three kinds spelled out.
|
|
39
|
+
|
|
40
|
+
The diagrams are hand-written rather than generated, which is a deliberate trade: they describe
|
|
41
|
+
structure — layers, boundaries, which component owns which decision — not anything that moves on a
|
|
42
|
+
routine edit, so drift should be rare and visible in review. <code>docs/architecture/README.md</code>
|
|
43
|
+
lists the four claims most worth re-checking against the code when the engine changes, so the
|
|
44
|
+
staleness question has an answer rather than being left to erode.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: scheduled-toolchain-lock-regeneration
|
|
3
|
+
board: code
|
|
4
|
+
section: internals
|
|
5
|
+
status: planned
|
|
6
|
+
category: Build · Gap
|
|
7
|
+
complexity: M
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 2
|
|
10
|
+
note: the toolchain lock now has no proactive update path — by choice, but nothing replaces it yet
|
|
11
|
+
order: 36
|
|
12
|
+
owner:
|
|
13
|
+
pr:
|
|
14
|
+
title: The toolchain lock has no proactive update path any more
|
|
15
|
+
---
|
|
16
|
+
<code>#342</code> set <code>open-pull-requests-limit: 0</code> on the <code>/requirements</code>
|
|
17
|
+
Dependabot entry, because Dependabot cannot regenerate a hash-pinned universal lock without dropping
|
|
18
|
+
the pins whose environment markers exclude them on the resolving platform (see
|
|
19
|
+
[[dependabot-regeneration-drops-platform-pins]]). That was the right call — every pip bump it raised
|
|
20
|
+
was unmergeable — but it reverses the reason the entry was added in the first place: <b>a pin with no
|
|
21
|
+
update path is only half the job</b>, and the dev/CI toolchain now has none.
|
|
22
|
+
|
|
23
|
+
The trade is bounded rather than silent, which is why this is <code>Med</code> and not
|
|
24
|
+
<code>High</code>. Dependabot <b>security</b> updates ignore the limit and still fire;
|
|
25
|
+
<code>pip-audit.yml</code> runs weekly against the resolved closure and <b>blocks</b> on a live CVE
|
|
26
|
+
(Dependabot only ever opened a PR); and <code>osv-scanner.yml</code> covers what a PR introduces. So
|
|
27
|
+
the exposure is not "a vulnerable pin sits there unnoticed" — it is
|
|
28
|
+
<b>stale-but-not-vulnerable tooling</b>, drifting further from upstream every week until something
|
|
29
|
+
forces a bump.
|
|
30
|
+
|
|
31
|
+
The replacement the card already named: regenerate on a schedule with
|
|
32
|
+
<code>scripts/lock_toolchain.py --upgrade</code> and open the PR from that, so the resolution stays
|
|
33
|
+
universal and every conditional pin survives. Four points worth getting right rather than guessing.
|
|
34
|
+
<b>First</b>, it needs <code>uv</code> and the network — the required gate's <code>--check</code>
|
|
35
|
+
already assumes both on CI, but no scheduled job currently sets them up. <b>Second</b>,
|
|
36
|
+
<code>--upgrade</code> re-resolves all five groups, so a weekly cadence would land large multi-group
|
|
37
|
+
diffs; per-group jobs, or a lower cadence, keep a bump reviewable, and the reason <code>-P</code>
|
|
38
|
+
exists at all is that a bare <code>--upgrade</code> buries one package in unrelated churn.
|
|
39
|
+
<b>Third</b>, a new workflow is not free in this repo: it must be zizmor-clean with every
|
|
40
|
+
<code>uses:</code> pinned to a <i>peeled</i> commit SHA, carry narrow <code>permissions</code>, and
|
|
41
|
+
— if it is ever made a required context — grow a <code>merge_group:</code> trigger, which
|
|
42
|
+
<code>check_required_checks.py</code> enforces. <b>Fourth</b>, nothing needs to guard the output:
|
|
43
|
+
<code>lock_toolchain.py --audit</code> and <code>requirements/platform-pins.lock</code> already fail
|
|
44
|
+
closed on a lost marker-gated pin, so a regeneration job that got it wrong would be caught the same
|
|
45
|
+
way a Dependabot PR now is.
|