boost-skill-cli 1.2.93__tar.gz → 1.2.95__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 (960) hide show
  1. {boost_skill_cli-1.2.93/boost_skill_cli.egg-info → boost_skill_cli-1.2.95}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/commands/pkg.py +13 -1
  4. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/commands/safety.py +18 -8
  5. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/store.py +22 -5
  6. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95/boost_skill_cli.egg-info}/PKG-INFO +1 -1
  7. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-attest-findings.md +3 -3
  8. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-sync-findings.md +3 -3
  9. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/mutation-shards-rerun-full-set-every-push.md +3 -3
  10. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap.html +7 -5
  11. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/mutation_shards.py +75 -0
  12. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/functional/test_cli_pkg.py +33 -0
  13. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/functional/test_cli_quality.py +31 -0
  14. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_mutation_shards.py +129 -0
  15. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_store.py +4 -1
  16. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_sync_blocked_links.py +66 -1
  17. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/.gitattributes +0 -0
  18. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/.gitignore +0 -0
  19. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/.gitleaks.toml +0 -0
  20. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/.htmlvalidate.json +0 -0
  21. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/.lighthouserc.json +0 -0
  22. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/.lycheeignore +0 -0
  23. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/.markdownlint-cli2.jsonc +0 -0
  24. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/.pre-commit-config.yaml +0 -0
  25. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/.stylelintrc.json +0 -0
  26. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/.vale/styles/boost/AIWriting.yml +0 -0
  27. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/.vale/styles/boost/Terminology.yml +0 -0
  28. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  29. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/.vale.ini +0 -0
  30. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/CLAUDE.md +0 -0
  31. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/CODE_OF_CONDUCT.md +0 -0
  32. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/CONTRIBUTING.md +0 -0
  33. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/DCO +0 -0
  34. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/GOVERNANCE.md +0 -0
  35. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/LICENSE +0 -0
  36. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/MAINTAINERS.md +0 -0
  37. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/MANIFEST.in +0 -0
  38. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/Makefile +0 -0
  39. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/README.md +0 -0
  40. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/SECURITY.md +0 -0
  41. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/SUPPORT.md +0 -0
  42. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost +0 -0
  43. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/__init__.py +0 -0
  44. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/__main__.py +0 -0
  45. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/cli.py +0 -0
  46. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/cliparse.py +0 -0
  47. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/commands/__init__.py +0 -0
  48. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/commands/_common.py +0 -0
  49. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/commands/bmad.py +0 -0
  50. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/commands/configuration.py +0 -0
  51. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/commands/discovery.py +0 -0
  52. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/commands/hooks.py +0 -0
  53. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/commands/info.py +0 -0
  54. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/commands/intelligence.py +0 -0
  55. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/commands/quality.py +0 -0
  56. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/commands/quickstart.py +0 -0
  57. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/commands/run.py +0 -0
  58. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/commands/taps.py +0 -0
  59. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/commands/team.py +0 -0
  60. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/__init__.py +0 -0
  61. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/adapters.py +0 -0
  62. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/agents.py +0 -0
  63. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/ai.py +0 -0
  64. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/aihost.py +0 -0
  65. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/bmad.py +0 -0
  66. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/bootstrap.py +0 -0
  67. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/browse.py +0 -0
  68. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/builtin.py +0 -0
  69. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/capabilities.py +0 -0
  70. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/catalog.py +0 -0
  71. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/catalogbundle.py +0 -0
  72. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/chat.py +0 -0
  73. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/claude_settings.py +0 -0
  74. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/complete.py +0 -0
  75. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/config.py +0 -0
  76. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/dense.py +0 -0
  77. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/ed25519.py +0 -0
  78. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/embed.py +0 -0
  79. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/faithfulness.py +0 -0
  80. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/frontmatter.py +0 -0
  81. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/gitutil.py +0 -0
  82. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/hookhost.py +0 -0
  83. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/imperative.py +0 -0
  84. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/injectscan.py +0 -0
  85. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/installscan.py +0 -0
  86. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/integrity.py +0 -0
  87. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/journal.py +0 -0
  88. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/jsonstate.py +0 -0
  89. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/localembed.py +0 -0
  90. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/lockfile.py +0 -0
  91. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/logs.py +0 -0
  92. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/mcp.py +0 -0
  93. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/mcpdecl.py +0 -0
  94. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/mcphost.py +0 -0
  95. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/minisign.py +0 -0
  96. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/nethttp.py +0 -0
  97. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/output.py +0 -0
  98. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/paths.py +0 -0
  99. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/policy.py +0 -0
  100. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/projectlock.py +0 -0
  101. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/provenance.py +0 -0
  102. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/rag.py +0 -0
  103. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/registry.py +0 -0
  104. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/resolve.py +0 -0
  105. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/rules.py +0 -0
  106. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/scopes.py +0 -0
  107. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/secretscan.py +0 -0
  108. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/selfupdate.py +0 -0
  109. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/serve.py +0 -0
  110. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/shards.py +0 -0
  111. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/stackprobe.py +0 -0
  112. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/staleness.py +0 -0
  113. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/trustaudit.py +0 -0
  114. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/typedvalue.py +0 -0
  115. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/typosquat.py +0 -0
  116. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/updatediff.py +0 -0
  117. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/util.py +0 -0
  118. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/core/workflows.py +0 -0
  119. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/data/registries.json +0 -0
  120. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/data/rules/boost-first.mdc +0 -0
  121. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/errors.py +0 -0
  122. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_cli/spin.py +0 -0
  123. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_langchain/__init__.py +0 -0
  124. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_langchain/_compat.py +0 -0
  125. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_langchain/graph.py +0 -0
  126. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_langchain/loader.py +0 -0
  127. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_langchain/py.typed +0 -0
  128. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_langchain/retriever.py +0 -0
  129. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_skill_cli.egg-info/SOURCES.txt +0 -0
  130. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  131. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  132. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_skill_cli.egg-info/requires.txt +0 -0
  133. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/boost_skill_cli.egg-info/top_level.txt +0 -0
  134. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/codecov.yml +0 -0
  135. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/.claude/settings.local.json +0 -0
  136. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/DEBUGGING.md +0 -0
  137. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/adapters.html +0 -0
  138. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/architecture/README.md +0 -0
  139. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/architecture/c4-components-core.md +0 -0
  140. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/architecture/c4-containers.md +0 -0
  141. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/architecture/c4-context.md +0 -0
  142. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/architecture/c4-dynamic-install.md +0 -0
  143. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/bmad.md +0 -0
  144. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/carousel/gifs/distill.gif +0 -0
  145. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/carousel/gifs/doctor.gif +0 -0
  146. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/carousel/gifs/explain.gif +0 -0
  147. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/carousel/gifs/hooks.gif +0 -0
  148. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/carousel/gifs/install.gif +0 -0
  149. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/carousel/gifs/pulse.gif +0 -0
  150. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/carousel/gifs/search.gif +0 -0
  151. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/carousel/gifs/tap.gif +0 -0
  152. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/carousel/tapes/distill.tape +0 -0
  153. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/carousel/tapes/doctor.tape +0 -0
  154. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/carousel/tapes/explain.tape +0 -0
  155. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/carousel/tapes/hooks.tape +0 -0
  156. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/carousel/tapes/install.tape +0 -0
  157. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/carousel/tapes/pulse.tape +0 -0
  158. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/carousel/tapes/search.tape +0 -0
  159. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/carousel/tapes/tap.tape +0 -0
  160. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/carousel.html +0 -0
  161. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/chat.html +0 -0
  162. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/code-review.md +0 -0
  163. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/commands.html +0 -0
  164. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/commit-audit.md +0 -0
  165. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/demo-index.json +0 -0
  166. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/demo.gif +0 -0
  167. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/demo.html +0 -0
  168. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/demo.tape +0 -0
  169. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/dependencies.md +0 -0
  170. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/design-roadmap.html +0 -0
  171. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/eval-latest.json +0 -0
  172. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/eval.html +0 -0
  173. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/index.html +0 -0
  174. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/langchain.html +0 -0
  175. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/mcp-hub.html +0 -0
  176. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/openssf-badge.md +0 -0
  177. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/openssf-playbook.md +0 -0
  178. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/rag-architecture.md +0 -0
  179. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D01.md +0 -0
  180. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D02.md +0 -0
  181. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D03.md +0 -0
  182. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D04.md +0 -0
  183. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D05.md +0 -0
  184. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D06.md +0 -0
  185. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D07.md +0 -0
  186. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D08.md +0 -0
  187. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D09.md +0 -0
  188. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D10.md +0 -0
  189. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D11.md +0 -0
  190. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D12.md +0 -0
  191. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D13.md +0 -0
  192. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D14.md +0 -0
  193. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D15.md +0 -0
  194. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D16.md +0 -0
  195. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D17.md +0 -0
  196. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D18.md +0 -0
  197. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D19.md +0 -0
  198. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D20.md +0 -0
  199. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D21.md +0 -0
  200. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D22.md +0 -0
  201. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D23.md +0 -0
  202. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D24.md +0 -0
  203. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D25.md +0 -0
  204. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D26.md +0 -0
  205. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/BOOST-D27.md +0 -0
  206. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  207. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  208. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  209. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  210. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  211. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/ai-backend-fanout.md +0 -0
  212. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  213. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  214. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  215. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  216. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-absorb-findings.md +0 -0
  217. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-adapt-findings.md +0 -0
  218. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-adapt-renders-every-sibling-of-a-flat-agents-dir-workflow-as.md +0 -0
  219. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-adapt-run-stats-edit-tag-export-reject-the-tap-name-qualifie.md +0 -0
  220. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-ai-degrade-note-blames-path-api-keys-regardless-of-cause-sev.md +0 -0
  221. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-audit-findings.md +0 -0
  222. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-bmad-findings.md +0 -0
  223. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-browse-findings.md +0 -0
  224. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-bundle-findings.md +0 -0
  225. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-catalog-findings.md +0 -0
  226. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-catalog-resolve-one-s-duplicate-name-hint-advertises-path-to.md +0 -0
  227. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-changelog-findings.md +0 -0
  228. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-chat-findings.md +0 -0
  229. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-clean-counts-failed-removals-as-cleaned-journals-the-inflate.md +0 -0
  230. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-cli-py-commands-summaries-and-parser-help-contradict-behavio.md +0 -0
  231. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-cohort-findings.md +0 -0
  232. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-completions-findings.md +0 -0
  233. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-config-findings.md +0 -0
  234. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-config-policy-set-store-type-unchecked-values-consumers-cras.md +0 -0
  235. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-context-findings.md +0 -0
  236. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-corrupt-settings-config-state-json-silently-read-as-empty-th.md +0 -0
  237. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-create-distill-infer-absorb-install-silently-replace-an-inst.md +0 -0
  238. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-create-findings.md +0 -0
  239. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-declined-confirms-never-name-y-boost-assume-yes-snapshot-cle.md +0 -0
  240. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-deps-findings.md +0 -0
  241. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-discover-findings.md +0 -0
  242. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-distill-s-heuristic-merge-drops-repeated-fences-braces-writi.md +0 -0
  243. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-doctor-findings.md +0 -0
  244. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-drift-findings.md +0 -0
  245. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-dry-runs-disagree-with-the-real-run-compact-counts-bytes-it.md +0 -0
  246. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-edit-findings.md +0 -0
  247. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-evolve-findings.md +0 -0
  248. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-explain-findings.md +0 -0
  249. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-export-findings.md +0 -0
  250. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-export-o-cohort-create-and-profile-save-silently-overwrite-e.md +0 -0
  251. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-fingerprint-findings.md +0 -0
  252. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-five-exit-70-crashes-on-bad-paths-data-catalog-export-serve.md +0 -0
  253. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-focus-profile-sideline-by-unlinking-without-recording-it-lis.md +0 -0
  254. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-git-operations-never-set-git-terminal-prompt-0-so-a-404-priv.md +0 -0
  255. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-health-findings.md +0 -0
  256. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-hooks-remove-n-cannot-find-hooks-boost-itself-added-unknown.md +0 -0
  257. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-import-all-skips-the-injection-secret-scans-and-the-per-skil.md +0 -0
  258. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-import-findings.md +0 -0
  259. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-index-findings.md +0 -0
  260. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-info-stats-explain-render-a-different-smaller-shape-for-rule.md +0 -0
  261. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-install-dry-run-promises-agents-the-real-install-never-write.md +0 -0
  262. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-install-findings.md +0 -0
  263. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-install-local-writes-empties-the-repo-s-mcp-json-silently-of.md +0 -0
  264. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-json-accepted-but-ignored-on-many-branches-cohort-config-pol.md +0 -0
  265. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-lint-findings.md +0 -0
  266. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-log-findings.md +0 -0
  267. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-log-simulate-changelog-headings-echo-the-raw-qualified-argum.md +0 -0
  268. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-mcp-findings.md +0 -0
  269. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-mcp-register-s-boost-first-consent-names-only-the-registered.md +0 -0
  270. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-missing-json-on-doctor-test-health-changelog-trending-log-ho.md +0 -0
  271. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-name-miss-errors-unknown-tap-qualifier-unnamed-no-close-matc.md +0 -0
  272. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-onboard-findings.md +0 -0
  273. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-out-table-clips-data-columns-to-an-assumed-80-columns-when-s.md +0 -0
  274. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-out-warn-defaults-to-stdout-infer-absorb-corrupt-skill-md-se.md +0 -0
  275. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-outdated-findings.md +0 -0
  276. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-output-wrap-tokens-splits-punctuation-off-backtick-spans-ins.md +0 -0
  277. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-pinned-taps-silently-moved-to-head-by-update-re-clone-and-co.md +0 -0
  278. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-policy-findings.md +0 -0
  279. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-preview-findings.md +0 -0
  280. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-profile-findings.md +0 -0
  281. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-project-scope-seams-uninstall-verify-list-info-reinstall-dis.md +0 -0
  282. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-protocol-findings.md +0 -0
  283. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-pulse-findings.md +0 -0
  284. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-quarantine-findings.md +0 -0
  285. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-quarantine-pin-state-invisible-list-info-doctor-report-links.md +0 -0
  286. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-quickstart-findings.md +0 -0
  287. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-recommend-findings.md +0 -0
  288. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-reindex-findings.md +0 -0
  289. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-reinstall-sync-repair-and-audit-resolve-by-name-tap-ignoring.md +0 -0
  290. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-replay-findings.md +0 -0
  291. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-root-findings.md +0 -0
  292. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-rules-workflows-reported-as-skills-uninstall-claims-a-store.md +0 -0
  293. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-run-findings.md +0 -0
  294. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-schedule-findings.md +0 -0
  295. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-search-findings.md +0 -0
  296. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-simulate-findings.md +0 -0
  297. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-singular-plural-misses-1-skills-1-issue-need-1-skill-pass-ac.md +0 -0
  298. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-six-count-flags-tap-chat-absorb-lint-changelog-hooks-skip-ut.md +0 -0
  299. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-skill-profile-name-slugging-is-inconsistent-distill-o-accept.md +0 -0
  300. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-snapshot-restore-replaces-the-lock-wholesale-orphaning-newer.md +0 -0
  301. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-stale-prose-after-shipped-changes-catalog-export-live-discov.md +0 -0
  302. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-stray-positionals-and-inapplicable-flags-silently-ignored-ac.md +0 -0
  303. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-sweep-positionals-json-lack-help-strings-and-no-command-help.md +0 -0
  304. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-tag-findings.md +0 -0
  305. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-tap-dry-run-is-silently-ignored-outside-catalog-spec-and-def.md +0 -0
  306. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-tap-findings.md +0 -0
  307. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-taps-findings.md +0 -0
  308. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-taps-outdated-decay-policy-snapshot-json-emit-display-string.md +0 -0
  309. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-test-findings.md +0 -0
  310. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-trust-findings.md +0 -0
  311. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-trust-verify-labels-a-manifest-tampered-after-signing-by-a-t.md +0 -0
  312. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-unpin-findings.md +0 -0
  313. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-untap-findings.md +0 -0
  314. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-update-findings.md +0 -0
  315. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-verify-drift-say-nothing-installed-exit-0-and-doctor-says-lo.md +0 -0
  316. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-verify-findings.md +0 -0
  317. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/audit-who-findings.md +0 -0
  318. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  319. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
  320. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  321. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  322. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
  323. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  324. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/boost-first-rule.md +0 -0
  325. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  326. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  327. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/branch-current-gate.md +0 -0
  328. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  329. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  330. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  331. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  332. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  333. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  334. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  335. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/capability-policy-skips-rules-and-workflows.md +0 -0
  336. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/catalog-categories-beyond-curated.md +0 -0
  337. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  338. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  339. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  340. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  341. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  342. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  343. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  344. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/cli-audit-2026-08-full-sweep.md +0 -0
  345. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/cli-command-audit.md +0 -0
  346. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
  347. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  348. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  349. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  350. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/command-carousel-page.md +0 -0
  351. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  352. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  353. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  354. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  355. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/concurrent-rag-builds-delete-each-others-temp-index.md +0 -0
  356. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  357. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  358. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  359. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  360. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  361. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  362. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/delay-true-defeats-the-log-suppress.md +0 -0
  363. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  364. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  365. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  366. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/dense-reindex-has-no-progress-or-durability.md +0 -0
  367. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/dense-reindex-reuses-whole-taps.md +0 -0
  368. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  369. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  370. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/dense-store-holds-every-vector-once-per-copy.md +0 -0
  371. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  372. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  373. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  374. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  375. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  376. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  377. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  378. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  379. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  380. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  381. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  382. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  383. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  384. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  385. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  386. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  387. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  388. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  389. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  390. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  391. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  392. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  393. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  394. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  395. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  396. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  397. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  398. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  399. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  400. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  401. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  402. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  403. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
  404. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
  405. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
  406. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/github-community-health-files.md +0 -0
  407. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  408. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  409. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  410. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/gstack-tap-first-then-coexistence.md +0 -0
  411. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  412. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  413. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  414. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  415. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  416. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  417. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  418. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  419. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  420. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  421. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  422. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  423. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  424. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  425. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  426. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  427. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  428. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  429. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  430. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  431. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  432. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  433. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  434. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  435. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  436. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  437. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  438. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  439. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  440. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  441. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
  442. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  443. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  444. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  445. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  446. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  447. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  448. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  449. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  450. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  451. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  452. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/mcp-cannot-read-a-skill-before-installing.md +0 -0
  453. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  454. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  455. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  456. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  457. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  458. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  459. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  460. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  461. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  462. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  463. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  464. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  465. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  466. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  467. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  468. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  469. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  470. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  471. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  472. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  473. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  474. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  475. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  476. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/near-identical-copies-still-eat-the-slots.md +0 -0
  477. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  478. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  479. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  480. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  481. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  482. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  483. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
  484. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
  485. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/openssf-playbook.md +0 -0
  486. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/openssf-silver.md +0 -0
  487. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/osps-baseline-levels.md +0 -0
  488. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  489. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  490. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  491. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  492. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  493. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  494. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  495. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  496. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  497. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  498. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  499. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  500. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  501. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  502. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  503. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  504. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  505. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  506. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  507. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/publish-the-keyword-index.md +0 -0
  508. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  509. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/published-shards-have-no-consumer.md +0 -0
  510. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  511. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  512. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  513. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  514. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  515. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
  516. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  517. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  518. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  519. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  520. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/relicence-apache-2.md +0 -0
  521. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
  522. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  523. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  524. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  525. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  526. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  527. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  528. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  529. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  530. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  531. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  532. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  533. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  534. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  535. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  536. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  537. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  538. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  539. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  540. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  541. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  542. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  543. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  544. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  545. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  546. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  547. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  548. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  549. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  550. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  551. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  552. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  553. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  554. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  555. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/shard-refresh-skips-processed-commits.md +0 -0
  556. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/shard-runs-reembed-everything-weekly.md +0 -0
  557. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  558. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  559. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  560. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/shrink-the-published-index.md +0 -0
  561. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  562. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  563. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  564. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  565. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  566. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  567. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  568. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  569. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  570. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  571. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  572. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  573. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  574. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  575. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  576. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  577. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  578. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  579. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  580. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  581. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  582. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  583. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  584. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  585. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  586. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  587. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  588. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  589. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  590. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  591. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  592. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  593. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  594. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  595. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/vex-openvex-feed.md +0 -0
  596. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  597. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/weekly-vectors-had-no-ingestion-path.md +0 -0
  598. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  599. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  600. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  601. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  602. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  603. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  604. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/workspace-scope-install.md +0 -0
  605. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/zip-strict-audit.md +0 -0
  606. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  607. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  608. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/security-design.md +0 -0
  609. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/semantic-search.md +0 -0
  610. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  611. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/verifying-releases.md +0 -0
  612. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/vex/meta.md +0 -0
  613. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/vex/openvex.json +0 -0
  614. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
  615. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
  616. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
  617. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
  618. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/eslint.config.mjs +0 -0
  619. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/evals/README.md +0 -0
  620. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/evals/__init__.py +0 -0
  621. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/evals/baseline.json +0 -0
  622. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/evals/faithfulness.py +0 -0
  623. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/evals/golden_set.json +0 -0
  624. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/evals/make_corpus.py +0 -0
  625. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/evals/make_golden.py +0 -0
  626. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/evals/metrics.py +0 -0
  627. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/evals/publish_golden_dataset.py +0 -0
  628. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/evals/run_evals.py +0 -0
  629. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/examples/README.md +0 -0
  630. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/examples/adapt-demo.sh +0 -0
  631. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/examples/boost-run-prototype.sh +0 -0
  632. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/index.html +0 -0
  633. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/noxfile.py +0 -0
  634. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/pyproject.toml +0 -0
  635. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/requirements/coverage-tools.in +0 -0
  636. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/requirements/coverage-tools.txt +0 -0
  637. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/requirements/lint-tools.in +0 -0
  638. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/requirements/lint-tools.txt +0 -0
  639. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/requirements/mutation-tools.in +0 -0
  640. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/requirements/mutation-tools.txt +0 -0
  641. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/requirements/platform-pins.lock +0 -0
  642. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/requirements/release-tools.in +0 -0
  643. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/requirements/release-tools.txt +0 -0
  644. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/requirements/test-tools.in +0 -0
  645. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/requirements/test-tools.txt +0 -0
  646. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/a11y_check.py +0 -0
  647. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/add_spdx_headers.py +0 -0
  648. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/bench_cli.sh +0 -0
  649. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/build_command_reference.py +0 -0
  650. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/build_demo_index.py +0 -0
  651. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/build_registries.py +0 -0
  652. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/build_roadmap.py +0 -0
  653. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/build_scale_corpus.py +0 -0
  654. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/build_vex.py +0 -0
  655. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/check_anchors.py +0 -0
  656. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/check_branch_current.py +0 -0
  657. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/check_dco.py +0 -0
  658. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/check_licenses.py +0 -0
  659. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/check_reproducible.py +0 -0
  660. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/check_required_checks.py +0 -0
  661. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/ensure_eval_corpus.sh +0 -0
  662. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/eval_corpus.py +0 -0
  663. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/eval_explain.py +0 -0
  664. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/eval_gate.py +0 -0
  665. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/eval_recommend.py +0 -0
  666. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/eval_retrieval.py +0 -0
  667. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/eval_stats_summary.py +0 -0
  668. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/eval_tools.py +0 -0
  669. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/import_budget.py +0 -0
  670. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/lock_toolchain.py +0 -0
  671. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/measure_near_duplicate_bound.py +0 -0
  672. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/measure_registry.py +0 -0
  673. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/mutation_gate.py +0 -0
  674. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/mutation_weights.json +0 -0
  675. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/normalize_sdist.py +0 -0
  676. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/page_budget.py +0 -0
  677. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/perf_gate.py +0 -0
  678. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/post_deploy_smoke.py +0 -0
  679. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/publish_eval_json.py +0 -0
  680. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/publish_shards.py +0 -0
  681. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/release_guard.py +0 -0
  682. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/release_preflight.py +0 -0
  683. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/serve_docs.py +0 -0
  684. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/scripts/shard_plan.py +0 -0
  685. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/setup.cfg +0 -0
  686. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/sonar-project.properties +0 -0
  687. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/style/README.md +0 -0
  688. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/style/boost.css +0 -0
  689. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/style/boost.js +0 -0
  690. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/style/demo.html +0 -0
  691. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/bdd/features/adapt.feature +0 -0
  692. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/bdd/features/browse.feature +0 -0
  693. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/bdd/features/count.feature +0 -0
  694. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/bdd/features/discover.feature +0 -0
  695. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/bdd/features/doctor.feature +0 -0
  696. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/bdd/features/environment.py +0 -0
  697. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/bdd/features/explain.feature +0 -0
  698. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/bdd/features/index.feature +0 -0
  699. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/bdd/features/install.feature +0 -0
  700. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/bdd/features/list.feature +0 -0
  701. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/bdd/features/mcp.feature +0 -0
  702. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/bdd/features/search.feature +0 -0
  703. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/bdd/features/steps/cli_steps.py +0 -0
  704. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/bdd/features/steps/discovery_steps.py +0 -0
  705. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/bdd/features/steps/mcp_steps.py +0 -0
  706. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/bdd/features/steps/quality_steps.py +0 -0
  707. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/conftest.py +0 -0
  708. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/eval/baseline.json +0 -0
  709. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/eval/explain.jsonl +0 -0
  710. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/eval/fixtures/claude_init_event.jsonl +0 -0
  711. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/eval/golden-natural.jsonl +0 -0
  712. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/eval/golden.jsonl +0 -0
  713. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/eval/recommend.jsonl +0 -0
  714. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/eval/taps-scale.txt +0 -0
  715. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/eval/taps.txt +0 -0
  716. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/eval/tool_calls.jsonl +0 -0
  717. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/functional/test_bmad_all_hosts.py +0 -0
  718. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/functional/test_capabilities_policy.py +0 -0
  719. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/functional/test_cli_adapt.py +0 -0
  720. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/functional/test_cli_bmad.py +0 -0
  721. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/functional/test_cli_catalog.py +0 -0
  722. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/functional/test_cli_chat.py +0 -0
  723. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/functional/test_cli_configuration.py +0 -0
  724. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/functional/test_cli_discovery.py +0 -0
  725. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/functional/test_cli_hooks.py +0 -0
  726. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/functional/test_cli_hooks_gemini.py +0 -0
  727. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/functional/test_cli_info.py +0 -0
  728. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/functional/test_cli_intelligence.py +0 -0
  729. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/functional/test_cli_pane_width.py +0 -0
  730. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/functional/test_cli_quickstart.py +0 -0
  731. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/functional/test_cli_tap_pins.py +0 -0
  732. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/functional/test_cli_taps.py +0 -0
  733. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/functional/test_cli_team.py +0 -0
  734. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/functional/test_everyday_loop.py +0 -0
  735. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/functional/test_integrity_enforce.py +0 -0
  736. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/functional/test_kind_conformance.py +0 -0
  737. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/functional/test_property_parsers.py +0 -0
  738. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/functional/test_run.py +0 -0
  739. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/functional/test_tap_signing.py +0 -0
  740. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/functional/test_workspace_scope.py +0 -0
  741. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/fuzz/README.md +0 -0
  742. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  743. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  744. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  745. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  746. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  747. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  748. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  749. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  750. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  751. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  752. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  753. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  754. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  755. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  756. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  757. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  758. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  759. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  760. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  761. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  762. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  763. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  764. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  765. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/fuzz/fuzz_frontmatter.py +0 -0
  766. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/fuzz/fuzz_registry.py +0 -0
  767. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/langchain/conftest.py +0 -0
  768. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/langchain/test_graph.py +0 -0
  769. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/langchain/test_loader.py +0 -0
  770. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/langchain/test_retriever.py +0 -0
  771. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/make_fixture.py +0 -0
  772. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/perf/test_benchmarks.py +0 -0
  773. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/smoke.sh +0 -0
  774. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_a11y_check.py +0 -0
  775. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_action_pin_lockstep.py +0 -0
  776. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_adapters.py +0 -0
  777. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_adapters_multi.py +0 -0
  778. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_adapters_runner.py +0 -0
  779. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_agents.py +0 -0
  780. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_ai.py +0 -0
  781. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_aihost.py +0 -0
  782. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_bmad_core.py +0 -0
  783. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_boost_first_offer.py +0 -0
  784. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_bootstrap.py +0 -0
  785. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_bot_pr_dco.py +0 -0
  786. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_branch_current.py +0 -0
  787. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_browse.py +0 -0
  788. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_builtin.py +0 -0
  789. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_capabilities.py +0 -0
  790. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_catalog.py +0 -0
  791. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_catalogbundle.py +0 -0
  792. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_chat.py +0 -0
  793. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_check_anchors.py +0 -0
  794. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_check_dco.py +0 -0
  795. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_check_licenses.py +0 -0
  796. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_check_reproducible.py +0 -0
  797. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_claude_settings.py +0 -0
  798. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_clean_internal_cache.py +0 -0
  799. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_cli_update_shards.py +0 -0
  800. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_cliparse.py +0 -0
  801. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_codeql_analysis_key.py +0 -0
  802. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_command_reference_fresh.py +0 -0
  803. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_community_health_files.py +0 -0
  804. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_compact.py +0 -0
  805. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_complete.py +0 -0
  806. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_complete_rc_block.py +0 -0
  807. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_config.py +0 -0
  808. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_content_dedupe.py +0 -0
  809. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_content_identity.py +0 -0
  810. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_crash_redaction.py +0 -0
  811. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_dedup_trust.py +0 -0
  812. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_demo_index.py +0 -0
  813. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_dense.py +0 -0
  814. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_dense_boilerplate_cluster.py +0 -0
  815. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_dense_embed_dedupe.py +0 -0
  816. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_dense_entry_reuse.py +0 -0
  817. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_dense_entry_vectors.py +0 -0
  818. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_dense_fallback.py +0 -0
  819. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_dense_fix_hint.py +0 -0
  820. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_dense_progress.py +0 -0
  821. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_dense_quantized.py +0 -0
  822. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_dense_ready_order.py +0 -0
  823. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_dense_shard_real_schema.py +0 -0
  824. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  825. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_dense_shards.py +0 -0
  826. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_dense_status.py +0 -0
  827. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_dense_status_cheap.py +0 -0
  828. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_dense_vector_dedupe.py +0 -0
  829. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_dependabot_config.py +0 -0
  830. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_distill_merge.py +0 -0
  831. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_docs_pages_linked.py +0 -0
  832. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_docsite_chrome.py +0 -0
  833. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_doctor_output_polish.py +0 -0
  834. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_drift_hint.py +0 -0
  835. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_ed25519.py +0 -0
  836. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_embed.py +0 -0
  837. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_embed_local.py +0 -0
  838. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_embed_truncated_response.py +0 -0
  839. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_entry_key.py +0 -0
  840. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_errors_and_cli_table.py +0 -0
  841. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_eval_baseline.py +0 -0
  842. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_eval_corpus.py +0 -0
  843. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_eval_faithfulness.py +0 -0
  844. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_eval_gate.py +0 -0
  845. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_eval_grading.py +0 -0
  846. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_eval_metrics.py +0 -0
  847. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_eval_stats_summary.py +0 -0
  848. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_eval_tools.py +0 -0
  849. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_eval_tools_probe.py +0 -0
  850. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  851. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_faithfulness.py +0 -0
  852. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_frontmatter.py +0 -0
  853. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_fuzz_targets.py +0 -0
  854. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  855. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_gitleaks_config.py +0 -0
  856. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_gitutil.py +0 -0
  857. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_gitutil_lfs.py +0 -0
  858. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_gitutil_sparse.py +0 -0
  859. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_gstack_coexistence.py +0 -0
  860. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_hook_settings_hosts.py +0 -0
  861. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_hookhost.py +0 -0
  862. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_imperative.py +0 -0
  863. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_import_budget.py +0 -0
  864. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_injectscan.py +0 -0
  865. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_install_permission_error.py +0 -0
  866. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_installscan.py +0 -0
  867. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_integrity.py +0 -0
  868. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_journal.py +0 -0
  869. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_jsonstate.py +0 -0
  870. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_langchain_packaging.py +0 -0
  871. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_link_ownership.py +0 -0
  872. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_localembed.py +0 -0
  873. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_localembed_e2e.py +0 -0
  874. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_lockfile.py +0 -0
  875. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_logs.py +0 -0
  876. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_marketing_counts.py +0 -0
  877. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_mcp.py +0 -0
  878. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_mcp_install_scan.py +0 -0
  879. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_mcp_read.py +0 -0
  880. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_mcpdecl.py +0 -0
  881. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_mcphost.py +0 -0
  882. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_measure_registry.py +0 -0
  883. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_minisign.py +0 -0
  884. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_mutation_hardening.py +0 -0
  885. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_mutation_subfile_shards.py +0 -0
  886. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_mutmut_source_paths.py +0 -0
  887. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_near_duplicate_collapse.py +0 -0
  888. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_nethttp.py +0 -0
  889. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_normalize_sdist.py +0 -0
  890. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_output.py +0 -0
  891. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_page_budget.py +0 -0
  892. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_paths.py +0 -0
  893. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_perf_gate.py +0 -0
  894. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_pkg_confusions.py +0 -0
  895. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_pkg_injection.py +0 -0
  896. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_pkg_secrets.py +0 -0
  897. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_platform_pins.py +0 -0
  898. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_policy.py +0 -0
  899. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_post_deploy_smoke.py +0 -0
  900. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_project_mcp_sidecar.py +0 -0
  901. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_projectlock.py +0 -0
  902. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_provenance.py +0 -0
  903. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_publish_golden_dataset.py +0 -0
  904. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_rag.py +0 -0
  905. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_rag_fastpath.py +0 -0
  906. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_rag_fusion.py +0 -0
  907. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_registries_fresh.py +0 -0
  908. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_registry.py +0 -0
  909. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_registry_categories.py +0 -0
  910. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_registry_control_chars.py +0 -0
  911. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_registry_parallel.py +0 -0
  912. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_release_guard.py +0 -0
  913. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_release_preflight.py +0 -0
  914. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_required_checks.py +0 -0
  915. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_rerank_cache.py +0 -0
  916. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_resolve.py +0 -0
  917. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_retrieve_any_near_duplicates.py +0 -0
  918. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_roadmap_fresh.py +0 -0
  919. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_rules.py +0 -0
  920. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_scale_corpus.py +0 -0
  921. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_scopes.py +0 -0
  922. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_secretscan.py +0 -0
  923. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_selfupdate.py +0 -0
  924. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_serve.py +0 -0
  925. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_serve_docs.py +0 -0
  926. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_shard_plan.py +0 -0
  927. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_shards.py +0 -0
  928. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_shards_incremental.py +0 -0
  929. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_shards_ingest.py +0 -0
  930. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_shards_matrix.py +0 -0
  931. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_smoke_covers_every_command.py +0 -0
  932. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_spdx_headers.py +0 -0
  933. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_spin.py +0 -0
  934. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_stackprobe.py +0 -0
  935. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_staleness.py +0 -0
  936. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_store_materialize.py +0 -0
  937. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  938. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_tap_pins.py +0 -0
  939. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_token_parity.py +0 -0
  940. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_toolchain_lock.py +0 -0
  941. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_trustaudit.py +0 -0
  942. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_typedvalue.py +0 -0
  943. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_typosquat.py +0 -0
  944. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_updatediff.py +0 -0
  945. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_util.py +0 -0
  946. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_version.py +0 -0
  947. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_version_tags.py +0 -0
  948. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_vex.py +0 -0
  949. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_visual_harness_flags.py +0 -0
  950. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_workflow_concurrency.py +0 -0
  951. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  952. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  953. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_workflow_timeouts.py +0 -0
  954. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_workflows.py +0 -0
  955. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  956. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/visual/a11y_check.mjs +0 -0
  957. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/visual/console_check.mjs +0 -0
  958. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/visual/package-lock.json +0 -0
  959. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/visual/package.json +0 -0
  960. {boost_skill_cli-1.2.93 → boost_skill_cli-1.2.95}/tests/visual/visual_check.mjs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.93
