@iowarp/clio-coder 0.4.1 → 0.4.3

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 (604) hide show
  1. package/CHANGELOG.md +127 -0
  2. package/CONTRIBUTING.md +142 -52
  3. package/README.md +434 -473
  4. package/SECURITY.md +2 -1
  5. package/dist/{acp-ZILU3AUO.js → acp-H2NGRPWO.js} +12 -12
  6. package/dist/{agents-HYWGBGQR.js → agents-TL5LLUQP.js} +56 -55
  7. package/dist/assets/codewiki.json +1 -1
  8. package/dist/{auth-N3QT7CBO.js → auth-E5SW4HMS.js} +23 -21
  9. package/dist/builtins-IA7V7FUC.js +22 -0
  10. package/dist/{chunk-7RY5VZPH.js → chunk-2APPQIER.js} +8 -8
  11. package/dist/{chunk-72GZI5EV.js → chunk-2JH2WHGE.js} +2 -2
  12. package/dist/{chunk-JA5QWE4Z.js → chunk-2UG5F4C5.js} +1973 -1664
  13. package/dist/{chunk-5YHDIDBP.js → chunk-2UH2KFUP.js} +2 -2
  14. package/dist/{chunk-CTJ4RNAA.js → chunk-2VIKGWFZ.js} +2 -2
  15. package/dist/{chunk-I66EAJFY.js → chunk-2WZ546HR.js} +267 -232
  16. package/dist/{chunk-GIZNH63R.js → chunk-35MSIRKH.js} +9 -4
  17. package/dist/chunk-3EBYEESD.js +314 -0
  18. package/dist/{chunk-J5LZHVIT.js → chunk-3M6DQK6S.js} +113 -35
  19. package/dist/{chunk-RKSR6VSF.js → chunk-4IUZQIJ3.js} +29 -1
  20. package/dist/{chunk-6FN3E6KX.js → chunk-4O6MANBS.js} +2 -2
  21. package/dist/chunk-4UVU7BJ5.js +39 -0
  22. package/dist/{chunk-VKRH2TCS.js → chunk-4WR7VSYB.js} +2 -2
  23. package/dist/{chunk-BBTJOK6Y.js → chunk-54CBCGIR.js} +5 -5
  24. package/dist/{chunk-AP73CFDC.js → chunk-5ICU3EUH.js} +2 -2
  25. package/dist/chunk-5MEZN6CB.js +1334 -0
  26. package/dist/{chunk-O42A54GG.js → chunk-5OIVVPHF.js} +2 -2
  27. package/dist/{chunk-ABLSQ6JX.js → chunk-64I3JVYM.js} +8 -2
  28. package/dist/{chunk-AFKWHWXF.js → chunk-6PTFB5VS.js} +39 -22
  29. package/dist/{chunk-VN3SHNBN.js → chunk-7DICMOS6.js} +2 -2
  30. package/dist/chunk-7DRAWPTZ.js +360 -0
  31. package/dist/chunk-7E7I3WLS.js +3762 -0
  32. package/dist/{chunk-BJGUKIG4.js → chunk-7ZYNNDKC.js} +7 -7
  33. package/dist/{chunk-XKA2ICR3.js → chunk-AF4YM7Z4.js} +652 -252
  34. package/dist/{chunk-GVQJ5CCZ.js → chunk-AX2THNSA.js} +12 -12
  35. package/dist/{chunk-IG7BCQBA.js → chunk-B4OAX3SI.js} +65 -3
  36. package/dist/{chunk-TD3PGPQA.js → chunk-B4VEBZKF.js} +3 -3
  37. package/dist/{chunk-74YWRRU5.js → chunk-BEPZRGGU.js} +10 -10
  38. package/dist/{chunk-FEFIFZTL.js → chunk-CE5AX47J.js} +2 -2
  39. package/dist/{chunk-UAPGZHYC.js → chunk-DWUOQKRU.js} +25 -11
  40. package/dist/{chunk-THYWACCR.js → chunk-E3TPLWFX.js} +3 -3
  41. package/dist/{chunk-7EPLI7VL.js → chunk-EKCHAPYA.js} +2 -2
  42. package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
  43. package/dist/{chunk-PJJ6MY27.js → chunk-F5JHEYZM.js} +7 -7
  44. package/dist/{chunk-6CCS4G3W.js → chunk-FTMGRKEF.js} +3 -3
  45. package/dist/{chunk-SINK3QR6.js → chunk-G76U63X4.js} +17 -17
  46. package/dist/{chunk-EIMVLWB3.js → chunk-GHS5EBTQ.js} +64 -9
  47. package/dist/{chunk-QMXC4JB7.js → chunk-GI7YYQ3F.js} +187 -1419
  48. package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
  49. package/dist/{chunk-6HMJX2VU.js → chunk-GWZNEVM2.js} +44 -12
  50. package/dist/chunk-GYV6VZOC.js +26 -0
  51. package/dist/{chunk-MQXIVJ35.js → chunk-HAXOFFRH.js} +5 -5
  52. package/dist/{chunk-UXN6JT4W.js → chunk-HEQY7ZFI.js} +3 -3
  53. package/dist/{chunk-7PWAODYW.js → chunk-I7XBWTYH.js} +2 -2
  54. package/dist/{chunk-GCSMB2KY.js → chunk-I7ZPNEJM.js} +145 -102
  55. package/dist/{chunk-WNP7O5WZ.js → chunk-ID64D7PE.js} +4 -4
  56. package/dist/{chunk-QTFGO774.js → chunk-IGLP3ODT.js} +29 -16
  57. package/dist/chunk-IJNZMHLA.js +101 -0
  58. package/dist/{chunk-BDPT6GTK.js → chunk-INY6HTFL.js} +7 -7
  59. package/dist/{chunk-PBP4B7XR.js → chunk-IUE3Y34X.js} +2 -2
  60. package/dist/{chunk-6NJQITNH.js → chunk-IWT4SF4R.js} +6 -3
  61. package/dist/{chunk-R23Z6K6I.js → chunk-JDAY6FIL.js} +19 -19
  62. package/dist/chunk-JEQ3XTHC.js +42 -0
  63. package/dist/{chunk-FSP7CMNU.js → chunk-JGRC33J2.js} +50 -4
  64. package/dist/{chunk-TVH4ONAM.js → chunk-JKKCYP3C.js} +10 -10
  65. package/dist/{chunk-HJWWJ6IL.js → chunk-JSC3U7TI.js} +16 -4
  66. package/dist/{chunk-C537JADH.js → chunk-KK4JZPBQ.js} +19 -141
  67. package/dist/{chunk-K6BF4U2H.js → chunk-KKOJXO6R.js} +62 -14
  68. package/dist/{chunk-IHXBNWMM.js → chunk-KXDSS5WJ.js} +7 -3
  69. package/dist/{chunk-6DWBAZ5U.js → chunk-L47TF46W.js} +5 -7
  70. package/dist/{chunk-HUAS7ITX.js → chunk-LDJG7DW3.js} +91 -42
  71. package/dist/{chunk-CDNVLKUX.js → chunk-LLDJM5XK.js} +13 -7
  72. package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
  73. package/dist/{chunk-Y4CAGMM6.js → chunk-MNJGS2IN.js} +5 -6
  74. package/dist/{chunk-VKFQTNDV.js → chunk-MUW2BDDH.js} +4 -4
  75. package/dist/{chunk-E67WX76H.js → chunk-MWUZBSAQ.js} +104 -152
  76. package/dist/{chunk-OJTRZGR3.js → chunk-N2Z7HLVY.js} +21 -21
  77. package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
  78. package/dist/{chunk-FYUN5KZ3.js → chunk-NIQJ66N4.js} +21 -21
  79. package/dist/{chunk-U2WB7TZS.js → chunk-NMJXSHBJ.js} +97 -85
  80. package/dist/{chunk-CWVRRIEI.js → chunk-NZMNUPZZ.js} +2 -2
  81. package/dist/{chunk-VEGN6WIQ.js → chunk-O5CVSAG5.js} +3 -3
  82. package/dist/{chunk-MOPSG2X7.js → chunk-OML5D5V5.js} +8 -8
  83. package/dist/{chunk-2VG7KLYV.js → chunk-PAJQJ7BS.js} +5816 -3255
  84. package/dist/{chunk-ZW55JB7N.js → chunk-PUVDKJ2Y.js} +2 -2
  85. package/dist/{chunk-BTGG6BG2.js → chunk-QWGDJJYJ.js} +158 -19
  86. package/dist/chunk-R6Q67RJH.js +134 -0
  87. package/dist/{chunk-ZJLUDYFY.js → chunk-RRNP2ANY.js} +6 -6
  88. package/dist/{chunk-PVAMAVBB.js → chunk-RSJ25QSL.js} +102 -2
  89. package/dist/{chunk-NLFAQR7Z.js → chunk-S66XZJOF.js} +3 -23
  90. package/dist/chunk-SKHCAU7K.js +385 -0
  91. package/dist/chunk-SZAA6XDG.js +30 -0
  92. package/dist/{chunk-J4HBWF6Y.js → chunk-TM6LQDI3.js} +131 -28
  93. package/dist/chunk-UOIZ7DA4.js +41 -0
  94. package/dist/{chunk-MA3H6DM5.js → chunk-UPZU6GE4.js} +25 -3
  95. package/dist/{chunk-BWW4HLO4.js → chunk-UXCU4E3T.js} +8 -6
  96. package/dist/{chunk-N5UK64DP.js → chunk-V2ANDPVT.js} +4 -4
  97. package/dist/{chunk-AK5XEFVZ.js → chunk-VA5FNYMT.js} +26 -13
  98. package/dist/{chunk-6VC4OV3Z.js → chunk-VIA6RFQZ.js} +3 -11
  99. package/dist/{chunk-ZAZB4JMW.js → chunk-VKPAQYEB.js} +27 -8
  100. package/dist/{chunk-QKIFBZKT.js → chunk-VW6DOEDG.js} +497 -81
  101. package/dist/{chunk-SCYB3HA4.js → chunk-W6RRQCPQ.js} +63 -19
  102. package/dist/{chunk-2NM363SV.js → chunk-WBKFA554.js} +10 -10
  103. package/dist/{chunk-R32CLGZ6.js → chunk-WCXUNS7U.js} +82 -21
  104. package/dist/{chunk-GPPB3JBE.js → chunk-WRBAGUNF.js} +3 -3
  105. package/dist/{chunk-IXJT6DCX.js → chunk-XIVNBFZS.js} +85 -30
  106. package/dist/{chunk-UEDMSP56.js → chunk-XPWWI35G.js} +417 -201
  107. package/dist/chunk-XRZT5WY5.js +47 -0
  108. package/dist/{chunk-3QSOM6PA.js → chunk-Y3CBHOR6.js} +2 -2
  109. package/dist/{chunk-VXMFAE2W.js → chunk-YPC6ZR5L.js} +19 -6
  110. package/dist/{chunk-AKB4GYDL.js → chunk-YQWYVTMC.js} +5 -5
  111. package/dist/{chunk-6I5ILFOF.js → chunk-ZA4VCIGV.js} +3 -3
  112. package/dist/{chunk-7OBGU7UB.js → chunk-ZDN3Y73Y.js} +12 -18
  113. package/dist/{chunk-3I5NY75V.js → chunk-ZWPRK62N.js} +8 -5
  114. package/dist/cli/index.js +41 -39
  115. package/dist/{clio-IT3G3VQH.js → clio-CMMK4KRR.js} +9 -9
  116. package/dist/{code-nav-RK6S7F6E.js → code-nav-MDZNQS33.js} +89 -21
  117. package/dist/{components-UBWCQSRW.js → components-UCUQ4QXW.js} +4 -4
  118. package/dist/{config-3QZRWZJF.js → config-SVM5P5YI.js} +131 -84
  119. package/dist/{configure-FL7Y3KJF.js → configure-LE3IK2TJ.js} +28 -26
  120. package/dist/{context-5HE7ODYK.js → context-2OHRKS42.js} +69 -64
  121. package/dist/{context-KYQFRVDC.js → context-E3VC7RX5.js} +15 -11
  122. package/dist/{context-XNHL75JV.js → context-VNCR7KAG.js} +93 -65
  123. package/dist/{context-clear-N545L53A.js → context-clear-BW4O37TG.js} +64 -60
  124. package/dist/context-map-COB37XXN.js +505 -0
  125. package/dist/{context-working-set-QHKXSV2F.js → context-working-set-VDS25HXZ.js} +19 -18
  126. package/dist/{dispatch-runner-RGIE5PCT.js → dispatch-runner-5AHT53RF.js} +93 -82
  127. package/dist/{docs-5NAF6AU7.js → docs-PD3EXDKU.js} +21 -20
  128. package/dist/{doctor-ZGPEGHIP.js → doctor-WNNVO6FY.js} +48 -47
  129. package/dist/{eval-GXLL44RD.js → eval-7G7SGAYO.js} +287 -115
  130. package/dist/{eval-inventory-HBWSWQOK.js → eval-inventory-Y6QRFOH5.js} +4 -4
  131. package/dist/{evidence-HWLBRH3Q.js → evidence-VD6736FQ.js} +67 -64
  132. package/dist/{evolve-FTZBMNVW.js → evolve-AL3NGVRL.js} +65 -62
  133. package/dist/{extensions-VHRBEID7.js → extensions-MOVJ32NM.js} +9 -7
  134. package/dist/{fleet-CKZHJWZJ.js → fleet-QZHUMAGI.js} +114 -111
  135. package/dist/{fleet-commands-EXDXBMV6.js → fleet-commands-BAYT5FJZ.js} +10 -10
  136. package/dist/{fleet-decisions-OTHB6KRL.js → fleet-decisions-IREVMRU4.js} +7 -6
  137. package/dist/{fleet-graph-YTEZUCUT.js → fleet-graph-YCTT3HTI.js} +22 -19
  138. package/dist/{fleet-inspect-SS6YMDCK.js → fleet-inspect-QVJTDAVB.js} +58 -55
  139. package/dist/{fleet-preflight-PBY4VYOM.js → fleet-preflight-25QAFPK4.js} +4 -4
  140. package/dist/{fleet-validate-KMEM5L3S.js → fleet-validate-5O57AAJ7.js} +26 -23
  141. package/dist/{fleet-verify-QD5M7E7Q.js → fleet-verify-CPH2W2T6.js} +59 -56
  142. package/dist/{fleet-view-WAMJYNDT.js → fleet-view-SWBR3VGQ.js} +58 -55
  143. package/dist/{init-5XQRBOFV.js → init-J477LKZH.js} +82 -79
  144. package/dist/{interop-34TVO25M.js → interop-3FCM6XLG.js} +11 -11
  145. package/dist/{library-3QY6KF57.js → library-QUQEIUG6.js} +30 -27
  146. package/dist/{memory-L4UTIIIW.js → memory-SGGSEP65.js} +67 -64
  147. package/dist/{models-ZVX3QOWE.js → models-HEKUAXXK.js} +53 -46
  148. package/dist/{monitor-CEKVSYTS.js → monitor-HKU57TYQ.js} +63 -60
  149. package/dist/{orchestrator-77BAP6BC.js → orchestrator-VDFAEFAI.js} +1831 -1057
  150. package/dist/{panes-7STHOAUJ.js → panes-DN2SSFOH.js} +5 -5
  151. package/dist/{panes-SHAUIRXY.js → panes-TALGNPZT.js} +29 -14
  152. package/dist/{paths-L7LGY6RN.js → paths-NBMFAIEZ.js} +5 -5
  153. package/dist/reset-EAJFFJVB.js +344 -0
  154. package/dist/{resources-74GKTLSF.js → resources-OVKSEFVE.js} +29 -20
  155. package/dist/{run-HBAUJNNZ.js → run-7DP7ZF2J.js} +120 -115
  156. package/dist/{share-G3APVLVP.js → share-WML67FT3.js} +32 -27
  157. package/dist/{skills-35HHUKCR.js → skills-SG662R2K.js} +41 -31
  158. package/dist/{skills-eval-QN4HSHDC.js → skills-eval-VVZEUU46.js} +78 -77
  159. package/dist/{skills-inventory-J357J34F.js → skills-inventory-I2E23GET.js} +23 -20
  160. package/dist/{slash-commands-JZZCQA32.js → slash-commands-S7MBJDQK.js} +40 -36
  161. package/dist/{steer-XAVHJM22.js → steer-2LQOMCPB.js} +3 -3
  162. package/dist/{support-U7QOWY26.js → support-CC2UJBJ6.js} +6 -6
  163. package/dist/{targets-DSM6CY3M.js → targets-4QC3HIEW.js} +54 -54
  164. package/dist/{terminal-lease-JOPFUVEM.js → terminal-lease-TUHIJ6Y2.js} +5 -5
  165. package/dist/{tools-MKNWVPBH.js → tools-TFGJICCU.js} +10 -10
  166. package/dist/{trace-ECQ7TIYZ.js → trace-FXMXUZUF.js} +55 -7
  167. package/dist/uninstall-5PEVOE5B.js +408 -0
  168. package/dist/upgrade-M4WXY6KN.js +303 -0
  169. package/dist/{usage-X52N3IDJ.js → usage-N7ZNVLEM.js} +151 -104
  170. package/dist/{verifiers-EJTVVSMA.js → verifiers-DJTP4XX6.js} +15 -15
  171. package/dist/{verify-YJL6XET2.js → verify-RWE4PPEK.js} +9 -9
  172. package/dist/{web-fetch-MPIFL3LL.js → web-fetch-MPARV2K7.js} +2 -2
  173. package/dist/{wiki-generate-4NDZTQ4B.js → wiki-generate-C7IQOXSP.js} +89 -86
  174. package/dist/{with-panes-OBOBFIIR.js → with-panes-4GCGSL7J.js} +53 -257
  175. package/dist/worker/entry.js +90 -74
  176. package/docs/README.md +176 -81
  177. package/docs/{acp.md → architecture/acp.md} +36 -20
  178. package/docs/{alcf-provider.md → architecture/alcf-provider.md} +8 -5
  179. package/docs/{architecture.md → architecture/architecture.md} +43 -22
  180. package/docs/{artifact-placement.md → architecture/artifact-placement.md} +27 -23
  181. package/docs/architecture/artifact-versions.md +90 -0
  182. package/docs/{capacity-and-scheduling.md → architecture/capacity-and-scheduling.md} +26 -13
  183. package/docs/{context-engine.md → architecture/context-engine.md} +29 -25
  184. package/docs/{context-working-set.md → architecture/context-working-set.md} +13 -10
  185. package/docs/{dispatch-architecture-rationale.md → architecture/dispatch-architecture-rationale.md} +12 -9
  186. package/docs/{dispatch-typed-intent.md → architecture/dispatch-typed-intent.md} +68 -46
  187. package/docs/{evidence-and-memory.md → architecture/evidence-and-memory.md} +23 -16
  188. package/docs/{middleware-and-components.md → architecture/middleware-and-components.md} +11 -5
  189. package/docs/{model-catalog.md → architecture/model-catalog.md} +61 -27
  190. package/docs/{observability.md → architecture/observability.md} +38 -14
  191. package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
  192. package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +57 -20
  193. package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +99 -25
  194. package/docs/{safety-model.md → architecture/safety-model.md} +35 -20
  195. package/docs/{session-lifecycle.md → architecture/session-lifecycle.md} +8 -5
  196. package/docs/architecture/time-conventions.md +125 -0
  197. package/docs/{trace-store.md → architecture/trace-store.md} +13 -5
  198. package/docs/{tui-design.md → architecture/tui-design.md} +13 -13
  199. package/docs/{worker-dispatch-mechanics.md → architecture/worker-dispatch-mechanics.md} +27 -30
  200. package/docs/{built-in-agents.md → guide/built-in-agents.md} +65 -35
  201. package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +66 -61
  202. package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +323 -297
  203. package/docs/guide/configuration-reference.md +1163 -0
  204. package/docs/{environment-variables.md → guide/environment-variables.md} +33 -28
  205. package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +6 -3
  206. package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
  207. package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +39 -43
  208. package/docs/{glossary.md → guide/glossary.md} +14 -11
  209. package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +81 -17
  210. package/docs/guide/panes-and-files.md +290 -0
  211. package/docs/{proactive-memory.md → guide/proactive-memory.md} +131 -107
  212. package/docs/{resource-library.md → guide/resource-library.md} +13 -4
  213. package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +25 -3
  214. package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
  215. package/docs/{troubleshooting.md → guide/troubleshooting.md} +9 -4
  216. package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +11 -11
  217. package/docs/{release-cut-checklist.md → history/release-cut-checklist.md} +29 -2
  218. package/docs/process/development-pipeline.md +152 -0
  219. package/docs/process/documentation-coverage.md +100 -0
  220. package/docs/process/documentation-guide.md +187 -0
  221. package/docs/{eval-runner.md → process/eval-runner.md} +108 -53
  222. package/docs/{evals-internal.md → process/evals-internal.md} +10 -10
  223. package/docs/{evolution.md → process/evolution.md} +2 -2
  224. package/docs/{fleet-demo-runbook.md → process/fleet-demo-runbook.md} +11 -7
  225. package/docs/{git-commit-provenance.md → process/git-commit-provenance.md} +11 -4
  226. package/docs/{performance-methodology.md → process/performance-methodology.md} +87 -69
  227. package/docs/{scientific-validation.md → process/scientific-validation.md} +4 -4
  228. package/evals/README.md +2 -2
  229. package/evals/behavioral-model.yaml +3 -2
  230. package/package.json +10 -8
  231. package/skills/README.md +52 -41
  232. package/skills/coding/ast-grep/SKILL.md +102 -31
  233. package/skills/coding/ast-grep/evals.md +26 -0
  234. package/skills/coding/coding-standards/SKILL.md +41 -6
  235. package/skills/coding/coding-standards/evals.md +23 -0
  236. package/skills/coding/prototype/SKILL.md +88 -29
  237. package/skills/coding/prototype/evals.md +19 -0
  238. package/skills/coding/tdd/SKILL.md +81 -54
  239. package/skills/coding/tdd/evals.md +20 -0
  240. package/skills/context/context-handoff/SKILL.md +44 -3
  241. package/skills/context/context-handoff/evals.md +44 -0
  242. package/skills/context/context-prime/SKILL.md +46 -16
  243. package/skills/context/context-prime/evals.md +45 -0
  244. package/skills/git/branch-closeout/SKILL.md +132 -0
  245. package/skills/git/branch-closeout/evals.md +133 -0
  246. package/skills/git/branch-closeout/references/closeout-checklist.md +81 -0
  247. package/skills/git/file-ticket/SKILL.md +78 -64
  248. package/skills/git/file-ticket/assets/issue-template.md +22 -0
  249. package/skills/git/file-ticket/evals.md +31 -26
  250. package/skills/git/file-ticket/references/issue-discovery.md +49 -0
  251. package/skills/git/fix-issue/SKILL.md +88 -65
  252. package/skills/git/fix-issue/evals.md +35 -31
  253. package/skills/git/fix-issue/references/diagnosis-and-rca.md +46 -0
  254. package/skills/git/resolve-merge-conflicts/SKILL.md +101 -52
  255. package/skills/git/resolve-merge-conflicts/evals.md +52 -25
  256. package/skills/git/resolve-merge-conflicts/references/conflict-matrix.md +126 -0
  257. package/skills/git/ship/SKILL.md +103 -67
  258. package/skills/git/ship/assets/pr-template.md +21 -0
  259. package/skills/git/ship/evals.md +44 -28
  260. package/skills/git/ship/references/remote-and-branch-policy.md +62 -0
  261. package/skills/git/worktree-create/SKILL.md +80 -50
  262. package/skills/git/worktree-create/evals.md +40 -33
  263. package/skills/git/worktree-create/references/worktree-setup.md +62 -66
  264. package/skills/git/worktree-merge/SKILL.md +112 -65
  265. package/skills/git/worktree-merge/evals.md +42 -34
  266. package/skills/git/worktree-merge/references/merge-strategies.md +52 -0
  267. package/skills/meta/clio-coder-dev/SKILL.md +9 -5
  268. package/skills/meta/clio-coder-dev/evals.md +3 -2
  269. package/skills/meta/clio-coder-test/SKILL.md +102 -95
  270. package/skills/meta/clio-coder-test/evals.md +9 -4
  271. package/skills/meta/clio-coder-test/references/harness.md +100 -124
  272. package/skills/meta/clio-coder-test/references/test-map.md +77 -50
  273. package/skills/meta/credentials/SKILL.md +2 -2
  274. package/skills/meta/find-skills/SKILL.md +2 -2
  275. package/skills/meta/herdr/SKILL.md +2 -2
  276. package/skills/meta/skill-craft/SKILL.md +22 -16
  277. package/skills/planning/archify/SKILL.md +196 -0
  278. package/skills/planning/archify/evals.md +65 -0
  279. package/skills/planning/architecture/SKILL.md +62 -13
  280. package/skills/planning/architecture/evals.md +65 -0
  281. package/skills/planning/backlog/SKILL.md +131 -15
  282. package/skills/planning/backlog/evals.md +142 -0
  283. package/skills/planning/prd/SKILL.md +47 -7
  284. package/skills/planning/prd/evals.md +54 -0
  285. package/skills/planning/product-intent/SKILL.md +58 -3
  286. package/skills/planning/product-intent/evals.md +70 -0
  287. package/skills/planning/tech-spec/SKILL.md +54 -3
  288. package/skills/planning/tech-spec/evals.md +73 -0
  289. package/skills/registry.yaml +70 -62
  290. package/skills/remote.yaml +13 -0
  291. package/skills/research/arxiv-literature/SKILL.md +77 -19
  292. package/skills/research/arxiv-literature/evals.md +50 -0
  293. package/skills/research/experiment-protocol/SKILL.md +21 -2
  294. package/skills/research/experiment-protocol/evals.md +23 -0
  295. package/skills/research/scientific-debugging/SKILL.md +24 -2
  296. package/skills/research/scientific-debugging/evals.md +18 -0
  297. package/skills/research/scientific-modernization/SKILL.md +27 -2
  298. package/skills/research/scientific-modernization/evals.md +27 -0
  299. package/skills/skill-marketplace.json +97 -62
  300. package/skills/workflow/cut-it/SKILL.md +66 -6
  301. package/skills/workflow/cut-it/evals.md +101 -0
  302. package/skills/workflow/design-council/SKILL.md +118 -28
  303. package/skills/workflow/design-council/evals.md +161 -0
  304. package/skills/workflow/grill-me/SKILL.md +87 -11
  305. package/skills/workflow/grill-me/evals.md +153 -0
  306. package/skills/workflow/workflow-distiller/SKILL.md +77 -18
  307. package/skills/workflow/workflow-distiller/evals.md +118 -0
  308. package/src/cli/args.ts +2 -2
  309. package/src/cli/bootstrap-generate.ts +1 -1
  310. package/src/cli/config-inspect.ts +65 -12
  311. package/src/cli/configure-interop.ts +105 -13
  312. package/src/cli/configure-oauth.ts +57 -0
  313. package/src/cli/configure-onboarding.ts +980 -0
  314. package/src/cli/configure-target.ts +594 -0
  315. package/src/cli/configure.ts +1082 -532
  316. package/src/cli/context-map.ts +114 -0
  317. package/src/cli/context.ts +4 -0
  318. package/src/cli/docs.ts +22 -14
  319. package/src/cli/doctor-naming.ts +5 -5
  320. package/src/cli/doctor-toolchain.ts +3 -3
  321. package/src/cli/eval.ts +1 -2
  322. package/src/cli/extensions.ts +2 -1
  323. package/src/cli/fleet.ts +1 -1
  324. package/src/cli/index.ts +3 -1
  325. package/src/cli/internal-dispatch.ts +3 -4
  326. package/src/cli/lifecycle-presenter.ts +436 -0
  327. package/src/cli/models.ts +10 -2
  328. package/src/cli/modes/print.ts +5 -1
  329. package/src/cli/panes.ts +19 -5
  330. package/src/cli/reset.ts +228 -106
  331. package/src/cli/run.ts +9 -4
  332. package/src/cli/select.ts +664 -0
  333. package/src/cli/share.ts +5 -1
  334. package/src/cli/skills-eval.ts +3 -3
  335. package/src/cli/skills.ts +9 -2
  336. package/src/cli/targets.ts +5 -6
  337. package/src/cli/trace.ts +55 -4
  338. package/src/cli/uninstall.ts +233 -165
  339. package/src/cli/upgrade.ts +204 -149
  340. package/src/cli/usage.ts +86 -27
  341. package/src/cli/validate-model.ts +3 -3
  342. package/src/cli/wiki-generate.ts +1 -1
  343. package/src/core/artifact-paths.ts +1 -1
  344. package/src/core/bash-exec.ts +131 -86
  345. package/src/core/bus-events.ts +51 -6
  346. package/src/core/config.ts +61 -1
  347. package/src/core/defaults.ts +7 -4
  348. package/src/core/dispatch-outcome.ts +16 -0
  349. package/src/core/external-diagnostic.ts +44 -0
  350. package/src/core/gateway-routing.ts +157 -0
  351. package/src/core/guardrails.ts +10 -49
  352. package/src/core/prompt-hint.ts +9 -0
  353. package/src/core/safe-exec.ts +17 -2
  354. package/src/core/skill-activation.ts +89 -2
  355. package/src/domains/agents/builtins/architect.md +2 -3
  356. package/src/domains/agents/builtins/coder.md +3 -2
  357. package/src/domains/agents/builtins/debugger.md +2 -2
  358. package/src/domains/agents/builtins/documenter.md +2 -2
  359. package/src/domains/agents/builtins/git-master.md +1 -1
  360. package/src/domains/agents/builtins/oracle.md +1 -1
  361. package/src/domains/agents/builtins/provenance.md +1 -1
  362. package/src/domains/agents/builtins/researcher.md +1 -1
  363. package/src/domains/agents/builtins/scout.md +1 -1
  364. package/src/domains/agents/builtins/tester.md +2 -2
  365. package/src/domains/agents/builtins/verifier.md +2 -2
  366. package/src/domains/agents/builtins/wiki-writer.md +1 -1
  367. package/src/domains/agents/builtins/world-knowledge.md +31 -0
  368. package/src/domains/agents/catalog.ts +13 -15
  369. package/src/domains/agents/contract.ts +2 -0
  370. package/src/domains/agents/extension.ts +23 -1
  371. package/src/domains/agents/result-contract.ts +70 -0
  372. package/src/domains/config/keybindings.ts +8 -0
  373. package/src/domains/context/extension.ts +0 -3
  374. package/src/domains/context/wiki/map-seed.ts +589 -0
  375. package/src/domains/context/wiki/plan.ts +2 -2
  376. package/src/domains/context/working-set/path-index.ts +1 -0
  377. package/src/domains/dispatch/admission.ts +29 -0
  378. package/src/domains/dispatch/agent-candidates.ts +10 -0
  379. package/src/domains/dispatch/budget-envelope.ts +86 -1
  380. package/src/domains/dispatch/capability-match.ts +11 -0
  381. package/src/domains/dispatch/capacity-lease.ts +17 -0
  382. package/src/domains/dispatch/contract.ts +11 -1
  383. package/src/domains/dispatch/extension.ts +237 -49
  384. package/src/domains/dispatch/host-verification.ts +435 -39
  385. package/src/domains/dispatch/intent-requirements.ts +10 -0
  386. package/src/domains/dispatch/intent.ts +18 -1
  387. package/src/domains/dispatch/path-scope.ts +235 -24
  388. package/src/domains/dispatch/run-event-journal.ts +4 -15
  389. package/src/domains/dispatch/state.ts +2 -3
  390. package/src/domains/dispatch/transport.ts +45 -21
  391. package/src/domains/dispatch/types.ts +58 -3
  392. package/src/domains/dispatch/worker-model-metadata.ts +38 -0
  393. package/src/domains/eval/artifacts/store.ts +5 -0
  394. package/src/domains/eval/metrics/call-ledger-stream.ts +34 -11
  395. package/src/domains/eval/metrics/token-stream.ts +201 -31
  396. package/src/domains/eval/metrics/tracked.ts +40 -4
  397. package/src/domains/eval/runners/clio-run.ts +5 -2
  398. package/src/domains/eval/schema/suite.ts +28 -0
  399. package/src/domains/eval/schema/verdict.ts +2 -2
  400. package/src/domains/eval/store.ts +8 -1
  401. package/src/domains/eval/suites/resolve.ts +13 -1
  402. package/src/domains/eval/suites/run.ts +24 -3
  403. package/src/domains/evidence/trust-status.ts +10 -1
  404. package/src/domains/extensions/contract.ts +15 -1
  405. package/src/domains/extensions/discovery.ts +238 -41
  406. package/src/domains/extensions/extension.ts +105 -6
  407. package/src/domains/extensions/index.ts +24 -0
  408. package/src/domains/extensions/integrity.ts +189 -0
  409. package/src/domains/extensions/manager.ts +17 -1
  410. package/src/domains/extensions/resource-path.ts +27 -0
  411. package/src/domains/extensions/resources.ts +18 -38
  412. package/src/domains/extensions/snapshot-store.ts +39 -0
  413. package/src/domains/extensions/snapshot.ts +180 -0
  414. package/src/domains/extensions/state.ts +385 -57
  415. package/src/domains/extensions/types.ts +118 -1
  416. package/src/domains/interop/registry.ts +6 -2
  417. package/src/domains/interop/types.ts +4 -0
  418. package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +27 -0
  419. package/src/domains/lifecycle/migrations/index.ts +6 -0
  420. package/src/domains/lifecycle/naming-resources.ts +19 -4
  421. package/src/domains/lifecycle/naming-yazi.ts +10 -5
  422. package/src/domains/memory/task-memory-policy.ts +70 -26
  423. package/src/domains/memory/task-memory-telemetry.ts +1 -0
  424. package/src/domains/middleware/contract.ts +26 -0
  425. package/src/domains/middleware/extension.ts +24 -24
  426. package/src/domains/middleware/hook-receipts.ts +27 -4
  427. package/src/domains/middleware/hooks-io.ts +65 -32
  428. package/src/domains/middleware/hooks.ts +64 -0
  429. package/src/domains/middleware/index.ts +28 -5
  430. package/src/domains/middleware/marketplace-offer.ts +3 -35
  431. package/src/domains/middleware/memory-intervention.ts +127 -32
  432. package/src/domains/middleware/memory-step-endpoint.ts +3 -2
  433. package/src/domains/middleware/registrations.ts +326 -0
  434. package/src/domains/middleware/runtime.ts +28 -0
  435. package/src/domains/middleware/skills-reminder.ts +31 -2
  436. package/src/domains/middleware/snapshot.ts +20 -7
  437. package/src/domains/mux/contract.ts +38 -0
  438. package/src/domains/mux/detect.ts +6 -13
  439. package/src/domains/mux/index.ts +1 -1
  440. package/src/domains/mux/operations.ts +44 -5
  441. package/src/domains/mux/yazi/assets/yazi.toml +2 -2
  442. package/src/domains/mux/yazi/session.ts +53 -4
  443. package/src/domains/mux/yazi/theme.ts +117 -17
  444. package/src/domains/observability/compaction-usage.ts +118 -0
  445. package/src/domains/observability/contract.ts +10 -11
  446. package/src/domains/observability/cost.ts +1 -1
  447. package/src/domains/observability/extension.ts +17 -4
  448. package/src/domains/observability/out-of-turn-usage.ts +52 -21
  449. package/src/domains/observability/projection.ts +14 -90
  450. package/src/domains/observability/trace-store.ts +43 -7
  451. package/src/domains/prompts/compiler.ts +73 -53
  452. package/src/domains/prompts/contract.ts +15 -3
  453. package/src/domains/prompts/extension.ts +97 -9
  454. package/src/domains/prompts/fragments/identity/clio-worker.md +1 -3
  455. package/src/domains/prompts/fragments/identity/clio.md +6 -12
  456. package/src/domains/prompts/fragments/identity/docs-routing.md +1 -2
  457. package/src/domains/prompts/fragments/identity/self-awareness.md +3 -11
  458. package/src/domains/prompts/fragments/operating/contract.md +7 -15
  459. package/src/domains/prompts/fragments/operating/delegation.md +32 -34
  460. package/src/domains/prompts/fragments/operating/skills.md +10 -24
  461. package/src/domains/prompts/fragments/operating/worker.md +1 -8
  462. package/src/domains/providers/contract.ts +4 -1
  463. package/src/domains/providers/extension.ts +40 -9
  464. package/src/domains/providers/index.ts +1 -1
  465. package/src/domains/providers/model-capabilities.ts +9 -0
  466. package/src/domains/providers/model-discovery.ts +2 -0
  467. package/src/domains/providers/model-runtime-capabilities.ts +99 -25
  468. package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +699 -114
  469. package/src/domains/providers/runtime-resolution.ts +31 -0
  470. package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +225 -45
  471. package/src/domains/providers/runtimes/common/lmstudio-http.ts +6 -2
  472. package/src/domains/providers/runtimes/common/local-synth.ts +2 -0
  473. package/src/domains/providers/runtimes/common/probe-helpers.ts +7 -2
  474. package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
  475. package/src/domains/providers/runtimes/protocol/litellm.ts +119 -29
  476. package/src/domains/providers/support.ts +11 -5
  477. package/src/domains/providers/target-model-cache.ts +25 -2
  478. package/src/domains/providers/types/capability-flags.ts +2 -0
  479. package/src/domains/providers/types/cost-provenance.ts +19 -0
  480. package/src/domains/providers/types/local-model-quirks.ts +85 -37
  481. package/src/domains/providers/types/runtime-descriptor.ts +20 -1
  482. package/src/domains/providers/types/target-descriptor.ts +19 -0
  483. package/src/domains/resources/index.ts +3 -0
  484. package/src/domains/resources/skills/install.ts +72 -7
  485. package/src/domains/resources/skills/loader.ts +23 -19
  486. package/src/domains/resources/skills/marketplace.ts +63 -11
  487. package/src/domains/safety/autonomy.ts +15 -0
  488. package/src/domains/safety/call-target.ts +1 -1
  489. package/src/domains/safety/index.ts +1 -0
  490. package/src/domains/safety/loop-detector.ts +7 -4
  491. package/src/domains/safety/path-policy.ts +1 -1
  492. package/src/domains/safety/policy-engine.ts +34 -11
  493. package/src/domains/safety/protected-artifacts.ts +191 -88
  494. package/src/domains/safety/run-effects.ts +2 -22
  495. package/src/domains/safety/skill-authority.ts +55 -0
  496. package/src/domains/session/compaction/compact.ts +72 -22
  497. package/src/domains/session/entries.ts +6 -0
  498. package/src/domains/session/task-board.ts +10 -9
  499. package/src/domains/session/usage.ts +3 -3
  500. package/src/domains/share/archive.ts +164 -7
  501. package/src/engine/acp/server.ts +62 -9
  502. package/src/engine/agent.ts +13 -3
  503. package/src/engine/ai.ts +26 -8
  504. package/src/engine/antigravity/subprocess-runtime.ts +386 -120
  505. package/src/engine/api-registry.ts +3 -0
  506. package/src/engine/apis/llamacpp-residency.ts +3 -4
  507. package/src/engine/apis/lmstudio.ts +3 -3
  508. package/src/engine/apis/ollama-native.ts +6 -6
  509. package/src/engine/apis/openai-completions.ts +145 -39
  510. package/src/engine/apis/output-budget.ts +8 -18
  511. package/src/engine/apis/residency.ts +8 -27
  512. package/src/engine/external-subprocess.ts +114 -6
  513. package/src/engine/gemma-channel-filter.ts +19 -0
  514. package/src/engine/loop-guard.ts +92 -12
  515. package/src/engine/worker-runtime.ts +40 -11
  516. package/src/engine/worker-tools.ts +3 -1
  517. package/src/entry/background-model-metadata.ts +18 -0
  518. package/src/entry/compaction-prompt.ts +57 -0
  519. package/src/entry/extension-hook-sources.ts +28 -0
  520. package/src/entry/extension-reload.ts +309 -0
  521. package/src/entry/orchestrator.ts +464 -251
  522. package/src/entry/task-memory-lifecycle.ts +35 -0
  523. package/src/interactive/application-controller.ts +2 -1
  524. package/src/interactive/bus-notices.ts +8 -1
  525. package/src/interactive/chat-loop-messages.ts +16 -17
  526. package/src/interactive/chat-loop.ts +75 -3
  527. package/src/interactive/chat-panel.ts +36 -13
  528. package/src/interactive/chat-renderer.ts +72 -7
  529. package/src/interactive/cost-overlay.ts +26 -2
  530. package/src/interactive/dispatch-board.ts +6 -11
  531. package/src/interactive/footer/widgets.ts +13 -0
  532. package/src/interactive/interactive-application.ts +39 -4
  533. package/src/interactive/interactive-input-runtime.ts +4 -0
  534. package/src/interactive/interactive-presentation.ts +2 -2
  535. package/src/interactive/interactive-slash-runtime.ts +4 -1
  536. package/src/interactive/overlays/extensions.ts +9 -1
  537. package/src/interactive/overlays/help-reference.ts +13 -0
  538. package/src/interactive/overlays/settings.ts +27 -16
  539. package/src/interactive/panes-runtime.ts +111 -35
  540. package/src/interactive/prompt-cache-identity.ts +88 -0
  541. package/src/interactive/renderers/worker-entry.ts +32 -0
  542. package/src/interactive/slash-commands.ts +153 -20
  543. package/src/interactive/stream-pacing-policy.ts +0 -23
  544. package/src/interactive/theme/labels.ts +19 -13
  545. package/src/interactive/turn-context.ts +39 -20
  546. package/src/interactive/turn-recovery.ts +8 -0
  547. package/src/interactive/turn-runtime.ts +27 -11
  548. package/src/interactive/turn-state.ts +7 -0
  549. package/src/interactive/worker-receipts.ts +1 -0
  550. package/src/interactive/worker-stream.ts +6 -1
  551. package/src/interactive/yazi-bridge.ts +60 -6
  552. package/src/tools/agent-tools.ts +30 -1
  553. package/src/tools/artifact.ts +2 -2
  554. package/src/tools/ask-user.ts +3 -3
  555. package/src/tools/bash.ts +1 -1
  556. package/src/tools/bootstrap.ts +4 -0
  557. package/src/tools/builtin-tool-catalog.ts +52 -22
  558. package/src/tools/codewiki/code-nav-surface.ts +6 -0
  559. package/src/tools/codewiki/code-nav.ts +99 -13
  560. package/src/tools/context/docs-engine.ts +20 -7
  561. package/src/tools/context/index.ts +59 -21
  562. package/src/tools/core-bootstrap.ts +28 -6
  563. package/src/tools/credential-present.ts +1 -2
  564. package/src/tools/dispatch-arguments.ts +6 -1
  565. package/src/tools/dispatch-event-text.ts +10 -0
  566. package/src/tools/dispatch-plan.ts +49 -4
  567. package/src/tools/dispatch-run-events.ts +1 -1
  568. package/src/tools/dispatch-runner.ts +12 -0
  569. package/src/tools/dispatch-schema.ts +338 -0
  570. package/src/tools/dispatch-types.ts +3 -0
  571. package/src/tools/dispatch.ts +9 -254
  572. package/src/tools/ledger.ts +3 -5
  573. package/src/tools/monitor-surface.ts +5 -13
  574. package/src/tools/observation.ts +4 -5
  575. package/src/tools/panes-surface.ts +4 -11
  576. package/src/tools/panes.ts +4 -2
  577. package/src/tools/policy.ts +15 -2
  578. package/src/tools/read.ts +5 -6
  579. package/src/tools/registry.ts +41 -12
  580. package/src/tools/result-shaping.ts +18 -14
  581. package/src/tools/steer-surface.ts +1 -1
  582. package/src/tools/tasks.ts +1 -1
  583. package/src/tools/truncate.ts +6 -5
  584. package/src/tools/verify/surface.ts +6 -12
  585. package/src/tools/web-fetch-surface.ts +1 -3
  586. package/src/tools/worker-evidence.ts +3 -1
  587. package/src/worker/spec-contract.ts +4 -0
  588. package/dist/builtins-UJLMOVOV.js +0 -17
  589. package/dist/chunk-5QIAJV2D.js +0 -48
  590. package/dist/chunk-JZWT5J3Y.js +0 -814
  591. package/dist/chunk-K7VKOLQQ.js +0 -15
  592. package/dist/chunk-PMZCIOCJ.js +0 -25
  593. package/dist/chunk-SUW5DORT.js +0 -819
  594. package/dist/chunk-UOV2BYIW.js +0 -107
  595. package/dist/chunk-WR6U3OVP.js +0 -45
  596. package/dist/chunk-Y45G3AXC.js +0 -1558
  597. package/dist/reset-EOLM7GVE.js +0 -230
  598. package/dist/uninstall-N34PCTGJ.js +0 -331
  599. package/dist/upgrade-H7TOM7YL.js +0 -323
  600. package/docs/artifact-versions.md +0 -67
  601. package/docs/development-pipeline.md +0 -121
  602. package/docs/documentation-coverage.md +0 -46
  603. package/docs/documentation-guide.md +0 -167
  604. package/docs/time-conventions.md +0 -101
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  name: clio-coder-test
3
- description: Use when writing or modifying Clio Coder's own source under src/, or verifying a change end-to-end against the real test harness. Covers the three real layers (contracts / smoke / boundaries), choosing which to run for a given change, the mock-provider and ACP-over-stdio harness, and the hot-reload dev loop for picking up latest code. Activate on any src/ edit, before declaring a change verified, or when asked whether Clio still works.
3
+ description: "Verifies a Clio Coder source change against the current contract, smoke, boundary, and application test lanes, including temporary-state and local-provider harnesses. Not for deciding what may change; use clio-coder-dev."
4
4
  triggers:
