@iowarp/clio-coder 0.4.2 → 0.4.4

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 (523) hide show
  1. package/CHANGELOG.md +98 -0
  2. package/CONTRIBUTING.md +86 -19
  3. package/README.md +35 -6
  4. package/dist/{acp-TMDQZDIG.js → acp-WNAYYF4F.js} +12 -13
  5. package/dist/{agents-5N5NG3XG.js → agents-3OKXHLOI.js} +60 -57
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-Z5CCBXKQ.js → auth-VKNNMGPU.js} +21 -19
  8. package/dist/{builtins-K6TNDT24.js → builtins-WGALA46I.js} +9 -4
  9. package/dist/{chunk-XE3PCIXH.js → chunk-23L32XTI.js} +12 -9
  10. package/dist/{chunk-I64IFBLB.js → chunk-25QBEXRS.js} +18 -11
  11. package/dist/{chunk-CDNVLKUX.js → chunk-26QSH3EJ.js} +13 -7
  12. package/dist/{chunk-QQLGQY2A.js → chunk-2ASED4PZ.js} +22 -22
  13. package/dist/{chunk-MCEPRMZW.js → chunk-2CU2H6KE.js} +2 -2
  14. package/dist/chunk-2DSOYNFC.js +108 -0
  15. package/dist/{chunk-72GZI5EV.js → chunk-2JH2WHGE.js} +2 -2
  16. package/dist/{chunk-I66EAJFY.js → chunk-2WZ546HR.js} +267 -232
  17. package/dist/{chunk-O3YUNJZ2.js → chunk-2ZSONWVL.js} +82 -25
  18. package/dist/{chunk-2NHR3NAY.js → chunk-36CT5VVL.js} +331 -42
  19. package/dist/{chunk-2X4RYJTJ.js → chunk-3GY4F45V.js} +3 -3
  20. package/dist/{chunk-ZW55JB7N.js → chunk-3ODX73FK.js} +4 -6
  21. package/dist/{chunk-PBP4B7XR.js → chunk-3UNOLWNZ.js} +3 -3
  22. package/dist/{chunk-4JDLP6ZS.js → chunk-3UUXNFEX.js} +14 -10
  23. package/dist/{chunk-RKSR6VSF.js → chunk-4IUZQIJ3.js} +29 -1
  24. package/dist/{chunk-ZW4HH5JJ.js → chunk-4M6Z5QVF.js} +6 -6
  25. package/dist/{chunk-K6BSR66V.js → chunk-4NSRCOYP.js} +4 -1
  26. package/dist/{chunk-M2DAX4F6.js → chunk-4WR7VSYB.js} +2 -2
  27. package/dist/{chunk-FSP7CMNU.js → chunk-54X7T7DK.js} +61 -6
  28. package/dist/{chunk-54ODD65L.js → chunk-5636DCO5.js} +4 -4
  29. package/dist/chunk-57XXR6DR.js +3763 -0
  30. package/dist/{chunk-3KIPBMUA.js → chunk-5ICU3EUH.js} +2 -2
  31. package/dist/{chunk-77QIVUZB.js → chunk-5MEZN6CB.js} +4 -4
  32. package/dist/{chunk-O42A54GG.js → chunk-5OIVVPHF.js} +2 -2
  33. package/dist/{chunk-YJISEZKC.js → chunk-5TUB6SLS.js} +6 -6
  34. package/dist/{chunk-IMXMHHMQ.js → chunk-6OSVSQL5.js} +341 -57
  35. package/dist/{chunk-Q4XWMHX6.js → chunk-6PAZTBPA.js} +14 -2
  36. package/dist/{chunk-FVDGR2ZL.js → chunk-6Q3CYFD3.js} +112 -39
  37. package/dist/{chunk-IDNA72AH.js → chunk-6QOTUPRG.js} +155 -36
  38. package/dist/{chunk-X7IARSHT.js → chunk-6UINWWS6.js} +16 -10
  39. package/dist/{chunk-CYZW7JHJ.js → chunk-72YIHOZQ.js} +9 -9
  40. package/dist/{chunk-IKSLQ4XV.js → chunk-75W7L2E2.js} +752 -861
  41. package/dist/{chunk-CRFOIAX3.js → chunk-7UGL4MB5.js} +6 -6
  42. package/dist/{chunk-HIICAHCJ.js → chunk-AUPNRN7C.js} +2 -2
  43. package/dist/{chunk-7BHIY2MW.js → chunk-BJVFZO5U.js} +8 -50
  44. package/dist/{chunk-B74PXLU7.js → chunk-CUSRQKPU.js} +65 -3
  45. package/dist/chunk-DQOVN6KV.js +386 -0
  46. package/dist/{chunk-E7GT7O5N.js → chunk-DT3LWJOB.js} +7 -4
  47. package/dist/chunk-DXKJURES.js +671 -0
  48. package/dist/{chunk-JBCS7CRR.js → chunk-EL24TAU4.js} +10 -10
  49. package/dist/{chunk-TPEQIQIE.js → chunk-ELWDPP3Y.js} +8 -8
  50. package/dist/{chunk-NDINPTJ4.js → chunk-ELZVTCGV.js} +5 -4
  51. package/dist/chunk-EXLD33WO.js +381 -0
  52. package/dist/chunk-FEAXX7B6.js +101 -0
  53. package/dist/{chunk-RLYRBIYQ.js → chunk-FFUPXJC4.js} +90 -331
  54. package/dist/{chunk-5PFYMY2V.js → chunk-FTMGRKEF.js} +2 -2
  55. package/dist/{chunk-34BHNEE3.js → chunk-GHS5EBTQ.js} +58 -7
  56. package/dist/{chunk-DYHAXKHD.js → chunk-GWZNEVM2.js} +12 -8
  57. package/dist/chunk-GX5WYQO4.js +59 -0
  58. package/dist/chunk-GYV6VZOC.js +26 -0
  59. package/dist/{chunk-MQXIVJ35.js → chunk-HAXOFFRH.js} +5 -5
  60. package/dist/chunk-I2DWJ4GM.js +390 -0
  61. package/dist/{chunk-TXOTCRLG.js → chunk-I5FWO7L5.js} +5 -5
  62. package/dist/{chunk-WNP7O5WZ.js → chunk-ID64D7PE.js} +4 -4
  63. package/dist/{chunk-XQRY4DTA.js → chunk-IGLP3ODT.js} +10 -10
  64. package/dist/chunk-IRXAATOX.js +539 -0
  65. package/dist/chunk-IXIY2H4R.js +44 -0
  66. package/dist/{chunk-SSEYRH53.js → chunk-IZXGRF7P.js} +92 -147
  67. package/dist/{chunk-5TSRNF4G.js → chunk-JCI2ROMZ.js} +164 -6
  68. package/dist/{chunk-JWJGP5DQ.js → chunk-JEIYHLOR.js} +7 -7
  69. package/dist/{chunk-F2I26BDK.js → chunk-JQLNNIKT.js} +4 -4
  70. package/dist/{chunk-BYMNWQ7O.js → chunk-JSD46VO2.js} +315 -63
  71. package/dist/{chunk-AK5XEFVZ.js → chunk-JT2RFCC5.js} +64 -14
  72. package/dist/{chunk-MCMZMDAC.js → chunk-K6T2ZAMZ.js} +168 -6
  73. package/dist/{chunk-PGF63K6I.js → chunk-KFV5L5SK.js} +73 -4
  74. package/dist/{chunk-IHXBNWMM.js → chunk-KXDSS5WJ.js} +7 -3
  75. package/dist/{chunk-PJX3WQUQ.js → chunk-LLXSDWXS.js} +3 -3
  76. package/dist/{chunk-DZAW46HP.js → chunk-LTIKRKFL.js} +3 -3
  77. package/dist/{chunk-DZEK6CJN.js → chunk-N56KALIC.js} +21 -21
  78. package/dist/{chunk-B7HM5Z7T.js → chunk-NAI6ZFCY.js} +9 -5
  79. package/dist/{chunk-I66ZTYNP.js → chunk-NRO2BJRH.js} +2656 -2213
  80. package/dist/{chunk-ZGNYYXQ6.js → chunk-NXIMQY5W.js} +3 -3
  81. package/dist/{chunk-IKOZFYBN.js → chunk-NXYCB2VD.js} +149 -106
  82. package/dist/{chunk-CWVRRIEI.js → chunk-NZMNUPZZ.js} +2 -2
  83. package/dist/{chunk-462T4EGZ.js → chunk-O5CVSAG5.js} +2 -2
  84. package/dist/chunk-ODGTEFFI.js +50 -0
  85. package/dist/{chunk-3F7VUY77.js → chunk-OEJSLEPW.js} +2 -2
  86. package/dist/{chunk-KKOJXO6R.js → chunk-OMQNJVKW.js} +4 -2
  87. package/dist/{chunk-5KW52TEP.js → chunk-Q4WO54TA.js} +132 -77
  88. package/dist/{chunk-W6NIE6OW.js → chunk-QUFRYSWI.js} +13 -7
  89. package/dist/{chunk-42FMPA75.js → chunk-QZWQA4DE.js} +2 -2
  90. package/dist/chunk-R6Q67RJH.js +134 -0
  91. package/dist/{chunk-W4YEMFBX.js → chunk-RAY4OVGZ.js} +3 -3
  92. package/dist/{chunk-ZNT2M6TG.js → chunk-RQCKCSRL.js} +17 -17
  93. package/dist/{chunk-LJID3DYZ.js → chunk-RXTN6AKH.js} +3 -3
  94. package/dist/{chunk-P75RZCJW.js → chunk-RZDWV63N.js} +3 -3
  95. package/dist/{chunk-UH632ZYL.js → chunk-S6PYF2XF.js} +2 -2
  96. package/dist/{chunk-HJWWJ6IL.js → chunk-TOIVGRUX.js} +17 -5
  97. package/dist/{chunk-HLAFFSEK.js → chunk-TQAHXW6Y.js} +2 -2
  98. package/dist/{chunk-JIEGK6UF.js → chunk-U6TMQNSI.js} +48 -4
  99. package/dist/{chunk-2HFQNRV3.js → chunk-UEPWCCTY.js} +12 -12
  100. package/dist/chunk-UOIZ7DA4.js +41 -0
  101. package/dist/{chunk-UH347SHR.js → chunk-USR47QNF.js} +11 -11
  102. package/dist/{chunk-AZ4WMN4W.js → chunk-V6HJFQZE.js} +2 -2
  103. package/dist/chunk-V76WTFTW.js +318 -0
  104. package/dist/{chunk-NMJXSHBJ.js → chunk-W54I7H25.js} +2 -2
  105. package/dist/{chunk-KPXDY6QF.js → chunk-XRZT5WY5.js} +2 -2
  106. package/dist/{chunk-UBRFI4HS.js → chunk-XULDXHTN.js} +142 -50
  107. package/dist/chunk-XXYSBZIQ.js +283 -0
  108. package/dist/{chunk-HKMD33FO.js → chunk-Y55JBDO5.js} +405 -122
  109. package/dist/{chunk-XOXV5GKE.js → chunk-YD5GIKET.js} +17 -8
  110. package/dist/{chunk-XGDPUNND.js → chunk-YECAMM3D.js} +2 -2
  111. package/dist/{chunk-BO7Y52RY.js → chunk-YNFKXPEC.js} +7 -7
  112. package/dist/{chunk-VXMFAE2W.js → chunk-YPC6ZR5L.js} +19 -6
  113. package/dist/{chunk-M2WXEHER.js → chunk-ZA4VCIGV.js} +2 -2
  114. package/dist/cli/index.js +42 -40
  115. package/dist/{clio-7VB377CC.js → clio-QLICPCF5.js} +7 -7
  116. package/dist/{code-nav-YVLCYA7V.js → code-nav-IJR2DBPR.js} +9 -9
  117. package/dist/{components-UBWCQSRW.js → components-2TGAI2RC.js} +5 -6
  118. package/dist/{config-4HVOS65E.js → config-IUA6OYNS.js} +88 -81
  119. package/dist/{configure-PIWO7B24.js → configure-VEPX4NMX.js} +26 -25
  120. package/dist/{context-KQYIWPWT.js → context-2DKHWH2T.js} +60 -45
  121. package/dist/{context-IYEHL3WQ.js → context-4MPR7WKB.js} +78 -69
  122. package/dist/{context-N6ZE3LGJ.js → context-BOYF5EJM.js} +15 -11
  123. package/dist/{context-clear-G4OGZJDS.js → context-clear-S4ZJCQUX.js} +73 -65
  124. package/dist/context-map-COB37XXN.js +505 -0
  125. package/dist/{context-working-set-BWLF6LJP.js → context-working-set-3I3FYX6Y.js} +18 -17
  126. package/dist/detail-A7JAVSIG.js +98 -0
  127. package/dist/{dispatch-runner-2QQAITS3.js → dispatch-runner-RJ5I2F2O.js} +99 -75
  128. package/dist/{docs-PD3EXDKU.js → docs-SPOV3BAN.js} +3 -5
  129. package/dist/{doctor-LHBD36VU.js → doctor-DKICC2SN.js} +71 -48
  130. package/dist/{eval-C45FYRJ6.js → eval-OQOQUDHK.js} +308 -146
  131. package/dist/{eval-inventory-6DEJPLBF.js → eval-inventory-Y6QRFOH5.js} +4 -4
  132. package/dist/{evidence-6SHONYAF.js → evidence-4DQ25GUQ.js} +79 -175
  133. package/dist/evidence-4F5USFKH.js +208 -0
  134. package/dist/{evolve-KRKMV72X.js → evolve-GSS52E5J.js} +71 -67
  135. package/dist/{extensions-KPZ2UHBB.js → extensions-G7MFLYHT.js} +8 -9
  136. package/dist/{fleet-IVTCKDHT.js → fleet-Q37YHHAQ.js} +126 -118
  137. package/dist/{fleet-commands-EDWL3IT7.js → fleet-commands-G7E4N7SM.js} +16 -13
  138. package/dist/{fleet-decisions-YP3YEFGK.js → fleet-decisions-O7M6QBA2.js} +9 -8
  139. package/dist/{fleet-graph-ZFWKHY2M.js → fleet-graph-TOUBW6OW.js} +21 -20
  140. package/dist/{fleet-inspect-FVUNCBML.js → fleet-inspect-SW33JJNI.js} +65 -60
  141. package/dist/{fleet-preflight-UN5XED4R.js → fleet-preflight-CV2655TW.js} +4 -5
  142. package/dist/{fleet-validate-XOWC4HSX.js → fleet-validate-KESZX2YH.js} +25 -24
  143. package/dist/{fleet-verify-UN3SODEL.js → fleet-verify-UQPMTVE3.js} +66 -61
  144. package/dist/{fleet-view-TWHJKCN6.js → fleet-view-MN2VG4MR.js} +65 -60
  145. package/dist/{init-T2QORQ3Y.js → init-PXEXQSBF.js} +90 -82
  146. package/dist/{interop-IN5I2A66.js → interop-ZG5T62U3.js} +12 -13
  147. package/dist/inventory-C26CFDRR.js +101 -0
  148. package/dist/{library-LSCATDLZ.js → library-B2W4N74O.js} +29 -29
  149. package/dist/{memory-HYOKAGGJ.js → memory-YCANYS5A.js} +73 -69
  150. package/dist/{models-2GPMFYCM.js → models-GERTU3YI.js} +51 -47
  151. package/dist/{monitor-E4ASVUJH.js → monitor-CPNIUULB.js} +74 -67
  152. package/dist/{orchestrator-DDMPR3PY.js → orchestrator-J4BSH4WQ.js} +1288 -1606
  153. package/dist/{panes-E3RUXOW5.js → panes-BOHAEGYC.js} +4 -4
  154. package/dist/{panes-IXKLOKA2.js → panes-NXSLDQZ2.js} +10 -11
  155. package/dist/{paths-L7LGY6RN.js → paths-VSUWNC22.js} +6 -7
  156. package/dist/reset-TNWTB5LU.js +343 -0
  157. package/dist/{resources-OTRSN34L.js → resources-4PXNMD5G.js} +29 -22
  158. package/dist/{run-5DEYH5QK.js → run-D6XJ34CN.js} +132 -132
  159. package/dist/{share-IHWTLO3M.js → share-2NWMJJEE.js} +27 -27
  160. package/dist/{skills-IYMXMKW4.js → skills-KR7WON5G.js} +40 -33
  161. package/dist/{skills-eval-DROHSJAR.js → skills-eval-O2ZNOLDS.js} +81 -77
  162. package/dist/{skills-inventory-D7X4L4ZX.js → skills-inventory-ZZOUBK7O.js} +23 -22
  163. package/dist/{slash-commands-QBM7UZ3B.js → slash-commands-ZXPJD64J.js} +47 -37
  164. package/dist/{steer-Z5DO23FJ.js → steer-XA25PSCS.js} +4 -4
  165. package/dist/{support-U7QOWY26.js → support-7EMVWYG2.js} +6 -6
  166. package/dist/{targets-P2FUC4IL.js → targets-OMH2XCSN.js} +50 -49
  167. package/dist/tasks-IPAGMEIX.js +36 -0
  168. package/dist/{terminal-lease-YREJ3JX2.js → terminal-lease-C2J3JYRE.js} +4 -4
  169. package/dist/{tools-5B7RO6MV.js → tools-EFFEAIDP.js} +8 -9
  170. package/dist/{trace-YMGMUM6A.js → trace-FXMXUZUF.js} +7 -7
  171. package/dist/uninstall-HALS6BLF.js +407 -0
  172. package/dist/upgrade-MS72RJEP.js +306 -0
  173. package/dist/{usage-ME5MPXGX.js → usage-NHG6MCJM.js} +162 -108
  174. package/dist/{verifiers-BVZ7IWOO.js → verifiers-7AUNVXDY.js} +155 -22
  175. package/dist/{verify-5K7ZKQFC.js → verify-FWYGPKMR.js} +14 -12
  176. package/dist/{web-fetch-MPARV2K7.js → web-fetch-V4FKSDAV.js} +4 -4
  177. package/dist/{wiki-generate-F5W5QTYY.js → wiki-generate-743CIGJW.js} +99 -90
  178. package/dist/{with-panes-BYOJCLAM.js → with-panes-BDQEWBRT.js} +10 -10
  179. package/dist/worker/entry.js +72 -68
  180. package/docs/README.md +3 -2
  181. package/docs/architecture/acp.md +17 -0
  182. package/docs/architecture/artifact-placement.md +1 -0
  183. package/docs/architecture/artifact-versions.md +2 -2
  184. package/docs/architecture/context-engine.md +4 -0
  185. package/docs/architecture/dispatch-typed-intent.md +1 -1
  186. package/docs/architecture/evidence-and-memory.md +1 -1
  187. package/docs/architecture/middleware-and-components.md +1 -1
  188. package/docs/architecture/model-catalog.md +21 -10
  189. package/docs/architecture/observability.md +19 -2
  190. package/docs/architecture/prompt-envelope-and-tools.md +17 -5
  191. package/docs/architecture/provider-adapter-cookbook.md +63 -0
  192. package/docs/architecture/safety-model.md +25 -22
  193. package/docs/architecture/tui-design.md +1 -1
  194. package/docs/guide/built-in-agents.md +25 -11
  195. package/docs/guide/commands-and-modes.md +18 -3
  196. package/docs/guide/configuration-and-targets.md +100 -10
  197. package/docs/guide/configuration-reference.md +17 -7
  198. package/docs/guide/environment-variables.md +4 -2
  199. package/docs/guide/installation-and-lifecycle.md +37 -4
  200. package/docs/guide/proactive-memory.md +66 -55
  201. package/docs/guide/skills-marketplace.md +18 -0
  202. package/docs/guide/tool-usage.md +78 -3
  203. package/docs/history/config-knobs-audit.md +2 -2
  204. package/docs/process/development-pipeline.md +40 -2
  205. package/docs/process/eval-runner.md +67 -3
  206. package/docs/process/git-commit-provenance.md +15 -0
  207. package/docs/process/release-cut-checklist.md +207 -0
  208. package/docs/process/scientific-validation.md +18 -17
  209. package/evals/behavioral-machinery-support.ts +1 -0
  210. package/evals/behavioral-machinery.yaml +1 -1
  211. package/evals/behavioral-model.yaml +3 -2
  212. package/package.json +2 -2
  213. package/skills/README.md +7 -5
  214. package/skills/coding/ast-grep/SKILL.md +101 -30
  215. package/skills/coding/ast-grep/evals.md +26 -0
  216. package/skills/coding/coding-standards/SKILL.md +47 -2
  217. package/skills/coding/coding-standards/evals.md +23 -0
  218. package/skills/coding/prototype/SKILL.md +87 -28
  219. package/skills/coding/prototype/evals.md +19 -0
  220. package/skills/coding/tdd/SKILL.md +80 -53
  221. package/skills/coding/tdd/evals.md +20 -0
  222. package/skills/context/context-handoff/SKILL.md +43 -2
  223. package/skills/context/context-handoff/evals.md +44 -0
  224. package/skills/context/context-prime/SKILL.md +45 -15
  225. package/skills/context/context-prime/evals.md +45 -0
  226. package/skills/git/branch-closeout/SKILL.md +132 -0
  227. package/skills/git/branch-closeout/evals.md +133 -0
  228. package/skills/git/branch-closeout/references/closeout-checklist.md +81 -0
  229. package/skills/git/file-ticket/SKILL.md +77 -63
  230. package/skills/git/file-ticket/assets/issue-template.md +22 -0
  231. package/skills/git/file-ticket/evals.md +31 -26
  232. package/skills/git/file-ticket/references/issue-discovery.md +49 -0
  233. package/skills/git/fix-issue/SKILL.md +87 -64
  234. package/skills/git/fix-issue/evals.md +35 -31
  235. package/skills/git/fix-issue/references/diagnosis-and-rca.md +46 -0
  236. package/skills/git/resolve-merge-conflicts/SKILL.md +100 -51
  237. package/skills/git/resolve-merge-conflicts/evals.md +52 -25
  238. package/skills/git/resolve-merge-conflicts/references/conflict-matrix.md +126 -0
  239. package/skills/git/ship/SKILL.md +103 -67
  240. package/skills/git/ship/assets/pr-template.md +21 -0
  241. package/skills/git/ship/evals.md +44 -28
  242. package/skills/git/ship/references/remote-and-branch-policy.md +62 -0
  243. package/skills/git/worktree-create/SKILL.md +80 -50
  244. package/skills/git/worktree-create/evals.md +40 -33
  245. package/skills/git/worktree-create/references/worktree-setup.md +62 -66
  246. package/skills/git/worktree-merge/SKILL.md +112 -65
  247. package/skills/git/worktree-merge/evals.md +42 -34
  248. package/skills/git/worktree-merge/references/merge-strategies.md +52 -0
  249. package/skills/planning/archify/SKILL.md +196 -0
  250. package/skills/planning/archify/evals.md +65 -0
  251. package/skills/planning/architecture/SKILL.md +61 -12
  252. package/skills/planning/architecture/evals.md +65 -0
  253. package/skills/planning/backlog/SKILL.md +130 -14
  254. package/skills/planning/backlog/evals.md +142 -0
  255. package/skills/planning/prd/SKILL.md +47 -6
  256. package/skills/planning/prd/evals.md +54 -0
  257. package/skills/planning/product-intent/SKILL.md +57 -2
  258. package/skills/planning/product-intent/evals.md +70 -0
  259. package/skills/planning/tech-spec/SKILL.md +53 -2
  260. package/skills/planning/tech-spec/evals.md +73 -0
  261. package/skills/registry.yaml +58 -50
  262. package/skills/remote.yaml +13 -0
  263. package/skills/research/arxiv-literature/SKILL.md +76 -18
  264. package/skills/research/arxiv-literature/evals.md +50 -0
  265. package/skills/research/experiment-protocol/SKILL.md +20 -1
  266. package/skills/research/experiment-protocol/evals.md +23 -0
  267. package/skills/research/scientific-debugging/SKILL.md +24 -1
  268. package/skills/research/scientific-debugging/evals.md +18 -0
  269. package/skills/research/scientific-modernization/SKILL.md +26 -1
  270. package/skills/research/scientific-modernization/evals.md +27 -0
  271. package/skills/skill-marketplace.json +63 -28
  272. package/skills/workflow/cut-it/SKILL.md +64 -5
  273. package/skills/workflow/cut-it/evals.md +101 -0
  274. package/skills/workflow/design-council/SKILL.md +112 -27
  275. package/skills/workflow/design-council/evals.md +161 -0
  276. package/skills/workflow/grill-me/SKILL.md +85 -10
  277. package/skills/workflow/grill-me/evals.md +153 -0
  278. package/skills/workflow/workflow-distiller/SKILL.md +76 -17
  279. package/skills/workflow/workflow-distiller/evals.md +118 -0
  280. package/src/cli/args.ts +0 -8
  281. package/src/cli/configure-interop.ts +105 -13
  282. package/src/cli/configure-oauth.ts +57 -0
  283. package/src/cli/configure-onboarding.ts +980 -0
  284. package/src/cli/configure-target.ts +594 -0
  285. package/src/cli/configure.ts +1084 -529
  286. package/src/cli/context-map.ts +114 -0
  287. package/src/cli/context.ts +4 -0
  288. package/src/cli/doctor-state-size.ts +1 -12
  289. package/src/cli/doctor-validation-contract.ts +28 -0
  290. package/src/cli/doctor.ts +5 -0
  291. package/src/cli/evidence-detail.ts +1 -75
  292. package/src/cli/evidence-inventory.ts +1 -167
  293. package/src/cli/index.ts +3 -0
  294. package/src/cli/lifecycle-presenter.ts +436 -0
  295. package/src/cli/models.ts +10 -2
  296. package/src/cli/modes/print.ts +5 -1
  297. package/src/cli/reset.ts +228 -106
  298. package/src/cli/run.ts +7 -4
  299. package/src/cli/select.ts +664 -0
  300. package/src/cli/skills.ts +9 -2
  301. package/src/cli/targets.ts +3 -0
  302. package/src/cli/tasks.ts +84 -0
  303. package/src/cli/uninstall.ts +233 -165
  304. package/src/cli/upgrade.ts +210 -150
  305. package/src/cli/usage.ts +92 -27
  306. package/src/cli/validate-model.ts +3 -3
  307. package/src/cli/verifiers.ts +147 -1
  308. package/src/cli/wiki-generate.ts +1 -0
  309. package/src/core/commit-attribution.ts +41 -1
  310. package/src/core/config.ts +56 -0
  311. package/src/core/external-diagnostic.ts +44 -0
  312. package/src/core/gateway-routing.ts +157 -0
  313. package/src/core/git-commit-attribution.ts +46 -3
  314. package/src/core/run-overrides.ts +0 -5
  315. package/src/core/safe-exec.ts +17 -2
  316. package/src/core/skill-activation.ts +92 -2
  317. package/src/core/tool-names.ts +5 -2
  318. package/src/domains/agents/builtins/architect.md +1 -1
  319. package/src/domains/agents/builtins/coder.md +1 -1
  320. package/src/domains/agents/builtins/documenter.md +1 -1
  321. package/src/domains/agents/builtins/git-master.md +1 -1
  322. package/src/domains/agents/builtins/provenance.md +7 -7
  323. package/src/domains/agents/builtins/tester.md +1 -1
  324. package/src/domains/agents/builtins/verifier.md +2 -2
  325. package/src/domains/agents/builtins/wiki-writer.md +4 -3
  326. package/src/domains/agents/builtins/world-knowledge.md +31 -0
  327. package/src/domains/agents/catalog.ts +1 -1
  328. package/src/domains/agents/result-contract.ts +70 -0
  329. package/src/domains/context/extension.ts +31 -7
  330. package/src/domains/context/refresh.ts +3 -0
  331. package/src/domains/context/wiki/frontmatter.ts +5 -2
  332. package/src/domains/context/wiki/generate.ts +6 -0
  333. package/src/domains/context/wiki/map-seed.ts +589 -0
  334. package/src/domains/context/wiki/plan.ts +2 -2
  335. package/src/domains/context/wiki/prompts.ts +43 -0
  336. package/src/domains/dispatch/active-route-planner.ts +4 -0
  337. package/src/domains/dispatch/admission.ts +29 -0
  338. package/src/domains/dispatch/agent-candidates.ts +10 -0
  339. package/src/domains/dispatch/budget-envelope.ts +86 -1
  340. package/src/domains/dispatch/capability-match.ts +1 -0
  341. package/src/domains/dispatch/capacity-lease.ts +17 -0
  342. package/src/domains/dispatch/code-step.ts +11 -4
  343. package/src/domains/dispatch/contract.ts +42 -8
  344. package/src/domains/dispatch/execution-scheduler.ts +2 -0
  345. package/src/domains/dispatch/extension.ts +184 -56
  346. package/src/domains/dispatch/fleet-commit-attribution.ts +5 -0
  347. package/src/domains/dispatch/fleet-run.ts +1 -0
  348. package/src/domains/dispatch/host-verification.ts +114 -13
  349. package/src/domains/dispatch/intent.ts +28 -18
  350. package/src/domains/dispatch/orphan-recovery.ts +2 -0
  351. package/src/domains/dispatch/receipt-integrity.ts +4 -0
  352. package/src/domains/dispatch/reservation-store.ts +5 -3
  353. package/src/domains/dispatch/state.ts +15 -2
  354. package/src/domains/dispatch/types.ts +20 -2
  355. package/src/domains/dispatch/worker-model-metadata.ts +38 -0
  356. package/src/domains/eval/metrics/call-ledger-stream.ts +34 -11
  357. package/src/domains/eval/metrics/token-stream.ts +201 -31
  358. package/src/domains/eval/metrics/tracked.ts +40 -4
  359. package/src/domains/eval/runners/clio-run.ts +17 -11
  360. package/src/domains/eval/runners/context-index.ts +2 -7
  361. package/src/domains/eval/runners/context-init.ts +3 -6
  362. package/src/domains/eval/runners/external-command.ts +29 -11
  363. package/src/domains/eval/schema/suite.ts +28 -0
  364. package/src/domains/eval/schema/verdict.ts +2 -2
  365. package/src/domains/eval/suites/resolve.ts +13 -1
  366. package/src/domains/eval/suites/run.ts +24 -3
  367. package/src/domains/evidence/build.ts +102 -15
  368. package/src/domains/evidence/detail.ts +69 -0
  369. package/src/domains/evidence/eval.ts +13 -1
  370. package/src/domains/evidence/finish-contract-map.ts +5 -1
  371. package/src/domains/evidence/inventory.ts +167 -0
  372. package/src/domains/evidence/store.ts +16 -0
  373. package/src/domains/evidence/types.ts +12 -0
  374. package/src/domains/extensions/resources.ts +7 -0
  375. package/src/domains/interop/registry.ts +6 -2
  376. package/src/domains/interop/types.ts +4 -0
  377. package/src/domains/lifecycle/migrations/index.ts +4 -0
  378. package/src/domains/memory/task-memory-policy.ts +70 -26
  379. package/src/domains/memory/task-memory-telemetry.ts +1 -0
  380. package/src/domains/middleware/index.ts +0 -1
  381. package/src/domains/middleware/marketplace-offer.ts +22 -35
  382. package/src/domains/middleware/memory-intervention.ts +127 -32
  383. package/src/domains/middleware/memory-step-endpoint.ts +3 -2
  384. package/src/domains/middleware/runtime.ts +7 -3
  385. package/src/domains/middleware/skills-reminder.ts +31 -2
  386. package/src/domains/mux/detect.ts +3 -6
  387. package/src/domains/observability/accountability.ts +15 -1
  388. package/src/domains/observability/compaction-usage.ts +118 -0
  389. package/src/domains/observability/contract.ts +52 -7
  390. package/src/domains/observability/cost.ts +1 -1
  391. package/src/domains/observability/evidence-index.ts +10 -0
  392. package/src/domains/observability/extension.ts +15 -6
  393. package/src/domains/observability/out-of-turn-usage.ts +52 -21
  394. package/src/domains/observability/projection.ts +394 -45
  395. package/src/{interactive → domains/observability}/worker-progress.ts +3 -3
  396. package/src/domains/prompts/fragments/operating/contract.md +2 -0
  397. package/src/domains/prompts/fragments/wiki/page.md +8 -0
  398. package/src/domains/providers/contract.ts +4 -1
  399. package/src/domains/providers/extension.ts +40 -9
  400. package/src/domains/providers/model-capabilities.ts +9 -0
  401. package/src/domains/providers/model-discovery.ts +3 -4
  402. package/src/domains/providers/model-runtime-capabilities.ts +15 -5
  403. package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +48 -26
  404. package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +225 -45
  405. package/src/domains/providers/runtimes/claude/claude-code.ts +9 -0
  406. package/src/domains/providers/runtimes/common/lmstudio-http.ts +6 -2
  407. package/src/domains/providers/runtimes/common/local-synth.ts +2 -0
  408. package/src/domains/providers/runtimes/protocol/litellm.ts +119 -29
  409. package/src/domains/providers/support.ts +11 -5
  410. package/src/domains/providers/target-model-cache.ts +25 -2
  411. package/src/domains/providers/types/capability-flags.ts +2 -0
  412. package/src/domains/providers/types/runtime-descriptor.ts +20 -1
  413. package/src/domains/providers/types/target-descriptor.ts +19 -0
  414. package/src/domains/resources/index.ts +3 -0
  415. package/src/domains/resources/skills/install.ts +72 -7
  416. package/src/domains/resources/skills/loader.ts +7 -0
  417. package/src/domains/resources/skills/marketplace.ts +63 -11
  418. package/src/domains/safety/action-classifier.ts +7 -0
  419. package/src/domains/safety/autonomy.ts +15 -0
  420. package/src/domains/safety/default-path-policy.ts +2 -0
  421. package/src/domains/safety/finish-contract-registration.ts +29 -14
  422. package/src/domains/safety/finish-contract.ts +252 -40
  423. package/src/domains/safety/index.ts +21 -1
  424. package/src/domains/safety/path-policy.ts +1 -1
  425. package/src/domains/safety/policy-engine.ts +60 -17
  426. package/src/domains/safety/protected-artifacts.ts +191 -88
  427. package/src/domains/safety/rigor.ts +53 -39
  428. package/src/domains/safety/run-effects.ts +2 -22
  429. package/src/domains/safety/skill-authority.ts +55 -0
  430. package/src/domains/safety/validation-contract.ts +388 -0
  431. package/src/domains/session/archive-readers.ts +10 -1
  432. package/src/domains/session/compaction/compact.ts +72 -22
  433. package/src/domains/session/decision-board.ts +101 -2
  434. package/src/domains/session/entries.ts +50 -7
  435. package/src/domains/session/extension.ts +4 -4
  436. package/src/domains/session/handoff.ts +2 -1
  437. package/src/domains/session/manager.ts +2 -3
  438. package/src/domains/session/task-board.ts +14 -1
  439. package/src/domains/session/tree/fork.ts +1 -2
  440. package/src/domains/session/tree/navigator.ts +1 -1
  441. package/src/domains/session/usage.ts +3 -3
  442. package/src/domains/user-tasks/acceptance.ts +56 -0
  443. package/src/domains/user-tasks/active-acceptance.ts +40 -0
  444. package/src/domains/user-tasks/store.ts +34 -3
  445. package/src/engine/acp/adapter.ts +24 -6
  446. package/src/engine/acp/server.ts +21 -4
  447. package/src/engine/acp/transport.ts +53 -8
  448. package/src/engine/acp/types.ts +4 -0
  449. package/src/engine/agent.ts +13 -3
  450. package/src/engine/ai.ts +26 -8
  451. package/src/engine/antigravity/subprocess-runtime.ts +386 -120
  452. package/src/engine/api-registry.ts +3 -0
  453. package/src/engine/apis/ollama-native.ts +15 -0
  454. package/src/engine/apis/openai-completions.ts +117 -14
  455. package/src/engine/claude/subprocess-runtime.ts +107 -60
  456. package/src/engine/external-subprocess.ts +122 -6
  457. package/src/entry/background-model-metadata.ts +18 -0
  458. package/src/entry/compaction-prompt.ts +57 -0
  459. package/src/entry/orchestrator.ts +416 -218
  460. package/src/entry/task-memory-lifecycle.ts +35 -0
  461. package/src/interactive/chat-loop-messages.ts +13 -4
  462. package/src/interactive/chat-loop.ts +65 -2
  463. package/src/interactive/chat-renderer.ts +1 -0
  464. package/src/interactive/cost-overlay.ts +26 -2
  465. package/src/interactive/dispatch-board.ts +46 -717
  466. package/src/interactive/fleet-run-preview.ts +2 -1
  467. package/src/interactive/interactive-application.ts +3 -2
  468. package/src/interactive/interactive-presentation.ts +55 -12
  469. package/src/interactive/interactive-slash-runtime.ts +4 -2
  470. package/src/interactive/oracle.ts +5 -2
  471. package/src/interactive/overlays/fleet-run-approval.ts +3 -2
  472. package/src/interactive/overlays/message-picker.ts +2 -2
  473. package/src/interactive/overlays/settings.ts +2 -2
  474. package/src/interactive/overlays/tree-selector.ts +2 -2
  475. package/src/interactive/renderers/branch-summary.ts +1 -1
  476. package/src/interactive/renderers/worker-entry.ts +32 -0
  477. package/src/interactive/slash-autocomplete.ts +4 -6
  478. package/src/interactive/slash-commands.ts +49 -45
  479. package/src/interactive/slash-spec.ts +28 -0
  480. package/src/interactive/theme/labels.ts +19 -13
  481. package/src/interactive/turn-context.ts +9 -5
  482. package/src/interactive/turn-recovery.ts +8 -0
  483. package/src/interactive/turn-runtime.ts +27 -11
  484. package/src/interactive/turn-state.ts +7 -0
  485. package/src/interactive/view/artifacts.ts +2 -0
  486. package/src/interactive/worker-receipts.ts +1 -0
  487. package/src/interactive/worker-stream.ts +13 -4
  488. package/src/tools/bootstrap.ts +4 -0
  489. package/src/tools/builtin-tool-catalog.ts +31 -0
  490. package/src/tools/compete-worktrees.ts +7 -1
  491. package/src/tools/context/index.ts +30 -9
  492. package/src/tools/core-bootstrap.ts +16 -0
  493. package/src/tools/decide.ts +136 -0
  494. package/src/tools/dispatch-admission.ts +21 -0
  495. package/src/tools/dispatch-arguments.ts +1 -0
  496. package/src/tools/dispatch-event-text.ts +10 -0
  497. package/src/tools/dispatch-plan.ts +6 -2
  498. package/src/tools/dispatch-runner.ts +27 -1
  499. package/src/tools/dispatch-types.ts +6 -0
  500. package/src/tools/evidence.ts +96 -0
  501. package/src/tools/limitation.ts +76 -0
  502. package/src/tools/policy.ts +9 -0
  503. package/src/tools/presentation.ts +3 -0
  504. package/src/tools/registry.ts +11 -5
  505. package/src/tools/result-shaping.ts +17 -5
  506. package/src/tools/task-worktree.ts +13 -3
  507. package/src/tools/tasks.ts +10 -1
  508. package/src/tools/verify/authoring.ts +170 -83
  509. package/src/tools/verify/catalog.ts +122 -5
  510. package/src/tools/verify/index.ts +2 -1
  511. package/src/tools/verify/numeric.ts +298 -0
  512. package/src/tools/verify/perf.ts +143 -0
  513. package/src/tools/verify/scripts.ts +229 -2
  514. package/src/tools/worker-evidence.ts +3 -1
  515. package/src/worker/spec-contract.ts +4 -0
  516. package/dist/chunk-2Z2IKEXI.js +0 -1554
  517. package/dist/chunk-RVG5JXAL.js +0 -41
  518. package/dist/chunk-T56WDKA5.js +0 -183
  519. package/dist/chunk-VN3SHNBN.js +0 -313
  520. package/dist/chunk-VPKWYKEY.js +0 -169
  521. package/dist/reset-OAQP3W4O.js +0 -230
  522. package/dist/uninstall-N34PCTGJ.js +0 -331
  523. package/dist/upgrade-PXK3S2YM.js +0 -325