3
+ Version: 1.2.95
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License-Expression: Apache-2.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.2.93'
22
- __version_tuple__ = version_tuple = (1, 2, 93)
21
+ __version__ = version = '1.2.95'
22
+ __version_tuple__ = version_tuple = (1, 2, 95)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -664,6 +664,15 @@ def cmd_sync(argv: list[str]) -> int:
664
664
  out.info("%s → %s" % (item[0], item[1]))
665
665
  elif key == "missing_materializations":
666
666
  out.info("%s %s" % (item[0], item[1])) # (kind, name)
667
+ elif key == "blocked_links":
668
+ # (skill, agent, path) — the general str()-of-a-tuple
669
+ # fallback below prints this verbatim as
670
+ # "('brainstorming', 'windsurf', '/private/tmp/.../
671
+ # brainstorming')", which is what the live warning at the
672
+ # bottom of this command deliberately does not do.
673
+ name, agent, path = item
674
+ out.info("%s → %s (%s in the way)"
675
+ % (name, agent, _tilde(Path(path))))
667
676
  else:
668
677
  out.info(_tilde(item))
669
678
  return 0
@@ -699,9 +708,12 @@ def cmd_sync(argv: list[str]) -> int:
699
708
  left = [n for n in orphans if n not in pruned]
700
709
  blocked = plan["blocked_links"]