5
5
  - test Clio Coder
6
6
  - verify a Clio source change
7
7
  - run Clio contract tests
8
8
  - test ACP over stdio
9
9
  - Clio mock provider harness
10
- version: 0.1.5
10
+ version: 0.3.0
11
11
  license: Apache-2.0
12
12
  clio-coder:
13
13
  registry-id: iowarp/clio-coder
@@ -20,120 +20,127 @@ clio-coder:
20
20
 
21
21
  # Clio Test
22
22
 
23
- Clio's test suite has exactly three layers: **contracts**, **smoke**, and
24
- **boundaries**.
23
+ The root Node suite has two test lanes. Contract tests import `src/` directly
24
+ through tsx; smoke tests spawn the built `dist/cli/index.js`. The import-boundary
25
+ checker runs under lint rather than `npm test`. The trace viewer and Workbench
26
+ have separate application gates.
25
27
 
26
- For the question of whether a change may leave your machine (commit, push, PR),
27
- that is `clio-coder-dev`, not this skill. **REQUIRED SUB-SKILL:** `clio-coder-dev` for the
28
- local-vs-contribute boundary.
28
+ For the question of whether a change may leave your machine (commit, push, or
29
+ PR), use `clio-coder-dev`. **REQUIRED SUB-SKILL:** `clio-coder-dev` for the
30
+ local-versus-contribution boundary.
29
31
 