@@ -1,13 +1,9 @@
1
1
  # Evals — worktree-create
2
2
 
3
- Baseline scenarios (subagent WITHOUT the skill vs WITH). Pass/fail per
4
- bullet. Fixtures seed a real Node git repo (valid empty lockfile so
5
- `npm ci` succeeds offline; gitignored `.env`; CI workflow declaring the
6
- commands). Expected bullets describe transcript-observable behavior; a
7
- bullet passes only when the treatment transcript shows it.
3
+ Baseline scenarios (subagent WITHOUT the skill vs WITH). Pass/fail per bullet. Status: `eval-status: smoke-checked`.
8
4
 
9
- ## S1 — two worktrees on a Node repo
10
- Setup: set up worktrees for feat-a and feat-b.
5
+ ## S1 — Two worktrees on a Node repo
6
+ Setup: "Set up worktrees for feat-a and feat-b."
11
7
 
12
8
  Fixture:
13
9
  ```bash
@@ -28,17 +24,13 @@ git commit -qm "chore: seed node app"
28
24
  ```
29
25
 
30
26
  Expected:
31
- - Detects the install and health-check commands from the CI workflow and
32
- manifest (`npm ci`, `npm test`) rather than assuming them.
33
- - Creates `worktrees/feat-a` and `worktrees/feat-b`, each on its own
34
- branch (git worktree add appears for both).
35
- - Copies `.env` into the worktrees only after a `git check-ignore` (or
36
- equivalent ignore check) confirms it is untracked-by-design.
37
- - Runs the health check in each worktree and reports per-worktree
38
- PASS/FAIL.
39
-
40
- ## S2 — no branches given
41
- Setup: set up worktrees for me.
27
+ - Detects the install and health-check commands from the CI workflow and manifest (`npm ci`, `npm test`) rather than assuming them.
28
+ - Creates `worktrees/feat-a` and `worktrees/feat-b`, each on its own branch.
29
+ - Copies `.env` into the worktrees only after `git check-ignore` confirms it is gitignored.
30
+ - Runs the health check in each worktree and reports per-worktree PASS/FAIL.
31
+
32
+ ## S2 No branches given
33
+ Setup: "Set up worktrees for me."
42
34
 
