boost-skill-cli 1.0.356__tar.gz → 1.0.358__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 (601) hide show
  1. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/CLAUDE.md +10 -2
  2. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/PKG-INFO +1 -1
  3. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/_version.py +2 -2
  4. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_skill_cli.egg-info/PKG-INFO +1 -1
  5. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_skill_cli.egg-info/SOURCES.txt +3 -0
  6. boost_skill_cli-1.0.358/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +68 -0
  7. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +23 -1
  8. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap.html +90 -3
  9. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/scripts/ensure_eval_corpus.sh +6 -5
  10. boost_skill_cli-1.0.358/scripts/eval_corpus.py +142 -0
  11. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/setup.cfg +1 -0
  12. boost_skill_cli-1.0.358/tests/eval/taps.txt +68 -0
  13. boost_skill_cli-1.0.358/tests/unit/test_eval_corpus.py +198 -0
  14. boost_skill_cli-1.0.356/tests/eval/taps.txt +0 -46
  15. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/.gitattributes +0 -0
  16. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/.gitignore +0 -0
  17. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/.gitleaks.toml +0 -0
  18. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/.htmlvalidate.json +0 -0
  19. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/.lighthouserc.json +0 -0
  20. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/.lycheeignore +0 -0
  21. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/.markdownlint-cli2.jsonc +0 -0
  22. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/.pre-commit-config.yaml +0 -0
  23. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/.stylelintrc.json +0 -0
  24. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/.vale/styles/boost/Terminology.yml +0 -0
  25. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  26. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/.vale.ini +0 -0
  27. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/CODE_OF_CONDUCT.md +0 -0
  28. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/CONTRIBUTING.md +0 -0
  29. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/LICENSE +0 -0
  30. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/MANIFEST.in +0 -0
  31. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/Makefile +0 -0
  32. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/README.md +0 -0
  33. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/SECURITY.md +0 -0
  34. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost +0 -0
  35. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/__init__.py +0 -0
  36. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/__main__.py +0 -0
  37. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/cli.py +0 -0
  38. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/cliparse.py +0 -0
  39. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/commands/__init__.py +0 -0
  40. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/commands/_common.py +0 -0
  41. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/commands/bmad.py +0 -0
  42. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/commands/configuration.py +0 -0
  43. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/commands/discovery.py +0 -0
  44. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/commands/hooks.py +0 -0
  45. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/commands/info.py +0 -0
  46. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/commands/intelligence.py +0 -0
  47. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/commands/pkg.py +0 -0
  48. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/commands/quality.py +0 -0
  49. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/commands/run.py +0 -0
  50. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/commands/safety.py +0 -0
  51. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/commands/taps.py +0 -0
  52. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/commands/team.py +0 -0
  53. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/__init__.py +0 -0
  54. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/adapters.py +0 -0
  55. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/agents.py +0 -0
  56. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/ai.py +0 -0
  57. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/capabilities.py +0 -0
  58. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/catalog.py +0 -0
  59. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/chat.py +0 -0
  60. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/claude_settings.py +0 -0
  61. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/complete.py +0 -0
  62. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/config.py +0 -0
  63. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/dense.py +0 -0
  64. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/ed25519.py +0 -0
  65. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/embed.py +0 -0
  66. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/faithfulness.py +0 -0
  67. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/frontmatter.py +0 -0
  68. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/gitutil.py +0 -0
  69. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/imperative.py +0 -0
  70. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/injectscan.py +0 -0
  71. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/installscan.py +0 -0
  72. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/integrity.py +0 -0
  73. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/journal.py +0 -0
  74. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/localembed.py +0 -0
  75. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/lockfile.py +0 -0
  76. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/logs.py +0 -0
  77. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/mcp.py +0 -0
  78. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/mcpdecl.py +0 -0
  79. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/mcphost.py +0 -0
  80. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/minisign.py +0 -0
  81. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/nethttp.py +0 -0
  82. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/output.py +0 -0
  83. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/paths.py +0 -0
  84. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/policy.py +0 -0
  85. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/projectlock.py +0 -0
  86. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/provenance.py +0 -0
  87. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/rag.py +0 -0
  88. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/registry.py +0 -0
  89. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/resolve.py +0 -0
  90. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/rules.py +0 -0
  91. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/scopes.py +0 -0
  92. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/secretscan.py +0 -0
  93. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/selfupdate.py +0 -0
  94. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/serve.py +0 -0
  95. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/stackprobe.py +0 -0
  96. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/staleness.py +0 -0
  97. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/store.py +0 -0
  98. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/trustaudit.py +0 -0
  99. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/typosquat.py +0 -0
  100. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/updatediff.py +0 -0
  101. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/util.py +0 -0
  102. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/core/workflows.py +0 -0
  103. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/data/registries.json +0 -0
  104. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/errors.py +0 -0
  105. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_cli/spin.py +0 -0
  106. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  107. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  108. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_skill_cli.egg-info/requires.txt +0 -0
  109. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/boost_skill_cli.egg-info/top_level.txt +0 -0
  110. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/codecov.yml +0 -0
  111. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/.claude/settings.local.json +0 -0
  112. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/DEBUGGING.md +0 -0
  113. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/adapters.html +0 -0
  114. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/architecture/README.md +0 -0
  115. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/architecture/c4-components-core.md +0 -0
  116. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/architecture/c4-containers.md +0 -0
  117. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/architecture/c4-context.md +0 -0
  118. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/architecture/c4-dynamic-install.md +0 -0
  119. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/carousel/gifs/distill.gif +0 -0
  120. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/carousel/gifs/doctor.gif +0 -0
  121. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/carousel/gifs/explain.gif +0 -0
  122. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/carousel/gifs/hooks.gif +0 -0
  123. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/carousel/gifs/install.gif +0 -0
  124. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/carousel/gifs/pulse.gif +0 -0
  125. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/carousel/gifs/search.gif +0 -0
  126. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/carousel/gifs/tap.gif +0 -0
  127. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/carousel/tapes/distill.tape +0 -0
  128. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/carousel/tapes/doctor.tape +0 -0
  129. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/carousel/tapes/explain.tape +0 -0
  130. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/carousel/tapes/hooks.tape +0 -0
  131. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/carousel/tapes/install.tape +0 -0
  132. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/carousel/tapes/pulse.tape +0 -0
  133. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/carousel/tapes/search.tape +0 -0
  134. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/carousel/tapes/tap.tape +0 -0
  135. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/carousel.html +0 -0
  136. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/chat.html +0 -0
  137. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/commands.html +0 -0
  138. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/demo-index.json +0 -0
  139. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/demo.gif +0 -0
  140. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/demo.html +0 -0
  141. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/demo.tape +0 -0
  142. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/design-roadmap.html +0 -0
  143. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/eval.html +0 -0
  144. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/index.html +0 -0
  145. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/mcp-hub.html +0 -0
  146. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/rag-architecture.md +0 -0
  147. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/BOOST-D01.md +0 -0
  148. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/BOOST-D02.md +0 -0
  149. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/BOOST-D03.md +0 -0
  150. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/BOOST-D04.md +0 -0
  151. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/BOOST-D05.md +0 -0
  152. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/BOOST-D06.md +0 -0
  153. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/BOOST-D07.md +0 -0
  154. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/BOOST-D08.md +0 -0
  155. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/BOOST-D09.md +0 -0
  156. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/BOOST-D10.md +0 -0
  157. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/BOOST-D11.md +0 -0
  158. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/BOOST-D12.md +0 -0
  159. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/BOOST-D13.md +0 -0
  160. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/BOOST-D14.md +0 -0
  161. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/BOOST-D15.md +0 -0
  162. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/BOOST-D16.md +0 -0
  163. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/BOOST-D17.md +0 -0
  164. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/BOOST-D18.md +0 -0
  165. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/BOOST-D19.md +0 -0
  166. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/BOOST-D20.md +0 -0
  167. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/BOOST-D21.md +0 -0
  168. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/BOOST-D22.md +0 -0
  169. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/BOOST-D23.md +0 -0
  170. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/BOOST-D24.md +0 -0
  171. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/BOOST-D25.md +0 -0
  172. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/BOOST-D26.md +0 -0
  173. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  174. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  175. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  176. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  177. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  178. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  179. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  180. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  181. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  182. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  183. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  184. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  185. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  186. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  187. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  188. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  189. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  190. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  191. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  192. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  193. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  194. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  195. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  196. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  197. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/command-carousel-page.md +0 -0
  198. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  199. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  200. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  201. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  202. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  203. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  204. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  205. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  206. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  207. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  208. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  209. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  210. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  211. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  212. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  213. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  214. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  215. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  216. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  217. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  218. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  219. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  220. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  221. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  222. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  223. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  224. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  225. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  226. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  227. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  228. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  229. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/github-community-health-files.md +0 -0
  230. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  231. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  232. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  233. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  234. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  235. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  236. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  237. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  238. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  239. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  240. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  241. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  242. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  243. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  244. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  245. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  246. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  247. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  248. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  249. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  250. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  251. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  252. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  253. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  254. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  255. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  256. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  257. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  258. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  259. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  260. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  261. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  262. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  263. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  264. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  265. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  266. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  267. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  268. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  269. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  270. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  271. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  272. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  273. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  274. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  275. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  276. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  277. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  278. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  279. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  280. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  281. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  282. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  283. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  284. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  285. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  286. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  287. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  288. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  289. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  290. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  291. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  292. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  293. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  294. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  295. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  296. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  297. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  298. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  299. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  300. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  301. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  302. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  303. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  304. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  305. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  306. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  307. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  308. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  309. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  310. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  311. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  312. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  313. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  314. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  315. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  316. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  317. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  318. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  319. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  320. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  321. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  322. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  323. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  324. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  325. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  326. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  327. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  328. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  329. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  330. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  331. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  332. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  333. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  334. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  335. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  336. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  337. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  338. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  339. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  340. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  341. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  342. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  343. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  344. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  345. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  346. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  347. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  348. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  349. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  350. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  351. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  352. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  353. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  354. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  355. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  356. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  357. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  358. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  359. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  360. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  361. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  362. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  363. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  364. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  365. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  366. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/workspace-scope-install.md +0 -0
  367. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  368. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/eslint.config.mjs +0 -0
  369. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/evals/README.md +0 -0
  370. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/evals/__init__.py +0 -0
  371. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/evals/baseline.json +0 -0
  372. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/evals/faithfulness.py +0 -0
  373. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/evals/golden_set.json +0 -0
  374. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/evals/make_corpus.py +0 -0
  375. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/evals/make_golden.py +0 -0
  376. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/evals/metrics.py +0 -0
  377. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/evals/run_evals.py +0 -0
  378. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/examples/README.md +0 -0
  379. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/examples/adapt-demo.sh +0 -0
  380. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/examples/boost-run-prototype.sh +0 -0
  381. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/index.html +0 -0
  382. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/noxfile.py +0 -0
  383. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/pyproject.toml +0 -0
  384. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/requirements/coverage-tools.in +0 -0
  385. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/requirements/coverage-tools.txt +0 -0
  386. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/requirements/lint-tools.in +0 -0
  387. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/requirements/lint-tools.txt +0 -0
  388. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/requirements/mutation-tools.in +0 -0
  389. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/requirements/mutation-tools.txt +0 -0
  390. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/requirements/platform-pins.lock +0 -0
  391. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/requirements/release-tools.in +0 -0
  392. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/requirements/release-tools.txt +0 -0
  393. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/requirements/test-tools.in +0 -0
  394. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/requirements/test-tools.txt +0 -0
  395. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/scripts/a11y_check.py +0 -0
  396. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/scripts/bench_cli.sh +0 -0
  397. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/scripts/build_command_reference.py +0 -0
  398. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/scripts/build_demo_index.py +0 -0
  399. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/scripts/build_registries.py +0 -0
  400. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/scripts/build_roadmap.py +0 -0
  401. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/scripts/check_anchors.py +0 -0
  402. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/scripts/check_licenses.py +0 -0
  403. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/scripts/check_required_checks.py +0 -0
  404. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/scripts/eval_explain.py +0 -0
  405. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/scripts/eval_gate.py +0 -0
  406. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/scripts/eval_recommend.py +0 -0
  407. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/scripts/eval_retrieval.py +0 -0
  408. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/scripts/eval_stats_summary.py +0 -0
  409. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/scripts/import_budget.py +0 -0
  410. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/scripts/lock_toolchain.py +0 -0
  411. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/scripts/mutation_gate.py +0 -0
  412. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/scripts/mutation_shards.py +0 -0
  413. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/scripts/mutation_weights.json +0 -0
  414. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/scripts/perf_gate.py +0 -0
  415. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/scripts/post_deploy_smoke.py +0 -0
  416. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/scripts/release_guard.py +0 -0
  417. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/scripts/release_preflight.py +0 -0
  418. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/sonar-project.properties +0 -0
  419. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/style/README.md +0 -0
  420. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/style/boost.css +0 -0
  421. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/style/boost.js +0 -0
  422. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/style/demo.html +0 -0
  423. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/bdd/features/adapt.feature +0 -0
  424. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/bdd/features/browse.feature +0 -0
  425. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/bdd/features/count.feature +0 -0
  426. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/bdd/features/discover.feature +0 -0
  427. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/bdd/features/doctor.feature +0 -0
  428. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/bdd/features/environment.py +0 -0
  429. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/bdd/features/explain.feature +0 -0
  430. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/bdd/features/index.feature +0 -0
  431. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/bdd/features/install.feature +0 -0
  432. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/bdd/features/list.feature +0 -0
  433. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/bdd/features/mcp.feature +0 -0
  434. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/bdd/features/search.feature +0 -0
  435. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/bdd/features/steps/cli_steps.py +0 -0
  436. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/bdd/features/steps/discovery_steps.py +0 -0
  437. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/bdd/features/steps/mcp_steps.py +0 -0
  438. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/bdd/features/steps/quality_steps.py +0 -0
  439. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/conftest.py +0 -0
  440. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/eval/baseline.json +0 -0
  441. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/eval/explain.jsonl +0 -0
  442. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/eval/golden-natural.jsonl +0 -0
  443. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/eval/golden.jsonl +0 -0
  444. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/eval/recommend.jsonl +0 -0
  445. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/functional/test_capabilities_policy.py +0 -0
  446. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/functional/test_cli_adapt.py +0 -0
  447. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/functional/test_cli_bmad.py +0 -0
  448. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/functional/test_cli_chat.py +0 -0
  449. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/functional/test_cli_configuration.py +0 -0
  450. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/functional/test_cli_discovery.py +0 -0
  451. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/functional/test_cli_hooks.py +0 -0
  452. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/functional/test_cli_info.py +0 -0
  453. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/functional/test_cli_intelligence.py +0 -0
  454. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/functional/test_cli_pkg.py +0 -0
  455. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/functional/test_cli_quality.py +0 -0
  456. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/functional/test_cli_taps.py +0 -0
  457. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/functional/test_cli_team.py +0 -0
  458. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/functional/test_everyday_loop.py +0 -0
  459. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/functional/test_integrity_enforce.py +0 -0
  460. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/functional/test_property_parsers.py +0 -0
  461. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/functional/test_run.py +0 -0
  462. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/functional/test_tap_signing.py +0 -0
  463. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/functional/test_workspace_scope.py +0 -0
  464. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/fuzz/README.md +0 -0
  465. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  466. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  467. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  468. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  469. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  470. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  471. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  472. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  473. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  474. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  475. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  476. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  477. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  478. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  479. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  480. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  481. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  482. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  483. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  484. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  485. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/fuzz/fuzz_frontmatter.py +0 -0
  486. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/fuzz/fuzz_registry.py +0 -0
  487. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/make_fixture.py +0 -0
  488. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/perf/test_benchmarks.py +0 -0
  489. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/smoke.sh +0 -0
  490. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_a11y_check.py +0 -0
  491. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_adapters.py +0 -0
  492. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_adapters_multi.py +0 -0
  493. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_adapters_runner.py +0 -0
  494. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_agents.py +0 -0
  495. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_ai.py +0 -0
  496. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_capabilities.py +0 -0
  497. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_catalog.py +0 -0
  498. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_chat.py +0 -0
  499. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_check_anchors.py +0 -0
  500. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_check_licenses.py +0 -0
  501. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_claude_settings.py +0 -0
  502. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_cliparse.py +0 -0
  503. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_codeql_analysis_key.py +0 -0
  504. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_command_reference_fresh.py +0 -0
  505. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_community_health_files.py +0 -0
  506. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_complete.py +0 -0
  507. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_config.py +0 -0
  508. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_content_dedupe.py +0 -0
  509. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_dedup_trust.py +0 -0
  510. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_demo_index.py +0 -0
  511. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_dense.py +0 -0
  512. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_dense_fallback.py +0 -0
  513. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_dense_fix_hint.py +0 -0
  514. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_dense_shards.py +0 -0
  515. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_dense_status.py +0 -0
  516. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_dependabot_config.py +0 -0
  517. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_docs_pages_linked.py +0 -0
  518. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_docsite_chrome.py +0 -0
  519. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_ed25519.py +0 -0
  520. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_embed.py +0 -0
  521. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_embed_local.py +0 -0
  522. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_entry_key.py +0 -0
  523. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_errors_and_cli_table.py +0 -0
  524. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_eval_baseline.py +0 -0
  525. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_eval_faithfulness.py +0 -0
  526. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_eval_gate.py +0 -0
  527. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_eval_grading.py +0 -0
  528. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_eval_metrics.py +0 -0
  529. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_eval_stats_summary.py +0 -0
  530. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_faithfulness.py +0 -0
  531. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_frontmatter.py +0 -0
  532. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_fuzz_targets.py +0 -0
  533. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_gitleaks_config.py +0 -0
  534. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_gitutil.py +0 -0
  535. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_imperative.py +0 -0
  536. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_import_budget.py +0 -0
  537. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_injectscan.py +0 -0
  538. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_installscan.py +0 -0
  539. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_integrity.py +0 -0
  540. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_journal.py +0 -0
  541. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_localembed.py +0 -0
  542. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_localembed_e2e.py +0 -0
  543. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_lockfile.py +0 -0
  544. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_logs.py +0 -0
  545. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_marketing_counts.py +0 -0
  546. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_mcp.py +0 -0
  547. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_mcp_install_scan.py +0 -0
  548. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_mcpdecl.py +0 -0
  549. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_mcphost.py +0 -0
  550. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_minisign.py +0 -0
  551. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_mutation_hardening.py +0 -0
  552. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_mutation_shards.py +0 -0
  553. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_mutation_subfile_shards.py +0 -0
  554. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_mutmut_source_paths.py +0 -0
  555. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_nethttp.py +0 -0
  556. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_output.py +0 -0
  557. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_paths.py +0 -0
  558. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_perf_gate.py +0 -0
  559. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_pkg_confusions.py +0 -0
  560. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_pkg_injection.py +0 -0
  561. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_pkg_secrets.py +0 -0
  562. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_platform_pins.py +0 -0
  563. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_policy.py +0 -0
  564. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_post_deploy_smoke.py +0 -0
  565. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_project_mcp_sidecar.py +0 -0
  566. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_projectlock.py +0 -0
  567. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_provenance.py +0 -0
  568. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_rag.py +0 -0
  569. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_rag_fusion.py +0 -0
  570. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_registries_fresh.py +0 -0
  571. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_registry.py +0 -0
  572. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_registry_categories.py +0 -0
  573. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_release_guard.py +0 -0
  574. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_release_preflight.py +0 -0
  575. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_required_checks.py +0 -0
  576. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_resolve.py +0 -0
  577. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_roadmap_fresh.py +0 -0
  578. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_rules.py +0 -0
  579. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_scopes.py +0 -0
  580. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_secretscan.py +0 -0
  581. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_selfupdate.py +0 -0
  582. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_serve.py +0 -0
  583. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_spin.py +0 -0
  584. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_stackprobe.py +0 -0
  585. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_staleness.py +0 -0
  586. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_store.py +0 -0
  587. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_token_parity.py +0 -0
  588. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_toolchain_lock.py +0 -0
  589. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_trustaudit.py +0 -0
  590. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_typosquat.py +0 -0
  591. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_updatediff.py +0 -0
  592. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_util.py +0 -0
  593. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_version.py +0 -0
  594. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_workflow_concurrency.py +0 -0
  595. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_workflow_timeouts.py +0 -0
  596. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/unit/test_workflows.py +0 -0
  597. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/visual/a11y_check.mjs +0 -0
  598. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/visual/console_check.mjs +0 -0
  599. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/visual/package-lock.json +0 -0
  600. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/visual/package.json +0 -0
  601. {boost_skill_cli-1.0.356 → boost_skill_cli-1.0.358}/tests/visual/visual_check.mjs +0 -0
