boost-skill-cli 1.2.76__tar.gz → 1.2.78__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 (955) hide show
  1. {boost_skill_cli-1.2.76/boost_skill_cli.egg-info → boost_skill_cli-1.2.78}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/commands/configuration.py +3 -2
  4. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/commands/discovery.py +5 -2
  5. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/commands/intelligence.py +2 -1
  6. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/commands/quality.py +3 -2
  7. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/commands/team.py +12 -9
  8. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/provenance.py +12 -0
  9. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78/boost_skill_cli.egg-info}/PKG-INFO +1 -1
  10. boost_skill_cli-1.2.78/docs/demo.gif +0 -0
  11. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-singular-plural-misses-1-skills-1-issue-need-1-skill-pass-ac.md +15 -4
  12. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-trust-verify-labels-a-manifest-tampered-after-signing-by-a-t.md +3 -3
  13. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-verify-drift-say-nothing-installed-exit-0-and-doctor-says-lo.md +11 -2
  14. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap.html +29 -7
  15. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/security-design.md +6 -0
  16. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/functional/test_cli_configuration.py +1 -1
  17. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/functional/test_cli_discovery.py +1 -1
  18. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/functional/test_cli_intelligence.py +1 -1
  19. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/functional/test_cli_quality.py +4 -4
  20. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/functional/test_cli_team.py +9 -3
  21. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/functional/test_kind_conformance.py +1 -1
  22. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/functional/test_tap_signing.py +35 -0
  23. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_provenance.py +20 -2
  24. boost_skill_cli-1.2.76/docs/demo.gif +0 -0
  25. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/.gitattributes +0 -0
  26. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/.gitignore +0 -0
  27. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/.gitleaks.toml +0 -0
  28. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/.htmlvalidate.json +0 -0
  29. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/.lighthouserc.json +0 -0
  30. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/.lycheeignore +0 -0
  31. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/.markdownlint-cli2.jsonc +0 -0
  32. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/.pre-commit-config.yaml +0 -0
  33. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/.stylelintrc.json +0 -0
  34. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/.vale/styles/boost/AIWriting.yml +0 -0
  35. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/.vale/styles/boost/Terminology.yml +0 -0
  36. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  37. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/.vale.ini +0 -0
  38. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/CLAUDE.md +0 -0
  39. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/CODE_OF_CONDUCT.md +0 -0
  40. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/CONTRIBUTING.md +0 -0
  41. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/DCO +0 -0
  42. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/GOVERNANCE.md +0 -0
  43. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/LICENSE +0 -0
  44. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/MAINTAINERS.md +0 -0
  45. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/MANIFEST.in +0 -0
  46. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/Makefile +0 -0
  47. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/README.md +0 -0
  48. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/SECURITY.md +0 -0
  49. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/SUPPORT.md +0 -0
  50. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost +0 -0
  51. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/__init__.py +0 -0
  52. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/__main__.py +0 -0
  53. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/cli.py +0 -0
  54. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/cliparse.py +0 -0
  55. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/commands/__init__.py +0 -0
  56. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/commands/_common.py +0 -0
  57. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/commands/bmad.py +0 -0
  58. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/commands/hooks.py +0 -0
  59. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/commands/info.py +0 -0
  60. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/commands/pkg.py +0 -0
  61. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/commands/quickstart.py +0 -0
  62. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/commands/run.py +0 -0
  63. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/commands/safety.py +0 -0
  64. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/commands/taps.py +0 -0
  65. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/__init__.py +0 -0
  66. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/adapters.py +0 -0
  67. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/agents.py +0 -0
  68. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/ai.py +0 -0
  69. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/aihost.py +0 -0
  70. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/bmad.py +0 -0
  71. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/bootstrap.py +0 -0
  72. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/browse.py +0 -0
  73. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/builtin.py +0 -0
  74. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/capabilities.py +0 -0
  75. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/catalog.py +0 -0
  76. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/catalogbundle.py +0 -0
  77. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/chat.py +0 -0
  78. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/claude_settings.py +0 -0
  79. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/complete.py +0 -0
  80. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/config.py +0 -0
  81. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/dense.py +0 -0
  82. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/ed25519.py +0 -0
  83. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/embed.py +0 -0
  84. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/faithfulness.py +0 -0
  85. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/frontmatter.py +0 -0
  86. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/gitutil.py +0 -0
  87. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/hookhost.py +0 -0
  88. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/imperative.py +0 -0
  89. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/injectscan.py +0 -0
  90. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/installscan.py +0 -0
  91. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/integrity.py +0 -0
  92. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/journal.py +0 -0
  93. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/localembed.py +0 -0
  94. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/lockfile.py +0 -0
  95. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/logs.py +0 -0
  96. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/mcp.py +0 -0
  97. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/mcpdecl.py +0 -0
  98. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/mcphost.py +0 -0
  99. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/minisign.py +0 -0
  100. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/nethttp.py +0 -0
  101. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/output.py +0 -0
  102. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/paths.py +0 -0
  103. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/policy.py +0 -0
  104. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/projectlock.py +0 -0
  105. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/rag.py +0 -0
  106. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/registry.py +0 -0
  107. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/resolve.py +0 -0
  108. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/rules.py +0 -0
  109. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/scopes.py +0 -0
  110. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/secretscan.py +0 -0
  111. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/selfupdate.py +0 -0
  112. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/serve.py +0 -0
  113. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/shards.py +0 -0
  114. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/stackprobe.py +0 -0
  115. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/staleness.py +0 -0
  116. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/store.py +0 -0
  117. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/trustaudit.py +0 -0
  118. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/typosquat.py +0 -0
  119. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/updatediff.py +0 -0
  120. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/util.py +0 -0
  121. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/core/workflows.py +0 -0
  122. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/data/registries.json +0 -0
  123. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/data/rules/boost-first.mdc +0 -0
  124. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/errors.py +0 -0
  125. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_cli/spin.py +0 -0
  126. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_langchain/__init__.py +0 -0
  127. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_langchain/_compat.py +0 -0
  128. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_langchain/graph.py +0 -0
  129. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_langchain/loader.py +0 -0
  130. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_langchain/py.typed +0 -0
  131. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_langchain/retriever.py +0 -0
  132. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_skill_cli.egg-info/SOURCES.txt +0 -0
  133. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  134. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  135. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_skill_cli.egg-info/requires.txt +0 -0
  136. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/boost_skill_cli.egg-info/top_level.txt +0 -0
  137. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/codecov.yml +0 -0
  138. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/.claude/settings.local.json +0 -0
  139. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/DEBUGGING.md +0 -0
  140. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/adapters.html +0 -0
  141. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/architecture/README.md +0 -0
  142. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/architecture/c4-components-core.md +0 -0
  143. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/architecture/c4-containers.md +0 -0
  144. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/architecture/c4-context.md +0 -0
  145. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/architecture/c4-dynamic-install.md +0 -0
  146. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/bmad.md +0 -0
  147. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/carousel/gifs/distill.gif +0 -0
  148. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/carousel/gifs/doctor.gif +0 -0
  149. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/carousel/gifs/explain.gif +0 -0
  150. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/carousel/gifs/hooks.gif +0 -0
  151. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/carousel/gifs/install.gif +0 -0
  152. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/carousel/gifs/pulse.gif +0 -0
  153. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/carousel/gifs/search.gif +0 -0
  154. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/carousel/gifs/tap.gif +0 -0
  155. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/carousel/tapes/distill.tape +0 -0
  156. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/carousel/tapes/doctor.tape +0 -0
  157. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/carousel/tapes/explain.tape +0 -0
  158. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/carousel/tapes/hooks.tape +0 -0
  159. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/carousel/tapes/install.tape +0 -0
  160. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/carousel/tapes/pulse.tape +0 -0
  161. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/carousel/tapes/search.tape +0 -0
  162. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/carousel/tapes/tap.tape +0 -0
  163. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/carousel.html +0 -0
  164. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/chat.html +0 -0
  165. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/code-review.md +0 -0
  166. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/commands.html +0 -0
  167. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/commit-audit.md +0 -0
  168. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/demo-index.json +0 -0
  169. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/demo.html +0 -0
  170. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/demo.tape +0 -0
  171. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/dependencies.md +0 -0
  172. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/design-roadmap.html +0 -0
  173. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/eval-latest.json +0 -0
  174. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/eval.html +0 -0
  175. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/index.html +0 -0
  176. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/langchain.html +0 -0
  177. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/mcp-hub.html +0 -0
  178. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/openssf-badge.md +0 -0
  179. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/openssf-playbook.md +0 -0
  180. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/rag-architecture.md +0 -0
  181. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D01.md +0 -0
  182. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D02.md +0 -0
  183. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D03.md +0 -0
  184. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D04.md +0 -0
  185. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D05.md +0 -0
  186. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D06.md +0 -0
  187. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D07.md +0 -0
  188. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D08.md +0 -0
  189. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D09.md +0 -0
  190. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D10.md +0 -0
  191. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D11.md +0 -0
  192. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D12.md +0 -0
  193. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D13.md +0 -0
  194. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D14.md +0 -0
  195. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D15.md +0 -0
  196. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D16.md +0 -0
  197. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D17.md +0 -0
  198. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D18.md +0 -0
  199. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D19.md +0 -0
  200. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D20.md +0 -0
  201. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D21.md +0 -0
  202. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D22.md +0 -0
  203. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D23.md +0 -0
  204. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D24.md +0 -0
  205. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D25.md +0 -0
  206. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D26.md +0 -0
  207. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/BOOST-D27.md +0 -0
  208. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  209. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  210. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  211. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  212. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  213. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/ai-backend-fanout.md +0 -0
  214. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  215. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  216. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  217. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  218. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-absorb-findings.md +0 -0
  219. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-adapt-findings.md +0 -0
  220. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-adapt-renders-every-sibling-of-a-flat-agents-dir-workflow-as.md +0 -0
  221. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-adapt-run-stats-edit-tag-export-reject-the-tap-name-qualifie.md +0 -0
  222. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-ai-degrade-note-blames-path-api-keys-regardless-of-cause-sev.md +0 -0
  223. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-attest-findings.md +0 -0
  224. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-audit-findings.md +0 -0
  225. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-bmad-findings.md +0 -0
  226. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-browse-findings.md +0 -0
  227. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-bundle-findings.md +0 -0
  228. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-catalog-findings.md +0 -0
  229. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-catalog-resolve-one-s-duplicate-name-hint-advertises-path-to.md +0 -0
  230. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-changelog-findings.md +0 -0
  231. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-chat-findings.md +0 -0
  232. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-clean-counts-failed-removals-as-cleaned-journals-the-inflate.md +0 -0
  233. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-cli-py-commands-summaries-and-parser-help-contradict-behavio.md +0 -0
  234. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-cohort-findings.md +0 -0
  235. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-completions-findings.md +0 -0
  236. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-config-findings.md +0 -0
  237. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-config-policy-set-store-type-unchecked-values-consumers-cras.md +0 -0
  238. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-context-findings.md +0 -0
  239. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-corrupt-settings-config-state-json-silently-read-as-empty-th.md +0 -0
  240. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-create-distill-infer-absorb-install-silently-replace-an-inst.md +0 -0
  241. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-create-findings.md +0 -0
  242. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-declined-confirms-never-name-y-boost-assume-yes-snapshot-cle.md +0 -0
  243. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-deps-findings.md +0 -0
  244. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-discover-findings.md +0 -0
  245. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-distill-s-heuristic-merge-drops-repeated-fences-braces-writi.md +0 -0
  246. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-doctor-findings.md +0 -0
  247. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-drift-findings.md +0 -0
  248. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-dry-runs-disagree-with-the-real-run-compact-counts-bytes-it.md +0 -0
  249. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-edit-findings.md +0 -0
  250. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-evolve-findings.md +0 -0
  251. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-explain-findings.md +0 -0
  252. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-export-findings.md +0 -0
  253. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-export-o-cohort-create-and-profile-save-silently-overwrite-e.md +0 -0
  254. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-fingerprint-findings.md +0 -0
  255. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-five-exit-70-crashes-on-bad-paths-data-catalog-export-serve.md +0 -0
  256. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-focus-profile-sideline-by-unlinking-without-recording-it-lis.md +0 -0
  257. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-git-operations-never-set-git-terminal-prompt-0-so-a-404-priv.md +0 -0
  258. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-health-findings.md +0 -0
  259. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-hooks-remove-n-cannot-find-hooks-boost-itself-added-unknown.md +0 -0
  260. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-import-all-skips-the-injection-secret-scans-and-the-per-skil.md +0 -0
  261. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-import-findings.md +0 -0
  262. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-index-findings.md +0 -0
  263. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-info-stats-explain-render-a-different-smaller-shape-for-rule.md +0 -0
  264. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-install-dry-run-promises-agents-the-real-install-never-write.md +0 -0
  265. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-install-findings.md +0 -0
  266. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-install-local-writes-empties-the-repo-s-mcp-json-silently-of.md +0 -0
  267. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-json-accepted-but-ignored-on-many-branches-cohort-config-pol.md +0 -0
  268. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-lint-findings.md +0 -0
  269. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-log-findings.md +0 -0
  270. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-log-simulate-changelog-headings-echo-the-raw-qualified-argum.md +0 -0
  271. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-mcp-findings.md +0 -0
  272. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-mcp-register-s-boost-first-consent-names-only-the-registered.md +0 -0
  273. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-missing-json-on-doctor-test-health-changelog-trending-log-ho.md +0 -0
  274. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-name-miss-errors-unknown-tap-qualifier-unnamed-no-close-matc.md +0 -0
  275. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-onboard-findings.md +0 -0
  276. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-out-table-clips-data-columns-to-an-assumed-80-columns-when-s.md +0 -0
  277. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-out-warn-defaults-to-stdout-infer-absorb-corrupt-skill-md-se.md +0 -0
  278. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-outdated-findings.md +0 -0
  279. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-output-wrap-tokens-splits-punctuation-off-backtick-spans-ins.md +0 -0
  280. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-pinned-taps-silently-moved-to-head-by-update-re-clone-and-co.md +0 -0
  281. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-policy-findings.md +0 -0
  282. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-preview-findings.md +0 -0
  283. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-profile-findings.md +0 -0
  284. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-project-scope-seams-uninstall-verify-list-info-reinstall-dis.md +0 -0
  285. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-protocol-findings.md +0 -0
  286. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-pulse-findings.md +0 -0
  287. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-quarantine-findings.md +0 -0
  288. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-quarantine-pin-state-invisible-list-info-doctor-report-links.md +0 -0
  289. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-quickstart-findings.md +0 -0
  290. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-recommend-findings.md +0 -0
  291. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-reindex-findings.md +0 -0
  292. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-reinstall-sync-repair-and-audit-resolve-by-name-tap-ignoring.md +0 -0
  293. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-replay-findings.md +0 -0
  294. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-root-findings.md +0 -0
  295. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-rules-workflows-reported-as-skills-uninstall-claims-a-store.md +0 -0
  296. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-run-findings.md +0 -0
  297. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-schedule-findings.md +0 -0
  298. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-search-findings.md +0 -0
  299. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-simulate-findings.md +0 -0
  300. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-six-count-flags-tap-chat-absorb-lint-changelog-hooks-skip-ut.md +0 -0
  301. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-skill-profile-name-slugging-is-inconsistent-distill-o-accept.md +0 -0
  302. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-snapshot-restore-replaces-the-lock-wholesale-orphaning-newer.md +0 -0
  303. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-stale-prose-after-shipped-changes-catalog-export-live-discov.md +0 -0
  304. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-stray-positionals-and-inapplicable-flags-silently-ignored-ac.md +0 -0
  305. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-sweep-positionals-json-lack-help-strings-and-no-command-help.md +0 -0
  306. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-sync-findings.md +0 -0
  307. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-tag-findings.md +0 -0
  308. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-tap-dry-run-is-silently-ignored-outside-catalog-spec-and-def.md +0 -0
  309. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-tap-findings.md +0 -0
  310. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-taps-findings.md +0 -0
  311. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-taps-outdated-decay-policy-snapshot-json-emit-display-string.md +0 -0
  312. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-test-findings.md +0 -0
  313. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-trust-findings.md +0 -0
  314. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-unpin-findings.md +0 -0
  315. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-untap-findings.md +0 -0
  316. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-update-findings.md +0 -0
  317. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-verify-findings.md +0 -0
  318. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/audit-who-findings.md +0 -0
  319. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  320. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
  321. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  322. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  323. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
  324. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  325. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/boost-first-rule.md +0 -0
  326. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  327. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  328. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/branch-current-gate.md +0 -0
  329. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  330. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  331. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  332. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  333. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  334. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  335. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  336. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/capability-policy-skips-rules-and-workflows.md +0 -0
  337. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/catalog-categories-beyond-curated.md +0 -0
  338. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  339. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  340. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  341. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  342. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  343. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  344. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  345. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/cli-audit-2026-08-full-sweep.md +0 -0
  346. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/cli-command-audit.md +0 -0
  347. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
  348. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  349. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  350. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  351. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/command-carousel-page.md +0 -0
  352. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  353. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  354. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  355. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  356. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  357. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  358. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  359. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  360. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  361. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  362. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/delay-true-defeats-the-log-suppress.md +0 -0
  363. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  364. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  365. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  366. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/dense-reindex-has-no-progress-or-durability.md +0 -0
  367. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/dense-reindex-reuses-whole-taps.md +0 -0
  368. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  369. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  370. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/dense-store-holds-every-vector-once-per-copy.md +0 -0
  371. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  372. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  373. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  374. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  375. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  376. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  377. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  378. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  379. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  380. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  381. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  382. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  383. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  384. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  385. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  386. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  387. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  388. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  389. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  390. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  391. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  392. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  393. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  394. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  395. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  396. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  397. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  398. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  399. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  400. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  401. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  402. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  403. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
  404. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
  405. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
  406. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/github-community-health-files.md +0 -0
  407. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  408. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  409. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  410. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/gstack-tap-first-then-coexistence.md +0 -0
  411. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  412. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  413. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  414. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  415. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  416. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  417. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  418. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  419. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  420. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  421. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  422. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  423. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  424. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  425. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  426. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  427. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  428. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  429. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  430. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  431. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  432. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  433. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  434. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  435. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  436. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  437. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  438. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  439. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  440. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  441. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
  442. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  443. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  444. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  445. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  446. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  447. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  448. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  449. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  450. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  451. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  452. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/mcp-cannot-read-a-skill-before-installing.md +0 -0
  453. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  454. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  455. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  456. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  457. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  458. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  459. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  460. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  461. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  462. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  463. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  464. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  465. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  466. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  467. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  468. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  469. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  470. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  471. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  472. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  473. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  474. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/mutation-shards-rerun-full-set-every-push.md +0 -0
  475. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  476. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  477. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/near-identical-copies-still-eat-the-slots.md +0 -0
  478. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  479. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  480. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  481. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  482. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  483. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  484. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
  485. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
  486. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/openssf-playbook.md +0 -0
  487. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/openssf-silver.md +0 -0
  488. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/osps-baseline-levels.md +0 -0
  489. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  490. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  491. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  492. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  493. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  494. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  495. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  496. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  497. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  498. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  499. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  500. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  501. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  502. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  503. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  504. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  505. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  506. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  507. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  508. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/publish-the-keyword-index.md +0 -0
  509. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  510. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/published-shards-have-no-consumer.md +0 -0
  511. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  512. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  513. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  514. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  515. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  516. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
  517. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  518. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  519. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  520. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  521. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/relicence-apache-2.md +0 -0
  522. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
  523. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  524. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  525. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  526. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  527. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  528. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  529. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  530. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  531. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  532. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  533. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  534. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  535. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  536. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  537. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  538. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  539. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  540. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  541. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  542. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  543. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  544. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  545. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  546. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  547. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  548. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  549. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  550. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  551. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  552. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  553. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  554. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  555. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  556. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/shard-refresh-skips-processed-commits.md +0 -0
  557. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/shard-runs-reembed-everything-weekly.md +0 -0
  558. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  559. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  560. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  561. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/shrink-the-published-index.md +0 -0
  562. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  563. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  564. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  565. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  566. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  567. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  568. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  569. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  570. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  571. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  572. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  573. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  574. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  575. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  576. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  577. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  578. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  579. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  580. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  581. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  582. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  583. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  584. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  585. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  586. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  587. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  588. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  589. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  590. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  591. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  592. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  593. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  594. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  595. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  596. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/vex-openvex-feed.md +0 -0
  597. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  598. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/weekly-vectors-had-no-ingestion-path.md +0 -0
  599. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  600. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  601. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  602. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  603. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  604. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  605. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/workspace-scope-install.md +0 -0
  606. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/zip-strict-audit.md +0 -0
  607. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  608. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  609. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/semantic-search.md +0 -0
  610. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  611. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/verifying-releases.md +0 -0
  612. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/vex/meta.md +0 -0
  613. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/vex/openvex.json +0 -0
  614. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
  615. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
  616. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
  617. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
  618. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/eslint.config.mjs +0 -0
  619. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/evals/README.md +0 -0
  620. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/evals/__init__.py +0 -0
  621. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/evals/baseline.json +0 -0
  622. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/evals/faithfulness.py +0 -0
  623. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/evals/golden_set.json +0 -0
  624. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/evals/make_corpus.py +0 -0
  625. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/evals/make_golden.py +0 -0
  626. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/evals/metrics.py +0 -0
  627. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/evals/publish_golden_dataset.py +0 -0
  628. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/evals/run_evals.py +0 -0
  629. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/examples/README.md +0 -0
  630. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/examples/adapt-demo.sh +0 -0
  631. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/examples/boost-run-prototype.sh +0 -0
  632. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/index.html +0 -0
  633. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/noxfile.py +0 -0
  634. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/pyproject.toml +0 -0
  635. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/requirements/coverage-tools.in +0 -0
  636. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/requirements/coverage-tools.txt +0 -0
  637. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/requirements/lint-tools.in +0 -0
  638. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/requirements/lint-tools.txt +0 -0
  639. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/requirements/mutation-tools.in +0 -0
  640. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/requirements/mutation-tools.txt +0 -0
  641. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/requirements/platform-pins.lock +0 -0
  642. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/requirements/release-tools.in +0 -0
  643. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/requirements/release-tools.txt +0 -0
  644. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/requirements/test-tools.in +0 -0
  645. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/requirements/test-tools.txt +0 -0
  646. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/a11y_check.py +0 -0
  647. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/add_spdx_headers.py +0 -0
  648. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/bench_cli.sh +0 -0
  649. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/build_command_reference.py +0 -0
  650. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/build_demo_index.py +0 -0
  651. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/build_registries.py +0 -0
  652. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/build_roadmap.py +0 -0
  653. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/build_scale_corpus.py +0 -0
  654. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/build_vex.py +0 -0
  655. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/check_anchors.py +0 -0
  656. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/check_branch_current.py +0 -0
  657. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/check_dco.py +0 -0
  658. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/check_licenses.py +0 -0
  659. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/check_reproducible.py +0 -0
  660. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/check_required_checks.py +0 -0
  661. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/ensure_eval_corpus.sh +0 -0
  662. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/eval_corpus.py +0 -0
  663. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/eval_explain.py +0 -0
  664. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/eval_gate.py +0 -0
  665. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/eval_recommend.py +0 -0
  666. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/eval_retrieval.py +0 -0
  667. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/eval_stats_summary.py +0 -0
  668. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/eval_tools.py +0 -0
  669. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/import_budget.py +0 -0
  670. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/lock_toolchain.py +0 -0
  671. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/measure_near_duplicate_bound.py +0 -0
  672. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/measure_registry.py +0 -0
  673. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/mutation_gate.py +0 -0
  674. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/mutation_shards.py +0 -0
  675. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/mutation_weights.json +0 -0
  676. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/normalize_sdist.py +0 -0
  677. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/page_budget.py +0 -0
  678. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/perf_gate.py +0 -0
  679. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/post_deploy_smoke.py +0 -0
  680. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/publish_eval_json.py +0 -0
  681. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/publish_shards.py +0 -0
  682. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/release_guard.py +0 -0
  683. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/release_preflight.py +0 -0
  684. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/serve_docs.py +0 -0
  685. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/scripts/shard_plan.py +0 -0
  686. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/setup.cfg +0 -0
  687. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/sonar-project.properties +0 -0
  688. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/style/README.md +0 -0
  689. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/style/boost.css +0 -0
  690. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/style/boost.js +0 -0
  691. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/style/demo.html +0 -0
  692. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/bdd/features/adapt.feature +0 -0
  693. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/bdd/features/browse.feature +0 -0
  694. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/bdd/features/count.feature +0 -0
  695. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/bdd/features/discover.feature +0 -0
  696. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/bdd/features/doctor.feature +0 -0
  697. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/bdd/features/environment.py +0 -0
  698. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/bdd/features/explain.feature +0 -0
  699. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/bdd/features/index.feature +0 -0
  700. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/bdd/features/install.feature +0 -0
  701. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/bdd/features/list.feature +0 -0
  702. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/bdd/features/mcp.feature +0 -0
  703. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/bdd/features/search.feature +0 -0
  704. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/bdd/features/steps/cli_steps.py +0 -0
  705. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/bdd/features/steps/discovery_steps.py +0 -0
  706. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/bdd/features/steps/mcp_steps.py +0 -0
  707. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/bdd/features/steps/quality_steps.py +0 -0
  708. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/conftest.py +0 -0
  709. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/eval/baseline.json +0 -0
  710. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/eval/explain.jsonl +0 -0
  711. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/eval/fixtures/claude_init_event.jsonl +0 -0
  712. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/eval/golden-natural.jsonl +0 -0
  713. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/eval/golden.jsonl +0 -0
  714. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/eval/recommend.jsonl +0 -0
  715. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/eval/taps-scale.txt +0 -0
  716. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/eval/taps.txt +0 -0
  717. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/eval/tool_calls.jsonl +0 -0
  718. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/functional/test_bmad_all_hosts.py +0 -0
  719. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/functional/test_capabilities_policy.py +0 -0
  720. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/functional/test_cli_adapt.py +0 -0
  721. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/functional/test_cli_bmad.py +0 -0
  722. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/functional/test_cli_catalog.py +0 -0
  723. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/functional/test_cli_chat.py +0 -0
  724. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/functional/test_cli_hooks.py +0 -0
  725. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/functional/test_cli_hooks_gemini.py +0 -0
  726. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/functional/test_cli_info.py +0 -0
  727. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/functional/test_cli_pane_width.py +0 -0
  728. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/functional/test_cli_pkg.py +0 -0
  729. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/functional/test_cli_quickstart.py +0 -0
  730. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/functional/test_cli_tap_pins.py +0 -0
  731. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/functional/test_cli_taps.py +0 -0
  732. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/functional/test_everyday_loop.py +0 -0
  733. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/functional/test_integrity_enforce.py +0 -0
  734. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/functional/test_property_parsers.py +0 -0
  735. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/functional/test_run.py +0 -0
  736. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/functional/test_workspace_scope.py +0 -0
  737. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/fuzz/README.md +0 -0
  738. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  739. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  740. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  741. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  742. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  743. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  744. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  745. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  746. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  747. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  748. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  749. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  750. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  751. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  752. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  753. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  754. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  755. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  756. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  757. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  758. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  759. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  760. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  761. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/fuzz/fuzz_frontmatter.py +0 -0
  762. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/fuzz/fuzz_registry.py +0 -0
  763. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/langchain/conftest.py +0 -0
  764. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/langchain/test_graph.py +0 -0
  765. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/langchain/test_loader.py +0 -0
  766. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/langchain/test_retriever.py +0 -0
  767. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/make_fixture.py +0 -0
  768. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/perf/test_benchmarks.py +0 -0
  769. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/smoke.sh +0 -0
  770. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_a11y_check.py +0 -0
  771. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_action_pin_lockstep.py +0 -0
  772. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_adapters.py +0 -0
  773. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_adapters_multi.py +0 -0
  774. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_adapters_runner.py +0 -0
  775. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_agents.py +0 -0
  776. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_ai.py +0 -0
  777. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_aihost.py +0 -0
  778. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_bmad_core.py +0 -0
  779. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_boost_first_offer.py +0 -0
  780. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_bootstrap.py +0 -0
  781. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_bot_pr_dco.py +0 -0
  782. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_branch_current.py +0 -0
  783. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_browse.py +0 -0
  784. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_builtin.py +0 -0
  785. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_capabilities.py +0 -0
  786. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_catalog.py +0 -0
  787. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_catalogbundle.py +0 -0
  788. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_chat.py +0 -0
  789. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_check_anchors.py +0 -0
  790. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_check_dco.py +0 -0
  791. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_check_licenses.py +0 -0
  792. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_check_reproducible.py +0 -0
  793. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_claude_settings.py +0 -0
  794. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_clean_internal_cache.py +0 -0
  795. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_cli_update_shards.py +0 -0
  796. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_cliparse.py +0 -0
  797. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_codeql_analysis_key.py +0 -0
  798. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_command_reference_fresh.py +0 -0
  799. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_community_health_files.py +0 -0
  800. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_compact.py +0 -0
  801. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_complete.py +0 -0
  802. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_complete_rc_block.py +0 -0
  803. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_config.py +0 -0
  804. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_content_dedupe.py +0 -0
  805. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_content_identity.py +0 -0
  806. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_crash_redaction.py +0 -0
  807. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_dedup_trust.py +0 -0
  808. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_demo_index.py +0 -0
  809. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_dense.py +0 -0
  810. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_dense_boilerplate_cluster.py +0 -0
  811. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_dense_embed_dedupe.py +0 -0
  812. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_dense_entry_reuse.py +0 -0
  813. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_dense_entry_vectors.py +0 -0
  814. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_dense_fallback.py +0 -0
  815. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_dense_fix_hint.py +0 -0
  816. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_dense_progress.py +0 -0
  817. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_dense_quantized.py +0 -0
  818. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_dense_ready_order.py +0 -0
  819. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_dense_shard_real_schema.py +0 -0
  820. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  821. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_dense_shards.py +0 -0
  822. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_dense_status.py +0 -0
  823. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_dense_status_cheap.py +0 -0
  824. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_dense_vector_dedupe.py +0 -0
  825. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_dependabot_config.py +0 -0
  826. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_distill_merge.py +0 -0
  827. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_docs_pages_linked.py +0 -0
  828. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_docsite_chrome.py +0 -0
  829. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_doctor_output_polish.py +0 -0
  830. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_ed25519.py +0 -0
  831. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_embed.py +0 -0
  832. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_embed_local.py +0 -0
  833. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_embed_truncated_response.py +0 -0
  834. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_entry_key.py +0 -0
  835. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_errors_and_cli_table.py +0 -0
  836. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_eval_baseline.py +0 -0
  837. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_eval_corpus.py +0 -0
  838. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_eval_faithfulness.py +0 -0
  839. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_eval_gate.py +0 -0
  840. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_eval_grading.py +0 -0
  841. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_eval_metrics.py +0 -0
  842. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_eval_stats_summary.py +0 -0
  843. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_eval_tools.py +0 -0
  844. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_eval_tools_probe.py +0 -0
  845. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  846. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_faithfulness.py +0 -0
  847. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_frontmatter.py +0 -0
  848. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_fuzz_targets.py +0 -0
  849. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  850. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_gitleaks_config.py +0 -0
  851. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_gitutil.py +0 -0
  852. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_gitutil_lfs.py +0 -0
  853. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_gitutil_sparse.py +0 -0
  854. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_gstack_coexistence.py +0 -0
  855. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_hook_settings_hosts.py +0 -0
  856. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_hookhost.py +0 -0
  857. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_imperative.py +0 -0
  858. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_import_budget.py +0 -0
  859. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_injectscan.py +0 -0
  860. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_install_permission_error.py +0 -0
  861. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_installscan.py +0 -0
  862. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_integrity.py +0 -0
  863. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_journal.py +0 -0
  864. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_langchain_packaging.py +0 -0
  865. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_link_ownership.py +0 -0
  866. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_localembed.py +0 -0
  867. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_localembed_e2e.py +0 -0
  868. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_lockfile.py +0 -0
  869. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_logs.py +0 -0
  870. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_marketing_counts.py +0 -0
  871. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_mcp.py +0 -0
  872. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_mcp_install_scan.py +0 -0
  873. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_mcp_read.py +0 -0
  874. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_mcpdecl.py +0 -0
  875. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_mcphost.py +0 -0
  876. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_measure_registry.py +0 -0
  877. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_minisign.py +0 -0
  878. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_mutation_hardening.py +0 -0
  879. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_mutation_shards.py +0 -0
  880. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_mutation_subfile_shards.py +0 -0
  881. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_mutmut_source_paths.py +0 -0
  882. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_near_duplicate_collapse.py +0 -0
  883. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_nethttp.py +0 -0
  884. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_normalize_sdist.py +0 -0
  885. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_output.py +0 -0
  886. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_page_budget.py +0 -0
  887. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_paths.py +0 -0
  888. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_perf_gate.py +0 -0
  889. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_pkg_confusions.py +0 -0
  890. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_pkg_injection.py +0 -0
  891. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_pkg_secrets.py +0 -0
  892. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_platform_pins.py +0 -0
  893. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_policy.py +0 -0
  894. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_post_deploy_smoke.py +0 -0
  895. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_project_mcp_sidecar.py +0 -0
  896. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_projectlock.py +0 -0
  897. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_publish_golden_dataset.py +0 -0
  898. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_rag.py +0 -0
  899. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_rag_fastpath.py +0 -0
  900. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_rag_fusion.py +0 -0
  901. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_registries_fresh.py +0 -0
  902. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_registry.py +0 -0
  903. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_registry_categories.py +0 -0
  904. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_registry_control_chars.py +0 -0
  905. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_registry_parallel.py +0 -0
  906. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_release_guard.py +0 -0
  907. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_release_preflight.py +0 -0
  908. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_required_checks.py +0 -0
  909. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_rerank_cache.py +0 -0
  910. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_resolve.py +0 -0
  911. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_retrieve_any_near_duplicates.py +0 -0
  912. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_roadmap_fresh.py +0 -0
  913. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_rules.py +0 -0
  914. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_scale_corpus.py +0 -0
  915. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_scopes.py +0 -0
  916. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_secretscan.py +0 -0
  917. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_selfupdate.py +0 -0
  918. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_serve.py +0 -0
  919. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_serve_docs.py +0 -0
  920. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_shard_plan.py +0 -0
  921. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_shards.py +0 -0
  922. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_shards_incremental.py +0 -0
  923. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_shards_ingest.py +0 -0
  924. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_shards_matrix.py +0 -0
  925. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_smoke_covers_every_command.py +0 -0
  926. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_spdx_headers.py +0 -0
  927. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_spin.py +0 -0
  928. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_stackprobe.py +0 -0
  929. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_staleness.py +0 -0
  930. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_store.py +0 -0
  931. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_store_materialize.py +0 -0
  932. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_sync_blocked_links.py +0 -0
  933. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  934. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_tap_pins.py +0 -0
  935. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_token_parity.py +0 -0
  936. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_toolchain_lock.py +0 -0
  937. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_trustaudit.py +0 -0
  938. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_typosquat.py +0 -0
  939. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_updatediff.py +0 -0
  940. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_util.py +0 -0
  941. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_version.py +0 -0
  942. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_version_tags.py +0 -0
  943. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_vex.py +0 -0
  944. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_visual_harness_flags.py +0 -0
  945. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_workflow_concurrency.py +0 -0
  946. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  947. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  948. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_workflow_timeouts.py +0 -0
  949. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_workflows.py +0 -0
  950. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  951. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/visual/a11y_check.mjs +0 -0
  952. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/visual/console_check.mjs +0 -0
  953. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/visual/package-lock.json +0 -0
  954. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/tests/visual/package.json +0 -0
  955. {boost_skill_cli-1.2.76 → boost_skill_cli-1.2.78}/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.76