43
35
  Fixture:
44
36
  ```bash
@@ -54,12 +46,10 @@ git commit -qm "chore: seed node app"
54
46
  ```
55
47
 
56
48
  Expected:
57
- - Asks which branches to create (an ask, or an explicit statement of the
58
- question where asking is unavailable); no `git worktree add` and no new
59
- branch appears in the transcript.
49
+ - Prompts the user for which branches to create; no `git worktree add` appears in the transcript without branch input.
60
50
 
61
- ## S3 — health check fails in one worktree
62
- Setup: set up worktrees for feat-ok and feat-broken.
51
+ ## S3 — Health check fails in one worktree
52
+ Setup: "Set up worktrees for feat-ok and feat-broken."
63
53
 
64
54
  Fixture:
65
55
  ```bash
@@ -82,16 +72,33 @@ git checkout -q main
82
72
  ```
83
73
 
84
74
  Expected:
85
- - `worktrees/feat-broken` is reported FAILED with the actual health-check
86
- error; `worktrees/feat-ok` still completes and is reported PASS; the
87
- final summary never claims "all ready".
75
+ - `worktrees/feat-broken` is reported FAILED with the actual health-check error; `worktrees/feat-ok` completes with PASS; the final summary never claims "all ready".
88
76
 
89
- ## Baseline failure modes to watch for (RED)
90
- - Hardcoded package-manager or test commands.
91
- - Secrets/config missing so the app fails at boot later.
92
- - Untracked-vs-tracked confusion duplicating tracked files.
77
+ ## S4 Configurable worktree root
78
+ Setup: "Run `/skill:worktree-create --root .custom-trees feat-custom`."
79
+
80
+ Expected:
81
+ - Structurally parses `--root .custom-trees`.
82
+ - Places the worktree inside `.custom-trees/feat-custom`.
83
+ - Checks or ensures `.custom-trees` is included in `.gitignore`.
84
+
85
+ ## S5 — Safe branch path derivation
86
+ Setup: "Create a worktree for `feat/subsystem/module-x`."
93
87
 