@@ -68,8 +68,16 @@ alone BM25 scored 1.000 / 0.791 / 0.854 / 0.882, and over the twenty it scores
68
68
  old floors fail once the corpus stops being tiny. Each floor now sits ~10% under
69
69
  its measured value — loose enough that upstream drift can't flake the build,
70
70
  tight enough to catch a collapse. Regression-vs-baseline stays relaxed
71
- (`--regression-eps 1`) because the corpus tracks upstream HEAD rather than
72
- pinned commits, so the absolute floors are the real gate.
71
+ (`--regression-eps 1`), so the absolute floors are the real gate.
72
+
73
+ **Every row of `taps.txt` pins a commit SHA**, and `scripts/eval_corpus.py`
74
+ checks each clone out at it — the corpus is 10,152 entries, of which one
75
+ third-party repo is 6,309 (62%), so an unpinned list left a required check
76
+ hostage to someone else's push. CI and `make eval` must invoke the gate with
77
+ identical floors; `tests/unit/test_eval_corpus.py` fails the build if they
78
+ diverge, which they had (CI floored recall alone at 0.85 against a measured
79
+ 0.863 — a buffer of 1.15 queries out of 91 — and applied none of the other
80
+ three). Moving a pin means regenerating the baseline; the file says how.
73
81
 
