boost-skill-cli 1.0.319__tar.gz → 1.0.320__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 (574) hide show
  1. {boost_skill_cli-1.0.319/boost_skill_cli.egg-info → boost_skill_cli-1.0.320}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/rag.py +40 -16
  4. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320/boost_skill_cli.egg-info}/PKG-INFO +1 -1
  5. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/bm25-index-is-one-json-blob.md +32 -2
  6. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap.html +32 -2
  7. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/eval/baseline.json +8 -8
  8. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_rag.py +22 -5
  9. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/.gitattributes +0 -0
  10. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/.gitignore +0 -0
  11. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/.gitleaks.toml +0 -0
  12. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/.htmlvalidate.json +0 -0
  13. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/.lighthouserc.json +0 -0
  14. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/.lycheeignore +0 -0
  15. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/.markdownlint-cli2.jsonc +0 -0
  16. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/.pre-commit-config.yaml +0 -0
  17. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/.stylelintrc.json +0 -0
  18. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/.vale/styles/boost/Terminology.yml +0 -0
  19. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  20. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/.vale.ini +0 -0
  21. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/CLAUDE.md +0 -0
  22. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/CODE_OF_CONDUCT.md +0 -0
  23. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/CONTRIBUTING.md +0 -0
  24. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/LICENSE +0 -0
  25. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/MANIFEST.in +0 -0
  26. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/Makefile +0 -0
  27. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/README.md +0 -0
  28. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/SECURITY.md +0 -0
  29. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost +0 -0
  30. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/__init__.py +0 -0
  31. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/__main__.py +0 -0
  32. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/cli.py +0 -0
  33. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/cliparse.py +0 -0
  34. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/commands/__init__.py +0 -0
  35. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/commands/_common.py +0 -0
  36. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/commands/bmad.py +0 -0
  37. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/commands/configuration.py +0 -0
  38. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/commands/discovery.py +0 -0
  39. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/commands/hooks.py +0 -0
  40. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/commands/info.py +0 -0
  41. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/commands/intelligence.py +0 -0
  42. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/commands/pkg.py +0 -0
  43. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/commands/quality.py +0 -0
  44. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/commands/run.py +0 -0
  45. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/commands/safety.py +0 -0
  46. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/commands/taps.py +0 -0
  47. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/commands/team.py +0 -0
  48. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/__init__.py +0 -0
  49. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/adapters.py +0 -0
  50. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/agents.py +0 -0
  51. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/ai.py +0 -0
  52. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/capabilities.py +0 -0
  53. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/catalog.py +0 -0
  54. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/claude_settings.py +0 -0
  55. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/config.py +0 -0
  56. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/dense.py +0 -0
  57. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/ed25519.py +0 -0
  58. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/embed.py +0 -0
  59. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/faithfulness.py +0 -0
  60. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/frontmatter.py +0 -0
  61. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/gitutil.py +0 -0
  62. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/imperative.py +0 -0
  63. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/injectscan.py +0 -0
  64. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/installscan.py +0 -0
  65. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/integrity.py +0 -0
  66. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/journal.py +0 -0
  67. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/localembed.py +0 -0
  68. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/lockfile.py +0 -0
  69. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/logs.py +0 -0
  70. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/mcp.py +0 -0
  71. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/mcpdecl.py +0 -0
  72. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/mcphost.py +0 -0
  73. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/minisign.py +0 -0
  74. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/nethttp.py +0 -0
  75. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/output.py +0 -0
  76. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/paths.py +0 -0
  77. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/policy.py +0 -0
  78. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/projectlock.py +0 -0
  79. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/provenance.py +0 -0
  80. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/registry.py +0 -0
  81. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/resolve.py +0 -0
  82. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/rules.py +0 -0
  83. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/scopes.py +0 -0
  84. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/secretscan.py +0 -0
  85. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/selfupdate.py +0 -0
  86. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/serve.py +0 -0
  87. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/stackprobe.py +0 -0
  88. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/staleness.py +0 -0
  89. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/store.py +0 -0
  90. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/trustaudit.py +0 -0
  91. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/typosquat.py +0 -0
  92. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/updatediff.py +0 -0
  93. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/util.py +0 -0
  94. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/core/workflows.py +0 -0
  95. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/data/registries.json +0 -0
  96. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/errors.py +0 -0
  97. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_cli/spin.py +0 -0
  98. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_skill_cli.egg-info/SOURCES.txt +0 -0
  99. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  100. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  101. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_skill_cli.egg-info/requires.txt +0 -0
  102. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/boost_skill_cli.egg-info/top_level.txt +0 -0
  103. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/codecov.yml +0 -0
  104. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/.claude/settings.local.json +0 -0
  105. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/DEBUGGING.md +0 -0
  106. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/adapters.html +0 -0
  107. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/architecture/README.md +0 -0
  108. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/architecture/c4-components-core.md +0 -0
  109. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/architecture/c4-containers.md +0 -0
  110. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/architecture/c4-context.md +0 -0
  111. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/architecture/c4-dynamic-install.md +0 -0
  112. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/carousel/gifs/distill.gif +0 -0
  113. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/carousel/gifs/doctor.gif +0 -0
  114. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/carousel/gifs/explain.gif +0 -0
  115. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/carousel/gifs/hooks.gif +0 -0
  116. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/carousel/gifs/install.gif +0 -0
  117. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/carousel/gifs/pulse.gif +0 -0
  118. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/carousel/gifs/search.gif +0 -0
  119. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/carousel/gifs/tap.gif +0 -0
  120. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/carousel/tapes/distill.tape +0 -0
  121. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/carousel/tapes/doctor.tape +0 -0
  122. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/carousel/tapes/explain.tape +0 -0
  123. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/carousel/tapes/hooks.tape +0 -0
  124. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/carousel/tapes/install.tape +0 -0
  125. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/carousel/tapes/pulse.tape +0 -0
  126. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/carousel/tapes/search.tape +0 -0
  127. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/carousel/tapes/tap.tape +0 -0
  128. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/carousel.html +0 -0
  129. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/commands.html +0 -0
  130. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/demo.gif +0 -0
  131. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/demo.tape +0 -0
  132. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/design-roadmap.html +0 -0
  133. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/eval.html +0 -0
  134. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/index.html +0 -0
  135. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/mcp-hub.html +0 -0
  136. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/rag-architecture.md +0 -0
  137. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/BOOST-D01.md +0 -0
  138. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/BOOST-D02.md +0 -0
  139. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/BOOST-D03.md +0 -0
  140. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/BOOST-D04.md +0 -0
  141. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/BOOST-D05.md +0 -0
  142. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/BOOST-D06.md +0 -0
  143. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/BOOST-D07.md +0 -0
  144. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/BOOST-D08.md +0 -0
  145. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/BOOST-D09.md +0 -0
  146. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/BOOST-D10.md +0 -0
  147. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/BOOST-D11.md +0 -0
  148. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/BOOST-D12.md +0 -0
  149. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/BOOST-D13.md +0 -0
  150. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/BOOST-D14.md +0 -0
  151. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/BOOST-D15.md +0 -0
  152. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/BOOST-D16.md +0 -0
  153. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/BOOST-D17.md +0 -0
  154. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/BOOST-D18.md +0 -0
  155. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/BOOST-D19.md +0 -0
  156. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/BOOST-D20.md +0 -0
  157. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/BOOST-D21.md +0 -0
  158. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/BOOST-D22.md +0 -0
  159. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/BOOST-D23.md +0 -0
  160. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/BOOST-D24.md +0 -0
  161. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/BOOST-D25.md +0 -0
  162. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/BOOST-D26.md +0 -0
  163. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  164. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  165. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  166. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  167. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  168. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  169. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  170. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  171. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  172. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  173. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  174. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  175. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  176. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  177. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  178. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  179. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  180. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  181. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  182. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  183. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  184. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/command-carousel-page.md +0 -0
  185. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  186. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  187. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  188. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  189. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  190. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  191. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  192. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  193. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  194. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  195. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  196. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  197. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  198. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  199. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  200. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  201. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  202. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  203. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  204. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  205. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  206. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  207. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  208. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  209. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  210. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  211. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  212. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  213. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  214. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/github-community-health-files.md +0 -0
  215. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  216. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  217. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  218. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  219. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  220. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  221. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  222. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  223. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  224. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  225. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  226. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  227. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  228. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  229. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  230. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  231. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  232. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  233. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  234. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  235. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  236. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  237. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  238. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  239. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  240. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  241. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  242. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  243. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  244. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  245. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  246. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  247. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  248. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  249. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  250. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  251. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  252. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  253. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  254. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  255. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  256. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  257. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  258. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  259. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  260. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  261. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  262. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  263. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  264. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  265. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  266. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  267. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  268. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  269. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  270. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  271. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  272. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  273. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  274. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  275. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  276. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  277. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  278. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  279. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  280. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  281. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  282. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  283. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  284. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  285. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  286. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  287. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  288. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  289. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  290. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  291. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  292. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  293. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  294. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  295. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  296. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  297. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  298. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  299. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  300. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  301. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  302. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  303. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  304. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  305. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  306. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  307. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  308. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  309. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  310. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  311. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  312. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  313. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  314. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  315. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  316. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  317. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  318. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  319. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  320. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  321. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  322. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  323. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  324. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  325. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  326. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  327. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  328. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  329. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  330. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  331. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  332. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  333. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  334. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  335. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  336. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  337. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  338. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  339. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  340. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  341. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  342. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  343. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  344. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  345. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  346. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  347. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  348. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/workspace-scope-install.md +0 -0
  349. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  350. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/eslint.config.mjs +0 -0
  351. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/evals/README.md +0 -0
  352. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/evals/__init__.py +0 -0
  353. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/evals/baseline.json +0 -0
  354. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/evals/faithfulness.py +0 -0
  355. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/evals/golden_set.json +0 -0
  356. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/evals/make_corpus.py +0 -0
  357. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/evals/make_golden.py +0 -0
  358. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/evals/metrics.py +0 -0
  359. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/evals/run_evals.py +0 -0
  360. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/examples/README.md +0 -0
  361. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/examples/adapt-demo.sh +0 -0
  362. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/examples/boost-run-prototype.sh +0 -0
  363. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/index.html +0 -0
  364. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/noxfile.py +0 -0
  365. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/pyproject.toml +0 -0
  366. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/requirements/coverage-tools.in +0 -0
  367. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/requirements/coverage-tools.txt +0 -0
  368. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/requirements/lint-tools.in +0 -0
  369. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/requirements/lint-tools.txt +0 -0
  370. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/requirements/mutation-tools.in +0 -0
  371. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/requirements/mutation-tools.txt +0 -0
  372. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/requirements/platform-pins.lock +0 -0
  373. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/requirements/release-tools.in +0 -0
  374. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/requirements/release-tools.txt +0 -0
  375. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/requirements/test-tools.in +0 -0
  376. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/requirements/test-tools.txt +0 -0
  377. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/scripts/a11y_check.py +0 -0
  378. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/scripts/bench_cli.sh +0 -0
  379. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/scripts/build_command_reference.py +0 -0
  380. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/scripts/build_registries.py +0 -0
  381. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/scripts/build_roadmap.py +0 -0
  382. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/scripts/check_anchors.py +0 -0
  383. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/scripts/check_licenses.py +0 -0
  384. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/scripts/check_required_checks.py +0 -0
  385. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/scripts/ensure_eval_corpus.sh +0 -0
  386. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/scripts/eval_explain.py +0 -0
  387. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/scripts/eval_gate.py +0 -0
  388. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/scripts/eval_recommend.py +0 -0
  389. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/scripts/eval_retrieval.py +0 -0
  390. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/scripts/eval_stats_summary.py +0 -0
  391. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/scripts/import_budget.py +0 -0
  392. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/scripts/lock_toolchain.py +0 -0
  393. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/scripts/mutation_gate.py +0 -0
  394. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/scripts/mutation_shards.py +0 -0
  395. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/scripts/mutation_weights.json +0 -0
  396. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/scripts/perf_gate.py +0 -0
  397. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/scripts/post_deploy_smoke.py +0 -0
  398. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/scripts/release_guard.py +0 -0
  399. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/scripts/release_preflight.py +0 -0
  400. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/setup.cfg +0 -0
  401. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/sonar-project.properties +0 -0
  402. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/style/README.md +0 -0
  403. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/style/boost.css +0 -0
  404. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/style/boost.js +0 -0
  405. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/style/demo.html +0 -0
  406. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/bdd/features/adapt.feature +0 -0
  407. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/bdd/features/browse.feature +0 -0
  408. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/bdd/features/count.feature +0 -0
  409. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/bdd/features/discover.feature +0 -0
  410. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/bdd/features/doctor.feature +0 -0
  411. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/bdd/features/environment.py +0 -0
  412. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/bdd/features/explain.feature +0 -0
  413. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/bdd/features/index.feature +0 -0
  414. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/bdd/features/install.feature +0 -0
  415. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/bdd/features/list.feature +0 -0
  416. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/bdd/features/mcp.feature +0 -0
  417. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/bdd/features/search.feature +0 -0
  418. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/bdd/features/steps/cli_steps.py +0 -0
  419. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/bdd/features/steps/discovery_steps.py +0 -0
  420. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/bdd/features/steps/mcp_steps.py +0 -0
  421. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/bdd/features/steps/quality_steps.py +0 -0
  422. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/conftest.py +0 -0
  423. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/eval/explain.jsonl +0 -0
  424. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/eval/golden-natural.jsonl +0 -0
  425. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/eval/golden.jsonl +0 -0
  426. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/eval/recommend.jsonl +0 -0
  427. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/eval/taps.txt +0 -0
  428. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/functional/test_capabilities_policy.py +0 -0
  429. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/functional/test_cli_adapt.py +0 -0
  430. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/functional/test_cli_bmad.py +0 -0
  431. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/functional/test_cli_configuration.py +0 -0
  432. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/functional/test_cli_discovery.py +0 -0
  433. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/functional/test_cli_hooks.py +0 -0
  434. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/functional/test_cli_info.py +0 -0
  435. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/functional/test_cli_intelligence.py +0 -0
  436. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/functional/test_cli_pkg.py +0 -0
  437. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/functional/test_cli_quality.py +0 -0
  438. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/functional/test_cli_taps.py +0 -0
  439. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/functional/test_cli_team.py +0 -0
  440. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/functional/test_everyday_loop.py +0 -0
  441. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/functional/test_integrity_enforce.py +0 -0
  442. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/functional/test_property_parsers.py +0 -0
  443. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/functional/test_run.py +0 -0
  444. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/functional/test_tap_signing.py +0 -0
  445. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/functional/test_workspace_scope.py +0 -0
  446. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/fuzz/README.md +0 -0
  447. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  448. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  449. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  450. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  451. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  452. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  453. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  454. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  455. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  456. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  457. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  458. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  459. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  460. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  461. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  462. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  463. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  464. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  465. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  466. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  467. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/fuzz/fuzz_frontmatter.py +0 -0
  468. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/fuzz/fuzz_registry.py +0 -0
  469. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/make_fixture.py +0 -0
  470. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/perf/test_benchmarks.py +0 -0
  471. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/smoke.sh +0 -0
  472. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_a11y_check.py +0 -0
  473. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_adapters.py +0 -0
  474. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_adapters_multi.py +0 -0
  475. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_adapters_runner.py +0 -0
  476. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_agents.py +0 -0
  477. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_ai.py +0 -0
  478. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_capabilities.py +0 -0
  479. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_catalog.py +0 -0
  480. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_check_anchors.py +0 -0
  481. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_check_licenses.py +0 -0
  482. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_claude_settings.py +0 -0
  483. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_cliparse.py +0 -0
  484. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_codeql_analysis_key.py +0 -0
  485. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_command_reference_fresh.py +0 -0
  486. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_community_health_files.py +0 -0
  487. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_config.py +0 -0
  488. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_dense.py +0 -0
  489. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_dense_fallback.py +0 -0
  490. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_dense_fix_hint.py +0 -0
  491. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_dense_status.py +0 -0
  492. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_dependabot_config.py +0 -0
  493. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_docs_pages_linked.py +0 -0
  494. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_docsite_chrome.py +0 -0
  495. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_ed25519.py +0 -0
  496. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_embed.py +0 -0
  497. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_embed_local.py +0 -0
  498. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_entry_key.py +0 -0
  499. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_errors_and_cli_table.py +0 -0
  500. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_eval_baseline.py +0 -0
  501. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_eval_faithfulness.py +0 -0
  502. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_eval_gate.py +0 -0
  503. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_eval_metrics.py +0 -0
  504. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_eval_stats_summary.py +0 -0
  505. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_faithfulness.py +0 -0
  506. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_frontmatter.py +0 -0
  507. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_fuzz_targets.py +0 -0
  508. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_gitleaks_config.py +0 -0
  509. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_gitutil.py +0 -0
  510. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_imperative.py +0 -0
  511. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_import_budget.py +0 -0
  512. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_injectscan.py +0 -0
  513. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_installscan.py +0 -0
  514. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_integrity.py +0 -0
  515. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_journal.py +0 -0
  516. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_localembed.py +0 -0
  517. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_lockfile.py +0 -0
  518. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_logs.py +0 -0
  519. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_marketing_counts.py +0 -0
  520. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_mcp.py +0 -0
  521. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_mcp_install_scan.py +0 -0
  522. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_mcpdecl.py +0 -0
  523. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_mcphost.py +0 -0
  524. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_minisign.py +0 -0
  525. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_mutation_hardening.py +0 -0
  526. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_mutation_shards.py +0 -0
  527. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_mutation_subfile_shards.py +0 -0
  528. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_mutmut_source_paths.py +0 -0
  529. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_nethttp.py +0 -0
  530. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_output.py +0 -0
  531. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_paths.py +0 -0
  532. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_perf_gate.py +0 -0
  533. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_pkg_confusions.py +0 -0
  534. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_pkg_injection.py +0 -0
  535. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_pkg_secrets.py +0 -0
  536. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_platform_pins.py +0 -0
  537. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_policy.py +0 -0
  538. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_post_deploy_smoke.py +0 -0
  539. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_project_mcp_sidecar.py +0 -0
  540. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_projectlock.py +0 -0
  541. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_provenance.py +0 -0
  542. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_rag_fusion.py +0 -0
  543. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_registries_fresh.py +0 -0
  544. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_registry.py +0 -0
  545. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_registry_categories.py +0 -0
  546. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_release_guard.py +0 -0
  547. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_release_preflight.py +0 -0
  548. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_required_checks.py +0 -0
  549. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_resolve.py +0 -0
  550. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_roadmap_fresh.py +0 -0
  551. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_rules.py +0 -0
  552. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_scopes.py +0 -0
  553. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_secretscan.py +0 -0
  554. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_selfupdate.py +0 -0
  555. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_serve.py +0 -0
  556. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_spin.py +0 -0
  557. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_stackprobe.py +0 -0
  558. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_staleness.py +0 -0
  559. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_store.py +0 -0
  560. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_token_parity.py +0 -0
  561. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_toolchain_lock.py +0 -0
  562. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_trustaudit.py +0 -0
  563. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_typosquat.py +0 -0
  564. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_updatediff.py +0 -0
  565. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_util.py +0 -0
  566. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_version.py +0 -0
  567. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_workflow_concurrency.py +0 -0
  568. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_workflow_timeouts.py +0 -0
  569. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/unit/test_workflows.py +0 -0
  570. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/visual/a11y_check.mjs +0 -0
  571. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/visual/console_check.mjs +0 -0
  572. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/visual/package-lock.json +0 -0
  573. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/visual/package.json +0 -0
  574. {boost_skill_cli-1.0.319 → boost_skill_cli-1.0.320}/tests/visual/visual_check.mjs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.319
