boost-skill-cli 1.1.0__tar.gz → 1.1.2__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 (716) hide show
  1. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/configuration.py +58 -3
  4. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/complete.py +132 -30
  5. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_skill_cli.egg-info/PKG-INFO +1 -1
  6. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_skill_cli.egg-info/SOURCES.txt +4 -0
  7. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/commands.html +4 -3
  8. boost_skill_cli-1.1.2/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +82 -0
  9. boost_skill_cli-1.1.2/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +64 -0
  10. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap.html +139 -1
  11. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_complete.py +10 -1
  12. boost_skill_cli-1.1.2/tests/unit/test_complete_rc_block.py +367 -0
  13. boost_skill_cli-1.1.2/tests/unit/test_visual_harness_flags.py +121 -0
  14. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/visual/visual_check.mjs +31 -3
  15. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/.gitattributes +0 -0
  16. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/.gitignore +0 -0
  17. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/.gitleaks.toml +0 -0
  18. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/.htmlvalidate.json +0 -0
  19. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/.lighthouserc.json +0 -0
  20. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/.lycheeignore +0 -0
  21. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/.markdownlint-cli2.jsonc +0 -0
  22. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/.pre-commit-config.yaml +0 -0
  23. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/.stylelintrc.json +0 -0
  24. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/.vale/styles/boost/Terminology.yml +0 -0
  25. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  26. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/.vale.ini +0 -0
  27. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/CLAUDE.md +0 -0
  28. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/CODE_OF_CONDUCT.md +0 -0
  29. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/CONTRIBUTING.md +0 -0
  30. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/LICENSE +0 -0
  31. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/MANIFEST.in +0 -0
  32. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/Makefile +0 -0
  33. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/README.md +0 -0
  34. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/SECURITY.md +0 -0
  35. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost +0 -0
  36. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/__init__.py +0 -0
  37. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/__main__.py +0 -0
  38. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/cli.py +0 -0
  39. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/cliparse.py +0 -0
  40. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/__init__.py +0 -0
  41. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/_common.py +0 -0
  42. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/bmad.py +0 -0
  43. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/discovery.py +0 -0
  44. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/hooks.py +0 -0
  45. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/info.py +0 -0
  46. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/intelligence.py +0 -0
  47. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/pkg.py +0 -0
  48. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/quality.py +0 -0
  49. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/run.py +0 -0
  50. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/safety.py +0 -0
  51. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/taps.py +0 -0
  52. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/commands/team.py +0 -0
  53. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/__init__.py +0 -0
  54. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/adapters.py +0 -0
  55. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/agents.py +0 -0
  56. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/ai.py +0 -0
  57. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/bmad.py +0 -0
  58. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/bootstrap.py +0 -0
  59. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/builtin.py +0 -0
  60. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/capabilities.py +0 -0
  61. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/catalog.py +0 -0
  62. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/catalogbundle.py +0 -0
  63. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/chat.py +0 -0
  64. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/claude_settings.py +0 -0
  65. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/config.py +0 -0
  66. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/dense.py +0 -0
  67. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/ed25519.py +0 -0
  68. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/embed.py +0 -0
  69. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/faithfulness.py +0 -0
  70. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/frontmatter.py +0 -0
  71. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/gitutil.py +0 -0
  72. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/imperative.py +0 -0
  73. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/injectscan.py +0 -0
  74. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/installscan.py +0 -0
  75. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/integrity.py +0 -0
  76. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/journal.py +0 -0
  77. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/localembed.py +0 -0
  78. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/lockfile.py +0 -0
  79. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/logs.py +0 -0
  80. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/mcp.py +0 -0
  81. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/mcpdecl.py +0 -0
  82. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/mcphost.py +0 -0
  83. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/minisign.py +0 -0
  84. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/nethttp.py +0 -0
  85. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/output.py +0 -0
  86. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/paths.py +0 -0
  87. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/policy.py +0 -0
  88. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/projectlock.py +0 -0
  89. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/provenance.py +0 -0
  90. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/rag.py +0 -0
  91. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/registry.py +0 -0
  92. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/resolve.py +0 -0
  93. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/rules.py +0 -0
  94. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/scopes.py +0 -0
  95. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/secretscan.py +0 -0
  96. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/selfupdate.py +0 -0
  97. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/serve.py +0 -0
  98. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/stackprobe.py +0 -0
  99. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/staleness.py +0 -0
  100. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/store.py +0 -0
  101. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/trustaudit.py +0 -0
  102. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/typosquat.py +0 -0
  103. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/updatediff.py +0 -0
  104. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/util.py +0 -0
  105. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/core/workflows.py +0 -0
  106. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/data/registries.json +0 -0
  107. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/data/rules/boost-first.mdc +0 -0
  108. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/errors.py +0 -0
  109. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_cli/spin.py +0 -0
  110. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_langchain/__init__.py +0 -0
  111. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_langchain/_compat.py +0 -0
  112. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_langchain/graph.py +0 -0
  113. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_langchain/loader.py +0 -0
  114. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_langchain/py.typed +0 -0
  115. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_langchain/retriever.py +0 -0
  116. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  117. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  118. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_skill_cli.egg-info/requires.txt +0 -0
  119. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/boost_skill_cli.egg-info/top_level.txt +0 -0
  120. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/codecov.yml +0 -0
  121. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/.claude/settings.local.json +0 -0
  122. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/DEBUGGING.md +0 -0
  123. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/adapters.html +0 -0
  124. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/architecture/README.md +0 -0
  125. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/architecture/c4-components-core.md +0 -0
  126. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/architecture/c4-containers.md +0 -0
  127. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/architecture/c4-context.md +0 -0
  128. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/architecture/c4-dynamic-install.md +0 -0
  129. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/gifs/distill.gif +0 -0
  130. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/gifs/doctor.gif +0 -0
  131. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/gifs/explain.gif +0 -0
  132. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/gifs/hooks.gif +0 -0
  133. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/gifs/install.gif +0 -0
  134. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/gifs/pulse.gif +0 -0
  135. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/gifs/search.gif +0 -0
  136. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/gifs/tap.gif +0 -0
  137. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/tapes/distill.tape +0 -0
  138. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/tapes/doctor.tape +0 -0
  139. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/tapes/explain.tape +0 -0
  140. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/tapes/hooks.tape +0 -0
  141. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/tapes/install.tape +0 -0
  142. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/tapes/pulse.tape +0 -0
  143. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/tapes/search.tape +0 -0
  144. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel/tapes/tap.tape +0 -0
  145. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/carousel.html +0 -0
  146. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/chat.html +0 -0
  147. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/demo-index.json +0 -0
  148. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/demo.gif +0 -0
  149. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/demo.html +0 -0
  150. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/demo.tape +0 -0
  151. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/design-roadmap.html +0 -0
  152. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/eval-latest.json +0 -0
  153. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/eval.html +0 -0
  154. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/index.html +0 -0
  155. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/langchain.html +0 -0
  156. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/mcp-hub.html +0 -0
  157. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/rag-architecture.md +0 -0
  158. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D01.md +0 -0
  159. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D02.md +0 -0
  160. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D03.md +0 -0
  161. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D04.md +0 -0
  162. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D05.md +0 -0
  163. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D06.md +0 -0
  164. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D07.md +0 -0
  165. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D08.md +0 -0
  166. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D09.md +0 -0
  167. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D10.md +0 -0
  168. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D11.md +0 -0
  169. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D12.md +0 -0
  170. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D13.md +0 -0
  171. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D14.md +0 -0
  172. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D15.md +0 -0
  173. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D16.md +0 -0
  174. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D17.md +0 -0
  175. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D18.md +0 -0
  176. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D19.md +0 -0
  177. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D20.md +0 -0
  178. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D21.md +0 -0
  179. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D22.md +0 -0
  180. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D23.md +0 -0
  181. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D24.md +0 -0
  182. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D25.md +0 -0
  183. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/BOOST-D26.md +0 -0
  184. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  185. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  186. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  187. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  188. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  189. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  190. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  191. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  192. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  193. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  194. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  195. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  196. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  197. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/boost-first-rule.md +0 -0
  198. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  199. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  200. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  201. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  202. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  203. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  204. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  205. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  206. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  207. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  208. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  209. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  210. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  211. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  212. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  213. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  214. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/command-carousel-page.md +0 -0
  215. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  216. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  217. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  218. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  219. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  220. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  221. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  222. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  223. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  224. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  225. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  226. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  227. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  228. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  229. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  230. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  231. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  232. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  233. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  234. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  235. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  236. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  237. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  238. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  239. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  240. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  241. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  242. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  243. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  244. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  245. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  246. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  247. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  248. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  249. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  250. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  251. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  252. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  253. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  254. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  255. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  256. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  257. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  258. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  259. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  260. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/github-community-health-files.md +0 -0
  261. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  262. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  263. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  264. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  265. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  266. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  267. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  268. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  269. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  270. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  271. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  272. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  273. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  274. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  275. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  276. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  277. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  278. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  279. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  280. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  281. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  282. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  283. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  284. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  285. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  286. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  287. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  288. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  289. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  290. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  291. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  292. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  293. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  294. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  295. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  296. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  297. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  298. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  299. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  300. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  301. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  302. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  303. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  304. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  305. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  306. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  307. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  308. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  309. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  310. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  311. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  312. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  313. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  314. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  315. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  316. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  317. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  318. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  319. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  320. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  321. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  322. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  323. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  324. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  325. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  326. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  327. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  328. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  329. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  330. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  331. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  332. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  333. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  334. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  335. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  336. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  337. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  338. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  339. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  340. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  341. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  342. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  343. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  344. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  345. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  346. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  347. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  348. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  349. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  350. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  351. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  352. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  353. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  354. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  355. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  356. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  357. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  358. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  359. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  360. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  361. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  362. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  363. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  364. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  365. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  366. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  367. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  368. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  369. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  370. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  371. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  372. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  373. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  374. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  375. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  376. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  377. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  378. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  379. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  380. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  381. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  382. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  383. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  384. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  385. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  386. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  387. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  388. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  389. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  390. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  391. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  392. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  393. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  394. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  395. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  396. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  397. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  398. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  399. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  400. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  401. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  402. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  403. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  404. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  405. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  406. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  407. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  408. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  409. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  410. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  411. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  412. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  413. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  414. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  415. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  416. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  417. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  418. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  419. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  420. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  421. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  422. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  423. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  424. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  425. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  426. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  427. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  428. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  429. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  430. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/workspace-scope-install.md +0 -0
  431. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/zip-strict-audit.md +0 -0
  432. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  433. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  434. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/eslint.config.mjs +0 -0
  435. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/evals/README.md +0 -0
  436. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/evals/__init__.py +0 -0
  437. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/evals/baseline.json +0 -0
  438. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/evals/faithfulness.py +0 -0
  439. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/evals/golden_set.json +0 -0
  440. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/evals/make_corpus.py +0 -0
  441. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/evals/make_golden.py +0 -0
  442. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/evals/metrics.py +0 -0
  443. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/evals/publish_golden_dataset.py +0 -0
  444. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/evals/run_evals.py +0 -0
  445. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/examples/README.md +0 -0
  446. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/examples/adapt-demo.sh +0 -0
  447. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/examples/boost-run-prototype.sh +0 -0
  448. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/index.html +0 -0
  449. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/noxfile.py +0 -0
  450. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/pyproject.toml +0 -0
  451. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/requirements/coverage-tools.in +0 -0
  452. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/requirements/coverage-tools.txt +0 -0
  453. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/requirements/lint-tools.in +0 -0
  454. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/requirements/lint-tools.txt +0 -0
  455. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/requirements/mutation-tools.in +0 -0
  456. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/requirements/mutation-tools.txt +0 -0
  457. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/requirements/platform-pins.lock +0 -0
  458. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/requirements/release-tools.in +0 -0
  459. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/requirements/release-tools.txt +0 -0
  460. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/requirements/test-tools.in +0 -0
  461. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/requirements/test-tools.txt +0 -0
  462. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/a11y_check.py +0 -0
  463. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/bench_cli.sh +0 -0
  464. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/build_command_reference.py +0 -0
  465. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/build_demo_index.py +0 -0
  466. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/build_registries.py +0 -0
  467. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/build_roadmap.py +0 -0
  468. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/build_scale_corpus.py +0 -0
  469. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/check_anchors.py +0 -0
  470. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/check_licenses.py +0 -0
  471. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/check_required_checks.py +0 -0
  472. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/ensure_eval_corpus.sh +0 -0
  473. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/eval_corpus.py +0 -0
  474. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/eval_explain.py +0 -0
  475. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/eval_gate.py +0 -0
  476. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/eval_recommend.py +0 -0
  477. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/eval_retrieval.py +0 -0
  478. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/eval_stats_summary.py +0 -0
  479. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/import_budget.py +0 -0
  480. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/lock_toolchain.py +0 -0
  481. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/measure_registry.py +0 -0
  482. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/mutation_gate.py +0 -0
  483. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/mutation_shards.py +0 -0
  484. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/mutation_weights.json +0 -0
  485. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/page_budget.py +0 -0
  486. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/perf_gate.py +0 -0
  487. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/post_deploy_smoke.py +0 -0
  488. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/publish_eval_json.py +0 -0
  489. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/release_guard.py +0 -0
  490. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/release_preflight.py +0 -0
  491. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/scripts/serve_docs.py +0 -0
  492. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/setup.cfg +0 -0
  493. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/sonar-project.properties +0 -0
  494. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/style/README.md +0 -0
  495. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/style/boost.css +0 -0
  496. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/style/boost.js +0 -0
  497. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/style/demo.html +0 -0
  498. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/adapt.feature +0 -0
  499. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/browse.feature +0 -0
  500. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/count.feature +0 -0
  501. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/discover.feature +0 -0
  502. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/doctor.feature +0 -0
  503. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/environment.py +0 -0
  504. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/explain.feature +0 -0
  505. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/index.feature +0 -0
  506. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/install.feature +0 -0
  507. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/list.feature +0 -0
  508. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/mcp.feature +0 -0
  509. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/search.feature +0 -0
  510. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/steps/cli_steps.py +0 -0
  511. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/steps/discovery_steps.py +0 -0
  512. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/steps/mcp_steps.py +0 -0
  513. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/bdd/features/steps/quality_steps.py +0 -0
  514. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/conftest.py +0 -0
  515. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/eval/baseline.json +0 -0
  516. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/eval/explain.jsonl +0 -0
  517. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/eval/golden-natural.jsonl +0 -0
  518. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/eval/golden.jsonl +0 -0
  519. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/eval/recommend.jsonl +0 -0
  520. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/eval/taps-scale.txt +0 -0
  521. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/eval/taps.txt +0 -0
  522. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_capabilities_policy.py +0 -0
  523. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_cli_adapt.py +0 -0
  524. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_cli_bmad.py +0 -0
  525. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_cli_catalog.py +0 -0
  526. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_cli_chat.py +0 -0
  527. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_cli_configuration.py +0 -0
  528. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_cli_discovery.py +0 -0
  529. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_cli_hooks.py +0 -0
  530. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_cli_info.py +0 -0
  531. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_cli_intelligence.py +0 -0
  532. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_cli_pkg.py +0 -0
  533. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_cli_quality.py +0 -0
  534. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_cli_taps.py +0 -0
  535. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_cli_team.py +0 -0
  536. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_everyday_loop.py +0 -0
  537. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_integrity_enforce.py +0 -0
  538. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_kind_conformance.py +0 -0
  539. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_property_parsers.py +0 -0
  540. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_run.py +0 -0
  541. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_tap_signing.py +0 -0
  542. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/functional/test_workspace_scope.py +0 -0
  543. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/README.md +0 -0
  544. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  545. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  546. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  547. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  548. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  549. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  550. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  551. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  552. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  553. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  554. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  555. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  556. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  557. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  558. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  559. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  560. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  561. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  562. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  563. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  564. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/fuzz_frontmatter.py +0 -0
  565. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/fuzz/fuzz_registry.py +0 -0
  566. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/langchain/conftest.py +0 -0
  567. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/langchain/test_graph.py +0 -0
  568. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/langchain/test_loader.py +0 -0
  569. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/langchain/test_retriever.py +0 -0
  570. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/make_fixture.py +0 -0
  571. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/perf/test_benchmarks.py +0 -0
  572. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/smoke.sh +0 -0
  573. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_a11y_check.py +0 -0
  574. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_action_pin_lockstep.py +0 -0
  575. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_adapters.py +0 -0
  576. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_adapters_multi.py +0 -0
  577. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_adapters_runner.py +0 -0
  578. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_agents.py +0 -0
  579. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_ai.py +0 -0
  580. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_bmad_core.py +0 -0
  581. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_boost_first_offer.py +0 -0
  582. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_bootstrap.py +0 -0
  583. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_builtin.py +0 -0
  584. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_capabilities.py +0 -0
  585. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_catalog.py +0 -0
  586. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_catalogbundle.py +0 -0
  587. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_chat.py +0 -0
  588. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_check_anchors.py +0 -0
  589. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_check_licenses.py +0 -0
  590. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_claude_settings.py +0 -0
  591. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_clean_internal_cache.py +0 -0
  592. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_cliparse.py +0 -0
  593. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_codeql_analysis_key.py +0 -0
  594. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_command_reference_fresh.py +0 -0
  595. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_community_health_files.py +0 -0
  596. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_compact.py +0 -0
  597. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_config.py +0 -0
  598. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_content_dedupe.py +0 -0
  599. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_crash_redaction.py +0 -0
  600. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_dedup_trust.py +0 -0
  601. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_demo_index.py +0 -0
  602. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_dense.py +0 -0
  603. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_dense_fallback.py +0 -0
  604. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_dense_fix_hint.py +0 -0
  605. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_dense_shard_real_schema.py +0 -0
  606. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  607. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_dense_shards.py +0 -0
  608. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_dense_status.py +0 -0
  609. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_dependabot_config.py +0 -0
  610. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_docs_pages_linked.py +0 -0
  611. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_docsite_chrome.py +0 -0
  612. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_ed25519.py +0 -0
  613. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_embed.py +0 -0
  614. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_embed_local.py +0 -0
  615. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_embed_truncated_response.py +0 -0
  616. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_entry_key.py +0 -0
  617. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_errors_and_cli_table.py +0 -0
  618. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_eval_baseline.py +0 -0
  619. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_eval_corpus.py +0 -0
  620. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_eval_faithfulness.py +0 -0
  621. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_eval_gate.py +0 -0
  622. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_eval_grading.py +0 -0
  623. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_eval_metrics.py +0 -0
  624. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_eval_stats_summary.py +0 -0
  625. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  626. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_faithfulness.py +0 -0
  627. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_frontmatter.py +0 -0
  628. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_fuzz_targets.py +0 -0
  629. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  630. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_gitleaks_config.py +0 -0
  631. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_gitutil.py +0 -0
  632. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_gitutil_lfs.py +0 -0
  633. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_gitutil_sparse.py +0 -0
  634. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_imperative.py +0 -0
  635. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_import_budget.py +0 -0
  636. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_injectscan.py +0 -0
  637. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_install_permission_error.py +0 -0
  638. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_installscan.py +0 -0
  639. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_integrity.py +0 -0
  640. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_journal.py +0 -0
  641. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_langchain_packaging.py +0 -0
  642. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_link_ownership.py +0 -0
  643. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_localembed.py +0 -0
  644. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_localembed_e2e.py +0 -0
  645. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_lockfile.py +0 -0
  646. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_logs.py +0 -0
  647. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_marketing_counts.py +0 -0
  648. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_mcp.py +0 -0
  649. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_mcp_install_scan.py +0 -0
  650. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_mcpdecl.py +0 -0
  651. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_mcphost.py +0 -0
  652. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_measure_registry.py +0 -0
  653. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_minisign.py +0 -0
  654. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_mutation_hardening.py +0 -0
  655. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_mutation_shards.py +0 -0
  656. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_mutation_subfile_shards.py +0 -0
  657. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_mutmut_source_paths.py +0 -0
  658. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_nethttp.py +0 -0
  659. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_output.py +0 -0
  660. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_page_budget.py +0 -0
  661. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_paths.py +0 -0
  662. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_perf_gate.py +0 -0
  663. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_pkg_confusions.py +0 -0
  664. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_pkg_injection.py +0 -0
  665. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_pkg_secrets.py +0 -0
  666. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_platform_pins.py +0 -0
  667. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_policy.py +0 -0
  668. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_post_deploy_smoke.py +0 -0
  669. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_project_mcp_sidecar.py +0 -0
  670. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_projectlock.py +0 -0
  671. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_provenance.py +0 -0
  672. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_publish_golden_dataset.py +0 -0
  673. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_rag.py +0 -0
  674. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_rag_fusion.py +0 -0
  675. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_registries_fresh.py +0 -0
  676. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_registry.py +0 -0
  677. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_registry_categories.py +0 -0
  678. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_registry_control_chars.py +0 -0
  679. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_release_guard.py +0 -0
  680. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_release_preflight.py +0 -0
  681. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_required_checks.py +0 -0
  682. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_resolve.py +0 -0
  683. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_roadmap_fresh.py +0 -0
  684. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_rules.py +0 -0
  685. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_scale_corpus.py +0 -0
  686. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_scopes.py +0 -0
  687. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_secretscan.py +0 -0
  688. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_selfupdate.py +0 -0
  689. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_serve.py +0 -0
  690. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_serve_docs.py +0 -0
  691. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_shards_matrix.py +0 -0
  692. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_smoke_covers_every_command.py +0 -0
  693. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_spin.py +0 -0
  694. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_stackprobe.py +0 -0
  695. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_staleness.py +0 -0
  696. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_store.py +0 -0
  697. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_store_materialize.py +0 -0
  698. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_sync_blocked_links.py +0 -0
  699. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  700. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_token_parity.py +0 -0
  701. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_toolchain_lock.py +0 -0
  702. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_trustaudit.py +0 -0
  703. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_typosquat.py +0 -0
  704. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_updatediff.py +0 -0
  705. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_util.py +0 -0
  706. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_version.py +0 -0
  707. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_workflow_concurrency.py +0 -0
  708. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  709. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  710. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_workflow_timeouts.py +0 -0
  711. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_workflows.py +0 -0
  712. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  713. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/visual/a11y_check.mjs +0 -0
  714. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/visual/console_check.mjs +0 -0
  715. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/visual/package-lock.json +0 -0
  716. {boost_skill_cli-1.1.0 → boost_skill_cli-1.1.2}/tests/visual/package.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.1.0
