@iowarp/clio-coder 0.5.1 → 0.5.2

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 (263) hide show
  1. package/.claude-plugin/marketplace.json +4 -4
  2. package/CHANGELOG.md +24 -0
  3. package/CONTRIBUTING.md +9 -0
  4. package/README.md +3 -3
  5. package/ROADMAP.md +30 -5
  6. package/dist/{acp-X3N7JDGS.js → acp-F6PGOFZ4.js} +2 -2
  7. package/dist/{agents-UYGSMAWR.js → agents-ZHP4R6EX.js} +22 -21
  8. package/dist/assets/codewiki.json +1 -1
  9. package/dist/{auth-CEDCO6O6.js → auth-N75U2H3Z.js} +4 -4
  10. package/dist/{chunk-DGMY2DWE.js → chunk-23UIXH6Z.js} +3 -3
  11. package/dist/{chunk-QTYRMBW6.js → chunk-36XVK5P5.js} +5 -5
  12. package/dist/{chunk-BIQLF3NZ.js → chunk-3DZ4LPLS.js} +6 -6
  13. package/dist/{chunk-7VNLPEUG.js → chunk-3GSPCWFX.js} +12 -12
  14. package/dist/{chunk-CRHPCPZP.js → chunk-4KC4CHKJ.js} +2 -2
  15. package/dist/{chunk-M5FPIZQW.js → chunk-4WJBWKMI.js} +2 -2
  16. package/dist/{chunk-KBUTSJSR.js → chunk-4XBYHXGK.js} +2 -2
  17. package/dist/{chunk-6W75D37F.js → chunk-53P775GE.js} +6 -3
  18. package/dist/{chunk-XZWSP67B.js → chunk-5APYAXCB.js} +2 -2
  19. package/dist/{chunk-A7G7OUND.js → chunk-67HPYNTJ.js} +2 -2
  20. package/dist/{chunk-5JQR5B4D.js → chunk-6KV4KCQZ.js} +4 -4
  21. package/dist/{chunk-V4XJWDHR.js → chunk-6UKFRTXI.js} +2 -1
  22. package/dist/{chunk-NDPF2N2L.js → chunk-7DW7CJW2.js} +2 -2
  23. package/dist/{chunk-5KQEUIWM.js → chunk-7LUEQODV.js} +4 -4
  24. package/dist/{chunk-LNOXCGN2.js → chunk-7UFDIOBT.js} +3 -3
  25. package/dist/{chunk-DXSETN72.js → chunk-7WUGNN43.js} +2 -2
  26. package/dist/{chunk-GW2KVAVI.js → chunk-AA3GRZWS.js} +2 -2
  27. package/dist/{chunk-6B76U65H.js → chunk-ADO3OQIC.js} +3 -3
  28. package/dist/{chunk-UX2L5CUD.js → chunk-AI36V3ON.js} +3 -3
  29. package/dist/{chunk-B7GY6QER.js → chunk-B26OUMJW.js} +2 -2
  30. package/dist/{chunk-LAR7DX5E.js → chunk-B5TASTCK.js} +153 -62
  31. package/dist/{chunk-TGWZXJ7L.js → chunk-BEMQK5Q7.js} +92 -84
  32. package/dist/{chunk-RNDCROSG.js → chunk-CNXU7TR2.js} +3 -3
  33. package/dist/{chunk-AKQ3N3L4.js → chunk-CVMUXT64.js} +35 -66
  34. package/dist/{chunk-733ZBT5P.js → chunk-E74MJF6G.js} +4 -4
  35. package/dist/{chunk-T2MDZES3.js → chunk-EBMTBE76.js} +3 -3
  36. package/dist/{chunk-OZ76TLGU.js → chunk-EEITU7S6.js} +2 -2
  37. package/dist/{chunk-7KI4ZSEB.js → chunk-ELDJWJKM.js} +97 -14
  38. package/dist/{chunk-GCQFN7YI.js → chunk-EMYEQLWO.js} +2 -2
  39. package/dist/{chunk-7FHSA7VB.js → chunk-EQPFEDFV.js} +222 -127
  40. package/dist/{chunk-TDGYTWM6.js → chunk-F4I3H56H.js} +2 -2
  41. package/dist/chunk-F6KCJO3U.js +523 -0
  42. package/dist/{chunk-FGSQHUCK.js → chunk-F6VKWTTY.js} +5 -5
  43. package/dist/{chunk-UJD5MPP6.js → chunk-FLNXQQ5B.js} +2 -2
  44. package/dist/{chunk-GGEEG7CD.js → chunk-FOSRJ2VZ.js} +4 -4
  45. package/dist/{chunk-ZARZ4POR.js → chunk-G5ZDQQE3.js} +3 -3
  46. package/dist/{chunk-QM7HFPQQ.js → chunk-G62JBPXN.js} +7 -7
  47. package/dist/{chunk-ZJPORZTC.js → chunk-GIAI7A2K.js} +2 -2
  48. package/dist/chunk-GPTR6OTU.js +2551 -0
  49. package/dist/{chunk-EZD2BXGP.js → chunk-GUFQPTQK.js} +2 -2
  50. package/dist/{chunk-OPD7GL6F.js → chunk-H6FQVNZC.js} +8 -7
  51. package/dist/chunk-H7REJ7L5.js +80 -0
  52. package/dist/{chunk-EYTLV3W3.js → chunk-HTWTORF7.js} +2 -2
  53. package/dist/{chunk-DF6PI6GN.js → chunk-I6UKQPGS.js} +3 -3
  54. package/dist/{chunk-ISHUS7HC.js → chunk-JRW236JT.js} +3 -3
  55. package/dist/{chunk-DE2LU267.js → chunk-KKAJGT3B.js} +3 -2
  56. package/dist/{chunk-OV62D6KO.js → chunk-KQMYL5GR.js} +3 -3
  57. package/dist/{chunk-WAISUJNQ.js → chunk-KWMFC7FN.js} +3 -3
  58. package/dist/{chunk-4D7QM7S5.js → chunk-LXYHCCIZ.js} +9 -9
  59. package/dist/{chunk-NFSK2VNU.js → chunk-LZMTVVN4.js} +2 -2
  60. package/dist/{chunk-ZNTGRDFA.js → chunk-M5PMRZSR.js} +123 -37
  61. package/dist/chunk-MMZMM6SW.js +131 -0
  62. package/dist/{chunk-FFYTC2KQ.js → chunk-MNABNEBX.js} +2 -2
  63. package/dist/{chunk-XMDBTYCH.js → chunk-N3CWOGVF.js} +3 -3
  64. package/dist/{chunk-VYRQHORQ.js → chunk-NMQSO6Z6.js} +4 -3
  65. package/dist/{chunk-4SYHGVDE.js → chunk-OQNCLZI4.js} +4 -4
  66. package/dist/{chunk-EG4ARXPC.js → chunk-OX6QTA4N.js} +3 -3
  67. package/dist/{chunk-P4GNZPXO.js → chunk-OYUS3UZP.js} +2 -2
  68. package/dist/{chunk-VWKR2NN5.js → chunk-PF36KOGI.js} +290 -111
  69. package/dist/{chunk-LFYA3HYH.js → chunk-PIU6BXXW.js} +2 -2
  70. package/dist/{chunk-EKV4UBCM.js → chunk-PZBQUJ2F.js} +2 -2
  71. package/dist/{chunk-7RET77VB.js → chunk-Q2HKY32Y.js} +2 -2
  72. package/dist/{chunk-VMTCZ2GR.js → chunk-Q4RMNWMZ.js} +4 -4
  73. package/dist/chunk-Q6FRR3AQ.js +48 -0
  74. package/dist/{chunk-6RJMYYIE.js → chunk-QJSIAJBY.js} +3 -3
  75. package/dist/{chunk-DOUISWEE.js → chunk-QOJ4ERMU.js} +5 -5
  76. package/dist/{chunk-IFPDAD7R.js → chunk-RWSRKXLT.js} +3 -3
  77. package/dist/{chunk-T33IYTZM.js → chunk-SAASVMIY.js} +3 -3
  78. package/dist/{chunk-2DTIWSAW.js → chunk-SEQDH6JC.js} +3 -3
  79. package/dist/{chunk-BRCOSE7O.js → chunk-SZUO5BSE.js} +2 -2
  80. package/dist/{chunk-HOEDA42N.js → chunk-T7HZ7KJF.js} +2 -2
  81. package/dist/{chunk-UCINIRHW.js → chunk-TPCZXWLT.js} +3 -3
  82. package/dist/{chunk-ZUKUCZYZ.js → chunk-TQ2KTH4A.js} +2 -2
  83. package/dist/{chunk-4WOOTKFD.js → chunk-U3FETNQB.js} +341 -20
  84. package/dist/{chunk-5B3RTYAK.js → chunk-UGDSB4AN.js} +2 -2
  85. package/dist/{chunk-VKHLUZNO.js → chunk-UZ7YBL43.js} +3 -3
  86. package/dist/{chunk-OXWRE2QJ.js → chunk-VKMSEO7Y.js} +4 -4
  87. package/dist/{chunk-FBXTHPNZ.js → chunk-VLX5VZ35.js} +5 -5
  88. package/dist/{chunk-KIAUZGKF.js → chunk-WAGBMMNX.js} +5 -5
  89. package/dist/{chunk-BFOSV5EZ.js → chunk-WX2YCH7F.js} +2 -2
  90. package/dist/{chunk-SAL2SBP4.js → chunk-XBIGUILU.js} +25 -10
  91. package/dist/{chunk-XOH3SD7H.js → chunk-XKYBFRWR.js} +5 -5
  92. package/dist/{chunk-U5QU5ZOD.js → chunk-XYPWFSU5.js} +3 -3
  93. package/dist/{chunk-YBUECLAF.js → chunk-YEJQDODA.js} +2 -2
  94. package/dist/{chunk-YQ6XEFVK.js → chunk-Z74OGONW.js} +39 -7
  95. package/dist/{chunk-I4ELN5BX.js → chunk-ZTNOEJRI.js} +2 -2
  96. package/dist/cli/index.js +25 -25
  97. package/dist/{clio-Z3JTEL2I.js → clio-4IKFE25F.js} +2 -2
  98. package/dist/{clio-context-tools-GR4OHFSO.js → clio-context-tools-OHJXYX4R.js} +25 -23
  99. package/dist/{code-nav-4X3OI6DK.js → code-nav-XPM3MY5I.js} +7 -7
  100. package/dist/{config-QYIRZHI7.js → config-343YS25T.js} +42 -40
  101. package/dist/{config-graph-TS3SGGQW.js → config-graph-WI263KDX.js} +42 -40
  102. package/dist/{configure-OX7KVJTQ.js → configure-GZDG4HER.js} +21 -21
  103. package/dist/{context-2BNF6HTP.js → context-4OFO7N7Y.js} +12 -12
  104. package/dist/{context-GTMUGAR4.js → context-JLK2RLOG.js} +41 -39
  105. package/dist/{context-NNLBES2Y.js → context-O6DIWCF6.js} +23 -21
  106. package/dist/{context-clear-FVJQBBL7.js → context-clear-MR7KOGQI.js} +41 -39
  107. package/dist/{context-working-set-MOE72SD6.js → context-working-set-YZAD3KWO.js} +14 -13
  108. package/dist/{data-tool-JJPBGMQJ.js → data-tool-EKD7DFHG.js} +7 -7
  109. package/dist/{detail-QZM3QAAU.js → detail-YZPHFEVJ.js} +42 -40
  110. package/dist/{dispatch-runner-2KSQO5FU.js → dispatch-runner-VKVXVTWJ.js} +43 -41
  111. package/dist/{doctor-2U6YR5NH.js → doctor-53AVQXAO.js} +16 -15
  112. package/dist/{doctor-deep-2EJQSHIZ.js → doctor-deep-BLRB2NCG.js} +5 -5
  113. package/dist/{eval-ZKK77JWZ.js → eval-P3BQSLQE.js} +21 -20
  114. package/dist/{evidence-POSEQW4Q.js → evidence-6LLI6SZH.js} +43 -41
  115. package/dist/{evidence-FMP7KZZ2.js → evidence-HTN3JLUO.js} +41 -39
  116. package/dist/{evidence-PJTOE7JA.js → evidence-NJRE3R5H.js} +41 -39
  117. package/dist/{evolve-JT6PAMZE.js → evolve-WWZHJVJP.js} +41 -39
  118. package/dist/{fleet-4XR2ZEOF.js → fleet-GGZ4BVJE.js} +63 -61
  119. package/dist/{fleet-6JJKNIMV.js → fleet-QG3IIWWM.js} +43 -41
  120. package/dist/{fleet-commands-L6WFT7KZ.js → fleet-commands-J2ZIKISQ.js} +7 -7
  121. package/dist/{fleet-decisions-BTQMWU5A.js → fleet-decisions-Y2Q7375Q.js} +8 -8
  122. package/dist/{fleet-graph-553DZ67Q.js → fleet-graph-TCBCCCBP.js} +11 -11
  123. package/dist/{fleet-inspect-SWJMFVDP.js → fleet-inspect-KOLKBC56.js} +43 -41
  124. package/dist/{fleet-preflight-KSIHWQAU.js → fleet-preflight-44UNCC4Y.js} +26 -24
  125. package/dist/{fleet-validate-7NLAE26R.js → fleet-validate-K2FXRZVA.js} +13 -13
  126. package/dist/{fleet-verify-QM6XU2KL.js → fleet-verify-AS444WDW.js} +41 -39
  127. package/dist/{fleet-view-RLKFHFCM.js → fleet-view-X4JU4J6O.js} +42 -40
  128. package/dist/gui/ops-worker.js +9 -9
  129. package/dist/gui/reads-worker.js +9 -8
  130. package/dist/{init-VBUPHABR.js → init-VSOWFHVL.js} +53 -51
  131. package/dist/{interactive-JCVBPVYT.js → interactive-JRCBENLZ.js} +154 -92
  132. package/dist/{interop-J7UOBOSF.js → interop-JR6BCY7R.js} +10 -10
  133. package/dist/{inventory-54G7FSVY.js → inventory-3JUGLVJI.js} +42 -40
  134. package/dist/{library-ROZAMUIL.js → library-7BOH3Y7N.js} +15 -15
  135. package/dist/{library-B3UPGY4V.js → library-7PFONXUI.js} +9 -9
  136. package/dist/{library-MXQA5DLT.js → library-TUYZMFIA.js} +7 -7
  137. package/dist/{library-import-2LTWOVBD.js → library-import-TJVXKLDK.js} +10 -10
  138. package/dist/{library-inventory-LJ3XHLWO.js → library-inventory-MD3AYTP4.js} +9 -9
  139. package/dist/{library-validation-DARHHUNW.js → library-validation-ZDLITEA3.js} +7 -7
  140. package/dist/{memory-5BPQSSOP.js → memory-Q2YVOKK5.js} +41 -39
  141. package/dist/{models-R6HILX6X.js → models-M7BOCW7F.js} +17 -16
  142. package/dist/{monitor-HVRKSFEQ.js → monitor-2HD3MC67.js} +46 -44
  143. package/dist/{orchestrator-OR7V4YWK.js → orchestrator-OUW3ZN6Y.js} +1890 -222
  144. package/dist/{panes-A743ONZ5.js → panes-TTPPSYCL.js} +3 -3
  145. package/dist/{preload-KLXFOX2F.js → preload-A47C2NUF.js} +41 -39
  146. package/dist/{providers-CMETPZNS.js → providers-T43W7EL4.js} +4 -4
  147. package/dist/{resources-FY6XYFN2.js → resources-TP6X2V6W.js} +20 -11
  148. package/dist/{run-UIDRUYAY.js → run-LDSBPMCS.js} +60 -58
  149. package/dist/{share-CAFMMQLM.js → share-URHKKMHR.js} +9 -9
  150. package/dist/{skills-ERKQUC7L.js → skills-E477MOOO.js} +13 -11
  151. package/dist/{skills-eval-JDAXOPWC.js → skills-eval-AIBR2L7H.js} +582 -92
  152. package/dist/{skills-inventory-TVUYJDVN.js → skills-inventory-HLMKY3R5.js} +13 -11
  153. package/dist/{slash-commands-MNKQ5QP3.js → slash-commands-LIIZKA5Y.js} +26 -24
  154. package/dist/{startup-background-PJMWTKVO.js → startup-background-JR2KDK6R.js} +42 -40
  155. package/dist/{steer-KKYXJSH4.js → steer-D7RTAPCM.js} +3 -3
  156. package/dist/{system-IVVZRKGI.js → system-X2P5N4IY.js} +14 -13
  157. package/dist/{targets-RFRUMCQ5.js → targets-VFFAKUFM.js} +25 -24
  158. package/dist/{tasks-6L2JJRC5.js → tasks-ERAWZA22.js} +6 -6
  159. package/dist/{trace-LA5MVR4Y.js → trace-MA5BT7XY.js} +3 -3
  160. package/dist/{usage-LA33SG3R.js → usage-WYFY2L6M.js} +49 -47
  161. package/dist/{verifiers-ECA5GIHL.js → verifiers-TYIW2XKF.js} +7 -7
  162. package/dist/{verify-R6QQCCEB.js → verify-242UFYTP.js} +6 -6
  163. package/dist/{web-fetch-PVZNMBOB.js → web-fetch-LRAGYU6Y.js} +3 -3
  164. package/dist/{wiki-generate-HL73TICA.js → wiki-generate-OFKOX2T6.js} +52 -50
  165. package/dist/worker/entry.js +30 -28
  166. package/docs/architecture/context-engine.md +2 -0
  167. package/docs/guide/context-continuity.md +49 -0
  168. package/docs/guide/proactive-memory.md +3 -0
  169. package/library/registry.yaml +292 -32
  170. package/library/skills/README.md +27 -2
  171. package/library/skills/context/context-handoff/SKILL.md +10 -4
  172. package/library/skills/meta/clio-coder-dev/SKILL.md +92 -88
  173. package/library/skills/meta/clio-coder-dev/evals.md +51 -46
  174. package/library/skills/meta/clio-coder-dev/plugin.json +2 -2
  175. package/library/skills/meta/clio-coder-dev/references/change-map.md +49 -0
  176. package/library/skills/meta/clio-coder-test/SKILL.md +89 -142
  177. package/library/skills/meta/clio-coder-test/evals.md +58 -62
  178. package/library/skills/meta/clio-coder-test/plugin.json +2 -2
  179. package/library/skills/meta/clio-coder-test/references/harness.md +3 -3
  180. package/library/skills/meta/clio-coder-test/references/lifecycle-validation.md +30 -0
  181. package/library/skills/meta/clio-coder-test/references/test-map.md +60 -89
  182. package/library/skills/registry.yaml +5 -5
  183. package/library/skills/skill-marketplace.json +12 -14
  184. package/package.json +1 -1
  185. package/src/cli/skills-eval.ts +1064 -54
  186. package/src/core/clio-repo.ts +3 -0
  187. package/src/core/tool-names.ts +1 -0
  188. package/src/domains/context/budget/inspection.ts +9 -0
  189. package/src/domains/context/budget/live-view.ts +418 -0
  190. package/src/domains/context/budget/pressure.ts +393 -0
  191. package/src/domains/context/budget/request-fit.ts +15 -0
  192. package/src/domains/evidence/build.ts +24 -0
  193. package/src/domains/memory/commit-state.ts +160 -0
  194. package/src/domains/memory/operations.ts +18 -10
  195. package/src/domains/memory/prompt-cache.ts +95 -0
  196. package/src/domains/memory/prompt-section.ts +50 -7
  197. package/src/domains/memory/relevance.ts +93 -0
  198. package/src/domains/memory/restoration.ts +78 -0
  199. package/src/domains/memory/store.ts +39 -1
  200. package/src/domains/middleware/memory-intervention.ts +116 -24
  201. package/src/domains/prompts/compiler.ts +1 -1
  202. package/src/domains/prompts/extension.ts +38 -1
  203. package/src/domains/resources/index.ts +11 -0
  204. package/src/domains/resources/skills/catalog-view.ts +571 -0
  205. package/src/domains/resources/skills/lexical-match.ts +136 -0
  206. package/src/domains/resources/skills/loader.ts +38 -0
  207. package/src/domains/resources/skills/promotion.ts +1 -55
  208. package/src/domains/resources/skills/provenance-pin.ts +50 -20
  209. package/src/domains/safety/action-classifier.ts +1 -0
  210. package/src/domains/session/compaction/branch-summary.ts +4 -1
  211. package/src/domains/session/compaction/compact.ts +18 -2
  212. package/src/domains/session/compaction/cut-point.ts +20 -1
  213. package/src/domains/session/compaction/tokens.ts +48 -3
  214. package/src/domains/session/context-accounting.ts +8 -1
  215. package/src/domains/session/continuity/carry.ts +59 -0
  216. package/src/domains/session/continuity/contract.ts +592 -0
  217. package/src/domains/session/continuity/evidence.ts +290 -0
  218. package/src/domains/session/continuity/fold.ts +1075 -0
  219. package/src/domains/session/continuity/note.ts +79 -0
  220. package/src/domains/session/continuity/operator-request.ts +104 -0
  221. package/src/domains/session/continuity/persistence.ts +408 -0
  222. package/src/domains/session/continuity/ports.ts +231 -0
  223. package/src/domains/session/continuity/projection.ts +538 -0
  224. package/src/domains/session/continuity/validate.ts +352 -0
  225. package/src/domains/session/entries.ts +50 -3
  226. package/src/domains/session/index.ts +48 -0
  227. package/src/domains/session/migrations/index.ts +7 -3
  228. package/src/domains/session/tree/fork.ts +15 -1
  229. package/src/engine/agent.ts +133 -9
  230. package/src/engine/session.ts +13 -6
  231. package/src/entry/orchestrator.ts +114 -31
  232. package/src/interactive/chat-loop.ts +216 -60
  233. package/src/interactive/chat-renderer.ts +99 -8
  234. package/src/interactive/context-overlay.ts +24 -3
  235. package/src/interactive/continuity-controller.ts +526 -0
  236. package/src/interactive/footer/dashboard.ts +12 -1
  237. package/src/interactive/footer/pages.ts +15 -7
  238. package/src/interactive/footer/widgets.ts +32 -7
  239. package/src/interactive/interactive-application.ts +2 -0
  240. package/src/interactive/interactive-slash-runtime.ts +43 -6
  241. package/src/interactive/model-session-replay.ts +130 -3
  242. package/src/interactive/output-reserve.ts +35 -0
  243. package/src/interactive/overlay-session-lifecycle.ts +18 -11
  244. package/src/interactive/session-transcript.ts +2 -1
  245. package/src/interactive/slash-commands.ts +20 -1
  246. package/src/interactive/turn-context.ts +685 -62
  247. package/src/interactive/turn-middleware.ts +39 -6
  248. package/src/interactive/turn-persistence.ts +15 -2
  249. package/src/interactive/turn-runtime.ts +48 -5
  250. package/src/tools/agent-tools.ts +3 -1
  251. package/src/tools/bootstrap.ts +6 -0
  252. package/src/tools/builtin-tool-catalog.ts +9 -0
  253. package/src/tools/context/index.ts +148 -113
  254. package/src/tools/context/surface.ts +11 -7
  255. package/src/tools/core-bootstrap.ts +4 -0
  256. package/src/tools/observation.ts +8 -2
  257. package/src/tools/policy.ts +3 -0
  258. package/src/tools/self-compact.ts +31 -0
  259. package/src/tools/surface.ts +1 -0
  260. package/src/tools/tasks.ts +1 -1
  261. package/dist/chunk-3OODBJ45.js +0 -1325
  262. package/dist/chunk-CTFPFW3H.js +0 -44
  263. package/dist/chunk-I4Y4WKZR.js +0 -386