3
+ Version: 1.2.78
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.76'
22
- __version_tuple__ = version_tuple = (1, 2, 76)
21
+ __version__ = version = '1.2.78'
22
+ __version_tuple__ = version_tuple = (1, 2, 78)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -45,6 +45,7 @@ from ..core import (
45
45
  )
46
46
  from ..core import output as out
47
47
  from ..errors import BoostError
48
+ from ._common import _s
48
49
 
49
50
  _tilde = paths.tilde
50
51
 
@@ -482,9 +483,9 @@ def cmd_policy(argv) -> int:
482
483
  # The breakdown appears exactly when it carries information (same
483
484
  # convention as `boost count`): a skills-only environment keeps the exact
484
485
  # summary line it always had.
485
- summary = ("%d skills" % counts["skill"]
486
+ summary = ("%d skill%s" % (counts["skill"], _s(counts["skill"]))
486
487
  if not counts["rule"] and not counts["workflow"]
487
- else ", ".join("%d %s%s" % (n, kind, "s" if n != 1 else "")
488
+ else ", ".join("%d %s%s" % (n, kind, _s(n))
488
489
  for kind, n in counts.items()))
489
490
 
490
491
  if args.json:
@@ -40,6 +40,7 @@ from ..core import (
40
40
  from ..core import output as out
41
41
  from ..core.stackprobe import detect_stack # re-exported: shared with Quality
42
42
  from ..errors import BoostError
43
+ from ._common import _s
43
44
 
44
45
  __all__ = ["detect_stack"]
45
46
 
@@ -1909,8 +1910,10 @@ def cmd_count(argv):
1909
1910
  # The breakdown appears exactly when it carries information: with only
1910
1911
  # skills installed, "installed 2" already means two skills.
1911
1912
  detail = ("" if not (by_kind["rule"] or by_kind["workflow"])
1912
- else " (%d skills · %d rules · %d workflows)"
1913
- % (by_kind["skill"], by_kind["rule"], by_kind["workflow"]))
1913
+ else " (%d skill%s · %d rule%s · %d workflow%s)"
1914
+ % (by_kind["skill"], _s(by_kind["skill"]),
1915
+ by_kind["rule"], _s(by_kind["rule"]),
1916
+ by_kind["workflow"], _s(by_kind["workflow"])))
1914
1917
  summary = ("installed %d%s · available %d (across %d tap%s) · discovery index %s"
1915
1918
  % (installed_n, detail, available_n, taps_n,
1916
1919
  "" if taps_n == 1 else "s",
@@ -38,6 +38,7 @@ from ..core import (
38
38
  )
39
39
  from ..core import output as out
40
40
  from ..errors import BoostError
41
+ from ._common import _s
41
42
 
42
43
  # ---------------------------------------------------------------- helpers
43
44
 
@@ -1036,7 +1037,7 @@ def cmd_focus(argv: list[str]) -> int:
1036
1037
  journal.log("focus", ",".join(names))
1037
1038
  out.info("⌁ focus: %s %s"
1038
1039
  % (", ".join(names),
1039
- out.role("(other %d skills sidelined)" % sidelined, "muted")))
1040
+ out.role("(other %d skill%s sidelined)" % (sidelined, _s(sidelined)), "muted")))
1040
1041
  return 0
1041
1042
 
1042
1043
 
@@ -818,8 +818,9 @@ def cmd_lint(argv):
818
818
  out.warn("%d of %d skill%s below %d or with errors"
819
819
  % (len(failed), len(results), _s(len(results)), args.min_score))
820
820
  return 1
821
- out.ok("%d skill%s pass lint (min %d)" % (len(results), _s(len(results)),
822
- args.min_score))
821
+ out.ok("%d skill%s %s lint (min %d)"
822
+ % (len(results), _s(len(results)),
823
+ "passes" if len(results) == 1 else "pass", args.min_score))
823
824
  return 0
824
825
 
825
826
 
@@ -23,6 +23,7 @@ from ..core import (
23
23
  )
24
24
  from ..core import output as out
25
25
  from ..errors import BoostError
26
+ from ._common import _s
26
27
 
27
28
  _tilde = paths.tilde
28
29
 
@@ -102,8 +103,8 @@ def cmd_cohort(argv) -> int:
102
103
  _save_cohorts(cohorts)
103
104
  journal.log("cohort", args.name, op="create", percent=args.percent)
104
105
  member = _is_member(user, args.name, args.percent)
105
- out.ok("created cohort %s (%d%% rollout, %d skills) — you are %s"
106
- % (args.name, args.percent, len(skills),
106
+ out.ok("created cohort %s (%d%% rollout, %d skill%s) — you are %s"
107
+ % (args.name, args.percent, len(skills), _s(len(skills)),
107
108
  "IN" if member else "OUT"))
108
109
  return 0
109
110
 
@@ -274,12 +275,14 @@ def cmd_profile(argv) -> int:
274
275
  paths.ensure_dirs()
275
276
  _profile_path(args.name).write_text(json.dumps(profile, indent=2) + "\n", encoding="utf-8")
276
277
  journal.log("profile", args.name, op="save", skills=len(installed))
277
- out.ok("saved profile %s (%d skills)" % (args.name, len(installed)))
278
+ out.ok("saved profile %s (%d skill%s)"
279
+ % (args.name, len(installed), _s(len(installed))))
278
280
  n_rules = len(lockfile.installed_rules())
279
281
  n_workflows = len(lockfile.installed_workflows())
280
282
  if n_rules or n_workflows:
281
- out.warn("%d rule(s) and %d workflow(s) not captured — profiles "
282
- "carry skills only" % (n_rules, n_workflows))
283
+ out.warn("%d rule%s and %d workflow%s not captured — profiles "
284
+ "carry skills only"
285
+ % (n_rules, _s(n_rules), n_workflows, _s(n_workflows)))
283
286
  return 0
284
287
 
285
288
  if args.action == "show":
@@ -351,8 +354,8 @@ def cmd_profile(argv) -> int:
351
354
  store.link_agents(n)
352
355
  if extras:
353
356
  if args.prune:
354
- if out.confirm("uninstall %d skill(s) not in the profile (%s)?"
355
- % (len(extras), ", ".join(extras))):
357
+ if out.confirm("uninstall %d skill%s not in the profile (%s)?"
358
+ % (len(extras), _s(len(extras)), ", ".join(extras))):
356
359
  for n in extras:
357
360
  store.uninstall(n)
358
361
  out.ok("uninstalled %s" % n)
@@ -361,8 +364,8 @@ def cmd_profile(argv) -> int:
361
364
  else:
362
365
  for n in extras:
363
366
  store.unlink_agents(n)
364
- out.info("sidelined %d skill(s) not in the profile (unlinked, still installed): %s"
365
- % (len(extras), ", ".join(extras)))
367
+ out.info("sidelined %d skill%s not in the profile (unlinked, still installed): %s"
368
+ % (len(extras), _s(len(extras)), ", ".join(extras)))
366
369
  journal.log("profile", args.name, op="use")
367
370
  out.ok("switched to profile %s" % args.name)
368
371
  return 0
@@ -158,6 +158,18 @@ def verify_dir(clone: Path) -> Result:
158
158
  return Result(VERIFIED, key_name=name,
159
159
  fingerprint=minisign.key_id_hex(pk.key_id),
160
160
  trusted_comment=sig.trusted_comment)
161
+ # A signature carrying a *trusted* key's id that still fails to verify is
162
+ # not a merely-unknown signer — it is the tampering this module exists to
163
+ # catch (the manifest was edited after a trusted key signed it). Report it
164
+ # as INVALID, not UNTRUSTED, so callers that only alarm on INVALID (the
165
+ # `trust verify` sweep) don't wave a modified manifest through.
166
+ for name, pk in _public_keys():
167
+ if sig.key_id == pk.key_id:
168
+ return Result(INVALID, key_name=name,
169
+ fingerprint=minisign.key_id_hex(pk.key_id),
170
+ trusted_comment=sig.trusted_comment,
171
+ detail="signature by trusted key %s does not verify"
172
+ " — manifest modified?" % name)
161
173
  return Result(UNTRUSTED, fingerprint=minisign.key_id_hex(sig.key_id),
162
174
  trusted_comment=sig.trusted_comment,
163
175
  detail="no trusted key verifies this signature")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.76
3
+ Version: 1.2.78
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License-Expression: Apache-2.0
Binary file
@@ -2,15 +2,15 @@
2
2
  id: audit-singular-plural-misses-1-skills-1-issue-need-1-skill-pass-ac
3
3
  board: code
4
4
  section: dx
5
- status: planned
5
+ status: shipped
6
6
  category: CLI · Polish
7
7
  complexity: S
8
8
  impact: Low
9
9
  wow: 1
10
- note: a shared _s helper exists at _common.py:15 and six commands hand-roll around it
10
+ note: fixed via the shared _s helper across seven sites; doctor's verb agreement was already correct
11
11
  order: 242
12
- owner:
13
- pr:
12
+ owner: loop/plural-agreement
13
+ pr: 678
14
14
  title: "Singular/plural misses (“1 skills”, “1 issue need”, “1 skill pass”) across six commands"
15
15
  ---
16
16
  Six commands hand-roll plurals and get the singular wrong. Reproduced verbatim on a fresh HOME with one
@@ -36,3 +36,14 @@ Fix as one sweep PR: reuse <code>_s</code> at <code>configuration.py:475</code>
36
36
  (<em>needs/need</em>, <em>passes/pass</em>) &mdash; <code>_s</code> alone cannot fix verb agreement. Add a small
37
37
  unit test asserting the <code>n == 1</code> strings. No docs change &mdash; these are runtime messages only.
38
38
  Found by the 2026-08 CLI audit (cluster pluralisation-sweep); repro in the audit log.
39
+
40
+ <b>Shipped.</b> <code>lint</code> now agrees noun and verb (<em>&ldquo;1 skill passes lint&rdquo;</em> vs
41
+ <em>&ldquo;2 skills pass lint&rdquo;</em>); doctor's verb already agreed on re-verification and needed no
42
+ change. <code>policy check</code>'s skills-only summary, <code>cohort create</code>'s rollout line,
43
+ <code>count</code>'s kind breakdown, and <code>focus</code>'s sidelined-count line all switched from a
44
+ hardcoded plural to <code>_s</code>. <code>profile save</code> and <code>profile use</code> lost their
45
+ <code>skill(s)</code>/<code>rule(s)</code>/<code>workflow(s)</code> hedges in favor of the same helper.
46
+ Functional tests updated at every site (<code>test_cli_configuration.py</code>,
47
+ <code>test_cli_team.py</code>, <code>test_cli_intelligence.py</code>, <code>test_cli_discovery.py</code>,
48
+ <code>test_cli_quality.py</code>, <code>test_kind_conformance.py</code>), plus a new singular-count case
49
+ for <code>cohort create</code>.
@@ -2,15 +2,15 @@
2
2
  id: audit-trust-verify-labels-a-manifest-tampered-after-signing-by-a-t
3
3
  board: code
4
4
  section: trust
5
- status: planned
5
+ status: inflight
6
6
  category: Safety · Bug
7
7
  complexity: S
8
8
  impact: High
9
9
  wow: 2
10
10
  note: the tampering case the feature exists for reads as "key unknown", and the sweep exits 0
11
11
  order: 221
12
- owner:
13
- pr:
12
+ owner: loop/trust-verify-tamper
13
+ pr: 675
14
14
  title: "<code>trust verify</code> labels a manifest tampered after signing by a TRUSTED key 'untrusted'; sweep exits 0"
15
15
  ---
16
16
  Sign a tap's manifest with a trusted key, then edit the manifest &mdash; the exact tampering <code>trust verify</code> exists to catch. The sweep reports <code>iktakahiro/python-fastapi-ddd-sk&hellip;&nbsp; untrusted&nbsp; no trusted key verifies this sig&hellip;</code> and <b>exits 0</b>; <code>--json</code> says <code>{"status": "untrusted", "key_name": null, "fingerprint": "1122334455667788"}</code> &mdash; and that fingerprint is the trusted <code>acme</code> key's own. So a modified manifest is indistinguishable from a merely unknown signer, and a scripted sweep sails past it. One narrowing from verification: the named-tap path (<code>trust verify TAP</code>) does exit 1; the exit-0 hole is the sweep, whose alarm at <code>boost_cli/commands/quality.py:1329</code> fires only on INVALID. The 'untrusted / key unknown' mislabel affects both paths.
@@ -2,12 +2,12 @@
2
2
  id: audit-verify-drift-say-nothing-installed-exit-0-and-doctor-says-lo
3
3
  board: code
4
4
  section: health
5
- status: inflight
5
+ status: shipped
6
6
  category: CLI · Bug
7
7
  complexity: S
8
8
  impact: High
9
9
  wow: 2
10
- note: rm the lock, verify exits 0 'nothing installed'; doctor still prints 'lock parses (v3)'
10
+ note: fixed verify/drift fail loudly on a missing/corrupt lock; doctor's lines match reality
11
11
  order: 214
12
12
  owner: loop/lock-integrity-reporting
13
13
  pr: 674
@@ -40,3 +40,12 @@ dirs unrecorded, run `boost sync`&rdquo;</em>). Docs: <code>docs/security-design
40
40
  integrity contract) and <code>docs/DEBUGGING.md</code> (doctor's lock lines); no flag change, so
41
41
  <code>docs/commands.html</code> needs no regeneration. Found by the 2026-08 CLI audit (cluster
42
42
  <code>missing-lock-reported-healthy</code>); repro in the audit log.
43
+
44
+ <br><br><b>Shipped.</b> <code>lockfile.check()</code> reports the lock file's raw state (<code>ok</code> /
45
+ <code>missing</code> / <code>corrupt</code> / <code>schema</code>) instead of the empty skeleton
46
+ <code>read()</code> collapses it to, and <code>store.has_content()</code> tells a genuinely empty
47
+ install apart from one whose record vanished out from under real skills. <code>cmd_verify</code> and
48
+ <code>cmd_drift</code> now call a shared <code>_require_lock_integrity()</code> before iterating, and
49
+ <code>cmd_doctor</code>'s lock section is rewritten on the same two primitives, so all three commands
50
+ agree and &ldquo;parses&rdquo;/&ldquo;integrity OK&rdquo; are only ever claimed for a lock file that
51
+ really is. See PR #674.
@@ -6447,8 +6447,9 @@ Found by the 2026-08 CLI audit (cluster <code>import-all-parity</code>); repro i
6447
6447
  </article>
6448
6448
 
6449
6449
  <article class="cap rcard" id="audit-verify-drift-say-nothing-installed-exit-0-and-doctor-says-lo">
6450
- <div class="head"><span class="pill inflight">In flight</span><span class="cat">CLI · Bug</span></div>
6450
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">CLI · Bug</span></div>
6451
6451
  <h3><code>verify</code>/<code>drift</code> say 'nothing installed' (exit 0) when the lock file is missing or corrupt</h3>
6452
+ <details class="cardbody"><summary>Write-up</summary>
6452
6453
  <p>Delete <code>.skill-lock.json</code> after an install (store and four agent links still present) and
6453
6454
  <code>verify</code> — whose one-line summary is <em>lock-file integrity</em> — prints
6454
6455
  <em>&ldquo;&nbsp;&nbsp;nothing installed&rdquo;</em> and exits 0. Truncate the lock to
@@ -6475,12 +6476,21 @@ absent while the store dir has entries, unparseable, or <code>version != SCHEMA_
6475
6476
  dirs unrecorded, run `boost sync`&rdquo;</em>). Docs: <code>docs/security-design.md</code> (verify's
6476
6477
  integrity contract) and <code>docs/DEBUGGING.md</code> (doctor's lock lines); no flag change, so
6477
6478
  <code>docs/commands.html</code> needs no regeneration. Found by the 2026-08 CLI audit (cluster
6478
- <code>missing-lock-reported-healthy</code>); repro in the audit log.</p>
6479
+ <code>missing-lock-reported-healthy</code>); repro in the audit log.
6480
+
6481
+ <br><br><b>Shipped.</b> <code>lockfile.check()</code> reports the lock file's raw state (<code>ok</code> /
6482
+ <code>missing</code> / <code>corrupt</code> / <code>schema</code>) instead of the empty skeleton
6483
+ <code>read()</code> collapses it to, and <code>store.has_content()</code> tells a genuinely empty
6484
+ install apart from one whose record vanished out from under real skills. <code>cmd_verify</code> and
6485
+ <code>cmd_drift</code> now call a shared <code>_require_lock_integrity()</code> before iterating, and
6486
+ <code>cmd_doctor</code>'s lock section is rewritten on the same two primitives, so all three commands
6487
+ agree and &ldquo;parses&rdquo;/&ldquo;integrity OK&rdquo; are only ever claimed for a lock file that
6488
+ really is. See PR #674.</p></details>
6479
6489
  <div class="meta">
