boost-skill-cli 1.0.281__tar.gz → 1.0.283__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 (532) hide show
  1. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/.gitignore +5 -0
  2. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/.vale/styles/config/vocabularies/boost/accept.txt +1 -0
  3. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/Makefile +28 -3
  4. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/PKG-INFO +42 -2
  5. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/README.md +41 -1
  6. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/_version.py +2 -2
  7. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/configuration.py +12 -7
  8. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/mcp.py +37 -10
  9. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_skill_cli.egg-info/PKG-INFO +42 -2
  10. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_skill_cli.egg-info/SOURCES.txt +14 -0
  11. boost_skill_cli-1.0.283/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +30 -0
  12. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap.html +27 -1
  13. boost_skill_cli-1.0.283/evals/README.md +157 -0
  14. boost_skill_cli-1.0.283/evals/__init__.py +6 -0
  15. boost_skill_cli-1.0.283/evals/baseline.json +550 -0
  16. boost_skill_cli-1.0.283/evals/faithfulness.py +382 -0
  17. boost_skill_cli-1.0.283/evals/golden_set.json +372 -0
  18. boost_skill_cli-1.0.283/evals/make_corpus.py +718 -0
  19. boost_skill_cli-1.0.283/evals/make_golden.py +276 -0
  20. boost_skill_cli-1.0.283/evals/metrics.py +198 -0
  21. boost_skill_cli-1.0.283/evals/run_evals.py +346 -0
  22. boost_skill_cli-1.0.283/scripts/eval_gate.py +240 -0
  23. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/setup.cfg +1 -0
  24. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_cli_configuration.py +7 -0
  25. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/smoke.sh +6 -1
  26. boost_skill_cli-1.0.283/tests/unit/test_eval_faithfulness.py +259 -0
  27. boost_skill_cli-1.0.283/tests/unit/test_eval_gate.py +194 -0
  28. boost_skill_cli-1.0.283/tests/unit/test_eval_metrics.py +255 -0
  29. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_mcp.py +9 -1
  30. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/.gitattributes +0 -0
  31. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/.gitleaks.toml +0 -0
  32. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/.htmlvalidate.json +0 -0
  33. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/.lighthouserc.json +0 -0
  34. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/.lycheeignore +0 -0
  35. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/.markdownlint-cli2.jsonc +0 -0
  36. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/.pre-commit-config.yaml +0 -0
  37. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/.stylelintrc.json +0 -0
  38. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/.vale/styles/boost/Terminology.yml +0 -0
  39. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/.vale.ini +0 -0
  40. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/CLAUDE.md +0 -0
  41. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/CODE_OF_CONDUCT.md +0 -0
  42. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/CONTRIBUTING.md +0 -0
  43. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/LICENSE +0 -0
  44. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/MANIFEST.in +0 -0
  45. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/SECURITY.md +0 -0
  46. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost +0 -0
  47. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/__init__.py +0 -0
  48. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/__main__.py +0 -0
  49. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/cli.py +0 -0
  50. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/cliparse.py +0 -0
  51. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/__init__.py +0 -0
  52. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/_common.py +0 -0
  53. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/bmad.py +0 -0
  54. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/discovery.py +0 -0
  55. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/hooks.py +0 -0
  56. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/info.py +0 -0
  57. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/intelligence.py +0 -0
  58. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/pkg.py +0 -0
  59. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/quality.py +0 -0
  60. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/run.py +0 -0
  61. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/safety.py +0 -0
  62. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/taps.py +0 -0
  63. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/commands/team.py +0 -0
  64. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/__init__.py +0 -0
  65. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/adapters.py +0 -0
  66. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/agents.py +0 -0
  67. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/ai.py +0 -0
  68. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/capabilities.py +0 -0
  69. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/catalog.py +0 -0
  70. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/claude_settings.py +0 -0
  71. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/config.py +0 -0
  72. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/dense.py +0 -0
  73. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/ed25519.py +0 -0
  74. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/embed.py +0 -0
  75. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/faithfulness.py +0 -0
  76. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/frontmatter.py +0 -0
  77. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/gitutil.py +0 -0
  78. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/imperative.py +0 -0
  79. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/injectscan.py +0 -0
  80. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/integrity.py +0 -0
  81. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/journal.py +0 -0
  82. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/lockfile.py +0 -0
  83. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/logs.py +0 -0
  84. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/mcpdecl.py +0 -0
  85. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/minisign.py +0 -0
  86. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/nethttp.py +0 -0
  87. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/output.py +0 -0
  88. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/paths.py +0 -0
  89. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/policy.py +0 -0
  90. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/projectlock.py +0 -0
  91. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/provenance.py +0 -0
  92. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/rag.py +0 -0
  93. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/registry.py +0 -0
  94. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/resolve.py +0 -0
  95. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/rules.py +0 -0
  96. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/scopes.py +0 -0
  97. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/secretscan.py +0 -0
  98. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/selfupdate.py +0 -0
  99. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/serve.py +0 -0
  100. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/stackprobe.py +0 -0
  101. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/staleness.py +0 -0
  102. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/store.py +0 -0
  103. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/trustaudit.py +0 -0
  104. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/typosquat.py +0 -0
  105. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/updatediff.py +0 -0
  106. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/util.py +0 -0
  107. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/core/workflows.py +0 -0
  108. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/data/registries.json +0 -0
  109. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/errors.py +0 -0
  110. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_cli/spin.py +0 -0
  111. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  112. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  113. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_skill_cli.egg-info/requires.txt +0 -0
  114. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/boost_skill_cli.egg-info/top_level.txt +0 -0
  115. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/codecov.yml +0 -0
  116. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/.claude/settings.local.json +0 -0
  117. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/DEBUGGING.md +0 -0
  118. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/adapters.html +0 -0
  119. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/gifs/distill.gif +0 -0
  120. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/gifs/doctor.gif +0 -0
  121. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/gifs/explain.gif +0 -0
  122. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/gifs/hooks.gif +0 -0
  123. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/gifs/install.gif +0 -0
  124. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/gifs/pulse.gif +0 -0
  125. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/gifs/search.gif +0 -0
  126. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/gifs/tap.gif +0 -0
  127. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/tapes/distill.tape +0 -0
  128. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/tapes/doctor.tape +0 -0
  129. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/tapes/explain.tape +0 -0
  130. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/tapes/hooks.tape +0 -0
  131. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/tapes/install.tape +0 -0
  132. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/tapes/pulse.tape +0 -0
  133. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/tapes/search.tape +0 -0
  134. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel/tapes/tap.tape +0 -0
  135. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/carousel.html +0 -0
  136. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/commands.html +0 -0
  137. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/demo.gif +0 -0
  138. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/demo.tape +0 -0
  139. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/design-roadmap.html +0 -0
  140. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/eval.html +0 -0
  141. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/index.html +0 -0
  142. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/mcp-hub.html +0 -0
  143. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/rag-architecture.md +0 -0
  144. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D01.md +0 -0
  145. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D02.md +0 -0
  146. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D03.md +0 -0
  147. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D04.md +0 -0
  148. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D05.md +0 -0
  149. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D06.md +0 -0
  150. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D07.md +0 -0
  151. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D08.md +0 -0
  152. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D09.md +0 -0
  153. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D10.md +0 -0
  154. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D11.md +0 -0
  155. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D12.md +0 -0
  156. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D13.md +0 -0
  157. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D14.md +0 -0
  158. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D15.md +0 -0
  159. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D16.md +0 -0
  160. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D17.md +0 -0
  161. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D18.md +0 -0
  162. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D19.md +0 -0
  163. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D20.md +0 -0
  164. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D21.md +0 -0
  165. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D22.md +0 -0
  166. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D23.md +0 -0
  167. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D24.md +0 -0
  168. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D25.md +0 -0
  169. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/BOOST-D26.md +0 -0
  170. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  171. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  172. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  173. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  174. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  175. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  176. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  177. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  178. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  179. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  180. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  181. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  182. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  183. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  184. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  185. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  186. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  187. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  188. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  189. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  190. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/command-carousel-page.md +0 -0
  191. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  192. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  193. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  194. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  195. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  196. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  197. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  198. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  199. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  200. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  201. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  202. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  203. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  204. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  205. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  206. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  207. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  208. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  209. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  210. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  211. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  212. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  213. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  214. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  215. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  216. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  217. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  218. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/github-community-health-files.md +0 -0
  219. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  220. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  221. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  222. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  223. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  224. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  225. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  226. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  227. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  228. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  229. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  230. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  231. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  232. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  233. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  234. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  235. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  236. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  237. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  238. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  239. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  240. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  241. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  242. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  243. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  244. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  245. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  246. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  247. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  248. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  249. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  250. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  251. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  252. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  253. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  254. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  255. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  256. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  257. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  258. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  259. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  260. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  261. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  262. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  263. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  264. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  265. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  266. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  267. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  268. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  269. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  270. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  271. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  272. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  273. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  274. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  275. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  276. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  277. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  278. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  279. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  280. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  281. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  282. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  283. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  284. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  285. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  286. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  287. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  288. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  289. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  290. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  291. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  292. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  293. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  294. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  295. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  296. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  297. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  298. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  299. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  300. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  301. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  302. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  303. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  304. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  305. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  306. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  307. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  308. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  309. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  310. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  311. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  312. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  313. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  314. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  315. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  316. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  317. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  318. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  319. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  320. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  321. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  322. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  323. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  324. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  325. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  326. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  327. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  328. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  329. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  330. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  331. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  332. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  333. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  334. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  335. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  336. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  337. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  338. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  339. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  340. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  341. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/workspace-scope-install.md +0 -0
  342. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  343. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/eslint.config.mjs +0 -0
  344. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/examples/README.md +0 -0
  345. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/examples/adapt-demo.sh +0 -0
  346. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/examples/boost-run-prototype.sh +0 -0
  347. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/index.html +0 -0
  348. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/noxfile.py +0 -0
  349. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/pyproject.toml +0 -0
  350. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/requirements/coverage-tools.in +0 -0
  351. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/requirements/coverage-tools.txt +0 -0
  352. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/requirements/lint-tools.in +0 -0
  353. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/requirements/lint-tools.txt +0 -0
  354. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/requirements/mutation-tools.in +0 -0
  355. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/requirements/mutation-tools.txt +0 -0
  356. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/requirements/release-tools.in +0 -0
  357. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/requirements/release-tools.txt +0 -0
  358. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/requirements/test-tools.in +0 -0
  359. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/requirements/test-tools.txt +0 -0
  360. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/a11y_check.py +0 -0
  361. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/bench_cli.sh +0 -0
  362. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/build_command_reference.py +0 -0
  363. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/build_registries.py +0 -0
  364. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/build_roadmap.py +0 -0
  365. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/check_anchors.py +0 -0
  366. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/check_licenses.py +0 -0
  367. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/check_required_checks.py +0 -0
  368. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/ensure_eval_corpus.sh +0 -0
  369. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/eval_explain.py +0 -0
  370. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/eval_recommend.py +0 -0
  371. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/eval_retrieval.py +0 -0
  372. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/eval_stats_summary.py +0 -0
  373. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/import_budget.py +0 -0
  374. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/lock_toolchain.py +0 -0
  375. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/mutation_gate.py +0 -0
  376. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/mutation_shards.py +0 -0
  377. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/mutation_weights.json +0 -0
  378. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/perf_gate.py +0 -0
  379. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/post_deploy_smoke.py +0 -0
  380. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/scripts/release_preflight.py +0 -0
  381. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/sonar-project.properties +0 -0
  382. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/style/README.md +0 -0
  383. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/style/boost.css +0 -0
  384. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/style/boost.js +0 -0
  385. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/style/demo.html +0 -0
  386. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/adapt.feature +0 -0
  387. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/browse.feature +0 -0
  388. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/count.feature +0 -0
  389. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/discover.feature +0 -0
  390. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/doctor.feature +0 -0
  391. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/environment.py +0 -0
  392. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/explain.feature +0 -0
  393. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/index.feature +0 -0
  394. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/install.feature +0 -0
  395. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/list.feature +0 -0
  396. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/mcp.feature +0 -0
  397. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/search.feature +0 -0
  398. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/steps/cli_steps.py +0 -0
  399. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/steps/discovery_steps.py +0 -0
  400. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/steps/mcp_steps.py +0 -0
  401. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/bdd/features/steps/quality_steps.py +0 -0
  402. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/conftest.py +0 -0
  403. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/eval/baseline.json +0 -0
  404. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/eval/explain.jsonl +0 -0
  405. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/eval/golden.jsonl +0 -0
  406. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/eval/recommend.jsonl +0 -0
  407. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/eval/taps.txt +0 -0
  408. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_capabilities_policy.py +0 -0
  409. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_cli_adapt.py +0 -0
  410. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_cli_bmad.py +0 -0
  411. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_cli_discovery.py +0 -0
  412. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_cli_hooks.py +0 -0
  413. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_cli_info.py +0 -0
  414. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_cli_intelligence.py +0 -0
  415. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_cli_pkg.py +0 -0
  416. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_cli_quality.py +0 -0
  417. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_cli_taps.py +0 -0
  418. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_cli_team.py +0 -0
  419. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_everyday_loop.py +0 -0
  420. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_integrity_enforce.py +0 -0
  421. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_property_parsers.py +0 -0
  422. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_run.py +0 -0
  423. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_tap_signing.py +0 -0
  424. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/functional/test_workspace_scope.py +0 -0
  425. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/README.md +0 -0
  426. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  427. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  428. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  429. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  430. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  431. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  432. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  433. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  434. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  435. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  436. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  437. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  438. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  439. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  440. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  441. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  442. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  443. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  444. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  445. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  446. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/fuzz_frontmatter.py +0 -0
  447. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/fuzz/fuzz_registry.py +0 -0
  448. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/make_fixture.py +0 -0
  449. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/perf/test_benchmarks.py +0 -0
  450. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_a11y_check.py +0 -0
  451. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_adapters.py +0 -0
  452. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_adapters_multi.py +0 -0
  453. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_adapters_runner.py +0 -0
  454. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_agents.py +0 -0
  455. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_ai.py +0 -0
  456. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_capabilities.py +0 -0
  457. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_catalog.py +0 -0
  458. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_check_anchors.py +0 -0
  459. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_check_licenses.py +0 -0
  460. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_claude_settings.py +0 -0
  461. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_cliparse.py +0 -0
  462. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_codeql_analysis_key.py +0 -0
  463. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_command_reference_fresh.py +0 -0
  464. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_community_health_files.py +0 -0
  465. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_config.py +0 -0
  466. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_dense.py +0 -0
  467. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_dense_fallback.py +0 -0
  468. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_dependabot_config.py +0 -0
  469. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_docs_pages_linked.py +0 -0
  470. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_docsite_chrome.py +0 -0
  471. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_ed25519.py +0 -0
  472. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_embed.py +0 -0
  473. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_errors_and_cli_table.py +0 -0
  474. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_eval_stats_summary.py +0 -0
  475. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_faithfulness.py +0 -0
  476. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_frontmatter.py +0 -0
  477. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_fuzz_targets.py +0 -0
  478. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_gitleaks_config.py +0 -0
  479. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_gitutil.py +0 -0
  480. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_imperative.py +0 -0
  481. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_import_budget.py +0 -0
  482. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_injectscan.py +0 -0
  483. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_integrity.py +0 -0
  484. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_journal.py +0 -0
  485. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_lockfile.py +0 -0
  486. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_logs.py +0 -0
  487. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_marketing_counts.py +0 -0
  488. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_mcpdecl.py +0 -0
  489. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_minisign.py +0 -0
  490. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_mutation_hardening.py +0 -0
  491. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_mutation_shards.py +0 -0
  492. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_mutmut_source_paths.py +0 -0
  493. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_nethttp.py +0 -0
  494. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_output.py +0 -0
  495. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_paths.py +0 -0
  496. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_perf_gate.py +0 -0
  497. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_pkg_confusions.py +0 -0
  498. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_pkg_injection.py +0 -0
  499. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_pkg_secrets.py +0 -0
  500. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_policy.py +0 -0
  501. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_post_deploy_smoke.py +0 -0
  502. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_projectlock.py +0 -0
  503. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_provenance.py +0 -0
  504. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_rag.py +0 -0
  505. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_registries_fresh.py +0 -0
  506. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_registry.py +0 -0
  507. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_release_preflight.py +0 -0
  508. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_required_checks.py +0 -0
  509. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_resolve.py +0 -0
  510. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_roadmap_fresh.py +0 -0
  511. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_rules.py +0 -0
  512. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_scopes.py +0 -0
  513. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_secretscan.py +0 -0
  514. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_selfupdate.py +0 -0
  515. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_serve.py +0 -0
  516. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_spin.py +0 -0
  517. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_stackprobe.py +0 -0
  518. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_staleness.py +0 -0
  519. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_store.py +0 -0
  520. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_token_parity.py +0 -0
  521. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_toolchain_lock.py +0 -0
  522. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_trustaudit.py +0 -0
  523. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_typosquat.py +0 -0
  524. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_updatediff.py +0 -0
  525. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_util.py +0 -0
  526. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_version.py +0 -0
  527. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_workflow_timeouts.py +0 -0
  528. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/unit/test_workflows.py +0 -0
  529. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/visual/a11y_check.mjs +0 -0
  530. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/visual/console_check.mjs +0 -0
  531. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/visual/package.json +0 -0
  532. {boost_skill_cli-1.0.281 → boost_skill_cli-1.0.283}/tests/visual/visual_check.mjs +0 -0