74
82
  **Baselines are keyed by query set** (`name@content-digest`), so one file holds
75
83
  both `golden.jsonl` and `golden-natural.jsonl` without either overwriting the
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.356
3
+ Version: 1.0.358
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.0.356'
22
- __version_tuple__ = version_tuple = (1, 0, 356)
21
+ __version__ = version = '1.0.358'
22
+ __version_tuple__ = version_tuple = (1, 0, 358)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.356
3
+ Version: 1.0.358
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -213,6 +213,7 @@ docs/roadmap/items/doctor-checks-rules-and-workflows.md
213
213
  docs/roadmap/items/end-of-options-guard-on-git-commands.md
214
214
  docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md
215
215
  docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md
216
+ docs/roadmap/items/eval-corpus-was-not-actually-pinned.md
216
217
  docs/roadmap/items/extension-free-tests-core-dense-py.md
217
218
  docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md
218
219
  docs/roadmap/items/finish-mutation-hardening-across-core.md
@@ -396,6 +397,7 @@ scripts/check_anchors.py
396
397
  scripts/check_licenses.py
397
398
  scripts/check_required_checks.py
398
399
  scripts/ensure_eval_corpus.sh
400
+ scripts/eval_corpus.py
399
401
  scripts/eval_explain.py
400
402
  scripts/eval_gate.py
