boost-skill-cli 1.0.281__tar.gz → 1.0.283__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.281 → boost_skill_cli-1.0.283}/.gitignore +5 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/.vale/styles/config/vocabularies/boost/accept.txt +1 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/Makefile +28 -3
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/PKG-INFO +42 -2
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/README.md +41 -1
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/configuration.py +12 -7
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/mcp.py +37 -10
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_skill_cli.egg-info/PKG-INFO +42 -2
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_skill_cli.egg-info/SOURCES.txt +14 -0
- boost_skill_cli-1.0.283/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +30 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap.html +27 -1
- boost_skill_cli-1.0.283/evals/README.md +157 -0
- boost_skill_cli-1.0.283/evals/__init__.py +6 -0
- boost_skill_cli-1.0.283/evals/baseline.json +550 -0
- boost_skill_cli-1.0.283/evals/faithfulness.py +382 -0
- boost_skill_cli-1.0.283/evals/golden_set.json +372 -0
- boost_skill_cli-1.0.283/evals/make_corpus.py +718 -0
- boost_skill_cli-1.0.283/evals/make_golden.py +276 -0
- boost_skill_cli-1.0.283/evals/metrics.py +198 -0
- boost_skill_cli-1.0.283/evals/run_evals.py +346 -0
- boost_skill_cli-1.0.283/scripts/eval_gate.py +240 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/setup.cfg +1 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_cli_configuration.py +7 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/smoke.sh +6 -1
- boost_skill_cli-1.0.283/tests/unit/test_eval_faithfulness.py +259 -0
- boost_skill_cli-1.0.283/tests/unit/test_eval_gate.py +194 -0
- boost_skill_cli-1.0.283/tests/unit/test_eval_metrics.py +255 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_mcp.py +9 -1
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/.gitattributes +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/.lycheeignore +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/.vale.ini +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/CLAUDE.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/LICENSE +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/MANIFEST.in +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/SECURITY.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/codecov.yml +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/adapters.html +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel.html +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/commands.html +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/demo.gif +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/demo.tape +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/eval.html +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/index.html +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/examples/README.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/index.html +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/noxfile.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/pyproject.toml +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/sonar-project.properties +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/style/README.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/style/boost.css +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/style/boost.js +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/style/demo.html +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/conftest.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/visual/visual_check.mjs +0 -0
|
@@ -230,6 +230,11 @@ mutants/
|
|
|
230
230
|
|
|
231
231
|
# sandboxed boost home for the Tier 1 eval corpus (`make eval` taps here)
|
|
232
232
|
.eval-home/
|
|
233
|
+
|
|
234
|
+
# `make evals` output. The generated corpus and index live in the system temp
|
|
235
|
+
# dir (see evals/run_evals.py), so only the per-run scores land here; the
|
|
236
|
+
# committed evals/baseline.json is what regressions are measured against.
|
|
237
|
+
evals/results.json
|
|
233
238
|
tests/visual/node_modules/
|
|
234
239
|
tests/visual/out/
|
|
235
240
|
tests/visual/package-lock.json
|
|
@@ -10,7 +10,7 @@ PYTEST := $(VENV)/bin/pytest
|
|
|
10
10
|
# pinned taps out of the developer's real ~/.boost.
|
|
11
11
|
EVAL_HOME := $(CURDIR)/.eval-home
|
|
12
12
|
|
|
13
|
-
.PHONY: venv test unit functional smoke coverage patch-coverage mutation lint check demo carousel clean-test eval eval-ai eval-rec eval-stats eval-explain audit dist-check bdd bench bench-cli fuzz post-deploy
|
|
13
|
+
.PHONY: venv test unit functional smoke coverage patch-coverage mutation lint check demo carousel clean-test eval eval-ai eval-rec eval-stats eval-explain evals evals-baseline evals-golden evals-online audit dist-check bdd bench bench-cli fuzz post-deploy
|
|
14
14
|
|
|
15
15
|
# Every tool comes from a hash-pinned requirements/*.txt — the same files CI
|
|
16
16
|
# installs (see scripts/lock_toolchain.py). pip enforces the hashes, so a dev
|
|
@@ -52,7 +52,7 @@ mutation:
|
|
|
52
52
|
$(PY) scripts/mutation_gate.py --run --min 80
|
|
53
53
|
|
|
54
54
|
lint:
|
|
55
|
-
$(VENV)/bin/ruff check boost_cli tests
|
|
55
|
+
$(VENV)/bin/ruff check boost_cli tests evals
|
|
56
56
|
$(VENV)/bin/mypy
|
|
57
57
|
$(VENV)/bin/pyright
|
|
58
58
|
$(VENV)/bin/lint-imports
|
|
@@ -72,6 +72,7 @@ lint:
|
|
|
72
72
|
$(PY) scripts/perf_gate.py
|
|
73
73
|
$(PY) scripts/check_anchors.py
|
|
74
74
|
$(PY) scripts/check_required_checks.py
|
|
75
|
+
$(PY) evals/make_golden.py --check
|
|
75
76
|
|
|
76
77
|
# Supply-chain CVE gate: fail on a known OSV/PyPI advisory in the project's
|
|
77
78
|
# dependency closure. Mirrors the pip-audit CI workflow; run before releasing.
|
|
@@ -125,6 +126,30 @@ eval-explain:
|
|
|
125
126
|
PYTHON=$(PY) BOOST_HOME=$(EVAL_HOME) bash scripts/ensure_eval_corpus.sh
|
|
126
127
|
BOOST_HOME=$(EVAL_HOME) $(PY) scripts/eval_explain.py --fail-under 0.80
|
|
127
128
|
|
|
129
|
+
# Retrieval-quality gate over the HERMETIC golden set: recall@5/@10, MRR, and
|
|
130
|
+
# nDCG@5/@10 with graded (3/2/1) relevance, plus a paired-bootstrap regression
|
|
131
|
+
# test against the committed evals/baseline.json. Part of `check` and required
|
|
132
|
+
# in CI. Unlike `eval` above it needs no network and no API key: it generates
|
|
133
|
+
# its own corpus and taps it into a disposable BOOST_HOME under the system temp
|
|
134
|
+
# dir, so a metric moving can only mean the ranker moved.
|
|
135
|
+
evals:
|
|
136
|
+
$(PY) scripts/eval_gate.py --run
|
|
137
|
+
|
|
138
|
+
# Re-pin evals/baseline.json to the current scores. Deliberate: it is how you
|
|
139
|
+
# accept a ranking change, so it must be a separate commit that says why.
|
|
140
|
+
evals-baseline:
|
|
141
|
+
$(PY) evals/run_evals.py --save-baseline
|
|
142
|
+
|
|
143
|
+
# Regenerate evals/golden_set.json from evals/make_golden.py after editing the
|
|
144
|
+
# query table (`--check` runs in `lint` and fails on drift).
|
|
145
|
+
evals-golden:
|
|
146
|
+
$(PY) evals/make_golden.py
|
|
147
|
+
|
|
148
|
+
# The same five metrics over the pinned REAL-registry corpus `eval` uses.
|
|
149
|
+
# Needs the network; reported, never gated — mirrors `tests/smoke.sh --online`.
|
|
150
|
+
evals-online:
|
|
151
|
+
$(PY) evals/run_evals.py --online --faithfulness
|
|
152
|
+
|
|
128
153
|
# Opt-in Gherkin/BDD suite (tests/bdd) — additive to tests/functional, not a
|
|
129
154
|
# replacement. Needs the [bdd] extra (`pip install -e '.[bdd]'`); not part of
|
|
130
155
|
# `make check`.
|
|
@@ -183,7 +208,7 @@ demo:
|
|
|
183
208
|
carousel:
|
|
184
209
|
for t in docs/carousel/tapes/*.tape; do vhs "$$t"; done
|
|
185
210
|
|
|
186
|
-
check: lint eval test smoke mutation
|
|
211
|
+
check: lint eval evals test smoke mutation
|
|
187
212
|
@echo "== all gates passed =="
|
|
188
213
|
|
|
189
214
|
clean-test:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: boost-skill-cli
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.283
|
|
4
4
|
Summary: boost — Homebrew for AI coding skills
|
|
5
5
|
Author: Jonathan Reyes
|
|
6
6
|
License: GNU GENERAL PUBLIC LICENSE
|
|
@@ -997,16 +997,56 @@ reports, and the free services that monitor the project.
|
|
|
997
997
|
|
|
998
998
|
## Test suite
|
|
999
999
|
|
|
1000
|
-
|
|
1000
|
+
Four layers, all enforced (`make check` runs the full set; CI runs the same thing):
|
|
1001
1001
|
|
|
1002
1002
|
| Layer | What it does | Gate |
|
|
1003
1003
|
|---|---|---|
|
|
1004
1004
|
| `make test` | pytest across `tests/unit/` (every core module) and `tests/functional/` (drives all 78 commands in-process against sandboxed homes) | **≥80% line coverage** of `boost_cli` (`fail_under` in pyproject.toml) |
|
|
1005
1005
|
| `make smoke` | `tests/smoke.sh` — 170 checks run through the actual `./boost` shim (`--online` also hits real registries) | all pass |
|
|
1006
1006
|
| `make mutation` | [mutmut] mutates `boost_cli/core` (~9,900 mutants) and reruns the unit suite against each one | **≥80% killed** (`scripts/mutation_gate.py`) |
|
|
1007
|
+
| `make evals` | scores the search ranker on a graded golden set — recall@5/@10, MRR, nDCG@5/@10 | **metric floors + no statistically significant regression** (`scripts/eval_gate.py`) |
|
|
1007
1008
|
|
|
1008
1009
|
Dev setup: `make venv` (pulls in pytest, coverage, mutmut — the shipped
|
|
1009
1010
|
runtime itself stays dependency-free). Every test run uses a throwaway
|
|
1010
1011
|
`$HOME`, so your actual agent configs are never at risk.
|
|
1011
1012
|
|
|
1012
1013
|
[mutmut]: https://mutmut.readthedocs.io/
|
|
1014
|
+
|
|
1015
|
+
## Evaluation harness
|
|
1016
|
+
|
|
1017
|
+
Search quality is the one thing the suite above can't assert: every test can
|
|
1018
|
+
pass while the ranker quietly gets worse. `make evals` measures it. The harness
|
|
1019
|
+
is pure stdlib and fully offline — it generates its own corpus of skills, rules,
|
|
1020
|
+
and workflows and taps it into a disposable `BOOST_HOME`, so a metric that moves
|
|
1021
|
+
can only mean the *ranker* moved. See [`evals/README.md`](evals/README.md).
|
|
1022
|
+
|
|
1023
|
+
**Golden set** — [`evals/golden_set.json`](evals/golden_set.json): 36 realistic
|
|
1024
|
+
queries with **graded** relevance (3 perfect · 2 useful · 1 marginal) over the
|
|
1025
|
+
generated corpus. Generated and validated by `evals/make_golden.py`, which
|
|
1026
|
+
refuses a judgment naming a skill the corpus doesn't contain; `--check` fails CI
|
|
1027
|
+
on drift, so the file can never disagree with its source.
|
|
1028
|
+
|
|
1029
|
+
**Five metrics**, all computed by `evals/metrics.py`:
|
|
1030
|
+
|
|
1031
|
+
- **recall@5** / **recall@10** — of everything relevant, what fraction reached the top *k*.
|
|
1032
|
+
- **MRR** — 1/rank of the first relevant hit, averaged; sensitive only to the top of the list, which is where people look.
|
|
1033
|
+
- **nDCG@5** / **nDCG@10** — graded gain (`2^rel − 1`) with the standard `log2(rank + 1)` discount; the only metric that distinguishes the right results in the wrong order from the right order.
|
|
1034
|
+
|
|
1035
|
+
**Significance gating.** A metric dropping isn't automatically a regression —
|
|
1036
|
+
with 36 queries, one unlucky result moves the mean. So `scripts/eval_gate.py`
|
|
1037
|
+
fails a metric only when it falls more than 0.02 below the committed baseline
|
|
1038
|
+
**and** a seeded 10,000-resample paired bootstrap over the per-query deltas puts
|
|
1039
|
+
that drop at `p < 0.05`. Alongside that, each metric has an absolute floor set
|
|
1040
|
+
~0.05 below its first measured value, which catches the erosion that a
|
|
1041
|
+
compare-to-last-commit check never sees. Accepting a real ranking change is a
|
|
1042
|
+
deliberate `make evals-baseline` commit.
|
|
1043
|
+
|
|
1044
|
+
**Faithfulness.** `boost explain` and `boost distill` generate prose from a
|
|
1045
|
+
`SKILL.md`, and their failure mode is overclaiming. The harness scores that with
|
|
1046
|
+
the Ragas method — split the answer into atomic statements, verify each against
|
|
1047
|
+
the source, score supported/total — and reports it alongside what the runtime
|
|
1048
|
+
grounding guardrail in `boost explain` would do with the same reply. With no
|
|
1049
|
+
`claude` CLI and no `ANTHROPIC_API_KEY` it **skips rather than fails**, and
|
|
1050
|
+
reports a status instead of a number so "couldn't measure" is never mistaken for
|
|
1051
|
+
"scored zero". It's therefore outside `make check`; run it with
|
|
1052
|
+
`make evals-online`.
|
|
@@ -281,16 +281,56 @@ reports, and the free services that monitor the project.
|
|
|
281
281
|
|
|
282
282
|
## Test suite
|
|
283
283
|
|
|
284
|
-
|
|
284
|
+
Four layers, all enforced (`make check` runs the full set; CI runs the same thing):
|
|
285
285
|
|
|
286
286
|
| Layer | What it does | Gate |
|
|
287
287
|
|---|---|---|
|
|
288
288
|
| `make test` | pytest across `tests/unit/` (every core module) and `tests/functional/` (drives all 78 commands in-process against sandboxed homes) | **≥80% line coverage** of `boost_cli` (`fail_under` in pyproject.toml) |
|
|
289
289
|
| `make smoke` | `tests/smoke.sh` — 170 checks run through the actual `./boost` shim (`--online` also hits real registries) | all pass |
|
|
290
290
|
| `make mutation` | [mutmut] mutates `boost_cli/core` (~9,900 mutants) and reruns the unit suite against each one | **≥80% killed** (`scripts/mutation_gate.py`) |
|
|
291
|
+
| `make evals` | scores the search ranker on a graded golden set — recall@5/@10, MRR, nDCG@5/@10 | **metric floors + no statistically significant regression** (`scripts/eval_gate.py`) |
|
|
291
292
|
|
|
292
293
|
Dev setup: `make venv` (pulls in pytest, coverage, mutmut — the shipped
|
|
293
294
|
runtime itself stays dependency-free). Every test run uses a throwaway
|
|
294
295
|
`$HOME`, so your actual agent configs are never at risk.
|
|
295
296
|
|
|
296
297
|
[mutmut]: https://mutmut.readthedocs.io/
|
|
298
|
+
|
|
299
|
+
## Evaluation harness
|
|
300
|
+
|
|
301
|
+
Search quality is the one thing the suite above can't assert: every test can
|
|
302
|
+
pass while the ranker quietly gets worse. `make evals` measures it. The harness
|
|
303
|
+
is pure stdlib and fully offline — it generates its own corpus of skills, rules,
|
|
304
|
+
and workflows and taps it into a disposable `BOOST_HOME`, so a metric that moves
|
|
305
|
+
can only mean the *ranker* moved. See [`evals/README.md`](evals/README.md).
|
|
306
|
+
|
|
307
|
+
**Golden set** — [`evals/golden_set.json`](evals/golden_set.json): 36 realistic
|
|
308
|
+
queries with **graded** relevance (3 perfect · 2 useful · 1 marginal) over the
|
|
309
|
+
generated corpus. Generated and validated by `evals/make_golden.py`, which
|
|
310
|
+
refuses a judgment naming a skill the corpus doesn't contain; `--check` fails CI
|
|
311
|
+
on drift, so the file can never disagree with its source.
|
|
312
|
+
|
|
313
|
+
**Five metrics**, all computed by `evals/metrics.py`:
|
|
314
|
+
|
|
315
|
+
- **recall@5** / **recall@10** — of everything relevant, what fraction reached the top *k*.
|
|
316
|
+
- **MRR** — 1/rank of the first relevant hit, averaged; sensitive only to the top of the list, which is where people look.
|
|
317
|
+
- **nDCG@5** / **nDCG@10** — graded gain (`2^rel − 1`) with the standard `log2(rank + 1)` discount; the only metric that distinguishes the right results in the wrong order from the right order.
|
|
318
|
+
|
|
319
|
+
**Significance gating.** A metric dropping isn't automatically a regression —
|
|
320
|
+
with 36 queries, one unlucky result moves the mean. So `scripts/eval_gate.py`
|
|
321
|
+
fails a metric only when it falls more than 0.02 below the committed baseline
|
|
322
|
+
**and** a seeded 10,000-resample paired bootstrap over the per-query deltas puts
|
|
323
|
+
that drop at `p < 0.05`. Alongside that, each metric has an absolute floor set
|
|
324
|
+
~0.05 below its first measured value, which catches the erosion that a
|
|
325
|
+
compare-to-last-commit check never sees. Accepting a real ranking change is a
|
|
326
|
+
deliberate `make evals-baseline` commit.
|
|
327
|
+
|
|
328
|
+
**Faithfulness.** `boost explain` and `boost distill` generate prose from a
|
|
329
|
+
`SKILL.md`, and their failure mode is overclaiming. The harness scores that with
|
|
330
|
+
the Ragas method — split the answer into atomic statements, verify each against
|
|
331
|
+
the source, score supported/total — and reports it alongside what the runtime
|
|
332
|
+
grounding guardrail in `boost explain` would do with the same reply. With no
|
|
333
|
+
`claude` CLI and no `ANTHROPIC_API_KEY` it **skips rather than fails**, and
|
|
334
|
+
reports a status instead of a number so "couldn't measure" is never mistaken for
|
|
335
|
+
"scored zero". It's therefore outside `make check`; run it with
|
|
336
|
+
`make evals-online`.
|
|
@@ -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.283'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 283)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -917,11 +917,14 @@ def _tool_discover_github(args: dict):
|
|
|
917
917
|
|
|
918
918
|
REGISTRY.register(
|
|
919
919
|
"boost_search",
|
|
920
|
-
"
|
|
921
|
-
"
|
|
922
|
-
"
|
|
923
|
-
"
|
|
924
|
-
"
|
|
920
|
+
"Find an existing, installable skill instead of improvising one. Reach for "
|
|
921
|
+
"this at two moments: (1) when starting non-trivial work — check whether a "
|
|
922
|
+
"vetted skill already covers the task before planning it yourself; (2) as "
|
|
923
|
+
"the FIRST STOP before writing a skill, subagent, slash-command, rule, or "
|
|
924
|
+
"any reusable block of agent instructions from scratch. Searches thousands "
|
|
925
|
+
"of curated AI-agent skills across the configured registries and returns "
|
|
926
|
+
"ranked matches you can install in one call — don't reinvent one that "
|
|
927
|
+
"already exists.",
|
|
925
928
|
{"type": "object",
|
|
926
929
|
"properties": {"query": {"type": "string",
|
|
927
930
|
"description": "what the skill should do (a task, "
|
|
@@ -930,8 +933,10 @@ REGISTRY.register(
|
|
|
930
933
|
_tool_search)
|
|
931
934
|
REGISTRY.register(
|
|
932
935
|
"boost_list",
|
|
933
|
-
"List the skills already installed
|
|
934
|
-
"
|
|
936
|
+
"List the skills already installed and usable right now. Check at the "
|
|
937
|
+
"START of a task to leverage a capability you already have — an installed "
|
|
938
|
+
"skill is a vetted procedure you can follow immediately, at no cost — and "
|
|
939
|
+
"again before installing, to avoid duplicating something you have.",
|
|
935
940
|
{"type": "object", "properties": {}},
|
|
936
941
|
_tool_list)
|
|
937
942
|
REGISTRY.register(
|
|
@@ -83,19 +83,46 @@ PROTOCOL_VERSION = "2024-11-05"
|
|
|
83
83
|
# Server-level guidance returned in the `initialize` result. MCP hosts load this
|
|
84
84
|
# into the model's context, so it is boost's one chance to tell an agent WHEN it
|
|
85
85
|
# is relevant — the difference between a search tool that sits unused and one an
|
|
86
|
-
# agent reaches for
|
|
87
|
-
#
|
|
86
|
+
# agent reaches for. Framed by the agent's triggers, not boost's nouns.
|
|
87
|
+
#
|
|
88
|
+
# It declares TWO triggers, and the first exists because the second alone was
|
|
89
|
+
# not enough. Framed only as "before you author a skill", agents reached for
|
|
90
|
+
# boost exclusively when they were already about to write one — which is the
|
|
91
|
+
# rarer moment. The common one is starting ordinary work that an installed or
|
|
92
|
+
# installable skill already covers, and nothing was telling them to look. The
|
|
93
|
+
# closing proportion note is load-bearing in the other direction: an unbounded
|
|
94
|
+
# "always check first" turns every trivial turn into a tool call, and an agent
|
|
95
|
+
# that learns to ignore the guidance ignores all of it.
|
|
88
96
|
INSTRUCTIONS = (
|
|
89
97
|
"boost is a package manager for AI-agent skills: reusable, version-tracked "
|
|
90
98
|
"capabilities (skills, rules, slash-commands, subagents) from curated "
|
|
91
|
-
"registries
|
|
92
|
-
"
|
|
93
|
-
"
|
|
94
|
-
"
|
|
95
|
-
"
|
|
96
|
-
"
|
|
97
|
-
"
|
|
98
|
-
"
|
|
99
|
+
"registries.\n"
|
|
100
|
+
"\n"
|
|
101
|
+
"Two moments make boost relevant. The first is the one usually missed:\n"
|
|
102
|
+
"\n"
|
|
103
|
+
"1. STARTING A TASK. Before doing non-trivial work — building a feature, "
|
|
104
|
+
"setting up tooling or CI, reviewing code, debugging a class of problem, "
|
|
105
|
+
"writing docs — stop and check whether a skill already covers it. Call "
|
|
106
|
+
"boost_list for what is installed and usable right now, and boost_search "
|
|
107
|
+
"for what could be. A matching skill is a procedure someone already got "
|
|
108
|
+
"right and vetted; following it beats reconstructing the same steps from "
|
|
109
|
+
"memory.\n"
|
|
110
|
+
"\n"
|
|
111
|
+
"2. AUTHORING. Before you write a new skill, subagent, slash-command, "
|
|
112
|
+
"rule, or any reusable block of agent instructions — or when the user "
|
|
113
|
+
"describes a repeatable workflow (\"set up code review\", \"add a commit "
|
|
114
|
+
"convention\") — call boost_search FIRST to check whether a vetted one "
|
|
115
|
+
"already exists. Installing beats hand-writing: an installed skill is "
|
|
116
|
+
"version-pinned, wired into every agent on this machine, policy-governed, "
|
|
117
|
+
"and shareable with the team.\n"
|
|
118
|
+
"\n"
|
|
119
|
+
"Typical flow: boost_search -> boost_info -> boost_install. Only build "
|
|
120
|
+
"from scratch when a search turns up nothing relevant.\n"
|
|
121
|
+
"\n"
|
|
122
|
+
"Proportion: skip the check for trivial or one-off turns — answering a "
|
|
123
|
+
"question, a small edit, running a command you were just handed. Checking "
|
|
124
|
+
"once when a task starts is the habit; checking before every tool call is "
|
|
125
|
+
"noise."
|
|
99
126
|
)
|
|
100
127
|
|
|
101
128
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: boost-skill-cli
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.283
|
|
4
4
|
Summary: boost — Homebrew for AI coding skills
|
|
5
5
|
Author: Jonathan Reyes
|
|
6
6
|
License: GNU GENERAL PUBLIC LICENSE
|
|
@@ -997,16 +997,56 @@ reports, and the free services that monitor the project.
|
|
|
997
997
|
|
|
998
998
|
## Test suite
|
|
999
999
|
|
|
1000
|
-
|
|
1000
|
+
Four layers, all enforced (`make check` runs the full set; CI runs the same thing):
|
|
1001
1001
|
|
|
1002
1002
|
| Layer | What it does | Gate |
|
|
1003
1003
|
|---|---|---|
|
|
1004
1004
|
| `make test` | pytest across `tests/unit/` (every core module) and `tests/functional/` (drives all 78 commands in-process against sandboxed homes) | **≥80% line coverage** of `boost_cli` (`fail_under` in pyproject.toml) |
|
|
1005
1005
|
| `make smoke` | `tests/smoke.sh` — 170 checks run through the actual `./boost` shim (`--online` also hits real registries) | all pass |
|
|
1006
1006
|
| `make mutation` | [mutmut] mutates `boost_cli/core` (~9,900 mutants) and reruns the unit suite against each one | **≥80% killed** (`scripts/mutation_gate.py`) |
|
|
1007
|
+
| `make evals` | scores the search ranker on a graded golden set — recall@5/@10, MRR, nDCG@5/@10 | **metric floors + no statistically significant regression** (`scripts/eval_gate.py`) |
|
|
1007
1008
|
|
|
1008
1009
|
Dev setup: `make venv` (pulls in pytest, coverage, mutmut — the shipped
|
|
1009
1010
|
runtime itself stays dependency-free). Every test run uses a throwaway
|
|
1010
1011
|
`$HOME`, so your actual agent configs are never at risk.
|
|
1011
1012
|
|
|
1012
1013
|
[mutmut]: https://mutmut.readthedocs.io/
|
|
1014
|
+
|
|
1015
|
+
## Evaluation harness
|
|
1016
|
+
|
|
1017
|
+
Search quality is the one thing the suite above can't assert: every test can
|
|
1018
|
+
pass while the ranker quietly gets worse. `make evals` measures it. The harness
|
|
1019
|
+
is pure stdlib and fully offline — it generates its own corpus of skills, rules,
|
|
1020
|
+
and workflows and taps it into a disposable `BOOST_HOME`, so a metric that moves
|
|
1021
|
+
can only mean the *ranker* moved. See [`evals/README.md`](evals/README.md).
|
|
1022
|
+
|
|
1023
|
+
**Golden set** — [`evals/golden_set.json`](evals/golden_set.json): 36 realistic
|
|
1024
|
+
queries with **graded** relevance (3 perfect · 2 useful · 1 marginal) over the
|
|
1025
|
+
generated corpus. Generated and validated by `evals/make_golden.py`, which
|
|
1026
|
+
refuses a judgment naming a skill the corpus doesn't contain; `--check` fails CI
|
|
1027
|
+
on drift, so the file can never disagree with its source.
|
|
1028
|
+
|
|
1029
|
+
**Five metrics**, all computed by `evals/metrics.py`:
|
|
1030
|
+
|
|
1031
|
+
- **recall@5** / **recall@10** — of everything relevant, what fraction reached the top *k*.
|
|
1032
|
+
- **MRR** — 1/rank of the first relevant hit, averaged; sensitive only to the top of the list, which is where people look.
|
|
1033
|
+
- **nDCG@5** / **nDCG@10** — graded gain (`2^rel − 1`) with the standard `log2(rank + 1)` discount; the only metric that distinguishes the right results in the wrong order from the right order.
|
|
1034
|
+
|
|
1035
|
+
**Significance gating.** A metric dropping isn't automatically a regression —
|
|
1036
|
+
with 36 queries, one unlucky result moves the mean. So `scripts/eval_gate.py`
|
|
1037
|
+
fails a metric only when it falls more than 0.02 below the committed baseline
|
|
1038
|
+
**and** a seeded 10,000-resample paired bootstrap over the per-query deltas puts
|
|
1039
|
+
that drop at `p < 0.05`. Alongside that, each metric has an absolute floor set
|
|
1040
|
+
~0.05 below its first measured value, which catches the erosion that a
|
|
1041
|
+
compare-to-last-commit check never sees. Accepting a real ranking change is a
|
|
1042
|
+
deliberate `make evals-baseline` commit.
|
|
1043
|
+
|
|
1044
|
+
**Faithfulness.** `boost explain` and `boost distill` generate prose from a
|
|
1045
|
+
`SKILL.md`, and their failure mode is overclaiming. The harness scores that with
|
|
1046
|
+
the Ragas method — split the answer into atomic statements, verify each against
|
|
1047
|
+
the source, score supported/total — and reports it alongside what the runtime
|
|
1048
|
+
grounding guardrail in `boost explain` would do with the same reply. With no
|
|
1049
|
+
`claude` CLI and no `ANTHROPIC_API_KEY` it **skips rather than fails**, and
|
|
1050
|
+
reports a status instead of a number so "couldn't measure" is never mistaken for
|
|
1051
|
+
"scored zero". It's therefore outside `make check`; run it with
|
|
1052
|
+
`make evals-online`.
|
|
@@ -232,6 +232,7 @@ docs/roadmap/items/make-the-roadmaps-discoverable.md
|
|
|
232
232
|
docs/roadmap/items/markdown-consistency-markdownlint-cli2.md
|
|
233
233
|
docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md
|
|
234
234
|
docs/roadmap/items/mcp-aware-skills.md
|
|
235
|
+
docs/roadmap/items/mcp-check-skills-before-starting-a-task.md
|
|
235
236
|
docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md
|
|
236
237
|
docs/roadmap/items/mcp-launch-objc-fork-safety.md
|
|
237
238
|
docs/roadmap/items/mcp-register-names-server-before-env.md
|
|
@@ -327,6 +328,15 @@ docs/roadmap/items/workflow-linting-actionlint.md
|
|
|
327
328
|
docs/roadmap/items/workflow-sast-zizmor.md
|
|
328
329
|
docs/roadmap/items/workspace-scope-install.md
|
|
329
330
|
docs/roadmap/items/zizmor-pin-is-a-yanked-release.md
|
|
331
|
+
evals/README.md
|
|
332
|
+
evals/__init__.py
|
|
333
|
+
evals/baseline.json
|
|
334
|
+
evals/faithfulness.py
|
|
335
|
+
evals/golden_set.json
|
|
336
|
+
evals/make_corpus.py
|
|
337
|
+
evals/make_golden.py
|
|
338
|
+
evals/metrics.py
|
|
339
|
+
evals/run_evals.py
|
|
330
340
|
examples/README.md
|
|
331
341
|
examples/adapt-demo.sh
|
|
332
342
|
examples/boost-run-prototype.sh
|
|
@@ -350,6 +360,7 @@ scripts/check_licenses.py
|
|
|
350
360
|
scripts/check_required_checks.py
|
|
351
361
|
scripts/ensure_eval_corpus.sh
|
|
352
362
|
scripts/eval_explain.py
|
|
363
|
+
scripts/eval_gate.py
|
|
353
364
|
scripts/eval_recommend.py
|
|
354
365
|
scripts/eval_retrieval.py
|
|
355
366
|
scripts/eval_stats_summary.py
|
|
@@ -455,6 +466,9 @@ tests/unit/test_docsite_chrome.py
|
|
|
455
466
|
tests/unit/test_ed25519.py
|
|
456
467
|
tests/unit/test_embed.py
|
|
457
468
|
tests/unit/test_errors_and_cli_table.py
|
|
469
|
+
tests/unit/test_eval_faithfulness.py
|
|
470
|
+
tests/unit/test_eval_gate.py
|
|
471
|
+
tests/unit/test_eval_metrics.py
|
|
458
472
|
tests/unit/test_eval_stats_summary.py
|
|
459
473
|
tests/unit/test_faithfulness.py
|
|
460
474
|
tests/unit/test_frontmatter.py
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: mcp-check-skills-before-starting-a-task
|
|
3
|
+
board: code
|
|
4
|
+
section: dx
|
|
5
|
+
status: inflight
|
|
6
|
+
category: Interop · Adoption
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: High
|
|
9
|
+
wow: 3
|
|
10
|
+
note: agent reflex
|
|
11
|
+
order: 64
|
|
12
|
+
owner: mcp-task-entrance
|
|
13
|
+
pr: 318
|
|
14
|
+
title: MCP — check for a skill when a task starts, not only when authoring one
|
|
15
|
+
---
|
|
16
|
+
<a href="#mcp-search-before-reinventing">The previous pass</a> gave the MCP server
|
|
17
|
+
<code>initialize</code> <code>instructions</code> and intent-framed tool descriptions, but
|
|
18
|
+
framed both around a single trigger: <em>before you author a new skill</em>. That is the
|
|
19
|
+
rarer moment. Observed behaviour matched the framing exactly — agents called
|
|
20
|
+
<code>boost_search</code> only when they were already about to write a skill, and never to ask
|
|
21
|
+
whether an installed one covered the work in front of them. The common case, starting
|
|
22
|
+
ordinary work that a vetted skill already handles, had nothing pointing at it.
|
|
23
|
+
Broaden to <strong>two</strong> declared triggers: <em>starting a task</em> (call
|
|
24
|
+
<code>boost_list</code> for what is usable right now, <code>boost_search</code> for what could
|
|
25
|
+
be) and the existing <em>authoring</em> one. <code>boost_list</code> is re-framed from "avoid a
|
|
26
|
+
duplicate install" to "leverage a capability you already have" — it is the free half of the
|
|
27
|
+
check. A closing proportion note bounds it, because an unbounded <em>always check first</em>
|
|
28
|
+
turns every trivial turn into a tool call and an agent that learns to ignore the guidance
|
|
29
|
+
ignores all of it. Both triggers and the bound are pinned by tests, so dropping either
|
|
30
|
+
regresses.
|
|
@@ -110,7 +110,7 @@
|
|
|
110
110
|
<div class="stat"><b>16</b><span>Shipped</span></div>
|
|
111
111
|
<div class="stat"><b>1</b><span>Next up</span></div>
|
|
112
112
|
<div class="stat"><b>4</b><span>Planned</span></div>
|
|
113
|
-
<div class="stat"><b>
|
|
113
|
+
<div class="stat"><b>174</b><span>Loop finds</span></div>
|
|
114
114
|
<!-- /ROADMAP:stats -->
|
|
115
115
|
</div>
|
|
116
116
|
</section>
|
|
@@ -3151,6 +3151,32 @@ three states: a <b>failing</b> actionlint now fails <code>make</code> (exit 2) i
|
|
|
3151
3151
|
<span class="m">fixed — a failing actionlint now fails make, in all three targets</span>
|
|
3152
3152
|
</div>
|
|
3153
3153
|
</article>
|
|
3154
|
+
|
|
3155
|
+
<article class="cap rcard" id="mcp-check-skills-before-starting-a-task">
|
|
3156
|
+
<div class="head"><span class="pill inflight">In flight</span><span class="cat">Interop · Adoption</span></div>
|
|
3157
|
+
<h3>MCP — check for a skill when a task starts, not only when authoring one</h3>
|
|
3158
|
+
<p><a href="#mcp-search-before-reinventing">The previous pass</a> gave the MCP server
|
|
3159
|
+
<code>initialize</code> <code>instructions</code> and intent-framed tool descriptions, but
|
|
3160
|
+
framed both around a single trigger: <em>before you author a new skill</em>. That is the
|
|
3161
|
+
rarer moment. Observed behaviour matched the framing exactly — agents called
|
|
3162
|
+
<code>boost_search</code> only when they were already about to write a skill, and never to ask
|
|
3163
|
+
whether an installed one covered the work in front of them. The common case, starting
|
|
3164
|
+
ordinary work that a vetted skill already handles, had nothing pointing at it.
|
|
3165
|
+
Broaden to <strong>two</strong> declared triggers: <em>starting a task</em> (call
|
|
3166
|
+
<code>boost_list</code> for what is usable right now, <code>boost_search</code> for what could
|
|
3167
|
+
be) and the existing <em>authoring</em> one. <code>boost_list</code> is re-framed from "avoid a
|
|
3168
|
+
duplicate install" to "leverage a capability you already have" — it is the free half of the
|
|
3169
|
+
check. A closing proportion note bounds it, because an unbounded <em>always check first</em>
|
|
3170
|
+
turns every trivial turn into a tool call and an agent that learns to ignore the guidance
|
|
3171
|
+
ignores all of it. Both triggers and the bound are pinned by tests, so dropping either
|
|
3172
|
+
regresses.</p>
|
|
3173
|
+
<div class="meta">
|
|
3174
|
+
<span class="m">Complexity <b>S</b></span>
|
|
3175
|
+
<span class="m hi">Impact <b>High</b></span>
|
|
3176
|
+
<span class="m">Wow <b class="wow">★★★</b></span>
|
|
3177
|
+
<span class="m">agent reflex</span>
|
|
3178
|
+
</div>
|
|
3179
|
+
</article>
|
|
3154
3180
|
<!-- /ROADMAP:cards -->
|
|
3155
3181
|
|
|
3156
3182
|
</div>
|