6480
6490
  <span class="m">Complexity <b>S</b></span>
6481
6491
  <span class="m hi">Impact <b>High</b></span>
6482
6492
  <span class="m">Wow <b class="wow">★★</b></span>
6483
- <span class="m">rm the lock, verify exits 0 'nothing installed'; doctor still prints 'lock parses (v3)'</span>
6493
+ <span class="m">fixed verify/drift fail loudly on a missing/corrupt lock; doctor's lines match reality</span>
6484
6494
  </div>
6485
6495
  </article>
6486
6496
 
@@ -12693,8 +12703,9 @@ Found by the 2026-08 CLI audit (cluster help-examples-sweep); repro in the audit
12693
12703
  </article>
12694
12704
 
12695
12705
  <article class="cap rcard" id="audit-singular-plural-misses-1-skills-1-issue-need-1-skill-pass-ac">
12696
- <div class="head"><span class="pill planned">Planned</span><span class="cat">CLI · Polish</span></div>
12706
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">CLI · Polish</span></div>
12697
12707
  <h3>Singular/plural misses (&ldquo;1 skills&rdquo;, &ldquo;1 issue need&rdquo;, &ldquo;1 skill pass&rdquo;) across six commands</h3>
12708
+ <details class="cardbody"><summary>Write-up</summary>
12698
12709
  <p>Six commands hand-roll plurals and get the singular wrong. Reproduced verbatim on a fresh HOME with one