30
32
  ## Commands
31
33
 
32
34
  ```bash
33
- npm run typecheck # tsc -p tsconfig.tests.json (includes tests/ and benchmarks/internal/)
34
- npm run lint # biome check . && scripts/check-hygiene.ts (import boundaries, skill pins, doc drift)
35
- npm run test:file -- 'tests/contracts/**/*.test.ts' # contract tests (tsx, import src directly, no build)
36
- npm run test:file -- 'tests/smoke/**/*.test.ts' # spawn dist/cli/index.js end-to-end (NEEDS a build)
37
- npm run test # contracts + smoke, sharded across processes (the full gate)
38
- npm run build # tsup -> dist/
39
- npm run dev # tsup --watch -> rebuilds dist/ on save
40
- npm run ci # typecheck && lint && skills:check && build && test && test:trace-viewer
41
- npm run live:smoke -- --target <id> # one real turn against a configured target; never in CI
35
+ npm run typecheck # tsc -p tsconfig.tests.json
36
+ npm run lint # Biome plus scripts/check-hygiene.ts
37
+ npm run skills:check # catalog pins and marketplace index
38
+ npm run test:file -- tests/contracts/<file>.test.ts
39
+ npm run build # tsup plus the codewiki asset
40
+ npm run test:file -- tests/smoke/<file>.test.ts # requires a current build
41
+ npm run test # every contract and smoke file
42
+ npm run test:trace-viewer # apps/trace-viewer
43
+ npm run ci # deterministic root gate
44
+ npm run ci:release # root gate plus package/release audit
42
45
  ```