701
710
  if args.json:
711
+ # `sync --diff --json` above is indent=2; this printed one unindented
712
+ # line, so the two `--json` shapes of the same command disagreed on
713
+ # style for no reason tied to their content.
702
714
  print(json.dumps({"actions": actions, "pruned": pruned,
703
715
  "orphaned_store": left, "out_of_scope_links": oos,
704
- "blocked_links": blocked}))
716
+ "blocked_links": blocked}, indent=2))
705
717
  return 0
706
718
  for a in actions:
707
719
  out.ok(a)
@@ -617,16 +617,20 @@ def cmd_attest(argv):
617
617
  "sha256": (entry.get("sha256") or "")[:12]}
618
618
  if args.verify:
619
619
  if kind == "skill":
620
- sdir = store.skill_store_dir(name)
621
- rec["sha_ok"] = (sdir.is_dir()
622
- and util.sha256_dir(sdir) == entry.get("sha256"))
620
+ st = integrity.status(name, entry)
623
621
  else:
624
622
  # The artifact the agent loads, against the hash recorded when
625
623
  # it was written. UNLOCKED (a pre-hash entry) never fails.
626
- rec["sha_ok"] = integrity.materialized_status(name, entry) not in (
627
- integrity.STATUS_MODIFIED, integrity.STATUS_MISSING)
624
+ st = integrity.materialized_status(name, entry)
625
+ rec["sha_ok"] = st not in (integrity.STATUS_MODIFIED,
626
+ integrity.STATUS_MISSING)
628
627
  rec["journal"] = ev is not None
