boost-skill-cli 1.0.297__tar.gz → 1.0.299__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.297 → boost_skill_cli-1.0.299}/.vale/styles/config/vocabularies/boost/accept.txt +3 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/CLAUDE.md +9 -2
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/PKG-INFO +4 -2
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/README.md +3 -1
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_skill_cli.egg-info/PKG-INFO +4 -2
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_skill_cli.egg-info/SOURCES.txt +7 -0
- boost_skill_cli-1.0.299/docs/architecture/README.md +45 -0
- boost_skill_cli-1.0.299/docs/architecture/c4-components-core.md +92 -0
- boost_skill_cli-1.0.299/docs/architecture/c4-containers.md +78 -0
- boost_skill_cli-1.0.299/docs/architecture/c4-context.md +45 -0
- boost_skill_cli-1.0.299/docs/architecture/c4-dynamic-install.md +63 -0
- boost_skill_cli-1.0.299/docs/roadmap/items/internal-architecture-diagrams.md +44 -0
- boost_skill_cli-1.0.299/docs/roadmap/items/mutation-shard-floor-is-one-file.md +101 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap.html +101 -3
- boost_skill_cli-1.0.299/scripts/mutation_shards.py +833 -0
- boost_skill_cli-1.0.299/scripts/mutation_weights.json +1129 -0
- boost_skill_cli-1.0.299/tests/unit/test_mutation_subfile_shards.py +589 -0
- boost_skill_cli-1.0.297/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -43
- boost_skill_cli-1.0.297/scripts/mutation_shards.py +0 -424
- boost_skill_cli-1.0.297/scripts/mutation_weights.json +0 -49
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/.gitattributes +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/.gitignore +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/.lycheeignore +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/.vale.ini +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/LICENSE +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/MANIFEST.in +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/Makefile +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/SECURITY.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/codecov.yml +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/adapters.html +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/carousel.html +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/commands.html +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/demo.gif +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/demo.tape +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/eval.html +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/index.html +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/evals/README.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/evals/__init__.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/evals/baseline.json +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/evals/metrics.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/examples/README.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/index.html +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/noxfile.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/pyproject.toml +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/setup.cfg +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/sonar-project.properties +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/style/README.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/style/boost.css +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/style/boost.js +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/style/demo.html +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/conftest.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/visual/package-lock.json +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.0.297 → boost_skill_cli-1.0.299}/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.299
|
|
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.299'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 299)
|
|
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.299
|
|
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
|
|
@@ -500,6 +506,7 @@ tests/unit/test_mcphost.py
|
|
|
500
506
|
tests/unit/test_minisign.py
|
|
501
507
|
tests/unit/test_mutation_hardening.py
|
|
502
508
|
tests/unit/test_mutation_shards.py
|
|
509
|
+
tests/unit/test_mutation_subfile_shards.py
|
|
503
510
|
tests/unit/test_mutmut_source_paths.py
|
|
504
511
|
tests/unit/test_nethttp.py
|
|
505
512
|
tests/unit/test_output.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.
|
|
@@ -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,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: mutation-shard-floor-is-one-file
|
|
3
|
+
board: code
|
|
4
|
+
section: pipeline
|
|
5
|
+
status: shipped
|
|
6
|
+
category: CI speed
|
|
7
|
+
complexity: M
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 3
|
|
10
|
+
note: shard 0 is store.py alone — 9.3-11.7 min against a 6.1 even split
|
|
11
|
+
order: 61
|
|
12
|
+
owner: loop/mutation-subfile-shards
|
|
13
|
+
pr: 346
|
|
14
|
+
title: The mutation gate's floor is a single file — shard 0 <em>is</em> <code>store.py</code>
|
|
15
|
+
---
|
|
16
|
+
Sharding took the mutation gate from ~28 minutes to ~12 (see
|
|
17
|
+
<code>mutation-gate-was-the-whole-critical-path</code>), but it cannot go lower without
|
|
18
|
+
splitting one file. Measured across four consecutive six-shard runs:
|
|
19
|
+
|
|
20
|
+
<code>638bffeb</code> ran 1.9, 3.9, 5.7, 6.7, 7.2, <b>11.7</b> minutes;
|
|
21
|
+
<code>02c18bd6</code> ran 2.7, 5.0, 5.2, 5.5, 5.9, <b>11.7</b>; <code>fc427839</code> ran 3.1,
|
|
22
|
+
4.8, 5.3, 6.4, 7.3, <b>9.7</b>; and <code>f42e617b</code> ran 2.9, 4.9, 5.5, 6.6, 7.3,
|
|
23
|
+
<b>9.3</b>.
|
|
24
|
+
<b><code>mutation-shard (0)</code> was the slowest leg in all four.</b> Total work is
|
|
25
|
+
36–37 job-minutes, so a perfectly even split would be <b>6.1</b>; the actual critical
|
|
26
|
+
path is 9.3–11.7, or <b>1.5–1.9×</b> that. The gap is not bad packing —
|
|
27
|
+
the planner balances mutant <em>count</em> to within 1.10× of ideal. It is that count is
|
|
28
|
+
a poor proxy for time: measured throughput spans <b>3.39 to 14.19 mutants/second</b>, because a
|
|
29
|
+
<code>store.py</code> mutant re-runs a far larger covering test set than an
|
|
30
|
+
<code>ed25519.py</code> one, and survivors run their tests to completion where kills exit early.
|
|
31
|
+
|
|
32
|
+
Re-weighting the planner by seconds would even out the <em>billed</em> minutes but not the wall
|
|
33
|
+
clock, because <code>store.py</code> is <b>1931 mutants (18.4% of the repo)</b> in one file and
|
|
34
|
+
longest-processing-time packing cannot place a single file across two bins. The floor is that
|
|
35
|
+
file.
|
|
36
|
+
|
|
37
|
+
The way under it: mutant names are addressable per function, so
|
|
38
|
+
<code>boost_cli.core.store.install_*</code> can be its own shard. That would bring the critical
|
|
39
|
+
path toward the 6.1-minute even split. Two things must survive the change —
|
|
40
|
+
<code>pattern_for()</code> still has to emit patterns that match nothing else, and
|
|
41
|
+
<code>cmd_merge</code>'s completeness assertion has to keep failing closed, since mutmut counts
|
|
42
|
+
an unrun mutant inside <code>total</code> and a partial merge would silently depress the score
|
|
43
|
+
rather than error.
|
|
44
|
+
|
|
45
|
+
<b>Shipped.</b> A file heavier than an even share is now split into one unit per top-level
|
|
46
|
+
function, and those units pack independently. <code>store.py</code>'s 31 functions come out as a
|
|
47
|
+
<b>complete partition</b> — each assigned exactly once, each matched by exactly one pattern
|
|
48
|
+
— and spread across all six shards, so no shard is more than <b>27%</b> store.py where one
|
|
49
|
+
was previously <b>100%</b>. By mutant count the critical path drops from <b>1931 to 1786</b>, i.e.
|
|
50
|
+
from 1.08× of ideal to <b>1.00×</b>, and the packing lands within 0.4% of a perfect
|
|
51
|
+
split (1777–1786 against an ideal 1779).
|
|
52
|
+
|
|
53
|
+
Both invariants are asserted rather than argued. Patterns anchor on the
|
|
54
|
+
<code>__mutmut_</code> suffix, which is what stops <code>install</code> swallowing
|
|
55
|
+
<code>install_from_path</code> — a real pair in this file. And the merge now <b>unions</b>
|
|
56
|
+
each shard's results: every shard writes a <code>.meta</code> listing every key in the file with
|
|
57
|
+
<code>None</code> against what it did not run, so a mutant is only "unrun" when it is
|
|
58
|
+
<code>None</code> everywhere. A function no shard was assigned therefore reddens the gate. That
|
|
59
|
+
was verified adversarially — a synthetic mutant name outside the enumerated partition matches
|
|
60
|
+
no shard's pattern, stays <code>None</code>, and is reported. Any file whose partition cannot be
|
|
61
|
+
enumerated exactly (a class with methods, a duplicate name, a syntax error) is left whole rather
|
|
62
|
+
than guessed at.
|
|
63
|
+
|
|
64
|
+
<b>Splitting alone was not enough, and the first green run proved it.</b> With
|
|
65
|
+
<code>store.py</code> divided, <code>mutation-shard (0)</code> fell from 9.3–11.7 minutes to
|
|
66
|
+
<b>4.7</b> — it is no longer the slowest leg, which is exactly what the card predicted. But
|
|
67
|
+
shard 3 became the new bottleneck at <b>10.3</b> minutes, leaving the run at 1.6× ideal. The
|
|
68
|
+
diagnosis above was right and incomplete: counts were balanced to 0.4%, and the <em>time</em>
|
|
69
|
+
spread across shards was still 2.6×.
|
|
70
|
+
|
|
71
|
+
So the second half is weighting by measured time, which a divisible file finally makes possible.
|
|
72
|
+
<code>weights</code> now records mutmut's per-mutant durations and the planner prefers them. The
|
|
73
|
+
count-based split, balanced to <b>1.08×</b> of ideal <i>by count</i>, was <b>2.24×</b> of
|
|
74
|
+
ideal <i>by time</i> — one shard carrying 39.3 minutes of summed test time against a
|
|
75
|
+
17.5-minute even share.
|
|
76
|
+
|
|
77
|
+
<b>Measured, that bought less than the arithmetic suggested.</b> Time-weighting moved the critical
|
|
78
|
+
path from 10.3 to <b>9.3</b> minutes (shards 5.2, 5.8, 6.3, 6.8, 6.2, 9.3), 1.41× ideal rather
|
|
79
|
+
than the 1.04× the summed-time model predicted. Summed test time is not shard wall clock:
|
|
80
|
+
mutmut runs mutants across parallel workers, so a shard's elapsed time is its summed time divided by
|
|
81
|
+
an effective worker count, and the model ignored that. Per-shard fixed overhead was ruled out by
|
|
82
|
+
measurement rather than assumed — checkout, venv and install together are <b>0.4 minutes</b>,
|
|
83
|
+
against 4.8–8.9 minutes inside <code>mutmut run</code> itself.
|
|
84
|
+
|
|
85
|
+
The residual had a specific cause, and it is the same proxy error one level down: a split file's
|
|
86
|
+
time was apportioned across its functions by <em>mutant count</em>. Across
|
|
87
|
+
<code>store.py</code>'s functions the per-mutant cost spans <b>0.273 s to 3.900 s</b> —
|
|
88
|
+
<b>14.3×</b> — and <code>install</code> alone is <b>36%</b> of the file's time from
|
|
89
|
+
<b>12%</b> of its mutants, so the shard that drew it ran 8.9 minutes against a 4.8-minute sibling.
|
|
90
|
+
<code>weights</code> now records per-<em>function</em> durations too and apportions on those, which
|
|
91
|
+
balances the plan to <b>0.06%</b>. Whether that closes the wall-clock gap is a claim the next run
|
|
92
|
+
gets to settle, not this card.
|
|
93
|
+
|
|
94
|
+
Two bugs found by running it rather than reasoning about it. mutmut records durations in
|
|
95
|
+
<b>seconds</b>, so summing them into a field named <code>millis</code> understated
|
|
96
|
+
<code>store.py</code>'s 2360 seconds of test time as 2.4 — a 1000× mislabel. And
|
|
97
|
+
requiring a duration for <i>every</i> file before trusting the tier was too brittle to fire: one
|
|
98
|
+
file of 46 (<code>util.py</code>) came back short on the first run, which would have silently
|
|
99
|
+
dropped the planner back to counting mutants and looked like the feature simply not working. A
|
|
100
|
+
missing file is now imputed at the measured mean rate, which keeps every weight in one unit
|
|
101
|
+
— the property that actually matters.
|