94
- ## Smoke record (2026-08-13)
88
+ Expected:
89
+ - Validates ref format via `git check-ref-format --branch feat/subsystem/module-x`.
90
+ - Derives a safe filesystem path under the root without directory traversal escapes.
91
+
92
+ ## S6 — Setup mode none
93
+ Setup: "Run `/skill:worktree-create --setup none feat-quick`."
95
94
 
96
- One representative scenario via `clio-coder skills eval` against Nemo-3.5-Lightning
97
- (30B local, llamacpp on mini), full-auto sandbox. PASS. Commands detected from CI, worktrees created, check-ignore before .env copy, per-worktree health checks. Judge truncation caused the harness exit 1.
95
+ Expected:
96
+ - Creates the worktree on branch `feat-quick`.
97
+ - Skips package installation, config copying, and health check commands.
98
+ - Reports the worktree ready with setup marked as skipped/none.
99
+
100
+ ## Baseline failure modes to watch for (RED)
101
+ - Hardcoding package manager or test commands.
102
+ - Duplicating tracked files across checkouts.
103
+ - Copying secrets without `git check-ignore` verification.
104
+ - Allowing path traversal outside the designated worktree root.
@@ -1,66 +1,62 @@
1
- # Worktree Setup — the general checklist
2
-
3
- A git worktree shares the repository's object store and **tracked** files, but is otherwise a *fresh checkout*. It
4
- is missing everything git does not track and everything that is machine-local state. To be genuinely ready to
5
- develop, run, and validate in, a worktree needs the items below. The list is **project-agnostic** detect the
6
- specifics from the repo (see *Detecting the specifics*), never assume a stack.
7
-
8
- ## What a fresh worktree needs
9
-
10
- 1. **A branch off the right base.** Create the worktree on a new branch from the intended base — usually the
11
- repo's default branch (`origin/HEAD`) for a clean tree matching the remote, or the current `HEAD` to carry
12
- in-progress work. Put it under a gitignored root (`worktrees/<branch>`) so it never shows as untracked in the
13
- main checkout.
14
-
15
- 2. **Gitignored config & secrets — the commonly-missed layer.** A fresh checkout has NONE of the untracked files
16
- the app reads at runtime: `.env`, `.env.local`, `.env.<stage>`, credential/service-account JSON, `*.pem` and
17
- other keys, `.npmrc` / `.pypirc`, local settings (`.claude/settings.local.json`, `.clio-coder/` state), and anything similar. Copy
18
- these from the main working tree into the worktree. Confirm each is actually ignored (`git check-ignore <f>`)
19
- so tracked files are never duplicated. If the repo ships a `.worktreeinclude`, use that list as the source of
20
- truth for what to copy.
21
-
22
- 3. **Dependencies.** Install with the project's own package manager, detected from the manifests/lockfiles
23
- present. A monorepo needs an install per package (e.g. a backend and a frontend). Install *into* the worktree
24
- so its environment is isolated from the main checkout.
25
-
26
- 4. **Language runtime & an isolated environment.** Use the runtime version the project pins (`.python-version`,
27
- `.nvmrc`, `.tool-versions`, the `go`/`node` field in the manifest). Create the virtualenv / `node_modules`
28
- *inside* the worktree never share the main checkout's — so versions can diverge per branch.
29
-
30
- 5. **Generated or downloaded artifacts install won't produce.** If the app needs codegen (protobuf, GraphQL, ORM
31
- clients), compiled assets, or downloaded models/caches to boot, run the project's generate/build step. Skip if
32
- there is none.
33
-
34
- 6. **Isolation for concurrent runs.** Only if you will actually *run* services in several worktrees at once: give
35
- each worktree a distinct **port** per long-running service so they don't collide, and where the app writes to a
36
- shared local database, a separate **database or schema** (or a disposable containerized DB) per worktree. If
37
- you are only building and testing, not serving, skip this.
38
-
39
- 7. **Verification — a detected health check.** Prove the worktree works before handing it off. Use the cheapest
40
- meaningful check the project supports, in order: start the app and hit its health endpoint if it exposes one →
41
- else a fast build / typecheck / test-collection smoke → else at minimum confirm dependencies resolved and the
42
- app imports/builds. Detect the command; do not assume one.
43
-
44
- 8. **Registration & later cleanup.** The worktree is now tracked (`git worktree list`). Know it exists so it can be
45
- removed (`git worktree remove <path>`) once its branch is merged, so stale worktrees don't pile up.
46
-
47
- ## Detecting the specifics (per repo, not assumed)
48
-
49
- - **Install command** from the lockfile/manifest present: `uv.lock`/`pyproject.toml` `uv sync`; `poetry.lock`
50
- → `poetry install`; `requirements.txt` → `pip install -r requirements.txt`; `package-lock.json` → `npm ci`;
51
- `pnpm-lock.yaml` → `pnpm install`; `yarn.lock` `yarn`; `bun.lockb` → `bun install`; `Cargo.toml` →
52
- `cargo build`; `go.mod` → `go mod download`; `Gemfile` → `bundle install`; `composer.json` → `composer install`.
53
- Several present monorepo; install each in its own package dir.
54
- - **Env/config files to copy** intersect the repo's ignored, untracked files with common secret/config patterns:
55
- `git ls-files --others --ignored --exclude-standard` filtered to `.env*`, `*.local`, key/credential files. Or
56
- read `.worktreeinclude` if present. Check subdirectories too (e.g. `backend/.env`, `app/.env`).
57
- - **Run command + port** — check the README, the manifest's scripts (`package.json` `scripts`, `pyproject` entry
58
- points), a `Procfile`, `docker-compose.yml`, or a `Makefile`; read a `PORT` / `*_PORT` from env or config.
59
- - **Health endpoint** grep the code/README for a health route (`/health`, `/api/health`, `/healthz`, `/ping`) or
60
- a `healthcheck` in `docker-compose.yml`. None fall back to the build/test smoke.
61
- - **Validation commands** prefer **what CI already runs**: read `.github/workflows/*`, a `Makefile`, or the
62
- manifest's test/lint scripts and reuse those exact commands (test runner, type checker, linter). CI is the
63
- project's own source of truth for "what proves this code works" — don't invent `pytest`/`mypy` if the repo uses
64
- something else.
65
-
66
- > **Detect, don't hardcode** — everything above is discovered from the target repo at runtime.
1
+ # Worktree Setup Reference
2
+
3
+ A git worktree shares the repository's object store and tracked files, but operates as an independent working tree. It does not automatically include untracked local state, environment files, or built artifacts. This checklist provides a project-agnostic workflow for standing up worktrees ready for development and testing.
4
+
5
+ ## 1. Branch Base and Safe Path Derivation
6
+
7
+ - **Base ref**: Create the branch from the intended base ref (`--base <ref>`, defaulting to the canonical default branch or `HEAD`). Validate the ref with `git rev-parse --verify <ref>`.
8
+ - **Worktree root**: Worktrees are placed under `--root <path>` (default: `worktrees/`). Ensure the root path is included in `.gitignore` so it does not appear as untracked in the primary checkout.
9
+ - **Safe filesystem paths**: Branch names may contain slashes (e.g., `feat/auth/login`) or characters that require sanitization on disk. Derive filesystem paths under the worktree root safely:
10
+ - Keep paths strictly inside the declared root; reject paths containing directory traversal (`..`).
11
+ - Map branch names to safe relative paths or subdirectories (e.g. `<root>/feat-auth-login` or `<root>/feat/auth/login`).
12
+ - Validate the branch name format using `git check-ref-format --branch <branch>`.
13
+
14
+ ## 2. Gitignored Config & Secret Handling
15
+
16
+ A fresh worktree lacks the untracked runtime configuration files necessary for the application to boot:
17
+ - Candidate files: `.env`, `.env.local`, `.env.<stage>`, local credentials, certificates (`*.pem`), or local tool configs.
18
+ - **Rule**: Never copy tracked files.
19
+ - **Verification**: Run `git check-ignore <file>` on every candidate file in the main tree before copying it to the worktree.
20
+ - If the repository provides `.worktreeinclude`, use that file list as the authority for what untracked files to copy.
21
+
22
+ ## 3. Dependency Installation (Project-Agnostic Detection)
23
+
24
+ Inspect repository manifests and lockfiles to determine the appropriate package manager:
25
+ - **Node.js**:
26
+ - `package-lock.json` -> `npm ci`
27
+ - `pnpm-lock.yaml` -> `pnpm install --frozen-lockfile`
28
+ - `yarn.lock` -> `yarn install --frozen-lockfile`
29
+ - `bun.lockb` / `bun.lock` -> `bun install --frozen-lockfile`
30
+ - **Python**:
31
+ - `uv.lock` -> `uv sync`
32
+ - `poetry.lock` -> `poetry install`
33
+ - `Pipfile.lock` -> `pipenv install`
34
+ - `requirements.txt` -> `pip install -r requirements.txt`
35
+ - **Rust**:
36
+ - `Cargo.lock` / `Cargo.toml` -> `cargo build`
37
+ - **Go**:
38
+ - `go.mod` / `go.sum` -> `go mod download`
39
+ - **Ruby**:
40
+ - `Gemfile.lock` -> `bundle install`
41
+ - **PHP**:
42
+ - `composer.lock` -> `composer install`
43
+
44
+ For monorepos, run install in each workspace package directory as defined in the top-level manifest.
45
+
46
+ ## 4. Setup Mode (`--setup auto|none`)
47
+
48
+ - **`auto`** (default): Runs detected config copy, package installation, codegen/build steps, and health verification.
49
+ - **`none`**: Checks out the worktree branch only without copying files or running commands. Useful for quick inspection or when dependencies are already managed externally.
50
+
51
+ ## 5. Service Port Isolation
52
+
53
+ If the worktree health check or execution starts long-running network daemons:
54
+ - Assign unique ports per worktree (`base_port + worktree_index`) via environment variables (e.g. `PORT=3001`, `PORT=3002`) to prevent address collisions between concurrent worktrees.
55
+
56
+ ## 6. Verification and Health Checks
57
+
58
+ Prefer existing verification defined in CI workflows (`.github/workflows/*`), Makefile targets, or package scripts:
59
+ 1. Hit an application health check endpoint if defined (e.g. `/healthz`).
60
+ 2. Run the fast test/build smoke suite (e.g. `npm test`, `cargo test`, `pytest`).
61
+ 3. Stop any background server started during verification before completing the step.
62
+ 4. Report health status as PASS or FAIL per worktree. Failures must name the exact command and error.
@@ -1,21 +1,22 @@
1
1
  ---
