boost-skill-cli 1.0.358__tar.gz → 1.0.359__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.358 → boost_skill_cli-1.0.359}/CLAUDE.md +16 -6
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/PKG-INFO +1 -1
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_skill_cli.egg-info/PKG-INFO +1 -1
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_skill_cli.egg-info/SOURCES.txt +1 -0
- boost_skill_cli-1.0.359/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +50 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap.html +48 -1
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/scripts/eval_retrieval.py +35 -9
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/eval/baseline.json +11 -11
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_eval_grading.py +62 -3
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/.gitattributes +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/.gitignore +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/.lycheeignore +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/.vale.ini +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/LICENSE +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/MANIFEST.in +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/Makefile +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/README.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/SECURITY.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/complete.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/codecov.yml +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/adapters.html +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/carousel.html +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/chat.html +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/commands.html +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/demo.gif +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/demo.html +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/demo.tape +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/eval.html +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/index.html +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/evals/README.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/evals/__init__.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/evals/baseline.json +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/evals/metrics.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/examples/README.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/index.html +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/noxfile.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/pyproject.toml +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/scripts/eval_corpus.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/setup.cfg +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/sonar-project.properties +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/style/README.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/style/boost.css +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/style/boost.js +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/style/demo.html +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/conftest.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_complete.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_eval_corpus.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/visual/package-lock.json +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/tests/visual/visual_check.mjs +0 -0
|
@@ -63,12 +63,22 @@ corpus: `scripts/ensure_eval_corpus.sh` first taps the pinned repo list in
|
|
|
63
63
|
--defaults` is NOT enough, it omits every rule/workflow repo). The list is
|
|
64
64
|
**twenty** repos: the first six cover every golden target, the rest exist so the
|
|
65
65
|
corpus is a realistic size. That matters more than it sounds — over the six
|
|
66
|
-
alone BM25
|
|
67
|
-
**0.
|
|
68
|
-
old floors fail once the corpus stops being tiny.
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
66
|
+
alone (743 entries) BM25 scores 0.978 / 0.791 / 0.854 / 0.882, and over the
|
|
67
|
+
twenty (10,152) it scores **0.852 / 0.473 / 0.605 / 0.657** on the same golden
|
|
68
|
+
set, so three of the four old floors fail once the corpus stops being tiny.
|
|
69
|
+
|
|
70
|
+
**The ranked list de-duplicates on the content hash, not the name.** A grade key
|
|
71
|
+
decides both relevance and identity, and keying identity on the name collapsed
|
|
72
|
+
13 different skills called `code-reviewer` into one rank slot — crediting the
|
|
73
|
+
ranker with a compression that existed only in the scoring code, and worth about
|
|
74
|
+
one query of recall@10. That is where the old "recall is 1.000" folklore came
|
|
75
|
+
from; the six-repo corpus measures 0.978 once mirrors collapse and homonyms do
|
|
76
|
+
not. Relevance is still decided by name (or by content class when a golden row
|
|
77
|
+
pins an `exemplar`), so the sets can migrate a row at a time.
|
|
78
|
+
|
|
79
|
+
Each floor sits ~10% under its measured value — loose enough that upstream drift
|
|
80
|
+
can't flake the build, tight enough to catch a collapse. Regression-vs-baseline
|
|
81
|
+
stays relaxed (`--regression-eps 1`), so the absolute floors are the real gate.
|
|
72
82
|
|
|
73
83
|
**Every row of `taps.txt` pins a commit SHA**, and `scripts/eval_corpus.py`
|
|
74
84
|
checks each clone out at it — the corpus is 10,152 entries, of which one
|
|
@@ -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.359'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 359)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -214,6 +214,7 @@ docs/roadmap/items/end-of-options-guard-on-git-commands.md
|
|
|
214
214
|
docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md
|
|
215
215
|
docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md
|
|
216
216
|
docs/roadmap/items/eval-corpus-was-not-actually-pinned.md
|
|
217
|
+
docs/roadmap/items/eval-deduped-ranked-lists-by-name.md
|
|
217
218
|
docs/roadmap/items/extension-free-tests-core-dense-py.md
|
|
218
219
|
docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md
|
|
219
220
|
docs/roadmap/items/finish-mutation-hardening-across-core.md
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: eval-deduped-ranked-lists-by-name
|
|
3
|
+
board: code
|
|
4
|
+
section: internals
|
|
5
|
+
status: shipped
|
|
6
|
+
category: Eval · Correctness
|
|
7
|
+
complexity: M
|
|
8
|
+
impact: High
|
|
9
|
+
wow: 4
|
|
10
|
+
note: 13 different skills named code-reviewer shared one rank slot — where "recall is 1.000" came from
|
|
11
|
+
order: 83
|
|
12
|
+
owner: loop/eval-dedup-by-body
|
|
13
|
+
pr: 411
|
|
14
|
+
title: The eval de-duplicated its ranked list by name, so homonyms shared a rank
|
|
15
|
+
---
|
|
16
|
+
<b>A grade key does two jobs, and they needed different answers.</b> It decides whether an entry is
|
|
17
|
+
<em>relevant</em>, and it is the <em>identity</em> the ranked list is de-duplicated on. Both were the
|
|
18
|
+
entry's name — so the thirteen genuinely different skills called <code>code-reviewer</code> in
|
|
19
|
+
the pinned corpus collapsed into <b>one rank slot</b>, and every metric was computed over a list
|
|
20
|
+
about a third shorter than the one a user would scroll.
|
|
21
|
+
|
|
22
|
+
<b>This is not a rounding error dressed up.</b> It credited the ranker with a compression that exists
|
|
23
|
+
only in the scoring code. Measured over the pinned corpus, de-duplicating on the content hash instead
|
|
24
|
+
moves BM25 recall@10 from <b>0.863 to 0.852</b> — roughly one golden query — and over the
|
|
25
|
+
six-repo minimal set from <b>1.000 to 0.978</b>. That second number is the interesting one: it is
|
|
26
|
+
where the project's “retrieval recall is 1.000” folklore came from. The corpus never had
|
|
27
|
+
perfect recall; it had a scoring key that merged wrong answers into right ones.
|
|
28
|
+
|
|
29
|
+
<b>Exemplar rows had the mirror-image bug.</b> When a row pins an exemplar, its <em>distractors</em>
|
|
30
|
+
were keyed on <code>tap::skill_md</code> — so two byte-identical mirrors of a distractor each
|
|
31
|
+
took a slot and pushed the target later. The two bugs pointed opposite ways, which meant an
|
|
32
|
+
exemplar-graded row and a name-graded row could not honestly be averaged into a single number. That
|
|
33
|
+
blocked finishing [[golden-set-grades-by-name-not-by-skill]], whose whole design is that rows migrate
|
|
34
|
+
one at a time.
|
|
35
|
+
|
|
36
|
+
<b>The fix separates the two jobs.</b> Relevance is decided by name, or by content class when the row
|
|
37
|
+
pins an exemplar — unchanged, so a multi-name <code>relevant</code> list still needs each
|
|
38
|
+
distinct name found. Identity is always the entry's content hash: mirrors of one skill collapse
|
|
39
|
+
(counting them twice rewards nothing), distinct bodies do not (a user really does see thirteen
|
|
40
|
+
entries). One convention for every row.
|
|
41
|
+
|
|
42
|
+
<b>What this does not fix.</b> The corpus is still 10,152 entries against a real install's far
|
|
43
|
+
larger one — see [[eval-corpus-is-96x-smaller-than-a-real-install]] — and the golden set
|
|
44
|
+
still grades 22 of its 50 natural-language rows against a name that resolves to several different
|
|
45
|
+
skills. This makes finishing that migration possible; it does not finish it. The corrected floors are
|
|
46
|
+
comfortably clear of the gate (recall 0.852 against 0.78), so no threshold moved.
|
|
47
|
+
|
|
48
|
+
<b>Provenance.</b> Found while working out how to add the remaining exemplars: the blocker turned out
|
|
49
|
+
not to be the 22 judgment calls but the fact that a half-migrated set would average two different
|
|
50
|
+
rank conventions. Measuring that is what exposed the name-collapse underneath it.
|
|
@@ -125,7 +125,7 @@
|
|
|
125
125
|
<div class="stat"><b>16</b><span>Shipped</span></div>
|
|
126
126
|
<div class="stat"><b>1</b><span>Next up</span></div>
|
|
127
127
|
<div class="stat"><b>4</b><span>Planned</span></div>
|
|
128
|
-
<div class="stat"><b>
|
|
128
|
+
<div class="stat"><b>198</b><span>Loop finds</span></div>
|
|
129
129
|
<!-- /ROADMAP:stats -->
|
|
130
130
|
</div>
|
|
131
131
|
</section>
|
|
@@ -2485,6 +2485,53 @@ measured on an install that was missing the repo holding 62% of it.</p></details
|
|
|
2485
2485
|
<span class="m">62% of the required gate's corpus was one unpinned third-party repo, against a 1.15-query margin</span>
|
|
2486
2486
|
</div>
|
|
2487
2487
|
</article>
|
|
2488
|
+
|
|
2489
|
+
<article class="cap rcard" id="eval-deduped-ranked-lists-by-name">
|
|
2490
|
+
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Eval · Correctness</span></div>
|
|
2491
|
+
<h3>The eval de-duplicated its ranked list by name, so homonyms shared a rank</h3>
|
|
2492
|
+
<details class="cardbody"><summary>Write-up</summary>
|
|
2493
|
+
<p><b>A grade key does two jobs, and they needed different answers.</b> It decides whether an entry is
|
|
2494
|
+
<em>relevant</em>, and it is the <em>identity</em> the ranked list is de-duplicated on. Both were the
|
|
2495
|
+
entry's name — so the thirteen genuinely different skills called <code>code-reviewer</code> in
|
|
2496
|
+
the pinned corpus collapsed into <b>one rank slot</b>, and every metric was computed over a list
|
|
2497
|
+
about a third shorter than the one a user would scroll.
|
|
2498
|
+
|
|
2499
|
+
<b>This is not a rounding error dressed up.</b> It credited the ranker with a compression that exists
|
|
2500
|
+
only in the scoring code. Measured over the pinned corpus, de-duplicating on the content hash instead
|
|
2501
|
+
moves BM25 recall@10 from <b>0.863 to 0.852</b> — roughly one golden query — and over the
|
|
2502
|
+
six-repo minimal set from <b>1.000 to 0.978</b>. That second number is the interesting one: it is
|
|
2503
|
+
where the project's “retrieval recall is 1.000” folklore came from. The corpus never had
|
|
2504
|
+
perfect recall; it had a scoring key that merged wrong answers into right ones.
|
|
2505
|
+
|
|
2506
|
+
<b>Exemplar rows had the mirror-image bug.</b> When a row pins an exemplar, its <em>distractors</em>
|
|
2507
|
+
were keyed on <code>tap::skill_md</code> — so two byte-identical mirrors of a distractor each
|
|
2508
|
+
took a slot and pushed the target later. The two bugs pointed opposite ways, which meant an
|
|
2509
|
+
exemplar-graded row and a name-graded row could not honestly be averaged into a single number. That
|
|
2510
|
+
blocked finishing [[golden-set-grades-by-name-not-by-skill]], whose whole design is that rows migrate
|
|
2511
|
+
one at a time.
|
|
2512
|
+
|
|
2513
|
+
<b>The fix separates the two jobs.</b> Relevance is decided by name, or by content class when the row
|
|
2514
|
+
pins an exemplar — unchanged, so a multi-name <code>relevant</code> list still needs each
|
|
2515
|
+
distinct name found. Identity is always the entry's content hash: mirrors of one skill collapse
|
|
2516
|
+
(counting them twice rewards nothing), distinct bodies do not (a user really does see thirteen
|
|
2517
|
+
entries). One convention for every row.
|
|
2518
|
+
|
|
2519
|
+
<b>What this does not fix.</b> The corpus is still 10,152 entries against a real install's far
|
|
2520
|
+
larger one — see [[eval-corpus-is-96x-smaller-than-a-real-install]] — and the golden set
|
|
2521
|
+
still grades 22 of its 50 natural-language rows against a name that resolves to several different
|
|
2522
|
+
skills. This makes finishing that migration possible; it does not finish it. The corrected floors are
|
|
2523
|
+
comfortably clear of the gate (recall 0.852 against 0.78), so no threshold moved.
|
|
2524
|
+
|
|
2525
|
+
<b>Provenance.</b> Found while working out how to add the remaining exemplars: the blocker turned out
|
|
2526
|
+
not to be the 22 judgment calls but the fact that a half-migrated set would average two different
|
|
2527
|
+
rank conventions. Measuring that is what exposed the name-collapse underneath it.</p></details>
|
|
2528
|
+
<div class="meta">
|
|
2529
|
+
<span class="m">Complexity <b>M</b></span>
|
|
2530
|
+
<span class="m hi">Impact <b>High</b></span>
|
|
2531
|
+
<span class="m">Wow <b class="wow">★★★★</b></span>
|
|
2532
|
+
<span class="m">13 different skills named code-reviewer shared one rank slot — where "recall is 1.000" came from</span>
|
|
2533
|
+
</div>
|
|
2534
|
+
</article>
|
|
2488
2535
|
<!-- /ROADMAP:cards -->
|
|
2489
2536
|
|
|
2490
2537
|
</div>
|
|
@@ -126,8 +126,14 @@ METRICS: Dict[str, Callable[[Sequence[str], set, int], float]] = {
|
|
|
126
126
|
# punish a correct answer for arriving from a mirror), while a different skill
|
|
127
127
|
# sharing the name does not.
|
|
128
128
|
#
|
|
129
|
-
# Rows without an exemplar
|
|
130
|
-
#
|
|
129
|
+
# Rows without an exemplar still decide RELEVANCE by name, so the sets can
|
|
130
|
+
# migrate a row at a time. What is no longer name-keyed is IDENTITY: the ranked
|
|
131
|
+
# list de-duplicates on the content hash for every row, exemplar or not. Keying
|
|
132
|
+
# both on the name collapsed 13 different `code-reviewer`s into one rank slot
|
|
133
|
+
# and inflated recall@10 by about one query (0.863 -> 0.852 over the pinned
|
|
134
|
+
# corpus); keying an exemplar row's distractors on tap::skill_md did the
|
|
135
|
+
# opposite, giving byte-identical mirrors a slot each. Mixed sets could not be
|
|
136
|
+
# averaged into one number until both used the same convention.
|
|
131
137
|
|
|
132
138
|
_EXEMPLAR_SEP = "::"
|
|
133
139
|
|
|
@@ -165,19 +171,39 @@ def prepare_row(row: dict, hashes: dict) -> dict:
|
|
|
165
171
|
def grade_key(row: dict, entry: dict, hashes: dict) -> str:
|
|
166
172
|
"""The token this entry contributes to a ranked list, for scoring.
|
|
167
173
|
|
|
174
|
+
The key does two jobs, and they need different answers. It decides whether
|
|
175
|
+
an entry is RELEVANT — by name, or by content class when the row pins an
|
|
176
|
+
exemplar — and it is the IDENTITY the ranked list is de-duplicated on.
|
|
177
|
+
|
|
178
|
+
Keying both on the name conflated them: 13 genuinely different skills named
|
|
179
|
+
`code-reviewer` collapsed into one rank slot, so the eval credited the
|
|
180
|
+
ranker with a compression that exists only here. Measured over the pinned
|
|
181
|
+
corpus that was worth about one query of recall@10 (0.863 against 0.852).
|
|
182
|
+
Exemplar rows had the inverse bug — their distractors keyed on
|
|
183
|
+
``tap::skill_md``, so byte-identical mirrors each took a slot and pushed the
|
|
184
|
+
target later.
|
|
185
|
+
|
|
186
|
+
So: relevance by name or class, identity always by content hash. One
|
|
187
|
+
convention for every row, which is what allows an exemplar-graded row and a
|
|
188
|
+
name-graded row to be averaged into the same number.
|
|
189
|
+
|
|
168
190
|
``hashes`` is passed rather than read from module state: the map is the
|
|
169
191
|
thing that decides whether two entries are the same skill, so a caller must
|
|
170
192
|
not be able to grade against a different one by accident.
|
|
171
193
|
"""
|
|
194
|
+
digest = hashes.get((entry.get("tap", ""), entry.get("skill_md", "")))
|
|
172
195
|
classes = row.get("class_hashes")
|
|
173
|
-
if
|
|
196
|
+
if classes:
|
|
197
|
+
if digest and digest in classes:
|
|
198
|
+
return "cls:%s" % sorted(classes)[0]
|
|
199
|
+
elif str(entry.get("name", "")) in row["relevant_set"]:
|
|
174
200
|
return str(entry.get("name", ""))
|
|
175
|
-
digest
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
#
|
|
179
|
-
#
|
|
180
|
-
return "
|
|
201
|
+
if digest:
|
|
202
|
+
return "body:%s" % digest
|
|
203
|
+
# No hash (an entry the index never saw): fall back to a key that is unique
|
|
204
|
+
# per entry. Colliding here would silently shorten the ranked list and
|
|
205
|
+
# flatter every metric computed from it.
|
|
206
|
+
return "nohash:%s::%s" % (entry.get("tap", ""), entry.get("skill_md", ""))
|
|
181
207
|
|
|
182
208
|
|
|
183
209
|
def relevant_keys(row: dict) -> set:
|
|
@@ -5,16 +5,16 @@
|
|
|
5
5
|
"golden": "golden.jsonl",
|
|
6
6
|
"engines": {
|
|
7
7
|
"catalog.search": {
|
|
8
|
-
"recall@k": 0.
|
|
8
|
+
"recall@k": 0.7417582417582418,
|
|
9
9
|
"hit@1": 0.46153846153846156,
|
|
10
|
-
"MRR": 0.
|
|
11
|
-
"nDCG@k": 0.
|
|
10
|
+
"MRR": 0.5622940186865697,
|
|
11
|
+
"nDCG@k": 0.5966760830419942
|
|
12
12
|
},
|
|
13
13
|
"BM25 full-content": {
|
|
14
|
-
"recall@k": 0.
|
|
14
|
+
"recall@k": 0.8516483516483516,
|
|
15
15
|
"hit@1": 0.4725274725274725,
|
|
16
|
-
"MRR": 0.
|
|
17
|
-
"nDCG@k": 0.
|
|
16
|
+
"MRR": 0.6047880662244283,
|
|
17
|
+
"nDCG@k": 0.6574937765278362
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
},
|
|
@@ -25,14 +25,14 @@
|
|
|
25
25
|
"catalog.search": {
|
|
26
26
|
"recall@k": 0.08,
|
|
27
27
|
"hit@1": 0.02,
|
|
28
|
-
"MRR": 0.
|
|
29
|
-
"nDCG@k": 0.
|
|
28
|
+
"MRR": 0.040721853968010216,
|
|
29
|
+
"nDCG@k": 0.04244796319302442
|
|
30
30
|
},
|
|
31
31
|
"BM25 full-content": {
|
|
32
|
-
"recall@k": 0.
|
|
32
|
+
"recall@k": 0.35,
|
|
33
33
|
"hit@1": 0.16,
|
|
34
|
-
"MRR": 0.
|
|
35
|
-
"nDCG@k": 0.
|
|
34
|
+
"MRR": 0.2447192741990893,
|
|
35
|
+
"nDCG@k": 0.2591292012176286
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
}
|
|
@@ -8,9 +8,22 @@ different skills ranked first, which makes every published number an upper
|
|
|
8
8
|
bound.
|
|
9
9
|
|
|
10
10
|
These tests pin the fix (an optional per-row `exemplar` that grades by content
|
|
11
|
-
class, so mirrors of one skill still count and homonyms do not)
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
class, so mirrors of one skill still count and homonyms do not) and the property
|
|
12
|
+
that a row without an exemplar still grades *relevance* by name, so the golden
|
|
13
|
+
sets can migrate a row at a time.
|
|
14
|
+
|
|
15
|
+
They also pin the second half, which the first pass got wrong. A grade key does
|
|
16
|
+
two jobs: it decides whether an entry is relevant, and it is the identity the
|
|
17
|
+
ranked list is de-duplicated on. Keying both on the name meant 13 genuinely
|
|
18
|
+
different skills called `code-reviewer` collapsed into ONE rank slot — the eval
|
|
19
|
+
crediting a ranker for a compression that exists only in the scoring code, and
|
|
20
|
+
over the pinned corpus that inflated recall@10 by about one query (0.863 vs
|
|
21
|
+
0.852). Exemplar rows had the mirror-image bug: their distractors keyed on
|
|
22
|
+
`tap::skill_md`, so byte-identical mirrors of a distractor each took a slot.
|
|
23
|
+
|
|
24
|
+
Relevance is therefore decided by name (or class), while identity is always the
|
|
25
|
+
entry's content hash — one convention for every row, which is what lets an
|
|
26
|
+
exemplar-graded row and a name-graded row be averaged into one number.
|
|
14
27
|
"""
|
|
15
28
|
from __future__ import annotations
|
|
16
29
|
|
|
@@ -119,6 +132,52 @@ class TestExemplarsFailLoudly:
|
|
|
119
132
|
"exemplar": "no-separator"}, HASHES)
|
|
120
133
|
|
|
121
134
|
|
|
135
|
+
class TestIdentityIsTheBodyNotTheName:
|
|
136
|
+
"""One de-duplication convention, whether or not the row pins an exemplar."""
|
|
137
|
+
|
|
138
|
+
def test_two_different_skills_sharing_a_name_take_two_slots(self):
|
|
139
|
+
# The inflation: owner/a and owner/b are different `code-reviewer`s. A
|
|
140
|
+
# user scrolling results sees two entries, so the eval must too.
|
|
141
|
+
m = _load()
|
|
142
|
+
row = m.prepare_row({"query": "q", "relevant": ["something-else"]}, HASHES)
|
|
143
|
+
assert len(m.dedupe_keys([m.grade_key(row, A, HASHES),
|
|
144
|
+
m.grade_key(row, B, HASHES)])) == 2
|
|
145
|
+
|
|
146
|
+
def test_a_byte_identical_mirror_takes_one_slot(self):
|
|
147
|
+
# owner/c mirrors owner/a. Counting it twice would punish nothing and
|
|
148
|
+
# reward nothing — it is the same skill arriving from two registries.
|
|
149
|
+
m = _load()
|
|
150
|
+
row = m.prepare_row({"query": "q", "relevant": ["something-else"]}, HASHES)
|
|
151
|
+
assert len(m.dedupe_keys([m.grade_key(row, A, HASHES),
|
|
152
|
+
m.grade_key(row, C, HASHES)])) == 1
|
|
153
|
+
|
|
154
|
+
def test_distractor_mirrors_collapse_for_an_exemplar_row_too(self):
|
|
155
|
+
# The mirror-image bug: keyed on tap::skill_md, two mirrors of a
|
|
156
|
+
# DISTRACTOR each took a rank slot, pushing the target later.
|
|
157
|
+
m = _load()
|
|
158
|
+
row = m.prepare_row(
|
|
159
|
+
{"query": "q", "relevant": ["code-reviewer"],
|
|
160
|
+
"exemplar": "owner/b::code-reviewer/SKILL.md"}, HASHES)
|
|
161
|
+
assert len(m.dedupe_keys([m.grade_key(row, A, HASHES),
|
|
162
|
+
m.grade_key(row, C, HASHES)])) == 1
|
|
163
|
+
|
|
164
|
+
def test_a_relevant_entry_is_still_keyed_by_its_name(self):
|
|
165
|
+
# Relevance semantics are unchanged: recall over a multi-name `relevant`
|
|
166
|
+
# list still needs each distinct name found.
|
|
167
|
+
m = _load()
|
|
168
|
+
row = m.prepare_row({"query": "q", "relevant": ["code-reviewer"]}, HASHES)
|
|
169
|
+
assert m.grade_key(row, A, HASHES) == "code-reviewer"
|
|
170
|
+
|
|
171
|
+
def test_an_entry_with_no_content_hash_still_gets_a_unique_key(self):
|
|
172
|
+
# Degrade, don't collide: an unhashed entry must not merge with another
|
|
173
|
+
# unhashed one and silently shorten the ranked list.
|
|
174
|
+
m = _load()
|
|
175
|
+
row = m.prepare_row({"query": "q", "relevant": ["x"]}, HASHES)
|
|
176
|
+
one = _entry("p", "owner/z", "p/SKILL.md")
|
|
177
|
+
two = _entry("q", "owner/z", "q/SKILL.md")
|
|
178
|
+
assert m.grade_key(row, one, HASHES) != m.grade_key(row, two, HASHES)
|
|
179
|
+
|
|
180
|
+
|
|
122
181
|
class TestDedupeKeepsTheBestRank:
|
|
123
182
|
def test_repeats_collapse_to_first_occurrence(self):
|
|
124
183
|
m = _load()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_skill_cli.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{boost_skill_cli-1.0.358 → boost_skill_cli-1.0.359}/boost_skill_cli.egg-info/entry_points.txt
RENAMED
|
File without changes
|