629
628
  if not rec["sha_ok"]:
629
+ # A missing store dir / materialized artifact is not a content
630
+ # change — conflating the two sends the user hunting for
631
+ # tampering when the remedy is `boost heal`.
632
+ rec["reason"] = ("missing" if st == integrity.STATUS_MISSING
633
+ else "modified")
630
634
  failures += 1
631
635
  records.append(rec)
632
636
 
@@ -646,9 +650,15 @@ def cmd_attest(argv):
646
650
  if args.verify:
647
651
  for r in records:
648
652
  if not r["sha_ok"]:
649
- out.warn("%s: %s content no longer matches the lock sha"
650
- % (r["name"], "store" if r["kind"] == "skill"
651
- else "materialized"))
653
+ if r["reason"] == "missing":
654
+ msg = ("store directory missing (boost heal)"
655
+ if r["kind"] == "skill"
656
+ else "materialized file missing")
657
+ else:
658
+ msg = ("%s content no longer matches the lock sha"
659
+ % ("store" if r["kind"] == "skill"
660
+ else "materialized"))
661
+ out.warn("%s: %s" % (r["name"], msg))
652
662
  elif not r["journal"]:
653
663
  out.warn("%s: no journal record (installed before journaling?)" % r["name"])
654
664
  else:
@@ -1632,9 +1632,22 @@ def sync_plan() -> dict[str, list]:
1632
1632
  # is already "reinstall this skill from its tap", which is exactly what