12699
12710
  installed skill: <b>doctor</b> &mdash; <code>&#9679; 1 issue need attention &mdash; see the suggestions
12700
12711
  above</code>; <b>lint</b> &mdash; <code>&#10003; 1 skill pass lint (min 40)</code>; <b>policy check</b> &mdash;
@@ -12717,12 +12728,23 @@ Fix as one sweep PR: reuse <code>_s</code> at <code>configuration.py:475</code>
12717
12728
  <code>quality.py:637/777</code> need a word pair chosen on <code>n == 1</code>
12718
12729
  (<em>needs/need</em>, <em>passes/pass</em>) &mdash; <code>_s</code> alone cannot fix verb agreement. Add a small
12719
12730
  unit test asserting the <code>n == 1</code> strings. No docs change &mdash; these are runtime messages only.
12720
- Found by the 2026-08 CLI audit (cluster pluralisation-sweep); repro in the audit log.</p>
12731
+ Found by the 2026-08 CLI audit (cluster pluralisation-sweep); repro in the audit log.
12732
+
12733
+ <b>Shipped.</b> <code>lint</code> now agrees noun and verb (<em>&ldquo;1 skill passes lint&rdquo;</em> vs
12734
+ <em>&ldquo;2 skills pass lint&rdquo;</em>); doctor's verb already agreed on re-verification and needed no
12735
+ change. <code>policy check</code>'s skills-only summary, <code>cohort create</code>'s rollout line,
12736
+ <code>count</code>'s kind breakdown, and <code>focus</code>'s sidelined-count line all switched from a
12737
+ hardcoded plural to <code>_s</code>. <code>profile save</code> and <code>profile use</code> lost their
12738
+ <code>skill(s)</code>/<code>rule(s)</code>/<code>workflow(s)</code> hedges in favor of the same helper.
12739
+ Functional tests updated at every site (<code>test_cli_configuration.py</code>,
12740
+ <code>test_cli_team.py</code>, <code>test_cli_intelligence.py</code>, <code>test_cli_discovery.py</code>,
12741
+ <code>test_cli_quality.py</code>, <code>test_kind_conformance.py</code>), plus a new singular-count case
12742
+ for <code>cohort create</code>.</p></details>
12721
12743
  <div class="meta">