@@ -230,6 +230,11 @@ mutants/
230
230
 
231
231
  # sandboxed boost home for the Tier 1 eval corpus (`make eval` taps here)
232
232
  .eval-home/
233
+
234
+ # `make evals` output. The generated corpus and index live in the system temp
235
+ # dir (see evals/run_evals.py), so only the per-run scores land here; the
236
+ # committed evals/baseline.json is what regressions are measured against.
237
+ evals/results.json
233
238
  tests/visual/node_modules/
234
239
  tests/visual/out/
235
240
  tests/visual/package-lock.json
@@ -34,6 +34,7 @@ mutmut
34
34
  mypy
35
35
  npm
36
36
  onboards
37
+ overclaiming
37
38
  Pinecone
38
39
  pytest
39
40
  rebased
@@ -10,7 +10,7 @@ PYTEST := $(VENV)/bin/pytest
10
10
  # pinned taps out of the developer's real ~/.boost.
11
11
  EVAL_HOME := $(CURDIR)/.eval-home
12
12
 
13
- .PHONY: venv test unit functional smoke coverage patch-coverage mutation lint check demo carousel clean-test eval eval-ai eval-rec eval-stats eval-explain audit dist-check bdd bench bench-cli fuzz post-deploy
13
+ .PHONY: venv test unit functional smoke coverage patch-coverage mutation lint check demo carousel clean-test eval eval-ai eval-rec eval-stats eval-explain evals evals-baseline evals-golden evals-online audit dist-check bdd bench bench-cli fuzz post-deploy
14
14
 