3
+ Version: 1.1.2
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.1.0'
22
- __version_tuple__ = version_tuple = (1, 1, 0)
21
+ __version__ = version = '1.1.2'
22
+ __version_tuple__ = version_tuple = (1, 1, 2)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -3,6 +3,7 @@ completions, schedule, serve, mcp, self-update."""
3
3
  from __future__ import annotations
4
4
 
5
5
  import argparse
6
+ import difflib
6
7
  import json
7
8
  import os
8
9
  import re
@@ -659,8 +660,42 @@ def _sq(s: str) -> str:
659
660
  return s.replace("'", "'\\''")
660
661
 
661
662
 
663
+ def _report_rc_plan(plan, install: bool, shell: str) -> None:
664
+ """Print what `--dry-run` would do to an rc file, and nothing else."""
665
+ if not plan.changes:
666
+ out.ok("%s already %s — no change"
667
+ % (_tilde(plan.path),
668
+ "wired for boost completions" if install
669
+ else "free of boost completions"))
670
+ return
671
+ verb = {
672
+ "create": "would create %s and wire boost completions into it",
673
+ "add": "would wire boost completions into %s",
674
+ # `replace` also covers collapsing a duplicated block back to one.
675
+ "replace": "would rewrite the boost completions block in %s",
676
+ "remove": "would remove boost completions from %s",
677
+ }[plan.action]
678
+ out.info(verb % _tilde(plan.path))
679
+ for line in _rc_plan_diff(plan):
680
+ out.dim(" " + line)
681
+ out.dim(" re-run without --dry-run to apply")
682
+
683
+
684
+ def _rc_plan_diff(plan) -> list[str]:
685
+ """The +/- lines between a plan's before and after, for the dry run.
686
+
687
+ The ``---``/``+++``/``@@`` scaffolding is dropped: the file is named on the
688
+ line above, and line numbers earn nothing on a five-line rc edit.
689
+ """
690
+ return [ln.rstrip("\n")
691
+ for ln in difflib.unified_diff(plan.before.splitlines(),
692
+ plan.after.splitlines(), n=1)
693
+ if not ln.startswith(("---", "+++", "@@"))]
694
+
695
+
662
696
  def cmd_completions(argv) -> int:
663
- """boost completions [bash|zsh|fish] [--install|--uninstall] [--eval]"""
697
+ """boost completions [bash|zsh|fish] [--install|--uninstall] [--eval]
698
+ [--dry-run]"""
664
699
  p = cliparse.parser(
665
700
  prog="boost completions",
666
701
  description="Generate shell tab-completion scripts")
@@ -669,6 +704,9 @@ def cmd_completions(argv) -> int:
669
704
  p.add_argument("--eval", action="store_true",
670
705
  help="print the variant safe to `eval` directly "
671
706
  "(what --install wires up)")
707
+ p.add_argument("--dry-run", action="store_true",
708
+ help="with --install/--uninstall: report what would change "
709
+ "in the rc file without writing it")
672
710
  group = p.add_mutually_exclusive_group()
673
711
  group.add_argument("--install", action="store_true",
674
712
  help="wire completions into the shell's rc file "
@@ -679,11 +717,28 @@ def cmd_completions(argv) -> int:
679
717
 
680
718
  detected = args.shell or Path(os.environ.get("SHELL", "")).name
681
719
 
720
+ if args.dry_run and not (args.install or args.uninstall):
721
+ p.error("--dry-run qualifies --install or --uninstall; "
722
+ "pass one of them")
723
+
682
724
  if args.install or args.uninstall:
683
- rc = (complete.install if args.install else complete.uninstall)(detected)
725
+ # Plan first either way, so a malformed rc file is reported before
726
+ # anything is written rather than after.
727
+ plan = (complete.plan_install if args.install
728
+ else complete.plan_uninstall)(detected)
729
+ if args.dry_run:
730
+ _report_rc_plan(plan, install=args.install, shell=detected)
731
+ return 0
732
+ complete.apply(plan)
733
+ if not plan.changes:
734
+ out.ok("%s already %s — no change"
735
+ % (_tilde(plan.path),
736
+ "wired for boost completions" if args.install
737
+ else "free of boost completions"))
738
+ return 0
684
739
  out.ok("%s boost completions %s %s"
685
740
  % ("wired" if args.install else "removed",
686
- "into" if args.install else "from", _tilde(rc)))
741
+ "into" if args.install else "from", _tilde(plan.path)))
687
742
  if args.install:
688
743
  out.dim(" restart your shell (or run `exec %s`) to pick it up"
689
744
  % detected)
@@ -29,6 +29,7 @@ from __future__ import annotations
29
29
  import os
30
30
  import re
31
31
  from collections.abc import Callable, Sequence
32
+ from dataclasses import dataclass
32
33
  from pathlib import Path
33
34
 
34
35
  from ..errors import BoostError
@@ -257,31 +258,78 @@ def _rc_block(shell: str) -> str:
257
258
  % (_RC_START, shell, _RC_END))
258
259
 
259
260
 
260
- def _merge_rc(text: str, block: str) -> str:
261
+ def _spans(text: str, rc: Path | None = None) -> list[tuple[int, int]]:
262
+ """Half-open (start, end) index pairs of every managed block in ``text``.
263
+
264
+ Raises :class:`BoostError` for a start marker with no matching end, because
265
+ an rc file in that state cannot be edited safely by index. Both writers used
266
+ to pair the *first* start with the *next* end found anywhere after it, so an
267
+ orphan start marker sitting above real config made the next edit delete
268
+ every line in between — reported as ``✓ wired boost completions``. Refusing
269
+ costs the user one hand-edit; guessing cost them their shell config.
270
+
271
+ An orphan *end* is not an error: nothing pairs to it, it is skipped, and the
272
+ file keeps working. Only an unclosed block is ambiguous.
273
+ """
274
+ spans: list[tuple[int, int]] = []
275
+ i = 0
276
+ while (s := text.find(_RC_START, i)) != -1:
277
+ after = s + len(_RC_START)
278
+ e = text.find(_RC_END, after)
279
+ nxt = text.find(_RC_START, after)
280
+ # A block must close before the next one opens. Testing only `e == -1`
281
+ # is the original bug in a new place: an orphan start sitting above a
282
+ # real block finds *that* block's end and swallows every line between.
283
+ if e == -1 or (nxt != -1 and nxt < e):
284
+ where = " in %s" % paths.tilde(rc) if rc is not None else ""
285
+ raise BoostError(
286
+ "boost completions block%s starts but never ends" % where,
287
+ hint="%s has no matching %s — delete the stray start line (or "
288
+ "close the block), then re-run"
289
+ % (_RC_START, _RC_END))
290
+ e += len(_RC_END)
291
+ spans.append((s, e))
292
+ i = e
293
+ return spans
294
+
295
+
296
+ def _outside(text: str, spans: list[tuple[int, int]]) -> list[str]:
297
+ """The stretches of ``text`` that sit outside every managed block."""
298
+ parts, prev = [], 0
299
+ for s, e in spans:
300
+ parts.append(text[prev:s])
301
+ prev = e
302
+ parts.append(text[prev:])
303
+ return parts
304
+
305
+
306
+ def _merge_rc(text: str, block: str, rc: Path | None = None) -> str:
261
307
  """Idempotently set ``block`` in ``text``: replace a prior boost block in
