boost-skill-cli 1.0.74__tar.gz → 1.0.76__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.
Files changed (228) hide show
  1. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/commands/configuration.py +1 -9
  4. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/commands/discovery.py +1 -7
  5. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/commands/info.py +1 -8
  6. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/commands/intelligence.py +1 -6
  7. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/commands/quality.py +1 -3
  8. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/commands/taps.py +1 -10
  9. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/commands/team.py +1 -10
  10. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/core/paths.py +17 -0
  11. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_skill_cli.egg-info/PKG-INFO +1 -1
  12. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +3 -3
  13. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap.html +1 -1
  14. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_paths.py +35 -0
  15. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/.gitattributes +0 -0
  16. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/.gitignore +0 -0
  17. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/CLAUDE.md +0 -0
  18. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/CONTRIBUTING.md +0 -0
  19. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/LICENSE +0 -0
  20. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/MANIFEST.in +0 -0
  21. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/Makefile +0 -0
  22. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/README.md +0 -0
  23. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/SECURITY.md +0 -0
  24. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost +0 -0
  25. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/__init__.py +0 -0
  26. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/__main__.py +0 -0
  27. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/cli.py +0 -0
  28. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/cliparse.py +0 -0
  29. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/commands/__init__.py +0 -0
  30. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/commands/bmad.py +0 -0
  31. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/commands/hooks.py +0 -0
  32. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/commands/pkg.py +0 -0
  33. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/core/__init__.py +0 -0
  34. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/core/agents.py +0 -0
  35. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/core/ai.py +0 -0
  36. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/core/catalog.py +0 -0
  37. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/core/claude_settings.py +0 -0
  38. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/core/config.py +0 -0
  39. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/core/dense.py +0 -0
  40. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/core/embed.py +0 -0
  41. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/core/frontmatter.py +0 -0
  42. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/core/gitutil.py +0 -0
  43. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/core/journal.py +0 -0
  44. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/core/lockfile.py +0 -0
  45. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/core/logs.py +0 -0
  46. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/core/mcp.py +0 -0
  47. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/core/output.py +0 -0
  48. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/core/policy.py +0 -0
  49. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/core/rag.py +0 -0
  50. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/core/registry.py +0 -0
  51. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/core/store.py +0 -0
  52. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/core/util.py +0 -0
  53. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/data/registries.json +0 -0
  54. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/errors.py +0 -0
  55. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_cli/spin.py +0 -0
  56. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_skill_cli.egg-info/SOURCES.txt +0 -0
  57. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  58. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  59. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_skill_cli.egg-info/requires.txt +0 -0
  60. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/boost_skill_cli.egg-info/top_level.txt +0 -0
  61. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/.claude/settings.local.json +0 -0
  62. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/DEBUGGING.md +0 -0
  63. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/demo.gif +0 -0
  64. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/demo.tape +0 -0
  65. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/design-roadmap.html +0 -0
  66. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/index.html +0 -0
  67. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/mcp-hub.html +0 -0
  68. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/rag-architecture.md +0 -0
  69. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/BOOST-D01.md +0 -0
  70. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/BOOST-D02.md +0 -0
  71. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/BOOST-D03.md +0 -0
  72. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/BOOST-D04.md +0 -0
  73. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/BOOST-D05.md +0 -0
  74. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/BOOST-D06.md +0 -0
  75. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/BOOST-D07.md +0 -0
  76. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/BOOST-D08.md +0 -0
  77. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/BOOST-D09.md +0 -0
  78. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/BOOST-D10.md +0 -0
  79. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/BOOST-D11.md +0 -0
  80. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/BOOST-D12.md +0 -0
  81. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/BOOST-D13.md +0 -0
  82. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/BOOST-D14.md +0 -0
  83. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/BOOST-D15.md +0 -0
  84. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/BOOST-D16.md +0 -0
  85. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/BOOST-D17.md +0 -0
  86. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/BOOST-D18.md +0 -0
  87. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/BOOST-D19.md +0 -0
  88. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/BOOST-D20.md +0 -0
  89. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/BOOST-D21.md +0 -0
  90. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/BOOST-D22.md +0 -0
  91. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/BOOST-D23.md +0 -0
  92. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/BOOST-D24.md +0 -0
  93. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/BOOST-D25.md +0 -0
  94. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/BOOST-D26.md +0 -0
  95. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  96. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  97. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  98. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  99. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  100. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  101. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  102. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  103. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  104. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  105. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  106. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  107. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  108. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  109. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  110. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  111. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  112. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  113. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  114. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  115. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  116. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  117. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  118. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  119. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  120. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  121. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  122. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  123. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  124. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  125. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  126. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  127. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  128. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  129. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  130. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  131. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  132. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  133. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  134. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  135. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  136. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  137. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  138. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  139. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  140. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  141. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  142. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  143. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  144. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  145. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  146. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  147. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  148. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  149. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  150. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  151. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  152. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  153. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  154. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  155. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  156. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  157. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  158. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  159. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  160. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  161. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  162. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  163. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  164. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  165. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  166. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  167. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  168. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  169. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  170. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  171. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  172. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  173. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  174. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  175. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  176. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  177. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/index.html +0 -0
  178. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/pyproject.toml +0 -0
  179. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/scripts/build_registries.py +0 -0
  180. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/scripts/build_roadmap.py +0 -0
  181. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/scripts/mutation_gate.py +0 -0
  182. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/setup.cfg +0 -0
  183. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/style/README.md +0 -0
  184. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/style/boost.css +0 -0
  185. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/style/boost.js +0 -0
  186. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/style/demo.html +0 -0
  187. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/conftest.py +0 -0
  188. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/functional/test_cli_bmad.py +0 -0
  189. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/functional/test_cli_configuration.py +0 -0
  190. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/functional/test_cli_discovery.py +0 -0
  191. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/functional/test_cli_hooks.py +0 -0
  192. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/functional/test_cli_info.py +0 -0
  193. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/functional/test_cli_intelligence.py +0 -0
  194. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/functional/test_cli_pkg.py +0 -0
  195. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/functional/test_cli_quality.py +0 -0
  196. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/functional/test_cli_taps.py +0 -0
  197. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/functional/test_cli_team.py +0 -0
  198. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/functional/test_everyday_loop.py +0 -0
  199. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/make_fixture.py +0 -0
  200. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/smoke.sh +0 -0
  201. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_agents.py +0 -0
  202. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_ai.py +0 -0
  203. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_catalog.py +0 -0
  204. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_claude_settings.py +0 -0
  205. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_cliparse.py +0 -0
  206. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_config.py +0 -0
  207. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_dense.py +0 -0
  208. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_dense_fallback.py +0 -0
  209. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_embed.py +0 -0
  210. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_errors_and_cli_table.py +0 -0
  211. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_frontmatter.py +0 -0
  212. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_gitutil.py +0 -0
  213. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_journal.py +0 -0
  214. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_lockfile.py +0 -0
  215. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_logs.py +0 -0
  216. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_mcp.py +0 -0
  217. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_mutation_hardening.py +0 -0
  218. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_output.py +0 -0
  219. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_policy.py +0 -0
  220. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_rag.py +0 -0
  221. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_registries_fresh.py +0 -0
  222. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_registry.py +0 -0
  223. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_roadmap_fresh.py +0 -0
  224. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_spin.py +0 -0
  225. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_store.py +0 -0
  226. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_token_parity.py +0 -0
  227. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_util.py +0 -0
  228. {boost_skill_cli-1.0.74 → boost_skill_cli-1.0.76}/tests/unit/test_version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.74