3
+ Version: 1.0.320
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.319'
22
- __version_tuple__ = version_tuple = (1, 0, 319)
21
+ __version__ = version = '1.0.320'
22
+ __version_tuple__ = version_tuple = (1, 0, 320)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -33,7 +33,7 @@ from . import ai, catalog, frontmatter, gitutil, paths, registry, util
33
33
  # v2: `snip` stores a larger head of the matched chunk (not just SNIP_WIDTH
34
34
  # chars) so `retrieve` can window it onto the query terms; bump forces a
35
35
  # one-time reindex.
36
- INDEX_VERSION = 3
36
+ INDEX_VERSION = 4
37
37
  ENGINE = "bm25"
38
38
 
39
39
  # Chunking defaults (documented in docs/rag-architecture.md §4).
@@ -162,25 +162,49 @@ def index_path() -> Path:
162
162
  return paths.cache_dir() / "rag_index.json"
163
163
 
164
164
 
165
+ def surface(entry: dict) -> str:
166
+ """The item's own identifying text, indexed alongside its body.
167
+
168
+ A chunked index got name matching for free: the name sat in whichever chunk
169
+ happened to contain it. One document per entry has to state it, and the
170
+ de-hyphenated form matters because `tokenize` does not split on hyphens —
171
+ without it the query "code reviewer" cannot match the item `code-reviewer`.
172
+ """
173
+ name = entry.get("name", "")
174
+ return " ".join([name, name.replace("-", " ").replace("_", " "),
175
+ entry.get("description") or ""])
176
+
177
+
165
178
  def _make_docs(entries: List[dict], tap_paths: Dict[str, Path]) -> List[dict]:
166
- """Chunk + tokenize every entry into scored documents (one per chunk)."""
179
+ """Tokenize every entry into ONE scored document.
180
+
181
+ Chunking cost far more than it bought. Each 1000-char window carried its own
182
+ copy of the shared per-doc fields and its own `snip`, which is how a 743-entry
183
+ corpus became 3,740 documents and how the roadmap item measured a real
184
+ 83-tap install at 132 MB and 8-13 s of `json.loads` on *every cold search* —
185
+ against 31-70 ms of actual BM25 scoring.
186
+
187
+ The one thing chunking genuinely provided was locality: a term only had to
188
+ beat the length normalisation of its own window, not of an entire long
189
+ document. BM25's `b` parameter already handles that, and `retrieve` was
190
+ collapsing chunks back to one hit per entry anyway (max score across
191
+ chunks), so the extra documents were discarded at query time.
192
+ """
167
193
  docs: List[dict] = []
168
194
  for e in entries:
169
195
  body = read_body(e, tap_paths)
170
- pieces = chunk(body) or [body]
171
- for ci, piece in enumerate(pieces):
172
- tf: Dict[str, int] = defaultdict(int)
173
- for tok in tokenize(piece):
174
- tf[tok] += 1
175
- if not tf:
176
- continue
177
- docs.append({
178
- "n": e["name"], "t": e["tap"], "f": e["skill_md"],
179
- "k": e.get("kind", "skill"),
180
- "c": ci, "l": sum(tf.values()),
181
- "snip": piece[:SNIP_STORE].strip(), # windowed at retrieve time
182
- "tf": dict(tf), # noqa: FURB123 tf is a defaultdict; .copy() would keep the factory
183
- })
196
+ tf: Dict[str, int] = defaultdict(int)
197
+ for tok in tokenize(surface(e) + "\n" + body):
198
+ tf[tok] += 1
199
+ if not tf:
200
+ continue
201
+ docs.append({
202
+ "n": e["name"], "t": e["tap"], "f": e["skill_md"],
203
+ "k": e.get("kind", "skill"),
204
+ "c": 0, "l": sum(tf.values()),
205
+ "snip": body[:SNIP_STORE].strip(), # windowed at retrieve time
206
+ "tf": dict(tf), # noqa: FURB123 tf is a defaultdict; .copy() would keep the factory
207
+ })
184
208
  return docs