401
403
  scripts/eval_recommend.py
@@ -517,6 +519,7 @@ tests/unit/test_embed_local.py
517
519
  tests/unit/test_entry_key.py
518
520
  tests/unit/test_errors_and_cli_table.py
519
521
  tests/unit/test_eval_baseline.py
522
+ tests/unit/test_eval_corpus.py
520
523
  tests/unit/test_eval_faithfulness.py
521
524
  tests/unit/test_eval_gate.py
522
525
  tests/unit/test_eval_grading.py
@@ -0,0 +1,68 @@
1
+ ---
2
+ id: eval-corpus-was-not-actually-pinned
3
+ board: code
4
+ section: internals
5
+ status: shipped
6
+ category: Eval · Correctness
7
+ complexity: M
8
+ impact: High
9
+ wow: 4
10
+ note: 62% of the required gate's corpus was one unpinned third-party repo, against a 1.15-query margin
11
+ order: 82
12
+ owner: loop/pin-eval-corpus
13
+ pr: 410
14
+ title: The “pinned” eval corpus pinned names, not commits
15
+ ---
16
+ <b>The required <code>eval</code> gate called its corpus pinned. It pinned repository
17
+ <em>names</em>.</b> <code>tests/eval/taps.txt</code> listed twenty <code>owner/repo</code> lines and
18
+ <code>ensure_eval_corpus.sh</code> shallow-cloned each one at whatever its default branch pointed at,
19
+ so the corpus a required check measured was reproducible only for as long as twenty third parties
20
+ happened not to push.
21
+
22
+ <b>Nothing had drifted, and that is worth saying plainly</b> &mdash; today's scores match the
23
+ committed baseline to sixteen decimal places, so this is a latent coupling rather than a bug that
24
+ already fired. What is surprising is the shape of what was uncoupled. Those twenty repos resolve to
25
+ <b>10,152 entries</b>, and a single one of them &mdash;
26
+ <code>sickn33/antigravity-awesome-skills</code> &mdash; is <b>6,309 of them, 62% of the gate's entire
27
+ corpus</b>. <code>affaan-m/ECC</code> is another 1,616 (16%). Two strangers' repositories were 78% of
28
+ what the project measured retrieval quality against.
29
+
30
+ <b>The margin they were spending is 1.15 queries.</b> BM25 scores recall@10 <b>0.863</b> over this
31
+ corpus and CI floored it at <b>0.85</b>: across 91 golden queries that is a buffer of 1.15
32
+ recall-units, so <em>one</em> query can fall out of the top ten and the gate still passes, and two
33
+ cannot. One upstream push to the repo holding 62% of the corpus could therefore have turned a
34
+ required check red on a pull request that touched nothing to do with retrieval &mdash; and on this
35
+ project a red required check blocks a merge, and every merge cuts a PyPI release.
36
+
37
+ <b>A second thing fell out of measuring it: the gate was not the gate.</b> <code>make check</code>
38
+ claims to be the required gate, and <code>CLAUDE.md</code> documents <code>eval</code> as four floors
39
+ &mdash; recall@k 0.78, hit@1 0.40, MRR 0.52, nDCG@k 0.58. CI ran
40
+ <code>--fail-under 0.85</code> and <b>no other floor</b>. So the required check was simultaneously
41
+ <em>tighter</em> than the documented gate on one metric and <em>absent</em> on the other three
42
+ &mdash; the three added specifically to catch a ranker that finds the right answer every time and
43
+ never ranks it first. A regression driving hit@1 to 0.000 would have passed CI while
44
+ <code>make check</code> failed locally. Its comment also asserted &ldquo;measured 1.000 over the
45
+ pinned corpus, wide margin&rdquo;, which was wrong in both halves.
46
+
47
+ <b>What shipped.</b> Every row of <code>taps.txt</code> now carries a 40-character commit SHA;
48
+ <code>scripts/eval_corpus.py</code> parses the list, fetches the pinned commit when a shallow clone
49
+ lacks it, checks it out and rebuilds that tap's cache from the pinned tree. A malformed SHA is fatal
50
+ rather than silently treated as unpinned, because a typo that reads as a pin is the failure this
51
+ exists to prevent. CI's invocation was aligned with <code>make eval</code>, and a unit test now
52
+ compares the flags in <code>Makefile</code> and <code>ci.yml</code> and fails the build when they
53
+ disagree &mdash; the drift was invisible precisely because two files each looked right on their own.
54
+
55
+ <b>Stated limits.</b> Pinning fixes reproducibility, not representativeness: the corpus is still
56
+ 10,152 entries where a real install runs far more, which is
57
+ [[eval-corpus-is-96x-smaller-than-a-real-install]]'s subject and unaffected by this. Moving a pin is
58
+ now a deliberate edit that requires regenerating the baseline, which is the intended cost. And the
59
+ recall floor was loosened 0.85 &rarr; 0.78 to match the documented gate; that is a real loosening,
60
+ bought back by three metrics gaining floors they did not have and by the corpus no longer being able
61
+ to move underneath the number.
62
+
63
+ <b>Provenance.</b> Found while researching options for
64
+ [[eval-corpus-is-96x-smaller-than-a-real-install]] and
65
+ [[golden-set-grades-by-name-not-by-skill]] &mdash; measuring the corpus in order to size a second
66
+ tier is what turned up the fact that nobody knew how big the first one was. It also corrects a claim
67
+ I made while researching it: I reported the corpus as 3,843 entries and the margin as +0.062, both
68
+ measured on an install that was missing the repo holding 62% of it.
@@ -7,7 +7,7 @@ category: Build · Gap
7
7
  complexity: M