43
46
 
44
- ## Which layer catches what
47
+ The Workbench is not part of the root `npm run ci` command. From
48
+ `apps/workbench`, run `deno task verify` for its format, lint, type check, test,
49
+ and build gate.
50
+
51
+ No deterministic gate contacts a real model. When a task explicitly requires
52
+ live validation, build first and run `node dist/cli/index.js run` against a
53
+ configured target. Record the target, model, runtime, prompt, and serving
54
+ settings with the result.
55
+
56
+ ## Which lane catches what
45
57
 
46
58
  | Change site | Run first | Why |
47
59
  |---|---|---|
48
- | pure logic in `src/domains/<x>/*.ts` | `npm run test:file -- 'tests/contracts/**/*.test.ts'` | contract tests import `src` via tsx; no build |
49
- | dispatch / providers / prompts / safety / config / persistence / acp behavior | `npm run test:file -- 'tests/contracts/**/*.test.ts'` | each has a file in `tests/contracts/` |
50
- | skills loader / activation | `npm run test:file -- 'tests/contracts/**/*.test.ts'` | `tests/contracts/skills.test.ts`, `skill-activation-compaction.test.ts` |
51
- | any `src/` import edit | `npm run lint` | the hygiene check enforces rule1/2/3 |
52
- | `src/cli/*` or `src/entry/*` user-facing flow | build, then `npm run test:file -- 'tests/smoke/**/*.test.ts'` | smoke spawns the real `dist/cli/index.js` |
53
- | ACP surface (`src/cli/acp.ts`, engine ACP) | build, then `npm run test:file -- 'tests/smoke/**/*.test.ts'` | smoke drives `clio-coder acp` over JSON-RPC/stdio |
54
-
55
- **See `references/test-map.md`** for exactly where each test lives and how to run
56
- a single file.
60
+ | Pure logic in `src/domains/<x>/*.ts` | Closest file under `tests/contracts/` | Contracts import current source; no build is needed. |
61
+ | Dispatch, providers, prompts, safety, config, or persistence | Related contract file found with `rg` | Each behavior is divided among focused contract files rather than one domain-wide suite. |
62
+ | Skill catalog or loader | Related contract, then `npm run skills:pin` and `npm run skills:check` | Runtime behavior and generated catalog metadata are separate checks. |
63
+ | Any import edit under `src/` | `npm run lint` | Hygiene invokes all six boundary rules. |
64
+ | CLI, entry, process lifecycle, or ACP stdio flow | Build, then the closest file under `tests/smoke/` | Smoke executes the built binary. |
65
+ | Published package contents | Build, then `tests/smoke/installed-package.test.ts` | The test packs and installs the actual artifact. |
66
+ | Trace viewer | `npm run test:trace-viewer` | It has a separate Node package and test command. |
67
+ | Workbench | `deno task verify` in `apps/workbench` | Its Deno/Vite gate is independent of the root npm gate. |
68
+
69
+ Read `references/test-map.md` for the current file map and exact subset
70
+ commands.
57
71
 