12722
12744
  <span class="m">Complexity <b>S</b></span>
12723
12745
  <span class="m">Impact <b>Low</b></span>
12724
12746
  <span class="m">Wow <b class="wow">★</b></span>
12725
- <span class="m">a shared _s helper exists at _common.py:15 and six commands hand-roll around it</span>
12747
+ <span class="m">fixed via the shared _s helper across seven sites; doctor's verb agreement was already correct</span>
12726
12748
  </div>
12727
12749
  </article>
12728
12750
 
@@ -16787,7 +16809,7 @@ end to end through <code>boost install</code> for a tapped rule and a tapped wor
16787
16809
  </article>
16788
16810
 
16789
16811
  <article class="cap rcard" id="audit-trust-verify-labels-a-manifest-tampered-after-signing-by-a-t">
16790
- <div class="head"><span class="pill planned">Planned</span><span class="cat">Safety · Bug</span></div>
16812
+ <div class="head"><span class="pill inflight">In flight</span><span class="cat">Safety · Bug</span></div>
16791
16813
  <h3><code>trust verify</code> labels a manifest tampered after signing by a TRUSTED key 'untrusted'; sweep exits 0</h3>
16792
16814
  <p>Sign a tap's manifest with a trusted key, then edit the manifest &mdash; the exact tampering <code>trust verify</code> exists to catch. The sweep reports <code>iktakahiro/python-fastapi-ddd-sk&hellip;&nbsp; untrusted&nbsp; no trusted key verifies this sig&hellip;</code> and <b>exits 0</b>; <code>--json</code> says <code>{"status": "untrusted", "key_name": null, "fingerprint": "1122334455667788"}</code> &mdash; and that fingerprint is the trusted <code>acme</code> key's own. So a modified manifest is indistinguishable from a merely unknown signer, and a scripted sweep sails past it. One narrowing from verification: the named-tap path (<code>trust verify TAP</code>) does exit 1; the exit-0 hole is the sweep, whose alarm at <code>boost_cli/commands/quality.py:1329</code> fires only on INVALID. The 'untrusted / key unknown' mislabel affects both paths.
