boost-skill-cli 1.2.30__tar.gz → 1.2.32__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.2.32/.vale/styles/config/vocabularies/boost/accept.txt +187 -0
- boost_skill_cli-1.2.32/CLAUDE.md +483 -0
- boost_skill_cli-1.2.32/CONTRIBUTING.md +278 -0
- boost_skill_cli-1.2.32/Makefile +253 -0
- boost_skill_cli-1.2.32/PKG-INFO +1327 -0
- boost_skill_cli-1.2.32/README.md +609 -0
- boost_skill_cli-1.2.32/boost +47 -0
- boost_skill_cli-1.2.32/boost_cli/__init__.py +35 -0
- boost_skill_cli-1.2.32/boost_cli/__main__.py +10 -0
- boost_skill_cli-1.2.32/boost_cli/_version.py +24 -0
- boost_skill_cli-1.2.32/boost_cli/cli.py +338 -0
- boost_skill_cli-1.2.32/boost_cli/cliparse.py +33 -0
- boost_skill_cli-1.2.32/boost_cli/commands/__init__.py +3 -0
- boost_skill_cli-1.2.32/boost_cli/commands/_common.py +80 -0
- boost_skill_cli-1.2.32/boost_cli/commands/bmad.py +581 -0
- boost_skill_cli-1.2.32/boost_cli/commands/configuration.py +1737 -0
- boost_skill_cli-1.2.32/boost_cli/commands/discovery.py +1674 -0
- boost_skill_cli-1.2.32/boost_cli/commands/hooks.py +158 -0
- boost_skill_cli-1.2.32/boost_cli/commands/info.py +1023 -0
- boost_skill_cli-1.2.32/boost_cli/commands/intelligence.py +1219 -0
- boost_skill_cli-1.2.32/boost_cli/commands/pkg.py +1606 -0
- boost_skill_cli-1.2.32/boost_cli/commands/quality.py +1317 -0
- boost_skill_cli-1.2.32/boost_cli/commands/run.py +118 -0
- boost_skill_cli-1.2.32/boost_cli/commands/safety.py +586 -0
- boost_skill_cli-1.2.32/boost_cli/commands/taps.py +385 -0
- boost_skill_cli-1.2.32/boost_cli/commands/team.py +750 -0
- boost_skill_cli-1.2.32/boost_cli/core/__init__.py +3 -0
- boost_skill_cli-1.2.32/boost_cli/core/adapters.py +561 -0
- boost_skill_cli-1.2.32/boost_cli/core/agents.py +81 -0
- boost_skill_cli-1.2.32/boost_cli/core/ai.py +161 -0
- boost_skill_cli-1.2.32/boost_cli/core/bmad.py +694 -0
- boost_skill_cli-1.2.32/boost_cli/core/bootstrap.py +137 -0
- boost_skill_cli-1.2.32/boost_cli/core/browse.py +648 -0
- boost_skill_cli-1.2.32/boost_cli/core/builtin.py +116 -0
- boost_skill_cli-1.2.32/boost_cli/core/capabilities.py +133 -0
- boost_skill_cli-1.2.32/boost_cli/core/catalog.py +662 -0
- boost_skill_cli-1.2.32/boost_cli/core/catalogbundle.py +267 -0
- boost_skill_cli-1.2.32/boost_cli/core/chat.py +395 -0
- boost_skill_cli-1.2.32/boost_cli/core/claude_settings.py +243 -0
- boost_skill_cli-1.2.32/boost_cli/core/complete.py +422 -0
- boost_skill_cli-1.2.32/boost_cli/core/config.py +228 -0
- boost_skill_cli-1.2.32/boost_cli/core/dense.py +972 -0
- boost_skill_cli-1.2.32/boost_cli/core/ed25519.py +131 -0
- boost_skill_cli-1.2.32/boost_cli/core/embed.py +287 -0
- boost_skill_cli-1.2.32/boost_cli/core/faithfulness.py +116 -0
- boost_skill_cli-1.2.32/boost_cli/core/frontmatter.py +178 -0
- boost_skill_cli-1.2.32/boost_cli/core/gitutil.py +302 -0
- boost_skill_cli-1.2.32/boost_cli/core/hookhost.py +242 -0
- boost_skill_cli-1.2.32/boost_cli/core/imperative.py +70 -0
- boost_skill_cli-1.2.32/boost_cli/core/injectscan.py +240 -0
- boost_skill_cli-1.2.32/boost_cli/core/installscan.py +115 -0
- boost_skill_cli-1.2.32/boost_cli/core/integrity.py +230 -0
- boost_skill_cli-1.2.32/boost_cli/core/journal.py +121 -0
- boost_skill_cli-1.2.32/boost_cli/core/localembed.py +246 -0
- boost_skill_cli-1.2.32/boost_cli/core/lockfile.py +254 -0
- boost_skill_cli-1.2.32/boost_cli/core/logs.py +354 -0
- boost_skill_cli-1.2.32/boost_cli/core/mcp.py +481 -0
- boost_skill_cli-1.2.32/boost_cli/core/mcpdecl.py +206 -0
- boost_skill_cli-1.2.32/boost_cli/core/mcphost.py +168 -0
- boost_skill_cli-1.2.32/boost_cli/core/minisign.py +127 -0
- boost_skill_cli-1.2.32/boost_cli/core/nethttp.py +69 -0
- boost_skill_cli-1.2.32/boost_cli/core/output.py +768 -0
- boost_skill_cli-1.2.32/boost_cli/core/paths.py +179 -0
- boost_skill_cli-1.2.32/boost_cli/core/policy.py +125 -0
- boost_skill_cli-1.2.32/boost_cli/core/projectlock.py +120 -0
- boost_skill_cli-1.2.32/boost_cli/core/provenance.py +163 -0
- boost_skill_cli-1.2.32/boost_cli/core/rag.py +1165 -0
- boost_skill_cli-1.2.32/boost_cli/core/registry.py +262 -0
- boost_skill_cli-1.2.32/boost_cli/core/resolve.py +138 -0
- boost_skill_cli-1.2.32/boost_cli/core/rules.py +174 -0
- boost_skill_cli-1.2.32/boost_cli/core/scopes.py +232 -0
- boost_skill_cli-1.2.32/boost_cli/core/secretscan.py +140 -0
- boost_skill_cli-1.2.32/boost_cli/core/selfupdate.py +270 -0
- boost_skill_cli-1.2.32/boost_cli/core/serve.py +949 -0
- boost_skill_cli-1.2.32/boost_cli/core/stackprobe.py +109 -0
- boost_skill_cli-1.2.32/boost_cli/core/staleness.py +77 -0
- boost_skill_cli-1.2.32/boost_cli/core/store.py +1653 -0
- boost_skill_cli-1.2.32/boost_cli/core/trustaudit.py +226 -0
- boost_skill_cli-1.2.32/boost_cli/core/typosquat.py +87 -0
- boost_skill_cli-1.2.32/boost_cli/core/updatediff.py +143 -0
- boost_skill_cli-1.2.32/boost_cli/core/util.py +316 -0
- boost_skill_cli-1.2.32/boost_cli/core/workflows.py +913 -0
- boost_skill_cli-1.2.32/boost_cli/errors.py +13 -0
- boost_skill_cli-1.2.32/boost_cli/spin.py +82 -0
- boost_skill_cli-1.2.32/boost_langchain/__init__.py +53 -0
- boost_skill_cli-1.2.32/boost_langchain/_compat.py +26 -0
- boost_skill_cli-1.2.32/boost_langchain/graph.py +101 -0
- boost_skill_cli-1.2.32/boost_langchain/loader.py +61 -0
- boost_skill_cli-1.2.32/boost_langchain/retriever.py +102 -0
- boost_skill_cli-1.2.32/boost_skill_cli.egg-info/PKG-INFO +1327 -0
- boost_skill_cli-1.2.32/boost_skill_cli.egg-info/SOURCES.txt +772 -0
- boost_skill_cli-1.2.32/docs/carousel.html +511 -0
- boost_skill_cli-1.2.32/docs/code-review.md +94 -0
- boost_skill_cli-1.2.32/docs/commands.html +1293 -0
- boost_skill_cli-1.2.32/docs/index.html +1223 -0
- boost_skill_cli-1.2.32/docs/openssf-badge.md +372 -0
- boost_skill_cli-1.2.32/docs/rag-architecture.md +309 -0
- boost_skill_cli-1.2.32/docs/roadmap/items/gemini-cli-agent-target.md +18 -0
- boost_skill_cli-1.2.32/docs/roadmap/items/gemini-duplicate-skill-discovery.md +67 -0
- boost_skill_cli-1.2.32/docs/roadmap/items/gemini-hooks-host-aware.md +41 -0
- boost_skill_cli-1.2.32/docs/roadmap/items/gemini-mcp-parity.md +40 -0
- boost_skill_cli-1.2.32/docs/roadmap/items/openssf-gold-ceiling.md +55 -0
- boost_skill_cli-1.2.32/docs/roadmap.html +11889 -0
- boost_skill_cli-1.2.32/docs/security-design.md +230 -0
- boost_skill_cli-1.2.32/docs/verifying-releases.md +146 -0
- boost_skill_cli-1.2.32/evals/__init__.py +8 -0
- boost_skill_cli-1.2.32/evals/faithfulness.py +384 -0
- boost_skill_cli-1.2.32/evals/make_corpus.py +719 -0
- boost_skill_cli-1.2.32/evals/make_golden.py +277 -0
- boost_skill_cli-1.2.32/evals/metrics.py +200 -0
- boost_skill_cli-1.2.32/evals/publish_golden_dataset.py +93 -0
- boost_skill_cli-1.2.32/evals/run_evals.py +348 -0
- boost_skill_cli-1.2.32/noxfile.py +82 -0
- boost_skill_cli-1.2.32/pyproject.toml +339 -0
- boost_skill_cli-1.2.32/scripts/a11y_check.py +306 -0
- boost_skill_cli-1.2.32/scripts/add_spdx_headers.py +99 -0
- boost_skill_cli-1.2.32/scripts/bench_cli.sh +29 -0
- boost_skill_cli-1.2.32/scripts/build_command_reference.py +411 -0
- boost_skill_cli-1.2.32/scripts/build_demo_index.py +76 -0
- boost_skill_cli-1.2.32/scripts/build_registries.py +805 -0
- boost_skill_cli-1.2.32/scripts/build_roadmap.py +447 -0
- boost_skill_cli-1.2.32/scripts/build_scale_corpus.py +252 -0
- boost_skill_cli-1.2.32/scripts/check_anchors.py +110 -0
- boost_skill_cli-1.2.32/scripts/check_dco.py +114 -0
- boost_skill_cli-1.2.32/scripts/check_licenses.py +119 -0
- boost_skill_cli-1.2.32/scripts/check_required_checks.py +496 -0
- boost_skill_cli-1.2.32/scripts/ensure_eval_corpus.sh +47 -0
- boost_skill_cli-1.2.32/scripts/eval_corpus.py +641 -0
- boost_skill_cli-1.2.32/scripts/eval_explain.py +225 -0
- boost_skill_cli-1.2.32/scripts/eval_gate.py +241 -0
- boost_skill_cli-1.2.32/scripts/eval_recommend.py +274 -0
- boost_skill_cli-1.2.32/scripts/eval_retrieval.py +796 -0
- boost_skill_cli-1.2.32/scripts/eval_stats_summary.py +84 -0
- boost_skill_cli-1.2.32/scripts/import_budget.py +157 -0
- boost_skill_cli-1.2.32/scripts/lock_toolchain.py +394 -0
- boost_skill_cli-1.2.32/scripts/measure_registry.py +142 -0
- boost_skill_cli-1.2.32/scripts/mutation_gate.py +62 -0
- boost_skill_cli-1.2.32/scripts/mutation_shards.py +835 -0
- boost_skill_cli-1.2.32/scripts/page_budget.py +209 -0
- boost_skill_cli-1.2.32/scripts/perf_gate.py +151 -0
- boost_skill_cli-1.2.32/scripts/post_deploy_smoke.py +206 -0
- boost_skill_cli-1.2.32/scripts/publish_eval_json.py +129 -0
- boost_skill_cli-1.2.32/scripts/release_guard.py +177 -0
- boost_skill_cli-1.2.32/scripts/release_preflight.py +181 -0
- boost_skill_cli-1.2.32/scripts/serve_docs.py +149 -0
- boost_skill_cli-1.2.32/setup.cfg +25 -0
- boost_skill_cli-1.2.32/tests/bdd/features/environment.py +75 -0
- boost_skill_cli-1.2.32/tests/bdd/features/steps/cli_steps.py +120 -0
- boost_skill_cli-1.2.32/tests/bdd/features/steps/discovery_steps.py +79 -0
- boost_skill_cli-1.2.32/tests/bdd/features/steps/mcp_steps.py +74 -0
- boost_skill_cli-1.2.32/tests/bdd/features/steps/quality_steps.py +14 -0
- boost_skill_cli-1.2.32/tests/conftest.py +250 -0
- boost_skill_cli-1.2.32/tests/functional/test_capabilities_policy.py +121 -0
- boost_skill_cli-1.2.32/tests/functional/test_cli_adapt.py +132 -0
- boost_skill_cli-1.2.32/tests/functional/test_cli_bmad.py +521 -0
- boost_skill_cli-1.2.32/tests/functional/test_cli_catalog.py +192 -0
- boost_skill_cli-1.2.32/tests/functional/test_cli_chat.py +110 -0
- boost_skill_cli-1.2.32/tests/functional/test_cli_configuration.py +1927 -0
- boost_skill_cli-1.2.32/tests/functional/test_cli_discovery.py +1781 -0
- boost_skill_cli-1.2.32/tests/functional/test_cli_hooks.py +60 -0
- boost_skill_cli-1.2.32/tests/functional/test_cli_hooks_gemini.py +105 -0
- boost_skill_cli-1.2.32/tests/functional/test_cli_info.py +742 -0
- boost_skill_cli-1.2.32/tests/functional/test_cli_intelligence.py +620 -0
- boost_skill_cli-1.2.32/tests/functional/test_cli_pane_width.py +139 -0
- boost_skill_cli-1.2.32/tests/functional/test_cli_pkg.py +1718 -0
- boost_skill_cli-1.2.32/tests/functional/test_cli_quality.py +969 -0
- boost_skill_cli-1.2.32/tests/functional/test_cli_taps.py +365 -0
- boost_skill_cli-1.2.32/tests/functional/test_cli_team.py +612 -0
- boost_skill_cli-1.2.32/tests/functional/test_everyday_loop.py +70 -0
- boost_skill_cli-1.2.32/tests/functional/test_integrity_enforce.py +98 -0
- boost_skill_cli-1.2.32/tests/functional/test_kind_conformance.py +225 -0
- boost_skill_cli-1.2.32/tests/functional/test_property_parsers.py +131 -0
- boost_skill_cli-1.2.32/tests/functional/test_run.py +67 -0
- boost_skill_cli-1.2.32/tests/functional/test_tap_signing.py +152 -0
- boost_skill_cli-1.2.32/tests/functional/test_workspace_scope.py +332 -0
- boost_skill_cli-1.2.32/tests/fuzz/fuzz_frontmatter.py +129 -0
- boost_skill_cli-1.2.32/tests/fuzz/fuzz_registry.py +123 -0
- boost_skill_cli-1.2.32/tests/langchain/conftest.py +75 -0
- boost_skill_cli-1.2.32/tests/langchain/test_graph.py +155 -0
- boost_skill_cli-1.2.32/tests/langchain/test_loader.py +76 -0
- boost_skill_cli-1.2.32/tests/langchain/test_retriever.py +181 -0
- boost_skill_cli-1.2.32/tests/make_fixture.py +150 -0
- boost_skill_cli-1.2.32/tests/perf/test_benchmarks.py +61 -0
- boost_skill_cli-1.2.32/tests/smoke.sh +265 -0
- boost_skill_cli-1.2.32/tests/unit/test_a11y_check.py +216 -0
- boost_skill_cli-1.2.32/tests/unit/test_action_pin_lockstep.py +292 -0
- boost_skill_cli-1.2.32/tests/unit/test_adapters.py +399 -0
- boost_skill_cli-1.2.32/tests/unit/test_adapters_multi.py +382 -0
- boost_skill_cli-1.2.32/tests/unit/test_adapters_runner.py +144 -0
- boost_skill_cli-1.2.32/tests/unit/test_agents.py +164 -0
- boost_skill_cli-1.2.32/tests/unit/test_ai.py +441 -0
- boost_skill_cli-1.2.32/tests/unit/test_bmad_core.py +596 -0
- boost_skill_cli-1.2.32/tests/unit/test_boost_first_offer.py +181 -0
- boost_skill_cli-1.2.32/tests/unit/test_bootstrap.py +284 -0
- boost_skill_cli-1.2.32/tests/unit/test_browse.py +1056 -0
- boost_skill_cli-1.2.32/tests/unit/test_builtin.py +409 -0
- boost_skill_cli-1.2.32/tests/unit/test_capabilities.py +92 -0
- boost_skill_cli-1.2.32/tests/unit/test_catalog.py +1133 -0
- boost_skill_cli-1.2.32/tests/unit/test_catalogbundle.py +407 -0
- boost_skill_cli-1.2.32/tests/unit/test_chat.py +386 -0
- boost_skill_cli-1.2.32/tests/unit/test_check_anchors.py +81 -0
- boost_skill_cli-1.2.32/tests/unit/test_check_dco.py +181 -0
- boost_skill_cli-1.2.32/tests/unit/test_check_licenses.py +174 -0
- boost_skill_cli-1.2.32/tests/unit/test_claude_settings.py +125 -0
- boost_skill_cli-1.2.32/tests/unit/test_clean_internal_cache.py +111 -0
- boost_skill_cli-1.2.32/tests/unit/test_cliparse.py +45 -0
- boost_skill_cli-1.2.32/tests/unit/test_codeql_analysis_key.py +97 -0
- boost_skill_cli-1.2.32/tests/unit/test_command_reference_fresh.py +76 -0
- boost_skill_cli-1.2.32/tests/unit/test_community_health_files.py +92 -0
- boost_skill_cli-1.2.32/tests/unit/test_compact.py +177 -0
- boost_skill_cli-1.2.32/tests/unit/test_complete.py +365 -0
- boost_skill_cli-1.2.32/tests/unit/test_complete_rc_block.py +369 -0
- boost_skill_cli-1.2.32/tests/unit/test_config.py +287 -0
- boost_skill_cli-1.2.32/tests/unit/test_content_dedupe.py +146 -0
- boost_skill_cli-1.2.32/tests/unit/test_content_identity.py +439 -0
- boost_skill_cli-1.2.32/tests/unit/test_crash_redaction.py +60 -0
- boost_skill_cli-1.2.32/tests/unit/test_dedup_trust.py +119 -0
- boost_skill_cli-1.2.32/tests/unit/test_demo_index.py +110 -0
- boost_skill_cli-1.2.32/tests/unit/test_dense.py +322 -0
- boost_skill_cli-1.2.32/tests/unit/test_dense_embed_dedupe.py +218 -0
- boost_skill_cli-1.2.32/tests/unit/test_dense_fallback.py +563 -0
- boost_skill_cli-1.2.32/tests/unit/test_dense_fix_hint.py +226 -0
- boost_skill_cli-1.2.32/tests/unit/test_dense_quantized.py +378 -0
- boost_skill_cli-1.2.32/tests/unit/test_dense_ready_order.py +42 -0
- boost_skill_cli-1.2.32/tests/unit/test_dense_shard_real_schema.py +157 -0
- boost_skill_cli-1.2.32/tests/unit/test_dense_shard_unreadable_vectors.py +111 -0
- boost_skill_cli-1.2.32/tests/unit/test_dense_shards.py +353 -0
- boost_skill_cli-1.2.32/tests/unit/test_dense_status.py +353 -0
- boost_skill_cli-1.2.32/tests/unit/test_dense_status_cheap.py +283 -0
- boost_skill_cli-1.2.32/tests/unit/test_dependabot_config.py +166 -0
- boost_skill_cli-1.2.32/tests/unit/test_docs_pages_linked.py +81 -0
- boost_skill_cli-1.2.32/tests/unit/test_docsite_chrome.py +286 -0
- boost_skill_cli-1.2.32/tests/unit/test_ed25519.py +97 -0
- boost_skill_cli-1.2.32/tests/unit/test_embed.py +218 -0
- boost_skill_cli-1.2.32/tests/unit/test_embed_local.py +266 -0
- boost_skill_cli-1.2.32/tests/unit/test_embed_truncated_response.py +70 -0
- boost_skill_cli-1.2.32/tests/unit/test_entry_key.py +105 -0
- boost_skill_cli-1.2.32/tests/unit/test_errors_and_cli_table.py +268 -0
- boost_skill_cli-1.2.32/tests/unit/test_eval_baseline.py +184 -0
- boost_skill_cli-1.2.32/tests/unit/test_eval_corpus.py +700 -0
- boost_skill_cli-1.2.32/tests/unit/test_eval_faithfulness.py +261 -0
- boost_skill_cli-1.2.32/tests/unit/test_eval_gate.py +196 -0
- boost_skill_cli-1.2.32/tests/unit/test_eval_grading.py +337 -0
- boost_skill_cli-1.2.32/tests/unit/test_eval_metrics.py +257 -0
- boost_skill_cli-1.2.32/tests/unit/test_eval_stats_summary.py +82 -0
- boost_skill_cli-1.2.32/tests/unit/test_failure_alerting_covers_unattended.py +178 -0
- boost_skill_cli-1.2.32/tests/unit/test_faithfulness.py +89 -0
- boost_skill_cli-1.2.32/tests/unit/test_frontmatter.py +331 -0
- boost_skill_cli-1.2.32/tests/unit/test_fuzz_targets.py +89 -0
- boost_skill_cli-1.2.32/tests/unit/test_gemini_agent_sanitize.py +1359 -0
- boost_skill_cli-1.2.32/tests/unit/test_gitleaks_config.py +61 -0
- boost_skill_cli-1.2.32/tests/unit/test_gitutil.py +350 -0
- boost_skill_cli-1.2.32/tests/unit/test_gitutil_lfs.py +72 -0
- boost_skill_cli-1.2.32/tests/unit/test_gitutil_sparse.py +295 -0
- boost_skill_cli-1.2.32/tests/unit/test_hook_settings_hosts.py +119 -0
- boost_skill_cli-1.2.32/tests/unit/test_hookhost.py +181 -0
- boost_skill_cli-1.2.32/tests/unit/test_imperative.py +103 -0
- boost_skill_cli-1.2.32/tests/unit/test_import_budget.py +137 -0
- boost_skill_cli-1.2.32/tests/unit/test_injectscan.py +284 -0
- boost_skill_cli-1.2.32/tests/unit/test_install_permission_error.py +58 -0
- boost_skill_cli-1.2.32/tests/unit/test_installscan.py +165 -0
- boost_skill_cli-1.2.32/tests/unit/test_integrity.py +231 -0
- boost_skill_cli-1.2.32/tests/unit/test_journal.py +281 -0
- boost_skill_cli-1.2.32/tests/unit/test_langchain_packaging.py +112 -0
- boost_skill_cli-1.2.32/tests/unit/test_link_ownership.py +110 -0
- boost_skill_cli-1.2.32/tests/unit/test_localembed.py +493 -0
- boost_skill_cli-1.2.32/tests/unit/test_localembed_e2e.py +172 -0
- boost_skill_cli-1.2.32/tests/unit/test_lockfile.py +276 -0
- boost_skill_cli-1.2.32/tests/unit/test_logs.py +615 -0
- boost_skill_cli-1.2.32/tests/unit/test_marketing_counts.py +93 -0
- boost_skill_cli-1.2.32/tests/unit/test_mcp.py +1159 -0
- boost_skill_cli-1.2.32/tests/unit/test_mcp_install_scan.py +108 -0
- boost_skill_cli-1.2.32/tests/unit/test_mcpdecl.py +357 -0
- boost_skill_cli-1.2.32/tests/unit/test_mcphost.py +197 -0
- boost_skill_cli-1.2.32/tests/unit/test_measure_registry.py +135 -0
- boost_skill_cli-1.2.32/tests/unit/test_minisign.py +157 -0
- boost_skill_cli-1.2.32/tests/unit/test_mutation_hardening.py +250 -0
- boost_skill_cli-1.2.32/tests/unit/test_mutation_shards.py +392 -0
- boost_skill_cli-1.2.32/tests/unit/test_mutation_subfile_shards.py +591 -0
- boost_skill_cli-1.2.32/tests/unit/test_mutmut_source_paths.py +144 -0
- boost_skill_cli-1.2.32/tests/unit/test_nethttp.py +122 -0
- boost_skill_cli-1.2.32/tests/unit/test_output.py +1521 -0
- boost_skill_cli-1.2.32/tests/unit/test_page_budget.py +173 -0
- boost_skill_cli-1.2.32/tests/unit/test_paths.py +170 -0
- boost_skill_cli-1.2.32/tests/unit/test_perf_gate.py +66 -0
- boost_skill_cli-1.2.32/tests/unit/test_pkg_confusions.py +47 -0
- boost_skill_cli-1.2.32/tests/unit/test_pkg_injection.py +61 -0
- boost_skill_cli-1.2.32/tests/unit/test_pkg_secrets.py +56 -0
- boost_skill_cli-1.2.32/tests/unit/test_platform_pins.py +387 -0
- boost_skill_cli-1.2.32/tests/unit/test_policy.py +230 -0
- boost_skill_cli-1.2.32/tests/unit/test_post_deploy_smoke.py +220 -0
- boost_skill_cli-1.2.32/tests/unit/test_project_mcp_sidecar.py +189 -0
- boost_skill_cli-1.2.32/tests/unit/test_projectlock.py +138 -0
- boost_skill_cli-1.2.32/tests/unit/test_provenance.py +128 -0
- boost_skill_cli-1.2.32/tests/unit/test_publish_golden_dataset.py +228 -0
- boost_skill_cli-1.2.32/tests/unit/test_rag.py +1535 -0
- boost_skill_cli-1.2.32/tests/unit/test_rag_fastpath.py +281 -0
- boost_skill_cli-1.2.32/tests/unit/test_rag_fusion.py +308 -0
- boost_skill_cli-1.2.32/tests/unit/test_registries_fresh.py +51 -0
- boost_skill_cli-1.2.32/tests/unit/test_registry.py +352 -0
- boost_skill_cli-1.2.32/tests/unit/test_registry_categories.py +389 -0
- boost_skill_cli-1.2.32/tests/unit/test_registry_control_chars.py +235 -0
- boost_skill_cli-1.2.32/tests/unit/test_release_guard.py +229 -0
- boost_skill_cli-1.2.32/tests/unit/test_release_preflight.py +210 -0
- boost_skill_cli-1.2.32/tests/unit/test_required_checks.py +529 -0
- boost_skill_cli-1.2.32/tests/unit/test_rerank_cache.py +130 -0
- boost_skill_cli-1.2.32/tests/unit/test_resolve.py +164 -0
- boost_skill_cli-1.2.32/tests/unit/test_roadmap_fresh.py +407 -0
- boost_skill_cli-1.2.32/tests/unit/test_rules.py +297 -0
- boost_skill_cli-1.2.32/tests/unit/test_scale_corpus.py +268 -0
- boost_skill_cli-1.2.32/tests/unit/test_scopes.py +325 -0
- boost_skill_cli-1.2.32/tests/unit/test_secretscan.py +156 -0
- boost_skill_cli-1.2.32/tests/unit/test_selfupdate.py +531 -0
- boost_skill_cli-1.2.32/tests/unit/test_serve.py +1135 -0
- boost_skill_cli-1.2.32/tests/unit/test_serve_docs.py +199 -0
- boost_skill_cli-1.2.32/tests/unit/test_shards_matrix.py +138 -0
- boost_skill_cli-1.2.32/tests/unit/test_smoke_covers_every_command.py +75 -0
- boost_skill_cli-1.2.32/tests/unit/test_spdx_headers.py +100 -0
- boost_skill_cli-1.2.32/tests/unit/test_spin.py +111 -0
- boost_skill_cli-1.2.32/tests/unit/test_stackprobe.py +117 -0
- boost_skill_cli-1.2.32/tests/unit/test_staleness.py +104 -0
- boost_skill_cli-1.2.32/tests/unit/test_store.py +2679 -0
- boost_skill_cli-1.2.32/tests/unit/test_store_materialize.py +112 -0
- boost_skill_cli-1.2.32/tests/unit/test_sync_blocked_links.py +130 -0
- boost_skill_cli-1.2.32/tests/unit/test_sync_repairs_gutted_skill.py +98 -0
- boost_skill_cli-1.2.32/tests/unit/test_token_parity.py +34 -0
- boost_skill_cli-1.2.32/tests/unit/test_toolchain_lock.py +336 -0
- boost_skill_cli-1.2.32/tests/unit/test_trustaudit.py +371 -0
- boost_skill_cli-1.2.32/tests/unit/test_typosquat.py +136 -0
- boost_skill_cli-1.2.32/tests/unit/test_updatediff.py +173 -0
- boost_skill_cli-1.2.32/tests/unit/test_util.py +663 -0
- boost_skill_cli-1.2.32/tests/unit/test_version.py +52 -0
- boost_skill_cli-1.2.32/tests/unit/test_visual_harness_flags.py +123 -0
- boost_skill_cli-1.2.32/tests/unit/test_workflow_concurrency.py +114 -0
- boost_skill_cli-1.2.32/tests/unit/test_workflow_concurrency_groups.py +146 -0
- boost_skill_cli-1.2.32/tests/unit/test_workflow_push_has_credentials.py +142 -0
- boost_skill_cli-1.2.32/tests/unit/test_workflow_timeouts.py +75 -0
- boost_skill_cli-1.2.32/tests/unit/test_workflows.py +299 -0
- boost_skill_cli-1.2.32/tests/unit/test_zizmor_ignores_still_anchor.py +120 -0
- boost_skill_cli-1.2.30/.vale/styles/config/vocabularies/boost/accept.txt +0 -180
- boost_skill_cli-1.2.30/CLAUDE.md +0 -420
- boost_skill_cli-1.2.30/CONTRIBUTING.md +0 -233
- boost_skill_cli-1.2.30/Makefile +0 -252
- boost_skill_cli-1.2.30/PKG-INFO +0 -1311
- boost_skill_cli-1.2.30/README.md +0 -593
- boost_skill_cli-1.2.30/boost +0 -45
- boost_skill_cli-1.2.30/boost_cli/__init__.py +0 -33
- boost_skill_cli-1.2.30/boost_cli/__main__.py +0 -8
- boost_skill_cli-1.2.30/boost_cli/_version.py +0 -24
- boost_skill_cli-1.2.30/boost_cli/cli.py +0 -336
- boost_skill_cli-1.2.30/boost_cli/cliparse.py +0 -31
- boost_skill_cli-1.2.30/boost_cli/commands/__init__.py +0 -0
- boost_skill_cli-1.2.30/boost_cli/commands/_common.py +0 -78
- boost_skill_cli-1.2.30/boost_cli/commands/bmad.py +0 -579
- boost_skill_cli-1.2.30/boost_cli/commands/configuration.py +0 -1725
- boost_skill_cli-1.2.30/boost_cli/commands/discovery.py +0 -1672
- boost_skill_cli-1.2.30/boost_cli/commands/hooks.py +0 -91
- boost_skill_cli-1.2.30/boost_cli/commands/info.py +0 -1021
- boost_skill_cli-1.2.30/boost_cli/commands/intelligence.py +0 -1217
- boost_skill_cli-1.2.30/boost_cli/commands/pkg.py +0 -1604
- boost_skill_cli-1.2.30/boost_cli/commands/quality.py +0 -1271
- boost_skill_cli-1.2.30/boost_cli/commands/run.py +0 -116
- boost_skill_cli-1.2.30/boost_cli/commands/safety.py +0 -584
- boost_skill_cli-1.2.30/boost_cli/commands/taps.py +0 -383
- boost_skill_cli-1.2.30/boost_cli/commands/team.py +0 -748
- boost_skill_cli-1.2.30/boost_cli/core/__init__.py +0 -0
- boost_skill_cli-1.2.30/boost_cli/core/adapters.py +0 -559
- boost_skill_cli-1.2.30/boost_cli/core/agents.py +0 -79
- boost_skill_cli-1.2.30/boost_cli/core/ai.py +0 -159
- boost_skill_cli-1.2.30/boost_cli/core/bmad.py +0 -692
- boost_skill_cli-1.2.30/boost_cli/core/bootstrap.py +0 -135
- boost_skill_cli-1.2.30/boost_cli/core/browse.py +0 -646
- boost_skill_cli-1.2.30/boost_cli/core/builtin.py +0 -114
- boost_skill_cli-1.2.30/boost_cli/core/capabilities.py +0 -131
- boost_skill_cli-1.2.30/boost_cli/core/catalog.py +0 -660
- boost_skill_cli-1.2.30/boost_cli/core/catalogbundle.py +0 -265
- boost_skill_cli-1.2.30/boost_cli/core/chat.py +0 -393
- boost_skill_cli-1.2.30/boost_cli/core/claude_settings.py +0 -200
- boost_skill_cli-1.2.30/boost_cli/core/complete.py +0 -420
- boost_skill_cli-1.2.30/boost_cli/core/config.py +0 -226
- boost_skill_cli-1.2.30/boost_cli/core/dense.py +0 -970
- boost_skill_cli-1.2.30/boost_cli/core/ed25519.py +0 -129
- boost_skill_cli-1.2.30/boost_cli/core/embed.py +0 -285
- boost_skill_cli-1.2.30/boost_cli/core/faithfulness.py +0 -114
- boost_skill_cli-1.2.30/boost_cli/core/frontmatter.py +0 -176
- boost_skill_cli-1.2.30/boost_cli/core/gitutil.py +0 -300
- boost_skill_cli-1.2.30/boost_cli/core/imperative.py +0 -68
- boost_skill_cli-1.2.30/boost_cli/core/injectscan.py +0 -238
- boost_skill_cli-1.2.30/boost_cli/core/installscan.py +0 -113
- boost_skill_cli-1.2.30/boost_cli/core/integrity.py +0 -228
- boost_skill_cli-1.2.30/boost_cli/core/journal.py +0 -119
- boost_skill_cli-1.2.30/boost_cli/core/localembed.py +0 -244
- boost_skill_cli-1.2.30/boost_cli/core/lockfile.py +0 -252
- boost_skill_cli-1.2.30/boost_cli/core/logs.py +0 -352
- boost_skill_cli-1.2.30/boost_cli/core/mcp.py +0 -479
- boost_skill_cli-1.2.30/boost_cli/core/mcpdecl.py +0 -204
- boost_skill_cli-1.2.30/boost_cli/core/mcphost.py +0 -147
- boost_skill_cli-1.2.30/boost_cli/core/minisign.py +0 -125
- boost_skill_cli-1.2.30/boost_cli/core/nethttp.py +0 -67
- boost_skill_cli-1.2.30/boost_cli/core/output.py +0 -766
- boost_skill_cli-1.2.30/boost_cli/core/paths.py +0 -177
- boost_skill_cli-1.2.30/boost_cli/core/policy.py +0 -123
- boost_skill_cli-1.2.30/boost_cli/core/projectlock.py +0 -118
- boost_skill_cli-1.2.30/boost_cli/core/provenance.py +0 -161
- boost_skill_cli-1.2.30/boost_cli/core/rag.py +0 -1163
- boost_skill_cli-1.2.30/boost_cli/core/registry.py +0 -260
- boost_skill_cli-1.2.30/boost_cli/core/resolve.py +0 -136
- boost_skill_cli-1.2.30/boost_cli/core/rules.py +0 -172
- boost_skill_cli-1.2.30/boost_cli/core/scopes.py +0 -230
- boost_skill_cli-1.2.30/boost_cli/core/secretscan.py +0 -138
- boost_skill_cli-1.2.30/boost_cli/core/selfupdate.py +0 -268
- boost_skill_cli-1.2.30/boost_cli/core/serve.py +0 -947
- boost_skill_cli-1.2.30/boost_cli/core/stackprobe.py +0 -107
- boost_skill_cli-1.2.30/boost_cli/core/staleness.py +0 -75
- boost_skill_cli-1.2.30/boost_cli/core/store.py +0 -1543
- boost_skill_cli-1.2.30/boost_cli/core/trustaudit.py +0 -224
- boost_skill_cli-1.2.30/boost_cli/core/typosquat.py +0 -85
- boost_skill_cli-1.2.30/boost_cli/core/updatediff.py +0 -141
- boost_skill_cli-1.2.30/boost_cli/core/util.py +0 -314
- boost_skill_cli-1.2.30/boost_cli/core/workflows.py +0 -911
- boost_skill_cli-1.2.30/boost_cli/errors.py +0 -11
- boost_skill_cli-1.2.30/boost_cli/spin.py +0 -80
- boost_skill_cli-1.2.30/boost_langchain/__init__.py +0 -51
- boost_skill_cli-1.2.30/boost_langchain/_compat.py +0 -24
- boost_skill_cli-1.2.30/boost_langchain/graph.py +0 -99
- boost_skill_cli-1.2.30/boost_langchain/loader.py +0 -59
- boost_skill_cli-1.2.30/boost_langchain/retriever.py +0 -100
- boost_skill_cli-1.2.30/boost_skill_cli.egg-info/PKG-INFO +0 -1311
- boost_skill_cli-1.2.30/boost_skill_cli.egg-info/SOURCES.txt +0 -761
- boost_skill_cli-1.2.30/docs/carousel.html +0 -509
- boost_skill_cli-1.2.30/docs/commands.html +0 -1290
- boost_skill_cli-1.2.30/docs/index.html +0 -1223
- boost_skill_cli-1.2.30/docs/openssf-badge.md +0 -270
- boost_skill_cli-1.2.30/docs/rag-architecture.md +0 -309
- boost_skill_cli-1.2.30/docs/roadmap/items/gemini-cli-agent-target.md +0 -16
- boost_skill_cli-1.2.30/docs/roadmap.html +0 -11700
- boost_skill_cli-1.2.30/docs/security-design.md +0 -191
- boost_skill_cli-1.2.30/docs/verifying-releases.md +0 -101
- boost_skill_cli-1.2.30/evals/__init__.py +0 -6
- boost_skill_cli-1.2.30/evals/faithfulness.py +0 -382
- boost_skill_cli-1.2.30/evals/make_corpus.py +0 -717
- boost_skill_cli-1.2.30/evals/make_golden.py +0 -275
- boost_skill_cli-1.2.30/evals/metrics.py +0 -198
- boost_skill_cli-1.2.30/evals/publish_golden_dataset.py +0 -91
- boost_skill_cli-1.2.30/evals/run_evals.py +0 -346
- boost_skill_cli-1.2.30/noxfile.py +0 -80
- boost_skill_cli-1.2.30/pyproject.toml +0 -331
- boost_skill_cli-1.2.30/scripts/a11y_check.py +0 -304
- boost_skill_cli-1.2.30/scripts/bench_cli.sh +0 -27
- boost_skill_cli-1.2.30/scripts/build_command_reference.py +0 -409
- boost_skill_cli-1.2.30/scripts/build_demo_index.py +0 -74
- boost_skill_cli-1.2.30/scripts/build_registries.py +0 -803
- boost_skill_cli-1.2.30/scripts/build_roadmap.py +0 -445
- boost_skill_cli-1.2.30/scripts/build_scale_corpus.py +0 -250
- boost_skill_cli-1.2.30/scripts/check_anchors.py +0 -108
- boost_skill_cli-1.2.30/scripts/check_dco.py +0 -112
- boost_skill_cli-1.2.30/scripts/check_licenses.py +0 -117
- boost_skill_cli-1.2.30/scripts/check_required_checks.py +0 -494
- boost_skill_cli-1.2.30/scripts/ensure_eval_corpus.sh +0 -45
- boost_skill_cli-1.2.30/scripts/eval_corpus.py +0 -639
- boost_skill_cli-1.2.30/scripts/eval_explain.py +0 -223
- boost_skill_cli-1.2.30/scripts/eval_gate.py +0 -239
- boost_skill_cli-1.2.30/scripts/eval_recommend.py +0 -272
- boost_skill_cli-1.2.30/scripts/eval_retrieval.py +0 -794
- boost_skill_cli-1.2.30/scripts/eval_stats_summary.py +0 -82
- boost_skill_cli-1.2.30/scripts/import_budget.py +0 -155
- boost_skill_cli-1.2.30/scripts/lock_toolchain.py +0 -392
- boost_skill_cli-1.2.30/scripts/measure_registry.py +0 -140
- boost_skill_cli-1.2.30/scripts/mutation_gate.py +0 -60
- boost_skill_cli-1.2.30/scripts/mutation_shards.py +0 -833
- boost_skill_cli-1.2.30/scripts/page_budget.py +0 -207
- boost_skill_cli-1.2.30/scripts/perf_gate.py +0 -149
- boost_skill_cli-1.2.30/scripts/post_deploy_smoke.py +0 -204
- boost_skill_cli-1.2.30/scripts/publish_eval_json.py +0 -127
- boost_skill_cli-1.2.30/scripts/release_guard.py +0 -175
- boost_skill_cli-1.2.30/scripts/release_preflight.py +0 -179
- boost_skill_cli-1.2.30/scripts/serve_docs.py +0 -147
- boost_skill_cli-1.2.30/setup.cfg +0 -24
- boost_skill_cli-1.2.30/tests/bdd/features/environment.py +0 -73
- boost_skill_cli-1.2.30/tests/bdd/features/steps/cli_steps.py +0 -118
- boost_skill_cli-1.2.30/tests/bdd/features/steps/discovery_steps.py +0 -77
- boost_skill_cli-1.2.30/tests/bdd/features/steps/mcp_steps.py +0 -72
- boost_skill_cli-1.2.30/tests/bdd/features/steps/quality_steps.py +0 -12
- boost_skill_cli-1.2.30/tests/conftest.py +0 -248
- boost_skill_cli-1.2.30/tests/functional/test_capabilities_policy.py +0 -119
- boost_skill_cli-1.2.30/tests/functional/test_cli_adapt.py +0 -130
- boost_skill_cli-1.2.30/tests/functional/test_cli_bmad.py +0 -519
- boost_skill_cli-1.2.30/tests/functional/test_cli_catalog.py +0 -190
- boost_skill_cli-1.2.30/tests/functional/test_cli_chat.py +0 -108
- boost_skill_cli-1.2.30/tests/functional/test_cli_configuration.py +0 -1925
- boost_skill_cli-1.2.30/tests/functional/test_cli_discovery.py +0 -1779
- boost_skill_cli-1.2.30/tests/functional/test_cli_hooks.py +0 -58
- boost_skill_cli-1.2.30/tests/functional/test_cli_info.py +0 -740
- boost_skill_cli-1.2.30/tests/functional/test_cli_intelligence.py +0 -618
- boost_skill_cli-1.2.30/tests/functional/test_cli_pane_width.py +0 -137
- boost_skill_cli-1.2.30/tests/functional/test_cli_pkg.py +0 -1716
- boost_skill_cli-1.2.30/tests/functional/test_cli_quality.py +0 -877
- boost_skill_cli-1.2.30/tests/functional/test_cli_taps.py +0 -363
- boost_skill_cli-1.2.30/tests/functional/test_cli_team.py +0 -610
- boost_skill_cli-1.2.30/tests/functional/test_everyday_loop.py +0 -68
- boost_skill_cli-1.2.30/tests/functional/test_integrity_enforce.py +0 -96
- boost_skill_cli-1.2.30/tests/functional/test_kind_conformance.py +0 -223
- boost_skill_cli-1.2.30/tests/functional/test_property_parsers.py +0 -129
- boost_skill_cli-1.2.30/tests/functional/test_run.py +0 -65
- boost_skill_cli-1.2.30/tests/functional/test_tap_signing.py +0 -150
- boost_skill_cli-1.2.30/tests/functional/test_workspace_scope.py +0 -330
- boost_skill_cli-1.2.30/tests/fuzz/fuzz_frontmatter.py +0 -127
- boost_skill_cli-1.2.30/tests/fuzz/fuzz_registry.py +0 -121
- boost_skill_cli-1.2.30/tests/langchain/conftest.py +0 -73
- boost_skill_cli-1.2.30/tests/langchain/test_graph.py +0 -153
- boost_skill_cli-1.2.30/tests/langchain/test_loader.py +0 -74
- boost_skill_cli-1.2.30/tests/langchain/test_retriever.py +0 -179
- boost_skill_cli-1.2.30/tests/make_fixture.py +0 -148
- boost_skill_cli-1.2.30/tests/perf/test_benchmarks.py +0 -59
- boost_skill_cli-1.2.30/tests/smoke.sh +0 -263
- boost_skill_cli-1.2.30/tests/unit/test_a11y_check.py +0 -214
- boost_skill_cli-1.2.30/tests/unit/test_action_pin_lockstep.py +0 -290
- boost_skill_cli-1.2.30/tests/unit/test_adapters.py +0 -397
- boost_skill_cli-1.2.30/tests/unit/test_adapters_multi.py +0 -380
- boost_skill_cli-1.2.30/tests/unit/test_adapters_runner.py +0 -142
- boost_skill_cli-1.2.30/tests/unit/test_agents.py +0 -162
- boost_skill_cli-1.2.30/tests/unit/test_ai.py +0 -439
- boost_skill_cli-1.2.30/tests/unit/test_bmad_core.py +0 -594
- boost_skill_cli-1.2.30/tests/unit/test_boost_first_offer.py +0 -179
- boost_skill_cli-1.2.30/tests/unit/test_bootstrap.py +0 -282
- boost_skill_cli-1.2.30/tests/unit/test_browse.py +0 -1054
- boost_skill_cli-1.2.30/tests/unit/test_builtin.py +0 -407
- boost_skill_cli-1.2.30/tests/unit/test_capabilities.py +0 -90
- boost_skill_cli-1.2.30/tests/unit/test_catalog.py +0 -1131
- boost_skill_cli-1.2.30/tests/unit/test_catalogbundle.py +0 -405
- boost_skill_cli-1.2.30/tests/unit/test_chat.py +0 -384
- boost_skill_cli-1.2.30/tests/unit/test_check_anchors.py +0 -79
- boost_skill_cli-1.2.30/tests/unit/test_check_dco.py +0 -179
- boost_skill_cli-1.2.30/tests/unit/test_check_licenses.py +0 -172
- boost_skill_cli-1.2.30/tests/unit/test_claude_settings.py +0 -123
- boost_skill_cli-1.2.30/tests/unit/test_clean_internal_cache.py +0 -109
- boost_skill_cli-1.2.30/tests/unit/test_cliparse.py +0 -43
- boost_skill_cli-1.2.30/tests/unit/test_codeql_analysis_key.py +0 -95
- boost_skill_cli-1.2.30/tests/unit/test_command_reference_fresh.py +0 -74
- boost_skill_cli-1.2.30/tests/unit/test_community_health_files.py +0 -90
- boost_skill_cli-1.2.30/tests/unit/test_compact.py +0 -175
- boost_skill_cli-1.2.30/tests/unit/test_complete.py +0 -363
- boost_skill_cli-1.2.30/tests/unit/test_complete_rc_block.py +0 -367
- boost_skill_cli-1.2.30/tests/unit/test_config.py +0 -285
- boost_skill_cli-1.2.30/tests/unit/test_content_dedupe.py +0 -144
- boost_skill_cli-1.2.30/tests/unit/test_content_identity.py +0 -437
- boost_skill_cli-1.2.30/tests/unit/test_crash_redaction.py +0 -58
- boost_skill_cli-1.2.30/tests/unit/test_dedup_trust.py +0 -117
- boost_skill_cli-1.2.30/tests/unit/test_demo_index.py +0 -108
- boost_skill_cli-1.2.30/tests/unit/test_dense.py +0 -320
- boost_skill_cli-1.2.30/tests/unit/test_dense_embed_dedupe.py +0 -216
- boost_skill_cli-1.2.30/tests/unit/test_dense_fallback.py +0 -561
- boost_skill_cli-1.2.30/tests/unit/test_dense_fix_hint.py +0 -224
- boost_skill_cli-1.2.30/tests/unit/test_dense_quantized.py +0 -376
- boost_skill_cli-1.2.30/tests/unit/test_dense_ready_order.py +0 -40
- boost_skill_cli-1.2.30/tests/unit/test_dense_shard_real_schema.py +0 -155
- boost_skill_cli-1.2.30/tests/unit/test_dense_shard_unreadable_vectors.py +0 -109
- boost_skill_cli-1.2.30/tests/unit/test_dense_shards.py +0 -351
- boost_skill_cli-1.2.30/tests/unit/test_dense_status.py +0 -351
- boost_skill_cli-1.2.30/tests/unit/test_dense_status_cheap.py +0 -281
- boost_skill_cli-1.2.30/tests/unit/test_dependabot_config.py +0 -164
- boost_skill_cli-1.2.30/tests/unit/test_docs_pages_linked.py +0 -79
- boost_skill_cli-1.2.30/tests/unit/test_docsite_chrome.py +0 -284
- boost_skill_cli-1.2.30/tests/unit/test_ed25519.py +0 -95
- boost_skill_cli-1.2.30/tests/unit/test_embed.py +0 -216
- boost_skill_cli-1.2.30/tests/unit/test_embed_local.py +0 -264
- boost_skill_cli-1.2.30/tests/unit/test_embed_truncated_response.py +0 -68
- boost_skill_cli-1.2.30/tests/unit/test_entry_key.py +0 -103
- boost_skill_cli-1.2.30/tests/unit/test_errors_and_cli_table.py +0 -266
- boost_skill_cli-1.2.30/tests/unit/test_eval_baseline.py +0 -182
- boost_skill_cli-1.2.30/tests/unit/test_eval_corpus.py +0 -698
- boost_skill_cli-1.2.30/tests/unit/test_eval_faithfulness.py +0 -259
- boost_skill_cli-1.2.30/tests/unit/test_eval_gate.py +0 -194
- boost_skill_cli-1.2.30/tests/unit/test_eval_grading.py +0 -335
- boost_skill_cli-1.2.30/tests/unit/test_eval_metrics.py +0 -255
- boost_skill_cli-1.2.30/tests/unit/test_eval_stats_summary.py +0 -80
- boost_skill_cli-1.2.30/tests/unit/test_failure_alerting_covers_unattended.py +0 -176
- boost_skill_cli-1.2.30/tests/unit/test_faithfulness.py +0 -87
- boost_skill_cli-1.2.30/tests/unit/test_frontmatter.py +0 -329
- boost_skill_cli-1.2.30/tests/unit/test_fuzz_targets.py +0 -87
- boost_skill_cli-1.2.30/tests/unit/test_gemini_agent_sanitize.py +0 -1357
- boost_skill_cli-1.2.30/tests/unit/test_gitleaks_config.py +0 -59
- boost_skill_cli-1.2.30/tests/unit/test_gitutil.py +0 -348
- boost_skill_cli-1.2.30/tests/unit/test_gitutil_lfs.py +0 -70
- boost_skill_cli-1.2.30/tests/unit/test_gitutil_sparse.py +0 -293
- boost_skill_cli-1.2.30/tests/unit/test_imperative.py +0 -101
- boost_skill_cli-1.2.30/tests/unit/test_import_budget.py +0 -135
- boost_skill_cli-1.2.30/tests/unit/test_injectscan.py +0 -282
- boost_skill_cli-1.2.30/tests/unit/test_install_permission_error.py +0 -56
- boost_skill_cli-1.2.30/tests/unit/test_installscan.py +0 -163
- boost_skill_cli-1.2.30/tests/unit/test_integrity.py +0 -229
- boost_skill_cli-1.2.30/tests/unit/test_journal.py +0 -279
- boost_skill_cli-1.2.30/tests/unit/test_langchain_packaging.py +0 -110
- boost_skill_cli-1.2.30/tests/unit/test_link_ownership.py +0 -108
- boost_skill_cli-1.2.30/tests/unit/test_localembed.py +0 -491
- boost_skill_cli-1.2.30/tests/unit/test_localembed_e2e.py +0 -170
- boost_skill_cli-1.2.30/tests/unit/test_lockfile.py +0 -274
- boost_skill_cli-1.2.30/tests/unit/test_logs.py +0 -613
- boost_skill_cli-1.2.30/tests/unit/test_marketing_counts.py +0 -91
- boost_skill_cli-1.2.30/tests/unit/test_mcp.py +0 -1105
- boost_skill_cli-1.2.30/tests/unit/test_mcp_install_scan.py +0 -106
- boost_skill_cli-1.2.30/tests/unit/test_mcpdecl.py +0 -355
- boost_skill_cli-1.2.30/tests/unit/test_mcphost.py +0 -189
- boost_skill_cli-1.2.30/tests/unit/test_measure_registry.py +0 -133
- boost_skill_cli-1.2.30/tests/unit/test_minisign.py +0 -155
- boost_skill_cli-1.2.30/tests/unit/test_mutation_hardening.py +0 -248
- boost_skill_cli-1.2.30/tests/unit/test_mutation_shards.py +0 -390
- boost_skill_cli-1.2.30/tests/unit/test_mutation_subfile_shards.py +0 -589
- boost_skill_cli-1.2.30/tests/unit/test_mutmut_source_paths.py +0 -142
- boost_skill_cli-1.2.30/tests/unit/test_nethttp.py +0 -120
- boost_skill_cli-1.2.30/tests/unit/test_output.py +0 -1519
- boost_skill_cli-1.2.30/tests/unit/test_page_budget.py +0 -171
- boost_skill_cli-1.2.30/tests/unit/test_paths.py +0 -168
- boost_skill_cli-1.2.30/tests/unit/test_perf_gate.py +0 -64
- boost_skill_cli-1.2.30/tests/unit/test_pkg_confusions.py +0 -45
- boost_skill_cli-1.2.30/tests/unit/test_pkg_injection.py +0 -59
- boost_skill_cli-1.2.30/tests/unit/test_pkg_secrets.py +0 -54
- boost_skill_cli-1.2.30/tests/unit/test_platform_pins.py +0 -385
- boost_skill_cli-1.2.30/tests/unit/test_policy.py +0 -228
- boost_skill_cli-1.2.30/tests/unit/test_post_deploy_smoke.py +0 -218
- boost_skill_cli-1.2.30/tests/unit/test_project_mcp_sidecar.py +0 -187
- boost_skill_cli-1.2.30/tests/unit/test_projectlock.py +0 -136
- boost_skill_cli-1.2.30/tests/unit/test_provenance.py +0 -126
- boost_skill_cli-1.2.30/tests/unit/test_publish_golden_dataset.py +0 -226
- boost_skill_cli-1.2.30/tests/unit/test_rag.py +0 -1533
- boost_skill_cli-1.2.30/tests/unit/test_rag_fastpath.py +0 -279
- boost_skill_cli-1.2.30/tests/unit/test_rag_fusion.py +0 -306
- boost_skill_cli-1.2.30/tests/unit/test_registries_fresh.py +0 -49
- boost_skill_cli-1.2.30/tests/unit/test_registry.py +0 -350
- boost_skill_cli-1.2.30/tests/unit/test_registry_categories.py +0 -387
- boost_skill_cli-1.2.30/tests/unit/test_registry_control_chars.py +0 -233
- boost_skill_cli-1.2.30/tests/unit/test_release_guard.py +0 -227
- boost_skill_cli-1.2.30/tests/unit/test_release_preflight.py +0 -208
- boost_skill_cli-1.2.30/tests/unit/test_required_checks.py +0 -527
- boost_skill_cli-1.2.30/tests/unit/test_rerank_cache.py +0 -128
- boost_skill_cli-1.2.30/tests/unit/test_resolve.py +0 -162
- boost_skill_cli-1.2.30/tests/unit/test_roadmap_fresh.py +0 -405
- boost_skill_cli-1.2.30/tests/unit/test_rules.py +0 -295
- boost_skill_cli-1.2.30/tests/unit/test_scale_corpus.py +0 -266
- boost_skill_cli-1.2.30/tests/unit/test_scopes.py +0 -323
- boost_skill_cli-1.2.30/tests/unit/test_secretscan.py +0 -154
- boost_skill_cli-1.2.30/tests/unit/test_selfupdate.py +0 -529
- boost_skill_cli-1.2.30/tests/unit/test_serve.py +0 -1133
- boost_skill_cli-1.2.30/tests/unit/test_serve_docs.py +0 -197
- boost_skill_cli-1.2.30/tests/unit/test_shards_matrix.py +0 -136
- boost_skill_cli-1.2.30/tests/unit/test_smoke_covers_every_command.py +0 -73
- boost_skill_cli-1.2.30/tests/unit/test_spin.py +0 -109
- boost_skill_cli-1.2.30/tests/unit/test_stackprobe.py +0 -115
- boost_skill_cli-1.2.30/tests/unit/test_staleness.py +0 -102
- boost_skill_cli-1.2.30/tests/unit/test_store.py +0 -2487
- boost_skill_cli-1.2.30/tests/unit/test_store_materialize.py +0 -110
- boost_skill_cli-1.2.30/tests/unit/test_sync_blocked_links.py +0 -128
- boost_skill_cli-1.2.30/tests/unit/test_sync_repairs_gutted_skill.py +0 -96
- boost_skill_cli-1.2.30/tests/unit/test_token_parity.py +0 -32
- boost_skill_cli-1.2.30/tests/unit/test_toolchain_lock.py +0 -334
- boost_skill_cli-1.2.30/tests/unit/test_trustaudit.py +0 -369
- boost_skill_cli-1.2.30/tests/unit/test_typosquat.py +0 -134
- boost_skill_cli-1.2.30/tests/unit/test_updatediff.py +0 -171
- boost_skill_cli-1.2.30/tests/unit/test_util.py +0 -661
- boost_skill_cli-1.2.30/tests/unit/test_version.py +0 -50
- boost_skill_cli-1.2.30/tests/unit/test_visual_harness_flags.py +0 -121
- boost_skill_cli-1.2.30/tests/unit/test_workflow_concurrency.py +0 -112
- boost_skill_cli-1.2.30/tests/unit/test_workflow_concurrency_groups.py +0 -144
- boost_skill_cli-1.2.30/tests/unit/test_workflow_push_has_credentials.py +0 -140
- boost_skill_cli-1.2.30/tests/unit/test_workflow_timeouts.py +0 -73
- boost_skill_cli-1.2.30/tests/unit/test_workflows.py +0 -297
- boost_skill_cli-1.2.30/tests/unit/test_zizmor_ignores_still_anchor.py +0 -118
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/.gitattributes +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/.gitignore +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/.lycheeignore +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/.vale/styles/boost/AIWriting.yml +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/.vale.ini +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/DCO +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/GOVERNANCE.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/LICENSE +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/MAINTAINERS.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/MANIFEST.in +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/SECURITY.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/SUPPORT.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/boost_cli/data/rules/boost-first.mdc +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/boost_langchain/py.typed +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/codecov.yml +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/adapters.html +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/chat.html +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/commit-audit.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/demo.gif +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/demo.html +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/demo.tape +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/dependencies.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/eval-latest.json +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/eval.html +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/langchain.html +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/boost-first-rule.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/install-path-disambiguation.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/openssf-silver.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/osps-baseline-levels.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/zip-strict-audit.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/evals/README.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/evals/baseline.json +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/examples/README.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/index.html +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/sonar-project.properties +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/style/README.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/style/boost.css +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/style/boost.js +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/style/demo.html +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/eval/taps-scale.txt +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/visual/package-lock.json +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.2.30 → boost_skill_cli-1.2.32}/tests/visual/visual_check.mjs +0 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
ABM
|
|
2
|
+
agentic
|
|
3
|
+
Algolia
|
|
4
|
+
allowlist
|
|
5
|
+
allowlisted
|
|
6
|
+
argparse
|
|
7
|
+
Arize
|
|
8
|
+
ASan
|
|
9
|
+
Attio
|
|
10
|
+
Autofix
|
|
11
|
+
autofix
|
|
12
|
+
Backfilling
|
|
13
|
+
backfilling
|
|
14
|
+
backport
|
|
15
|
+
backported
|
|
16
|
+
backtick
|
|
17
|
+
backticks
|
|
18
|
+
Bagisto
|
|
19
|
+
basename
|
|
20
|
+
basenames
|
|
21
|
+
bestpractices
|
|
22
|
+
bmad
|
|
23
|
+
bookended
|
|
24
|
+
Camunda
|
|
25
|
+
CI's
|
|
26
|
+
CLIs
|
|
27
|
+
Codecov
|
|
28
|
+
codespell
|
|
29
|
+
ColdIQ
|
|
30
|
+
config
|
|
31
|
+
configs
|
|
32
|
+
CPython
|
|
33
|
+
CRM
|
|
34
|
+
cyclomatic
|
|
35
|
+
Dependabot
|
|
36
|
+
deps
|
|
37
|
+
deserialization
|
|
38
|
+
Dev
|
|
39
|
+
DigitalOcean
|
|
40
|
+
docsite
|
|
41
|
+
docstring
|
|
42
|
+
dotdir
|
|
43
|
+
dotdirs
|
|
44
|
+
dotfiles
|
|
45
|
+
DSPy
|
|
46
|
+
else's
|
|
47
|
+
env
|
|
48
|
+
eval
|
|
49
|
+
evals
|
|
50
|
+
freemium
|
|
51
|
+
frontmatter
|
|
52
|
+
fuzzer
|
|
53
|
+
GEO
|
|
54
|
+
GIF
|
|
55
|
+
gitignored
|
|
56
|
+
gitleaks
|
|
57
|
+
GitOps
|
|
58
|
+
glassmorphic
|
|
59
|
+
Grafana
|
|
60
|
+
GTM
|
|
61
|
+
gzip
|
|
62
|
+
gzipped
|
|
63
|
+
hardcode
|
|
64
|
+
Helm
|
|
65
|
+
hotspots
|
|
66
|
+
Huashu
|
|
67
|
+
HubSpot
|
|
68
|
+
idempotently
|
|
69
|
+
JetBrains
|
|
70
|
+
jonnyeclectic
|
|
71
|
+
jonnyeclectic's
|
|
72
|
+
Kotlin
|
|
73
|
+
langchain
|
|
74
|
+
Langfuse
|
|
75
|
+
LeadMagic
|
|
76
|
+
libFuzzer
|
|
77
|
+
libsodium
|
|
78
|
+
lookups
|
|
79
|
+
lowercasing
|
|
80
|
+
Magento
|
|
81
|
+
maintainer's
|
|
82
|
+
mcp
|
|
83
|
+
mergeable
|
|
84
|
+
minisign
|
|
85
|
+
misconfiguration
|
|
86
|
+
mitigations
|
|
87
|
+
MLflow
|
|
88
|
+
mtime
|
|
89
|
+
mtimes
|
|
90
|
+
mutmut
|
|
91
|
+
mypy
|
|
92
|
+
nonces
|
|
93
|
+
npm
|
|
94
|
+
onboards
|
|
95
|
+
OpenShift
|
|
96
|
+
OpenSSF
|
|
97
|
+
overclaiming
|
|
98
|
+
Pinecone
|
|
99
|
+
pipx
|
|
100
|
+
plaintext
|
|
101
|
+
prehash
|
|
102
|
+
PrestaShop
|
|
103
|
+
Pulumi
|
|
104
|
+
pytest
|
|
105
|
+
Qdrant
|
|
106
|
+
Quarkus
|
|
107
|
+
rebased
|
|
108
|
+
reimplement
|
|
109
|
+
reimplemented
|
|
110
|
+
reimplements
|
|
111
|
+
reindex
|
|
112
|
+
repo
|
|
113
|
+
repo's
|
|
114
|
+
repos
|
|
115
|
+
Rerank
|
|
116
|
+
rerank
|
|
117
|
+
reranking
|
|
118
|
+
rescan
|
|
119
|
+
rescanned
|
|
120
|
+
rescans
|
|
121
|
+
RevOps
|
|
122
|
+
ruleset
|
|
123
|
+
Rulesets
|
|
124
|
+
rulesets
|
|
125
|
+
Salesforce
|
|
126
|
+
Saltzer
|
|
127
|
+
sandboxed
|
|
128
|
+
sandboxing
|
|
129
|
+
scrollbar
|
|
130
|
+
sdist
|
|
131
|
+
SEO
|
|
132
|
+
setuptools
|
|
133
|
+
SHAs
|
|
134
|
+
Shopify
|
|
135
|
+
Sigstore
|
|
136
|
+
Snyk
|
|
137
|
+
SonarCloud
|
|
138
|
+
stderr
|
|
139
|
+
Stdlib
|
|
140
|
+
stdlib
|
|
141
|
+
stdout
|
|
142
|
+
stemmer
|
|
143
|
+
stemming
|
|
144
|
+
subagents
|
|
145
|
+
subcommand
|
|
146
|
+
subprocess
|
|
147
|
+
tappable
|
|
148
|
+
teardown
|
|
149
|
+
tempdir
|
|
150
|
+
textarea
|
|
151
|
+
toggleable
|
|
152
|
+
Tokenization
|
|
153
|
+
tokenization
|
|
154
|
+
toolchain
|
|
155
|
+
toolkits
|
|
156
|
+
traceback
|
|
157
|
+
tracebacks
|
|
158
|
+
triaged
|
|
159
|
+
triages
|
|
160
|
+
typosquat
|
|
161
|
+
typosquatted
|
|
162
|
+
unkilled
|
|
163
|
+
unlinking
|
|
164
|
+
unpatched
|
|
165
|
+
unregister
|
|
166
|
+
unremediated
|
|
167
|
+
unstaged
|
|
168
|
+
untap
|
|
169
|
+
untrusted
|
|
170
|
+
uv
|
|
171
|
+
Vaadin
|
|
172
|
+
Valgrind
|
|
173
|
+
vendored
|
|
174
|
+
vendoring
|
|
175
|
+
venv
|
|
176
|
+
venvs
|
|
177
|
+
VHS
|
|
178
|
+
vLLM
|
|
179
|
+
Weaviate
|
|
180
|
+
webfont
|
|
181
|
+
WooCommerce
|
|
182
|
+
wordmark
|
|
183
|
+
worktree
|
|
184
|
+
worktrees
|
|
185
|
+
Zapier
|
|
186
|
+
zizmor
|
|
187
|
+
zsh
|
|
@@ -0,0 +1,483 @@
|
|
|
1
|
+
# CLAUDE.md — working rules for the boost workspace
|
|
2
|
+
|
|
3
|
+
boost is a "Homebrew for AI coding skills": a Python CLI (`boost_cli`) that finds,
|
|
4
|
+
installs, and governs the skill/rule/workflow files that AI coding agents run on.
|
|
5
|
+
Package name on PyPI is `boost-skill-cli`; the command is `boost`.
|
|
6
|
+
|
|
7
|
+
## Common commands
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
make venv # .venv from the hash-pinned requirements/*.txt
|
|
11
|
+
.venv/bin/pytest tests/unit/test_catalog.py -q # one test file
|
|
12
|
+
.venv/bin/pytest tests/unit/test_catalog.py::test_scan_dir -q # one test
|
|
13
|
+
.venv/bin/pytest tests/functional -q -k install # functional tests matching "install"
|
|
14
|
+
make lint # the whole static tier — read the recipe, it is long
|
|
15
|
+
make test # unit + functional with 90% coverage gate
|
|
16
|
+
make check # the full required gate — see table below
|
|
17
|
+
|
|
18
|
+
# run boost itself against a disposable HOME (never your real ~/.boost):
|
|
19
|
+
export HOME=/tmp/boost-sandbox && mkdir -p $HOME
|
|
20
|
+
python3 tests/make_fixture.py /tmp/fixture-tap
|
|
21
|
+
./boost tap /tmp/fixture-tap
|
|
22
|
+
./boost install brainstorming
|
|
23
|
+
./boost doctor
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
`make venv` installs from `requirements/*.txt`, which are hash-pinned and are the
|
|
27
|
+
same files CI installs (`scripts/lock_toolchain.py --check` gates them against
|
|
28
|
+
drift) — so a dev venv and a runner resolve to identical bytes. Don't `pip
|
|
29
|
+
install` a lint or test tool by hand; add it to the right requirements file and
|
|
30
|
+
regenerate the lock, or `make lint` passes for you and fails in CI.
|
|
31
|
+
|
|
32
|
+
The functional/unit `sandbox` fixture (`tests/conftest.py`) also sets
|
|
33
|
+
`BOOST_NO_AI=1` and `BOOST_ASSUME_YES=1` so tests are deterministic and never
|
|
34
|
+
block on a confirm prompt or a real AI call — override explicitly in a test
|
|
35
|
+
that means to exercise the AI or confirmation path.
|
|
36
|
+
|
|
37
|
+
## The one gate that matters
|
|
38
|
+
|
|
39
|
+
Before calling any change done, run the full gate:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
make check # == lint eval test smoke mutation
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
It is five gates and **all must pass**:
|
|
46
|
+
|
|
47
|
+
| Gate | Command | Threshold |
|
|
48
|
+
|------------|------------------------------------------------|-----------|
|
|
49
|
+
| `lint` | `ruff check boost_cli tests` + `mypy` | zero errors |
|
|
50
|
+
| `eval` | `ensure_eval_corpus.sh` + `eval_retrieval.py --build -k 10` with four floors | BM25 recall@k **≥ 0.78**, hit@1 ≥ 0.40, MRR ≥ 0.52, nDCG@k ≥ 0.58 |
|
|
51
|
+
| `test` | `pytest tests/unit tests/functional --cov` | **90%** coverage (`fail_under = 90`, `branch = true`) |
|
|
52
|
+
| `smoke` | `bash tests/smoke.sh` | 0 failed |
|
|
53
|
+
| `mutation` | `python3 scripts/mutation_gate.py --run --min 80` | **80%** of `boost_cli/core` mutants killed |
|
|
54
|
+
|
|
55
|
+
The `eval` gate is the Tier 1 retrieval-quality check: it runs boost's RAG
|
|
56
|
+
engines over the golden set (`tests/eval/golden.jsonl`) and floors **four**
|
|
57
|
+
metrics on BM25 — recall@k, hit@1, MRR and nDCG@k. Flooring recall alone was a
|
|
58
|
+
hole rather than a simplification: a ranker that finds the right answer every
|
|
59
|
+
time and never ranks it first scores recall@10 1.000 with hit@1 0.000, and
|
|
60
|
+
passed. The golden set grades real catalog items **by name**, so it needs a
|
|
61
|
+
corpus: `scripts/ensure_eval_corpus.sh` first taps the pinned repo list in
|
|
62
|
+
`tests/eval/taps.txt` (the minimal set covering all golden targets — `boost tap
|
|
63
|
+
--defaults` is NOT enough, it omits every rule/workflow repo). The list is
|
|
64
|
+
**twenty** repos: the first six cover every golden target, the rest exist so the
|
|
65
|
+
corpus is a realistic size. That matters more than it sounds — over the six
|
|
66
|
+
alone (743 entries) BM25 scores 0.978 / 0.791 / 0.854 / 0.882, and over the
|
|
67
|
+
twenty (10,152) it scores **0.852 / 0.473 / 0.605 / 0.657** on the same golden
|
|
68
|
+
set, so three of the four old floors fail once the corpus stops being tiny.
|
|
69
|
+
|
|
70
|
+
**The ranked list de-duplicates on the content hash, not the name.** A grade key
|
|
71
|
+
decides both relevance and identity, and keying identity on the name collapsed
|
|
72
|
+
13 different skills called `code-reviewer` into one rank slot — crediting the
|
|
73
|
+
ranker with a compression that existed only in the scoring code, and worth about
|
|
74
|
+
one query of recall@10. That is where the old "recall is 1.000" folklore came
|
|
75
|
+
from; the six-repo corpus measures 0.978 once mirrors collapse and homonyms do
|
|
76
|
+
not. Relevance is still decided by name (or by content class when a golden row
|
|
77
|
+
pins an `exemplar`), so the sets can migrate a row at a time.
|
|
78
|
+
|
|
79
|
+
Each floor sits ~10% under its measured value — loose enough that upstream drift
|
|
80
|
+
can't flake the build, tight enough to catch a collapse. Regression-vs-baseline
|
|
81
|
+
stays relaxed (`--regression-eps 1`), so the absolute floors are the real gate.
|
|
82
|
+
|
|
83
|
+
**Every row of `taps.txt` pins a commit SHA**, and `scripts/eval_corpus.py`
|
|
84
|
+
checks each clone out at it — the corpus is 10,152 entries, of which one
|
|
85
|
+
third-party repo is 6,309 (62%), so an unpinned list left a required check
|
|
86
|
+
hostage to someone else's push. CI and `make eval` must invoke the gate with
|
|
87
|
+
identical floors; `tests/unit/test_eval_corpus.py` fails the build if they
|
|
88
|
+
diverge, which they had (CI floored recall alone at 0.85 against a measured
|
|
89
|
+
0.863 — a buffer of 1.15 queries out of 91 — and applied none of the other
|
|
90
|
+
three). Moving a pin means regenerating the baseline; the file says how.
|
|
91
|
+
|
|
92
|
+
**Baselines are keyed by query set** (`name@content-digest`), so one file holds
|
|
93
|
+
both `golden.jsonl` and `golden-natural.jsonl` without either overwriting the
|
|
94
|
+
other. Before that, running the natural-language set printed eight confident
|
|
95
|
+
"REGRESSION vs baseline" lines that were only the gap between two different
|
|
96
|
+
question sets. Add `--floor NAME=VALUE` (repeatable) to gate any metric; a
|
|
97
|
+
misspelled metric name is a hard error rather than a silently skipped floor.
|
|
98
|
+
Edit `taps.txt` → regenerate `tests/eval/baseline.json`. It runs in CI's
|
|
99
|
+
`lint` job (pure-stdlib BM25, no `ANTHROPIC_API_KEY`; needs network to tap). The
|
|
100
|
+
opt-in evals stay out of `check` and all degrade cleanly:
|
|
101
|
+
|
|
102
|
+
- `make eval-ai` / `eval-rec` — key-gated LLM evals (Tier 2a rerank / 2b recommend).
|
|
103
|
+
- `make eval-stats` — Tier 1b `ranx` paired-t-test between engines (`--stats`).
|
|
104
|
+
- `make eval-explain` — Tier 2c `ragas` faithfulness for `boost explain`; needs
|
|
105
|
+
the `[eval]` extra **and** a judge key (`OPENAI_API_KEY`, or `ANTHROPIC_API_KEY`
|
|
106
|
+
with `langchain-anthropic`) plus boost AI to generate the explanations.
|
|
107
|
+
|
|
108
|
+
The `[eval]` extra (`pip install -e '.[eval]'`) carries `ranx` + `ragas`; nothing
|
|
109
|
+
in it is ever imported by the CLI or the required gate. It pins the langchain 0.3
|
|
110
|
+
stack because ragas 0.2.x breaks against langchain ≥1.0 — an isolated cost of the
|
|
111
|
+
ragas dependency.
|
|
112
|
+
|
|
113
|
+
New/changed core logic needs tests that both cover it *and* kill mutants —
|
|
114
|
+
untested code counts as unkilled mutants, so the mutation gate fails even at 80%
|
|
115
|
+
line coverage. Target `boost_cli/core` behavior with assertions, not just imports.
|
|
116
|
+
|
|
117
|
+
## Non-obvious rules
|
|
118
|
+
|
|
119
|
+
- **`boost_cli/data/registries.json` is GENERATED — never hand-edit it.** The
|
|
120
|
+
source of truth is `scripts/build_registries.py` (the `SKILLS` / `RULES` /
|
|
121
|
+
`WORKFLOWS` tuples). Edit those, then regenerate:
|
|
122
|
+
`python3 scripts/build_registries.py`. Each row is
|
|
123
|
+
`(owner/repo, category, focus, est_items, confidence)`. Add awesome-list repos
|
|
124
|
+
to `LIST_ONLY` so item-count math stays honest. Verify a repo is real
|
|
125
|
+
(`gh api repos/<owner/repo>`) before adding it.
|
|
126
|
+
- **`est_items` is measured, and `len(scan_dir(repo))` is not the measurement.**
|
|
127
|
+
Run `python3 scripts/measure_registry.py <clone>`; it hashes each item's body
|
|
128
|
+
with the frontmatter dropped and agent dotdir tokens normalized, so one skill
|
|
129
|
+
rendered into `.claude/`, `.cursor/`, `.gemini/`, … counts once. Registries
|
|
130
|
+
increasingly ship a copy per agent: a raw walk of `pbakaus/impeccable` finds
|
|
131
|
+
40 items for the 9 it has, and `Owl-Listener/ai-design-skills` shipped as 80
|
|
132
|
+
for years because `claude-plugin/<pack>/commands/x.md` and
|
|
133
|
+
`commands/<pack>/x.md` were counted as two commands.
|
|
134
|
+
`measure_registry.py --self-check ~/.boost/repos` re-derives committed counts
|
|
135
|
+
from local clones, so the convention stays falsifiable.
|
|
136
|
+
- **Category comes from the names of the items a repo ships, not its README or
|
|
137
|
+
its own name.** `bergside/awesome-design-skills` reads like an index and is a
|
|
138
|
+
67-item visual-style corpus (`brutalism`, `claymorphism`, `bento`);
|
|
139
|
+
`Owl-Listener/ai-design-skills` reads like design and is prompt/agent design
|
|
140
|
+
(`chain-of-thought-design`, `guardrail-design`), so it is `ai`, not `ui`.
|
|
141
|
+
`tests/unit/test_registry_categories.py::TestDesignDomain` pins both
|
|
142
|
+
directions.
|
|
143
|
+
- **A tap clone holds Markdown and nothing else.** Taps clone
|
|
144
|
+
`--filter=blob:none --sparse` with a cone covering exactly what
|
|
145
|
+
`catalog.scan_dir` opens (`gitutil.SPARSE_PATTERNS`, pinned against catalog's
|
|
146
|
+
own constants by `tests/unit/test_gitutil_sparse.py` — `gitutil` can't
|
|
147
|
+
import `catalog`, `catalog` imports `gitutil`). 458 taps held 12 GB to index
|
|
148
|
+
1.9 GB of Markdown; `Shopify/agent-skills` was 611 MB for its 30 SKILL.md
|
|
149
|
+
files and is 11 MB under the cone, with a byte-identical catalog. So
|
|
150
|
+
**anything reading a tap's real files must go through
|
|
151
|
+
`store.source_dir_for`**, which calls
|
|
152
|
+
`gitutil.materialize` first — a skill's own `scripts/`/`assets/` sit outside
|
|
153
|
+
the cone, and `_copy_skill` is a `copytree` that would copy the half of the
|
|
154
|
+
directory that exists and report success. Use `sparse-checkout add`, never
|
|
155
|
+
`set`: `set` replaces the pattern list and un-fetches every skill materialized
|
|
156
|
+
before it. `boost import` clones `sparse=False` — it reads the whole repo.
|
|
157
|
+
`boost compact` narrows clones that predate this (offline; measured 177 MB →
|
|
158
|
+
93 MB), and must `update-index --refresh` first, because git silently declines
|
|
159
|
+
to remove a path whose stat data looks dirty and otherwise reports success
|
|
160
|
+
having changed nothing.
|
|
161
|
+
- **`~/.boost/cache/` holds boost's own indexes, not just tap catalogs.**
|
|
162
|
+
`paths.INTERNAL_CACHE_FILES` names them. `boost clean` sweeps `cache/*.json`
|
|
163
|
+
whose stem is not a configured tap, which described `rag_index.json` and
|
|
164
|
+
`discovery.json` perfectly — it deleted the BM25 index on every run, and
|
|
165
|
+
rebuilding it re-parses every tap catalog on the machine (~71k items). A new
|
|
166
|
+
derived artifact goes in that set or `tests/unit/test_clean_internal_cache.py`
|
|
167
|
+
fails.
|
|
168
|
+
- **Sandbox tests via env, and export separately.** boost state lives under
|
|
169
|
+
`HOME`/`BOOST_HOME`; tests point them at a tempdir. In zsh, one-line chains
|
|
170
|
+
like `export A=$(...) B=$A/x` leave `B` broken — use separate `export`
|
|
171
|
+
statements.
|
|
172
|
+
- **Versioning is setuptools-scm from git tags.** There is no `__version__`
|
|
173
|
+
constant and `boost_cli/_version.py` is generated + gitignored. Don't hardcode
|
|
174
|
+
or assert exact versions; version tests are shape-only (`^boost \S+$`). The
|
|
175
|
+
publish workflow filename must stay `publish.yml` (PyPI Trusted Publisher
|
|
176
|
+
matches on it).
|
|
177
|
+
- **Target Python ≥ 3.12** (`requires-python = ">=3.12"`). Structural pattern
|
|
178
|
+
matching and runtime `X | Y` unions are now legal. The `typing.List` → `list`
|
|
179
|
+
sweep is **done**: UP006/UP035/UP045 are selected, not ignored, and report zero
|
|
180
|
+
violations. (This entry described the sweep as deferred long after it landed —
|
|
181
|
+
measure before trusting a "not done yet" note.) `UP031` printf-formatting *is*
|
|
182
|
+
still ignored, and deliberately: it is an unsafe fix over ~1,000 call sites in
|
|
183
|
+
`boost_cli` alone. Write new code in the modern style; don't bulk-rewrite old
|
|
184
|
+
code in an unrelated PR.
|
|
185
|
+
- **A catalog entry has two identities, and they are not interchangeable.**
|
|
186
|
+
*Row* identity is `(tap, skill_md)` (`rag.entry_key`) — which file, in which
|
|
187
|
+
tap. *Content* identity is `entry["content"]`, a truncated sha256 of
|
|
188
|
+
`name + "\n" + description + "\n" + body` stamped by `catalog._content_digest`
|
|
189
|
+
at scan time. Use the row key to address a row and the digest to ask whether
|
|
190
|
+
two rows are the same thing. The digest must stay byte-identical to what
|
|
191
|
+
`rag.read_body` assembles — `tests/unit/test_content_identity.py` pins the
|
|
192
|
+
parity, because a digest that drifts keeps *looking* right while clustering
|
|
193
|
+
nothing. Name-based keys are wrong at both layers: over 60,047 real entries,
|
|
194
|
+
hashing the body alone merges 259 clusters spanning different names, and
|
|
195
|
+
name+description over-collapses 3,383 clusters of genuinely different prose.
|
|
196
|
+
Consumers must degrade cleanly when `content` is absent (a cache written
|
|
197
|
+
before `CACHE_FORMAT`, or a synthesised entry) — and must never treat two
|
|
198
|
+
absences as a match.
|
|
199
|
+
- **The tap cache is versioned; bump `catalog.CACHE_FORMAT` to backfill.** It is
|
|
200
|
+
how a new entry field reaches 460 caches on a real machine without a re-tap:
|
|
201
|
+
`load_tap` rescans a stale cache *when the clone is still there*, and serves
|
|
202
|
+
the stale entries as-is when it is not. Never make a stale cache an error —
|
|
203
|
+
that trades a missing field for a missing catalogue.
|
|
204
|
+
- **Three item kinds, one scanner.** `core/catalog.scan_dir` indexes `skill`
|
|
205
|
+
(SKILL.md), `rule` (.mdc/.cursorrules/.windsurfrules/.clinerules), and
|
|
206
|
+
`workflow` (commands/agents/workflows Markdown). **All three install**, and
|
|
207
|
+
each honors `scope`: `store.install` dispatches to `_install_rule` /
|
|
208
|
+
`_install_workflow` and only raises for a kind outside those three. They land
|
|
209
|
+
in different places, which is the part to get right — a skill is copied into
|
|
210
|
+
the canonical store and symlinked out, a rule is materialised into each
|
|
211
|
+
agent's context file (`rules.CONTEXT_FILES`, e.g. `~/.claude/CLAUDE.md`), and
|
|
212
|
+
a workflow is rendered per agent (TOML for Gemini, see
|
|
213
|
+
`workflows.TOML_COMMAND_AGENTS`). Installing a rule therefore edits a file the
|
|
214
|
+
user reads every session — treat it as more invasive than a skill, not less.
|
|
215
|
+
- **A long line is either chrome or data, and only chrome may be wrapped.**
|
|
216
|
+
`out.wrap()` folds prose to the pane, and the emitters take it opt-in —
|
|
217
|
+
`warn`/`info`/`dim`/`kv` accept `wrap=True` and each pays for its own prefix,
|
|
218
|
+
so continuations align under the message rather than folding to column zero.
|
|
219
|
+
It is opt-in because always-on wrapping would fold the lines that must stay
|
|
220
|
+
long: `pulse`'s `source=` paths and `fingerprint`'s 64-character hash are the
|
|
221
|
+
information the line exists to carry, and a hash split across two lines
|
|
222
|
+
cannot be compared by eye. **A backtick span is one atomic token**, spaces
|
|
223
|
+
and all — `doctor` and `search` both interpolate `dense.fix_hint()`, whose
|
|
224
|
+
answers end in `pip install 'boost-skill-cli[rag]'`, and a wrap that splits
|
|
225
|
+
that hands the user a command which does not run. A token wider than the pane
|
|
226
|
+
overflows whole rather than breaking. Wrap *before* adding color: `out.role`
|
|
227
|
+
brackets its argument with a start code and a reset, so coloring first and
|
|
228
|
+
splitting after leaves line one unterminated and line two plain. And
|
|
229
|
+
budget the emitter's own indent — wrapping to the full `term_width()` and
|
|
230
|
+
then letting `out.info` add two spaces is what put `boost search`'s hint one
|
|
231
|
+
column past the pane it had just been fitted to.
|
|
232
|
+
|
|
233
|
+
- **A new source file needs the licence header, and a new prose file needs
|
|
234
|
+
adding to the vale list.** Every `.py`/`.sh` under `boost_cli`,
|
|
235
|
+
`boost_langchain`, `evals`, `scripts`, `tests` plus `./boost` and
|
|
236
|
+
`noxfile.py` opens with `# Copyright the boost contributors.` and
|
|
237
|
+
`# SPDX-License-Identifier: GPL-3.0-only`. Run
|
|
238
|
+
`python3 scripts/add_spdx_headers.py` (idempotent) — the file list and the
|
|
239
|
+
expression live there, so changing `-only` to `-or-later` is one edit rather
|
|
240
|
+
than 314. Separately, `prose-lint.yml` names the Markdown files vale checks
|
|
241
|
+
**explicitly**: a new doc that is not added to that list is never linted, and
|
|
242
|
+
`make lint` will not tell you.
|
|
243
|
+
|
|
244
|
+
- **Sub-actions of one action repo move in lockstep.** `github/codeql-action/{init,
|
|
245
|
+
analyze,upload-sarif}` and `actions/cache{,/save,/restore}` are each *one repo at
|
|
246
|
+
one commit*, but Dependabot tracks one `uses:` path as one dependency and raises a
|
|
247
|
+
PR per sub-action — none of which can be merged on its own (`init` stamps its
|
|
248
|
+
version into the config and `analyze` rejects another release's). `.github/
|
|
249
|
+
dependabot.yml` groups them so a release arrives as one PR;
|
|
250
|
+
`tests/unit/test_action_pin_lockstep.py` fails the build if a split lands anyway,
|
|
251
|
+
and is parametrised over the families the workflows use, so a new multi-path
|
|
252
|
+
action must be grouped before it passes. Bump all of a family's pins together, to
|
|
253
|
+
the **peeled** commit SHA (`git ls-remote … 'refs/tags/vX.Y.Z^{}'`) or zizmor's
|
|
254
|
+
`ref-version-mismatch` fails the PR.
|
|
255
|
+
|
|
256
|
+
## Parallel work & concurrent loops
|
|
257
|
+
|
|
258
|
+
More than one agent (or `/loop` session) may be working this repo at once. To
|
|
259
|
+
keep them from clobbering each other:
|
|
260
|
+
|
|
261
|
+
- **Never edit a checkout that has someone else's branch checked out.** The user
|
|
262
|
+
works live in `~/boost`; long-running loops use a separate `git worktree`
|
|
263
|
+
(e.g. `~/boost-loop`, which needs its **own** `.venv` because mutmut wants an
|
|
264
|
+
editable `pip install -e .` pointed at that tree). Run `git worktree list` and
|
|
265
|
+
`git status` before touching a tree — staged or unstaged changes mean another
|
|
266
|
+
agent is mid-edit there, so pick a different worktree.
|
|
267
|
+
- **Branch off `origin/main`, one topic per branch.** `git fetch origin main`
|
|
268
|
+
then `git checkout -B loop/<topic> origin/main`. Keep changes additive and
|
|
269
|
+
file-scoped so parallel branches merge without conflicts.
|
|
270
|
+
- **Coordinate through PRs, not the working tree.** `gh pr merge` is server-side
|
|
271
|
+
and won't touch anyone's local checkout. Before committing a file, inspect
|
|
272
|
+
`git status` / `git diff` — if another session has it staged or dirty, leave
|
|
273
|
+
it to that owner rather than committing over their in-flight work.
|
|
274
|
+
- **Every merge to `main` cuts a PyPI release.** Land one coherent change per PR,
|
|
275
|
+
never merge onto a red release, and after merging confirm the publish workflow
|
|
276
|
+
goes green — not just the PR checks.
|
|
277
|
+
|
|
278
|
+
### The roadmap is data-driven — add items, never hand-edit the HTML
|
|
279
|
+
|
|
280
|
+
`docs/roadmap.html` is **generated** from one file per item under
|
|
281
|
+
`docs/roadmap/items/*.md` by `scripts/build_roadmap.py` (this is what stopped the
|
|
282
|
+
roadmap being the repo's #1 merge-conflict source). To add or change a card:
|
|
283
|
+
|
|
284
|
+
1. Create/edit `docs/roadmap/items/<id>.md` — a Markdown-with-frontmatter file
|
|
285
|
+
(`id, board: code, section, status, category, complexity, impact, wow, note,
|
|
286
|
+
order, owner, pr, title` + the card body after the `---`).
|
|
287
|
+
2. Run `python3 scripts/build_roadmap.py` (or `make generate`) and commit both
|
|
288
|
+
the item file and the regenerated HTML. Counters ("Loop finds" etc.) are
|
|
289
|
+
**computed** — never hand-type them.
|
|
290
|
+
|
|
291
|
+
Never hand-edit the `<article>` cards or snapshot counters in `docs/roadmap.html`:
|
|
292
|
+
CI's `build_roadmap.py --check` and `tests/unit/test_roadmap_fresh.py` fail on
|
|
293
|
+
drift. Two loops adding two items now touch two *different files* → clean merge.
|
|
294
|
+
|
|
295
|
+
**Claiming an item (so two loops never pick the same one):** set `status:` and
|
|
296
|
+
`owner: loop/<topic>` in that item's file on your branch and open the PR. Two
|
|
297
|
+
loops claiming *different* items edit different files (no conflict); two loops
|
|
298
|
+
claiming the *same* item edit the same small file, so the second merge conflicts —
|
|
299
|
+
the intended "already claimed" signal, first-to-merge wins.
|
|
300
|
+
|
|
301
|
+
Both boards are data-driven: `docs/roadmap.html` from `board: code` items and
|
|
302
|
+
`docs/design-roadmap.html` from `board: design` items (track/impact/wow, rendered
|
|
303
|
+
into the per-track sections; the filter JS and counters are computed). Same rule
|
|
304
|
+
for both — edit items, run `build_roadmap.py`, never touch the HTML by hand.
|
|
305
|
+
|
|
306
|
+
## Architecture
|
|
307
|
+
|
|
308
|
+
**CLI dispatch.** `boost_cli/cli.py` holds `COMMANDS`, the single
|
|
309
|
+
source-of-truth list of `(name, group, module, summary)` for all 80 commands.
|
|
310
|
+
Each command is implemented as `def cmd_<name_with_underscores>(argv) -> int`
|
|
311
|
+
inside `boost_cli/commands/<module>.py`, and `_dispatch` imports that module
|
|
312
|
+
lazily on invocation — so `boost --help` stays instant and command modules are
|
|
313
|
+
decoupled from each other. To add a command: add a row to `COMMANDS`, add the
|
|
314
|
+
`cmd_*` function to the named module, and it's live. `docs/commands.html` is
|
|
315
|
+
**generated** from `COMMANDS` by `scripts/build_command_reference.py`, so a new
|
|
316
|
+
row means regenerating it (`make generate`) or the `--check` gate fails.
|
|
317
|
+
|
|
318
|
+
**commands/ vs core/.** `boost_cli/commands/` is thin CLI glue — argument
|
|
319
|
+
parsing, output formatting, calling into `core/`. `boost_cli/core/` is the
|
|
320
|
+
actual engine (catalog scanning, install/link logic, the lock file, registries,
|
|
321
|
+
search) and is what the mutation gate targets — put behavior there, not in
|
|
322
|
+
the command layer, so it's covered by both the unit suite and mutation
|
|
323
|
+
testing.
|
|
324
|
+
|
|
325
|
+
**Storage layout**, all resolved at call time from `$HOME` (or `$BOOST_HOME`)
|
|
326
|
+
in `boost_cli/core/paths.py`, which is what makes `HOME=<tempdir>` sandboxing
|
|
327
|
+
work in tests and the dev loop:
|
|
328
|
+
|
|
329
|
+
```text
|
|
330
|
+
~/.boost/repos/ blobless, sparse git clones of tapped registries
|
|
331
|
+
~/.boost/cache/ JSON catalogs built from SKILL.md/rule/workflow frontmatter
|
|
332
|
+
~/.boost/logs/ rotating diagnostic log + crash reports
|
|
333
|
+
~/.boost/state/ pins, tags, policy, profiles, pulse feed, snapshots
|
|
334
|
+
~/.boost/config.json
|
|
335
|
+
~/.agents/skills/ canonical store — single source of truth for installed skills
|
|
336
|
+
~/.agents/skills/.skill-lock.json v3 lock file
|
|
337
|
+
~/.claude/skills/ ~/.windsurf/skills/ ~/.cursor/skills/ symlinked out from the canonical store
|
|
338
|
+
~/.gemini/ rules (GEMINI.md) + workflows only — see below
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
**Four agent targets, but only three get symlinks.** Gemini CLI implements the
|
|
342
|
+
Agent Skills standard and discovers `~/.agents/skills` — the canonical store —
|
|
343
|
+
*directly*, so it is configured with `links_skills: false`. Linking into
|
|
344
|
+
`~/.gemini/skills` too would put one skill in two of its discovery tiers, where
|
|
345
|
+
the `.agents` alias out-ranks whatever we linked, costing the user a "Skill
|
|
346
|
+
conflict detected" line per skill per session and buying nothing. Consequences
|
|
347
|
+
for code you write:
|
|
348
|
+
|
|
349
|
+
- Iterate `agents.linking_agents()` for anything symlink-shaped (link, unlink,
|
|
350
|
+
stale-link sweeps, coverage counts). `agents.enabled_agents()` is still right
|
|
351
|
+
for rules and workflows, which materialize into `~/.gemini/` like any other
|
|
352
|
+
agent's dotdir. `agents.native_store_agents()` is the complement, for reporting.
|
|
353
|
+
- **Boost not linking there does not mean nothing else does**, and the warning
|
|
354
|
+
costs the user the same either way. `store.duplicate_discovery()` walks
|
|
355
|
+
`native_store_agents()` for entries that resolve back into the canonical
|
|
356
|
+
store — one skill in two of that agent's discovery tiers, whoever wrote it.
|
|
357
|
+
On a real machine 24 of the 25 entries in `~/.gemini/skills` led to
|
|
358
|
+
`~/.claude/skills` directories boost does not manage, and one resolved into
|
|
359
|
+
the store, so the test is **topology, not ownership**: a sweep of "boost's
|
|
360
|
+
stale links" would have deleted two dozen files belonging to another tool.
|
|
361
|
+
`boost doctor` counts each hit as an issue; `boost heal` names them and
|
|
362
|
+
removes nothing; `boost heal --prune-duplicates` removes them, re-checking at
|
|
363
|
+
the point of deletion that the entry is still a symlink still resolving into
|
|
364
|
+
the store. A real directory is never touched.
|
|
365
|
+
- **`points_into_store` and `resolves_into_store` answer different questions.**
|
|
366
|
+
The first reads one `readlink()` because it judges *broken* links, where
|
|
367
|
+
there is nothing to resolve. The second follows the whole chain, because the
|
|
368
|
+
live shape is `~/.gemini/skills/x -> ../../.claude/skills/x -> the store` and
|
|
369
|
+
one hop lands in another agent's dir. It resolves **both sides**: on macOS a
|
|
370
|
+
`$HOME` under `/var/folders` resolves to `/private/var/...`, so resolving
|
|
371
|
+
only the target compares a real path against a nominal one and never matches.
|
|
372
|
+
- Per-agent *formats* differ and are pure functions in `core/`: `rules.CONTEXT_FILES`
|
|
373
|
+
maps an agent with no rules dir to its context file (`claude-code` → CLAUDE.md /
|
|
374
|
+
CLAUDE.local.md, `gemini` → GEMINI.md for both scopes), and
|
|
375
|
+
`workflows.TOML_COMMAND_AGENTS` marks agents whose slash commands are TOML.
|
|
376
|
+
Gemini's `commands/` slot is `.toml` (`workflows.render_gemini_command`); its
|
|
377
|
+
`agents/` slot stays verbatim Markdown. Getting that backwards produces a file
|
|
378
|
+
the agent silently never loads.
|
|
379
|
+
- `core/mcphost.py` holds the per-host `mcp add`/`remove` grammar. Claude and
|
|
380
|
+
Gemini disagree on name position, the `--` separator, and whether unregister
|
|
381
|
+
needs an explicit scope — all three verified against the real CLIs and pinned
|
|
382
|
+
by `tests/unit/test_mcphost.py`. Don't "simplify" them into one shape.
|
|
383
|
+
- **`core/hookhost.py` is the same idea for hooks, and two hosts have them.**
|
|
384
|
+
`boost hooks` writes Claude Code's `~/.claude/settings.json` (the default,
|
|
385
|
+
unchanged) or, behind `--host gemini`, the `~/.gemini/settings.json` that
|
|
386
|
+
Gemini CLI reads;
|
|
387
|
+
`core/claude_settings.py` takes `host=` throughout and asks the table for the
|
|
388
|
+
differences. The `hooks` key and the `{matcher, hooks: [{type, command,
|
|
389
|
+
timeout}]}` block shape are *identical* between them, which is exactly what
|
|
390
|
+
makes the three real differences easy to ship wrong:
|
|
391
|
+
- **`timeout` units.** Claude's is **seconds**; Gemini's is **milliseconds**
|
|
392
|
+
(`DEFAULT_HOOK_TIMEOUT = 6e4`, fed straight to `setTimeout`). Callers pass
|
|
393
|
+
seconds and `hookhost.hook_entry` converts, so boost's `--timeout 10` is ten
|
|
394
|
+
seconds on both. Gemini's own `hooks migrate --from-claude` copies the number
|
|
395
|
+
verbatim, which turns a 10-second Claude hook into a 10-**millisecond**
|
|
396
|
+
Gemini one; don't copy that.
|
|
397
|
+
- **Event names.** Only `SessionStart`, `SessionEnd` and `Notification` are
|
|
398
|
+
spelled alike. `CLAUDE_TO_GEMINI` maps all ten Claude events explicitly and
|
|
399
|
+
`tests/unit/test_hookhost.py` fails if one is missing. `SubagentStop` and
|
|
400
|
+
`SubagentStart` map to **`None`** — Gemini has no sub-agents, so boost
|
|
401
|
+
refuses the hook and says why. (The upstream `EVENT_MAPPING` means to fold
|
|
402
|
+
them into `AfterAgent` but keys `SubAgentStop`, a spelling Claude never
|
|
403
|
+
emits, so `migrate` writes an event Gemini can never fire.)
|
|
404
|
+
- **The `name` field.** Gemini's hook config takes one — it is what
|
|
405
|
+
`/hooks panel` shows and `/hooks enable <name>` targets — and Claude's does
|
|
406
|
+
not. The `# boost:<name>` command marker stays the ownership mechanism for
|
|
407
|
+
both; `name` is added on top for Gemini, never instead.
|
|
408
|
+
A `matcher` is **not** translated: `boost hooks add` is not porting a config,
|
|
409
|
+
so it stays host-native — for a Gemini tool event it is a regular expression
|
|
410
|
+
over *Gemini* tool names like `run_shell_command`, and for a lifecycle event
|
|
411
|
+
it is an exact string. All of this was established against Gemini CLI
|
|
412
|
+
0.57.0's own bundle — the `docs/hooks/` it ships, the `HookEventName` list and
|
|
413
|
+
`EVENT_MAPPING` in the bundled JS, and an observed `migrate` run — and those
|
|
414
|
+
sources are named at the top of `hookhost.py` so the next person can re-check
|
|
415
|
+
them against a newer release.
|
|
416
|
+
|
|
417
|
+
`core/catalog.scan_dir` walks a tap's clone and classifies each file into one
|
|
418
|
+
of the three item kinds (see Non-obvious rules above); `core/store.py` owns
|
|
419
|
+
install, uninstall and sync — copying into the canonical store, symlinking into
|
|
420
|
+
each agent's skills dir, and updating the lock file.
|
|
421
|
+
|
|
422
|
+
**Search has two engines**, both in `core/`: `rag.py` is the always-on,
|
|
423
|
+
zero-dependency BM25 engine (full-content index, auto-builds on first
|
|
424
|
+
search — this is what the required `eval` gate floors at recall@k ≥ 0.78).
|
|
425
|
+
`dense.py` is optional dense/vector retrieval behind the `[rag]` extra —
|
|
426
|
+
**no API key required**: `embed.py` tries Voyage, then OpenAI, then a local
|
|
427
|
+
`BAAI/bge-small-en-v1.5` that ships with the extra, so a key is a quality
|
|
428
|
+
upgrade rather than the entry fee. When both engines are built, `retrieve_any`
|
|
429
|
+
fuses them with reciprocal rank fusion (`rag.rrf_fuse`, `RRF_K = 60`) and
|
|
430
|
+
reports `hybrid RRF`; it degrades to whichever single engine is ready, and to
|
|
431
|
+
BM25 alone otherwise. `dense.status()` names which of the three links (extra,
|
|
432
|
+
backend, built store) is missing, and `dense.fix_hint()` maps that to the one
|
|
433
|
+
next action — both `boost doctor` and `boost search` read that same table, so
|
|
434
|
+
they can't give contradictory advice.
|
|
435
|
+
|
|
436
|
+
**The dense store ranks twice, and `vec0` is why.** `sqlite-vec` has no ANN
|
|
437
|
+
index: a float32 `MATCH` scores *every* vector in the store, which on a real
|
|
438
|
+
750,416-chunk / 1024-d install is 3.08 GB and **28.2 s per query** — it was ~85%
|
|
439
|
+
of a 33.9 s `boost search`. So a query runs a coarse pass over
|
|
440
|
+
`vec_chunks_bin` (binary-quantized, one bit per dimension — 114 MB, Hamming) and
|
|
441
|
+
re-ranks the top `RESCORE_POOL` (2048) on their exact float32 vectors from
|
|
442
|
+
`vec_raw`. Measured: **28.2 s → 1.05 s at recall@60 = 1.000** — the same rows in
|
|
443
|
+
the same order. Both stages are required: the binary pass alone recovers 0.667
|
|
444
|
+
of the true top 60, so deleting the rescore as an "optimization" is a quality
|
|
445
|
+
regression, and `tests/unit/test_dense_quantized.py` fails if it goes.
|
|
446
|
+
`vec_raw` is an ordinary rowid-keyed table on purpose — `id IN (...)` against a
|
|
447
|
+
vec0 table plans as a full scan (256 point lookups measured 3.2 s), so the
|
|
448
|
+
rescore would cost more than the thing it replaced.
|
|
449
|
+
|
|
450
|
+
Consequences for code you write here:
|
|
451
|
+
|
|
452
|
+
- **`dim` must be a multiple of 8** for `bit[N]`, so `_quantizable()` gates the
|
|
453
|
+
layout and a non-conforming width keeps the old float32 `vec_chunks`. The
|
|
454
|
+
toy 3-d fixtures elsewhere in the suite are what keep that fallback covered;
|
|
455
|
+
`tests/unit/test_dense_quantized.py` uses 8-d.
|
|
456
|
+
- **`dense.quantize()` migrates in place and re-embeds nothing** — it re-encodes
|
|
457
|
+
vectors already on disk. It counts rows into `vec_raw` and refuses to drop
|
|
458
|
+
`vec_chunks` unless the copy is complete, because re-embedding 750k chunks is
|
|
459
|
+
a bill, not an inconvenience. `boost reindex --dense` runs it; `boost doctor`
|
|
460
|
+
names a ready-but-unquantized store. **It costs disk**: a plain table pays
|
|
461
|
+
overflow-page overhead on 4 KB blobs that vec0's packed storage does not, so
|
|
462
|
+
the measured trade is **3.40 GB → 3.87 GB (+14%), in 1360 s**, peaking at
|
|
463
|
+
~2× while both copies coexist. Don't describe it as size-neutral — an earlier
|
|
464
|
+
draft of this section did, from prediction rather than measurement.
|
|
465
|
+
- **Nothing on the search path may count `chunks`.** `SELECT COUNT(*)` scans the
|
|
466
|
+
`chunks_tap` covering index — 8,419 pages / 34.5 MB, measured 1.94 s — and
|
|
467
|
+
both `ready()` and `status()` did it on every search, the latter only to word
|
|
468
|
+
one muted hint. The total now comes from `meta["chunks"]`, emptiness from a
|
|
469
|
+
`LIMIT 1` probe, and the scan only when `status(count=True)` asks. A store
|
|
470
|
+
that never recorded a total reports `chunks: None`, **not 0**: `fix_hint`
|
|
471
|
+
reads a zero as an unfinished install and would send that user to the one
|
|
472
|
+
remedy that re-embeds everything.
|
|
473
|
+
|
|
474
|
+
`core/ai.py` wraps the opt-in LLM-assisted paths (`search --smart`, `explain`, `distill`, `infer`,
|
|
475
|
+
`absorb`, `evolve`, `simulate`, …), shelling out to the `claude` CLI or
|
|
476
|
+
`ANTHROPIC_API_KEY` when available and degrading to heuristics when not.
|
|
477
|
+
|
|
478
|
+
## Layout
|
|
479
|
+
|
|
480
|
+
- `boost_cli/data/` — shipped catalog data (generated) · `scripts/` — build/gate tooling
|
|
481
|
+
- `tests/unit`, `tests/functional`, `tests/smoke.sh` — the three test tiers
|
|
482
|
+
- `docs/` — `index.html` (visual guide), `commands.html` (every flag, generated), `DEBUGGING.md`; `roadmap.html` is generated from `docs/roadmap/items/*.md` (see above)
|
|
483
|
+
BE BRIEF
|