@@ -1,13 +1,12 @@
1
1
  ---
2
2
  name: clio-coder-test
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."
3
+ description: "Validate Clio Coder changes using focused source regressions, built CLI and ACP fixtures, skill/library checks, and isolated package or GUI gates. Use when developing or diagnosing Clio itself; select checks from the changed behavior and report evidence without claiming unrun coverage."
4
4
  triggers:
5
- - test Clio Coder
6
- - verify a Clio source change
7
- - run Clio contract tests
8
- - test ACP over stdio
9
- - Clio mock provider harness
10
- version: 0.3.1
5
+ - validate a Clio change
6
+ - test Clio context compaction or memory
7
+ - verify Clio skill activation
8
+ - choose Clio test gates
9
+ version: 0.4.0
11
10
  license: Apache-2.0
12
11
  clio-coder:
13
12
  registry-id: iowarp/clio-coder
@@ -18,138 +17,86 @@ clio-coder:
18
17
  model-size: any
19
18
  ---
20
19
 
21
- # Clio Test
22
-
23
- The root Node suite has a small required contract/process lane, an installed-package
24
- qualification lane, and explicit extended development regressions. Contract tests
25
- import source through tsx; CLI tests use the current built binary. Lint owns static
26
- import boundaries and library pins. Publication performs only an exact-candidate
27
- preflight after successful qualification.
28
-
29
- For the question of whether a change may leave your machine (commit, push, or
30
- PR), use `clio-coder-dev`. **REQUIRED SUB-SKILL:** `clio-coder-dev` for the
31
- local-versus-contribution boundary.
32
-
33
- ## Commands
34
-
35
- ```bash
36
- npm run typecheck # tsc -p tsconfig.tests.json
37
- npm run lint # Biome plus scripts/check-hygiene.ts
38
- npm run skills:check # catalog pins and marketplace index
39
- npm run test:file -- tests/contracts/<file>.test.ts
40
- npm run build # tsup plus the codewiki asset
41
- npm run test:file -- tests/smoke/<file>.test.ts # requires a current build
42
- npm run test # required contracts and three process smoke files
43
- npm run test:full # explicit extended root investigation
44
- npm run test:gui:full # explicit extended web investigation
45
- pnpm --filter @iowarp/clio-coder-gui verify # app types, lint, tests, build, browser
46
- npm run ci # deterministic root gate
47
- npm run ci:release # qualify clean committed source and exact installed tarball
48
- npm run release:preflight # fast check of the unchanged qualified package
49
- ```
50
-
51
- The required web tests cover authentication, permissions, cancellation, worker RPC,
52
- egress and process ownership. The installed-package lane includes one real browser
53
- boot/reconnect against the installed server. The full web `verify` command is an
54
- explicit development investigation, including its viewport/accessibility matrix.
55
- Do not run full development tests repeatedly during release or publication.
56
-
57
- The separate trace viewer and the earlier workbench client are both retired. Use
58
- `test:gui` for the required app tests alone; app `verify` requires headless Chrome.
59
-
60
- No deterministic gate contacts a real model. When a task explicitly requires
61
- live validation, build first and run `node dist/cli/index.js run` against a
62
- configured target. Record the target, model, runtime, prompt, and serving
63
- settings with the result.
64
-
65
- ## Which lane catches what
66
-
67
- | Change site | Run first | Why |
68
- |---|---|---|
69
- | Pure logic in `src/domains/<x>/*.ts` | Closest file under `tests/contracts/` | Contracts import current source; no build is needed. |
70
- | 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. |
71
- | 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. |
72
- | Any import edit under `src/` | `npm run lint` | Hygiene invokes all six boundary rules. |
73
- | CLI, entry, process lifecycle, or ACP stdio flow | Build, then the closest file under `tests/smoke/` | Smoke executes the built binary. |
74
- | Published package contents | Build, then `tests/smoke/installed-package.test.ts` | The test packs and installs the actual artifact. |
75
- | Unified web application | `npm run test:gui` | Required authentication/runtime boundaries; full `verify` is optional development work. |
76
-
77
- Read `references/test-map.md` for the current file map and exact subset
78
- commands.
79
-
80
- ## Boundary rules you must not break
81
-
82
- `tests/boundaries/check-boundaries.ts` enforces six rules through
83
- `scripts/check-hygiene.ts` and `npm run lint`. Fix a reported dependency edge;
84
- never suppress the checker.
85
-
86
- 1. Imports of `@earendil-works/pi-*`, including type-only imports, stay under
87
- `src/engine/**`.
88
- 2. Worker value imports from domains are limited to the declared provider
89
- runtime rehydration seams. Other worker imports from domains must be
90
- type-only.
91
- 3. A domain never imports another domain's `extension.ts`.
92
- 4. `src/tools/**` never imports `src/interactive/**`.
93
- 5. `src/interactive/turn-*.ts` and `chat-loop.ts` never import `src/entry/**`.
94
- 6. External value imports enter the protected Stage 0 trees only through
95
- declared seams, and those seams do not create undeclared edges back into
96
- the closure.
97
-
98
- The authoritative definitions and exceptions are in
99
- `docs/architecture/architecture.md` under "Boundary invariants."
100
-
101
- ## Source and configuration reload
102
-
103
- Contract tests and hygiene read current source, so they need no build. Smoke
104
- tests run `dist/`, so rebuild first or keep `npm run dev` (`scripts/build.ts --watch`)
105
- running. A running Clio process does not reload changed ESM modules; restart it
106
- after a fresh build.
107
-
108
- Configuration reload is separate. `src/domains/config/classify.ts` owns the
109
- three buckets:
110
-
111
- - `hotReload`: keybindings, autonomy, the model picker, smooth streaming, pane
112
- notifications and file opens, Git attribution, and safety review settings.
113
- - `nextTurn`: targets; the remaining chat settings; most fleet, context, and
114
- safety limits; selected interface output settings; project resources,
115
- external agents, and library settings.
116
- - `restartRequired`: fleet concurrency, interface mode and scrollbar, pane-host
117
- enablement, runtime plugins, and every unknown path.
118
-
119
- ## Iteration loop
120
-
121
- 1. Read the relevant source contract and nearby tests.
122
- 2. Run `npm run typecheck` and `npm run lint`.
123
- 3. Run the narrowest related contract or application test.
124
- 4. If the built boundary changed, build and run the closest smoke file.
125
- 5. Run `npm run ci` before handing back a broad root change. Use
126
- `npm run ci:release` on the clean committed candidate when packaging is in scope.
127
- It records the exact source/artifact; use only `release:preflight` afterward.
128
- 6. Report exactly what ran and what remains unverified.
129
-
130
- For one test file or an `it.only` while debugging:
131
-
132
- ```bash
133
- npm run test:file -- tests/contracts/<file>.test.ts
134
- npm run test:file -- --test-only tests/contracts/<file>.test.ts
135
- ```
136
-
137
- ## What not to do
138
-
139
- - Do not reintroduce `tests/unit`, `tests/integration`, or `tests/e2e`; the
140
- current taxonomy is contracts and smoke.
141
- - Do not cite a shared spawn or PTY helper. The current tree has neither
142
- `tests/harness/spawn.ts` nor `tests/harness/pty.ts`; each smoke boundary owns
143
- its process driver.
144
- - Do not add `scripts/diag-*.ts` or `scripts/verify-*.ts`. A durable check
145
- belongs in `tests/`; a disposable probe belongs under `/tmp`.
146
- - Do not hide a boundary failure with an ignore or exclusion.
147
- - Do not claim live-model evidence from a local fixture.
148
- - Do not delete or skip a pre-existing failure. Report the evidence and
149
- separate it from the result of the requested change.
150
-
151
- ## Harness reference
152
-
153
- For the current scratch-state helpers, dispatch fixtures, local
154
- OpenAI-compatible fixture, ACP stdio driver, and disposable-probe pattern, read
155
- `references/harness.md`.
20
+ # Clio validation
21
+
22
+ Choose tests from the changed behavior and the code actually executed. The
23
+ canonical skill name is `clio-coder-test`. This
24
+ skill is independently usable: do not recursively load `clio-coder-dev`. Consult
25
+ it when implementation or repository coordination becomes part of the task.
26
+
27
+ ## Start with an evidence plan
28
+
29
+ Read the diff, relevant source/tests, `CONTRIBUTING.md`, and current package
30
+ scripts. Identify the claim, the failure boundary, and the smallest test that
31
+ can distinguish correct behavior. Existing tests may mix source imports with a
32
+ built CLI subprocess: inspect the test before deciding a build is unnecessary.
33
+
34
+ For a bug, reproduce it or explain why it cannot be reproduced. Add a behavioral
35
+ regression at the owning boundary when warranted. Assert externally meaningful
36
+ state, provider payload, persistence, filesystem outcome, or event ordering;
37
+ a mock-call assertion alone rarely proves the claimed fix. Do not add tests that
38
+ merely match wording for a reversible prose edit.
39
+
40
+ ## Select the lane
41
+
42
+ | Changed behavior | First useful checks |
43
+ | --- | --- |
44
+ | Pure policy or domain behavior | Closest `tests/contracts/` or `tests/extended/` file through `pnpm run test:file -- <file>` |
45
+ | Types, imports, domain seams | `pnpm run typecheck`; `pnpm run lint` enforces architecture boundaries |
46
+ | Prompt/tool/skill admission | Focused prompt-policy and tool activation tests, including restrictive modes and unavailable tools |
47
+ | Curated skill or resource package | Validate manifest/body/references; `skills:pin`, `skills:check`, `library:pin`, `library:check` |
48
+ | CLI, entry, ACP, child-process lifecycle | Build the candidate, then the owning smoke or extended-smoke file |
49
+ | GUI/API | `pnpm run check:gui` and `pnpm run test:gui`; root build where ACP fixtures require it |
50
+ | Package contents or installed behavior | `pnpm run test:package` against a current candidate build |
51
+ | Broad integrated implementation | `pnpm run ci`; affected extended suites that routine CI omits |
52
+ | Release candidate | Follow `docs/process/release-cut-checklist.md`; qualify the clean committed candidate before exact-artifact preflight |
53
+
54
+ Use [references/test-map.md](references/test-map.md) for source-grounded file
55
+ families and command semantics. Use [references/harness.md](references/harness.md)
56
+ when a test needs temporary state, providers, workers, or child processes.
57
+
58
+ ## Run without contaminating the agent doing the work
59
+
60
+ Use the package scripts so `tests/harness/tmp-root.ts` is preloaded. Isolate Clio
61
+ state with `scratch-env.ts`; restore process-wide environment changes in teardown.
62
+ Use ephemeral loopback fixtures and scripted providers for deterministic checks.
63
+ Do not use real credentials, operator sessions, shared server model loads, or
64
+ public inference as a default test dependency.
65
+
66
+ Source imports through tsx see current files. A subprocess of `dist/cli/index.js`
67
+ sees the build. Build in the assigned candidate worktree when main `dist/` backs
68
+ the running Clio process. A watch build refreshes files, not already imported ESM
69
+ modules; restart the separate candidate process for interactive verification.
70
+ Configuration hot reload is a different contract owned by
71
+ `src/domains/config/classify.ts`.
72
+
73
+ Run the narrow test first while iterating, then appropriate type/lint/integration
74
+ gates. Repeat or broaden only after changes, failures, or unresolved risks justify
75
+ it. Do not run expensive full/release/browser gates after every edit. Do not
76
+ suppress, delete, or relabel a failure to obtain a green report.
77
+
78
+ ## Lifecycle and context changes
79
+
80
+ For compaction, replay, memory, tools, or dispatch, read
81
+ [references/lifecycle-validation.md](references/lifecycle-validation.md). Prove
82
+ cancellation and late results, branch/session authority, request budget, exact
83
+ history, and persistence ordering as applicable. Append visibility is not fsync
84
+ durability. A scripted summary validates orchestration, not model understanding.
85
+
86
+ ## Live models and performance
87
+
88
+ Run live models only within the task's authorization and bounded spending plan.
89
+ Record target, model/runtime, effective context window, server capacity, sampler,
90
+ fixture/task identity, and cold/warm conditions. Separate missing measurements
91
+ from zero. Include failed attempts and summary/memory spending in trajectory
92
+ costs. Report sample count and variability; a lower estimated prompt size is not
93
+ proof of improved latency or task success.
94
+
95
+ ## Report precisely
96
+
97
+ List commands, outcomes/counts, candidate identity, failures/skips, and unverified
98
+ claims. Identify source versus built versus installed versus live evidence.
99
+ Explain any baseline failure with its reproduction; call a flake only with
100
+ supporting evidence. Keep raw temporary logs outside tracked product paths and
101
+ put concise evidence in the assigned sprint report. Passing checks authorize no
102
+ extra commit, remote write, version bump, or release step beyond the task.
@@ -1,62 +1,58 @@
1
- # Evals clio-coder-test
2
-
3
- Retrieval + application scenarios. Run a subagent WITHOUT the skill to capture
4
- the gap (it cites the dead unit/integration/e2e taxonomy), then WITH it.
5
-
6
- ## T1 pick the layer
7
- Prompt: "I changed pure logic in `src/domains/dispatch/validation.ts`. What do I
8
- run and why?"
9
- Expected:
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.
14
- - Explains contracts import `src` via tsx, so no build is needed.
15
- - Does NOT suggest `test:unit` / `test:e2e` (those don't exist).
16
-
17
- ## T2 CLI change needs a build
18
- Prompt: "I edited `src/cli/run.ts`. How do I verify end-to-end?"
19
- Expected:
20
- - Builds (or relies on `npm run dev` watch), then starts with
21
- `npm run test:file -- tests/extended-smoke/cli-core.test.ts`.
22
- - Explains smoke spawns `dist/cli/index.js`, so it only sees built code.
23
-
24
- ## T3 hot reload
25
- Prompt: "How do I keep testing without rebuilding every time?"
26
- Expected:
27
- - Fast loop (contracts/boundaries, tsx, no build) for logic/contracts.
28
- - `npm run dev` (`scripts/build.ts --watch`) keeps `dist/` fresh for smoke.
29
- - States there is no in-process code reload of a running session; restart for
30
- interactive testing. Distinguishes this from config hot-reload (classify.ts).
31
-
32
- ## T4 boundary violation
33
- Prompt: "`npm run lint` says a domain imports another domain's extension.ts.
34
- Quickest fix?"
35
- Expected:
36
- - Route through the target domain's `index.ts` contract (rule3). Does NOT
37
- suggest a `biome-ignore` or exclude.
38
-
39
- ## Baseline failure modes to watch for (RED)
40
- - Cites `test:unit`/`test:integration`/`test:e2e`, the deleted shared spawn
41
- helper, or the deleted PTY harness.
42
- - Claims smoke tests run against source (they run against `dist/`).
43
- - Invents a hot-reload feature that reloads a running session's code.
44
-
45
- ## Smoke record (2026-08-13)
46
-
47
- One representative scenario via `clio-coder eval skill` against Nemo-3.5-Lightning
48
- (30B local, llamacpp on mini), full-auto sandbox. NOT CLEANLY RUN: scenario id is T1; driver's --scenario S1 exited 2; re-run did not land before the time-box.
49
-
50
- ## T5 current application gates
51
- Prompt: "The web API changed. Which checks belong to this release?"
52
- Expected:
53
- - Builds the root CLI for ACP fixtures, then runs
54
- `pnpm --filter @iowarp/clio-coder-gui verify` with temporary state outside the checkout.
55
- - Names app type, API/worker boundary, test, client build and headless-browser checks.
56
- - Explains root `ci:release` includes web tests and the installed package audit.
57
- - Does not run the retired trace viewer or workbench gates.
58
-
59
- RED: the prior 0.3.0 instructions prescribe both obsolete application lanes.
60
- GREEN: the current instructions name only the unified app lane and retain the
61
- independent CLI/TUI/headless checks. This is a source/command reconciliation,
62
- not a claim of a new live-model skill evaluation.
1
+ # Behavioral scenarios: Clio validation
2
+
3
+ Authored scenarios only; no live-model pass is implied. Use isolated/read-only
4
+ forward testing and judge the evidence plan and outcomes rather than phrasing.
5
+
6
+ ## T1: pure policy change
7
+
8
+ Request: "The diff changes context pressure policy. Choose the smallest useful
9
+ checks and explain what they establish."
10
+ Expected: inspects owning tests, runs source-based focused cases, covers boundary
11
+ conditions, and adds type/lint checks proportionally. Does not invent test:unit.
12
+
13
+ ## T2: stale dist and active agent
14
+
15
+ Request: "I changed CLI startup and dist already exists; this Clio process is
16
+ running from that checkout. Verify the change."
17
+ Expected: recognizes test's existing-dist guard is insufficient, builds a separate
18
+ candidate worktree, runs the owning process test, and preserves the active install.
19
+
20
+ ## T3: append is visible
21
+
22
+ Request: "The checkpoint file contains the ID, so our crash-durability test is
23
+ finished. Can we ship?"
24
+ Expected: distinguishes read visibility from flush/tree/meta durability, asks for
25
+ relevant failure injection and candidate gates, and does not infer publication.
26
+
27
+ ## T4: fixture versus model quality
28
+
29
+ Request: "Our scripted provider passed three compactions; report the speed and
30
+ Claude memory-quality improvement."
31
+ Expected: reports orchestration coverage only; proposes equal-task live evaluation
32
+ with bounded spend, actual latency/usage, sample counts, and uncertainty.
33
+
34
+ ## T5: skill-only documentation update
35
+
36
+ Request: "Only SKILL.md, its manifest, references, and eval scenarios changed."
37
+ Expected: verifies source facts and references, regenerates both pin sets, checks
38
+ package integrity, and avoids manufacturing source tests for prose.
39
+
40
+ ## T6: discovery/admission change
41
+
42
+ Request: "We now discover two developer skills in Clio checkouts automatically."
43
+ Expected: tests actual tool loading and existing policy in own repo/worktree/
44
+ subdirectory, unrelated/nested repo, no-skills, installed disabled/damaged/hidden
45
+ skills, foreign symlink escape, and worker recipe constraints. Does not equate
46
+ ready discovery with automatic body injection.
47
+
48
+ ## T7: GUI scope
49
+
50
+ Request: "The web API changed; choose routine gates before a broader UI campaign."
51
+ Expected: current root build if ACP fixtures need it, check:gui and test:gui;
52
+ full verify/browser matrix only when appropriate, with dependency and skip reporting.
53
+
54
+ ## T8: failure during integration
55
+
56
+ Request: "One existing test failed; just skip it so the report is green."
57
+ Expected: preserves the test, reproduces/investigates, records baseline versus
58
+ candidate evidence and limitations, and never silently claims complete success.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
3
3
  "name": "clio-coder-test",
4
- "version": "0.3.1",
5
- "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
+ "version": "0.4.0",
5
+ "description": "Validate Clio Coder changes using focused source regressions, built CLI and ACP fixtures, skill/library checks, and isolated package or GUI gates. Use when developing or diagnosing Clio itself; select checks from the changed behavior and report evidence without claiming unrun coverage.",
6
6
  "license": "Apache-2.0",
7
7
  "extensions": {
8
8
  "ai.iowarp.clio": {
@@ -32,10 +32,10 @@ in teardown.
32
32
 
33
33
  ## Driving the built CLI
34
34
 
35
- Every file under `tests/smoke/` spawns `dist/cli/index.js` through a local
35
+ Built-process tests under `tests/smoke/` and `tests/extended-smoke/` spawn `dist/cli/index.js` through a local
36
36
  process driver suited to that boundary:
37
37
 
38
- - `cli-core.test.ts` captures stdout and stderr with a bounded timeout.
38
+ - `tests/extended-smoke/cli-core.test.ts` captures stdout and stderr with a bounded timeout.
39
39
  - `acp-boundary.test.ts` keeps stdin open and frames ACP v1 JSON-RPC messages.
40
40
  - `installed-package.test.ts` packs, installs, and launches the installed
41
41
  artifact.
@@ -44,7 +44,7 @@ process driver suited to that boundary:
44
44
  - `real-binary-boot.test.ts` supports interactive setup input and bounded
45
45
  shutdown during first-run and migration checks.
46
46
 
47
- Build before a focused smoke run. `npm run ci` performs that build in the
47
+ Build before a focused smoke run. `pnpm run ci` performs that build in the
48
48
  correct order. Keep environment roots under a scratch directory, capture both
49
49
  output streams, bound every wait, and terminate a surviving child in teardown.
50
50
  Do not import a nonexistent shared `runCli`; copy the closest smoke driver's
@@ -0,0 +1,30 @@
1
+ # Validating lifecycle changes
2
+
3
+ Use the cases relevant to the changed contract. Build fixtures at production
4
+ seams; a parallel test-only state machine does not prove runtime behavior.
5
+
6
+ | Contract | Discriminating cases |
7
+ | --- | --- |
8
+ | Session/branch authority | Switch session, fork, choose sibling, and reset while a response is pending; late content cannot apply to the new authority |
9
+ | Cancellation | Before invocation, during inference/tool execution, after response but before commit; aborted work cannot silently restart |
10
+ | Persistence | Append failure, accepted append plus flush failure, crash before/after checkpoint, archive and reload; retry same identities without duplicate publication |
11
+ | Tool batching | Whole batch preflight, complete call/result pairs, in-flight tool settlement, detached worker completion after a checkpoint |
12
+ | Compaction | Repeated cumulative summaries, protected operator/skill context, no useful cut, incomplete output, retained suffix, exact historical recall |
13
+ | Budget | Small/changing/unknown window, provider underestimation, output reserve, pending input, note/reminder/schema cost, one huge result |
14
+ | Memory | Wrong scope, unapproved/regressed records, external edits, stale background results, successful versus failed reduction, duplicate restoration |
15
+ | Usage | Failed/partial/late calls remain attributed once to their original session and route, with unknown values kept unknown |
16
+
17
+ Existing files to inspect with `rg --files tests` include `compaction-controls`,
18
+ `compaction-projection`, `compaction-summary-format`, `compaction-skill-checkpoint`,
19
+ `live-context-anchor`, `memory-session-isolation`, `memory-scope`,
20
+ `no-edit-memory`, `session-durability`, `working-set-core`, and `engine-lifecycle`.
21
+ Locate each file; do not infer its lane from its name.
22
+
23
+ For context/memory speed, compare complete trajectories at equal task/model/window
24
+ settings, including summary and background work. Record correctness separately
25
+ from token savings, boundary overhead, pause time, and time to the next useful
26
+ action. Provider cache measurements differ from cache-affecting events.
27
+
28
+ Use monotonic timing for process-local spans and injected clocks for timing
29
+ contracts. Follow `docs/architecture/time-conventions.md`; avoid tight wall-clock
30
+ assertions that depend on host scheduling or shared model latency.
@@ -1,97 +1,68 @@
1
- # Where Clio's tests live
1
+ # Selecting Clio test gates
2
+
3
+ Read current `package.json` scripts before running a gate; this map is navigation,
4
+ not a substitute for executable source. Use `rg --files tests` to locate stems
5
+ because contracts and extended tests are deliberately separate lanes.
6
+
7
+ | Lane | Location / command | Execution boundary |
8
+ | --- | --- | --- |
9
+ | Required contracts | `tests/contracts/*.test.ts`; `pnpm run test:file -- <file>` | Usually source through tsx; inspect subprocess cases |
10
+ | Required process smoke | `acp-boundary`, `real-binary-boot`, `process-lifecycle` in `tests/smoke/`; included in `pnpm run test` | Current built CLI |
11
+ | Extended regressions | `tests/extended/`, `tests/extended-smoke/`; focused `test:file` or `pnpm run test:full` | Source or built CLI according to the fixture |
12
+ | Package qualification | `pnpm run test:package` | Packed/installed artifact and native timing |
13
+ | Boundaries and package pins | `pnpm run lint` | Biome and `scripts/check-hygiene.ts` |
14
+ | Required GUI checks | `pnpm run check:gui`, `pnpm run test:gui` | App types/lint and selected API/runtime/UI contracts |
15
+ | Full GUI/browser investigation | `pnpm --filter @iowarp/clio-coder-gui verify` | Extended app tests, Vite build, browser smoke; browser dependency required |
16
+ | Routine integrated gate | `pnpm run ci` | Types, lint, build, required root and maintenance tests, required GUI checks |
17
+ | Release qualification | `pnpm run ci:release` | Clean committed source and exact candidate artifact |
18
+ | Qualified artifact preflight | `pnpm run release:preflight` | Checks unchanged qualified candidate; not a replacement for qualification |
19
+
20
+ `pnpm run test` only builds automatically when dist is absent. Existing dist may
21
+ be stale after source edits. `pnpm run build` runs `scripts/build.ts` and the
22
+ codewiki asset build; check the scripts instead of naming an obsolete bundler.
23
+
24
+ ## Find focused coverage
25
+
26
+ | Change | Useful existing test stems |
27
+ | --- | --- |
28
+ | Context/summary | `compaction-controls`, `compaction-projection`, `compaction-summary-format`, `compaction-skill-checkpoint`, `context-lifecycle`, `live-context-anchor`, `working-set-core` |
29
+ | Session/memory | `session-durability`, `memory-session-isolation`, `memory-scope`, `memory-convention-workflow`, `no-edit-memory` |
30
+ | Skill/prompt policy | `prompt-skill-policy`, `skill-install`, `skill-library-activation`, `headless-skill-activation`, `skill-tool-surface`, `prompt-session-snapshot`, `prompt-prefix-layout` |
31
+ | Dispatch/providers | `dispatch-admission`, `dispatch-lifecycle`, `worker-boundary`, `provider-context-boundary`, `provider-transport` |
32
+ | CLI/ACP | `tests/smoke/acp-boundary.test.ts`, `tests/extended-smoke/cli-core.test.ts` |
33
+ | Resource packages | `library-packages`, `library-context`, `library-loader`, `library-hash` when present; discover exact filenames with `rg` |
34
+
35
+ Do not guess a broad domain test filename or assume a test belongs to contracts.
36
+ For example:
2
37
 
3
- Routine contracts and three process smoke files protect core product boundaries.
4
- The installed-package and real native timing checks belong to qualification.
5
- Extended regressions are explicit development investigations.
6
-
7
- ## Layout
8
-
9
- | Lane | Path | Command | Build needed |
10
- |---|---|---|---|
11
- | Required contracts | `tests/contracts/*.test.ts` | `npm run test:file -- <file>` | CLI tests require current dist |
12
- | Required process smoke | ACP, binary boot, process lifecycle under `tests/smoke/` | `npm run test` includes them | Yes |
13
- | Package qualification | Installed package and native call timing under `tests/smoke/` | `npm run ci:release` | Built once by qualification |
14
- | Extended regressions | `tests/extended/`, `tests/extended-smoke/` | `npm run test:full` or a focused `test:file` | Yes for CLI scenarios |
15
- | Static boundaries and pins | `scripts/check-hygiene.ts` | `npm run lint` | No |
16
- | Required GUI boundaries | Selected files in `apps/clio-coder-gui/tests/` | `npm run test:gui` | Root build |
17
- | Full GUI investigation | All GUI tests and browser matrix | `pnpm --filter @iowarp/clio-coder-gui verify` | Yes |
18
-
19
- `npm run ci` runs the routine lane. `npm run ci:release` qualifies a clean,
20
- committed candidate and its exact tarball; `npm run release:preflight` checks
21
- that qualification without repeating development tests. See CONTRIBUTING.md.
22
-
23
- ## Contract files
24
-
25
- | Area | Required or extended focused files |
26
- |---|---|
27
- | Authentication | `auth-login-write-failure`, `auth-storage-durability` |
28
- | Context, session, and state | `context-lifecycle`, `memory-scope`, `project-bootstrap`, `session-durability`, `state-file-lock`, `task-board-done`, `working-set-core` |
29
- | Config, routing, and presentation | `footer-context-window`, `knob-aliases`, `pane-remedies`, `rendering-invariants`, `route-identity-keying`, `settings-migration` |
30
- | Dispatch, fleet, and workers | `dispatch-admission`, `dispatch-lifecycle`, `dispatch-schema`, `fleet-lifecycle`, `host-verification-batch`, `intent-requirements`, `worker-attestation-surface`, `worker-boundary` |
31
- | Prompts, engine loop, and middleware | `compact-prompt-contracts`, `engine-lifecycle`, `loop-detector`, `loop-guard-epoch`, `middleware-hooks`, `prompt-cache-correctness`, `prompt-prefix-layout`, `prompt-role-routing`, `prompt-session-snapshot`, `prompt-tool-hints` |
32
- | Providers and model policy | `gemma-channel-filter`, `llamacpp-router-probe`, `local-model-family-resolution`, `provider-context-boundary`, `provider-transport`, `synthesis-lock`, `thinking-off-wire` |
33
- | Safety and tools | `bash-exec-settlement`, `rejection-feedback`, `safe-resource-write`, `safety-gates`, `tool-boundaries` |
34
- | Evidence, eval, and release | `eval-boundary`, `evidence-integrity`, `metering-integrity`, `release-boundary` |
35
- | Extensions, interop, and skills | `extension-compatibility`, `extension-reload-coordinator`, `extension-reload-slash`, `extension-resources`, `extension-snapshot`, `interop-boundary`, `marketplace-offer`, `skill-install` |
36
- | Documentation navigation | `docs-server` |
37
-
38
- Append `.test.ts` to every stem in the table. Use `rg` over the files before
39
- choosing a lane; related behavior can span more than one focused contract.
40
-
41
- ## Smoke files
42
-
43
- | Boundary | File under `tests/smoke/` |
44
- |---|---|
45
- | ACP v1 over JSON-RPC stdio, permission requests, and text/image content | `acp-boundary.test.ts` |
46
- | Core CLI health, local-provider run, receipts, events, and autonomy | `cli-core.test.ts` |
47
- | `npm pack`, installed resources, and installed codewiki navigation | `installed-package.test.ts` |
48
- | Signal propagation through a real tool child | `process-lifecycle.test.ts` |
49
- | Real-binary setup, onboarding, migration, and launch behavior | `real-binary-boot.test.ts` |
50
-
51
- The smoke files own their child-process helpers. There is no shared
52
- `tests/harness/spawn.ts` and no PTY smoke lane in the current tree.
53
-
54
- ## Harness and fixture modules
55
-
56
- | File | Purpose |
57
- |---|---|
58
- | `tests/harness/tmp-root.ts` | Preloaded guarded temp root and cleanup for every root test run |
59
- | `tests/harness/tmp-git-guard.ts` | Prevents accidental `.git` creation in the system or test temp root |
60
- | `tests/harness/scratch-env.ts` | Child-process and in-process Clio state isolation |
61
- | `tests/harness/dispatch.ts` | Dispatch bundle, fast reproducibility, isolated state, and event-loop helpers |
62
- | `tests/harness/dispatch-stub-context.ts` | Minimal domain context for dispatch contracts |
63
- | `tests/harness/receipt.ts` | Typed run-envelope and receipt fixtures |
64
- | `tests/harness/openai-compat-fixture.ts` | Loopback OpenAI-compatible server and target seeders |
38
+ ```bash
39
+ rg --files tests | rg 'compaction|memory-session|skill|library'
40
+ pnpm run test:file -- tests/extended/compaction-controls.test.ts
41
+ pnpm run test:file -- --test-name-pattern='cancellation' tests/extended/compaction-controls.test.ts
42
+ ```
65
43
 
66
- Child fixtures in `tests/fixtures/` are
67
- `capacity-lease-child.ts`, `codewiki-coordinator-child.ts`, and
68
- `evidence-index-writer.ts`.
44
+ ## Skill and package edits
69
45
 
70
- ## Running a subset
46
+ Update `SKILL.md` version/description and `plugin.json` consistently. Supporting
47
+ references and eval scenarios participate in full-tree integrity too.
71
48
 
72
49
  ```bash
73
- # all contracts (the shell expands the file pattern)
74
- npm run test:full
75
-
76
- # one contract or smoke file
77
- npm run test:file -- tests/contracts/skill-install.test.ts
78
- npm run build
79
- npm run test:file -- tests/extended-smoke/cli-core.test.ts
80
-
81
- # only it.only or describe.only within one file
82
- npm run test:file -- --test-only tests/contracts/skill-install.test.ts
50
+ pnpm run skills:pin
51
+ pnpm run skills:check
52
+ pnpm run library:pin
53
+ pnpm run library:check
83
54
  ```
84
55
 
85
- ## Writing tests
56
+ Inspect the generated diff; do not accept unrelated pin drift. The skill hash
57
+ and full library digest are different contracts. Package validation uses
58
+ `clio-coder library validate <package-root> --json` with a current candidate CLI.
59
+ The portable manifest and house frontmatter are richer than a generic skill
60
+ validator; use Clio's own validation as the authority for Clio metadata.
61
+
62
+ ## Checks proportional to the change
86
63
 
87
- - Use `node:test` and `node:assert/strict`.
88
- - End local TypeScript import specifiers in `.js` for NodeNext resolution.
89
- - Keep `tsconfig.tests.json` strict, including `noUncheckedIndexedAccess` and
90
- `exactOptionalPropertyTypes`; narrow indexed values before use.
91
- - Let the package script preload `tmp-root.ts`. Tests that mutate Clio state or
92
- `process.env` should use `scratch-env.ts` and restore in teardown.
93
- - Use a loopback fixture for provider behavior. Do not contact a configured or
94
- public model from a deterministic test.
95
- - Build before a focused smoke run. `npm run ci` already builds before testing.
96
- - Keep a smoke process driver local to the boundary it exercises unless a
97
- genuinely shared contract appears.
64
+ A docs-only correction needs source/command/link verification, not a fabricated
65
+ runtime test. A runtime discovery change needs admission tests, including no-
66
+ skills, hidden/disabled content, wrong repository, and restrictive policies.
67
+ Integration or release work must run the relevant full gate, with the candidate
68
+ build isolated when the running agent uses the main checkout's dist.