boost-skill-cli 1.0.216__tar.gz → 1.0.217__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.216 → boost_skill_cli-1.0.217}/.vale/styles/config/vocabularies/boost/accept.txt +4 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/CONTRIBUTING.md +17 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/Makefile +11 -1
- {boost_skill_cli-1.0.216/boost_skill_cli.egg-info → boost_skill_cli-1.0.217}/PKG-INFO +1 -1
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/commands/pkg.py +7 -12
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217/boost_skill_cli.egg-info}/PKG-INFO +1 -1
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_skill_cli.egg-info/SOURCES.txt +6 -0
- boost_skill_cli-1.0.217/codecov.yml +46 -0
- boost_skill_cli-1.0.217/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +25 -0
- boost_skill_cli-1.0.217/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +28 -0
- boost_skill_cli-1.0.217/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +27 -0
- boost_skill_cli-1.0.217/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +38 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap.html +73 -19
- boost_skill_cli-1.0.217/scripts/post_deploy_smoke.py +201 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/setup.cfg +2 -0
- boost_skill_cli-1.0.217/sonar-project.properties +38 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/functional/test_cli_pkg.py +13 -2
- boost_skill_cli-1.0.217/tests/unit/test_post_deploy_smoke.py +218 -0
- boost_skill_cli-1.0.217/tests/visual/console_check.mjs +90 -0
- boost_skill_cli-1.0.216/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -20
- boost_skill_cli-1.0.216/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -20
- boost_skill_cli-1.0.216/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -20
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/.gitattributes +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/.gitignore +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/.lycheeignore +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/.vale.ini +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/CLAUDE.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/LICENSE +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/MANIFEST.in +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/README.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/SECURITY.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/adapters.html +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/carousel.html +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/commands.html +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/demo.gif +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/demo.tape +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/eval.html +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/index.html +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/examples/README.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/index.html +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/noxfile.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/pyproject.toml +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/style/README.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/style/boost.css +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/style/boost.js +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/style/demo.html +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/conftest.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.0.216 → boost_skill_cli-1.0.217}/tests/visual/visual_check.mjs +0 -0
|
@@ -4,6 +4,7 @@ argparse
|
|
|
4
4
|
bmad
|
|
5
5
|
bookended
|
|
6
6
|
CI's
|
|
7
|
+
Codecov
|
|
7
8
|
codespell
|
|
8
9
|
config
|
|
9
10
|
configs
|
|
@@ -22,6 +23,7 @@ GIF
|
|
|
22
23
|
gitignored
|
|
23
24
|
glassmorphic
|
|
24
25
|
hardcode
|
|
26
|
+
hotspots
|
|
25
27
|
jonnyeclectic
|
|
26
28
|
jonnyeclectic's
|
|
27
29
|
langchain
|
|
@@ -31,6 +33,7 @@ mergeable
|
|
|
31
33
|
mutmut
|
|
32
34
|
mypy
|
|
33
35
|
npm
|
|
36
|
+
onboards
|
|
34
37
|
Pinecone
|
|
35
38
|
pytest
|
|
36
39
|
rebased
|
|
@@ -46,6 +49,7 @@ rulesets
|
|
|
46
49
|
Rulesets
|
|
47
50
|
sandboxed
|
|
48
51
|
sandboxing
|
|
52
|
+
SonarCloud
|
|
49
53
|
stderr
|
|
50
54
|
Stdlib
|
|
51
55
|
stdlib
|
|
@@ -63,6 +63,23 @@ are pinned to the same tool versions the lint gate uses, and
|
|
|
63
63
|
[pre-commit.ci](https://pre-commit.ci) runs them on every PR and pushes any
|
|
64
64
|
auto-fixes straight back onto the branch.
|
|
65
65
|
|
|
66
|
+
## Optional dashboards (Codecov, SonarCloud)
|
|
67
|
+
|
|
68
|
+
Two hosted dashboards are wired up but **inert until someone onboards them**.
|
|
69
|
+
Both are deliberately *non-blocking*: boost's own gates run offline and are the
|
|
70
|
+
authoritative ones, and a merge should never hinge on a third party's uptime.
|
|
71
|
+
|
|
72
|
+
| Dashboard | To enable | Config |
|
|
73
|
+
|---|---|---|
|
|
74
|
+
| **Codecov** — PR diff-coverage comments, file sunburst, trend | add a `CODECOV_TOKEN` repo secret | [`codecov.yml`](codecov.yml) |
|
|
75
|
+
| **SonarCloud** — bugs, smells, security hotspots, duplication | import the repo at [sonarcloud.io](https://sonarcloud.io) (Analysis Method: GitHub Actions), then add the generated token as `SONAR_TOKEN` | [`sonar-project.properties`](sonar-project.properties) |
|
|
76
|
+
|
|
77
|
+
Without the secret each step skips itself — the `if:` reads the token through
|
|
78
|
+
`env`, since a secret can't be referenced directly in an `if`. The SonarCloud job
|
|
79
|
+
also writes a note to the run summary saying what to do, so a skipped run
|
|
80
|
+
explains itself instead of looking broken. Neither is in the required-checks
|
|
81
|
+
list, and neither should be added to it.
|
|
82
|
+
|
|
66
83
|
## The gates (CI runs all of these)
|
|
67
84
|
|
|
68
85
|
| Command | Gate |
|
|
@@ -10,7 +10,7 @@ PYTEST := $(VENV)/bin/pytest
|
|
|
10
10
|
# pinned taps out of the developer's real ~/.boost.
|
|
11
11
|
EVAL_HOME := $(CURDIR)/.eval-home
|
|
12
12
|
|
|
13
|
-
.PHONY: venv test unit functional smoke coverage patch-coverage mutation lint check demo carousel clean-test eval eval-ai eval-rec eval-stats eval-explain audit dist-check bdd bench bench-cli fuzz
|
|
13
|
+
.PHONY: venv test unit functional smoke coverage patch-coverage mutation lint check demo carousel clean-test eval eval-ai eval-rec eval-stats eval-explain audit dist-check bdd bench bench-cli fuzz post-deploy
|
|
14
14
|
|
|
15
15
|
# Every tool comes from a hash-pinned requirements/*.txt — the same files CI
|
|
16
16
|
# installs (see scripts/lock_toolchain.py). pip enforces the hashes, so a dev
|
|
@@ -155,6 +155,16 @@ fuzz:
|
|
|
155
155
|
-max_total_time=$(FUZZ_SECONDS) -artifact_prefix=/tmp/ || exit 1; \
|
|
156
156
|
done
|
|
157
157
|
|
|
158
|
+
# Health check for the PUBLISHED docs site: every page 200, every local asset and
|
|
159
|
+
# internal link resolves, and (with Chrome) no console errors or failed runtime
|
|
160
|
+
# requests. Not part of `make check` — it needs the network and the live deploy;
|
|
161
|
+
# the post-deploy workflow runs it after Pages republishes.
|
|
162
|
+
# BOOST_SITE=http://localhost:8000/ make post-deploy to check a local serve.
|
|
163
|
+
BOOST_SITE ?= https://jonnyeclectic.github.io/boost/
|
|
164
|
+
post-deploy:
|
|
165
|
+
$(PY) scripts/post_deploy_smoke.py --base-url "$(BOOST_SITE)" -v
|
|
166
|
+
@command -v node >/dev/null 2>&1 && BOOST_SITE="$(BOOST_SITE)" node tests/visual/console_check.mjs || echo "node not on PATH — skipping the console check (CI runs it)"
|
|
167
|
+
|
|
158
168
|
# regenerate generated artifacts from their source (registries + roadmap boards)
|
|
159
169
|
generate:
|
|
160
170
|
$(PY) scripts/build_registries.py
|
|
@@ -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.217'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 217)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -109,7 +109,7 @@ def _warn_secrets(res: store.InstallResult) -> None:
|
|
|
109
109
|
out.warn(" L%d [%s] %s" % (f.line, f.severity, f.description))
|
|
110
110
|
|
|
111
111
|
|
|
112
|
-
def _offer_mcp(res: store.InstallResult) -> None:
|
|
112
|
+
def _offer_mcp(res: store.InstallResult, no_mcp: bool = False) -> None:
|
|
113
113
|
"""Surface the MCP servers a just-installed skill needs, and offer to wire them.
|
|
114
114
|
|
|
115
115
|
A skill that only works paired with an MCP server used to install "cleanly"
|
|
@@ -118,11 +118,11 @@ def _offer_mcp(res: store.InstallResult) -> None:
|
|
|
118
118
|
servers that came with a runnable spec.
|
|
119
119
|
|
|
120
120
|
Advisory, never fatal: a declined prompt, a missing ``claude`` CLI or a failed
|
|
121
|
-
registration all leave the skill installed. Suppressed
|
|
122
|
-
|
|
121
|
+
registration all leave the skill installed. Suppressed by ``--no-mcp`` (passed
|
|
122
|
+
down as ``no_mcp``) or by exporting ``BOOST_NO_MCP_OFFER``.
|
|
123
123
|
"""
|
|
124
124
|
rows = res.mcp_servers
|
|
125
|
-
if not rows or os.environ.get("BOOST_NO_MCP_OFFER"):
|
|
125
|
+
if not rows or no_mcp or os.environ.get("BOOST_NO_MCP_OFFER"):
|
|
126
126
|
return
|
|
127
127
|
from ..core import mcpdecl
|
|
128
128
|
out.info("")
|
|
@@ -170,7 +170,7 @@ def _register_mcp_server(name: str, spec: dict) -> None:
|
|
|
170
170
|
journal.log("mcp-register", name)
|
|
171
171
|
|
|
172
172
|
|
|
173
|
-
def _report_result(res: store.InstallResult) -> None:
|
|
173
|
+
def _report_result(res: store.InstallResult, no_mcp: bool = False) -> None:
|
|
174
174
|
"""The canonical three-line install report."""
|
|
175
175
|
if res.kind in ("rule", "workflow"):
|
|
176
176
|
where = " (this repo)" if res.scope == "project" else ""
|
|
@@ -202,7 +202,7 @@ def _report_result(res: store.InstallResult) -> None:
|
|
|
202
202
|
out.ok("lock updated (.skill-lock.json)")
|
|
203
203
|
_warn_injection(res)
|
|
204
204
|
_warn_secrets(res)
|
|
205
|
-
_offer_mcp(res)
|
|
205
|
+
_offer_mcp(res, no_mcp=no_mcp)
|
|
206
206
|
|
|
207
207
|
|
|
208
208
|
def _boostfile_text(skills: Dict[str, dict], via: str = "boost bundle dump") -> str:
|
|
@@ -304,11 +304,6 @@ def cmd_install(argv: List[str]) -> int:
|
|
|
304
304
|
help="don't offer to register MCP servers a skill declares")
|
|
305
305
|
args = ap.parse_args(argv)
|
|
306
306
|
args.scope = args.scope or scopes.SCOPE_USER
|
|
307
|
-
if args.no_mcp:
|
|
308
|
-
# An env flag rather than threading a parameter through _report_result's
|
|
309
|
-
# eight call sites: the offer is a leaf-level side effect, and this keeps
|
|
310
|
-
# every other install path (update, reinstall, team, MCP tool) unchanged.
|
|
311
|
-
os.environ["BOOST_NO_MCP_OFFER"] = "1"
|
|
312
307
|
only = _check_agents(args.agent)
|
|
313
308
|
multi = len(args.names) > 1
|
|
314
309
|
entries, failed = [], 0
|
|
@@ -394,7 +389,7 @@ def cmd_install(argv: List[str]) -> int:
|
|
|
394
389
|
out.warn("%s: %s" % (e["name"], err.message))
|
|
395
390
|
failed += 1
|
|
396
391
|
continue
|
|
397
|
-
_report_result(res)
|
|
392
|
+
_report_result(res, no_mcp=args.no_mcp)
|
|
398
393
|
results.append(res)
|
|
399
394
|
if results:
|
|
400
395
|
kinds = {r.kind for r in results}
|
|
@@ -16,11 +16,13 @@ Makefile
|
|
|
16
16
|
README.md
|
|
17
17
|
SECURITY.md
|
|
18
18
|
boost
|
|
19
|
+
codecov.yml
|
|
19
20
|
eslint.config.mjs
|
|
20
21
|
index.html
|
|
21
22
|
noxfile.py
|
|
22
23
|
pyproject.toml
|
|
23
24
|
setup.cfg
|
|
25
|
+
sonar-project.properties
|
|
24
26
|
.vale/styles/boost/Terminology.yml
|
|
25
27
|
.vale/styles/config/vocabularies/boost/accept.txt
|
|
26
28
|
boost_cli/__init__.py
|
|
@@ -254,6 +256,7 @@ docs/roadmap/items/required-checks-config-drift.md
|
|
|
254
256
|
docs/roadmap/items/retrieval-quality-eval-harness.md
|
|
255
257
|
docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md
|
|
256
258
|
docs/roadmap/items/robust-tag-argument-parsing.md
|
|
259
|
+
docs/roadmap/items/ruff-016-widens-the-default-rule-set.md
|
|
257
260
|
docs/roadmap/items/rule-install-native-materialization.md
|
|
258
261
|
docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md
|
|
259
262
|
docs/roadmap/items/runtime-explain-faithfulness-guardrail.md
|
|
@@ -323,6 +326,7 @@ scripts/import_budget.py
|
|
|
323
326
|
scripts/lock_toolchain.py
|
|
324
327
|
scripts/mutation_gate.py
|
|
325
328
|
scripts/perf_gate.py
|
|
329
|
+
scripts/post_deploy_smoke.py
|
|
326
330
|
style/README.md
|
|
327
331
|
style/boost.css
|
|
328
332
|
style/boost.js
|
|
@@ -438,6 +442,7 @@ tests/unit/test_pkg_confusions.py
|
|
|
438
442
|
tests/unit/test_pkg_injection.py
|
|
439
443
|
tests/unit/test_pkg_secrets.py
|
|
440
444
|
tests/unit/test_policy.py
|
|
445
|
+
tests/unit/test_post_deploy_smoke.py
|
|
441
446
|
tests/unit/test_projectlock.py
|
|
442
447
|
tests/unit/test_provenance.py
|
|
443
448
|
tests/unit/test_rag.py
|
|
@@ -462,5 +467,6 @@ tests/unit/test_util.py
|
|
|
462
467
|
tests/unit/test_version.py
|
|
463
468
|
tests/unit/test_workflows.py
|
|
464
469
|
tests/visual/a11y_check.mjs
|
|
470
|
+
tests/visual/console_check.mjs
|
|
465
471
|
tests/visual/package.json
|
|
466
472
|
tests/visual/visual_check.mjs
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Codecov configuration.
|
|
2
|
+
#
|
|
3
|
+
# Codecov is a DASHBOARD here, not a gate. boost already enforces coverage
|
|
4
|
+
# itself, twice, and those checks are the authoritative ones:
|
|
5
|
+
#
|
|
6
|
+
# * project floor — pytest --cov with fail_under = 80 (pyproject.toml)
|
|
7
|
+
# * patch floor — diff-cover --fail-under=80 vs origin/main (ci.yml)
|
|
8
|
+
#
|
|
9
|
+
# Both run in-repo, offline, on every PR. Layering a third-party status check on
|
|
10
|
+
# top would mean a merge could be blocked by somebody else's uptime, and a gate
|
|
11
|
+
# you cannot run locally is a gate contributors cannot preempt. So every status
|
|
12
|
+
# below is `informational: true`: Codecov comments, draws the sunburst and tracks
|
|
13
|
+
# the trend, and never fails a build.
|
|
14
|
+
#
|
|
15
|
+
# Until CODECOV_TOKEN exists as a repo secret the upload step is skipped
|
|
16
|
+
# entirely (see ci.yml), so this file is inert rather than wrong.
|
|
17
|
+
|
|
18
|
+
coverage:
|
|
19
|
+
precision: 1
|
|
20
|
+
round: down
|
|
21
|
+
# Match the repo's own floor so the dashboard and the gate tell the same story.
|
|
22
|
+
range: "80...100"
|
|
23
|
+
status:
|
|
24
|
+
project:
|
|
25
|
+
default:
|
|
26
|
+
target: 80%
|
|
27
|
+
informational: true
|
|
28
|
+
patch:
|
|
29
|
+
default:
|
|
30
|
+
target: 80%
|
|
31
|
+
informational: true
|
|
32
|
+
|
|
33
|
+
comment:
|
|
34
|
+
# One comment, rewritten in place, showing the diff and the file breakdown.
|
|
35
|
+
layout: "condensed_header, diff, flags, components, condensed_files"
|
|
36
|
+
behavior: once
|
|
37
|
+
require_changes: true # stay silent on a PR that changes no covered code
|
|
38
|
+
|
|
39
|
+
ignore:
|
|
40
|
+
# Generated by setuptools-scm at build time and absent from a checkout — the
|
|
41
|
+
# same carve-out [tool.mypy] and [tool.pyright] make.
|
|
42
|
+
- "boost_cli/_version.py"
|
|
43
|
+
# Dev/CI tooling and fixtures, not shipped code.
|
|
44
|
+
- "scripts/**"
|
|
45
|
+
- "tests/**"
|
|
46
|
+
- "noxfile.py"
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: coverage-dashboard-codecov-free-for-oss
|
|
3
|
+
board: code
|
|
4
|
+
section: dx
|
|
5
|
+
status: shipped
|
|
6
|
+
category: Testing · Platform
|
|
7
|
+
complexity: S
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 3
|
|
10
|
+
note: PR decoration
|
|
11
|
+
order: 8
|
|
12
|
+
owner: loop/quality-dashboards
|
|
13
|
+
pr: 246
|
|
14
|
+
title: Coverage dashboard — Codecov (free for OSS)
|
|
15
|
+
---
|
|
16
|
+
The self-contained <code>diff-cover</code> gate enforces patch coverage in CI; this is
|
|
17
|
+
its hosted counterpart — the same <code>coverage.xml</code> the gate already
|
|
18
|
+
reads, turned into PR diff-coverage comments, a file sunburst and a trend line
|
|
19
|
+
over time. Wired into the existing <code>patch-coverage</code> job (no second
|
|
20
|
+
test run) and <em>deliberately non-blocking</em>: <code>codecov.yml</code> marks
|
|
21
|
+
every status <code>informational</code>, because boost already enforces coverage
|
|
22
|
+
twice offline and a merge should never hinge on a third party's uptime. Inert
|
|
23
|
+
until a <code>CODECOV_TOKEN</code> secret exists — the step's <code>if</code>
|
|
24
|
+
reads the token through <code>env</code> (a secret cannot be referenced directly
|
|
25
|
+
in an <code>if</code>), so with no secret it skips rather than fails.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: post-deploy-smoke-headless-load-check
|
|
3
|
+
board: code
|
|
4
|
+
section: docsite
|
|
5
|
+
status: shipped
|
|
6
|
+
category: Testing · Docs
|
|
7
|
+
complexity: M
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 3
|
|
10
|
+
note: catches red deploys
|
|
11
|
+
order: 9
|
|
12
|
+
owner: loop/post-deploy-smoke
|
|
13
|
+
pr: 244
|
|
14
|
+
title: Post-deploy smoke — headless load check
|
|
15
|
+
---
|
|
16
|
+
Every other docs gate runs against the working tree — <code>html-validate</code> and
|
|
17
|
+
the a11y checker parse the files, the visual sweep loads them over
|
|
18
|
+
<code>file://</code>. All of them can be green while the <em>deployed</em> site is
|
|
19
|
+
broken, because deployment is where the paths change: Pages serves this repo
|
|
20
|
+
under <code>/boost/</code>, so a link that resolves on disk can 404 in production.
|
|
21
|
+
Nothing was watching that. Now, triggered by the Pages deployment finishing (so it
|
|
22
|
+
checks what was actually published rather than guessing at propagation),
|
|
23
|
+
<code>scripts/post_deploy_smoke.py</code> asserts every page answers 200 and every
|
|
24
|
+
local asset and internal link resolves — pure stdlib over HTTP, no browser — and
|
|
25
|
+
<code>console_check.mjs</code> loads each live page in headless Chrome for the
|
|
26
|
+
half only a browser sees: uncaught JS, <code>console.error</code>, and runtime
|
|
27
|
+
request failures. Off-site links are deliberately excluded: a flaky third party
|
|
28
|
+
must never redden boost's deploy, and <code>links.yml</code> already owns those.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: quality-dashboard-sonarcloud-free-for-oss
|
|
3
|
+
board: code
|
|
4
|
+
section: health
|
|
5
|
+
status: shipped
|
|
6
|
+
category: Quality · Platform
|
|
7
|
+
complexity: M
|
|
8
|
+
impact: High
|
|
9
|
+
wow: 5
|
|
10
|
+
note: PR quality gate
|
|
11
|
+
order: 6
|
|
12
|
+
owner: loop/quality-dashboards
|
|
13
|
+
pr: 246
|
|
14
|
+
title: Quality dashboard — SonarCloud (free for OSS)
|
|
15
|
+
---
|
|
16
|
+
One external surface over everything the offline gates measure separately: bugs, code
|
|
17
|
+
smells, security hotspots, duplication and a coverage overlay, decorating each PR
|
|
18
|
+
with a quality gate. Free for public repos. Settings live in
|
|
19
|
+
<code>sonar-project.properties</code> — <code>boost_cli</code> as sources with
|
|
20
|
+
<code>tests</code> declared separately (so the suite's asserts do not score as
|
|
21
|
+
duplication), the generated version stub and boards excluded, coverage read from
|
|
22
|
+
the Cobertura report CI already emits rather than re-running the suite.
|
|
23
|
+
Non-blocking and inert until onboarded: without <code>SONAR_TOKEN</code> the job
|
|
24
|
+
skips and writes what to do into the run summary, so a skipped run explains
|
|
25
|
+
itself instead of looking broken. Not added to required checks — boost's own
|
|
26
|
+
gates stay authoritative because they run offline and a contributor can
|
|
27
|
+
reproduce them.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: ruff-016-widens-the-default-rule-set
|
|
3
|
+
board: code
|
|
4
|
+
section: health
|
|
5
|
+
status: planned
|
|
6
|
+
category: Toolchain
|
|
7
|
+
complexity: M
|
|
8
|
+
impact: Med
|
|
9
|
+
wow: 2
|
|
10
|
+
note: 83 errors, 43 auto-fixable
|
|
11
|
+
order: 15
|
|
12
|
+
owner:
|
|
13
|
+
pr: 236
|
|
14
|
+
title: ruff 0.16 widens the default rule set — 83 new errors on a version bump
|
|
15
|
+
---
|
|
16
|
+
Dependabot #236 bumps ruff <code>0.15.22 → 0.16.0</code> and the <code>ruff</code> step
|
|
17
|
+
fails with <b>83 errors</b>. None of them are new code — 0.16 <b>widened the default
|
|
18
|
+
selection</b>, and because <code>pyproject.toml</code> uses <code>extend-select</code>
|
|
19
|
+
(which adds to the defaults rather than replacing them), every newly-defaulted family
|
|
20
|
+
switched on at once. The project only ever opted into
|
|
21
|
+
<code>S, B, SIM, C4, PERF, RUF, UP</code>; what fires now is
|
|
22
|
+
<code>I001</code> (33), <code>PLW1510</code> (19), <code>BLE001</code> (9),
|
|
23
|
+
<code>ISC004</code> (4), plus <code>TRY</code>, <code>PLR</code>, <code>PIE</code>,
|
|
24
|
+
<code>DTZ</code>, <code>RET</code>, <code>PYI</code>, <code>FLY</code> and — awkwardly —
|
|
25
|
+
<code>FURB167</code>, a family the config explicitly delegates to refurb via
|
|
26
|
+
<code>external = ["FURB"]</code>.
|
|
27
|
+
So this is a <b>policy decision, not a lint fix</b>, and there are two honest answers.
|
|
28
|
+
Pin the policy: switch <code>extend-select</code> to a full <code>select = [...]</code> so
|
|
29
|
+
the rule set is stated outright and a future ruff release can never widen it again — the
|
|
30
|
+
bump then lands with zero code changes. Or adopt some of them: <code>I001</code> (import
|
|
31
|
+
sorting) and the 43 auto-fixable errors are cheap and arguably worth having, while
|
|
32
|
+
<code>PLW1510</code> (<code>subprocess.run</code> without <code>check=</code>) is 19 real
|
|
33
|
+
call sites that each need a judgement about whether a non-zero exit should raise.
|
|
34
|
+
<code>DTZ005/006</code> (naive <code>datetime.now()</code>) is worth a look on its own
|
|
35
|
+
merits given <a href="#rel-time-tests-race-the-wall-clock">the clock-racing test</a>.
|
|
36
|
+
Recommended: pin <code>select</code> first so the bump is unblocked and the gate stops
|
|
37
|
+
depending on an upstream default, then adopt families deliberately in follow-ups. Until
|
|
38
|
+
then #236 must not be merged — it reddens <code>ci / lint</code> on every branch.
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
<div class="stat"><b>16</b><span>Shipped</span></div>
|
|
110
110
|
<div class="stat"><b>1</b><span>Next up</span></div>
|
|
111
111
|
<div class="stat"><b>4</b><span>Planned</span></div>
|
|
112
|
-
<div class="stat"><b>
|
|
112
|
+
<div class="stat"><b>146</b><span>Loop finds</span></div>
|
|
113
113
|
<!-- /ROADMAP:stats -->
|
|
114
114
|
</div>
|
|
115
115
|
</section>
|
|
@@ -1308,13 +1308,20 @@ improvement is real (or isn't)."</p>
|
|
|
1308
1308
|
</article>
|
|
1309
1309
|
|
|
1310
1310
|
<article class="cap rcard" id="quality-dashboard-sonarcloud-free-for-oss">
|
|
1311
|
-
<div class="head"><span class="pill
|
|
1311
|
+
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Quality · Platform</span></div>
|
|
1312
1312
|
<h3>Quality dashboard — SonarCloud (free for OSS)</h3>
|
|
1313
|
-
<p>
|
|
1314
|
-
security hotspots, duplication and a coverage overlay
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1313
|
+
<p>One external surface over everything the offline gates measure separately: bugs, code
|
|
1314
|
+
smells, security hotspots, duplication and a coverage overlay, decorating each PR
|
|
1315
|
+
with a quality gate. Free for public repos. Settings live in
|
|
1316
|
+
<code>sonar-project.properties</code> — <code>boost_cli</code> as sources with
|
|
1317
|
+
<code>tests</code> declared separately (so the suite's asserts do not score as
|
|
1318
|
+
duplication), the generated version stub and boards excluded, coverage read from
|
|
1319
|
+
the Cobertura report CI already emits rather than re-running the suite.
|
|
1320
|
+
Non-blocking and inert until onboarded: without <code>SONAR_TOKEN</code> the job
|
|
1321
|
+
skips and writes what to do into the run summary, so a skipped run explains
|
|
1322
|
+
itself instead of looking broken. Not added to required checks — boost's own
|
|
1323
|
+
gates stay authoritative because they run offline and a contributor can
|
|
1324
|
+
reproduce them.</p>
|
|
1318
1325
|
<div class="meta">
|
|
1319
1326
|
<span class="m">Complexity <b>M</b></span>
|
|
1320
1327
|
<span class="m hi">Impact <b>High</b></span>
|
|
@@ -1427,6 +1434,40 @@ exactly what the gate is supposed to catch.</p>
|
|
|
1427
1434
|
</div>
|
|
1428
1435
|
</article>
|
|
1429
1436
|
|
|
1437
|
+
<article class="cap rcard" id="ruff-016-widens-the-default-rule-set">
|
|
1438
|
+
<div class="head"><span class="pill planned">Planned</span><span class="cat">Toolchain</span></div>
|
|
1439
|
+
<h3>ruff 0.16 widens the default rule set — 83 new errors on a version bump</h3>
|
|
1440
|
+
<p>Dependabot #236 bumps ruff <code>0.15.22 → 0.16.0</code> and the <code>ruff</code> step
|
|
1441
|
+
fails with <b>83 errors</b>. None of them are new code — 0.16 <b>widened the default
|
|
1442
|
+
selection</b>, and because <code>pyproject.toml</code> uses <code>extend-select</code>
|
|
1443
|
+
(which adds to the defaults rather than replacing them), every newly-defaulted family
|
|
1444
|
+
switched on at once. The project only ever opted into
|
|
1445
|
+
<code>S, B, SIM, C4, PERF, RUF, UP</code>; what fires now is
|
|
1446
|
+
<code>I001</code> (33), <code>PLW1510</code> (19), <code>BLE001</code> (9),
|
|
1447
|
+
<code>ISC004</code> (4), plus <code>TRY</code>, <code>PLR</code>, <code>PIE</code>,
|
|
1448
|
+
<code>DTZ</code>, <code>RET</code>, <code>PYI</code>, <code>FLY</code> and — awkwardly —
|
|
1449
|
+
<code>FURB167</code>, a family the config explicitly delegates to refurb via
|
|
1450
|
+
<code>external = ["FURB"]</code>.
|
|
1451
|
+
So this is a <b>policy decision, not a lint fix</b>, and there are two honest answers.
|
|
1452
|
+
Pin the policy: switch <code>extend-select</code> to a full <code>select = [...]</code> so
|
|
1453
|
+
the rule set is stated outright and a future ruff release can never widen it again — the
|
|
1454
|
+
bump then lands with zero code changes. Or adopt some of them: <code>I001</code> (import
|
|
1455
|
+
sorting) and the 43 auto-fixable errors are cheap and arguably worth having, while
|
|
1456
|
+
<code>PLW1510</code> (<code>subprocess.run</code> without <code>check=</code>) is 19 real
|
|
1457
|
+
call sites that each need a judgement about whether a non-zero exit should raise.
|
|
1458
|
+
<code>DTZ005/006</code> (naive <code>datetime.now()</code>) is worth a look on its own
|
|
1459
|
+
merits given <a href="#rel-time-tests-race-the-wall-clock">the clock-racing test</a>.
|
|
1460
|
+
Recommended: pin <code>select</code> first so the bump is unblocked and the gate stops
|
|
1461
|
+
depending on an upstream default, then adopt families deliberately in follow-ups. Until
|
|
1462
|
+
then #236 must not be merged — it reddens <code>ci / lint</code> on every branch.</p>
|
|
1463
|
+
<div class="meta">
|
|
1464
|
+
<span class="m">Complexity <b>M</b></span>
|
|
1465
|
+
<span class="m">Impact <b>Med</b></span>
|
|
1466
|
+
<span class="m">Wow <b class="wow">★★</b></span>
|
|
1467
|
+
<span class="m">83 errors, 43 auto-fixable</span>
|
|
1468
|
+
</div>
|
|
1469
|
+
</article>
|
|
1470
|
+
|
|
1430
1471
|
<article class="cap rcard" id="doctor-checks-rules-and-workflows">
|
|
1431
1472
|
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Diagnostics · Install engine</span></div>
|
|
1432
1473
|
<h3><code>boost doctor</code> checks installed rules and workflows</h3>
|
|
@@ -1912,13 +1953,18 @@ self-merge intact. Decide before adding more concurrent loops, not after.</p>
|
|
|
1912
1953
|
</article>
|
|
1913
1954
|
|
|
1914
1955
|
<article class="cap rcard" id="coverage-dashboard-codecov-free-for-oss">
|
|
1915
|
-
<div class="head"><span class="pill
|
|
1956
|
+
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Testing · Platform</span></div>
|
|
1916
1957
|
<h3>Coverage dashboard — Codecov (free for OSS)</h3>
|
|
1917
|
-
<p>
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1958
|
+
<p>The self-contained <code>diff-cover</code> gate enforces patch coverage in CI; this is
|
|
1959
|
+
its hosted counterpart — the same <code>coverage.xml</code> the gate already
|
|
1960
|
+
reads, turned into PR diff-coverage comments, a file sunburst and a trend line
|
|
1961
|
+
over time. Wired into the existing <code>patch-coverage</code> job (no second
|
|
1962
|
+
test run) and <em>deliberately non-blocking</em>: <code>codecov.yml</code> marks
|
|
1963
|
+
every status <code>informational</code>, because boost already enforces coverage
|
|
1964
|
+
twice offline and a merge should never hinge on a third party's uptime. Inert
|
|
1965
|
+
until a <code>CODECOV_TOKEN</code> secret exists — the step's <code>if</code>
|
|
1966
|
+
reads the token through <code>env</code> (a secret cannot be referenced directly
|
|
1967
|
+
in an <code>if</code>), so with no secret it skips rather than fails.</p>
|
|
1922
1968
|
<div class="meta">
|
|
1923
1969
|
<span class="m">Complexity <b>S</b></span>
|
|
1924
1970
|
<span class="m">Impact <b>Med</b></span>
|
|
@@ -2294,13 +2340,21 @@ and the work stays visible.</p>
|
|
|
2294
2340
|
</article>
|
|
2295
2341
|
|
|
2296
2342
|
<article class="cap rcard" id="post-deploy-smoke-headless-load-check">
|
|
2297
|
-
<div class="head"><span class="pill
|
|
2343
|
+
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Testing · Docs</span></div>
|
|
2298
2344
|
<h3>Post-deploy smoke — headless load check</h3>
|
|
2299
|
-
<p>
|
|
2300
|
-
the
|
|
2301
|
-
of
|
|
2302
|
-
|
|
2303
|
-
|
|
2345
|
+
<p>Every other docs gate runs against the working tree — <code>html-validate</code> and
|
|
2346
|
+
the a11y checker parse the files, the visual sweep loads them over
|
|
2347
|
+
<code>file://</code>. All of them can be green while the <em>deployed</em> site is
|
|
2348
|
+
broken, because deployment is where the paths change: Pages serves this repo
|
|
2349
|
+
under <code>/boost/</code>, so a link that resolves on disk can 404 in production.
|
|
2350
|
+
Nothing was watching that. Now, triggered by the Pages deployment finishing (so it
|
|
2351
|
+
checks what was actually published rather than guessing at propagation),
|
|
2352
|
+
<code>scripts/post_deploy_smoke.py</code> asserts every page answers 200 and every
|
|
2353
|
+
local asset and internal link resolves — pure stdlib over HTTP, no browser — and
|
|
2354
|
+
<code>console_check.mjs</code> loads each live page in headless Chrome for the
|
|
2355
|
+
half only a browser sees: uncaught JS, <code>console.error</code>, and runtime
|
|
2356
|
+
request failures. Off-site links are deliberately excluded: a flaky third party
|
|
2357
|
+
must never redden boost's deploy, and <code>links.yml</code> already owns those.</p>
|
|
2304
2358
|
<div class="meta">
|
|
2305
2359
|
<span class="m">Complexity <b>M</b></span>
|
|
2306
2360
|
<span class="m">Impact <b>Med</b></span>
|