16793
16815
 
@@ -103,6 +103,12 @@ posture is reachable without a surprise breakage first.
103
103
  minisign signatures over tap content against a trusted Ed25519 public key. Both
104
104
  are **verify-only** — boost holds no private key material and cannot sign.
105
105
  Correctness is pinned by the RFC 8032 §7.1 test vectors in the unit suite.
106
+ `core/provenance.verify_dir` distinguishes a signature no trusted key accepts
107
+ (`untrusted` — an unrecognised signer) from one whose key id names a *trusted*
108
+ key but that no longer verifies (`invalid` — the tampering this feature exists
109
+ to catch: a manifest edited after a trusted key signed it). `boost trust
110
+ verify`'s sweep alarms — and exits non-zero — on `invalid`, so it must never be
111
+ reported as the merely-unrecognised `untrusted` case.
106
112
 
107
113
  **Tamper evidence.** Every installed item records a sha256 of its content and
108
114
  the commit it came from in the v3 lock file. `core/integrity.py` promotes that
@@ -292,7 +292,7 @@ class TestPolicy:
292
292
 
293
293
  def test_check_clean_vs_violations(self, boost, installed):
294
294
  r = boost("policy", "check")
295
- assert "policy check passed (1 skills)" in r.out
295
+ assert "policy check passed (1 skill)" in r.out
296
296
  r = boost("policy", "check", "--json")