15
15
  # Every tool comes from a hash-pinned requirements/*.txt — the same files CI
16
16
  # installs (see scripts/lock_toolchain.py). pip enforces the hashes, so a dev
@@ -52,7 +52,7 @@ mutation:
52
52
  $(PY) scripts/mutation_gate.py --run --min 80
53
53
 
54
54
  lint:
55
- $(VENV)/bin/ruff check boost_cli tests
55
+ $(VENV)/bin/ruff check boost_cli tests evals
56
56
  $(VENV)/bin/mypy
57
57
  $(VENV)/bin/pyright
58
58
  $(VENV)/bin/lint-imports
@@ -72,6 +72,7 @@ lint:
72
72
  $(PY) scripts/perf_gate.py
73
73
  $(PY) scripts/check_anchors.py
74
74
  $(PY) scripts/check_required_checks.py
75
+ $(PY) evals/make_golden.py --check
75
76
 
76
77
  # Supply-chain CVE gate: fail on a known OSV/PyPI advisory in the project's
77
78
  # dependency closure. Mirrors the pip-audit CI workflow; run before releasing.
@@ -125,6 +126,30 @@ eval-explain:
125
126
  PYTHON=$(PY) BOOST_HOME=$(EVAL_HOME) bash scripts/ensure_eval_corpus.sh