8
8
  impact: Med
9
9
  wow: 2
10
- note: the blocker this card recorded had already been lifted — re-checked, not assumed
10
+ note: shipped and now proven — first real run opened #405, audit passed, zero pins dropped
11
11
  order: 36
12
12
  owner:
13
13
  pr:
@@ -126,3 +126,25 @@ genuinely reading this file. That check exists because an earlier workflow in th
126
126
 
127
127
  <b>Unproven until it runs:</b> the first scheduled execution is the first end-to-end exercise.
128
128
 
129
+ <b>Proven &mdash; the &ldquo;unproven until it runs&rdquo; caveat above is now closed.</b> The
130
+ workflow's first real execution opened <code>#405</code>, and it validated on every point the design
131
+ turned on. <code>--audit</code> passed on the runner and <b>zero pins were dropped</b>, which is the
132
+ exact failure that made Dependabot unusable here. Six packages moved
133
+ (<code>cryptography</code>&nbsp;49&rarr;50, <code>mutmut</code>&nbsp;3.6&rarr;3.7,
134
+ <code>libcst</code>&nbsp;1.8.6&rarr;1.9.0, <code>hypothesis</code>, <code>filelock</code>,
135
+ <code>pip</code>) across four groups; <code>lint-tools</code> did not move at all.
136
+
137
+ <b>The prediction written into the PR body held exactly.</b> That body warns the reader that the PR
138
+ arrives with no check runs because <code>create-pull-request</code> pushes with
139
+ <code>GITHUB_TOKEN</code>; the real PR arrived with <code>total_count: 0</code>. Predicting it in
140
+ advance is the difference between a documented platform rule and a confusing discovery &mdash; an
141
+ empty check list is indistinguishable from &ldquo;CI has not started yet&rdquo;, and a reader who
142
+ did not know that could merge a toolchain bump believing it was green.
143
+
144
+ <b>Following the workflow's own advice caught the thing worth catching.</b> Rather than merging on a
145
+ page with no checks, <i>Update branch</i> was pressed to make CI actually run &mdash; and the
146
+ riskiest part of the bump was <code>mutmut</code>&nbsp;3.7 with <code>libcst</code>&nbsp;1.9, since
147
+ the mutation gate runs on both. It passed, and the bump merged as <code>#405</code>. The one-PR
148
+ choice also held up in practice: the per-group diffstat in the body made a 4-file, +296/-311 change
149
+ reviewable at a glance.
150
+
@@ -125,7 +125,7 @@
125
125
  <div class="stat"><b>16</b><span>Shipped</span></div>
126
126
  <div class="stat"><b>1</b><span>Next up</span></div>
127
127
  <div class="stat"><b>4</b><span>Planned</span></div>
128
- <div class="stat"><b>196</b><span>Loop finds</span></div>
128
+ <div class="stat"><b>197</b><span>Loop finds</span></div>
129
129
  <!-- /ROADMAP:stats -->
130
130
  </div>
131
131
  </section>
@@ -1920,12 +1920,34 @@ scanner against a copy with <code>${{ github.event.head_commit.message }}</code>
1920
1920
  genuinely reading this file. That check exists because an earlier workflow in this repo
1921
1921
  (<code>shards.yml</code>) shipped exactly that hole.
1922
1922
 
1923
- <b>Unproven until it runs:</b> the first scheduled execution is the first end-to-end exercise.</p></details>
1923
+ <b>Unproven until it runs:</b> the first scheduled execution is the first end-to-end exercise.
1924
+
1925
+ <b>Proven &mdash; the &ldquo;unproven until it runs&rdquo; caveat above is now closed.</b> The
1926
+ workflow's first real execution opened <code>#405</code>, and it validated on every point the design
1927
+ turned on. <code>--audit</code> passed on the runner and <b>zero pins were dropped</b>, which is the
1928
+ exact failure that made Dependabot unusable here. Six packages moved
1929
+ (<code>cryptography</code>&nbsp;49&rarr;50, <code>mutmut</code>&nbsp;3.6&rarr;3.7,
1930
+ <code>libcst</code>&nbsp;1.8.6&rarr;1.9.0, <code>hypothesis</code>, <code>filelock</code>,
1931
+ <code>pip</code>) across four groups; <code>lint-tools</code> did not move at all.
1932
+
1933
+ <b>The prediction written into the PR body held exactly.</b> That body warns the reader that the PR
1934
+ arrives with no check runs because <code>create-pull-request</code> pushes with
1935
+ <code>GITHUB_TOKEN</code>; the real PR arrived with <code>total_count: 0</code>. Predicting it in
1936
+ advance is the difference between a documented platform rule and a confusing discovery &mdash; an
1937
+ empty check list is indistinguishable from &ldquo;CI has not started yet&rdquo;, and a reader who
1938
+ did not know that could merge a toolchain bump believing it was green.
1939
+
1940
+ <b>Following the workflow's own advice caught the thing worth catching.</b> Rather than merging on a
1941
+ page with no checks, <i>Update branch</i> was pressed to make CI actually run &mdash; and the
1942
+ riskiest part of the bump was <code>mutmut</code>&nbsp;3.7 with <code>libcst</code>&nbsp;1.9, since
1943
+ the mutation gate runs on both. It passed, and the bump merged as <code>#405</code>. The one-PR
1944
+ choice also held up in practice: the per-group diffstat in the body made a 4-file, +296/-311 change
1945
+ reviewable at a glance.</p></details>
1924
1946
  <div class="meta">