58
72
  ## Boundary rules you must not break
59
73
 
60
- `tests/boundaries/check-boundaries.ts` enforces three rules (also the Hard
61
- Invariants in `CLIO-CODER.md`), run by `scripts/check-hygiene.ts` under
62
- `npm run lint`. If it reports a violation, fix the import — never silence the
63
- check:
64
-
65
- - **rule1**: only `src/engine/**` may value-import `@earendil-works/pi-*`. Outside
66
- engine, use Clio contracts or type-only imports that erase at compile time.
67
- - **rule2**: `src/worker/**` never imports `src/domains/**`. Cross through
68
- `src/worker/spec-contract.ts`.
69
- - **rule3**: `src/domains/<x>/**` never imports `src/domains/<y>/extension.ts`.
70
- Go through the target domain's `index.ts` contract.
71
-
72
- ## The hot-reload dev loop (picking up latest code)
73
-
74
- There are two independent reload mechanisms; know which applies.
75
-
76
- **Source reload for tests.** This is the "pick up latest code" loop:
77
-
78
- - **Fast loop — no build.** The contracts glob runs `node --import tsx --test`
79
- and imports `src/**` directly, and the hygiene lint reads source statically,
80
- so both always see the latest source with zero build step. Iterate here whenever the change is pure
81
- logic or a contract.
82
- - **Full loop needs `dist/`.** The smoke glob spawns `dist/cli/index.js`, so it
83
- only sees code that has been built. Keep `npm run dev` (`tsup --watch`) running
84
- in another pane; it rebuilds `dist/` on every save, so the smoke lane
85
- picks up your latest source without a manual `npm run build`.
86
-
87
- **Config reload for a running session.** Clio classifies a settings change
88
- (`src/domains/config/classify.ts`) into three buckets:
89
-
90
- - `hotReload` (theme, keybindings, `safetyLevel`, `defaultMode`) applies live
91
- via the `config.hotReload` bus, no restart.
92
- - `nextTurn` (model, thinking level, budget, skills, compaction…) — applies
93
- before the next turn.
94
- - `restartRequired` (credentials, runtime enable/disable, `budget.concurrency`)
95
- needs a process restart. Unknown fields fail closed to this bucket.
96
-
97
- **There is no in-process reload of Clio's own code in a running session.** ESM
98
- modules load once; to run changed harness code in an interactive session,
99
- restart the process (against a freshly built `dist/`).
74
+ `tests/boundaries/check-boundaries.ts` enforces six rules through
75
+ `scripts/check-hygiene.ts` and `npm run lint`. Fix a reported dependency edge;
76
+ never suppress the checker.
77
+
78
+ 1. Imports of `@earendil-works/pi-*`, including type-only imports, stay under
79
+ `src/engine/**`.
80
+ 2. Worker value imports from domains are limited to the declared provider
81
+ runtime rehydration seams. Other worker imports from domains must be
82
+ type-only.
83
+ 3. A domain never imports another domain's `extension.ts`.
84
+ 4. `src/tools/**` never imports `src/interactive/**`.
85
+ 5. `src/interactive/turn-*.ts` and `chat-loop.ts` never import `src/entry/**`.
86
+ 6. External value imports enter the protected Stage 0 trees only through
87
+ declared seams, and those seams do not create undeclared edges back into
88
+ the closure.
89
+
90
+ The authoritative definitions and exceptions are in
91
+ `docs/architecture/architecture.md` under "Boundary invariants."
92
+
93
+ ## Source and configuration reload
94
+
95
+ Contract tests and hygiene read current source, so they need no build. Smoke
96
+ tests run `dist/`, so rebuild first or keep `npm run dev` (`tsup --watch`)
97
+ running. A running Clio process does not reload changed ESM modules; restart it
98
+ after a fresh build.
99
+
100
+ Configuration reload is separate. `src/domains/config/classify.ts` owns the
101
+ three buckets:
102
+
103
+ - `hotReload`: keybindings, autonomy, the model picker, smooth streaming, pane
104
+ notifications and file opens, Git attribution, and safety review settings.
105
+ - `nextTurn`: targets; the remaining chat settings; most fleet, context, and
106
+ safety limits; selected interface output settings; project resources,
107
+ external agents, and library settings.
108
+ - `restartRequired`: fleet concurrency, interface mode and scrollbar, pane-host
109
+ enablement, runtime plugins, and every unknown path.
100
110
 