1633
1633
  # a gutted directory needs, and reusing it means sync_apply needs no
1634
1634
  # change at all.
1635
- if not sdir.is_dir() or not (sdir / "SKILL.md").is_file():
1635
+ #
1636
+ # This used to `continue` here, which skipped agent-link classification
1637
+ # for the entry entirely — so a foreign file already occupying a link
1638
+ # path went unreported until a *second* `sync` noticed the repair had
1639
+ # not actually relinked that agent. The classification below reads
1640
+ # only the agent dir, never the store, so running it costs nothing
1641
+ # even while the store copy is still missing — see the `missing_store`
1642
+ # check further down, which still lets it feed `blocked_links` but
1643
+ # keeps it out of `missing_links`: `sync_apply` repairs a missing
1644
+ # store by reinstalling from the tap, which relinks every non-blocked
1645
+ # agent as one step, and that reinstall runs *after* this plan is
1646
+ # built, so a `missing_links` entry here would have `sync_apply` try
1647
+ # to link a store directory that does not exist yet.
1648
+ missing_store = not sdir.is_dir() or not (sdir / "SKILL.md").is_file()
1649
+ if missing_store:
1636
1650
  plan["missing_store"].append(name)
1637
- continue
1638
1651
  if entry.get("quarantined"):
1639
1652
  continue
1640
1653
  # A deliberate sideline (`focus`, `profile use`, `context apply`)
@@ -1659,11 +1672,11 @@ def sync_plan() -> dict[str, list]:
1659
1672
  # A symlink is boost's to replace even when it dangles; anything
1660
1673
  # else that exists is someone else's file and stays put.
1661
1674
  if link.is_symlink():
1662
- if not link.exists():
1675
+ if not link.exists() and not missing_store:
1663
1676
  plan["missing_links"].append((name, agent))
1664
1677
  elif link.exists():
1665
1678
  plan["blocked_links"].append((name, agent, str(link)))
1666
- else:
1679
+ elif not missing_store:
1667
1680
  plan["missing_links"].append((name, agent))
1668
1681
  # The other direction, which nothing checked: a link that exists in an
1669
1682
  # agent the declaration excludes. The loop above is narrowed to the
@@ -1802,7 +1815,11 @@ def sync_apply(plan: dict[str, list]) -> list[str]:
1802
1815
  p = Path(path)
1803
1816
  if p.is_symlink():
1804
1817
  p.unlink()
1805
- actions.append("removed stale link %s" % path)
1818
+ # `--diff` shows this same path tilde-contracted (`_tilde` in
1819
+ # commands/pkg.py); the raw absolute string here made the two
1820
+ # views of one path disagree in the exact case a user compares
1821
+ # them — planned vs. applied.
1822
+ actions.append("removed stale link %s" % paths.tilde(path))
1806
1823
  for name in plan["missing_store"]:
1807
1824
  entry = lockfile.get_skill(name) or {}
1808
1825
  tap_name = entry.get("tap")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.93
3
+ Version: 1.2.95
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License-Expression: Apache-2.0
@@ -2,15 +2,15 @@
2
2
  id: audit-attest-findings
3
3
  board: code
4
4
  section: trust
5
- status: planned
5
+ status: shipped
6
6
  category: Trust · UX
7
7
  complexity: S
8
8
  impact: Low
9
9
  wow: 1
10
10
  note: a deleted store dir is reported as a sha mismatch; drift names the same state correctly