1925
1947
  <span class="m">Complexity <b>M</b></span>
1926
1948
  <span class="m">Impact <b>Med</b></span>
1927
1949
  <span class="m">Wow <b class="wow">★★</b></span>
1928
- <span class="m">the blocker this card recorded had already been lifted — re-checked, not assumed</span>
1950
+ <span class="m">shipped and now proven — first real run opened</span>
1929
1951
  </div>
1930
1952
  </article>
1931
1953
 
@@ -2398,6 +2420,71 @@ the metric and none of them destabilise it.</p>
2398
2420
  <span class="m">the mechanism ships; which of 59 code-reviewers each query means is still a human call</span>
2399
2421
  </div>
2400
2422
  </article>
2423
+
2424
+ <article class="cap rcard" id="eval-corpus-was-not-actually-pinned">
2425
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Eval · Correctness</span></div>
2426
+ <h3>The &ldquo;pinned&rdquo; eval corpus pinned names, not commits</h3>
2427
+ <details class="cardbody"><summary>Write-up</summary>
2428
+ <p><b>The required <code>eval</code> gate called its corpus pinned. It pinned repository
2429
+ <em>names</em>.</b> <code>tests/eval/taps.txt</code> listed twenty <code>owner/repo</code> lines and
2430
+ <code>ensure_eval_corpus.sh</code> shallow-cloned each one at whatever its default branch pointed at,
2431
+ so the corpus a required check measured was reproducible only for as long as twenty third parties
2432
+ happened not to push.
2433
+
2434
+ <b>Nothing had drifted, and that is worth saying plainly</b> &mdash; today's scores match the
2435
+ committed baseline to sixteen decimal places, so this is a latent coupling rather than a bug that
2436
+ already fired. What is surprising is the shape of what was uncoupled. Those twenty repos resolve to
2437
+ <b>10,152 entries</b>, and a single one of them &mdash;
2438
+ <code>sickn33/antigravity-awesome-skills</code> &mdash; is <b>6,309 of them, 62% of the gate's entire
2439
+ corpus</b>. <code>affaan-m/ECC</code> is another 1,616 (16%). Two strangers' repositories were 78% of
2440
+ what the project measured retrieval quality against.
2441
+
2442
+ <b>The margin they were spending is 1.15 queries.</b> BM25 scores recall@10 <b>0.863</b> over this
2443
+ corpus and CI floored it at <b>0.85</b>: across 91 golden queries that is a buffer of 1.15
2444
+ recall-units, so <em>one</em> query can fall out of the top ten and the gate still passes, and two
2445
+ cannot. One upstream push to the repo holding 62% of the corpus could therefore have turned a
2446
+ required check red on a pull request that touched nothing to do with retrieval &mdash; and on this
2447
+ project a red required check blocks a merge, and every merge cuts a PyPI release.
2448
+
2449
+ <b>A second thing fell out of measuring it: the gate was not the gate.</b> <code>make check</code>
2450
+ claims to be the required gate, and <code>CLAUDE.md</code> documents <code>eval</code> as four floors
2451
+ &mdash; recall@k 0.78, hit@1 0.40, MRR 0.52, nDCG@k 0.58. CI ran
2452
+ <code>--fail-under 0.85</code> and <b>no other floor</b>. So the required check was simultaneously
2453
+ <em>tighter</em> than the documented gate on one metric and <em>absent</em> on the other three
2454
+ &mdash; the three added specifically to catch a ranker that finds the right answer every time and
2455
+ never ranks it first. A regression driving hit@1 to 0.000 would have passed CI while
2456
+ <code>make check</code> failed locally. Its comment also asserted &ldquo;measured 1.000 over the
2457
+ pinned corpus, wide margin&rdquo;, which was wrong in both halves.
2458
+
2459
+ <b>What shipped.</b> Every row of <code>taps.txt</code> now carries a 40-character commit SHA;
2460
+ <code>scripts/eval_corpus.py</code> parses the list, fetches the pinned commit when a shallow clone
2461
+ lacks it, checks it out and rebuilds that tap's cache from the pinned tree. A malformed SHA is fatal
2462
+ rather than silently treated as unpinned, because a typo that reads as a pin is the failure this
2463
+ exists to prevent. CI's invocation was aligned with <code>make eval</code>, and a unit test now
2464
+ compares the flags in <code>Makefile</code> and <code>ci.yml</code> and fails the build when they
2465
+ disagree &mdash; the drift was invisible precisely because two files each looked right on their own.
2466
+
2467
+ <b>Stated limits.</b> Pinning fixes reproducibility, not representativeness: the corpus is still
2468
+ 10,152 entries where a real install runs far more, which is
2469
+ [[eval-corpus-is-96x-smaller-than-a-real-install]]'s subject and unaffected by this. Moving a pin is
2470
+ now a deliberate edit that requires regenerating the baseline, which is the intended cost. And the
2471
+ recall floor was loosened 0.85 &rarr; 0.78 to match the documented gate; that is a real loosening,
2472
+ bought back by three metrics gaining floors they did not have and by the corpus no longer being able
2473
+ to move underneath the number.
2474
+
2475
+ <b>Provenance.</b> Found while researching options for
2476
+ [[eval-corpus-is-96x-smaller-than-a-real-install]] and
2477
+ [[golden-set-grades-by-name-not-by-skill]] &mdash; measuring the corpus in order to size a second
2478
+ tier is what turned up the fact that nobody knew how big the first one was. It also corrects a claim
2479
+ I made while researching it: I reported the corpus as 3,843 entries and the margin as +0.062, both
2480
+ measured on an install that was missing the repo holding 62% of it.</p></details>
2481
+ <div class="meta">
2482
+ <span class="m">Complexity <b>M</b></span>
2483
+ <span class="m hi">Impact <b>High</b></span>
2484
+ <span class="m">Wow <b class="wow">★★★★</b></span>
2485
+ <span class="m">62% of the required gate's corpus was one unpinned third-party repo, against a 1.15-query margin</span>
2486
+ </div>
2487
+ </article>
2401
2488
  <!-- /ROADMAP:cards -->
2402
2489
 
2403
2490
  </div>
@@ -7,6 +7,11 @@
7
7
  # offline) after the first run. CI runs on a fresh $HOME and always taps. Set
8
8
  # FORCE=1 to re-tap. Honors $PYTHON (defaults to python3) so make can pass its
9
9
  # venv interpreter.