185
209
 
186
210
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.319
3
+ Version: 1.0.320
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -2,14 +2,14 @@
2
2
  id: bm25-index-is-one-json-blob
3
3
  board: code
4
4
  section: pipeline
5
- status: planned
5
+ status: inflight
6
6
  category: Search · Index
7
7
  complexity: L
8
8
  impact: High
9
9
  wow: 5
10
10
  note: 2.5 GB RSS per search at 50k items
11
11
  order: 72
12
- owner:
12
+ owner: loop/unchunked-bm25-index
13
13
  pr:
14
14
  title: The BM25 index is one JSON blob, and it stops working between 10k and 50k items
15
15
  ---
@@ -43,3 +43,33 @@ Also note <code>build()</code>'s incremental path is O(entire corpus): reusing
43
43
  unchanged taps runs <code>_kept_docs</code> → <code>_postings_to_doc_tf</code>,
44
44
  which inverts every posting in the index — measured 35 s and 1.72 GB RSS at
45
45
  11.1k entries to reindex a single changed file.
46
+
47
+ <b>Win (1) is shipped, and the &ldquo;better on every metric&rdquo; claim did not survive
48
+ re-measurement.</b> On the pinned 6-tap corpus unchunking is a <em>trade</em>, not a free win, and
49
+ which way it falls depends entirely on the shape of the query.
50
+
51
+ On the keyword golden set &mdash; which grades items by <b>name</b> &mdash; recall@10 fell
52
+ 1.000 &rarr; <b>0.978</b> and nDCG 0.895 &rarr; 0.882, while hit@1 rose 0.780 &rarr; <b>0.791</b>.
53
+ On the 50 natural-language queries in <code>golden-natural.jsonl</code>, over identical data, every
54
+ metric improved and not marginally: recall 0.690 &rarr; <b>0.750</b>, hit@1 0.240 &rarr; <b>0.340</b>,
55
+ MRR 0.382 &rarr; 0.474, nDCG 0.446 &rarr; 0.524. That +0.100 hit@1 is 5 of 50 queries, which is at
56
+ the edge of what 50 queries can resolve &mdash; worth stating rather than rounding up.
57
+
58
+ Index cost on the same corpus: <b>5.3 MB &rarr; 2.1 MB</b> and 3,740 documents &rarr; 743, one per
59
+ entry, with load time 0.032 s &rarr; 0.015 s. The card's headline figures are from an 83-tap install
60
+ where the constant factors are far larger; this is the small-scale confirmation of the same shape,
61
+ not a substitute for it.
62
+
63
+ Chunking's one real contribution was locality &mdash; a term only had to beat the length
64
+ normalisation of its own 1000-char window. BM25's <code>b</code> already does that, and
65
+ <code>retrieve</code> collapsed chunks back to one hit per entry regardless, so the extra documents
66
+ were built, stored, re-parsed on every cold search and then discarded. What chunking <em>did</em>
67
+ provide for free was name matching, since the name sat in whichever chunk contained it; one document
68
+ per entry has to state the surface explicitly, so <code>rag.surface</code> indexes the name, its
69
+ de-hyphenated form (<code>tokenize</code> does not split hyphens, so &ldquo;code reviewer&rdquo;
70
+ would otherwise never match <code>code-reviewer</code>) and the description alongside the body.
71
+
72
+ <b>Still open:</b> win (2), getting postings out of JSON &mdash; the FTS5 probe and the mmap-able
73
+ binary format are both untouched, as is moving <code>snip</code> text off the hot path. So is
74
+ <code>build()</code>'s O(entire-corpus) incremental path, which still inverts every posting to
75
+ reindex one changed file.
@@ -3436,7 +3436,7 @@ that were never the same from being merged by accident.</p>
3436
3436
  </article>