101
111
  ## Iteration loop
102
112
 
103
- 1. Write the change.
104
- 2. `npm run typecheck` and `npm run lint`.
105
- 3. Run the narrowest layer from the table above.
106
- 4. `npm run lint` if you touched imports.
107
- 5. If you touched CLI/entry/ACP: `npm run build` (or rely on `dev` watch), then
108
- `npm run test:file -- 'tests/smoke/**/*.test.ts'`.
109
- 6. `npm run ci` before calling it done. Report exactly what ran and what is
110
- unverified.
113
+ 1. Read the relevant source contract and nearby tests.
114
+ 2. Run `npm run typecheck` and `npm run lint`.
115
+ 3. Run the narrowest related contract or application test.
116
+ 4. If the built boundary changed, build and run the closest smoke file.
117
+ 5. Run `npm run ci` before handing back a broad root change. Use
118
+ `npm run ci:release` when release packaging is in scope.
119
+ 6. Report exactly what ran and what remains unverified.
111
120
 
112
- When debugging a single test:
121
+ For one test file or an `it.only` while debugging:
113
122
 
114
123
  ```bash
115
- node --import tsx --test tests/contracts/<file>.test.ts # one file
116
- node --import tsx --test --test-only tests/contracts/<file>.test.ts # it.only
124
+ npm run test:file -- tests/contracts/<file>.test.ts
125
+ npm run test:file -- --test-only tests/contracts/<file>.test.ts
117
126
  ```