10
+ #
11
+ # The tap list carries a commit SHA per repo, and the loop that reads it lives in
12
+ # scripts/eval_corpus.py rather than here: the format needs parsing and the pin
13
+ # needs a fetch-then-checkout, neither of which a shell loop can be unit-tested
14
+ # on. This file keeps what it is good at — the sentinel and the environment.
10
15
  set -euo pipefail
11
16
 
12
17
  root=$(cd "$(dirname "$0")/.." && pwd)
@@ -19,11 +24,7 @@ if [ -z "${FORCE:-}" ] && [ -f "$sentinel" ]; then
19
24
  exit 0
20
25
  fi
21
26
 
22
- while IFS= read -r repo || [ -n "$repo" ]; do
23
- case "$repo" in ''|\#*) continue ;; esac
24
- echo "tap $repo"
25
- PYTHONPATH="$root" "$py" -m boost_cli tap "$repo"
26
- done < "$root/tests/eval/taps.txt"
27
+ PYTHONPATH="$root" "$py" "$root/scripts/eval_corpus.py" --ensure
27
28
 
28
29
  mkdir -p "$home"
29
30
  : > "$sentinel"
@@ -0,0 +1,142 @@
1
+ #!/usr/bin/env python3
2
+ """Materialise the Tier 1 eval corpus at the exact commits it was measured on.
3
+
4
+ WHY THIS EXISTS. `tests/eval/taps.txt` used to pin repository NAMES. Tapping is
5
+ a shallow clone of whatever the default branch points at, so the corpus the
6
+ required `eval` gate scores against was a moving target: the list was written
7
+ recording **743** entries and the same 20 repos later resolved to **3,843**, a
8
+ 5.2x growth nobody caused by editing a file. `affaan-m/ECC` alone is 1,616 of
9
+ them, so one third-party repository can move the gate's number by itself.
10
+
11
+ That is not academic. Measured on a clean 20-tap install, BM25 scores recall@10
12
+ **0.912** against a floor of **0.85** — a margin of +0.062. Unpinned growth
13
+ spends that margin quietly, and the first thing anyone would see is a required
14
+ gate failing on a pull request that touched nothing to do with retrieval.
15
+
16
+ So each row now carries a commit SHA, and this script checks each clone out at
17
+ it. `boost tap` still does the cloning (the corpus must be built the way a user
18
+ builds one); pinning is a step applied after, because the alternative — teaching
19
+ `boost tap` to pin — would add a CLI surface for a test-harness problem.
20
+
21
+ Usage:
22
+ python3 scripts/eval_corpus.py --ensure # tap + pin every row
23
+ python3 scripts/eval_corpus.py --list # print "repo sha" rows
24
+ """
25
+ from __future__ import annotations
26
+
27
+ import argparse
28
+ import re
29
+ import subprocess
30
+ import sys
31
+ from pathlib import Path
32
+ from typing import List, Optional, Tuple
33
+
34
+ ROOT = Path(__file__).resolve().parent.parent
35
+ TAPS = ROOT / "tests" / "eval" / "taps.txt"
36
+
37
+ _SHA = re.compile(r"[0-9a-f]{40}")
38
+
39
+
40
+ def parse_taps(text: str) -> List[Tuple[str, Optional[str]]]:
41
+ """Rows of ``owner/repo [sha]``, comments and blank lines dropped.
42
+
43
+ An absent SHA parses as ``None`` rather than an error so the format stays
44
+ backward compatible, but a SHA that is *present and malformed* is fatal: a
45
+ typo silently degrading to "unpinned" would reintroduce the exact drift this
46
+ file exists to stop, while still looking pinned to a reader.
47
+ """
48
+ rows: List[Tuple[str, Optional[str]]] = []
49
+ for raw in text.splitlines():
50
+ line = raw.strip()
51
+ if not line or line.startswith("#"):
52
+ continue
53
+ parts = line.split()
54
+ repo = parts[0]
55
+ if len(parts) == 1:
56
+ rows.append((repo, None))
57
+ continue
58
+ sha = parts[1]
59
+ if not _SHA.fullmatch(sha):
60
+ raise SystemExit(
61
+ "tests/eval/taps.txt: %s is pinned to %r, which is not a "
62
+ "40-character commit SHA" % (repo, sha))
63
+ rows.append((repo, sha))
64
+ return rows
65
+
66
+
67
+ def _run(path: Path, *args: str) -> subprocess.CompletedProcess:
68
+ return subprocess.run(["git", "-C", str(path), *args],
69
+ capture_output=True, text=True)
70
+
71
+
72
+ def has_commit(path: Path, sha: str) -> bool:
73
+ """True when ``sha`` names a commit already present in ``path``.
74
+
75
+ ``^{commit}`` matters: `cat-file -e` succeeds for any object, so a tree or
76
+ blob SHA would otherwise report as present and then fail at checkout.
77
+ """
78
+ return _run(path, "cat-file", "-e", "%s^{commit}" % sha).returncode == 0
79
+
80
+
81
+ def _fetch(path: Path, sha: str) -> subprocess.CompletedProcess:
82
+ # Shallow: the corpus needs the tree at one commit, not the history to it.
83
+ return _run(path, "fetch", "--quiet", "--depth", "1", "origin", sha)
84
+
85
+
86
+ def pin_clone(path: Path, sha: str) -> None:
87
+ """Check ``path`` out at ``sha``, fetching the commit first if it is absent."""
88
+ if not has_commit(path, sha):
89
+ _fetch(path, sha)
90
+ if not has_commit(path, sha):
91
+ raise SystemExit(
92
+ "%s: commit %s is not reachable — the pin in tests/eval/taps.txt is "
93
+ "stale, or the repository rewrote history" % (path.name, sha))
94
+ res = _run(path, "checkout", "--quiet", "--detach", sha)
95
+ if res.returncode != 0:
96
+ raise SystemExit("%s: could not check out %s: %s"
97
+ % (path.name, sha, res.stderr.strip()))
98
+
99
+
100
+ def _ensure() -> int:
101
+ """Tap every row, pin it, and rebuild its cache from the pinned tree."""
102
+ sys.path.insert(0, str(ROOT))
103
+ from boost_cli.core import catalog, registry # noqa: PLC0415
104
+
105
+ rows = parse_taps(TAPS.read_text(encoding="utf-8"))
106
+ total = 0
107
+ for repo, sha in rows:
108
+ try:
109
+ tap = registry.get(repo)
110
+ except Exception:
111
+ tap = registry.add(repo)
112
+ if sha:
113
+ pin_clone(tap.path, sha)
114
+ # Always after pinning: `boost tap` built the cache from the default
115
+ # branch, so an unrebuilt cache would describe a tree we just replaced.
116
+ entries = catalog.rebuild_tap(tap)
117
+ total += len(entries)
118
+ print(" %-44s %s %5d entries"
119
+ % (repo, (sha or "unpinned")[:7], len(entries)))
120
+ print("corpus: %d entries across %d taps" % (total, len(rows)))
121
+ return 0
122
+
123
+
124
+ def main(argv: Optional[List[str]] = None) -> int:
125
+ p = argparse.ArgumentParser(prog="eval_corpus.py", description=__doc__)
126
+ p.add_argument("--ensure", action="store_true",
127
+ help="tap and pin every row, then rebuild its cache")
128
+ p.add_argument("--list", action="store_true",
129
+ help="print the parsed rows and exit")
130
+ args = p.parse_args(argv)
131
+ if args.list:
132
+ for repo, sha in parse_taps(TAPS.read_text(encoding="utf-8")):
133
+ print("%s %s" % (repo, sha or ""))
134
+ return 0
135
+ if args.ensure:
136
+ return _ensure()
137
+ p.error("provide --ensure or --list")
138
+ return 2
139
+
140
+
141
+ if __name__ == "__main__":
142
+ raise SystemExit(main())
@@ -13,6 +13,7 @@ also_copy =
13
13
  CONTRIBUTING.md