3437
3437
 
3438
3438
  <article class="cap rcard" id="bm25-index-is-one-json-blob">
3439
- <div class="head"><span class="pill planned">Planned</span><span class="cat">Search · Index</span></div>
3439
+ <div class="head"><span class="pill inflight">In flight</span><span class="cat">Search · Index</span></div>
3440
3440
  <h3>The BM25 index is one JSON blob, and it stops working between 10k and 50k items</h3>
3441
3441
  <p><code>rag.py</code> persists the whole index as a single JSON file and
3442
3442
  <code>json.loads</code> it on every invocation. <code>_CACHE</code>
@@ -3467,7 +3467,37 @@ out of the hot path.
3467
3467
  Also note <code>build()</code>'s incremental path is O(entire corpus): reusing
3468
3468
  unchanged taps runs <code>_kept_docs</code> → <code>_postings_to_doc_tf</code>,
3469
3469
  which inverts every posting in the index — measured 35 s and 1.72 GB RSS at
3470
- 11.1k entries to reindex a single changed file.</p>
3470
+ 11.1k entries to reindex a single changed file.
3471
+
3472
+ <b>Win (1) is shipped, and the &ldquo;better on every metric&rdquo; claim did not survive
3473
+ re-measurement.</b> On the pinned 6-tap corpus unchunking is a <em>trade</em>, not a free win, and
3474
+ which way it falls depends entirely on the shape of the query.
3475
+
3476
+ On the keyword golden set &mdash; which grades items by <b>name</b> &mdash; recall@10 fell
3477
+ 1.000 &rarr; <b>0.978</b> and nDCG 0.895 &rarr; 0.882, while hit@1 rose 0.780 &rarr; <b>0.791</b>.
3478
+ On the 50 natural-language queries in <code>golden-natural.jsonl</code>, over identical data, every
3479
+ metric improved and not marginally: recall 0.690 &rarr; <b>0.750</b>, hit@1 0.240 &rarr; <b>0.340</b>,
3480
+ MRR 0.382 &rarr; 0.474, nDCG 0.446 &rarr; 0.524. That +0.100 hit@1 is 5 of 50 queries, which is at
3481
+ the edge of what 50 queries can resolve &mdash; worth stating rather than rounding up.
3482
+
3483
+ Index cost on the same corpus: <b>5.3 MB &rarr; 2.1 MB</b> and 3,740 documents &rarr; 743, one per
3484
+ entry, with load time 0.032 s &rarr; 0.015 s. The card's headline figures are from an 83-tap install
3485
+ where the constant factors are far larger; this is the small-scale confirmation of the same shape,
3486
+ not a substitute for it.
3487
+
3488
+ Chunking's one real contribution was locality &mdash; a term only had to beat the length
3489
+ normalisation of its own 1000-char window. BM25's <code>b</code> already does that, and
3490
+ <code>retrieve</code> collapsed chunks back to one hit per entry regardless, so the extra documents
3491
+ were built, stored, re-parsed on every cold search and then discarded. What chunking <em>did</em>
3492
+ provide for free was name matching, since the name sat in whichever chunk contained it; one document
3493
+ per entry has to state the surface explicitly, so <code>rag.surface</code> indexes the name, its
3494
+ de-hyphenated form (<code>tokenize</code> does not split hyphens, so &ldquo;code reviewer&rdquo;
3495
+ would otherwise never match <code>code-reviewer</code>) and the description alongside the body.
3496
+
3497
+ <b>Still open:</b> win (2), getting postings out of JSON &mdash; the FTS5 probe and the mmap-able
3498
+ binary format are both untouched, as is moving <code>snip</code> text off the hot path. So is
3499
+ <code>build()</code>'s O(entire-corpus) incremental path, which still inverts every posting to
3500
+ reindex one changed file.</p>
3471
3501
  <div class="meta">