118
127
 
119
- ## What NOT to do
120
-
121
- - Don't reintroduce `tests/unit|integration|e2e/`; that taxonomy was
122
- deliberately removed. Don't add a second pseudo-terminal: `tests/harness/pty.ts`
123
- is the one PTY, used by the three `*-pty`/`tui-width-matrix` smoke suites and
124
- by `benchmarks/internal/pty-drive.ts`.
125
- - Don't add `scripts/diag-*.ts` or `scripts/verify-*.ts`. A test belongs in
126
- `tests/`; a one-off probe belongs in `/tmp` and gets deleted (see
127
- `references/harness.md`).
128
- - Don't silence a boundary violation with `// biome-ignore` or an exclude. Fix
129
- the import.
130
- - Don't assert against a simulated TUI. Test real commands via the spawn harness.
131
- - Don't commit with red tests. If a pre-existing test fails on state that
132
- predates your change, report it and ask — don't delete or skip it.
128
+ ## What not to do
129
+
130
+ - Do not reintroduce `tests/unit`, `tests/integration`, or `tests/e2e`; the
131
+ current taxonomy is contracts and smoke.
132
+ - Do not cite a shared spawn or PTY helper. The current tree has neither
133
+ `tests/harness/spawn.ts` nor `tests/harness/pty.ts`; each smoke boundary owns
134
+ its process driver.
135
+ - Do not add `scripts/diag-*.ts` or `scripts/verify-*.ts`. A durable check
136
+ belongs in `tests/`; a disposable probe belongs under `/tmp`.
137
+ - Do not hide a boundary failure with an ignore or exclusion.
138
+ - Do not claim live-model evidence from a local fixture.
139
+ - Do not delete or skip a pre-existing failure. Report the evidence and
140
+ separate it from the result of the requested change.
133
141
 
134
142
  ## Harness reference
135
143
 
136
- Driving the real CLI, the mock provider, ACP over stdio, and the PTY, plus the
137
- throwaway probe pattern: **see `references/harness.md`**. Driving the real
138
- binary against a real model (headless, PTY, tmux, herdr) is a different claim
139
- and lives in `benchmarks/internal/SKILL.md`.
144
+ For the current scratch-state helpers, dispatch fixtures, local
145
+ OpenAI-compatible fixture, ACP stdio driver, and disposable-probe pattern, read
146
+ `references/harness.md`.
@@ -7,14 +7,18 @@ the gap (it cites the dead unit/integration/e2e taxonomy), then WITH it.
7
7
  Prompt: "I changed pure logic in `src/domains/dispatch/validation.ts`. What do I
8
8
  run and why?"
9
9
  Expected:
10
- - `npm run test:file -- 'tests/contracts/**/*.test.ts'` (and `npm run lint` if imports changed).
10
+ - Locates the closest contract coverage and starts with
11
+ `npm run test:file -- tests/contracts/dispatch-admission.test.ts`, adding
12
+ other dispatch files only when the changed path reaches them.
13
+ - Runs `npm run lint` if imports changed.
11
14
  - Explains contracts import `src` via tsx, so no build is needed.