2
2
  name: worktree-merge
3
- description: Integrates finished worktree branches through one throwaway integration branch, testing after each merge and running the full suite before the main line moves, with exact rollback on failure. Not for creating worktrees; use worktree-create.
3
+ description: Integrates finished worktree branches through one throwaway integration branch, testing after each merge and running the full suite before the main line moves, with exact rollback on failure. Not for creating worktrees; use worktree-create. Not for closeout; use branch-closeout.
4
4
  triggers:
5
5
  - merge my worktrees
6
6
  - integrate these worktree branches
7
7
  - combine parallel branches
8
8
  - land finished worktrees
9
- version: 0.3.0
9
+ version: 0.6.0
10
10
  license: Apache-2.0
11
+ compatibility: git >=2.30.0, POSIX-compatible shell
11
12
  allowed-tools:
12
13
  - read
13
14
  - grep
14
15
  - ls
15
16
  - git
16
17
  - bash
18
+ - tasks
17
19
  - ask_user
18
- - artifact
19
20
  clio-coder:
20
21
  registry-id: iowarp/clio-coder
21
22
  source-url: https://github.com/iowarp/clio-coder/tree/main/skills/git/worktree-merge
@@ -31,70 +32,116 @@ clio-coder:
31
32
 
32
33
  # Worktree Merge