3472
3502
  <span class="m">Complexity <b>L</b></span>
3473
3503
  <span class="m hi">Impact <b>High</b></span>
@@ -11,10 +11,10 @@
11
11
  "nDCG@k": 0.8098096631332409
12
12
  },
13
13
  "BM25 full-content": {
14
- "recall@k": 1.0,
15
- "hit@1": 0.7802197802197802,
16
- "MRR": 0.8604395604395604,
17
- "nDCG@k": 0.8945515691995823
14
+ "recall@k": 0.978021978021978,
15
+ "hit@1": 0.7912087912087912,
16
+ "MRR": 0.8542124542124542,
17
+ "nDCG@k": 0.8823506423411086
18
18
  }
19
19
  }
20
20
  },
@@ -29,10 +29,10 @@
29
29
  "nDCG@k": 0.19698368469243419
30
30
  },
31
31
  "BM25 full-content": {
32
- "recall@k": 0.69,
33
- "hit@1": 0.24,
34
- "MRR": 0.3824806870205885,
35
- "nDCG@k": 0.44627899978118957
32
+ "recall@k": 0.75,
33
+ "hit@1": 0.34,
34
+ "MRR": 0.47449253613769743,
35
+ "nDCG@k": 0.5243426877966659
36
36
  }
37
37
  }