14
14
  CODE_OF_CONDUCT.md
15
15
  evals/
16
+ Makefile
16
17
 
17
18
  [egg_info]
18
19
  tag_build =
@@ -0,0 +1,68 @@
1
+ # Pinned corpus for the Tier 1 retrieval-quality gate (scripts/eval_retrieval.py).
2
+ #
3
+ # Format: `owner/repo <40-char commit SHA>`, one per line. Materialise it with
4
+ # bash scripts/ensure_eval_corpus.sh
5
+ # which taps each repo and then checks it out at the pinned commit
6
+ # (scripts/eval_corpus.py).
7
+ #
8
+ # The golden set (golden.jsonl) grades real catalog items by NAME, so the gate
9
+ # needs the repos that actually contain those items tapped before it can score.
10
+ # The first six repos are the minimal set covering all 77 golden targets across
11
+ # the skill / rule / workflow kinds. The rest exist to make the corpus a
12
+ # realistic size, which is the whole point: over the six alone BM25 scored
13
+ # recall@10 1.000 / hit@1 0.791, and the same gate over these twenty scores
14
+ # 0.863 / 0.473. A user with twenty taps gets the second number, so flooring
15
+ # against the first was measuring the corpus rather than the retrieval.
16
+ #
17
+ # WHY THE SHAs. This list pinned repo *names* only, and tapping shallow-clones
18
+ # whatever the default branch points at, so the corpus was reproducible only for
19
+ # as long as twenty third parties happened not to push. Nothing had drifted when
20
+ # this was written — today's scores match the committed baseline exactly — but
21
+ # the size is worth stating, because it is not what anyone assumed: these twenty
22
+ # repos are **10,152 entries**, and ONE of them, sickn33/antigravity-awesome-
23
+ # skills, is 6,309 of those — 62% of the gate's corpus in a single third-party
24
+ # repository. affaan-m/ECC is another 1,616 (16%).
25
+ #
26
+ # The margin that protects is thin. BM25 scores recall@10 0.863 over this corpus;
27
+ # CI floored it at 0.85, which is a buffer of 1.15 queries out of 91 — one golden
28
+ # query can drop out of the top 10 and the gate still passes, two cannot. A
29
+ # single upstream push to the repo holding 62% of the corpus could therefore turn
30
+ # a required check red on a pull request that touched nothing to do with
31
+ # retrieval. Pinning removes that coupling, and makes every number in this header
32
+ # reproducible rather than "true on the day it was measured".
33
+ #
34
+ # NOTE: `boost tap --defaults` is NOT sufficient — it taps only skill repos and
35
+ # scores 0.000 on every rule and workflow query (overall recall ~0.33). That is
36
+ # why this explicit list exists.
37
+ #
38
+ # If you edit this list — including moving a pin — regenerate the baseline:
39
+ # BOOST_HOME=/tmp/evalhome bash scripts/ensure_eval_corpus.sh
40
+ # BOOST_HOME=/tmp/evalhome python3 scripts/eval_retrieval.py --build --save-baseline
41
+ #
42
+ # Cost: tapping is ~1 s/repo (measured 6 in 6.3 s, 14 more in 20.4 s), so this
43
+ # adds roughly 20 s to a cold CI run and nothing to a warm local one (the
44
+ # sentinel in ensure_eval_corpus.sh skips re-tapping). Pinning adds at most one
45
+ # `git fetch --depth 1 <sha>` per repo, and none when the shallow clone already
46
+ # carries the pinned commit.
47
+ anthropics/skills b29e7cf65e5cb78a5ac33d582270551bc74a14eb
48
+ 0xfurai/claude-code-subagents 9236d10702cdbba37eaa34515f1e1dbff8452506
49
+ NeoLabHQ/context-engineering-kit 555b95263ecf13d2ad9be14df676a1263d5a62b2
50
+ Aaronontheweb/dotnet-cursor-rules 9be2d201482bdafca8c687359f0ef0a71895d7af
51
+ ChrisWiles/claude-code-showcase a95518f0cb67e86230119da40429169bc4c35a6f
52
+ LessUp/awesome-cursorrules-zh cd6a1f34f4f9eed7a01084751b9f6514eee1882d
53
+
54
+ # --- scale: not golden targets, present so the corpus is a realistic size ---
55
+ aliarghyani/vue-cursor-rules 92609798e192312ce16edb78aa5424a8caaa415b
56
+ affaan-m/ECC e4e4163101f162881e628f300a9ca4e6a940bcea
57
+ BagelHole/DevOps-Security-Agent-Skills 0365f57a079b1332f95cf26e31dd2d5332a8399f
58
+ composio-community/awesome-codex-skills 0930e1373789d2eda449039f7ac154b33031de89
59
+ first-fluke/oh-my-agent 3016e9df463f28f8c9c33f4e810a1901425a8bb0
60
+ iktakahiro/python-fastapi-ddd-skill aa498d4c81acae475e05528520009c275cbe554f
61
+ langchain-ai/skills-benchmarks 064a5087fda3472a6b2883be7841441d038d2e2f
62
+ minio/skills d54382989a5ccc5fcc7de2905f7454f944a28d76
63
+ OneWave-AI/claude-skills 27f8cdcea225e627a73de89b9a3d477af9e249da
64
+ quarkusio/quarkusdev-skills b7c025b996bb4b9c3054740b242d1f368ae0eadd
65
+ sickn33/antigravity-awesome-skills d43065e483d9057e5c5dd50ca3647652ca7c0b43
66
+ tuanhaviet22/magento-skills 32d21015bd8eb46b8351fc87a8988ddca44de0f7
67
+ anthropics/claude-agent-sdk-python f8b9ec923982082a02c485924e0f60367949c3a1
68
+ eclosion-labs/terraform-cursor-plugin bcaad7033598c7bbb4efd73483b49962bd3398d9