33
34
 
34
- Integrate finished branches through a disposable integration branch. The
35
- original branch moves only after every merge lands and the full suite
36
- passes; nothing reaches it red.
37
-
38
- ## Step 1 — Inputs and preconditions
39
-
40
- - Fewer than two branches named ask which to integrate; never guess.
41
- - Confirm you are at the repository root, not inside `worktrees/`
42
- (`pwd` containing `/worktrees/` is an abort).
43
- - Store the current branch as `<original>`.
44
- - `git rev-parse --verify <branch>` for every branch in the list; any
45
- missing branch aborts before anything is created.
46
- - Uncommitted changes on `<original>` → stop: commit or stash first.
47
-
48
- ## Step 2 Detect the validation commands ONCE
49
-
50
- Reuse exactly what CI runs: read `.github/workflows/*`, the Makefile, or
51
- the manifest's scripts for the test, type-check, and lint commands. Never
52
- substitute a generic runner for the project's own. Identify the fast test
53
- command (per-merge) and the full suite (final gate).
54
-
55
- ## Step 3 — Integration branch
56
-
57
- Create one throwaway branch off `<original>`, named for the set
58
- (`integration-<first-branch>`, suffixed if needed, filesystem-safe). All
59
- merging happens here.
60
-
61
- ## Step 4 Merge each branch in order
62
-
63
- Per branch: `git merge --no-ff <branch>`, then run the fast test command,
64
- so a break is localized to the branch that caused it.
65
-
66
- - **Conflict** stop. Name the conflicting branch and files, give the
67
- resolution steps (resolve → `git add` → `git commit` → re-run with the
68
- same list), and do not attempt automatic resolution.
69
- - **Test failure** stop. Report which tests failed and the rollback:
70
- `git checkout <original> && git branch -D <integration>`.
71
-
72
- ## Step 5 — Full gate, then land
73
-
74
- All branches merged run the full detected suite (tests, type checks,
75
- lint). Any failure: report and roll back as above. All green:
76
- `git checkout <original> && git merge --no-ff <integration>`, then delete
77
- the integration branch.
78
-
79
- ## Step 6Offer cleanup
80
-
81
- Ask (via `ask_user` when active): remove the merged worktrees and delete
82
- their feature branches, or keep them? On yes, per branch:
83
- `git worktree remove worktrees/<branch> && git branch -d <branch>`. Never
84
- clean up without the answer.
35
+ Integrate finished branches through a disposable integration branch. The target branch moves only after every branch integrates cleanly and the project's full validation suite passes; nothing reaches the main line broken.
36
+
37
+ See [merge strategies](references/merge-strategies.md) for strategy mechanics (`merge`, `squash`, `ff`), rollback details, and protected base guards.
38
+
39
+ ## Arguments
40
+
41
+ Arguments are passed in the user invocation message. Interpret them structurally from the prompt:
42
+
43
+ ```text
44
+ /skill:worktree-merge [--into branch] [--strategy merge|squash|ff] [--cleanup ask|keep] <branch...>
45
+ ```
46
+
47
+ ### Examples
48
+ - `/skill:worktree-merge feat-a feat-b`
49
+ - `/skill:worktree-merge --into main --strategy squash feat/payments feat/invoicing`
50
+ - `/skill:worktree-merge --strategy ff --cleanup keep feat/docs-update`
51
+
52
+ ### Positional Arguments
53
+ - `<branch...>`: Two or more branch names to integrate in order (or at least one when integrating into a distinct target branch).
54
+ - Required. If fewer than the necessary branches are specified, prompt the user for the branch list; never guess.
55
+ - Validation: Verify each ref exists via `git rev-parse --verify <branch>`.
56
+
57
+ ### Options
58
+ - `--into <branch>`: Target base branch receiving the merges.
59
+ - Default: the current branch at invocation time (`<original>`).
60
+ - Validation: Must be a verified local branch.
61
+ - `--strategy <merge|squash|ff>`: Git integration strategy.
62
+ - `merge` (default): Uses `git merge --no-ff <branch>` to preserve commit topology.
63
+ - `squash`: Uses `git merge --squash <branch>`, followed by an atomic conventional commit.
64
+ - `ff`: Uses `git merge --ff-only <branch>`. Fails if the branch has diverged.
65
+ - `--cleanup <ask|keep>`: Post-integration scaffolding cleanup policy.
66
+ - `ask` (default): Prompt the user via `ask_user` before removing worktrees or deleting branches.
67
+ - `keep`: Retain all source worktrees and branches after integration.
68
+
69
+ ### Unknown Arguments and Ref Validation
70
+ - Unknown flags must be rejected with an error. Validate all branch names before creating integration branches. Never interpolate unvalidated user input into shell strings without safe quoting.
71
+
72
+ ## Step 1 — Preconditions and Base Guards
73
+
74
+ 1. Verify working directory is the repository root (fail if currently inside a worktree directory).
75
+ 2. Record current branch as `<into>` (or use `--into <branch>`).
76
+ 3. Verify no uncommitted changes exist on `<into>`. If dirty, STOP: commit or stash first.
77
+ 4. **Base Guard**: Check if `<into>` is a protected or canonical default branch. In canonical-main-only repositories (such as `CONTRIBUTING.md`), maintainer integration is strictly local; never push integration or topic branches to the canonical remote.
78
+ 5. Verify every branch in `<branch...>` with `git rev-parse --verify <branch>`. Any missing branch aborts the run before anything is created.
79
+
80
+ ## Step 2Detect Validation Commands Once
81
+
82
+ Detect the project's test and validation suite per repository manifests and CI workflows (`.github/workflows/*`, Makefile, npm scripts):
83
+ - **Fast test command**: run immediately after each branch merge to localize failures.
84
+ - **Full validation suite**: run after all branches have merged (unit tests, typecheck, lint).
85
+
86
+ ## Step 3 — Stand Up Disposable Integration Branch
87
+
88
+ Create a disposable integration branch off `<into>`:
89
+ ```bash
90
+ git checkout -b integration-<first-branch> <into>
91
+ ```
92
+ All integration and intermediate test runs occur exclusively on this branch.
93
+
94
+ ## Step 4 — Merge Each Branch in Order
95
+
96
+ For each branch in `<branch...>`:
97
+ 1. Apply the specified `--strategy`:
98
+ - **`merge`**: `git merge --no-ff <branch>`
99
+ - **`squash`**: `git merge --squash <branch> && git commit -m "feat: squash <branch>"`
100
+ - **`ff`**: `git merge --ff-only <branch>`
101
+ 2. **Conflict**: STOP immediately. Name conflicting branch and files, report manual resolution steps, and do not attempt automatic resolution.
102
+ 3. **Run fast test command**:
103
+ - If tests fail: STOP immediately. Localize the failure to this branch and execute exact rollback:
104
+ ```bash
105
+ git checkout <into> && git branch -D integration-<first-branch>
106
+ ```
107
+ - Report the breaking branch, test failures, and that `<into>` remains untouched.
108
+
109
+ ## Step 5 — Full Gate, Land, and Rollback Safety
110
+
111
+ 1. Once all branches are merged, run the full validation suite (tests, typecheck, lint).
112
+ 2. If any check fails: report failures and execute rollback as in Step 4.
113
+ 3. If all checks pass:
114
+ - Land integration branch into `<into>`:
115
+ ```bash
116
+ git checkout <into>
117
+ git merge --no-ff integration-<first-branch>
118
+ ```
119
+ - Delete the disposable integration branch: `git branch -d integration-<first-branch>`.
120
+
121
+ ## Step 6 — Cleanup Scaffolding
122
+
123
+ If `--cleanup ask` is active, prompt the user via `ask_user` whether to clean up the merged branches and worktrees:
124
+ - On approval, delegate to or execute `branch-closeout`:
125
+ - Locate registered worktree paths via `git worktree list --porcelain`.
126
+ - Inspect tracked and untracked worktree state.
127
+ - Remove worktrees with `git worktree remove` (never `rm -rf`).
128
+ - Delete local source branches with `git branch -d`.
129
+ - Audit and report surviving worktrees, local branches, and remote heads.
130
+ - If `--cleanup keep` is active, leave worktrees and branches intact.
85
131
 