3
+ Version: 1.0.76
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -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.74'
22
- __version_tuple__ = version_tuple = (1, 0, 74)
21
+ __version__ = version = '1.0.76'
22
+ __version_tuple__ = version_tuple = (1, 0, 76)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -25,15 +25,7 @@ from ..core import output as out
25
25
  from ..errors import BoostError
26
26
 
27
27
 
28
- def _tilde(p) -> str:
29
- """Contract $HOME to ~ in a path-ish string for display."""
30
- s = str(p)
31
- for h in {str(paths.home()), str(paths.home().resolve())}:
32
- if s == h:
33
- return "~"
34
- if s.startswith(h + os.sep):
35
- return "~" + s[len(h):]
36
- return s
28
+ _tilde = paths.tilde
37
29
 
38
30
 
39
31
  def _user() -> str:
@@ -41,13 +41,7 @@ def _positive_int(s: str) -> int:
41
41
  return v
42
42
 
43
43
 
44
- def _tilde(p) -> str:
45
- """Show a path with $HOME contracted to ~."""
46
- s = str(p)
47
- for h in (str(paths.home()), str(paths.home().resolve())):
48
- if s == h or s.startswith(h + os.sep):
49
- return "~" + s[len(h):]
50
- return s
44
+ _tilde = paths.tilde
51
45
 
