boost-skill-cli 1.0.347__tar.gz → 1.0.348__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.347 → boost_skill_cli-1.0.348}/PKG-INFO +1 -1
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/chat.py +106 -16
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_skill_cli.egg-info/PKG-INFO +1 -1
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_chat.py +81 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/.gitattributes +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/.gitignore +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/.lycheeignore +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/.vale.ini +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/CLAUDE.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/LICENSE +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/MANIFEST.in +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/Makefile +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/README.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/SECURITY.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_skill_cli.egg-info/SOURCES.txt +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/codecov.yml +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/adapters.html +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/carousel.html +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/chat.html +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/commands.html +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/demo.gif +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/demo.html +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/demo.tape +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/eval.html +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/index.html +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/docs/roadmap.html +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/evals/README.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/evals/__init__.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/evals/baseline.json +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/evals/metrics.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/examples/README.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/index.html +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/noxfile.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/pyproject.toml +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/setup.cfg +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/sonar-project.properties +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/style/README.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/style/boost.css +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/style/boost.js +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/style/demo.html +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/conftest.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/visual/package-lock.json +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/tests/visual/visual_check.mjs +0 -0
|
@@ -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.348'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 348)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -52,6 +52,18 @@ MIN_FAITHFULNESS = 0.60
|
|
|
52
52
|
# conversation instead of from what retrieval actually returned.
|
|
53
53
|
HISTORY_TURNS = 4
|
|
54
54
|
|
|
55
|
+
# A catalogue-name shape: lowercase, hyphenated, e.g. `code-reviewer`.
|
|
56
|
+
_NAME = r"[a-z][a-z0-9]*(?:-[a-z0-9]+)+"
|
|
57
|
+
_TOKEN = re.compile(r"\b%s\b" % _NAME)
|
|
58
|
+
|
|
59
|
+
# Emphasis around a name-shaped token: `x`, **x**, *x*.
|
|
60
|
+
_EMPHASISED = re.compile(r"`(%(n)s)`|\*\*(%(n)s)\*\*|\*(%(n)s)\*" % {"n": _NAME}, re.IGNORECASE)
|
|
61
|
+
|
|
62
|
+
# Verbs that introduce a recommendation. What follows one is a claim about what
|
|
63
|
+
# to install, which is the phrasing a reader acts on.
|
|
64
|
+
_RECOMMENDS = re.compile(
|
|
65
|
+
r"\b(?:use|using|install|try|run|pick|choose|recommends?)\b", re.IGNORECASE)
|
|
66
|
+
|
|
55
67
|
_SYSTEM = (
|
|
56
68
|
"You help a developer pick an AI coding-agent skill from a catalogue. "
|
|
57
69
|
"Answer ONLY from the numbered skills provided. Never invent a skill name. "
|
|
@@ -132,10 +144,36 @@ def retrieve(question: str, history: Sequence[Turn] = (),
|
|
|
132
144
|
return [h["entry"] for h in hits[:k]], engine
|
|
133
145
|
|
|
134
146
|
|
|
147
|
+
# Catalogue descriptions are untrusted upstream text and some are enormous:
|
|
148
|
+
# measured over a real 71,655-entry catalogue, 22.7% exceed 300 characters and
|
|
149
|
+
# the longest is 5,771. One entry rendered as a screenful of embedded
|
|
150
|
+
# `<example>` blocks — a correct answer nobody could read.
|
|
151
|
+
DESC_CHARS = 200
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
def _one_line(text: str) -> str:
|
|
155
|
+
"""Collapse a description to a single line of plain text.
|
|
156
|
+
|
|
157
|
+
Handles real newlines *and* the literal two-character ``\\n`` that 635
|
|
158
|
+
entries carry from double-escaped upstream frontmatter — those reach a
|
|
159
|
+
terminal as visible backslash-n noise rather than as line breaks.
|
|
160
|
+
"""
|
|
161
|
+
return " ".join(text.replace("\\n", " ").replace("\\t", " ").split())
|
|
162
|
+
|
|
163
|
+
|
|
135
164
|
def _describe(entry: dict) -> str:
|
|
136
|
-
"""One catalogue entry as a line of prompt/answer text.
|
|
165
|
+
"""One catalogue entry as a line of prompt/answer text.
|
|
166
|
+
|
|
167
|
+
Truncation is marked with an ellipsis rather than silent: the reader needs
|
|
168
|
+
to know there is more to the description before deciding, and `boost info
|
|
169
|
+
<name>` is where the full text lives.
|
|
170
|
+
"""
|
|
171
|
+
desc = _one_line(entry.get("description") or "")
|
|
172
|
+
if len(desc) > DESC_CHARS:
|
|
173
|
+
# Cut on a word boundary so the tail is not a severed token.
|
|
174
|
+
desc = desc[:DESC_CHARS].rsplit(" ", 1)[0] + " …"
|
|
137
175
|
return "%s (%s) — %s" % (entry.get("name", "?"), entry.get("tap", "?"),
|
|
138
|
-
|
|
176
|
+
desc or "no description")
|
|
139
177
|
|
|
140
178
|
|
|
141
179
|
def source_text(entries: Sequence[dict]) -> str:
|
|
@@ -143,22 +181,74 @@ def source_text(entries: Sequence[dict]) -> str:
|
|
|
143
181
|
return "\n".join("%d. %s" % (i, _describe(e)) for i, e in enumerate(entries, 1))
|
|
144
182
|
|
|
145
183
|
|
|
146
|
-
def
|
|
147
|
-
"""
|
|
184
|
+
def grounding_text(entries: Sequence[dict]) -> str:
|
|
185
|
+
"""The text a reply is checked against — untruncated, unlike the prompt.
|
|
186
|
+
|
|
187
|
+
These must be different strings. The prompt is trimmed to keep an answer
|
|
188
|
+
readable, but checking a reply against the *trimmed* text would score a
|
|
189
|
+
faithful sentence as unfaithful purely because its evidence fell past
|
|
190
|
+
:data:`DESC_CHARS` — the truncation would manufacture the very failure the
|
|
191
|
+
check exists to detect.
|
|
192
|
+
"""
|
|
193
|
+
return "\n".join(
|
|
194
|
+
"%s %s" % (e.get("name", ""), _one_line(e.get("description") or ""))
|
|
195
|
+
for e in entries)
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def claimed_names(reply: str) -> set:
|
|
199
|
+
"""Name-shaped tokens the reply presents *as skills to install*.
|
|
200
|
+
|
|
201
|
+
Not every hyphenated word is a claim. Descriptions in this catalogue are
|
|
202
|
+
thick with ordinary compounds — "read-only", "multi-agent", "single-pass",
|
|
203
|
+
"security-focused" — and treating each as a possible fabricated skill name
|
|
204
|
+
rejected essentially every real answer (reported from live use). The harm
|
|
205
|
+
this guards against is specific: a reader acting on a recommendation and
|
|
206
|
+
hunting for a package that does not exist. So a token counts as claimed when
|
|
207
|
+
it is emphasised, or when it sits in the clause a recommending verb
|
|
208
|
+
introduces — "try code-reviewer or docker-compose-expert" claims both.
|
|
209
|
+
|
|
210
|
+
Scanning the whole clause rather than just the next word is what catches the
|
|
211
|
+
second item in a list, which is exactly where an invention tends to hide.
|
|
212
|
+
Prose that merely *describes* ("a read-only multi-agent review") claims
|
|
213
|
+
nothing and is left to :func:`faithfulness.score`, the second gate.
|
|
214
|
+
"""
|
|
215
|
+
out = {next(g for g in m.groups() if g).lower()
|
|
216
|
+
for m in _EMPHASISED.finditer(reply)}
|
|
217
|
+
for verb in _RECOMMENDS.finditer(reply):
|
|
218
|
+
# Stop at the sentence end: a later sentence is a new statement, not
|
|
219
|
+
# part of this recommendation.
|
|
220
|
+
clause = re.split(r"[.;!?\n]", reply[verb.end():], maxsplit=1)[0]
|
|
221
|
+
out |= {t.lower() for t in _TOKEN.findall(clause)}
|
|
222
|
+
return out
|
|
148
223
|
|
|
149
|
-
Catalogue names are lowercase hyphenated words (``code-reviewer``,
|
|
150
|
-
``pdf``), which is a distinctive enough shape to spot in prose. Anything
|
|
151
|
-
matching that shape and not present in the candidate set is a name the model
|
|
152
|
-
supplied itself — the exact failure that sends a user hunting for a skill
|
|
153
|
-
that does not exist.
|
|
154
224
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
225
|
+
def ungrounded_names(reply: str, entries: Sequence[dict]) -> List[str]:
|
|
226
|
+
"""Skill-shaped tokens in ``reply`` that appear nowhere in ``entries``.
|
|
227
|
+
|
|
228
|
+
Catalogue names are lowercase hyphenated words (``code-reviewer``), which is
|
|
229
|
+
a distinctive enough shape to spot in prose. A token of that shape that
|
|
230
|
+
appears in neither the retrieved names nor the retrieved *text* is one the
|
|
231
|
+
model supplied itself — the failure that sends a user hunting for a skill
|
|
232
|
+
which does not exist, or toward a typosquat (see ``core/typosquat.py``).
|
|
233
|
+
|
|
234
|
+
THE SOURCES GROUND THE REPLY, NOT JUST THE NAMES. An earlier version checked
|
|
235
|
+
only against the name list, so ordinary hyphenated English quoted straight
|
|
236
|
+
out of a description — "read-only", "multi-agent", "pre-deployment" — scored
|
|
237
|
+
as fabricated. In this catalogue those compounds are everywhere, so a
|
|
238
|
+
faithful reply was rejected almost every time and the AI path silently
|
|
239
|
+
degraded to extractive for nearly every real query. Reported from live use.
|
|
240
|
+
|
|
241
|
+
Deliberately narrow in the other direction too: it only flags *hyphenated*
|
|
242
|
+
tokens, because a single ordinary word cannot be told apart from prose. This
|
|
243
|
+
under-reports rather than firing on innocent sentences, and
|
|
244
|
+
:func:`faithfulness.score` covers the rest.
|
|
158
245
|
"""
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
246
|
+
# Whole tokens, not a substring scan. `x in "…"` would treat an invented
|
|
247
|
+
# `code-review` as grounded because `code-reviewer` contains it — precisely
|
|
248
|
+
# the near-miss shape a typosquat has.
|
|
249
|
+
grounded = set(_TOKEN.findall(grounding_text(entries).lower()))
|
|
250
|
+
grounded |= {str(e.get("name", "")).lower() for e in entries}
|
|
251
|
+
return sorted(c for c in claimed_names(reply) if c not in grounded)
|
|
162
252
|
|
|
163
253
|
|
|
164
254
|
def _extractive(question: str, entries: Sequence[dict]) -> str:
|
|
@@ -208,7 +298,7 @@ def answer(question: str, history: Sequence[Turn] = (),
|
|
|
208
298
|
# A manufactured name is unrecoverable — there is no honest way to show
|
|
209
299
|
# prose that points at a skill which does not exist.
|
|
210
300
|
return Reply(extractive, entries.copy(), engine, "extractive", False)
|
|
211
|
-
if faithfulness.score(reply,
|
|
301
|
+
if faithfulness.score(reply, grounding_text(entries)) < MIN_FAITHFULNESS:
|
|
212
302
|
return Reply(extractive, entries.copy(), engine, "extractive", False)
|
|
213
303
|
return Reply(reply, entries.copy(), engine, "ai", True)
|
|
214
304
|
|
|
@@ -190,3 +190,84 @@ class TestSourceText:
|
|
|
190
190
|
# A blank line reads as "no such skill"; the placeholder keeps the
|
|
191
191
|
# numbering honest and tells the model there is nothing to summarise.
|
|
192
192
|
assert "no description" in chat.source_text([_entry("bare")])
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
class TestGroundingDoesNotFlagOrdinaryEnglish:
|
|
196
|
+
"""A hyphenated word is not a skill name.
|
|
197
|
+
|
|
198
|
+
Reported from real use: every AI reply was rejected with "named something
|
|
199
|
+
outside the retrieved skills". The catalogue's own descriptions are full of
|
|
200
|
+
hyphenated compounds — "read-only", "multi-agent", "pre-deployment",
|
|
201
|
+
"risk-adaptive", "test-driven" — and the first version of
|
|
202
|
+
:func:`ungrounded_names` flagged any hyphenated token that was not itself a
|
|
203
|
+
catalogue name. So a reply that faithfully quoted its sources was scored as
|
|
204
|
+
fabricating, and the AI path degraded to extractive for essentially every
|
|
205
|
+
query in this domain.
|
|
206
|
+
|
|
207
|
+
The fix is that the *sources* ground the reply, not just the name list:
|
|
208
|
+
a term that appears in the retrieved text came from the retrieved text.
|
|
209
|
+
"""
|
|
210
|
+
|
|
211
|
+
ENTRIES = ({"name": "code-reviewer", "tap": "t",
|
|
212
|
+
"description": "Parallel read-only multi-agent review of a git diff, "
|
|
213
|
+
"risk-adaptive and pre-deployment focused."},)
|
|
214
|
+
|
|
215
|
+
def test_compounds_quoted_from_the_sources_are_grounded(self):
|
|
216
|
+
reply = ("The read-only multi-agent code-reviewer fits — it is "
|
|
217
|
+
"risk-adaptive and pre-deployment focused.")
|
|
218
|
+
assert chat.ungrounded_names(reply, self.ENTRIES) == []
|
|
219
|
+
|
|
220
|
+
def test_a_genuinely_invented_name_is_still_caught(self):
|
|
221
|
+
# The whole point of the check: boost is a package manager, so a
|
|
222
|
+
# plausible-but-absent name sends the user hunting for a skill that
|
|
223
|
+
# does not exist, or to a typosquat.
|
|
224
|
+
reply = "Use docker-compose-expert for that."
|
|
225
|
+
assert "docker-compose-expert" in chat.ungrounded_names(reply, self.ENTRIES)
|
|
226
|
+
|
|
227
|
+
def test_a_near_miss_is_not_grounded_by_a_longer_real_name(self):
|
|
228
|
+
# A substring scan would treat "code-review" as grounded because
|
|
229
|
+
# "code-reviewer" contains it — exactly the near-miss shape a
|
|
230
|
+
# typosquat has, so matching is on whole tokens.
|
|
231
|
+
reply = "Install code-review for that."
|
|
232
|
+
assert "code-review" in chat.ungrounded_names(reply, self.ENTRIES)
|
|
233
|
+
|
|
234
|
+
def test_grounding_is_case_insensitive(self):
|
|
235
|
+
reply = "Read-Only review is what Code-Reviewer does."
|
|
236
|
+
assert chat.ungrounded_names(reply, self.ENTRIES) == []
|
|
237
|
+
|
|
238
|
+
def test_a_name_never_needs_the_description_to_be_grounded(self):
|
|
239
|
+
entries = [{"name": "tdd-workflow", "tap": "t", "description": ""}]
|
|
240
|
+
assert chat.ungrounded_names("Try tdd-workflow.", entries) == []
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
class TestLongDescriptionsAreReadable:
|
|
244
|
+
"""Catalogue descriptions are untrusted text and some are enormous.
|
|
245
|
+
|
|
246
|
+
Measured over a real 71,655-entry catalogue: 22.7% of descriptions exceed
|
|
247
|
+
300 characters, the longest is 5,771, and 635 contain literal ``\\n``
|
|
248
|
+
escape sequences. One such entry rendered as a screenful of embedded
|
|
249
|
+
``<example>`` blocks, which is what a user actually saw — the answer was
|
|
250
|
+
correct and unreadable.
|
|
251
|
+
"""
|
|
252
|
+
|
|
253
|
+
def test_a_long_description_is_truncated(self):
|
|
254
|
+
entry = {"name": "x", "tap": "t", "description": "word " * 400}
|
|
255
|
+
line = chat._describe(entry)
|
|
256
|
+
assert len(line) < 300, len(line)
|
|
257
|
+
|
|
258
|
+
def test_truncation_is_marked_rather_than_silent(self):
|
|
259
|
+
entry = {"name": "x", "tap": "t", "description": "word " * 400}
|
|
260
|
+
assert chat._describe(entry).rstrip().endswith("…")
|
|
261
|
+
|
|
262
|
+
def test_a_short_description_is_left_alone(self):
|
|
263
|
+
entry = {"name": "x", "tap": "t", "description": "Short and useful."}
|
|
264
|
+
assert chat._describe(entry).endswith("Short and useful.")
|
|
265
|
+
|
|
266
|
+
def test_embedded_newlines_collapse_to_one_line(self):
|
|
267
|
+
# Both real newlines and the literal two-character \n seen in 635
|
|
268
|
+
# entries, which reach the terminal as visible backslash-n noise.
|
|
269
|
+
entry = {"name": "x", "tap": "t",
|
|
270
|
+
"description": "first\nsecond\\nthird\r\nfourth"}
|
|
271
|
+
line = chat._describe(entry)
|
|
272
|
+
assert "\n" not in line and "\\n" not in line
|
|
273
|
+
assert "first second third fourth" in line
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_skill_cli.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{boost_skill_cli-1.0.347 → boost_skill_cli-1.0.348}/boost_skill_cli.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|