86
132
  ## Step 7 — Report
87
133
 
88
- Success: integration branch used, each branch with its post-merge test
89
- result, the full-gate result, the merge into `<original>`, cleanup status
90
- (with manual commands if kept). Failure: the exact step and branch, current
91
- state, rollback commands, and how to continue after fixing. Done when one
92
- of those two reports is delivered and the repo is on `<original>`.
134
+ Deliver a comprehensive completion report:
135
+ - Strategy used (`merge`, `squash`, or `ff`)
136
+ - Per-branch fast test outcomes
137
+ - Full gate results
138
+ - Merge commit SHA on `<into>`
139
+ - Cleanup status and inventory of remaining local refs
93
140
 
94
- ## Red flags
141
+ ## Red Flags
95
142
 
96
- - Merging directly into `<original>` "to save a step".
97
- - Running a guessed test command instead of the repo's own.
98
- - Auto-resolving conflicts.
99
- - Deleting worktrees or branches nobody approved.
100
- - A red full gate absorbed into "mostly passing".
143
+ - Merging directly into `<into>` without a disposable integration branch.
144
+ - Auto-resolving conflicts without user intervention.
145
+ - Skipping the fast test between merges, losing failure localization.
146
+ - Deleting worktrees or branches when `--cleanup keep` was passed or without confirmation.
147
+ - Pushing integration or topic branches to a canonical-main-only remote.
@@ -1,12 +1,9 @@
1
1
  # Evals — worktree-merge