11
11
  order: 248
12
- owner:
13
- pr:
12
+ owner: loop/attest-missing-vs-modified
13
+ pr: 757
14
14
  title: "boost attest: CLI audit findings (2026-08)"
15
15
  ---
16
16
  <b><code>attest --verify</code> misdiagnoses a missing artifact as a content change.</b> After
@@ -2,15 +2,15 @@
2
2
  id: audit-sync-findings
3
3
  board: code
4
4
  section: dx
5
- status: planned
5
+ status: shipped
6
6
  category: CLI · Bug
7
7
  complexity: M
8
8
  impact: Med
9
9
  wow: 2
10
10
  note: "First sync run hides a blocked link; --diff prints it as a raw Python tuple"
11
11
  order: 293
12
- owner:
13
- pr:
12
+ owner: loop/sync-blocked-link-report
13
+ pr: 813
14
14
  title: "boost sync: CLI audit findings (2026-08)"
15
15
  ---
16
16
  <b>Repairing a missing store dir silently skips a blocked agent link — only a second run reports it.</b> With the store dir deleted and a foreign dir at <code>~/.windsurf/skills/brainstorming</code>: <code>sync --diff</code> showed only missing-store plus 4 stale links, nothing about windsurf; the first <code>sync</code> printed <em>"&#10003; reinstalled missing brainstorming from sickn33/antigravity-awesome-skills"</em> with no windsurf mention (the link was not created — lock agents ended as claude-code, cursor, antigravity); only a second <code>sync</code> said <em>"! 1 agent link could not be created: brainstorming &rarr; windsurf (~/.windsurf/skills/brainstorming in the way)…"</em>. Cause: <code>sync_plan</code> (<code>core/store.py:1471-1473</code>) <code>continue</code>s past link classification when the store dir is missing, and <code>sync_apply</code> (<code>store.py:1651</code>) discards <code>install()</code>'s <code>InstallResult</code>, whose <code>.conflicts</code> names the refused link. Surface those conflicts as blocked-link warnings and still classify agent links for a missing-store entry (or re-plan after repair). This is the residual missing-store case of the shipped fix — note it in <code>docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md</code>. Unit test: missing store + foreign dir reported in one run.
@@ -2,15 +2,15 @@
2
2
  id: mutation-shards-rerun-full-set-every-push
3
3
  board: code
4
4
  section: pipeline
5
- status: planned
5
+ status: inflight
6
6
  category: CI · Performance
7
7
  complexity: M
8
8
  impact: Med
9
9
  wow: 2
10
10
  note: a re-push repays six ~20-min shards from zero; mutmut's .meta already holds the answers
11
11
  order: 307
12
- owner:
13
- pr:
12
+ owner: loop/mutation-shard-cache
13
+ pr: 801
14
14
  title: "Mutation shards re-run <em>every</em> mutant on every push of the same PR"
15
15
  ---
16
16
  <b>&ldquo;Mutation shard actions take about 20 minutes and re-run with each
@@ -9345,7 +9345,7 @@ about vectors that were refreshed that morning.</p></details>
9345
9345
  </article>
9346
9346
 
9347
9347
  <article class="cap rcard" id="mutation-shards-rerun-full-set-every-push">
9348
- <div class="head"><span class="pill planned">Planned</span><span class="cat">CI · Performance</span></div>
9348
+ <div class="head"><span class="pill inflight">In flight</span><span class="cat">CI · Performance</span></div>
9349
9349
  <h3>Mutation shards re-run <em>every</em> mutant on every push of the same PR</h3>
9350
9350
  <p><b>&ldquo;Mutation shard actions take about 20 minutes and re-run with each
9351
9351
  commit.&rdquo;</b> The user's words, and the workflow agrees: six
@@ -14110,13 +14110,14 @@ Found by the 2026-08 CLI audit (cluster <code>simulate-text-polish</code>); repr
14110
14110
  </article>
14111
14111
 
14112
14112
  <article class="cap rcard" id="audit-sync-findings">
14113
- <div class="head"><span class="pill planned">Planned</span><span class="cat">CLI · Bug</span></div>
14113
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">CLI · Bug</span></div>
14114
14114
  <h3>boost sync: CLI audit findings (2026-08)</h3>
14115
+ <details class="cardbody"><summary>Write-up</summary>
14115
14116
  <p><b>Repairing a missing store dir silently skips a blocked agent link — only a second run reports it.</b> With the store dir deleted and a foreign dir at <code>~/.windsurf/skills/brainstorming</code>: <code>sync --diff</code> showed only missing-store plus 4 stale links, nothing about windsurf; the first <code>sync</code> printed <em>"&#10003; reinstalled missing brainstorming from sickn33/antigravity-awesome-skills"</em> with no windsurf mention (the link was not created — lock agents ended as claude-code, cursor, antigravity); only a second <code>sync</code> said <em>"! 1 agent link could not be created: brainstorming &rarr; windsurf (~/.windsurf/skills/brainstorming in the way)…"</em>. Cause: <code>sync_plan</code> (<code>core/store.py:1471-1473</code>) <code>continue</code>s past link classification when the store dir is missing, and <code>sync_apply</code> (<code>store.py:1651</code>) discards <code>install()</code>'s <code>InstallResult</code>, whose <code>.conflicts</code> names the refused link. Surface those conflicts as blocked-link warnings and still classify agent links for a missing-store entry (or re-plan after repair). This is the residual missing-store case of the shipped fix — note it in <code>docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md</code>. Unit test: missing store + foreign dir reported in one run.
14116
14117
 
14117
14118
  <b><code>--diff</code> renders blocked links as a raw Python tuple, and the two modes disagree on formatting.</b> Observed: <em>"==&gt; agent links blocked by a foreign file (1)"</em> then <code>('brainstorming', 'windsurf', '/private/tmp/…/.windsurf/skills/brainstorming')</code> — <code>_PAIR_KEYS</code> (<code>commands/pkg.py:581-582</code>) covers only 2-tuples, so the 3-tuple falls to the <code>str()</code> else branch (<code>pkg.py:620-625</code>). Also apply says <em>"removed stale link /private/tmp/…/ghost"</em> where <code>--diff</code> shows <code>~/.claude/skills/ghost</code> (<code>store.py:1634</code> uses raw absolute paths), and <code>sync --diff --json</code> is indent=2 (<code>pkg.py:603</code>) while <code>sync --json</code> is one line (<code>pkg.py:660-662</code>). Fix in <code>cmd_sync</code>: a blocked_links branch printing <em>"brainstorming &rarr; windsurf (~/.windsurf/skills/brainstorming in the way)"</em>, <code>_tilde</code> paths in apply's action strings, one <code>json.dumps</code> style. No flag changes, so <code>docs/commands.html</code> needs no regeneration.
14118
14119
 
14119
- Found by the 2026-08 CLI audit (clusters <code>sync-blocked-link-report</code>, <code>sync-diff-formatting</code>); repro in the audit log.</p>
14120
+ Found by the 2026-08 CLI audit (clusters <code>sync-blocked-link-report</code>, <code>sync-diff-formatting</code>); repro in the audit log.</p></details>
14120
14121
  <div class="meta">
14121
14122
  <span class="m">Complexity <b>M</b></span>
14122
14123
  <span class="m">Impact <b>Med</b></span>
@@ -16940,8 +16941,9 @@ Found by the 2026-08 CLI audit (cluster <code>trust-tampered-manifest</code>); r
16940
16941
  </article>
16941
16942
 
16942
16943
  <article class="cap rcard" id="audit-attest-findings">
16943
- <div class="head"><span class="pill planned">Planned</span><span class="cat">Trust · UX</span></div>
16944
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Trust · UX</span></div>
16944
16945
  <h3>boost attest: CLI audit findings (2026-08)</h3>
16946
+ <details class="cardbody"><summary>Write-up</summary>
16945
16947
  <p><b><code>attest --verify</code> misdiagnoses a missing artifact as a content change.</b> After
16946
16948
  deleting <code>~/.agents/skills/brainstorming</code>, <code>boost attest --verify brainstorming</code>
16947
16949
  prints <em>&ldquo;! brainstorming: store content no longer matches the lock sha&rdquo;</em> (exit 1)
@@ -16960,7 +16962,7 @@ wording for the genuinely modified case, and in <code>--json</code> add a <code>
16960
16962
  (<code>missing</code>/<code>modified</code>) rather than repurposing the boolean. No doc changes.
16961
16963
 
16962
16964
  <br><br>Found by the 2026-08 CLI audit (cluster <code>attest-missing-store-dir</code>); repro in the
16963
- audit log.</p>
16965
+ audit log.</p></details>
16964
16966
  <div class="meta">
16965
16967
  <span class="m">Complexity <b>S</b></span>
16966
16968
  <span class="m">Impact <b>Low</b></span>