262
308
  place, or append one after a single blank line. Mirrors
263
- :func:`core.rules.merge_block`'s shape with rc-file-safe markers."""
264
- i = text.find(_RC_START)
265
- if i != -1:
266
- j = text.find(_RC_END, i)
267
- if j != -1:
268
- j += len(_RC_END)
269
- return (text[:i] + block + text[j:]).rstrip("\n") + "\n"
270
- base = text.rstrip("\n")
271
- return (base + "\n\n" + block + "\n") if base else block + "\n"
272
-
273
-
274
- def _strip_rc(text: str) -> str:
275
- """Inverse of :func:`_merge_rc`: remove the managed block, if present."""
276
- i = text.find(_RC_START)
277
- if i == -1:
309
+ :func:`core.rules.merge_block`'s shape with rc-file-safe markers.
310
+
311
+ Collapses to exactly one block. Replacing only the first left a second one
312
+ live, so `--install` was idempotent in content but not in count.
313
+ """
314
+ spans = _spans(text, rc)
315
+ if not spans:
316
+ base = text.rstrip("\n")
317
+ return (base + "\n\n" + block + "\n") if base else block + "\n"
318
+ parts = _outside(text, spans)
319
+ return (parts[0] + block + "".join(parts[1:])).rstrip("\n") + "\n"
320
+
321
+
322
+ def _strip_rc(text: str, rc: Path | None = None) -> str:
323
+ """Inverse of :func:`_merge_rc`: remove every managed block, if present.
324
+
325
+ Every, not the first: `--uninstall` on a doubled block used to report
326
+ "removed" while the shell went on sourcing the survivor.
327
+ """
328
+ spans = _spans(text, rc)
329
+ if not spans:
278
330
  return text
279
- j = text.find(_RC_END, i)
280
- if j == -1:
281
- return text # no end marker: malformed, leave the file untouched
282
- j += len(_RC_END)
283
- before, after = text[:i].rstrip("\n"), text[j:].strip("\n")
284
- parts = [p for p in (before, after) if p]
331
+ parts = [p.strip("\n") for p in _outside(text, spans)]
332
+ parts = [p for p in parts if p]
285
333
  return "\n\n".join(parts) + "\n" if parts else ""
286
334
 
287
335
 
@@ -295,22 +343,76 @@ def _rc_path(shell: str) -> Path:
295
343
  return paths.expand("~/" + RC_FILE[shell])
296
344
 
297
345
 
346
+ @dataclass(frozen=True)
347
+ class RcPlan:
348
+ """What an install/uninstall would do to one rc file, before it does it.
349
+
350
+ ``--dry-run`` prints this; ``install``/``uninstall`` apply it. One code path
351
+ computes both, so the preview cannot disagree with the write.
352
+ """
353
+ path: Path
354
+ action: str # create | add | replace | remove | none
355
+ before: str
356
+ after: str
357
+
358
+ @property
359
+ def changes(self) -> bool:
360
+ """True when applying this would alter the file."""
361
+ return self.before != self.after
362
+
363
+
364
+ def _read_rc(shell: str) -> tuple[Path, str, bool]:
365
+ rc = _rc_path(shell)
366
+ exists = rc.exists()
367
+ return rc, (rc.read_text(encoding="utf-8") if exists else ""), exists
368
+
369
+
370
+ def plan_install(shell: str) -> RcPlan:
371
+ """Describe wiring ``shell``'s rc file, writing nothing.
372
+
373
+ Raises :class:`BoostError` for a shell with no rc-file install path, and for
374
+ an rc file holding an unclosed block — so a dry run answers the dangerous
375
+ question too, rather than only the safe one.
376
+ """
377
+ rc, text, exists = _read_rc(shell)
378
+ after = _merge_rc(text, _rc_block(shell), rc)
379
+ if not exists:
380
+ action = "create"
381
+ elif after == text:
382
+ action = "none"
383
+ elif _spans(text, rc):
384
+ action = "replace"
385
+ else:
386
+ action = "add"
387
+ return RcPlan(path=rc, action=action, before=text, after=after)
388
+
389
+
390
+ def plan_uninstall(shell: str) -> RcPlan:
391
+ """Describe removing what :func:`install` wired up, writing nothing."""
392
+ rc, text, _ = _read_rc(shell)
393
+ after = _strip_rc(text, rc)
394
+ return RcPlan(path=rc, action=("remove" if after != text else "none"),
395
+ before=text, after=after)
396
+
397
+
398
+ def apply(plan: RcPlan) -> Path:
399
+ """Write ``plan``'s result. A no-op when it changes nothing, so an rc file
400
+ keeps its mtime (and its place in the user's backups) on a repeat run."""
401
+ if plan.changes:
402
+ plan.path.write_text(plan.after, encoding="utf-8")
403
+ return plan.path
404
+
405
+
298
406
  def install(shell: str) -> Path:
299
407
  """Idempotently wire ``shell``'s rc file to eval boost's completions on
300
408
  every startup. Returns the rc file path. Raises :class:`BoostError` for
301
409
  a shell with no rc-file install path (currently anything but bash/zsh)."""
302
- rc = _rc_path(shell)
303
- text = rc.read_text(encoding="utf-8") if rc.exists() else ""
304
- rc.write_text(_merge_rc(text, _rc_block(shell)), encoding="utf-8")
305
- return rc
410
+ return apply(plan_install(shell))
306
411
 
307
412
 
308
413
  def uninstall(shell: str) -> Path:
309
414
  """Remove what :func:`install` wired up. A no-op if never installed."""
310
- rc = _rc_path(shell)
311
- if rc.exists():
312
- rc.write_text(_strip_rc(rc.read_text(encoding="utf-8")), encoding="utf-8")
313
- return rc
415
+ return apply(plan_uninstall(shell))
314
416
 
315
417
 
316
418
  def detect_shell() -> str:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.1.0
3
+ Version: 1.1.2
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -213,6 +213,7 @@ docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md
213
213
  docs/roadmap/items/command-carousel-page.md
214
214
  docs/roadmap/items/command-reference-docs-site.md
215
215
  docs/roadmap/items/completions-complete-only-command-names.md
216
+ docs/roadmap/items/completions-install-could-eat-your-rc-file.md
216
217
  docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md
217
218
  docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md
218
219
  docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md
@@ -399,6 +400,7 @@ docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md
399
400
  docs/roadmap/items/structured-json-log-output-mode.md
400
401
  docs/roadmap/items/supply-chain-posture-openssf-scorecard.md
401
402
  docs/roadmap/items/surface-every-docs-page-from-the-guide.md
403
+ docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md
402
404
  docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md
403
405
  docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md
404
406
  docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md
@@ -588,6 +590,7 @@ tests/unit/test_command_reference_fresh.py
588
590
  tests/unit/test_community_health_files.py
589
591
  tests/unit/test_compact.py
590
592
  tests/unit/test_complete.py
593
+ tests/unit/test_complete_rc_block.py
591
594
  tests/unit/test_config.py
592
595
  tests/unit/test_content_dedupe.py
593
596
  tests/unit/test_crash_redaction.py
@@ -698,6 +701,7 @@ tests/unit/test_typosquat.py
698
701
  tests/unit/test_updatediff.py
699
702
  tests/unit/test_util.py
700
703
  tests/unit/test_version.py
704
+ tests/unit/test_visual_harness_flags.py
701
705
  tests/unit/test_workflow_concurrency.py
702
706
  tests/unit/test_workflow_concurrency_groups.py
703
707
  tests/unit/test_workflow_push_has_credentials.py
@@ -186,7 +186,7 @@
186
186
  <a class="cmd-link" href="#cmd-create" data-search="create scaffold a new skill from a template --description description --dir dir --install name">create</a>
187
187
  <a class="cmd-link" href="#cmd-policy" data-search="policy manage &amp; enforce skill governance policies --json {list,set,unset,check} key value">policy</a>
188
188
  <a class="cmd-link" href="#cmd-onboard" data-search="onboard add skill-tracker telemetry to a repo &amp; open a pr --repo repo --pr --dry-run -f, --force">onboard</a>
189
- <a class="cmd-link" href="#cmd-completions" data-search="completions generate shell tab-completion scripts --eval --install --uninstall {bash,zsh,fish}">completions</a>
189
+ <a class="cmd-link" href="#cmd-completions" data-search="completions generate shell tab-completion scripts --eval --dry-run --install --uninstall {bash,zsh,fish}">completions</a>
190
190
  <a class="cmd-link" href="#cmd-schedule" data-search="schedule manage automatic skill-sync scheduling --interval {6h,12h,daily} --json {status,enable,disable}">schedule</a>
191
191
  <a class="cmd-link" href="#cmd-serve" data-search="serve browse the catalogue in a browser: search, facets and a tap graph --port port --host host">serve</a>
192
192
  <a class="cmd-link" href="#cmd-mcp" data-search="mcp register boost as an mcp server (claude code, gemini cli) register boost as an mcp server for your agent clis --host h --stdio --seed --no-seed {register,unregister}">mcp</a>
@@ -1049,10 +1049,10 @@
1049
1049
  <div class="arg"><code>-f, --force</code><span>overwrite existing files without confirming</span></div>
1050
1050
  </div>
1051
1051
  </section>
1052
- <section class="cmd" id="cmd-completions" data-search="completions generate shell tab-completion scripts --eval --install --uninstall {bash,zsh,fish}">
1052
+ <section class="cmd" id="cmd-completions" data-search="completions generate shell tab-completion scripts --eval --dry-run --install --uninstall {bash,zsh,fish}">
1053
1053
  <h3><span class="cname">completions</span><span class="gtag">cfg</span></h3>
1054
1054
  <p class="summary">Generate shell tab-completion scripts</p>
1055
- <pre class="syn">boost completions [--eval] [--install] [--uninstall] [{bash,zsh,fish}]</pre>
1055
+ <pre class="syn">boost completions [--eval] [--dry-run] [--install] [--uninstall] [{bash,zsh,fish}]</pre>
1056
1056
  <div class="args-h">Arguments</div>
1057
1057
  <div class="args">
1058
1058
  <div class="arg"><code>{bash,zsh,fish}</code><span>target shell (default: from $SHELL)</span></div>
@@ -1060,6 +1060,7 @@
1060
1060
  <div class="args-h">Options</div>
1061
1061
  <div class="args">
1062
1062
  <div class="arg"><code>--eval</code><span>print the variant safe to `eval` directly (what --install wires up)</span></div>
1063
+ <div class="arg"><code>--dry-run</code><span>with --install/--uninstall: report what would change in the rc file without writing it</span></div>
1063
1064
  <div class="arg"><code>--install</code><span>wire completions into the shell&#x27;s rc file (bash/zsh — one-shot, no manual editing)</span></div>
1064
1065
  <div class="arg"><code>--uninstall</code><span>remove what --install wired up</span></div>
1065
1066
  </div>
@@ -0,0 +1,82 @@
1
+ ---
2
+ id: completions-install-could-eat-your-rc-file
3
+ board: code
4
+ section: dx
5
+ status: inflight
6
+ category: Bug
7
+ complexity: S
8
+ impact: High
9
+ wow: 4
10
+ note: two runs of a "no-op" command deleted the lines between two markers
11
+ order: 113
12
+ owner: fix/completions-malformed-block
13
+ pr:
14
+ title: <code>completions --install</code> could delete the config between its own markers
15
+ ---
16
+ Found by asking a plain question — <em>is <code>boost completions</code>
17
+ idempotent?</em> — and testing the answer rather than reading the docstring. For
18
+ every ordinary input it is: seven paths reach a fixed point on the second run,
19
+ and the managed block is replaced in place rather than appended. Three states
20
+ were not ordinary, and each is reachable from one hand-edit of a shell rc file.
21
+
22
+ <b>A start marker with no end deleted user config.</b> <code>_merge_rc</code>
23
+ paired the first start marker with the next end marker found <em>anywhere</em>
24
+ after it. With an orphan start above real config, run one appended a second
25
+ block, and run two matched the orphan start against that new block's end and
26
+ removed everything in between — the user's own lines — while printing
27
+ <code>✓ wired boost completions into ~/.zshrc</code>. It converged, to a file
28
+ with the user's aliases gone.
29
+
30
+ <b>The inverse function already refused this exact input</b>, ten lines below:
31
+ <code>_strip_rc</code> carried the comment <em>"no end marker: malformed, leave
32
+ the file untouched."</em> So the state was recognised and only the writer failed
33
+ to handle it. That asymmetry is the whole bug, and it is why this was worth
34
+ fixing rather than filing: the reasoning was already in the file.
35
+
36
+ <b>Uninstall had the same hole from the mirror precondition.</b>
37
+ <code>_strip_rc</code> was safe only while the orphan start was the sole marker.
38
+ Put a well-formed block below it and uninstall paired the orphan with that
39
+ block's end: an rc file of <code>export A=1</code> plus four user lines came
40
+ back as <code>export A=1</code> alone.
41
+
42
+ <b>Two blocks made uninstall lie.</b> It removed the first and left the second,
43
+ so boost reported <em>removed</em> while the shell went on sourcing
44
+ completions — the same shape as the <code>sync</code> defect in
45
+ <code>#515</code>, a command reporting success for work it declined to do.
46
+
47
+ <b>The fix is one scan with the right invariant:</b> a block must close before
48
+ the next one opens. Testing only for a missing end marker is the original bug in
49
+ a new place, which the first draft of this fix reproduced and a test caught.
50
+ Install now collapses to exactly one block, uninstall removes every block, and
51
+ both refuse an unclosed one by name instead of guessing. An orphan
52
+ <em>end</em> marker stays harmless and is pinned as such, so a later
53
+ "tighten the parser" change cannot start rejecting a file that works.
54
+
55
+ <b><code>--dry-run</code> makes it answerable before it is written.</b>
56
+ <code>boost completions --install --dry-run</code> prints the exact +/- lines
57
+ and touches nothing, and it raises on the malformed file too — a validation that
58
+ only reports the safe cases is not a validation. Plan and apply are one code
59
+ path (<code>plan_install</code> → <code>apply</code>), so the preview cannot
60
+ disagree with the write, and a test pins that equality. Applying a no-op change
61
+ now also leaves the file's mtime alone rather than rewriting identical bytes.
62
+
63
+ <b>Verified exhaustively, not just by example.</b> A property test enumerates
64
+ every arrangement of up to four fragments — user line, stray start, stray end,
65
+ real block — and asserts three invariants over all 672 orderings: a user line
66
+ boost does not own is never lost, a successful uninstall never leaves a block,
67
+ and a refusal never modifies the file. Against the pre-fix code the same test
68
+ reports <b>220 violations</b> (198 of the second, 22 of the first); against the
69
+ fix, zero. It runs in 0.38s.
70
+
71
+ That sweep also corrected its own first draft. Its initial invariant counted
72
+ every user line, and flagged 16 "failures" that were the managed block behaving
73
+ exactly as conda, nvm and rbenv do — content between the markers is boost's to
74
+ replace. The real invariant is about lines boost does <em>not</em> own, and the
75
+ reference parser has to resolve the orphan-start ambiguity the way the fix does
76
+ rather than the way the bug did, or it under-reports the data loss it exists to
77
+ catch.
78
+
79
+ An rc file is the user's own hand-written config and the worst file boost owns
80
+ an edit to, which is what moves this from tidy-up to High impact. The old tests
81
+ covered only the well-formed path — a double install leaving one marker — so
82
+ none of the three states had a failing test to find them.
@@ -0,0 +1,64 @@
1
+ ---
2
+ id: sweep-died-at-launch-not-at-a-page
3
+ board: code
4
+ section: pipeline
5
+ status: inflight
6
+ category: CI · Bug
7
+ complexity: S
8
+ impact: High
9
+ wow: 4
10
+ note: a comment in the sibling file predicted this exact failure
11
+ order: 114
12
+ owner: fix/visual-sweep-single-process
13
+ pr:
14
+ title: The <code>sweep</code> gate died at browser launch, not at a page
15
+ ---
16
+ Every <code>sweep</code> run failed from 2026-08-15 onward — on <code>main</code>
17
+ and on every branch — and the failure was not a visual regression at all. Chrome
18
+ died during the CDP startup handshake, before a single page loaded:
19
+
20
+ <code>TargetCloseError: Protocol error (Target.setAutoAttach): Target closed</code>
21
+ out of <code>ChromeLauncher.launch</code>.
22
+
23
+ <b>The trigger was the environment, and the evidence is an A/B on identical
24
+ trees.</b> <code>#515</code>'s own PR run passed on 2026-08-13 at 17:22; the
25
+ byte-identical squash-merge failed on 2026-08-15 at 22:10. Same content, opposite
26
+ result, two days apart — the <code>ubuntu-latest</code> runner image bumped
27
+ Chrome underneath it. Nothing in the repo changed;
28
+ <code>visual_check.mjs</code> had carried the same flags since <code>#209</code>.
29
+
30
+ <b>The sibling file predicted it, in a comment, by name.</b>
31
+ <code>a11y_check.mjs</code> was fixed earlier to scope <code>--single-process</code>
32
+ to the <code>chrome-headless-shell</code> binary, and its comment recorded why the
33
+ other half of the directory was still exposed: <em>"visual_check.mjs already
34
+ passes the flag … <code>--single-process</code> is a debug-only flag there whose
35
+ interaction with new headless nothing in this repo exercises."</em> That is
36
+ exactly the interaction that broke.
37
+
38
+ <b>Two candidate causes, both addressed, because the CI path cannot be
39
+ reproduced locally.</b> <code>--single-process</code> is debug-only and
40
+ unsupported against full Chrome; and <code>headless: "shell"</code> asks for the
41
+ old headless mode, which Chrome removed from the main binary and now ships only
42
+ as the separate <code>chrome-headless-shell</code> executable. Both are now
43
+ conditioned on the same predicate the a11y harness uses, so against
44
+ <code>/usr/bin/google-chrome</code> the sweep launches in new headless with
45
+ neither flag — the shape <code>a11y_check.mjs</code> has been driving on this
46
+ runner all along. Keyed on the <em>binary</em> rather than on
47
+ <code>process.platform</code>: a macOS run pointed at full Chrome must not
48
+ inherit a flag meant for the shell.
49
+
50
+ <b>What was verified, and what was not.</b> The harness runs end to end and
51
+ passes <b>10 pages × 5 widths clean</b> against a downloaded
52
+ <code>chrome-headless-shell</code> 152 — which also proves the docs pages
53
+ themselves were never the problem. The flag selection was evaluated directly for
54
+ four binary paths. The <em>CI</em> path is not locally reproducible and this card
55
+ says so rather than implying otherwise: full Chrome cannot start under this macOS
56
+ sandbox at all, aborting with <code>The browser is already running for
57
+ &lt;fresh profile dir&gt;</code> from ProcessSingleton — a different error from
58
+ CI's, so it is interference, not a reproduction. CI is the verifier.
59
+
60
+ <b>The ratchet.</b> <code>tests/unit/test_visual_harness_flags.py</code> fails
61
+ the build if either harness hands a sandbox-only flag to a full Chrome, and if
62
+ the two stop agreeing on the predicate. The bug here was not the flag — it was
63
+ that one file was fixed and the other was not, and the only thing recording that
64
+ was a comment. A comment cannot fail a build.