52
46
 
53
47
  def _read_text(p: Path) -> str:
@@ -23,14 +23,7 @@ from ..errors import BoostError
23
23
 
24
24
  # ---------------------------------------------------------------- helpers
25
25
 
26
- def _tilde(p) -> str:
27
- """Show a path with $HOME contracted to ~."""
28
- s, h = str(p), str(paths.home())
29
- if s == h:
30
- return "~"
31
- if s.startswith(h + os.sep):
32
- return "~" + s[len(h):]
33
- return s
26
+ _tilde = paths.tilde
34
27
 
35
28
 
36
29
  def _read(p: Path) -> str:
@@ -35,12 +35,7 @@ def _note_fallback() -> None:
35
35
  _warned_fallback = True
36
36
 
37
37
 
38
- def _tilde(p) -> str:
39
- s = str(p)
40
- for h in {str(paths.home()), str(paths.home().resolve())}:
41
- if s.startswith(h):
42
- return "~" + s[len(h):]
43
- return s
38
+ _tilde = paths.tilde
44
39
 
45
40
 
46
41
  def _skill_text(name: str) -> Tuple[str, str]:
@@ -73,9 +73,7 @@ _STACK_MARKERS = [
73
73
 
74
74
  # --- shared helpers ---------------------------------------------------------
75
75
 
76
- def _tilde(p) -> str:
77
- s, h = str(p), str(paths.home())
78
- return "~" + s[len(h):] if s.startswith(h) else s
76
+ _tilde = paths.tilde
79
77
 
80
78
 
81
79
  def _s(n: int) -> str:
@@ -3,7 +3,6 @@ from __future__ import annotations
3
3
 
4
4
  import argparse
5
5
  import json
6
- import os
7
6
 
8
7
  from .. import cliparse, spin
9
8
  from ..core import catalog, config, gitutil, journal, lockfile, paths, registry, store, util
@@ -11,15 +10,7 @@ from ..core import output as out
11
10
  from ..errors import BoostError
12
11
 
13
12
 
14
- def _tilde(p) -> str:
15
- """Contract $HOME to ~ in a path-ish string for display."""
16
- s = str(p)
17
- for h in {str(paths.home()), str(paths.home().resolve())}:
18
- if s == h:
19
- return "~"
20
- if s.startswith(h + os.sep):
21
- return "~" + s[len(h):]
22
- return s
13
+ _tilde = paths.tilde
23
14
 
24
15
 
25
16
  def _tap_catalog(args) -> int:
@@ -4,7 +4,6 @@ from __future__ import annotations
4
4
  import getpass
5
5
  import hashlib
6
6
  import json
7
- import os
8
7
  import platform
9
8
  import shutil
10
9
  import stat
@@ -16,15 +15,7 @@ from ..core import output as out
16
15
  from ..errors import BoostError
17
16
 
18
17
 
19
- def _tilde(p) -> str:
20
- """Contract $HOME to ~ in a path-ish string for display."""
21
- s = str(p)
22
- for h in {str(paths.home()), str(paths.home().resolve())}:
23
- if s == h:
24
- return "~"
25
- if s.startswith(h + os.sep):
26
- return "~" + s[len(h):]
27
- return s
18
+ _tilde = paths.tilde
28
19
 
29
20
 
30
21
  def _user() -> str:
@@ -32,6 +32,23 @@ def expand(p: str) -> Path:
32
32
  return Path(p)
33
33
 
34
34
 
35
+ def tilde(p) -> str:
36
+ """Contract $HOME to ``~`` in a path-ish string for display.
37
+
38
+ Only contracts a real path boundary: the string must equal home() or sit
39
+ directly beneath it (``home + os.sep``). A bare ``startswith(home)`` would
40
+ wrongly turn a sibling like ``/Users/bob-backup`` into ``~-backup``. Both
41
+ the raw and resolved forms of home() are tried so symlinked homes contract.
42
+ """
43
+ s = str(p)
44
+ for h in (str(home()), str(home().resolve())):
45
+ if s == h:
46
+ return "~"
47
+ if s.startswith(h + os.sep):
48
+ return "~" + s[len(h):]
49
+ return s
50
+
51
+
35
52
  def boost_home() -> Path:
36
53
  override = os.environ.get("BOOST_HOME")
37
54
  return Path(override) if override else home() / ".boost"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.74
3
+ Version: 1.0.76
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -2,15 +2,15 @@
2
2
  id: unify-tilde-two-copies-have-a-boundary-bug
3
3
  board: code
4
4
  section: internals
5
- status: planned
5
+ status: shipped
6
6
  category: Correctness
7
7
  complexity: S
8
8
  impact: Med
9
9
  wow: 2
10
10
  note:
11
11
  order: 9
12
- owner:
13
- pr:
12
+ owner: loop/unify-tilde
13
+ pr: 86
14
14
  title: Unify <code>_tilde()</code> — two copies have a boundary bug
15
15
  ---
16
16
  Eight command modules each define <code>_tilde</code>; the <code>quality</code> and <code>intelligence</code> versions use <code>startswith(home)</code> with no separator check (<code>quality.py:78</code>), so <code>/Users/bob-backup</code> wrongly contracts to <code>~-backup</code>. Collapse to one helper in <code>core/paths</code>.
@@ -476,7 +476,7 @@
476
476
  </article>
477
477
 
478
478
  <article class="cap rcard">
479
- <div class="head"><span class="pill planned">Planned</span><span class="cat">Correctness</span></div>
479
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Correctness</span></div>
480
480
  <h3>Unify <code>_tilde()</code> — two copies have a boundary bug</h3>
481
481
  <p>Eight command modules each define <code>_tilde</code>; the <code>quality</code> and <code>intelligence</code> versions use <code>startswith(home)</code> with no separator check (<code>quality.py:78</code>), so <code>/Users/bob-backup</code> wrongly contracts to <code>~-backup</code>. Collapse to one helper in <code>core/paths</code>.</p>
482
482
  <div class="meta">
@@ -1,6 +1,7 @@
1
1
  """Unit tests: boost_cli/core/paths.py — all locations derive from $HOME."""
2
2
  from __future__ import annotations
3
3
 
4
+ import os
4
5
  from pathlib import Path
5
6
 
6
7
  from boost_cli.core import paths
@@ -81,6 +82,40 @@ class TestExpand:
81
82
  assert paths.expand("~other") == Path("~other")
82
83
 
83
84
 
85
+ class TestTilde:
86
+ def test_exact_home_is_tilde(self, sandbox):
87
+ assert paths.tilde(str(sandbox)) == "~"
88
+
89
+ def test_path_under_home_contracts(self, sandbox):
90
+ p = sandbox / "x" / "y"
91
+ assert paths.tilde(str(p)) == "~" + os.sep + "x" + os.sep + "y"
92
+
93
+ def test_sibling_prefix_not_contracted(self, sandbox):
94
+ # regression: /Users/bob-backup must NOT contract to ~-backup when
95
+ # home is /Users/bob. A separator boundary is required, not a bare
96
+ # startswith(home).
97
+ sibling = str(sandbox) + "-backup"
98
+ assert paths.tilde(sibling) == sibling
99
+
100
+ def test_path_outside_home_unchanged(self, sandbox):
101
+ assert paths.tilde("/etc/hosts") == "/etc/hosts"
102
+
103
+ def test_accepts_path_object(self, sandbox):
104
+ assert paths.tilde(sandbox / "cache") == "~" + os.sep + "cache"
105
+
106
+ def test_resolved_home_contracts_through_symlink(self, tmp_path, monkeypatch):
107
+ # HOME is a symlink; a path expressed against the *resolved* home must
108
+ # still contract (the helper tries both raw and resolved home).
109
+ real = tmp_path / "real_home"
110
+ real.mkdir()
111
+ link = tmp_path / "link_home"
112
+ link.symlink_to(real)
113
+ monkeypatch.setenv("HOME", str(link))
114
+ monkeypatch.delenv("BOOST_HOME", raising=False)
115
+ resolved = str(paths.home().resolve())
116
+ assert paths.tilde(resolved + os.sep + "sub") == "~" + os.sep + "sub"
117
+
118
+
84
119
  class TestEnsureDirs:
85
120
  EXPECTED = ("repos", "cache", "logs", "state", "state/snapshots",
86
121
  "state/lock-history", "state/profiles")
File without changes