boost-skill-cli 1.0.358__tar.gz → 1.0.360__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.360}/CLAUDE.md +16 -6
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/PKG-INFO +1 -1
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_skill_cli.egg-info/PKG-INFO +1 -1
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_skill_cli.egg-info/SOURCES.txt +1 -0
- boost_skill_cli-1.0.360/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +50 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +23 -2
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap.html +72 -3
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/scripts/eval_retrieval.py +94 -9
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/eval/baseline.json +11 -11
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/eval/golden-natural.jsonl +49 -29
- boost_skill_cli-1.0.360/tests/unit/test_eval_grading.py +238 -0
- boost_skill_cli-1.0.358/tests/unit/test_eval_grading.py +0 -134
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/.gitattributes +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/.gitignore +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/.lycheeignore +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/.vale.ini +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/LICENSE +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/MANIFEST.in +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/Makefile +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/README.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/SECURITY.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/complete.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/codecov.yml +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/adapters.html +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/carousel.html +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/chat.html +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/commands.html +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/demo.gif +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/demo.html +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/demo.tape +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/eval.html +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/index.html +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/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.360}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/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.360}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/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.360}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/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.360}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/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.360}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/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.360}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/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.360}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/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.360}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/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.360}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/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.360}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/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.360}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/evals/README.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/evals/__init__.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/evals/baseline.json +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/evals/metrics.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/examples/README.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/index.html +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/noxfile.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/pyproject.toml +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/scripts/eval_corpus.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/setup.cfg +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/sonar-project.properties +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/style/README.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/style/boost.css +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/style/boost.js +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/style/demo.html +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/conftest.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_complete.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_eval_corpus.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/visual/package-lock.json +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.0.358 → boost_skill_cli-1.0.360}/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.360'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 360)
|
|
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.
|
|
@@ -7,10 +7,10 @@ category: Eval · Correctness
|
|
|
7
7
|
complexity: M
|
|
8
8
|
impact: High
|
|
9
9
|
wow: 4
|
|
10
|
-
note:
|
|
10
|
+
note: 28 of 50 rows pinned mechanically with zero change to any number; 22 are genuine judgment calls
|
|
11
11
|
order: 81
|
|
12
12
|
owner: loop/golden-name-grading
|
|
13
|
-
pr:
|
|
13
|
+
pr: 412
|
|
14
14
|
title: The golden set grades by name, and 35 of 53 names are ambiguous
|
|
15
15
|
---
|
|
16
16
|
<b>The eval scores a hit when the top result carries the right <em>name</em>. Most of those names do
|
|
@@ -84,3 +84,24 @@ statement about intent. Guessing it would bake one opinion into the number the p
|
|
|
84
84
|
invisibly. The harness is ready for those decisions one row at a time; each added exemplar tightens
|
|
85
85
|
the metric and none of them destabilise it.
|
|
86
86
|
|
|
87
|
+
<b>Progress: 28 of the 50 rows are now pinned, and pinning them changed nothing.</b> Measured over
|
|
88
|
+
the SHA-pinned corpus, 28 rows have the property that every name in their <code>relevant</code> list
|
|
89
|
+
resolves to exactly <b>one body</b> — so the exemplar is a lookup, not a judgment, and grading
|
|
90
|
+
by content class must return the same verdict as grading by name. It does: the natural-language set
|
|
91
|
+
scores <b>0.350 / 0.160 / 0.245 / 0.259</b> before and after, identical to three decimal places.
|
|
92
|
+
That equality is the point of shipping them — the rows are now explicit about which skill they
|
|
93
|
+
mean, at zero cost to comparability.
|
|
94
|
+
|
|
95
|
+
<b>The remaining 22 are the real content of this card.</b> <code>code-reviewer</code> is 13 distinct
|
|
96
|
+
skills in this corpus, <code>update-docs</code> 10, <code>commit</code> 4. There is no shortcut
|
|
97
|
+
available: their descriptions share a median similarity of about <b>0.15</b>, so these are genuine
|
|
98
|
+
forks rather than one skill re-published, and no rule separates them without someone saying what the
|
|
99
|
+
question meant. The menu is generated rather than written down, because the candidate set is a fact
|
|
100
|
+
about the corpus that is tapped:
|
|
101
|
+
|
|
102
|
+
<code>python3 scripts/eval_retrieval.py --golden tests/eval/golden-natural.jsonl --worksheet</code>
|
|
103
|
+
|
|
104
|
+
<b>What unblocked this.</b> Not the judgment calls — [[eval-deduped-ranked-lists-by-name]].
|
|
105
|
+
A half-migrated set was averaging two different rank conventions, because name-graded rows collapsed
|
|
106
|
+
homonyms into one rank slot while exemplar-graded rows gave every distractor mirror its own. Until
|
|
107
|
+
both used one convention, migrating rows one at a time produced a number that meant nothing.
|
|
@@ -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>
|
|
@@ -2412,12 +2412,34 @@ weaker gate that still reports a number, which is the failure this card exists t
|
|
|
2412
2412
|
<code>code-reviewer</code>s a query about reviewing a diff for security problems refers to is a
|
|
2413
2413
|
statement about intent. Guessing it would bake one opinion into the number the project publishes,
|
|
2414
2414
|
invisibly. The harness is ready for those decisions one row at a time; each added exemplar tightens
|
|
2415
|
-
the metric and none of them destabilise it
|
|
2415
|
+
the metric and none of them destabilise it.
|
|
2416
|
+
|
|
2417
|
+
<b>Progress: 28 of the 50 rows are now pinned, and pinning them changed nothing.</b> Measured over
|
|
2418
|
+
the SHA-pinned corpus, 28 rows have the property that every name in their <code>relevant</code> list
|
|
2419
|
+
resolves to exactly <b>one body</b> — so the exemplar is a lookup, not a judgment, and grading
|
|
2420
|
+
by content class must return the same verdict as grading by name. It does: the natural-language set
|
|
2421
|
+
scores <b>0.350 / 0.160 / 0.245 / 0.259</b> before and after, identical to three decimal places.
|
|
2422
|
+
That equality is the point of shipping them — the rows are now explicit about which skill they
|
|
2423
|
+
mean, at zero cost to comparability.
|
|
2424
|
+
|
|
2425
|
+
<b>The remaining 22 are the real content of this card.</b> <code>code-reviewer</code> is 13 distinct
|
|
2426
|
+
skills in this corpus, <code>update-docs</code> 10, <code>commit</code> 4. There is no shortcut
|
|
2427
|
+
available: their descriptions share a median similarity of about <b>0.15</b>, so these are genuine
|
|
2428
|
+
forks rather than one skill re-published, and no rule separates them without someone saying what the
|
|
2429
|
+
question meant. The menu is generated rather than written down, because the candidate set is a fact
|
|
2430
|
+
about the corpus that is tapped:
|
|
2431
|
+
|
|
2432
|
+
<code>python3 scripts/eval_retrieval.py --golden tests/eval/golden-natural.jsonl --worksheet</code>
|
|
2433
|
+
|
|
2434
|
+
<b>What unblocked this.</b> Not the judgment calls — [[eval-deduped-ranked-lists-by-name]].
|
|
2435
|
+
A half-migrated set was averaging two different rank conventions, because name-graded rows collapsed
|
|
2436
|
+
homonyms into one rank slot while exemplar-graded rows gave every distractor mirror its own. Until
|
|
2437
|
+
both used one convention, migrating rows one at a time produced a number that meant nothing.</p>
|
|
2416
2438
|
<div class="meta">
|
|
2417
2439
|
<span class="m">Complexity <b>M</b></span>
|
|
2418
2440
|
<span class="m hi">Impact <b>High</b></span>
|
|
2419
2441
|
<span class="m">Wow <b class="wow">★★★★</b></span>
|
|
2420
|
-
<span class="m">
|
|
2442
|
+
<span class="m">28 of 50 rows pinned mechanically with zero change to any number; 22 are genuine judgment calls</span>
|
|
2421
2443
|
</div>
|
|
2422
2444
|
</article>
|
|
2423
2445
|
|
|
@@ -2485,6 +2507,53 @@ measured on an install that was missing the repo holding 62% of it.</p></details
|
|
|
2485
2507
|
<span class="m">62% of the required gate's corpus was one unpinned third-party repo, against a 1.15-query margin</span>
|
|
2486
2508
|
</div>
|
|
2487
2509
|
</article>
|
|
2510
|
+
|
|
2511
|
+
<article class="cap rcard" id="eval-deduped-ranked-lists-by-name">
|
|
2512
|
+
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Eval · Correctness</span></div>
|
|
2513
|
+
<h3>The eval de-duplicated its ranked list by name, so homonyms shared a rank</h3>
|
|
2514
|
+
<details class="cardbody"><summary>Write-up</summary>
|
|
2515
|
+
<p><b>A grade key does two jobs, and they needed different answers.</b> It decides whether an entry is
|
|
2516
|
+
<em>relevant</em>, and it is the <em>identity</em> the ranked list is de-duplicated on. Both were the
|
|
2517
|
+
entry's name — so the thirteen genuinely different skills called <code>code-reviewer</code> in
|
|
2518
|
+
the pinned corpus collapsed into <b>one rank slot</b>, and every metric was computed over a list
|
|
2519
|
+
about a third shorter than the one a user would scroll.
|
|
2520
|
+
|
|
2521
|
+
<b>This is not a rounding error dressed up.</b> It credited the ranker with a compression that exists
|
|
2522
|
+
only in the scoring code. Measured over the pinned corpus, de-duplicating on the content hash instead
|
|
2523
|
+
moves BM25 recall@10 from <b>0.863 to 0.852</b> — roughly one golden query — and over the
|
|
2524
|
+
six-repo minimal set from <b>1.000 to 0.978</b>. That second number is the interesting one: it is
|
|
2525
|
+
where the project's “retrieval recall is 1.000” folklore came from. The corpus never had
|
|
2526
|
+
perfect recall; it had a scoring key that merged wrong answers into right ones.
|
|
2527
|
+
|
|
2528
|
+
<b>Exemplar rows had the mirror-image bug.</b> When a row pins an exemplar, its <em>distractors</em>
|
|
2529
|
+
were keyed on <code>tap::skill_md</code> — so two byte-identical mirrors of a distractor each
|
|
2530
|
+
took a slot and pushed the target later. The two bugs pointed opposite ways, which meant an
|
|
2531
|
+
exemplar-graded row and a name-graded row could not honestly be averaged into a single number. That
|
|
2532
|
+
blocked finishing [[golden-set-grades-by-name-not-by-skill]], whose whole design is that rows migrate
|
|
2533
|
+
one at a time.
|
|
2534
|
+
|
|
2535
|
+
<b>The fix separates the two jobs.</b> Relevance is decided by name, or by content class when the row
|
|
2536
|
+
pins an exemplar — unchanged, so a multi-name <code>relevant</code> list still needs each
|
|
2537
|
+
distinct name found. Identity is always the entry's content hash: mirrors of one skill collapse
|
|
2538
|
+
(counting them twice rewards nothing), distinct bodies do not (a user really does see thirteen
|
|
2539
|
+
entries). One convention for every row.
|
|
2540
|
+
|
|
2541
|
+
<b>What this does not fix.</b> The corpus is still 10,152 entries against a real install's far
|
|
2542
|
+
larger one — see [[eval-corpus-is-96x-smaller-than-a-real-install]] — and the golden set
|
|
2543
|
+
still grades 22 of its 50 natural-language rows against a name that resolves to several different
|
|
2544
|
+
skills. This makes finishing that migration possible; it does not finish it. The corrected floors are
|
|
2545
|
+
comfortably clear of the gate (recall 0.852 against 0.78), so no threshold moved.
|
|
2546
|
+
|
|
2547
|
+
<b>Provenance.</b> Found while working out how to add the remaining exemplars: the blocker turned out
|
|
2548
|
+
not to be the 22 judgment calls but the fact that a half-migrated set would average two different
|
|
2549
|
+
rank conventions. Measuring that is what exposed the name-collapse underneath it.</p></details>
|
|
2550
|
+
<div class="meta">
|
|
2551
|
+
<span class="m">Complexity <b>M</b></span>
|
|
2552
|
+
<span class="m hi">Impact <b>High</b></span>
|
|
2553
|
+
<span class="m">Wow <b class="wow">★★★★</b></span>
|
|
2554
|
+
<span class="m">13 different skills named code-reviewer shared one rank slot — where "recall is 1.000" came from</span>
|
|
2555
|
+
</div>
|
|
2556
|
+
</article>
|
|
2488
2557
|
<!-- /ROADMAP:cards -->
|
|
2489
2558
|
|
|
2490
2559
|
</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:
|
|
@@ -187,6 +213,46 @@ def relevant_keys(row: dict) -> set:
|
|
|
187
213
|
return {"cls:%s" % sorted(classes)[0]}
|
|
188
214
|
|
|
189
215
|
|
|
216
|
+
def exemplar_worksheet(rows: List[dict], entries: List[dict],
|
|
217
|
+
hashes: dict) -> List[dict]:
|
|
218
|
+
"""Rows still graded by name whose name resolves to several bodies.
|
|
219
|
+
|
|
220
|
+
Pinning those is a judgment about what the question meant, not a lookup, so
|
|
221
|
+
this hands over the menu rather than guessing: for each undecided row, every
|
|
222
|
+
distinct body a relevant name resolves to, with its description.
|
|
223
|
+
|
|
224
|
+
Generated rather than committed as a comment in the golden file, because the
|
|
225
|
+
candidate list is a fact about the corpus that is currently tapped. Written
|
|
226
|
+
down, it would be wrong the first time a pin moves.
|
|
227
|
+
"""
|
|
228
|
+
by_name: Dict[str, List[dict]] = {}
|
|
229
|
+
for entry in entries:
|
|
230
|
+
by_name.setdefault(str(entry.get("name", "")), []).append(entry)
|
|
231
|
+
sheet: List[dict] = []
|
|
232
|
+
for row in rows:
|
|
233
|
+
if row.get("class_hashes"):
|
|
234
|
+
continue # already decided
|
|
235
|
+
seen: Dict[str, dict] = {}
|
|
236
|
+
for name in row["relevant_set"]:
|
|
237
|
+
for entry in by_name.get(name, []):
|
|
238
|
+
digest = hashes.get((entry.get("tap", ""), entry.get("skill_md", "")))
|
|
239
|
+
if digest and digest not in seen:
|
|
240
|
+
seen[digest] = entry
|
|
241
|
+
if len(seen) < 2:
|
|
242
|
+
continue # determined, or absent entirely
|
|
243
|
+
sheet.append({
|
|
244
|
+
"query": row["query"],
|
|
245
|
+
"candidates": [
|
|
246
|
+
{"spec": "%s%s%s" % (e.get("tap", ""), _EXEMPLAR_SEP,
|
|
247
|
+
e.get("skill_md", "")),
|
|
248
|
+
"description": (e.get("description") or "").strip().split("\n")[0]}
|
|
249
|
+
for e in sorted(seen.values(),
|
|
250
|
+
key=lambda x: (x.get("tap", ""), x.get("skill_md", "")))
|
|
251
|
+
],
|
|
252
|
+
})
|
|
253
|
+
return sheet
|
|
254
|
+
|
|
255
|
+
|
|
190
256
|
def dedupe_keys(keys):
|
|
191
257
|
"""Collapse to the first (best-ranked) occurrence of each key."""
|
|
192
258
|
seen: set = set()
|
|
@@ -577,6 +643,9 @@ def main(argv: Optional[List[str]] = None) -> int:
|
|
|
577
643
|
help="Tier 1b: ranx significance test between engines "
|
|
578
644
|
"(opt-in [eval] extra; degrades if ranx absent)")
|
|
579
645
|
ap.add_argument("--json", action="store_true", help="machine-readable JSON")
|
|
646
|
+
ap.add_argument("--worksheet", action="store_true",
|
|
647
|
+
help="list the golden rows still graded by name whose name "
|
|
648
|
+
"resolves to several bodies, with the candidates")
|
|
580
649
|
args = ap.parse_args(argv)
|
|
581
650
|
|
|
582
651
|
floors = parse_floors(args.floor) # fail fast on a bad --floor
|
|
@@ -590,6 +659,22 @@ def main(argv: Optional[List[str]] = None) -> int:
|
|
|
590
659
|
print(" indexed %d entries -> %d chunks across %d taps"
|
|
591
660
|
% (stats["entries"], stats["docs"], stats["taps"]))
|
|
592
661
|
|
|
662
|
+
if args.worksheet:
|
|
663
|
+
sheet = exemplar_worksheet(rows, catalog.all_entries(), rag.content_hashes())
|
|
664
|
+
if args.json:
|
|
665
|
+
print(json.dumps(sheet, indent=2))
|
|
666
|
+
return 0
|
|
667
|
+
print("%d of %d rows still graded by name resolve to several bodies.\n"
|
|
668
|
+
% (len(sheet), len(rows)))
|
|
669
|
+
for case in sheet:
|
|
670
|
+
print(" %s" % case["query"])
|
|
671
|
+
for cand in case["candidates"]:
|
|
672
|
+
print(" %s" % cand["spec"])
|
|
673
|
+
if cand["description"]:
|
|
674
|
+
print(" %s" % cand["description"][:96])
|
|
675
|
+
print()
|
|
676
|
+
return 0
|
|
677
|
+
|
|
593
678
|
if args.rerank:
|
|
594
679
|
return run_rerank_lift(rows, args.k, args.json)
|
|
595
680
|
|
|
@@ -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
|
}
|
|
@@ -31,25 +31,45 @@
|
|
|
31
31
|
# than flooring one. Adding it to the gate would also floor a number nobody has
|
|
32
32
|
# argued for yet.
|
|
33
33
|
#
|
|
34
|
-
#
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
# GRADING. A row may pin an `exemplar` — "tap::skill_md", the entry the query was
|
|
35
|
+
# written about — and is then graded on that entry's CONTENT CLASS: byte-identical
|
|
36
|
+
# mirrors from other registries still count, a different skill sharing the name
|
|
37
|
+
# does not. 28 of these 50 rows carry one. They were not chosen: over the pinned
|
|
38
|
+
# corpus each of their relevant names resolves to exactly ONE body, so the pin is
|
|
39
|
+
# a lookup rather than a judgment, and the pinned taps.txt is what makes that
|
|
40
|
+
# reproducible.
|
|
41
|
+
#
|
|
42
|
+
# The other 22 are genuinely undecided. `code-reviewer` is 13 different skills
|
|
43
|
+
# here, `update-docs` 10, `commit` 4, and their descriptions share a median
|
|
44
|
+
# similarity of ~0.15 — there is no "same skill re-published" shortcut. Deciding
|
|
45
|
+
# which one a question meant is a statement about intent, and guessing it would
|
|
46
|
+
# bake one opinion into a published number. To see the menu:
|
|
47
|
+
#
|
|
48
|
+
# python3 scripts/eval_retrieval.py --golden tests/eval/golden-natural.jsonl --worksheet
|
|
49
|
+
#
|
|
50
|
+
# which prints every candidate body and its description. It is generated rather
|
|
51
|
+
# than listed here on purpose: the candidate set is a fact about the corpus that
|
|
52
|
+
# is tapped, so written down it would be wrong the first time a pin moves.
|
|
53
|
+
#
|
|
54
|
+
# One JSON object per line: {query, relevant[], exemplar?, kind, note}
|
|
55
|
+
{"query": "my writing is too wordy and people skim past the important parts", "relevant": ["write-concisely"], "exemplar": "NeoLabHQ/context-engineering-kit::plugins/docs/skills/write-concisely/SKILL.md", "kind": "skill", "note": "clarity, no shared vocabulary with the name"}
|
|
56
|
+
{"query": "an error surfaces deep in the call stack and I cannot tell what originally triggered it", "relevant": ["root-cause-tracing"], "exemplar": "NeoLabHQ/context-engineering-kit::plugins/kaizen/skills/root-cause-tracing/SKILL.md", "kind": "skill", "note": "tracing back from a symptom"}
|
|
57
|
+
{"query": "I keep patching symptoms instead of whatever is actually wrong underneath", "relevant": ["why", "root-cause-tracing"], "exemplar": ["NeoLabHQ/context-engineering-kit::plugins/kaizen/skills/why/SKILL.md", "NeoLabHQ/context-engineering-kit::plugins/kaizen/skills/root-cause-tracing/SKILL.md"], "kind": "skill", "note": "five-whys intent"}
|
|
38
58
|
{"query": "what convention should I follow for the messages I write when recording changes in git", "relevant": ["commit"], "kind": "skill", "note": "conventional commits"}
|
|
39
|
-
{"query": "I keep stashing half-finished work every time I have to switch branches", "relevant": ["git-worktrees"], "kind": "skill", "note": "worktrees without naming them"}
|
|
40
|
-
{"query": "I want to attach review status to a commit without rewriting any history", "relevant": ["git-notes"], "kind": "skill", "note": "metadata on commits"}
|
|
59
|
+
{"query": "I keep stashing half-finished work every time I have to switch branches", "relevant": ["git-worktrees"], "exemplar": "NeoLabHQ/context-engineering-kit::plugins/git/skills/git-worktrees/SKILL.md", "kind": "skill", "note": "worktrees without naming them"}
|
|
60
|
+
{"query": "I want to attach review status to a commit without rewriting any history", "relevant": ["git-notes"], "exemplar": "NeoLabHQ/context-engineering-kit::plugins/git/skills/git-notes/SKILL.md", "kind": "skill", "note": "metadata on commits"}
|
|
41
61
|
{"query": "check what I changed for injection flaws and leaked credentials before it goes in", "relevant": ["security-auditor"], "kind": "workflow", "note": "vulnerability review"}
|
|
42
|
-
{"query": "am I actually exercising the risky paths or only the easy ones", "relevant": ["test-coverage-reviewer"], "kind": "workflow", "note": "coverage quality"}
|
|
62
|
+
{"query": "am I actually exercising the risky paths or only the easy ones", "relevant": ["test-coverage-reviewer"], "exemplar": "NeoLabHQ/context-engineering-kit::plugins/review/agents/test-coverage-reviewer.md", "kind": "workflow", "note": "coverage quality"}
|
|
43
63
|
{"query": "read through my diff and tell me what is broken in it", "relevant": ["bug-hunter"], "kind": "workflow", "note": "defect finding"}
|
|
44
64
|
{"query": "does this change follow the conventions the rest of the project uses", "relevant": ["code-reviewer"], "kind": "workflow", "note": "guideline adherence"}
|
|
45
|
-
{"query": "I need a single page covering what went wrong, why it happened and what we will do", "relevant": ["analyse-problem"], "kind": "skill", "note": "A3 report"}
|
|
46
|
-
{"query": "help me lay out everything that might be contributing, grouped into categories", "relevant": ["cause-and-effect"], "kind": "skill", "note": "fishbone"}
|
|
47
|
-
{"query": "I want to run small controlled experiments and keep iterating on the result", "relevant": ["plan-do-check-act"], "kind": "skill", "note": "PDCA"}
|
|
65
|
+
{"query": "I need a single page covering what went wrong, why it happened and what we will do", "relevant": ["analyse-problem"], "exemplar": "NeoLabHQ/context-engineering-kit::plugins/kaizen/skills/analyse-problem/SKILL.md", "kind": "skill", "note": "A3 report"}
|
|
66
|
+
{"query": "help me lay out everything that might be contributing, grouped into categories", "relevant": ["cause-and-effect"], "exemplar": "NeoLabHQ/context-engineering-kit::plugins/kaizen/skills/cause-and-effect/SKILL.md", "kind": "skill", "note": "fishbone"}
|
|
67
|
+
{"query": "I want to run small controlled experiments and keep iterating on the result", "relevant": ["plan-do-check-act"], "exemplar": "NeoLabHQ/context-engineering-kit::plugins/kaizen/skills/plan-do-check-act/SKILL.md", "kind": "skill", "note": "PDCA"}
|
|
48
68
|
{"query": "drive my locally running site in a real browser and confirm it behaves", "relevant": ["webapp-testing"], "kind": "skill", "note": "playwright without the word"}
|
|
49
69
|
{"query": "get the text out of a scanned document so I can search it", "relevant": ["pdf"], "kind": "skill", "note": "extraction"}
|
|
50
|
-
{"query": "I need to edit a Word file programmatically", "relevant": ["docx"], "kind": "skill", "note": "office format"}
|
|
51
|
-
{"query": "read numbers out of a spreadsheet and write some back", "relevant": ["xlsx"], "kind": "skill", "note": "office format"}
|
|
52
|
-
{"query": "put together a slide deck for a presentation", "relevant": ["pptx"], "kind": "skill", "note": "office format"}
|
|
70
|
+
{"query": "I need to edit a Word file programmatically", "relevant": ["docx"], "exemplar": "anthropics/skills::skills/docx/SKILL.md", "kind": "skill", "note": "office format"}
|
|
71
|
+
{"query": "read numbers out of a spreadsheet and write some back", "relevant": ["xlsx"], "exemplar": "anthropics/skills::skills/xlsx/SKILL.md", "kind": "skill", "note": "office format"}
|
|
72
|
+
{"query": "put together a slide deck for a presentation", "relevant": ["pptx"], "exemplar": "anthropics/skills::skills/pptx/SKILL.md", "kind": "skill", "note": "office format"}
|
|
53
73
|
{"query": "make a short looping animation small enough to post in chat", "relevant": ["slack-gif-creator"], "kind": "skill", "note": "gif constraints"}
|
|
54
74
|
{"query": "make this match our company colours and typefaces", "relevant": ["brand-guidelines"], "kind": "skill", "note": "brand application"}
|
|
55
75
|
{"query": "the interface looks generic and I want it to feel deliberate", "relevant": ["frontend-design"], "kind": "skill", "note": "visual design intent"}
|
|
@@ -58,27 +78,27 @@
|
|
|
58
78
|
{"query": "I am running out of room in the window and important details get dropped", "relevant": ["context-engineering"], "kind": "skill", "note": "context limits"}
|
|
59
79
|
{"query": "I want to package a repeatable procedure so it can be reused later", "relevant": ["skill-creator", "create-skill"], "kind": "skill", "note": "duplicate intent in corpus"}
|
|
60
80
|
{"query": "how do I tell whether my changes to the instructions actually helped", "relevant": ["agent-evaluation"], "kind": "skill", "note": "measuring prompt changes"}
|
|
61
|
-
{"query": "run something automatically every time before code is committed", "relevant": ["create-hook"], "kind": "skill", "note": "git hooks"}
|
|
62
|
-
{"query": "turn this ticket into a proper technical specification", "relevant": ["analyze-issue"], "kind": "skill", "note": "issue to spec"}
|
|
81
|
+
{"query": "run something automatically every time before code is committed", "relevant": ["create-hook"], "exemplar": "NeoLabHQ/context-engineering-kit::plugins/customaize-agent/skills/create-hook/SKILL.md", "kind": "skill", "note": "git hooks"}
|
|
82
|
+
{"query": "turn this ticket into a proper technical specification", "relevant": ["analyze-issue"], "exemplar": "NeoLabHQ/context-engineering-kit::plugins/git/skills/analyze-issue/SKILL.md", "kind": "skill", "note": "issue to spec"}
|
|
63
83
|
{"query": "open a change request with the right template filled in", "relevant": ["create-pr"], "kind": "skill", "note": "PR creation"}
|
|
64
|
-
{"query": "gather all the unresolved feedback on my change into a task list", "relevant": ["load-pr-comments"], "kind": "skill", "note": "review comments"}
|
|
84
|
+
{"query": "gather all the unresolved feedback on my change into a task list", "relevant": ["load-pr-comments"], "exemplar": "NeoLabHQ/context-engineering-kit::plugins/git/skills/load-pr-comments/SKILL.md", "kind": "skill", "note": "review comments"}
|
|
65
85
|
{"query": "the written guides no longer match what the code does", "relevant": ["update-docs"], "kind": "skill", "note": "stale documentation"}
|
|
66
86
|
{"query": "walk me through writing a guide together step by step", "relevant": ["doc-coauthoring"], "kind": "skill", "note": "structured authoring"}
|
|
67
|
-
{"query": "this needs careful multi-step logic rather than a quick guess", "relevant": ["thought-based-reasoning"], "kind": "skill", "note": "reasoning depth"}
|
|
68
|
-
{"query": "I want several different perspectives to argue about my design before I commit to it", "relevant": ["critique"], "kind": "skill", "note": "multi-judge debate"}
|
|
69
|
-
{"query": "look back over what you just produced and improve on it", "relevant": ["reflect"], "kind": "skill", "note": "self-refinement"}
|
|
70
|
-
{"query": "keep this lesson around so the same mistake is not repeated", "relevant": ["memorize"], "kind": "skill", "note": "persisting insights"}
|
|
71
|
-
{"query": "some of the decisions we recorded are probably out of date now", "relevant": ["decay"], "kind": "skill", "note": "evidence freshness"}
|
|
87
|
+
{"query": "this needs careful multi-step logic rather than a quick guess", "relevant": ["thought-based-reasoning"], "exemplar": "NeoLabHQ/context-engineering-kit::plugins/customaize-agent/skills/thought-based-reasoning/SKILL.md", "kind": "skill", "note": "reasoning depth"}
|
|
88
|
+
{"query": "I want several different perspectives to argue about my design before I commit to it", "relevant": ["critique"], "exemplar": "NeoLabHQ/context-engineering-kit::plugins/reflexion/skills/critique/SKILL.md", "kind": "skill", "note": "multi-judge debate"}
|
|
89
|
+
{"query": "look back over what you just produced and improve on it", "relevant": ["reflect"], "exemplar": "NeoLabHQ/context-engineering-kit::plugins/reflexion/skills/reflect/SKILL.md", "kind": "skill", "note": "self-refinement"}
|
|
90
|
+
{"query": "keep this lesson around so the same mistake is not repeated", "relevant": ["memorize"], "exemplar": "NeoLabHQ/context-engineering-kit::plugins/reflexion/skills/memorize/SKILL.md", "kind": "skill", "note": "persisting insights"}
|
|
91
|
+
{"query": "some of the decisions we recorded are probably out of date now", "relevant": ["decay"], "exemplar": "NeoLabHQ/context-engineering-kit::plugins/fpf/skills/decay/SKILL.md", "kind": "skill", "note": "evidence freshness"}
|
|
72
92
|
{"query": "generate visuals from code with a bit of controlled randomness", "relevant": ["algorithmic-art"], "kind": "skill", "note": "creative coding"}
|
|
73
93
|
{"query": "produce a good looking printable document rather than a web page", "relevant": ["canvas-design"], "kind": "skill", "note": "print output"}
|
|
74
94
|
{"query": "apply one consistent look across slides, documents and pages", "relevant": ["theme-factory"], "kind": "skill", "note": "theming"}
|
|
75
95
|
{"query": "what does calling the model actually cost per token", "relevant": ["claude-api"], "kind": "skill", "note": "pricing reference"}
|
|
76
96
|
{"query": "my containers keep restarting and I cannot work out why", "relevant": ["docker-expert"], "kind": "workflow", "note": "avoids the word docker"}
|
|
77
|
-
{"query": "the layout falls apart on a narrow screen", "relevant": ["css-expert"], "kind": "workflow", "note": "responsive layout"}
|
|
78
|
-
{"query": "I want automated tests that click through the app like a person would", "relevant": ["cypress-expert"], "kind": "workflow", "note": "e2e testing"}
|
|
79
|
-
{"query": "our full-text queries have got slow as the index grew", "relevant": ["elasticsearch-expert"], "kind": "workflow", "note": "search performance"}
|
|
80
|
-
{"query": "how should I choose partition and sort keys for this access pattern", "relevant": ["dynamodb-expert"], "kind": "workflow", "note": "key design"}
|
|
81
|
-
{"query": "my shell script fails silently in the pipeline and I never notice", "relevant": ["bash-expert"], "kind": "workflow", "note": "defensive scripting"}
|
|
82
|
-
{"query": "I need to configure a fleet of servers repeatably without doing it by hand", "relevant": ["ansible-expert"], "kind": "workflow", "note": "config management"}
|
|
83
|
-
{"query": "keep database schema versions in step across environments", "relevant": ["flyway-expert"], "kind": "workflow", "note": "migrations"}
|
|
84
|
-
{"query": "background jobs are piling up and not getting processed", "relevant": ["celery-expert", "bullmq-expert"], "kind": "workflow", "note": "two queue libraries, both defensible"}
|
|
97
|
+
{"query": "the layout falls apart on a narrow screen", "relevant": ["css-expert"], "exemplar": "0xfurai/claude-code-subagents::agents/css-expert.md", "kind": "workflow", "note": "responsive layout"}
|
|
98
|
+
{"query": "I want automated tests that click through the app like a person would", "relevant": ["cypress-expert"], "exemplar": "0xfurai/claude-code-subagents::agents/cypress-expert.md", "kind": "workflow", "note": "e2e testing"}
|
|
99
|
+
{"query": "our full-text queries have got slow as the index grew", "relevant": ["elasticsearch-expert"], "exemplar": "0xfurai/claude-code-subagents::agents/elasticsearch-expert.md", "kind": "workflow", "note": "search performance"}
|
|
100
|
+
{"query": "how should I choose partition and sort keys for this access pattern", "relevant": ["dynamodb-expert"], "exemplar": "0xfurai/claude-code-subagents::agents/dynamodb-expert.md", "kind": "workflow", "note": "key design"}
|
|
101
|
+
{"query": "my shell script fails silently in the pipeline and I never notice", "relevant": ["bash-expert"], "exemplar": "0xfurai/claude-code-subagents::agents/bash-expert.md", "kind": "workflow", "note": "defensive scripting"}
|
|
102
|
+
{"query": "I need to configure a fleet of servers repeatably without doing it by hand", "relevant": ["ansible-expert"], "exemplar": "0xfurai/claude-code-subagents::agents/ansible-expert.md", "kind": "workflow", "note": "config management"}
|
|
103
|
+
{"query": "keep database schema versions in step across environments", "relevant": ["flyway-expert"], "exemplar": "0xfurai/claude-code-subagents::agents/flyway-expert.md", "kind": "workflow", "note": "migrations"}
|
|
104
|
+
{"query": "background jobs are piling up and not getting processed", "relevant": ["celery-expert", "bullmq-expert"], "exemplar": ["0xfurai/claude-code-subagents::agents/celery-expert.md", "0xfurai/claude-code-subagents::agents/bullmq-expert.md"], "kind": "workflow", "note": "two queue libraries, both defensible"}
|