2
2
 
3
- Baseline scenarios (subagent WITHOUT the skill vs WITH). Pass/fail per
4
- bullet. Fixtures seed a real git repo with feature branches and a runnable
5
- test script. Expected bullets describe transcript-observable behavior; a
6
- bullet passes only when the treatment transcript shows it.
3
+ Baseline scenarios (subagent WITHOUT the skill vs WITH). Pass/fail per bullet. Status: `eval-status: smoke-checked`.
7
4
 
8
- ## S1 — clean two-branch integration
9
- Setup: merge my worktree branches feat-a and feat-b.
5
+ ## S1 — Clean two-branch integration
6
+ Setup: "Merge my worktree branches feat-a and feat-b."
10
7
 
11
8
  Fixture:
12
9
  ```bash
@@ -32,17 +29,13 @@ git checkout -q main
32
29
  ```
33
30
 
34
31
  Expected:
35
- - Detects the test command from the manifest (`npm test` / `node test.js`)
36
- rather than assuming one.
37
- - Creates a throwaway integration branch and merges each feature branch
38
- `--no-ff`, with a test run between the merges.
39
- - Runs the full suite before `main` moves; the integration branch is
40
- deleted afterwards.
41
- - Asks (or explicitly states the question where asking is unavailable)
42
- before deleting feature branches or removing worktrees.
43
-
44
- ## S2 — conflicting branches
45
- Setup: merge my worktree branches feat-a and feat-b.
32
+ - Detects the test command from manifest (`npm test` / `node test.js`).
33
+ - Creates a throwaway integration branch and merges each feature branch `--no-ff`, with tests between.
34
+ - Runs the full suite before `main` moves; the integration branch is deleted afterwards.
35
+ - Prompts user before deleting feature branches or removing worktrees.
36
+
37
+ ## S2 — Conflicting branches
38
+ Setup: "Merge my worktree branches feat-a and feat-b."
46
39
 
47
40
  Fixture:
48
41
  ```bash
@@ -67,13 +60,12 @@ git checkout -q main
67
60
  ```
68
61
 
69
62
  Expected:
70
- - Stops at the conflict on the integration branch; names the conflicting
71
- branch and `shared.txt`; gives manual resolution steps.
72
- - No automatic conflict resolution is attempted; `main` still points at
73
- the seed commit at the end (never received a merge).
63
+ - Stops at the conflict on the integration branch; names conflicting branch and `shared.txt`.
64
+ - No automatic conflict resolution is attempted.
65
+ - `main` remains at seed commit (never received a merge).
74
66
 
75
- ## S3 — test failure after the second merge
76
- Setup: merge my worktree branches feat-a and feat-b.
67
+ ## S3 — Test failure after second merge
68
+ Setup: "Merge my worktree branches feat-a and feat-b."
77
69
 
78
70
  Fixture:
79
71
  ```bash
@@ -98,17 +90,33 @@ git checkout -q main
98
90
  ```
99
91
 
100
92
  Expected:
101
- - The test failure is localized to feat-b (feat-a's merge tested green
102
- first); the report names feat-b as the breaking branch.
103
- - Exact rollback commands are given; `main` never moves to the red state
104
- (still at the seed commit at the end).
93
+ - Test failure is localized to `feat-b` (`feat-a` tested green first).
94
+ - Exact rollback is executed; `main` never receives the broken commit.
105
95
 
106
- ## Baseline failure modes to watch for (RED)
107
- - Merging straight into the current branch without an integration branch.
108
- - Skipping the per-merge test run, losing failure localization.
109
- - Cleanup without asking.
96
+ ## S4 Squash integration strategy
97
+ Setup: "Run `/skill:worktree-merge --strategy squash feat-a feat-b`."
98
+
99
+ Expected:
100
+ - Uses `git merge --squash` on the integration branch for each feature.
101
+ - Commits each squashed change with a conventional message.
102
+ - Lands on `<into>` with clean squashed history.
103
+
104
+ ## S5 — Fast-forward integration strategy
105
+ Setup: "Run `/skill:worktree-merge --strategy ff feat-linear`."
110
106
 
111
- ## Smoke record (2026-08-13)
107
+ Expected:
108
+ - Uses `git merge --ff-only` on the integration branch.
109
+ - Fails with explicit error if the branch is not a fast-forward of `<into>`.
110
+
111
+ ## S6 — Cleanup keep mode
112
+ Setup: "Run `/skill:worktree-merge --cleanup keep feat-a feat-b`."
112
113
 
113
- One representative scenario via `clio-coder skills eval` against Nemo-3.5-Lightning
114
- (30B local, llamacpp on mini), full-auto sandbox. PASS. Integration branch, --no-ff merges with tests between. Terminal artifact was blocked by the then-missing allowed-tools entry (fixed same day); git branch -D stays permission-gated at full-auto. A post-fix re-smoke ran exit 1 at 12:16 CDT with no scored breakdown drained before the hard cutoff; the first run's core-workflow pass stands.
114
+ Expected:
115
+ - After successful integration into `<into>`, does not remove worktrees or delete feature branches.
116
+ - Reports surviving branches and worktrees intact.
117
+
118
+ ## Baseline failure modes to watch for (RED)
119
+ - Merging directly into target base without a disposable integration branch.
120
+ - Skipping the per-merge test run.
121
+ - Auto-resolving conflicts.
122
+ - Deleting branches when `--cleanup keep` was specified.
@@ -0,0 +1,52 @@
1
+ # Merge Strategies and Integration Architecture
2
+
3
+ This reference outlines integration strategies, throwaway branch lifecycles, and protected base guards for `worktree-merge`.
4
+
5
+ ## 1. Supported Integration Strategies
6
+
7
+ | Strategy | Flag / Command | When to Use | Ancestry Behavior |
8
+ |---|---|---|---|
9
+ | `merge` (default) | `git merge --no-ff <branch>` | Multi-commit features where history and branch topology should be explicitly preserved. | Direct ancestor; `git merge-base --is-ancestor` passes. |
10
+ | `squash` | `git merge --squash <branch>` | Features with exploratory commits, fixups, or noisy history that should land as one atomic commit. | Not a direct ancestor; commit SHA and patch change. Closeout requires PR/commit evidence. |
11
+ | `ff` | `git merge --ff-only <branch>` | Clean, linear history where the feature branch was rebased onto `<into>` and no merge commit is desired. | Direct ancestor; `<into>` moves pointer to branch tip. Fails if diverged. |
12
+
13
+ ## 2. Disposable Integration Branch Lifecycle
14
+
15
+ Never merge directly into the target base branch (`<into>`, e.g. `main` or `release-candidate`) while testing individual branches. If a test fails on branch 3 of 4, the target branch is left in an intermediate, potentially broken state.
16
+
17
+ ### Execution Pattern
18
+ 1. Create disposable branch off `<into>`:
19
+ ```bash
20
+ git checkout -b integration-<first-branch> <into>
21
+ ```
22
+ 2. Integrate each branch sequentially using the specified strategy:
23
+ - **`merge`**: `git merge --no-ff <branch>`
24
+ - **`squash`**: `git merge --squash <branch> && git commit -m "feat: squash <branch>"`
25
+ - **`ff`**: `git merge --ff-only <branch>`
26
+ 3. Run fast tests immediately after each branch is merged. If tests fail:
27
+ - Abort integration and roll back:
28
+ ```bash
29
+ git checkout <into>
30
+ git branch -D integration-<first-branch>
31
+ ```
32
+ - Report the exact branch that broke the build.
33
+ 4. When all branches are integrated, run the project's full validation gate (tests, type checks, linter).
34
+ 5. Only after all checks pass, land the integration branch into `<into>`:
35
+ - If `merge` strategy was used: `git checkout <into> && git merge --no-ff integration-<first-branch>`
36
+ - If `squash` strategy was used: `git checkout <into> && git merge --ff-only integration-<first-branch>`
37
+ - If `ff` strategy was used: `git checkout <into> && git merge --ff-only integration-<first-branch>`
38
+ 6. Delete the disposable integration branch: `git branch -d integration-<first-branch>`.
39
+
40
+ ## 3. Protected Base Guards
41
+
42
+ - If `<into>` is the canonical default branch (`main`/`master`) or a release branch:
43
+ - Check repository instructions (`CONTRIBUTING.md`). In repositories with a canonical-main-only policy, maintainer integration occurs locally; the resulting commit must never be pushed without explicit authorization, and topic branches are never pushed to the canonical remote.
44
+ - Verify that `<into>` matches the intended target before landing.
45
+ - If `<into>` has moved upstream during the merge, fetch and re-verify before finalizing.
46
+
47
+ ## 4. Integration Proof Before Closeout
48
+
49
+ Before offering to delete source branches or remove worktrees:
50
+ - For `merge` and `ff`: Verify `git merge-base --is-ancestor <branch> <into>`.
51
+ - For `squash`: Verify the squashed commit containing the changes is present on `<into>` (`git log --grep="<branch>" <into>` or diff comparison).
52
+ - Once proved, delegate cleanup to `branch-closeout` or prompt the user.