126
127
  BOOST_HOME=$(EVAL_HOME) $(PY) scripts/eval_explain.py --fail-under 0.80
127
128
 
129
+ # Retrieval-quality gate over the HERMETIC golden set: recall@5/@10, MRR, and
130
+ # nDCG@5/@10 with graded (3/2/1) relevance, plus a paired-bootstrap regression
131
+ # test against the committed evals/baseline.json. Part of `check` and required
132
+ # in CI. Unlike `eval` above it needs no network and no API key: it generates
133
+ # its own corpus and taps it into a disposable BOOST_HOME under the system temp
134
+ # dir, so a metric moving can only mean the ranker moved.
135
+ evals:
136
+ $(PY) scripts/eval_gate.py --run
137
+
138
+ # Re-pin evals/baseline.json to the current scores. Deliberate: it is how you
139
+ # accept a ranking change, so it must be a separate commit that says why.
140
+ evals-baseline:
141
+ $(PY) evals/run_evals.py --save-baseline
142
+
143
+ # Regenerate evals/golden_set.json from evals/make_golden.py after editing the
144
+ # query table (`--check` runs in `lint` and fails on drift).
145
+ evals-golden:
146
+ $(PY) evals/make_golden.py
147
+
148
+ # The same five metrics over the pinned REAL-registry corpus `eval` uses.
149
+ # Needs the network; reported, never gated — mirrors `tests/smoke.sh --online`.
150
+ evals-online:
151
+ $(PY) evals/run_evals.py --online --faithfulness
152
+
128
153
  # Opt-in Gherkin/BDD suite (tests/bdd) — additive to tests/functional, not a
129
154
  # replacement. Needs the [bdd] extra (`pip install -e '.[bdd]'`); not part of
130
155
  # `make check`.
@@ -183,7 +208,7 @@ demo:
183
208
  carousel:
184
209
  for t in docs/carousel/tapes/*.tape; do vhs "$$t"; done
185
210
 
186
- check: lint eval test smoke mutation
211
+ check: lint eval evals test smoke mutation
187
212
  @echo "== all gates passed =="
188
213
 
189
214
  clean-test:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.281
3
+ Version: 1.0.283
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -997,16 +997,56 @@ reports, and the free services that monitor the project.
997
997
 
998
998
  ## Test suite
999
999
 
1000
- Three layers, all enforced (`make check` runs the full set; CI runs the same thing):
1000
+ Four layers, all enforced (`make check` runs the full set; CI runs the same thing):
1001
1001
 
1002
1002
  | Layer | What it does | Gate |
1003
1003
  |---|---|---|
1004
1004
  | `make test` | pytest across `tests/unit/` (every core module) and `tests/functional/` (drives all 78 commands in-process against sandboxed homes) | **≥80% line coverage** of `boost_cli` (`fail_under` in pyproject.toml) |
1005
1005
  | `make smoke` | `tests/smoke.sh` — 170 checks run through the actual `./boost` shim (`--online` also hits real registries) | all pass |
1006
1006
  | `make mutation` | [mutmut] mutates `boost_cli/core` (~9,900 mutants) and reruns the unit suite against each one | **≥80% killed** (`scripts/mutation_gate.py`) |
1007
+ | `make evals` | scores the search ranker on a graded golden set — recall@5/@10, MRR, nDCG@5/@10 | **metric floors + no statistically significant regression** (`scripts/eval_gate.py`) |
1007
1008
 
1008
1009
  Dev setup: `make venv` (pulls in pytest, coverage, mutmut — the shipped
1009
1010
  runtime itself stays dependency-free). Every test run uses a throwaway
1010
1011
  `$HOME`, so your actual agent configs are never at risk.
1011
1012
 
1012
1013
  [mutmut]: https://mutmut.readthedocs.io/
1014
+
1015
+ ## Evaluation harness
1016
+
1017
+ Search quality is the one thing the suite above can't assert: every test can
1018
+ pass while the ranker quietly gets worse. `make evals` measures it. The harness
1019
+ is pure stdlib and fully offline — it generates its own corpus of skills, rules,
1020
+ and workflows and taps it into a disposable `BOOST_HOME`, so a metric that moves
1021
+ can only mean the *ranker* moved. See [`evals/README.md`](evals/README.md).
1022
+
1023
+ **Golden set** — [`evals/golden_set.json`](evals/golden_set.json): 36 realistic
1024
+ queries with **graded** relevance (3 perfect · 2 useful · 1 marginal) over the
1025
+ generated corpus. Generated and validated by `evals/make_golden.py`, which
1026
+ refuses a judgment naming a skill the corpus doesn't contain; `--check` fails CI
1027
+ on drift, so the file can never disagree with its source.
1028
+
1029
+ **Five metrics**, all computed by `evals/metrics.py`:
1030
+
1031
+ - **recall@5** / **recall@10** — of everything relevant, what fraction reached the top *k*.
1032
+ - **MRR** — 1/rank of the first relevant hit, averaged; sensitive only to the top of the list, which is where people look.
1033
+ - **nDCG@5** / **nDCG@10** — graded gain (`2^rel − 1`) with the standard `log2(rank + 1)` discount; the only metric that distinguishes the right results in the wrong order from the right order.
1034
+
1035
+ **Significance gating.** A metric dropping isn't automatically a regression —
1036
+ with 36 queries, one unlucky result moves the mean. So `scripts/eval_gate.py`
1037
+ fails a metric only when it falls more than 0.02 below the committed baseline
1038
+ **and** a seeded 10,000-resample paired bootstrap over the per-query deltas puts
1039
+ that drop at `p < 0.05`. Alongside that, each metric has an absolute floor set
1040
+ ~0.05 below its first measured value, which catches the erosion that a
1041
+ compare-to-last-commit check never sees. Accepting a real ranking change is a
1042
+ deliberate `make evals-baseline` commit.
1043
+
1044
+ **Faithfulness.** `boost explain` and `boost distill` generate prose from a
1045
+ `SKILL.md`, and their failure mode is overclaiming. The harness scores that with
1046
+ the Ragas method — split the answer into atomic statements, verify each against
1047
+ the source, score supported/total — and reports it alongside what the runtime
1048
+ grounding guardrail in `boost explain` would do with the same reply. With no
1049
+ `claude` CLI and no `ANTHROPIC_API_KEY` it **skips rather than fails**, and
1050
+ reports a status instead of a number so "couldn't measure" is never mistaken for
1051
+ "scored zero". It's therefore outside `make check`; run it with
1052
+ `make evals-online`.
@@ -281,16 +281,56 @@ reports, and the free services that monitor the project.
281
281
 
282
282
  ## Test suite
283
283
 
284
- Three layers, all enforced (`make check` runs the full set; CI runs the same thing):
284
+ Four layers, all enforced (`make check` runs the full set; CI runs the same thing):
285
285
 
286
286
  | Layer | What it does | Gate |
287
287
  |---|---|---|
288
288
  | `make test` | pytest across `tests/unit/` (every core module) and `tests/functional/` (drives all 78 commands in-process against sandboxed homes) | **≥80% line coverage** of `boost_cli` (`fail_under` in pyproject.toml) |
289
289
  | `make smoke` | `tests/smoke.sh` — 170 checks run through the actual `./boost` shim (`--online` also hits real registries) | all pass |
290
290
  | `make mutation` | [mutmut] mutates `boost_cli/core` (~9,900 mutants) and reruns the unit suite against each one | **≥80% killed** (`scripts/mutation_gate.py`) |
291
+ | `make evals` | scores the search ranker on a graded golden set — recall@5/@10, MRR, nDCG@5/@10 | **metric floors + no statistically significant regression** (`scripts/eval_gate.py`) |
291
292
 
292
293
  Dev setup: `make venv` (pulls in pytest, coverage, mutmut — the shipped
293
294
  runtime itself stays dependency-free). Every test run uses a throwaway
294
295
  `$HOME`, so your actual agent configs are never at risk.
295
296
 
296
297
  [mutmut]: https://mutmut.readthedocs.io/
298
+
299
+ ## Evaluation harness
300
+
301
+ Search quality is the one thing the suite above can't assert: every test can
302
+ pass while the ranker quietly gets worse. `make evals` measures it. The harness
303
+ is pure stdlib and fully offline — it generates its own corpus of skills, rules,
304
+ and workflows and taps it into a disposable `BOOST_HOME`, so a metric that moves
305
+ can only mean the *ranker* moved. See [`evals/README.md`](evals/README.md).
306
+
307
+ **Golden set** — [`evals/golden_set.json`](evals/golden_set.json): 36 realistic
308
+ queries with **graded** relevance (3 perfect · 2 useful · 1 marginal) over the
309
+ generated corpus. Generated and validated by `evals/make_golden.py`, which
310
+ refuses a judgment naming a skill the corpus doesn't contain; `--check` fails CI
311
+ on drift, so the file can never disagree with its source.
312
+
313
+ **Five metrics**, all computed by `evals/metrics.py`:
314
+
315
+ - **recall@5** / **recall@10** — of everything relevant, what fraction reached the top *k*.
316
+ - **MRR** — 1/rank of the first relevant hit, averaged; sensitive only to the top of the list, which is where people look.
317
+ - **nDCG@5** / **nDCG@10** — graded gain (`2^rel − 1`) with the standard `log2(rank + 1)` discount; the only metric that distinguishes the right results in the wrong order from the right order.
318
+
319
+ **Significance gating.** A metric dropping isn't automatically a regression —
320
+ with 36 queries, one unlucky result moves the mean. So `scripts/eval_gate.py`
321
+ fails a metric only when it falls more than 0.02 below the committed baseline
322
+ **and** a seeded 10,000-resample paired bootstrap over the per-query deltas puts
323
+ that drop at `p < 0.05`. Alongside that, each metric has an absolute floor set
324
+ ~0.05 below its first measured value, which catches the erosion that a
325
+ compare-to-last-commit check never sees. Accepting a real ranking change is a
326
+ deliberate `make evals-baseline` commit.
327
+
328
+ **Faithfulness.** `boost explain` and `boost distill` generate prose from a
329
+ `SKILL.md`, and their failure mode is overclaiming. The harness scores that with
330
+ the Ragas method — split the answer into atomic statements, verify each against
331
+ the source, score supported/total — and reports it alongside what the runtime
332
+ grounding guardrail in `boost explain` would do with the same reply. With no
333
+ `claude` CLI and no `ANTHROPIC_API_KEY` it **skips rather than fails**, and
334
+ reports a status instead of a number so "couldn't measure" is never mistaken for
335
+ "scored zero". It's therefore outside `make check`; run it with
336
+ `make evals-online`.
@@ -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.281'
22
- __version_tuple__ = version_tuple = (1, 0, 281)
21
+ __version__ = version = '1.0.283'
22
+ __version_tuple__ = version_tuple = (1, 0, 283)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -917,11 +917,14 @@ def _tool_discover_github(args: dict):
917
917
 
918
918
  REGISTRY.register(
919
919
  "boost_search",
920
- "FIRST STOP before writing a skill, subagent, slash-command, rule, or any "
921
- "reusable block of agent instructions from scratch: search thousands of "
922
- "curated, installable AI-agent skills across the configured registries. "
923
- "Returns ranked matches you can install in one call — don't reinvent one "
924
- "that already exists.",
920
+ "Find an existing, installable skill instead of improvising one. Reach for "
921
+ "this at two moments: (1) when starting non-trivial work — check whether a "
922
+ "vetted skill already covers the task before planning it yourself; (2) as "
923
+ "the FIRST STOP before writing a skill, subagent, slash-command, rule, or "
924
+ "any reusable block of agent instructions from scratch. Searches thousands "
925
+ "of curated AI-agent skills across the configured registries and returns "
926
+ "ranked matches you can install in one call — don't reinvent one that "
927
+ "already exists.",
925
928
  {"type": "object",
926
929
  "properties": {"query": {"type": "string",
927
930
  "description": "what the skill should do (a task, "
@@ -930,8 +933,10 @@ REGISTRY.register(
930
933
  _tool_search)
931
934
  REGISTRY.register(
932
935
  "boost_list",
933
- "List the skills already installed by boost — check here first to avoid "
934
- "reinstalling or duplicating something you already have.",
936
+ "List the skills already installed and usable right now. Check at the "
937
+ "START of a task to leverage a capability you already have — an installed "
938
+ "skill is a vetted procedure you can follow immediately, at no cost — and "
939
+ "again before installing, to avoid duplicating something you have.",
935
940
  {"type": "object", "properties": {}},
936
941
  _tool_list)
937
942
  REGISTRY.register(
@@ -83,19 +83,46 @@ PROTOCOL_VERSION = "2024-11-05"
83
83
  # Server-level guidance returned in the `initialize` result. MCP hosts load this
84
84
  # into the model's context, so it is boost's one chance to tell an agent WHEN it
85
85
  # is relevant — the difference between a search tool that sits unused and one an
86
- # agent reaches for before reinventing a skill. Framed by the agent's trigger
87
- # ("about to author reusable instructions"), not boost's nouns.
86
+ # agent reaches for. Framed by the agent's triggers, not boost's nouns.
87
+ #
88
+ # It declares TWO triggers, and the first exists because the second alone was
89
+ # not enough. Framed only as "before you author a skill", agents reached for
90
+ # boost exclusively when they were already about to write one — which is the
91
+ # rarer moment. The common one is starting ordinary work that an installed or
92
+ # installable skill already covers, and nothing was telling them to look. The
93
+ # closing proportion note is load-bearing in the other direction: an unbounded
94
+ # "always check first" turns every trivial turn into a tool call, and an agent
95
+ # that learns to ignore the guidance ignores all of it.
88
96
  INSTRUCTIONS = (
89
97
  "boost is a package manager for AI-agent skills: reusable, version-tracked "
90
98
  "capabilities (skills, rules, slash-commands, subagents) from curated "
91
- "registries. BEFORE you author a new skill, subagent, slash-command, rule, "
92
- "or any reusable block of agent instructions — or when the user describes a "
93
- "repeatable workflow (\"set up code review\", \"add a commit convention\") — "
94
- "call boost_search FIRST to check whether a vetted one already exists. "
95
- "Installing beats hand-writing: an installed skill is version-pinned, wired "
96
- "into every agent on this machine, policy-governed, and shareable with the "
97
- "team. Typical flow: boost_search -> boost_info -> boost_install. Only build "
98
- "from scratch when a search turns up nothing relevant."
99
+ "registries.\n"
100
+ "\n"
101
+ "Two moments make boost relevant. The first is the one usually missed:\n"
102
+ "\n"
103
+ "1. STARTING A TASK. Before doing non-trivial work — building a feature, "
104
+ "setting up tooling or CI, reviewing code, debugging a class of problem, "
105
+ "writing docs — stop and check whether a skill already covers it. Call "
106
+ "boost_list for what is installed and usable right now, and boost_search "
107
+ "for what could be. A matching skill is a procedure someone already got "
108
+ "right and vetted; following it beats reconstructing the same steps from "
109
+ "memory.\n"
110
+ "\n"
111
+ "2. AUTHORING. Before you write a new skill, subagent, slash-command, "
112
+ "rule, or any reusable block of agent instructions — or when the user "
113
+ "describes a repeatable workflow (\"set up code review\", \"add a commit "
114
+ "convention\") — call boost_search FIRST to check whether a vetted one "
115
+ "already exists. Installing beats hand-writing: an installed skill is "
116
+ "version-pinned, wired into every agent on this machine, policy-governed, "
117
+ "and shareable with the team.\n"
118
+ "\n"
119
+ "Typical flow: boost_search -> boost_info -> boost_install. Only build "
120
+ "from scratch when a search turns up nothing relevant.\n"
121
+ "\n"
122
+ "Proportion: skip the check for trivial or one-off turns — answering a "
123
+ "question, a small edit, running a command you were just handed. Checking "
124
+ "once when a task starts is the habit; checking before every tool call is "
125
+ "noise."
99
126
  )
100
127
 
101
128
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.281
3
+ Version: 1.0.283
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -997,16 +997,56 @@ reports, and the free services that monitor the project.
997
997
 
998
998
  ## Test suite
999
999
 
1000
- Three layers, all enforced (`make check` runs the full set; CI runs the same thing):
1000
+ Four layers, all enforced (`make check` runs the full set; CI runs the same thing):
1001
1001
 
1002
1002
  | Layer | What it does | Gate |
1003
1003
  |---|---|---|
1004
1004
  | `make test` | pytest across `tests/unit/` (every core module) and `tests/functional/` (drives all 78 commands in-process against sandboxed homes) | **≥80% line coverage** of `boost_cli` (`fail_under` in pyproject.toml) |
1005
1005
  | `make smoke` | `tests/smoke.sh` — 170 checks run through the actual `./boost` shim (`--online` also hits real registries) | all pass |
1006
1006
  | `make mutation` | [mutmut] mutates `boost_cli/core` (~9,900 mutants) and reruns the unit suite against each one | **≥80% killed** (`scripts/mutation_gate.py`) |
1007
+ | `make evals` | scores the search ranker on a graded golden set — recall@5/@10, MRR, nDCG@5/@10 | **metric floors + no statistically significant regression** (`scripts/eval_gate.py`) |
1007
1008
 
1008
1009
  Dev setup: `make venv` (pulls in pytest, coverage, mutmut — the shipped
1009
1010
  runtime itself stays dependency-free). Every test run uses a throwaway
1010
1011
  `$HOME`, so your actual agent configs are never at risk.
1011
1012
 
1012
1013
  [mutmut]: https://mutmut.readthedocs.io/
1014
+
1015
+ ## Evaluation harness
1016
+
1017
+ Search quality is the one thing the suite above can't assert: every test can
1018
+ pass while the ranker quietly gets worse. `make evals` measures it. The harness
1019
+ is pure stdlib and fully offline — it generates its own corpus of skills, rules,
1020
+ and workflows and taps it into a disposable `BOOST_HOME`, so a metric that moves
1021
+ can only mean the *ranker* moved. See [`evals/README.md`](evals/README.md).
1022
+
1023
+ **Golden set** — [`evals/golden_set.json`](evals/golden_set.json): 36 realistic
1024
+ queries with **graded** relevance (3 perfect · 2 useful · 1 marginal) over the
1025
+ generated corpus. Generated and validated by `evals/make_golden.py`, which
1026
+ refuses a judgment naming a skill the corpus doesn't contain; `--check` fails CI
1027
+ on drift, so the file can never disagree with its source.
1028
+
1029
+ **Five metrics**, all computed by `evals/metrics.py`:
1030
+
1031
+ - **recall@5** / **recall@10** — of everything relevant, what fraction reached the top *k*.
1032
+ - **MRR** — 1/rank of the first relevant hit, averaged; sensitive only to the top of the list, which is where people look.
1033
+ - **nDCG@5** / **nDCG@10** — graded gain (`2^rel − 1`) with the standard `log2(rank + 1)` discount; the only metric that distinguishes the right results in the wrong order from the right order.
1034
+
1035
+ **Significance gating.** A metric dropping isn't automatically a regression —
1036
+ with 36 queries, one unlucky result moves the mean. So `scripts/eval_gate.py`
1037
+ fails a metric only when it falls more than 0.02 below the committed baseline
1038
+ **and** a seeded 10,000-resample paired bootstrap over the per-query deltas puts
1039
+ that drop at `p < 0.05`. Alongside that, each metric has an absolute floor set
1040
+ ~0.05 below its first measured value, which catches the erosion that a
1041
+ compare-to-last-commit check never sees. Accepting a real ranking change is a
1042
+ deliberate `make evals-baseline` commit.
1043
+
1044
+ **Faithfulness.** `boost explain` and `boost distill` generate prose from a
1045
+ `SKILL.md`, and their failure mode is overclaiming. The harness scores that with
1046
+ the Ragas method — split the answer into atomic statements, verify each against
1047
+ the source, score supported/total — and reports it alongside what the runtime
1048
+ grounding guardrail in `boost explain` would do with the same reply. With no
1049
+ `claude` CLI and no `ANTHROPIC_API_KEY` it **skips rather than fails**, and
1050
+ reports a status instead of a number so "couldn't measure" is never mistaken for
1051
+ "scored zero". It's therefore outside `make check`; run it with
1052
+ `make evals-online`.
@@ -232,6 +232,7 @@ docs/roadmap/items/make-the-roadmaps-discoverable.md
232
232
  docs/roadmap/items/markdown-consistency-markdownlint-cli2.md
233
233
  docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md
234
234
  docs/roadmap/items/mcp-aware-skills.md
235
+ docs/roadmap/items/mcp-check-skills-before-starting-a-task.md
235
236
  docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md
236
237
  docs/roadmap/items/mcp-launch-objc-fork-safety.md
237
238
  docs/roadmap/items/mcp-register-names-server-before-env.md
@@ -327,6 +328,15 @@ docs/roadmap/items/workflow-linting-actionlint.md
327
328
  docs/roadmap/items/workflow-sast-zizmor.md
328
329
  docs/roadmap/items/workspace-scope-install.md
329
330
  docs/roadmap/items/zizmor-pin-is-a-yanked-release.md
331
+ evals/README.md
332
+ evals/__init__.py
333
+ evals/baseline.json
334
+ evals/faithfulness.py
335
+ evals/golden_set.json
336
+ evals/make_corpus.py
337
+ evals/make_golden.py
338
+ evals/metrics.py
339
+ evals/run_evals.py
330
340
  examples/README.md
331
341
  examples/adapt-demo.sh
332
342
  examples/boost-run-prototype.sh
@@ -350,6 +360,7 @@ scripts/check_licenses.py
350
360
  scripts/check_required_checks.py
351
361
  scripts/ensure_eval_corpus.sh
352
362
  scripts/eval_explain.py
363
+ scripts/eval_gate.py
353
364
  scripts/eval_recommend.py
354
365
  scripts/eval_retrieval.py
355
366
  scripts/eval_stats_summary.py
@@ -455,6 +466,9 @@ tests/unit/test_docsite_chrome.py
455
466
  tests/unit/test_ed25519.py
456
467
  tests/unit/test_embed.py
457
468
  tests/unit/test_errors_and_cli_table.py
469
+ tests/unit/test_eval_faithfulness.py
470
+ tests/unit/test_eval_gate.py
471
+ tests/unit/test_eval_metrics.py
458
472
  tests/unit/test_eval_stats_summary.py
459
473
  tests/unit/test_faithfulness.py
460
474
  tests/unit/test_frontmatter.py
@@ -0,0 +1,30 @@
1
+ ---
2
+ id: mcp-check-skills-before-starting-a-task
3
+ board: code
4
+ section: dx
5
+ status: inflight
6
+ category: Interop · Adoption
7
+ complexity: S
8
+ impact: High
9
+ wow: 3
10
+ note: agent reflex
11
+ order: 64
12
+ owner: mcp-task-entrance
13
+ pr: 318
14
+ title: MCP — check for a skill when a task starts, not only when authoring one
15
+ ---
16
+ <a href="#mcp-search-before-reinventing">The previous pass</a> gave the MCP server
17
+ <code>initialize</code> <code>instructions</code> and intent-framed tool descriptions, but
18
+ framed both around a single trigger: <em>before you author a new skill</em>. That is the
19
+ rarer moment. Observed behaviour matched the framing exactly — agents called
20
+ <code>boost_search</code> only when they were already about to write a skill, and never to ask
21
+ whether an installed one covered the work in front of them. The common case, starting
22
+ ordinary work that a vetted skill already handles, had nothing pointing at it.
23
+ Broaden to <strong>two</strong> declared triggers: <em>starting a task</em> (call
24
+ <code>boost_list</code> for what is usable right now, <code>boost_search</code> for what could
25
+ be) and the existing <em>authoring</em> one. <code>boost_list</code> is re-framed from "avoid a
26
+ duplicate install" to "leverage a capability you already have" — it is the free half of the
27
+ check. A closing proportion note bounds it, because an unbounded <em>always check first</em>
28
+ turns every trivial turn into a tool call and an agent that learns to ignore the guidance
29
+ ignores all of it. Both triggers and the bound are pinned by tests, so dropping either
30
+ regresses.
@@ -110,7 +110,7 @@
110
110
  <div class="stat"><b>16</b><span>Shipped</span></div>
111
111
  <div class="stat"><b>1</b><span>Next up</span></div>
112
112
  <div class="stat"><b>4</b><span>Planned</span></div>
113
- <div class="stat"><b>173</b><span>Loop finds</span></div>
113
+ <div class="stat"><b>174</b><span>Loop finds</span></div>
114
114
  <!-- /ROADMAP:stats -->
115
115
  </div>
116
116
  </section>
@@ -3151,6 +3151,32 @@ three states: a <b>failing</b> actionlint now fails <code>make</code> (exit 2) i
3151
3151
  <span class="m">fixed — a failing actionlint now fails make, in all three targets</span>
3152
3152
  </div>
3153
3153
  </article>
3154
+
3155
+ <article class="cap rcard" id="mcp-check-skills-before-starting-a-task">
3156
+ <div class="head"><span class="pill inflight">In flight</span><span class="cat">Interop · Adoption</span></div>
3157
+ <h3>MCP — check for a skill when a task starts, not only when authoring one</h3>
3158
+ <p><a href="#mcp-search-before-reinventing">The previous pass</a> gave the MCP server
3159
+ <code>initialize</code> <code>instructions</code> and intent-framed tool descriptions, but
3160
+ framed both around a single trigger: <em>before you author a new skill</em>. That is the
3161
+ rarer moment. Observed behaviour matched the framing exactly — agents called
3162
+ <code>boost_search</code> only when they were already about to write a skill, and never to ask
3163
+ whether an installed one covered the work in front of them. The common case, starting
3164
+ ordinary work that a vetted skill already handles, had nothing pointing at it.
3165
+ Broaden to <strong>two</strong> declared triggers: <em>starting a task</em> (call
3166
+ <code>boost_list</code> for what is usable right now, <code>boost_search</code> for what could
3167
+ be) and the existing <em>authoring</em> one. <code>boost_list</code> is re-framed from "avoid a
3168
+ duplicate install" to "leverage a capability you already have" — it is the free half of the
3169
+ check. A closing proportion note bounds it, because an unbounded <em>always check first</em>
3170
+ turns every trivial turn into a tool call and an agent that learns to ignore the guidance
3171
+ ignores all of it. Both triggers and the bound are pinned by tests, so dropping either
3172
+ regresses.</p>
3173
+ <div class="meta">
3174
+ <span class="m">Complexity <b>S</b></span>
3175
+ <span class="m hi">Impact <b>High</b></span>
3176
+ <span class="m">Wow <b class="wow">★★★</b></span>
3177
+ <span class="m">agent reflex</span>
3178
+ </div>
3179
+ </article>
3154
3180
  <!-- /ROADMAP:cards -->
3155
3181
 
3156
3182
  </div>