297
297
  assert json.loads(r.out) == {
298
298
  "skills": 1, "counts": {"skill": 1, "rule": 0, "workflow": 0},
@@ -1562,7 +1562,7 @@ class TestCount:
1562
1562
  "tap": "rule-tap", "slot": "commands",
1563
1563
  "materializations": []})
1564
1564
  r = boost("count")
1565
- assert "installed 3 (1 skills · 1 rules · 1 workflows)" in r.out
1565
+ assert "installed 3 (1 skill · 1 rule · 1 workflow)" in r.out
1566
1566
  data = json.loads(boost("count", "--json").out)
1567
1567
  assert data["installed"] == 3
1568
1568
  assert (data["skills"], data["rules"], data["workflows"]) == (1, 1, 1)
@@ -515,7 +515,7 @@ class TestFocus:
515
515
  boost("install", "jira-integration", "--no-deps")
516
516
  r = boost("focus", "brainstorming")
517
517
  assert "focus: brainstorming" in r.out
518
- assert "(other 1 skills sidelined)" in r.out
518
+ assert "(other 1 skill sidelined)" in r.out
519
519
  jira_link = paths.home() / ".claude" / "skills" / "jira-integration"
520
520
  assert not jira_link.exists()
521
521
  assert (paths.home() / ".claude" / "skills" / "brainstorming").is_symlink()
