boost-skill-cli 1.0.100__tar.gz → 1.0.102__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/PKG-INFO +1 -1
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/commands/configuration.py +9 -2
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/core/catalog.py +40 -6
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_skill_cli.egg-info/PKG-INFO +1 -1
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +3 -3
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +3 -3
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap.html +2 -2
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/functional/test_cli_configuration.py +7 -3
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_catalog.py +44 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/.gitattributes +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/.gitignore +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/CLAUDE.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/LICENSE +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/MANIFEST.in +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/Makefile +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/README.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/SECURITY.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_skill_cli.egg-info/SOURCES.txt +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/demo.gif +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/demo.tape +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/index.html +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/index.html +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/pyproject.toml +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/setup.cfg +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/style/README.md +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/style/boost.css +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/style/boost.js +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/style/demo.html +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/conftest.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/unit/test_version.py +0 -0
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '1.0.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 0,
|
|
21
|
+
__version__ = version = '1.0.102'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 102)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -928,8 +928,15 @@ def cmd_mcp(argv) -> int:
|
|
|
928
928
|
|
|
929
929
|
shim = paths.launcher()
|
|
930
930
|
if args.action == "register":
|
|
931
|
-
|
|
932
|
-
|
|
931
|
+
# Fork-safe launch env: a host that fork()s into `boost mcp --stdio`
|
|
932
|
+
# on macOS can SIGABRT on the child side *pre-exec* if Obj-C is touched
|
|
933
|
+
# post-fork (CFPreferences / _scproxy proxy lookup). Disabling the
|
|
934
|
+
# fork-safety trap and short-circuiting proxy resolution keeps the
|
|
935
|
+
# host's fork into boost from aborting before our Python ever runs.
|
|
936
|
+
cmd = ["claude", "mcp", "add", "--scope", "user",
|
|
937
|
+
"-e", "OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES",
|
|
938
|
+
"-e", "no_proxy=*",
|
|
939
|
+
"boost", "--", str(shim), "mcp", "--stdio"]
|
|
933
940
|
else:
|
|
934
941
|
cmd = ["claude", "mcp", "remove", "boost"]
|
|
935
942
|
|
|
@@ -21,7 +21,7 @@ import json
|
|
|
21
21
|
import os
|
|
22
22
|
import re
|
|
23
23
|
from pathlib import Path
|
|
24
|
-
from typing import List, Optional, Set, Tuple
|
|
24
|
+
from typing import Dict, List, Optional, Set, Tuple
|
|
25
25
|
|
|
26
26
|
from ..errors import BoostError
|
|
27
27
|
from . import frontmatter, gitutil, paths, registry, util
|
|
@@ -167,15 +167,49 @@ def rebuild_tap(tap: "registry.Tap") -> List[dict]:
|
|
|
167
167
|
"commit": gitutil.head_commit(tap.path),
|
|
168
168
|
"skills": entries,
|
|
169
169
|
}, indent=1))
|
|
170
|
+
# Drop the mtime-keyed cache so a rebuild is visible to an immediately
|
|
171
|
+
# following load even when the filesystem mtime granularity is coarse.
|
|
172
|
+
_ENTRY_CACHE.pop(str(tap.cache_file), None)
|
|
170
173
|
return entries
|
|
171
174
|
|
|
172
175
|
|
|
176
|
+
# Entry-set cache, keyed on each tap cache file's (mtime_ns, size) stamp. The
|
|
177
|
+
# BM25 index is mtime-cached the same way (rag._load_raw); without this, every
|
|
178
|
+
# search reparses every tap cache. Entries are treated read-only by callers, so
|
|
179
|
+
# the cached list is shared by reference (matching the index cache). Keying on
|
|
180
|
+
# nanosecond mtime + size catches rewrites a bare second-resolution mtime would
|
|
181
|
+
# miss.
|
|
182
|
+
_ENTRY_CACHE: Dict[str, Tuple[Tuple[int, int], List[dict]]] = {}
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
def _cached_tap(tap: "registry.Tap") -> Optional[List[dict]]:
|
|
186
|
+
"""Memoized ``skills`` for a tap's cache file, or ``None`` to force a
|
|
187
|
+
rebuild (file missing, unreadable, or corrupt JSON)."""
|
|
188
|
+
p = tap.cache_file
|
|
189
|
+
key = str(p)
|
|
190
|
+
try:
|
|
191
|
+
st = p.stat()
|
|
192
|
+
except OSError:
|
|
193
|
+
_ENTRY_CACHE.pop(key, None)
|
|
194
|
+
return None
|
|
195
|
+
stamp = (st.st_mtime_ns, st.st_size)
|
|
196
|
+
cached = _ENTRY_CACHE.get(key)
|
|
197
|
+
if cached is not None and cached[0] == stamp:
|
|
198
|
+
return cached[1]
|
|
199
|
+
try:
|
|
200
|
+
skills = json.loads(p.read_text()).get("skills", [])
|
|
201
|
+
except (json.JSONDecodeError, OSError):
|
|
202
|
+
_ENTRY_CACHE.pop(key, None)
|
|
203
|
+
return None
|
|
204
|
+
_ENTRY_CACHE[key] = (stamp, skills)
|
|
205
|
+
return skills
|
|
206
|
+
|
|
207
|
+
|
|
173
208
|
def load_tap(tap: "registry.Tap", rebuild: bool = False) -> List[dict]:
|
|
174
|
-
if not rebuild
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
pass
|
|
209
|
+
if not rebuild:
|
|
210
|
+
cached = _cached_tap(tap)
|
|
211
|
+
if cached is not None:
|
|
212
|
+
return cached
|
|
179
213
|
if tap.is_cloned:
|
|
180
214
|
return rebuild_tap(tap)
|
|
181
215
|
return []
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
id: cache-the-catalog-entry-set-across-rag-queries
|
|
3
3
|
board: code
|
|
4
4
|
section: internals
|
|
5
|
-
status:
|
|
5
|
+
status: shipped
|
|
6
6
|
category: Performance
|
|
7
7
|
complexity: M
|
|
8
8
|
impact: Med
|
|
9
9
|
wow: 3
|
|
10
10
|
note:
|
|
11
11
|
order: 10
|
|
12
|
-
owner:
|
|
13
|
-
pr:
|
|
12
|
+
owner: loop/cache-entry-set
|
|
13
|
+
pr: 114
|
|
14
14
|
title: Cache the catalog entry-set across RAG queries
|
|
15
15
|
---
|
|
16
16
|
<code>rag.retrieve()</code> calls <code>all_entries()</code>, which reads & <code>json.loads</code> <b>every tap cache on every search</b> to build the live map (<code>rag.py:323 · catalog.py:166–181</code>) — the BM25 index is mtime-cached, the entry set is not. Memoize the entry set on cache mtime the same way.
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
id: mcp-launch-objc-fork-safety
|
|
3
3
|
board: code
|
|
4
4
|
section: compat
|
|
5
|
-
status:
|
|
5
|
+
status: shipped
|
|
6
6
|
category: Compatibility · macOS
|
|
7
7
|
complexity: S
|
|
8
8
|
impact: Med
|
|
9
9
|
wow: 3
|
|
10
10
|
note: OBJC_DISABLE_INITIALIZE_FORK_SAFETY
|
|
11
11
|
order: 9
|
|
12
|
-
owner:
|
|
13
|
-
pr:
|
|
12
|
+
owner: loop/mcp-fork-safety
|
|
13
|
+
pr: 119
|
|
14
14
|
title: Harden <code>boost mcp</code> launch against macOS Obj-C fork aborts
|
|
15
15
|
---
|
|
16
16
|
On macOS, a host that spawns <code>boost mcp --stdio</code> via <code>fork()</code>
|
|
@@ -548,7 +548,7 @@ by new unit tests covering every branch.</p>
|
|
|
548
548
|
</article>
|
|
549
549
|
|
|
550
550
|
<article class="cap rcard">
|
|
551
|
-
<div class="head"><span class="pill
|
|
551
|
+
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Performance</span></div>
|
|
552
552
|
<h3>Cache the catalog entry-set across RAG queries</h3>
|
|
553
553
|
<p><code>rag.retrieve()</code> calls <code>all_entries()</code>, which reads & <code>json.loads</code> <b>every tap cache on every search</b> to build the live map (<code>rag.py:323 · catalog.py:166–181</code>) — the BM25 index is mtime-cached, the entry set is not. Memoize the entry set on cache mtime the same way.</p>
|
|
554
554
|
<div class="meta">
|
|
@@ -1587,7 +1587,7 @@ and the work stays visible.</p>
|
|
|
1587
1587
|
</article>
|
|
1588
1588
|
|
|
1589
1589
|
<article class="cap rcard">
|
|
1590
|
-
<div class="head"><span class="pill
|
|
1590
|
+
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Compatibility · macOS</span></div>
|
|
1591
1591
|
<h3>Harden <code>boost mcp</code> launch against macOS Obj-C fork aborts</h3>
|
|
1592
1592
|
<p>On macOS, a host that spawns <code>boost mcp --stdio</code> via <code>fork()</code>
|
|
1593
1593
|
can abort on the child side pre-<code>exec</code> when Obj-C is touched
|
{boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/tests/functional/test_cli_configuration.py
RENAMED
|
@@ -763,7 +763,9 @@ class TestMcp:
|
|
|
763
763
|
shim = str(paths.repo_root() / "boost")
|
|
764
764
|
r = boost("mcp", "register")
|
|
765
765
|
assert "`claude` CLI not found — run this yourself:" in r.out
|
|
766
|
-
assert "claude mcp add --scope user
|
|
766
|
+
assert ("claude mcp add --scope user "
|
|
767
|
+
"-e OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES -e no_proxy=* "
|
|
768
|
+
"boost -- %s mcp --stdio" % shim) in r.out
|
|
767
769
|
r = boost("mcp", "unregister")
|
|
768
770
|
assert "claude mcp remove boost" in r.out
|
|
769
771
|
assert journal.events(action="mcp")[0]["subject"] == "unregister"
|
|
@@ -783,8 +785,10 @@ class TestMcp:
|
|
|
783
785
|
monkeypatch.setattr("boost_cli.commands.configuration.subprocess.run",
|
|
784
786
|
fake_run)
|
|
785
787
|
r = boost("mcp", "register")
|
|
786
|
-
assert calls == [["claude", "mcp", "add", "--scope", "user",
|
|
787
|
-
"
|
|
788
|
+
assert calls == [["claude", "mcp", "add", "--scope", "user",
|
|
789
|
+
"-e", "OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES",
|
|
790
|
+
"-e", "no_proxy=*",
|
|
791
|
+
"boost", "--", str(paths.repo_root() / "boost"),
|
|
788
792
|
"mcp", "--stdio"]]
|
|
789
793
|
assert "Added stdio MCP server boost" in r.out
|
|
790
794
|
assert "registered boost as an MCP server (scope: user)" in r.out
|
|
@@ -345,6 +345,50 @@ class TestTapCaches:
|
|
|
345
345
|
assert catalog.load_tap(registry.Tap(name="fake", url="")) == []
|
|
346
346
|
|
|
347
347
|
|
|
348
|
+
class TestEntrySetCache:
|
|
349
|
+
"""load_tap memoizes parsed skills on the cache file's (mtime_ns, size)
|
|
350
|
+
stamp, so repeated searches don't re-parse every tap cache."""
|
|
351
|
+
|
|
352
|
+
def test_unchanged_cache_returns_memoized_object(self, sandbox):
|
|
353
|
+
paths.ensure_dirs()
|
|
354
|
+
tap = registry.Tap(name="fake", url="")
|
|
355
|
+
tap.cache_file.write_text(json.dumps({"skills": [{"name": "s1"}]}))
|
|
356
|
+
first = catalog.load_tap(tap)
|
|
357
|
+
second = catalog.load_tap(tap)
|
|
358
|
+
# A cache hit returns the memoized list itself; a re-parse would build a
|
|
359
|
+
# fresh list, so identity proves the second call did not touch disk.
|
|
360
|
+
assert first == [{"name": "s1"}]
|
|
361
|
+
assert second is first
|
|
362
|
+
|
|
363
|
+
def test_content_change_invalidates_cache(self, sandbox):
|
|
364
|
+
paths.ensure_dirs()
|
|
365
|
+
tap = registry.Tap(name="fake", url="")
|
|
366
|
+
tap.cache_file.write_text(json.dumps({"skills": [{"name": "s1"}]}))
|
|
367
|
+
assert catalog.load_tap(tap) == [{"name": "s1"}]
|
|
368
|
+
# New content ⇒ different size ⇒ new stamp ⇒ the cache must re-read.
|
|
369
|
+
tap.cache_file.write_text(
|
|
370
|
+
json.dumps({"skills": [{"name": "s1"}, {"name": "s2"}]}))
|
|
371
|
+
assert catalog.load_tap(tap) == [{"name": "s1"}, {"name": "s2"}]
|
|
372
|
+
|
|
373
|
+
def test_rebuild_pops_stale_memo(self, sandbox, fixture_tap_src):
|
|
374
|
+
tap = registry.add(str(fixture_tap_src))
|
|
375
|
+
catalog.rebuild_tap(tap) # write the cache file
|
|
376
|
+
catalog.load_tap(tap) # read + memoize it
|
|
377
|
+
assert str(tap.cache_file) in catalog._ENTRY_CACHE
|
|
378
|
+
catalog.rebuild_tap(tap) # must evict the now-stale memo
|
|
379
|
+
assert str(tap.cache_file) not in catalog._ENTRY_CACHE
|
|
380
|
+
|
|
381
|
+
def test_missing_cache_file_evicts_stamp(self, sandbox):
|
|
382
|
+
paths.ensure_dirs()
|
|
383
|
+
tap = registry.Tap(name="fake", url="")
|
|
384
|
+
tap.cache_file.write_text(json.dumps({"skills": [{"name": "s1"}]}))
|
|
385
|
+
assert catalog.load_tap(tap) == [{"name": "s1"}]
|
|
386
|
+
assert str(tap.cache_file) in catalog._ENTRY_CACHE
|
|
387
|
+
tap.cache_file.unlink()
|
|
388
|
+
assert catalog.load_tap(tap) == [] # no file, uncloned
|
|
389
|
+
assert str(tap.cache_file) not in catalog._ENTRY_CACHE
|
|
390
|
+
|
|
391
|
+
|
|
348
392
|
class TestAllEntriesAndFind:
|
|
349
393
|
def test_all_entries_config_order(self, sandbox):
|
|
350
394
|
_fake_taps(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_skill_cli.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/boost_skill_cli.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{boost_skill_cli-1.0.100 → boost_skill_cli-1.0.102}/docs/roadmap/items/one-command-every-env-nox.md
RENAMED
|
File without changes
|
|
File without changes
|