38
38
  }
@@ -605,18 +605,35 @@ class TestMakeDocs:
605
605
  docs = rag._make_docs([e], {})
606
606
  assert docs[0]["snip"] == "Q" * rag.SNIP_STORE
607
607
 
608
- def test_long_body_yields_multiple_chunks(self, monkeypatch):
608
+ def test_one_document_per_entry_however_long_the_body(self, monkeypatch):
609
+ # Inverted deliberately. This asserted `len(docs) > 1`, the chunking the
610
+ # index no longer does: each window carried its own copy of the shared
611
+ # fields and its own snippet, and `retrieve` collapsed them back to one
612
+ # hit per entry anyway, so the extra documents were built, stored,
613
+ # re-parsed on every cold search, and then discarded.
609
614
  monkeypatch.setattr(rag, "read_body", lambda e, tp: "widget " * 400)
610
- e = _entry("n")
611
- docs = rag._make_docs([e], {})
612
- assert len(docs) > 1 # chunk() or [body], not `and`
615
+ docs = rag._make_docs([_entry("n")], {})
616
+ assert len(docs) == 1
617
+ assert docs[0]["tf"]["widget"] == 400
618
+
619
+ def test_the_entry_surface_is_indexed_with_the_body(self, monkeypatch):
620
+ # A chunked index matched names for free — the name sat in whatever
621
+ # chunk contained it. One doc per entry has to state the surface, or
622
+ # searching for an item by its own name stops working.
623
+ monkeypatch.setattr(rag, "read_body", lambda e, tp: "unrelated prose")
624
+ docs = rag._make_docs(
625
+ [_entry("code-reviewer", desc="reviews diffs")], {})
626
+ tf = docs[0]["tf"]
627
+ assert "reviewer" in tf, "the de-hyphenated name must be searchable"
628
+ assert "diffs" in tf, "the description must be searchable"
613
629
 
614
630
  def test_empty_chunk_is_skipped_not_break(self, monkeypatch):
615
631
  body = ("the " * 220) + "\n\n" + ("widget " * 130)
616
632
  monkeypatch.setattr(rag, "read_body", lambda e, tp: body)
617
633
  e = _entry("n")
618
634
  docs = rag._make_docs([e], {})
619
- # first chunk is all stopwords (empty tf) -> `continue`, keep going
635
+ # An all-stopword passage contributes no terms; the entry still yields
636
+ # its one document, carrying the terms from the rest of the body.
620
637
  assert len(docs) == 1
621
638
  assert "widget" in docs[0]["tf"]
622
639