@@ -334,7 +334,7 @@ class TestLint:
334
334
  assert "very large SKILL.md (>48KB) — consider splitting" in r.out
335
335
  assert "1 of 1 skill below 40 or with errors" in r.out
336
336
  r = boost("lint", "--min", "0")
337
- assert "1 skill pass lint (min 0)" in r.out
337
+ assert "1 skill passes lint (min 0)" in r.out
338
338
 
339
339
  def test_missing_fields_error_rc1_and_json(self, boost, sandbox, tmp_path):
340
340
  d = tmp_path / "noname"
@@ -357,7 +357,7 @@ class TestLint:
357
357
  r = boost("lint", "--tap", "fixture-tap", "cowboy-coding")
358
358
  assert "cowboy-coding" in r.out
359
359
  assert "80/100" in r.out
360
- assert "1 skill pass lint (min 40)" in r.out
360
+ assert "1 skill passes lint (min 40)" in r.out
361
361
 
362
362
 
363
363
  def test_tap_with_rules_lints_only_the_skills(self, boost, fixture_tap_src,
@@ -440,7 +440,7 @@ class TestLint:
440
440
  % ("d" * 45, "body text. " * 20), encoding="utf-8")
441
441
  r = boost("lint", str(d))
442
442
  assert "my-skill" in r.out
443
- assert "1 skill pass lint (min 40)" in r.out
443
+ assert "1 skill passes lint (min 40)" in r.out
444
444
 
445
445
  def test_path_target_accepts_a_skill_md_file_directly(
446
446
  self, boost, sandbox, tmp_path):
@@ -451,7 +451,7 @@ class TestLint:
451
451
  encoding="utf-8")
452
452
  r = boost("lint", str(md), "--min", "0")
453
453
  assert "my-skill" in r.out
454
- assert "1 skill pass lint (min 0)" in r.out
454
+ assert "1 skill passes lint (min 0)" in r.out
455
455
 
456
456
  def test_path_target_missing_directory_errors(self, boost, sandbox, tmp_path):
457
457
  r = boost("lint", str(tmp_path / "nope"), expect=1)
@@ -67,6 +67,12 @@ class TestCohort:
67
67
  assert ("created cohort pilot (100% rollout, 2 skills) — "
68
68
  "you are IN") in r.out
69
69
 
70
+ def test_create_singular_skill_agrees(self, boost, tapped):
71
+ r = boost("cohort", "create", "solo",
72
+ "--skills", "brainstorming", "--percent", "100")
73
+ assert ("created cohort solo (100% rollout, 1 skill) — "
74
+ "you are IN") in r.out
75
+
70
76
  def test_list_membership_column_and_json_determinism(self, boost, tapped):
71
77
  boost("cohort", "create", "pilot", "--skills", "brainstorming",
72
78
  "--percent", "100")
@@ -226,7 +232,7 @@ class TestProfile:
226
232
  assert "(installed, not in profile)" in r.out
227
233
 
228
234
  r = boost("profile", "use", "solo")
229
- assert ("sidelined 1 skill(s) not in the profile (unlinked, still "
235
+ assert ("sidelined 1 skill not in the profile (unlinked, still "
230
236
  "installed): cowboy-coding") in r.out
231
237
  link = paths.home() / ".claude" / "skills" / "cowboy-coding"
232
238
  assert not link.exists()
@@ -259,8 +265,8 @@ class TestProfile:
259
265
  "kind": "workflow", "version": "1.0.0", "tap": "rule-tap",
260
266
  "slot": "commands", "materializations": []})
261
267
  r = boost("profile", "save", "daily")
262
- assert "saved profile daily (1 skills)" in r.out
263
- assert ("1 rule(s) and 1 workflow(s) not captured — profiles carry "
268
+ assert "saved profile daily (1 skill)" in r.out
269
+ assert ("1 rule and 1 workflow not captured — profiles carry "
264
270
  "skills only") in r.out
265
271
 
266
272
  def test_diff_and_use_see_a_name_installed_as_a_rule(self, boost, installed):
@@ -82,7 +82,7 @@ NEVER_DENY = (
82
82
  ALL_CLEAR = (
83
83
  ("list", ("list",), (SKILL, RULE, WORKFLOW)),
84
84
  ("count", ("count",),
85
- ("installed 3 (1 skills · 1 rules · 1 workflows)",)),
85
+ ("installed 3 (1 skill · 1 rule · 1 workflow)",)),
86
86
  ("policy", ("policy", "check"),
87
87
  ("policy check passed (1 skill, 1 rule, 1 workflow)",)),
88
88
  ("doctor", ("doctor",),
@@ -108,6 +108,41 @@ def test_unsigned_tap_shows_unsigned(boost, tapped):
108
108
  assert "unsigned" in boost("trust", "verify").out
109
109
 
110
110
 
111
+ def test_tampered_manifest_from_trusted_key_reports_invalid_not_untrusted(
112
+ boost, fixture_tap_src, tmp_path, signer):
113
+ """Editing a manifest after a TRUSTED key signed it must not read as an
114
+ unknown signer.
115
+
116
+ A signature whose key id belongs to a trusted key but that no longer
117
+ verifies is exactly the tampering `trust verify` exists to catch — it must
118
+ not be indistinguishable from a merely-unrecognised signer.
119
+ """
120
+ from boost_cli.core import provenance, registry
121
+
122
+ tap = _signed_tap(fixture_tap_src, tmp_path, signer, name="tampered")
123
+ boost("tap", tap)
124
+ boost("trust", "add", "acme", signer.public_key_text())
125
+
126
+ # Tamper with the CLONE's manifest post-signing, without re-signing — the
127
+ # signature on disk now belongs to a trusted key id but fails to verify.
128
+ clone = registry.get("tampered").path
129
+ manifest = clone / provenance.SIGNED_FILE
130
+ manifest.write_bytes(manifest.read_bytes() + b"tampered\n")
131
+
132
+ r = boost("trust", "verify", "tampered", expect=1)
133
+ assert "invalid" in r.out
134
+ assert "untrusted" not in r.out
135
+
136
+ data = json.loads(boost("trust", "verify", "tampered", "--json", expect=1).out)
137
+ assert data[0]["status"] == "invalid"
138
+ assert data[0]["key_name"] == "acme"
139
+ assert data[0]["fingerprint"] == "1122334455667788"
140
+
141
+ # The sweep (no tap name) must alarm on this too, not exit 0.
142
+ sweep = boost("trust", "verify", expect=1)
143
+ assert "invalid" in sweep.out
144
+
145
+
111
146
  # ── enforcement: require_signed_taps ─────────────────────────────────────
112
147
 
113
148
  @pytest.fixture()
@@ -103,13 +103,31 @@ def test_untrusted_when_key_not_registered(sandbox, signer, tmp_path):
103
103
  assert r.fingerprint == "1122334455667788" # still reports whose key
104
104
 
105
105
 
106
- def test_untrusted_when_content_tampered(sandbox, signer, tmp_path):
106
+ def test_invalid_when_trusted_keys_content_tampered(sandbox, signer, tmp_path):
107
+ """A manifest edited after a TRUSTED key signed it is INVALID, not merely
108
+ UNTRUSTED — the signature's key id still matches a trusted key, so this is
109
+ the tampering `trust verify` exists to catch, not an unknown signer."""
107
110
  provenance.add_trusted_key("acme", signer.public_key_text())
108
111
  clone = tmp_path / "clone"
109
112
  clone.mkdir()
110
113
  signer.write_signed(clone, manifest=b"original\n")
111
114
  (clone / provenance.SIGNED_FILE).write_bytes(b"tampered\n")
112
- assert provenance.verify_dir(clone).status == provenance.UNTRUSTED
115
+ r = provenance.verify_dir(clone)
116
+ assert r.status == provenance.INVALID and not r.ok
117
+ assert r.key_name == "acme"
118
+ assert r.fingerprint == "1122334455667788"
119
+
120
+
121
+ def test_untrusted_when_content_tampered_and_key_unknown(sandbox, signer, tmp_path):
122
+ """Tampering under a key that was never trusted stays UNTRUSTED — there is
123
+ no trusted key to blame, so it reads as an unrecognised signer."""
124
+ clone = tmp_path / "clone"
125
+ clone.mkdir()
126
+ signer.write_signed(clone, manifest=b"original\n")
127
+ (clone / provenance.SIGNED_FILE).write_bytes(b"tampered\n")
128
+ r = provenance.verify_dir(clone)
129
+ assert r.status == provenance.UNTRUSTED
130
+ assert r.fingerprint == "1122334455667788"
113
131
 
114
132
 
115
133
  def test_invalid_when_signature_present_but_manifest_missing(sandbox, signer, tmp_path):
Binary file
File without changes