@@ -88,11 +88,13 @@ Usage
88
88
  mutation_shards.py plan --shards N --explain # the whole split + speedup cap
89
89
  mutation_shards.py merge --shards N --into mutants results/* # rebuild results
90
90
  mutation_shards.py weights --source mutants # refresh the balance hints
91
+ mutation_shards.py cache-key # hash half of a shard's actions/cache key
91
92
  """
92
93
  from __future__ import annotations
93
94
 
94
95
  import argparse
95
96
  import ast
97
+ import hashlib
96
98
  import json
97
99
  import sys
98
100
  from pathlib import Path
@@ -722,6 +724,76 @@ def cmd_scope(args: argparse.Namespace) -> int:
722
724
  return 0
723
725
 
724
726
 
727
+ # --------------------------------------------------------------------------
728
+ # cache key: reuse a shard's mutants/ results across pushes of the same PR
729
+ # --------------------------------------------------------------------------
730
+
731
+ # Same list as RELEVANT_PREFIXES, minus boost_cli/ itself. mutmut already
732
+ # reuses a source file's own results by content hash (per the module
733
+ # docstring's "Balance without a chicken-and-egg" -- mutmut's per-source
734
+ # hashing, not re-verified locally against the 3.7.0 pin here), so keying the
735
+ # actions/cache entry on boost_cli/ too would just repeat that reuse one
736
+ # level up, at the cost of evicting every mutant in the cache -- not just the
737
+ # ones in the file that changed -- on every core edit, which is most pushes.
738
+ # What mutmut does NOT re-derive on its own is which tests ran, which
739
+ # mutmut/pytest built the recorded exit codes, and the gate's own scripts;
740
+ # any of those changing must miss the cache and pay the full run, exactly as
741
+ # `is_relevant` already says for the scope job.
742
+ CACHE_KEY_PREFIXES = tuple(p for p in RELEVANT_PREFIXES if p != "boost_cli/")
743
+ CACHE_KEY_EXACT = RELEVANT_EXACT
744
+
745
+
746
+ def cache_key_paths(root: Path) -> list[Path]:
747
+ """Every file whose content can change a shard's cache key.
748
+
749
+ Mirrors ``is_relevant``'s own file list, minus ``boost_cli/`` (see
750
+ ``CACHE_KEY_PREFIXES``). A named file or directory that does not exist is
751
+ skipped rather than raising, so a fixture repo that only sets up part of
752
+ the tree still produces a stable key.
753
+ """
754
+ found: set[Path] = set()
755
+ for name in CACHE_KEY_EXACT:
756
+ path = root / name
757
+ if path.is_file():
758
+ found.add(path)
759
+ for prefix in CACHE_KEY_PREFIXES:
760
+ base = root / prefix
761
+ if base.is_dir():
762
+ found.update(f for f in base.rglob("*") if f.is_file())
763
+ elif base.is_file():
764
+ found.add(base)
765
+ return sorted(found)
766
+
767
+
768
+ def cache_key_hash(root: Path) -> str:
769
+ """A deterministic digest of every file ``cache_key_paths`` names.
770
+
771
+ Hashes content, not mtime or git status: a checkout's timestamps are not
772
+ reproducible across machines, but bytes are. Each file's path is folded
773
+ in alongside its content (relative to `root`, POSIX-normalized) so a
774
+ rename or an added/removed file changes the digest even when every
775
+ remaining file's bytes are untouched.
776
+ """
777
+ digest = hashlib.sha256()
778
+ for path in cache_key_paths(root):
779
+ digest.update(path.relative_to(root).as_posix().encode("utf-8"))
780
+ digest.update(b"\0")
781
+ digest.update(path.read_bytes())
782
+ digest.update(b"\0")
783
+ return digest.hexdigest()
784
+
785
+
786
+ def cmd_cache_key(args: argparse.Namespace) -> int:
787
+ """Print the hash half of a mutation shard's ``actions/cache`` key.
788
+
789
+ The workflow builds the full key itself (shard index + Python version +
790
+ this hash) -- this script has no reason to know either of the first two,
791
+ and folding them in here would just make the CI YAML a pass-through.
792
+ """
793
+ print(cache_key_hash(Path(args.root)))
794
+ return 0
795
+
796
+
725
797
  def cmd_weights(args: argparse.Namespace) -> int:
726
798
  """Record real mutant counts so the next split balances better.
727
799
 
@@ -827,6 +899,9 @@ def main() -> int:
827
899
  w.add_argument("--source", default="mutants", help="a mutants/ tree from a full run")
828
900
  w.set_defaults(func=cmd_weights)
829
901
 
902
+ k = sub.add_parser("cache-key", help="hash half of a shard's actions/cache key")
903
+ k.set_defaults(func=cmd_cache_key)
904
+
830
905
  args = ap.parse_args()
831
906
  return args.func(args)
832
907
 
@@ -399,6 +399,39 @@ class TestSync:
399
399
  assert link.is_symlink() and link.exists()
400
400
  assert not ghost.is_symlink()
401
401
 
402
+ def test_diff_renders_a_blocked_link_as_a_readable_line(self, boost, installed):
403
+ # `blocked_links` rows are (skill, agent, path) 3-tuples. `_PAIR_KEYS`
404
+ # only special-cases 2-tuples, so this used to fall through to the
405
+ # generic `str()` branch and print the raw Python tuple, e.g.
406
+ # "('brainstorming', 'cursor', '/private/tmp/.../cursor/skills/
407
+ # brainstorming')".
408
+ link = paths.home() / ".cursor" / "skills" / "brainstorming"
409
+ link.unlink()
410
+ link.mkdir() # a foreign real directory
411
+
412
+ r = boost("sync", "--diff")
413
+ assert "agent links blocked by a foreign file (1)" in r.out
414
+ assert "brainstorming → cursor" in r.out
415
+ assert "in the way" in r.out
416
+ assert "('brainstorming'" not in r.out, "printed the raw Python tuple"
417
+
418
+ def test_a_blocked_link_behind_a_missing_store_is_reported_in_one_run(
419
+ self, boost, installed):
420
+ # The residual case: repairing a missing store dir used to skip agent
421
+ # link classification entirely, so a foreign file already in the way
422
+ # went unreported until a *second* `sync` — this run must surface it
423
+ # in the very first one, right alongside the reinstall.
424
+ link = paths.home() / ".cursor" / "skills" / "brainstorming"
425
+ link.unlink()
426
+ link.mkdir()
427
+ shutil.rmtree(paths.store_dir() / "brainstorming")
428
+
429
+ r = boost("sync")
430
+ assert "reinstalled missing brainstorming" in r.out
431
+ assert "could not be created" in r.out
432
+ assert "brainstorming → cursor" in r.out
433
+ assert "in the way" in r.out
434
+
402
435
  def test_orphan_reported_and_pruned(self, boost, installed):
403
436
  orphan = paths.store_dir() / "orphan-x"
404
437
  orphan.mkdir()
@@ -1032,6 +1032,21 @@ class TestGovernedIntegritySurface:
1032
1032
  assert "house-style (rule)" in r.out
1033
1033
  assert "attestation OK" in r.out
1034
1034
 
1035
+ def test_attest_names_a_missing_materialized_rule(
1036
+ self, boost, installed, fixture_tap_src, tmp_path):
1037
+ # The rule/workflow branch folded a missing materialized artifact
1038
+ # into the same "content no longer matches" wording as an edited
1039
+ # one; it must say "missing" instead, same as the skill branch.
1040
+ self._install_rule(boost, fixture_tap_src, tmp_path,
1041
+ "attest-missing-tap")
1042
+ (paths.home() / ".claude" / "CLAUDE.md").unlink()
1043
+ r = boost("attest", "house-style", "--verify", expect=1)
1044
+ assert "house-style: materialized file missing" in r.out
1045
+ assert "no longer matches the lock sha" not in r.out
1046
+ data = json.loads(boost("attest", "house-style", "--verify",
1047
+ "--json", expect=1).out)
1048
+ assert data["skills"][0]["reason"] == "missing"
1049
+
1035
1050
  def test_drift_reports_quarantined_not_missing(self, boost, installed,
1036
1051
  fixture_tap_src, tmp_path):
1037
1052
  self._install_rule(boost, fixture_tap_src, tmp_path, "drift-tap")
@@ -1394,6 +1409,22 @@ class TestAttest:
1394
1409
  assert data["failed"] == 1
1395
1410
  assert data["skills"][0]["sha_ok"] is False
1396
1411
  assert data["skills"][0]["journal"] is True
1412
+ assert data["skills"][0]["reason"] == "modified"
1413
+
1414
+ def test_missing_store_dir_verify_names_it_missing_not_modified(
1415
+ self, boost, installed):
1416
+ # A deleted store dir used to be reported identically to tampered
1417
+ # content ("content no longer matches the lock sha"), sending the
1418
+ # user hunting for tampering when the remedy is `boost heal` — the
1419
+ # same state `boost drift` already names correctly as store-missing.
1420
+ shutil.rmtree(paths.store_dir() / "brainstorming")
1421
+ r = boost("attest", "--verify", expect=1)
1422
+ assert "brainstorming: store directory missing (boost heal)" in r.out
1423
+ assert "no longer matches the lock sha" not in r.out
1424
+ data = json.loads(boost("attest", "--verify", "--json",
1425
+ expect=1).out)
1426
+ assert data["skills"][0]["sha_ok"] is False
1427
+ assert data["skills"][0]["reason"] == "missing"
1397
1428
 
1398
1429
 
1399
1430
  # ── health ───────────────────────────────────────────────────────────────
@@ -376,6 +376,135 @@ def test_same_basename_in_different_packages_stays_distinct(tmp_path):
376
376
  assert pats == {"boost_cli.core.util.*", "boost_cli.core.rag.util.*"}
377
377
 
378
378
 
379
+ # --------------------------------------------------------------------------
380
+ # cache-key: the hash half of a shard's actions/cache key
381
+ # --------------------------------------------------------------------------
382
+
383
+ def _cache_repo(tmp_path):
384
+ """A fake checkout with one file under every CACHE_KEY_PREFIXES entry,
385
+ plus a core source file and an irrelevant doc, so a single fixture can
386
+ exercise inclusion, exclusion, and irrelevance in one place."""
387
+ (tmp_path / "boost_cli" / "core").mkdir(parents=True)
388
+ (tmp_path / "boost_cli" / "core" / "store.py").write_text("x = 1\n")
389
+ (tmp_path / "tests").mkdir()
390
+ (tmp_path / "tests" / "test_store.py").write_text("def test_a(): pass\n")
391
+ (tmp_path / "requirements").mkdir()
392
+ (tmp_path / "requirements" / "mutation-tools.txt").write_text("mutmut==3.7.0\n")
393
+ (tmp_path / "scripts").mkdir()
394
+ (tmp_path / "scripts" / "mutation_gate.py").write_text("# gate\n")
395
+ (tmp_path / "scripts" / "mutation_shards.py").write_text("# shards\n")
396
+ (tmp_path / ".github" / "workflows").mkdir(parents=True)
397
+ (tmp_path / ".github" / "workflows" / "ci.yml").write_text("name: ci\n")
398
+ (tmp_path / "setup.cfg").write_text("[mutmut]\n")
399
+ (tmp_path / "pyproject.toml").write_text("[project]\n")
400
+ (tmp_path / "docs").mkdir()
401
+ (tmp_path / "docs" / "index.html").write_text("<html></html>\n")
402
+ return tmp_path
403
+
404
+
405
+ def test_cache_key_paths_covers_every_prefix_and_excludes_core(tmp_path):
406
+ repo = _cache_repo(tmp_path)
407
+ names = {p.relative_to(repo).as_posix() for p in ms.cache_key_paths(repo)}
408
+ assert names == {
409
+ "tests/test_store.py",
410
+ "requirements/mutation-tools.txt",
411
+ "scripts/mutation_gate.py",
412
+ "scripts/mutation_shards.py",
413
+ ".github/workflows/ci.yml",
414
+ "setup.cfg",
415
+ "pyproject.toml",
416
+ }
417
+ assert "boost_cli/core/store.py" not in names
418
+ assert "docs/index.html" not in names
419
+
420
+
421
+ def test_cache_key_paths_skips_missing_files(tmp_path):
422
+ """A fixture repo that only sets up part of the tree still works."""
423
+ (tmp_path / "tests").mkdir()
424
+ (tmp_path / "tests" / "test_a.py").write_text("x = 1\n")
425
+ assert [p.name for p in ms.cache_key_paths(tmp_path)] == ["test_a.py"]
426
+
427
+
428
+ def test_cache_key_hash_is_deterministic(tmp_path):
429
+ repo = _cache_repo(tmp_path)
430
+ first = ms.cache_key_hash(repo)
431
+ for _ in range(3):
432
+ assert ms.cache_key_hash(repo) == first
433
+
434
+
435
+ def test_cache_key_hash_changes_when_a_relevant_file_changes(tmp_path):
436
+ repo = _cache_repo(tmp_path)
437
+ before = ms.cache_key_hash(repo)
438
+ (repo / "tests" / "test_store.py").write_text("def test_a(): assert False\n")
439
+ assert ms.cache_key_hash(repo) != before
440
+
441
+
442
+ def test_cache_key_hash_changes_when_the_gate_scripts_change(tmp_path):
443
+ repo = _cache_repo(tmp_path)
444
+ before = ms.cache_key_hash(repo)
445
+ (repo / "scripts" / "mutation_gate.py").write_text("# gate v2\n")
446
+ assert ms.cache_key_hash(repo) != before
447
+
448
+
449
+ def test_cache_key_hash_changes_when_ci_yml_changes(tmp_path):
450
+ repo = _cache_repo(tmp_path)
451
+ before = ms.cache_key_hash(repo)
452
+ (repo / ".github" / "workflows" / "ci.yml").write_text("name: ci\non: push\n")
453
+ assert ms.cache_key_hash(repo) != before
454
+
455
+ def test_cache_key_hash_ignores_core_source_changes(tmp_path):
456
+ """The whole point: mutmut's own per-file hashing already handles
457
+ boost_cli/ reuse, so the cache key must not evict on a core-only edit."""
458
+ repo = _cache_repo(tmp_path)
459
+ before = ms.cache_key_hash(repo)
460
+ (repo / "boost_cli" / "core" / "store.py").write_text("x = 2\n")
461
+ assert ms.cache_key_hash(repo) == before
462
+
463
+
464
+ def test_cache_key_hash_ignores_irrelevant_files(tmp_path):
465
+ repo = _cache_repo(tmp_path)
466
+ before = ms.cache_key_hash(repo)
467
+ (repo / "docs" / "index.html").write_text("<html>changed</html>\n")
468
+ (repo / "README.md").write_text("hello\n")
469
+ assert ms.cache_key_hash(repo) == before
470
+
471
+
472
+ def test_cache_key_hash_changes_on_a_new_relevant_file(tmp_path):
473
+ """Content alone is not enough: adding a file must also change the key,
474
+ or a brand-new test would silently reuse a cache that never ran it."""
475
+ repo = _cache_repo(tmp_path)
476
+ before = ms.cache_key_hash(repo)
477
+ (repo / "tests" / "test_new.py").write_text("def test_b(): pass\n")
478
+ assert ms.cache_key_hash(repo) != before
479
+
480
+
481
+ def test_cache_key_hash_distinguishes_same_bytes_at_different_paths(tmp_path):
482
+ """Renaming a same-content file must change the key: the path is hashed
483
+ in too, not just the concatenated bytes."""
484
+ repo_a = tmp_path / "a"
485
+ (repo_a / "tests").mkdir(parents=True)
486
+ (repo_a / "tests" / "test_one.py").write_text("x = 1\n")
487
+ repo_b = tmp_path / "b"
488
+ (repo_b / "tests").mkdir(parents=True)
489
+ (repo_b / "tests" / "test_two.py").write_text("x = 1\n")
490
+ assert ms.cache_key_hash(repo_a) != ms.cache_key_hash(repo_b)
491
+
492
+
493
+ def test_cache_key_hash_is_a_hex_sha256(tmp_path):
494
+ repo = _cache_repo(tmp_path)
495
+ key = ms.cache_key_hash(repo)
496
+ assert len(key) == 64
497
+ int(key, 16) # raises ValueError if not valid hex
498
+
499
+
500
+ def test_cmd_cache_key_prints_the_hash(tmp_path, capsys):
501
+ repo = _cache_repo(tmp_path)
502
+ rc = ms.cmd_cache_key(_ns(root=str(repo)))
503
+ assert rc == 0
504
+ out = capsys.readouterr().out.strip()
505
+ assert out == ms.cache_key_hash(repo)
506
+
507
+
379
508
  def test_pattern_is_dotted_on_every_platform(monkeypatch):
380
509
  """The dotted prefix must not depend on the OS path separator.
381
510
 
@@ -1015,7 +1015,10 @@ class TestSyncApply:
1015
1015
  ghost = paths.home() / ".claude" / "skills" / "ghost"
1016
1016
  ghost.symlink_to(paths.store_dir() / "ghost")
1017
1017
  actions = store.sync_apply(store.sync_plan())
1018
- assert actions == ["removed stale link %s" % ghost]
1018
+ # Tilde-contracted so this action string agrees with what `--diff`
1019
+ # shows for the same path (`_tilde` in commands/pkg.py) — the raw
1020
+ # absolute form used to make the two views disagree.
1021
+ assert actions == ["removed stale link %s" % paths.tilde(ghost)]
1019
1022
  assert not ghost.is_symlink()
1020
1023
 
1021
1024
  def test_missing_store_reinstalled_from_tap(self, brainstorming):