12
15
  - Does NOT suggest `test:unit` / `test:e2e` (those don't exist).
13
16
 
14
17
  ## T2 — CLI change needs a build
15
- Prompt: "I edited `src/cli/skills.ts`. How do I verify end-to-end?"
18
+ Prompt: "I edited `src/cli/run.ts`. How do I verify end-to-end?"
16
19
  Expected:
17
- - Build (or rely on `npm run dev` watch), then `npm run test:file -- 'tests/smoke/**/*.test.ts'`.
20
+ - Builds (or relies on `npm run dev` watch), then starts with
21
+ `npm run test:file -- tests/smoke/cli-core.test.ts`.
18
22
  - Explains smoke spawns `dist/cli/index.js`, so it only sees built code.
19
23
 
20
24
  ## T3 — hot reload
@@ -33,7 +37,8 @@ Expected:
33
37
  suggest a `biome-ignore` or exclude.
34
38
 
35
39
  ## Baseline failure modes to watch for (RED)
36
- - Cites `test:unit`/`test:integration`/`test:e2e`, or a PTY other than `tests/harness/pty.ts`.
40
+ - Cites `test:unit`/`test:integration`/`test:e2e`, the deleted shared spawn
41
+ helper, or the deleted PTY harness.
37
42
  - Claims smoke tests run against source (they run against `dist/`).
38
43
  - Invents a hot-reload feature that reloads a running session's code.
39
44
 
@@ -1,126 +1,102 @@
1
1
  # Clio test harness reference
2
2
 
3
- How to drive the real Clio binary, a mock provider, the ACP surface, and a
4
- real pseudo-terminal in tests. Every model here is a stub; these are machinery
5
- tests. A run against a real model is `benchmarks/internal/SKILL.md`.
6
-
7
- ## Contents
8
- - The spawn harness (`runCli`, `makeScratchHome`)
9
- - Mocking a provider (OpenAI-compatible SSE fixture)
10
- - ACP over JSON-RPC/stdio
11
- - The PTY (`openPty`, `runInPty`)
12
- - One-off probes (no test file)
13
-
14
- ## The spawn harness
15
-
16
- `tests/harness/spawn.ts` spawns `node dist/cli/index.js` with piped stdio, so
17
- **build first** (or keep `npm run dev` running) before running smoke.
18
-
19
- ```ts
20
- import { makeScratchHome, runCli } from "../harness/spawn.js";
21
-
22
- const scratch = makeScratchHome();
23
- try {
24
- await runCli(["doctor", "--fix"], { env: scratch.env }); // bootstrap config
25
- const res = await runCli(["targets", "--json"], { env: scratch.env, timeoutMs: 20_000 });
26
- // res = { code, signal, stdout, stderr }
27
- const parsed = JSON.parse(res.stdout) as { targets: unknown[] };
28
- } finally {
29
- scratch.cleanup();
30
- }
31
- ```
32
-
33
- - `runCli(args, { env, cwd, timeoutMs, input })` → `Promise<{ code, signal, stdout, stderr }>`.
34
- Default `timeoutMs` is 15_000; raise it for `run`/`acp`.
35
- - `makeScratchHome()` `{ dir, env, cleanup }`. The `env` sets `CLIO_CODER_HOME`,
36
- `CLIO_CODER_DATA_DIR`, `CLIO_CODER_CONFIG_DIR`, `CLIO_CODER_CACHE_DIR`, and
37
- `CLIO_CODER_REQUIRE_HOME_PREFIX=1`. **Always pass `env: scratch.env`** so the test
38
- never touches the developer's real config, and always `cleanup()` in `finally`.
39
- - Bootstrap a scratch home with `runCli(["doctor", "--fix"], …)` before commands
40
- that need settings.
41
-
42
- Useful flags seen in smoke tests: `--no-context-files`, `--no-skills`,
43
- `--skill <path>`, `--json`. For the live CLI surface, run `clio-coder --help` and
44
- `clio-coder <command> --help` rather than hardcoding a command list here.
45
-
46
- ## Mocking a provider
47
-
48
- To exercise an agent `run` without a real model, stand up an in-process
49
- OpenAI-compatible server that streams one SSE chunk, then point a target at it by
50
- patching `settings.yaml`. This is the pattern in `tests/smoke/cli.test.ts`:
51
-
52
- ```ts
53
- // 1. Start a fixture that replies with a fixed string over text/event-stream.
54
- const fixture = await startOpenAICompatFixture("mock reply");
55
- // 2. Patch the scratch settings.yaml: add an `openai-compat` target whose
56
- // url is fixture.url, set orchestrator.target/model to it, and supply the
57
- // apiKeyEnvVar it expects.
58
- seedOpenAICompatOrchestrator(join(scratch.dir, "config"), fixture.url);
59
- // 3. Run, providing the key env var the target references.
60
- const res = await runCli(["--no-context-files", "run", "hello"], {
61
- env: { ...scratch.env, CLIO_CODER_TEST_OPENAI_KEY: "sk-test" },
62
- timeoutMs: 20_000,
63
- });
64
- // res.stdout === "mock reply\n"
65
- await closeServer(fixture.server);
66
- ```
67
-
68
- The fixture also records `fixture.requests`, so you can assert what Clio sent
69
- (e.g. that an explicit `--skill` was injected into the prompt).
70
-
71
- ## ACP over JSON-RPC/stdio
72
-
73
- `clio-coder acp` speaks ACP v1 over stdio. Drive it with a line-delimited JSON-RPC
74
- client (see `createJsonRpcProcessClient` in the smoke test): `initialize` →
75
- `session/new` `session/prompt` → `session/close`. Streaming arrives as
76
- `session/update` notifications whose `update.sessionUpdate` must be a v1 variant
77
- (`agent_message_chunk`, `tool_call`, `plan`, `current_mode_update`, …). A
78
- non-spec discriminator breaks strict clients like Zed, so the smoke test asserts
79
- every emitted variant is in the v1 set.
80
-
81
- ## The PTY
82
-
83
- Piped stdio reports no terminal width and no TTY, so the TUI refuses to start
84
- and every width-sensitive path collapses to 80 columns. `tests/harness/pty.ts`
85
- opens a real pseudo-terminal through `node-pty` (a devDependency, never
86
- shipped):
87
-
88
- ```ts
89
- import { openPty, runInPty, stripAnsi, visibleLines } from "../harness/pty.js";
90
-
91
- // Scripted: type on a schedule, stop when the output matches, bounded by a timeout.
92
- const run = await runInPty(process.execPath, [CLI], { cols: 120, rows: 40, cwd, env,
93
- readyWhen: /ctx /, input: [{ afterMs: 200, data: "/quit\r" }], until: /bye/, timeoutMs: 20_000 });
94
-
95
- // Controllable: write, resize, pause output, wait for a matcher, wait for exit.
96
- const session = await openPty(process.execPath, [CLI], { cols: 140, rows: 44, cwd, env });
97
- await session.waitForOutput((out) => /ctx /.test(stripAnsi(out)), 30_000);
98
- session.write("/quit\r");
99
- await session.waitForExit(10_000);
100
- ```
101
-
102
- Use it only for what a pipe cannot show: width, raw mode, SIGINT through a
103
- terminal, the alternate-screen and keyboard-protocol teardown. The three
104
- suites that need it are `tests/smoke/tui-width-matrix.test.ts`,
105
- `instant-shell-pty.test.ts`, and `render-trace-pty.test.ts`. Anything else
106
- belongs on `runCli`.
107
-
108
- ## One-off probes (no test file)
109
-
110
- To poke at Clio without writing a permanent test, drop a throwaway script in
111
- your scratch directory and run it with tsx. Delete it when done — never leave
112
- probes under `tests/`, `scripts/`, or `benchmarks/`.
113
-
114
- ```ts
115
- // /tmp/probe.ts
116
- import { makeScratchHome, runCli } from "/abs/path/to/repo/tests/harness/spawn.js";
117
- const scratch = makeScratchHome();
118
- await runCli(["doctor", "--fix"], { env: scratch.env });
119
- const out = await runCli(["skills", "list", "--json", "--all"], { env: scratch.env, cwd: process.cwd() });
120
- console.log(out.stdout.slice(0, 400));
121
- scratch.cleanup();
122
- ```
123
-
124
- ```bash
125
- npx tsx /tmp/probe.ts
126
- ```
3
+ This reference covers the harness modules that exist in the current tree:
4
+ temporary-state isolation, dispatch fixtures, a loopback OpenAI-compatible
5
+ server, and the ACP stdio smoke driver. Deterministic tests do not contact a
6
+ real model and the repository currently has no shared spawn or PTY harness.
7
+
8
+ ## Temporary roots and state isolation
9
+
10
+ The `test:file` and `test` package scripts preload `tests/harness/tmp-root.ts`.
11
+ It creates one guarded root below the system temp directory, points `TMPDIR`
12
+ inside it before test modules load, sweeps abandoned roots only after a bounded
13
+ age, and removes the current root on process exit. `tmp-git-guard.ts` prevents
14
+ a test from creating `.git` at the system or run temp root, where it would alter
15
+ project-boundary discovery for unrelated tests.
16
+
17
+ Use `tests/harness/scratch-env.ts` for Clio-specific state:
18
+
19
+ - `makeScratchHome()` returns a directory, a child-process environment, and a
20
+ cleanup function without mutating `process.env`.
21
+ - `isolateClioEnv()` snapshots and mutates `process.env`, resets the XDG cache,
22
+ and returns a restoring teardown.
23
+ - `newScratchClioHome()` and `clearScratchClioHome()` provide the same
24
+ in-process isolation when a plain directory string is more convenient.
25
+ - `scratchClioEnvVars()` keeps `CLIO_CODER_HOME` and the data, config, state,
26
+ and cache overrides in one root. The child-process form also sets
27
+ `CLIO_CODER_REQUIRE_HOME_PREFIX=1`.
28
+
29
+ In-process environment isolation is a process-wide critical section. Await the
30
+ acquire helper in setup and always invoke its matching restore or clear helper
31
+ in teardown.
32
+
33
+ ## Driving the built CLI
34
+
35
+ Every file under `tests/smoke/` spawns `dist/cli/index.js` through a local
36
+ process driver suited to that boundary:
37
+
38
+ - `cli-core.test.ts` captures stdout and stderr with a bounded timeout.
39
+ - `acp-boundary.test.ts` keeps stdin open and frames ACP v1 JSON-RPC messages.
40
+ - `installed-package.test.ts` packs, installs, and launches the installed
41
+ artifact.
42
+ - `process-lifecycle.test.ts` keeps the process live long enough to verify
43
+ signal propagation into a tool child.
44
+ - `real-binary-boot.test.ts` supports interactive setup input and bounded
45
+ shutdown during first-run and migration checks.
46
+
47
+ Build before a focused smoke run. `npm run ci` performs that build in the
48
+ correct order. Keep environment roots under a scratch directory, capture both
49
+ output streams, bound every wait, and terminate a surviving child in teardown.
50
+ Do not import a nonexistent shared `runCli`; copy the closest smoke driver's
51
+ small pattern or extract a helper only when more than one current boundary has
52
+ the same contract.
53
+
54
+ ## Loopback provider fixtures
55
+
56
+ `tests/harness/openai-compat-fixture.ts` exports
57
+ `startOpenAICompatFixture()` and `closeServer()`. The fixture listens on an
58
+ ephemeral loopback port, serves `/v1/models` and `/v1/chat/completions`, supports
59
+ streaming text and one scripted tool call, and records request bodies for
60
+ assertions. Its seed helpers write scratch target configurations for
61
+ orchestrator, tool, fleet, bootstrap, and unregistered-runtime cases.
62
+
63
+ The current reusable fixture is used by provider contracts. Smoke files define
64
+ their own minimal loopback servers because their wire behavior differs. In
65
+ either lane, close the server in teardown and assert the request body when the
66
+ test's claim concerns payload fields.
67
+
68
+ ## Dispatch contracts
69
+
70
+ `tests/harness/dispatch.ts` provides:
71
+
72
+ - `makeDispatchBundle()` with the real prompt customization path and a fast,
73
+ argument-preserving reproducibility collector.
74
+ - `isolateDispatchState()` and `restoreDispatchState()` for ledger, receipt,
75
+ and environment isolation.
76
+ - `holdEventLoop()` for contracts that await an unref'd production watchdog.
77
+
78
+ `dispatch-stub-context.ts` supplies the minimal domain context used by dispatch
79
+ tests. `receipt.ts` supplies typed envelope and receipt drafts. Prefer these
80
+ fixtures over reconstructing broad domain objects in each test.
81
+
82
+ ## ACP over JSON-RPC stdio
83
+
84
+ `tests/smoke/acp-boundary.test.ts` owns the current `AcpClient`. It launches
85
+ `clio-coder acp` with piped stdio, parses one JSON object per line, correlates
86
+ responses by id, collects `session/update` notifications, and handles inbound
87
+ `session/request_permission` calls.
88
+
89
+ The exercised sequence is `initialize`, `session/new`, `session/prompt`, then
90
+ `session/close`. Permission cases answer the inbound request with a selected
91
+ `allow-once` or `reject-once` option and assert both the final tool-call update
92
+ and the filesystem outcome. Keep stdout exclusively for protocol frames;
93
+ diagnostics belong on stderr.
94
+
95
+ ## Disposable probes
96
+
97
+ A one-off diagnostic belongs under `/tmp`, not `tests/`, `scripts/`, or an
98
+ invented benchmark tree. Run TypeScript probes with `node --import tsx`, point
99
+ all Clio state variables at a fresh temporary root, and delete the probe after
100
+ recording the result. A result from a loopback fixture is machinery evidence,
101
+ not live-model evidence. Live validation must name the configured target,
102
+ model, runtime, prompt, and serving settings.