@iowarp/clio-coder 0.3.4 → 0.3.7

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 (376) hide show
  1. package/CHANGELOG.md +65 -2
  2. package/CONTRIBUTING.md +6 -6
  3. package/README.md +16 -5
  4. package/dist/{acp-S5R4RR5B.js → acp-SK4MD6MM.js} +11 -11
  5. package/dist/{agents-P6DMMVZY.js → agents-2FN2K6ME.js} +33 -26
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-2XCZLPKS.js → auth-QIYZWM5I.js} +15 -15
  8. package/dist/{chunk-EKMEHE4H.js → chunk-33YXPOE3.js} +2 -3
  9. package/dist/{chunk-VAWWTKDP.js → chunk-3HAPLH5M.js} +11 -11
  10. package/dist/{chunk-YCWGATWI.js → chunk-465YSENW.js} +3 -3
  11. package/dist/{chunk-4OC57DA6.js → chunk-4DGYLA73.js} +53 -2
  12. package/dist/{chunk-UZHIZC5S.js → chunk-4DWFMQDR.js} +61 -76
  13. package/dist/{chunk-ZWMF7253.js → chunk-5C3AQNDW.js} +328 -9
  14. package/dist/{chunk-22NAGB7X.js → chunk-5C77SEEY.js} +5 -94
  15. package/dist/{chunk-WPQLXFOZ.js → chunk-5FR74PWO.js} +3 -2
  16. package/dist/{chunk-35MKKU5R.js → chunk-5UJ6ECTS.js} +18 -10
  17. package/dist/{chunk-BRXQQJFP.js → chunk-6M7VS3J3.js} +571 -50
  18. package/dist/{chunk-QQK64KLB.js → chunk-6TUKSZVF.js} +141 -23
  19. package/dist/{chunk-N4CZJQRK.js → chunk-AB4XIIVB.js} +8 -6
  20. package/dist/{chunk-KRPY7NTG.js → chunk-BMWK7ZIZ.js} +14 -20
  21. package/dist/{chunk-4BPJXDWC.js → chunk-C4JBQ5SR.js} +30 -14
  22. package/dist/{chunk-ZYKPLLNQ.js → chunk-CEYBNUGC.js} +821 -83
  23. package/dist/{chunk-VEZEGCGW.js → chunk-D4MDIG46.js} +20 -18
  24. package/dist/chunk-DJNLUABN.js +843 -0
  25. package/dist/{chunk-BP4OYD6A.js → chunk-DMD2AGVS.js} +21 -2
  26. package/dist/{chunk-KOHPCX4K.js → chunk-DOOEX22V.js} +2 -2
  27. package/dist/chunk-DQA7QLMD.js +123 -0
  28. package/dist/chunk-DR52UMZW.js +21 -0
  29. package/dist/{chunk-3HZ5RWN2.js → chunk-EBEFWSGL.js} +9 -7
  30. package/dist/{chunk-EDRHSCIE.js → chunk-EELBMBT6.js} +128 -13
  31. package/dist/{chunk-HV5X7OR2.js → chunk-EOOQZZDE.js} +16 -14
  32. package/dist/{chunk-WR67VIZY.js → chunk-FOT2FX5J.js} +63 -5
  33. package/dist/{chunk-BPGS2WCQ.js → chunk-GEYXPTRF.js} +2 -1
  34. package/dist/{chunk-FYYLNIL5.js → chunk-GH5622CP.js} +2 -2
  35. package/dist/{chunk-BEY543CS.js → chunk-GOXNB3AO.js} +5 -2
  36. package/dist/chunk-GWS3VEIW.js +195 -0
  37. package/dist/{chunk-G4BMMOKF.js → chunk-HVDIIIQW.js} +2 -2
  38. package/dist/chunk-HWUFFB6L.js +83 -0
  39. package/dist/{chunk-X6COSD2O.js → chunk-J7PIKKWC.js} +8 -436
  40. package/dist/{chunk-NILBFAPG.js → chunk-JNXPYBB4.js} +2 -2
  41. package/dist/{chunk-4VP4KH3K.js → chunk-JRIO5UD2.js} +4 -4
  42. package/dist/{chunk-K6WL7QZT.js → chunk-JTSEDYVQ.js} +7 -7
  43. package/dist/{chunk-QKMUKYO7.js → chunk-KCMKRQX4.js} +236 -84
  44. package/dist/chunk-KZ2H5X4G.js +1026 -0
  45. package/dist/{chunk-A2GZF7DC.js → chunk-LADCF22A.js} +13 -13
  46. package/dist/chunk-LCGCVYZ4.js +57 -0
  47. package/dist/chunk-M4AKACEO.js +382 -0
  48. package/dist/{chunk-POHLU5DW.js → chunk-M6L6IDJG.js} +3 -3
  49. package/dist/{chunk-4JUF2NNX.js → chunk-MXI6J5JF.js} +7 -7
  50. package/dist/{chunk-X4RCMKVQ.js → chunk-NDINPTJ4.js} +2 -2
  51. package/dist/{chunk-TTNYS3EA.js → chunk-OB5HIGJY.js} +1 -1
  52. package/dist/{chunk-7RXG6QRZ.js → chunk-OBMAI2DP.js} +61 -840
  53. package/dist/{chunk-5M54SPOL.js → chunk-ODFEOB4F.js} +161 -5
  54. package/dist/chunk-PD3MESLB.js +242 -0
  55. package/dist/{chunk-ED4KHGC3.js → chunk-PPAMZ32Z.js} +9 -2
  56. package/dist/{chunk-VMNQ6OZA.js → chunk-QCTRSGHQ.js} +963 -786
  57. package/dist/chunk-RVG5JXAL.js +41 -0
  58. package/dist/{chunk-RD5U66HV.js → chunk-SROCI7ZU.js} +7 -7
  59. package/dist/{chunk-MFFY33HR.js → chunk-THKY7CD7.js} +466 -205
  60. package/dist/{chunk-34475P3I.js → chunk-TSHXZTOQ.js} +5 -4
  61. package/dist/{chunk-PCZJO5TI.js → chunk-UFQ3F4FW.js} +13 -178
  62. package/dist/{chunk-AD2SYQYC.js → chunk-UHXRNZ2J.js} +121 -3
  63. package/dist/chunk-UND3GU2L.js +103 -0
  64. package/dist/{chunk-QQL5RT5M.js → chunk-UUANF5CR.js} +2323 -2114
  65. package/dist/{chunk-VJWL6YS5.js → chunk-UUVG37B4.js} +2 -2
  66. package/dist/chunk-UVDSQ6LW.js +472 -0
  67. package/dist/{chunk-QWU7ZBO7.js → chunk-VQNODYQ4.js} +215 -56
  68. package/dist/chunk-VREKEFLL.js +37 -0
  69. package/dist/{chunk-2TZWSW76.js → chunk-WHGPSPT5.js} +2 -2
  70. package/dist/{chunk-TW3WDMVS.js → chunk-WHJYKASB.js} +2 -2
  71. package/dist/{chunk-MEQ45TQ4.js → chunk-WJHBC77E.js} +21 -7
  72. package/dist/{chunk-HXG4IURW.js → chunk-X2KV5FXT.js} +2 -2
  73. package/dist/{chunk-YHZX5GEU.js → chunk-XAKHZX5N.js} +2 -2
  74. package/dist/{chunk-2LZI5CAG.js → chunk-XEGB6BCN.js} +228 -36
  75. package/dist/{chunk-E25LMLRW.js → chunk-YD734TPH.js} +2 -2
  76. package/dist/{verifiers-4UUM6TEE.js → chunk-YTYFXUI3.js} +121 -372
  77. package/dist/{chunk-3JLKSKD7.js → chunk-ZGH7FGS5.js} +17 -7
  78. package/dist/{chunk-VSNATDE6.js → chunk-ZZMN5OM4.js} +2 -2
  79. package/dist/cli/index.js +34 -32
  80. package/dist/{clio-J5JIOIDS.js → clio-WBVQEBKO.js} +7 -7
  81. package/dist/{code-nav-AXCXSBHX.js → code-nav-FGGFIE7L.js} +7 -7
  82. package/dist/codewiki/build-worker.js +4 -4
  83. package/dist/{components-KELWS457.js → components-F7OEATSO.js} +5 -5
  84. package/dist/{config-OEBMIN2U.js → config-TRBL3RCF.js} +48 -41
  85. package/dist/{configure-PUQOSIXQ.js → configure-OLCVPHNM.js} +17 -17
  86. package/dist/{context-URSXPBCK.js → context-MJIJ6GOX.js} +12 -12
  87. package/dist/{context-EKDCKUUZ.js → context-WFPKQSM6.js} +26 -9
  88. package/dist/{context-MGSE4Z2T.js → context-XEWE3MOJ.js} +44 -37
  89. package/dist/{context-clear-KDAJRNUK.js → context-clear-KNOS2JPB.js} +44 -37
  90. package/dist/{context-index-BZ4UYMTC.js → context-index-SSR5ECNE.js} +3 -3
  91. package/dist/{context-working-set-SBKMPPI2.js → context-working-set-EUXAZI6N.js} +14 -13
  92. package/dist/{dispatch-runner-MSWN72NK.js → dispatch-runner-B7MTOVKL.js} +321 -60
  93. package/dist/{docs-2C2LTVT2.js → docs-FLJTIDSE.js} +5 -5
  94. package/dist/{doctor-7BSE27PJ.js → doctor-RN4YKO2X.js} +15 -15
  95. package/dist/{eval-IZGDOO4H.js → eval-RUBJVSNQ.js} +52 -236
  96. package/dist/{evidence-SR7WXB5B.js → evidence-JZNBUOQZ.js} +39 -33
  97. package/dist/{evolve-K7VE2CBX.js → evolve-FJVC4KKI.js} +39 -33
  98. package/dist/{extensions-QVDOHDGJ.js → extensions-IQL36S7K.js} +5 -5
  99. package/dist/{fleet-7XMJNQNF.js → fleet-BDKYJFCP.js} +243 -370
  100. package/dist/fleet-commands-ZFIWZSB3.js +70 -0
  101. package/dist/fleet-graph-Y6HPXIVF.js +125 -0
  102. package/dist/fleet-new-RDVJLHHH.js +48 -0
  103. package/dist/{fleet-preflight-AQNAH644.js → fleet-preflight-BHSNPBMH.js} +2 -2
  104. package/dist/fleet-validate-BIYREGIK.js +79 -0
  105. package/dist/{init-JGNPAYXT.js → init-LQUB5COQ.js} +57 -48
  106. package/dist/library-NJAHIGG4.js +217 -0
  107. package/dist/memory-OG6HOYKM.js +472 -0
  108. package/dist/{models-ZMMLFJNN.js → models-5ZG5XY7J.js} +23 -22
  109. package/dist/{monitor-2F3T5KHP.js → monitor-TJ7AMTGB.js} +69 -35
  110. package/dist/{orchestrator-ORHT43JB.js → orchestrator-WZYB54DM.js} +4868 -1189
  111. package/dist/{paths-UXLN5YYZ.js → paths-XUC7GS6E.js} +5 -5
  112. package/dist/{reset-NXGTYNUO.js → reset-PXQT45IY.js} +8 -8
  113. package/dist/{run-RF4WJGMT.js → run-FQ74YF62.js} +82 -62
  114. package/dist/{share-UT3W6E4M.js → share-FW7SVCL3.js} +34 -10
  115. package/dist/{skills-PSACKC5Q.js → skills-7E7IRB3R.js} +25 -9
  116. package/dist/{skills-eval-WJSI55RZ.js → skills-eval-LI75W6OK.js} +43 -35
  117. package/dist/{targets-PIIRAOYS.js → targets-4CIFKCTW.js} +27 -24
  118. package/dist/{terminal-lease-ULWXWNVY.js → terminal-lease-WUZY7ZV5.js} +5 -4
  119. package/dist/{uninstall-FZCQCDKC.js → uninstall-7FV7IP4E.js} +5 -5
  120. package/dist/{upgrade-346TZ6AV.js → upgrade-K2HVIVMQ.js} +21 -20
  121. package/dist/{usage-6KKXR32N.js → usage-GTZELZQX.js} +159 -59
  122. package/dist/verifiers-RLAHT27O.js +336 -0
  123. package/dist/{verify-X5HDROLA.js → verify-BX3BRKH5.js} +7 -6
  124. package/dist/{wiki-generate-7STOCIFZ.js → wiki-generate-ASIFASCN.js} +58 -48
  125. package/dist/worker/entry.js +98 -84
  126. package/dist/{workspace-G4ZWUIPR.js → workspace-ZJ6BFM3Q.js} +4 -4
  127. package/docs/README.md +4 -3
  128. package/docs/acp.md +1 -1
  129. package/docs/alcf-provider.md +1 -1
  130. package/docs/architecture.md +2 -2
  131. package/docs/artifact-placement.md +1 -2
  132. package/docs/artifact-versions.md +10 -6
  133. package/docs/built-in-agents.md +26 -2
  134. package/docs/capacity-and-scheduling.md +1 -1
  135. package/docs/commands-and-modes.md +90 -8
  136. package/docs/configuration-and-targets.md +90 -2
  137. package/docs/context-engine.md +4 -2
  138. package/docs/context-working-set.md +4 -4
  139. package/docs/development-pipeline.md +1 -1
  140. package/docs/dispatch-architecture-rationale.md +1 -1
  141. package/docs/documentation-coverage.md +4 -4
  142. package/docs/documentation-guide.md +4 -4
  143. package/docs/eval-runner.md +1 -1
  144. package/docs/evals-internal.md +4 -45
  145. package/docs/evidence-and-memory.md +70 -10
  146. package/docs/evolution.md +1 -1
  147. package/docs/exit-codes-and-output.md +4 -1
  148. package/docs/extensions-and-sharing.md +6 -2
  149. package/docs/fleet-demo-runbook.md +2 -2
  150. package/docs/fleet-dispatch.md +224 -11
  151. package/docs/git-commit-provenance.md +2 -2
  152. package/docs/glossary.md +1 -1
  153. package/docs/installation-and-lifecycle.md +2 -2
  154. package/docs/middleware-and-components.md +20 -2
  155. package/docs/model-catalog.md +1 -1
  156. package/docs/observability.md +55 -8
  157. package/docs/proactive-memory.md +26 -16
  158. package/docs/prompt-envelope-and-tools.md +4 -2
  159. package/docs/provider-adapter-cookbook.md +1 -1
  160. package/docs/release-cut-checklist.md +83 -65
  161. package/docs/resource-library.md +59 -0
  162. package/docs/safety-model.md +29 -7
  163. package/docs/scientific-validation.md +3 -3
  164. package/docs/session-lifecycle.md +37 -1
  165. package/docs/skills-marketplace.md +16 -3
  166. package/docs/tool-usage.md +14 -7
  167. package/docs/trace-store.md +1 -1
  168. package/docs/troubleshooting.md +1 -1
  169. package/docs/tui-design.md +38 -4
  170. package/docs/worker-dispatch-mechanics.md +3 -3
  171. package/package.json +7 -4
  172. package/src/cli/agents.ts +2 -3
  173. package/src/cli/argv.ts +14 -1
  174. package/src/cli/fleet-commands.ts +37 -0
  175. package/src/cli/fleet-graph.ts +102 -0
  176. package/src/cli/fleet-new.ts +36 -0
  177. package/src/cli/fleet-preflight.ts +121 -0
  178. package/src/cli/fleet-validate.ts +30 -0
  179. package/src/cli/fleet.ts +188 -335
  180. package/src/cli/index.ts +4 -2
  181. package/src/cli/library.ts +190 -0
  182. package/src/cli/memory.ts +272 -10
  183. package/src/cli/modes/json-stream.ts +2 -2
  184. package/src/cli/modes/print.ts +12 -1
  185. package/src/cli/run.ts +22 -2
  186. package/src/cli/share.ts +13 -1
  187. package/src/cli/targets.ts +12 -3
  188. package/src/cli/usage.ts +160 -20
  189. package/src/core/bus-events.ts +7 -0
  190. package/src/core/commit-attribution.ts +4 -4
  191. package/src/core/config.ts +130 -0
  192. package/src/core/defaults.ts +81 -0
  193. package/src/core/response-model-id.ts +134 -0
  194. package/src/core/toml.ts +62 -0
  195. package/src/core/workspace-files.ts +0 -1
  196. package/src/domains/agents/builtins/architect.md +2 -1
  197. package/src/domains/agents/builtins/oracle.md +33 -0
  198. package/src/domains/agents/catalog.ts +18 -5
  199. package/src/domains/agents/fleet-contract.ts +278 -16
  200. package/src/domains/agents/index.ts +14 -0
  201. package/src/domains/agents/recipe.ts +54 -14
  202. package/src/domains/agents/result-contract.ts +242 -5
  203. package/src/domains/config/classify.ts +4 -0
  204. package/src/domains/context/bootstrap.ts +36 -27
  205. package/src/domains/context/project-metadata.ts +19 -63
  206. package/src/domains/context/prompt-context.ts +8 -0
  207. package/src/domains/context/working-set/policies/index.ts +3 -4
  208. package/src/domains/dispatch/active-route-planner.ts +14 -0
  209. package/src/domains/dispatch/backoff.ts +2 -1
  210. package/src/domains/dispatch/budget-envelope.ts +396 -0
  211. package/src/domains/dispatch/capability-match.ts +1 -0
  212. package/src/domains/dispatch/checkout-writer-lease.ts +175 -0
  213. package/src/domains/dispatch/contract.ts +36 -0
  214. package/src/domains/dispatch/delegation-plan.ts +167 -0
  215. package/src/domains/dispatch/execution-plan.ts +76 -5
  216. package/src/domains/dispatch/execution-role.ts +3 -1
  217. package/src/domains/dispatch/execution-scheduler.ts +183 -67
  218. package/src/domains/dispatch/extension.ts +339 -36
  219. package/src/domains/dispatch/fleet-gate.ts +14 -0
  220. package/src/domains/dispatch/fleet-plan.ts +63 -3
  221. package/src/domains/dispatch/fleet-run.ts +737 -0
  222. package/src/domains/dispatch/gate-role-prompts.ts +9 -0
  223. package/src/domains/dispatch/host-verification.ts +178 -0
  224. package/src/domains/dispatch/index.ts +38 -0
  225. package/src/domains/dispatch/intent.ts +159 -0
  226. package/src/domains/dispatch/orphan-recovery.ts +1 -0
  227. package/src/domains/dispatch/receipt-integrity.ts +12 -4
  228. package/src/domains/dispatch/state.ts +37 -3
  229. package/src/domains/dispatch/types.ts +61 -9
  230. package/src/domains/dispatch/validation.ts +80 -6
  231. package/src/domains/dispatch/worker-spawn.ts +14 -3
  232. package/src/domains/eval/metrics/evidence.ts +0 -116
  233. package/src/domains/eval/metrics/invariants.ts +1 -1
  234. package/src/domains/eval/runners/clio-run.ts +1 -10
  235. package/src/domains/eval/runners/external-command.ts +2 -29
  236. package/src/domains/eval/schema/suite.ts +0 -7
  237. package/src/domains/eval/suites/run.ts +1 -7
  238. package/src/domains/evidence/trust-status.ts +10 -1
  239. package/src/domains/memory/index.ts +22 -0
  240. package/src/domains/memory/operations.ts +58 -1
  241. package/src/domains/memory/promotion.ts +281 -0
  242. package/src/domains/memory/prompt-section.ts +25 -5
  243. package/src/domains/memory/proposal.ts +51 -7
  244. package/src/domains/memory/task-bank.ts +3 -2
  245. package/src/domains/memory/task-memory-handoff.ts +181 -24
  246. package/src/domains/memory/task-memory-policy.ts +3 -1
  247. package/src/domains/memory/types.ts +37 -0
  248. package/src/domains/memory/validate.ts +178 -0
  249. package/src/domains/middleware/index.ts +15 -0
  250. package/src/domains/middleware/memory-intervention.ts +35 -25
  251. package/src/domains/middleware/runtime.ts +6 -0
  252. package/src/domains/middleware/skills-reminder.ts +19 -4
  253. package/src/domains/middleware/stalled-turn.ts +43 -1
  254. package/src/domains/middleware/types.ts +10 -0
  255. package/src/domains/middleware/watchdog.ts +281 -0
  256. package/src/domains/observability/contract.ts +9 -2
  257. package/src/domains/observability/cost.ts +31 -4
  258. package/src/domains/observability/extension.ts +2 -2
  259. package/src/domains/observability/index.ts +10 -0
  260. package/src/domains/observability/out-of-turn-usage.ts +223 -0
  261. package/src/domains/providers/index.ts +3 -0
  262. package/src/domains/providers/model-discovery.ts +9 -0
  263. package/src/domains/providers/runtime-resolution.ts +38 -1
  264. package/src/domains/providers/runtimes/common/probe-helpers.ts +97 -16
  265. package/src/domains/providers/types/context-window-slots.ts +18 -0
  266. package/src/domains/providers/types/runtime-descriptor.ts +3 -1
  267. package/src/domains/resources/index.ts +20 -0
  268. package/src/domains/resources/library.ts +326 -0
  269. package/src/domains/resources/skills/marketplace.ts +37 -12
  270. package/src/domains/safety/call-target.ts +211 -14
  271. package/src/domains/safety/decision-presentation.ts +268 -0
  272. package/src/domains/safety/redaction.ts +73 -0
  273. package/src/domains/session/context-ledger.ts +10 -1
  274. package/src/domains/session/decision-board.ts +4 -0
  275. package/src/domains/session/entries.ts +3 -0
  276. package/src/domains/session/handoff.ts +629 -0
  277. package/src/domains/session/history.ts +68 -19
  278. package/src/domains/session/usage.ts +24 -7
  279. package/src/domains/share/archive.ts +67 -2
  280. package/src/engine/acp/event-mapper.ts +7 -0
  281. package/src/engine/acp/server.ts +29 -2
  282. package/src/engine/apis/lmstudio.ts +25 -4
  283. package/src/engine/apis/openai-completions.ts +147 -22
  284. package/src/engine/claude/sdk-runtime.ts +8 -2
  285. package/src/engine/claude/tool-safety.ts +13 -0
  286. package/src/engine/loop-guard.ts +27 -3
  287. package/src/engine/worker-events.ts +4 -3
  288. package/src/engine/worker-runtime.ts +59 -54
  289. package/src/entry/orchestrator.ts +55 -1
  290. package/src/interactive/bus-notices.ts +26 -0
  291. package/src/interactive/chat-loop-messages.ts +22 -0
  292. package/src/interactive/chat-loop.ts +248 -1
  293. package/src/interactive/chat-renderer.ts +41 -3
  294. package/src/interactive/clio-editor.ts +44 -7
  295. package/src/interactive/context-overlay.ts +43 -5
  296. package/src/interactive/cost-overlay.ts +70 -11
  297. package/src/interactive/council-dispatch.ts +30 -0
  298. package/src/interactive/council-grid.ts +213 -0
  299. package/src/interactive/council.ts +99 -0
  300. package/src/interactive/dispatch-board.ts +471 -50
  301. package/src/interactive/fleet-run-preview.ts +307 -0
  302. package/src/interactive/footer/notifications.ts +219 -0
  303. package/src/interactive/footer/widgets.ts +13 -0
  304. package/src/interactive/handoff-round.ts +56 -0
  305. package/src/interactive/interactive-application.ts +49 -2
  306. package/src/interactive/interactive-event-projection.ts +9 -1
  307. package/src/interactive/interactive-input-runtime.ts +11 -1
  308. package/src/interactive/interactive-presentation.ts +11 -1
  309. package/src/interactive/interactive-slash-runtime.ts +52 -2
  310. package/src/interactive/interactive-subscriptions.ts +14 -2
  311. package/src/interactive/memory-overlay.ts +89 -4
  312. package/src/interactive/oracle.ts +179 -0
  313. package/src/interactive/overlay-ask-user-lifecycle.ts +7 -1
  314. package/src/interactive/overlay-frame.ts +5 -2
  315. package/src/interactive/overlay-general-openers.ts +230 -2
  316. package/src/interactive/overlay-key-routing.ts +58 -2
  317. package/src/interactive/overlay-lifecycle.ts +52 -5
  318. package/src/interactive/overlay-permission-lifecycle.ts +33 -8
  319. package/src/interactive/overlay-resource-openers.ts +11 -3
  320. package/src/interactive/overlay-session-lifecycle.ts +234 -2
  321. package/src/interactive/overlay-transitions.ts +11 -0
  322. package/src/interactive/overlays/ask-user.ts +74 -30
  323. package/src/interactive/overlays/decisions.ts +3 -1
  324. package/src/interactive/overlays/fleet-run-approval.ts +208 -0
  325. package/src/interactive/overlays/handoff-review.ts +185 -0
  326. package/src/interactive/overlays/library-install-confirm.ts +151 -0
  327. package/src/interactive/overlays/list-overlay.ts +168 -2
  328. package/src/interactive/overlays/settings.ts +101 -4
  329. package/src/interactive/overlays/side-question.ts +139 -0
  330. package/src/interactive/overlays/skills-hub.ts +401 -15
  331. package/src/interactive/permission-hint.ts +35 -0
  332. package/src/interactive/permission-overlay.ts +95 -45
  333. package/src/interactive/renderers/tool-execution.ts +19 -49
  334. package/src/interactive/session-last-turn.ts +8 -1
  335. package/src/interactive/session-usage-reseed.ts +36 -10
  336. package/src/interactive/side-question.ts +171 -0
  337. package/src/interactive/slash-commands.ts +434 -7
  338. package/src/interactive/slash-spec.ts +19 -6
  339. package/src/interactive/status/summary.ts +5 -0
  340. package/src/interactive/status/types.ts +5 -0
  341. package/src/interactive/terminal-lease.ts +1 -0
  342. package/src/interactive/theme/tokens.ts +30 -0
  343. package/src/interactive/turn-context.ts +96 -23
  344. package/src/interactive/turn-middleware.ts +16 -1
  345. package/src/interactive/turn-runtime.ts +37 -8
  346. package/src/interactive/turn-state.ts +3 -0
  347. package/src/interactive/watchdog-run.ts +75 -0
  348. package/src/interactive/worker-progress.ts +440 -0
  349. package/src/interactive/worker-share.ts +56 -1
  350. package/src/interactive/worker-stream.ts +58 -110
  351. package/src/tools/agent-tools.ts +28 -3
  352. package/src/tools/ask-user.ts +21 -1
  353. package/src/tools/bootstrap.ts +3 -0
  354. package/src/tools/compete-worktrees.ts +13 -79
  355. package/src/tools/context/index.ts +2 -2
  356. package/src/tools/dispatch-admission.ts +242 -8
  357. package/src/tools/dispatch-arguments.ts +65 -1
  358. package/src/tools/dispatch-event-text.ts +19 -0
  359. package/src/tools/dispatch-plan.ts +136 -6
  360. package/src/tools/dispatch-runner.ts +319 -13
  361. package/src/tools/dispatch-types.ts +20 -1
  362. package/src/tools/dispatch.ts +96 -3
  363. package/src/tools/monitor.ts +31 -0
  364. package/src/tools/profiles.ts +18 -4
  365. package/src/tools/registry.ts +15 -5
  366. package/src/tools/result-disposition.ts +156 -0
  367. package/src/tools/result-shaping.ts +59 -1
  368. package/src/tools/task-worktree.ts +238 -0
  369. package/src/tools/verify/authoring.ts +116 -55
  370. package/src/tools/verify/scripts.ts +62 -0
  371. package/src/tools/worker-evidence.ts +21 -1
  372. package/src/worker/spec-contract.ts +44 -3
  373. package/dist/chunk-EFADSJET.js +0 -18
  374. package/dist/chunk-HC4CLZ2Y.js +0 -68
  375. package/dist/memory-4ALKDJ4Q.js +0 -246
  376. package/src/domains/eval/metrics/chaos-stream.ts +0 -93
@@ -1,9 +1,9 @@
1
1
  # Evidence Corpus and Long-Term Memory
2
2
 
3
3
  > [!TIP]
4
- > **Interactive Spec Available:** An interactive memory lifecycle dashboard and simulator is located at [docs/html/memory_blueprint.html](html/memory_blueprint.html) (Version: 0.3.4). Use it to design, validate, and simulate memory proposals, approval loops, pruning rules, and token budgets.
4
+ > **Interactive Spec Available:** An interactive memory lifecycle dashboard and simulator is located at [docs/html/memory_blueprint.html](html/memory_blueprint.html) (Version: 0.3.7). Use it to design, validate, and simulate memory proposals, approval loops, pruning rules, and token budgets.
5
5
 
6
- Clio Coder treats run claims and agent lessons as structured artifacts to support reproducibility and scientific provenance. In evaluations such as [SWE-bench](https://www.swebench.com), capturing granular execution evidence is essential for validating agent claims. Evidence corpora are deterministic directories built from run ledgers, receipts, sessions, audits, and eval artifacts. In v0.3.4, forensic evidence auto-builds on dispatch run completion: when a run finalizes, the observability domain automatically compiles the evidence bundle under `<dataDir>/evidence/run-<id>/` and updates a compact sidecar index row in `<stateDir>/evidence-index.json`. Long-term memory records are local, evidence-linked, and only injected after explicit approval. Use the TUI [`/view`](observability.md) command for interactive inspection of receipts, dispatch output, durable tool output, compaction summaries, and session accountability before building or citing evidence.
6
+ Clio Coder treats run claims and agent lessons as structured artifacts to support reproducibility and scientific provenance. In evaluations such as [SWE-bench](https://www.swebench.com), capturing granular execution evidence is essential for validating agent claims. Evidence corpora are deterministic directories built from run ledgers, receipts, sessions, audits, and eval artifacts. In v0.3.7, forensic evidence auto-builds on dispatch run completion: when a run finalizes, the observability domain automatically compiles the evidence bundle under `<dataDir>/evidence/run-<id>/` and updates a compact sidecar index row in `<stateDir>/evidence-index.json`. Long-term memory records are local, evidence-linked, and only injected after explicit approval. Use the TUI [`/view`](observability.md) command for interactive inspection of receipts, dispatch output, durable tool output, compaction summaries, and session accountability before building or citing evidence.
7
7
 
8
8
  Source of truth: `src/domains/evidence/**`, `src/domains/memory/**`, `src/cli/evidence.ts`, and `src/cli/memory.ts`.
9
9
 
@@ -148,11 +148,11 @@ Each run receipt (persisted under `<stateDir>/receipts/<runId>.json`) carries an
148
148
  ### Computation and Lifecycle
149
149
  - **Circular Dependency Prevention**: To prevent circular dependencies, `findingsSummary` is calculated **cheaply in-memory** at receipt-record time using the draft envelope and tool statistics (in `src/domains/dispatch/receipt-findings.ts`). It never reads from disk or calls `buildEvidence`.
150
150
  - **First-Pass Success**: Calculated as `true` only if the terminal outcome was `"succeeded"`, the lineage attempt was `0` (no dispatch retries), the tool stats confirm at least one successful validation tool was executed, and no failure-cause tags were detected.
151
- - **Cryptographic Coverage**: Current receipts use strict v15 and authenticate every current receipt field, including briefing and steering provenance, routing intent and decision, route quality, worker identity, execution role, and result-contract conformance, against the reconstructed ledger. Every version other than v15 is rejected; there is no historical receipt reader.
151
+ - **Cryptographic Coverage**: Current receipts use strict v19 and authenticate every current receipt field, including briefing and steering provenance, routing intent and decision, route quality, worker identity, execution role, result-contract conformance, council provenance, and fleet gate provenance, against the reconstructed ledger. Every version other than v19 is rejected; there is no historical receipt reader.
152
152
 
153
153
  | Version | Verification policy | Compatibility policy |
154
154
  |---|---|---|
155
- | v15 | Current canonical projection; every current receipt and reconstructible ledger field is authenticated | Accepted |
155
+ | v19 | Current canonical projection; every current receipt and reconstructible ledger field is authenticated | Accepted |
156
156
  | Any other version | No reader | Rejected; remove or archive the incompatible state rather than expecting migration |
157
157
 
158
158
  Receipt integrity and evidence verification answer different questions. The
@@ -227,7 +227,7 @@ finish-contract records without changing receipt-owned axes. Findings such as
227
227
  domain artifacts remain in the receipt, gate, audit, and trace files.
228
228
 
229
229
  The canonical aggregate is an additive projection for downstream work. Receipt
230
- integrity remains version 15, evidence bundles remain version 1, gate decisions
230
+ integrity remains version 18, evidence bundles remain version 1, gate decisions
231
231
  remain version 2, and no persisted receipt field or cryptographic algorithm
232
232
  changes.
233
233
 
@@ -246,7 +246,8 @@ Mutation-report receipts are grounded directly against observed tool events reco
246
246
 
247
247
  ```bash
248
248
  clio-coder memory list
249
- clio-coder memory propose --from-evidence <evidenceId>
249
+ clio-coder memory propose --from-evidence <evidenceId> [scope options]
250
+ clio-coder memory promote --from-handoff <path> [--entry <id>...] --scope <scope> [scope options]
250
251
  clio-coder memory approve <memoryId>
251
252
  clio-coder memory reject <memoryId>
252
253
  clio-coder memory prune --stale
@@ -267,6 +268,8 @@ The store is capped at `500` records and is sorted by scope, key, creation time,
267
268
  ```mermaid
268
269
  stateDiagram-v2
269
270
  evidence --> proposed: propose --from-evidence
271
+ taskBank --> proposed: /memory selected-entry action
272
+ redactedHandoff --> proposed: promote --from-handoff
270
273
  proposed --> approved: approve <id>
271
274
  proposed --> rejected: reject <id>
272
275
  approved --> rejected: reject <id>
@@ -277,6 +280,45 @@ stateDiagram-v2
277
280
 
278
281
  Records must cite at least one evidence ID to be considered for prompt injection. Rejected records remain in the store until stale pruning so the same bad lesson is not immediately re-proposed from the same evidence.
279
282
 
283
+ Task-bank promotion is a reviewed export from transient execution memory. The
284
+ `/memory` overlay offers repo and global proposal actions only on selected
285
+ knowledge and procedural rows. Status remains private and cannot enter the
286
+ promotion service. The first global action arms a warning, and the second
287
+ action acknowledges the broader applicability. A successful action writes an
288
+ unapproved record and names the separate `memory approve` command required to
289
+ make it injectable.
290
+
291
+ The CLI consumes a version 2 `clio-task-memory` handoff snapshot. Omitting
292
+ `--entry` proposes every knowledge and procedural entry; repeating `--entry`
293
+ selects exact entry IDs. Version 2 snapshots carry source session, evidence,
294
+ runtime, agent, timestamps, and export-redaction facts. Version 1 snapshots
295
+ remain seedable but cannot be promoted because they do not carry source
296
+ session or evidence provenance.
297
+
298
+ Every promotion redacts secret-shaped values before `records.json` is written.
299
+ The durable provenance block records the source kind, session, selected entry,
300
+ entry class and timestamps, plus the replacement count and source field paths.
301
+ Promotion never approves its own output.
302
+
303
+ ### Explicit scope selection
304
+
305
+ Reviewed scope options are closed to four choices:
306
+
307
+ | Scope | Required selection | Validation |
308
+ | --- | --- | --- |
309
+ | `repo` | `--repository <canonical-absolute-path>` | The path must exist and already equal its canonical absolute identity. Symlink aliases and paths containing unresolved segments are rejected. |
310
+ | `global` | `--acknowledge-global` | The acknowledgement is separate from `--scope global`. |
311
+ | `runtime` | `--runtime <id>` | The ID must be valid and must occur in the source provenance. |
312
+ | `agent` | `--agent <id>` | The ID must be valid and must occur in the source provenance. |
313
+
314
+ The same options may be added to `memory propose --from-evidence`. With no
315
+ scope option, evidence proposals keep the existing inference order. An
316
+ explicit repository may differ from the repository that produced the
317
+ evidence, which supports a reviewed lesson about repository A learned while
318
+ working in repository B. Runtime and agent overrides may only select an exact
319
+ identity already recorded by the evidence. Global scope always requires its
320
+ own acknowledgement. No inference path widens an explicit choice.
321
+
280
322
  ---
281
323
 
282
324
  ## Prompt injection rules
@@ -287,7 +329,7 @@ Defaults:
287
329
 
288
330
  | Constraint | Default |
289
331
  | --- | --- |
290
- | Scopes | `global`, `repo` |
332
+ | Base scopes | `global`, `repo` |
291
333
  | Token budget | `400` estimated tokens |
292
334
  | Max records | `5` |
293
335
  | Required status | `approved: true` |
@@ -296,6 +338,12 @@ Defaults:
296
338
 
297
339
  Rendered memory lines always cite record ID, scope, lesson, and evidence IDs. The prompt tells the model not to extrapolate beyond cited findings.
298
340
 
341
+ Interactive main-agent sessions additionally admit records for the exact
342
+ active runtime. `clio-coder run --agent` admits records for the exact resolved
343
+ runtime and selected agent. Runtime and agent records use structured identity
344
+ fields; `appliesWhen` text cannot grant either applicability. Missing,
345
+ malformed, or different active identities exclude those records.
346
+
299
347
  ### Repository-scoped identity
300
348
 
301
349
  Repository memory is selected by an exact canonical absolute-path identity. The interactive orchestrator and `clio-coder run --agent` compute that identity from the active working directory; symlink aliases collapse to the same key. A repository move, a different Git worktree path, a subdirectory launch, a malformed identity, or a missing identity does not inherit another repository's memory. Global records are unaffected.
@@ -308,15 +356,27 @@ Every `scope: "repo"` record must carry:
308
356
 
309
357
  The structured `repository` field is the only applicability mechanism: store validation rejects repo records without it, and `appliesWhen` tokens never grant repository applicability. There is intentionally no automatic path rewrite for moved repositories or worktrees: a filesystem move produces a different identity and the record simply stops applying until it is re-scoped with new evidence.
310
358
 
359
+ Runtime and agent records follow the same fail-closed shape:
360
+
361
+ ```json
362
+ { "runtime": { "kind": "runtime", "key": "openai" } }
363
+ ```
364
+
365
+ ```json
366
+ { "agent": { "kind": "agent", "key": "coder" } }
367
+ ```
368
+
369
+ Only the field matching the record scope is present.
370
+
311
371
  ---
312
372
 
313
373
  ## Recommended workflow
314
374
 
315
375
  1. Build evidence from the run/session/eval that taught the lesson.
316
376
  2. Inspect the evidence and findings.
317
- 3. Propose memory from the evidence.
318
- 4. Review the proposed lesson for correctness and scope.
319
- 5. Approve only if it is durable and useful.
377
+ 3. Propose memory from the evidence, or promote selected public task memory from `/memory` or a redacted handoff.
378
+ 4. Review the proposed lesson, source provenance, redaction facts, and exact scope.
379
+ 5. Approve only if it is durable and useful under that scope.
320
380
  6. Reject incorrect or overbroad records.
321
381
  7. Prune stale records periodically.
322
382
 
package/docs/evolution.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Evolution and Change Manifests
2
2
 
3
3
  > [!TIP]
4
- > **Interactive Spec Available:** An interactive change manifest editor, authority risk assessor, and checklist workspace is located at [docs/html/evolution_blueprint.html](html/evolution_blueprint.html) (Version: 0.3.4).
4
+ > **Interactive Spec Available:** An interactive change manifest editor, authority risk assessor, and checklist workspace is located at [docs/html/evolution_blueprint.html](html/evolution_blueprint.html) (Version: 0.3.7).
5
5
 
6
6
  Clio Coder uses change manifests to make harness changes reviewable, falsifiable, and rollback-friendly. CLIO stands for Context Layer for Input/Output, named for the Greek muse of history. A manifest is JSON, generated or checked with `clio-coder evolve manifest`, and should describe what changed, why, what evidence supports it, what could regress, how to validate it, and how to roll it back.
7
7
 
@@ -1,6 +1,6 @@
1
1
  # Exit Codes & Machine-Readable Output Contracts
2
2
 
3
- This document specifies the process exit codes, machine-readable JSON streaming formats, standard I/O separation rules, and `--help` conventions across all Clio Coder CLI commands in `v0.3.4`.
3
+ This document specifies the process exit codes, machine-readable JSON streaming formats, standard I/O separation rules, and `--help` conventions across all Clio Coder CLI commands in `v0.3.7`.
4
4
 
5
5
  Source implementations: `src/cli/` and `src/entry/`.
6
6
 
@@ -66,6 +66,9 @@ Many Clio CLI subcommands provide structured JSON output for integration with sc
66
66
  | `clio-coder targets` | `--json` | JSON object containing the configured `targets` array. |
67
67
  | `clio-coder models` | `--json` | JSON array of catalog models with capability flags. |
68
68
  | `clio-coder fleet status` | `--json` | JSON snapshot object with `generatedAt`, `admission` (`open` or `draining`), `running`, `retrying`, and `totals`. Each run row carries its `node`, defaulting to `local`. |
69
+ | `clio-coder fleet validate` | `--json` | JSON report with `valid`, `fleet`, and either successful `checks` plus `planHash` or failure `diagnostics`. Validation failures exit `1`; usage errors exit `2`. |
70
+ | `clio-coder fleet graph` | `--json` | JSON object with `fleet`, `planHash`, compiled `waves`, and expanded `loops`. Contract failures exit `1`; usage errors exit `2`. |
71
+ | `clio-coder fleet run --resume` | `--json` | NDJSON step records include `status: "replayed"` and the original receipt reference for replayed prefix steps. Plan or variable mismatches exit `1`. |
69
72
  | `clio-coder trace runs` | `--json` | JSON array of trace run records. |
70
73
  | `clio-coder trace sql` | Positional query | JSON array of rows returned by the read-only SQLite query. A single `SELECT` or read-only `WITH` statement is accepted; multiple statements and mutating keywords are refused with exit code 2. |
71
74
  | `clio-coder paths` | `--json` | JSON object mapping platform directory names to absolute paths. |
@@ -1,7 +1,7 @@
1
1
  # Extensions, Prompt Templates, Skills, and Share Archives
2
2
 
3
3
  > [!TIP]
4
- > **Interactive Spec Available:** An interactive dashboard is located at [docs/html/extensions_blueprint.html](html/extensions_blueprint.html) (Version: 0.3.4).
4
+ > **Interactive Spec Available:** An interactive dashboard is located at [docs/html/extensions_blueprint.html](html/extensions_blueprint.html) (Version: 0.3.7).
5
5
 
6
6
  Clio Coder has lightweight community-oriented resource packaging. Extensions are filesystem bundles that contribute prompts and skills. Share archives are portable JSON files for moving project/user Clio resources between machines or collaborators. Themes are built into the engine and are no longer loaded from extensions.
7
7
 
@@ -251,7 +251,7 @@ Share archives are single JSON files:
251
251
  "formatVersion": 1,
252
252
  "manifest": {
253
253
  "format": "clio.share.v1",
254
- "clioVersion": "0.3.4",
254
+ "clioVersion": "0.3.7",
255
255
  "createdAt": "...",
256
256
  "files": []
257
257
  },
@@ -280,6 +280,8 @@ Options:
280
280
  | `--skills` | Include skills. |
281
281
  | `--settings` | Include non-secret settings fragment. |
282
282
  | `--extensions` | Include extension bundle files, excluding extension `state.json`. |
283
+ | `--agents` | Include agent recipe files. |
284
+ | `--fleets` | Include fleet contract files. |
283
285
  | `--all` | Include every supported resource class. |
284
286
 
285
287
  If no include flags are supplied, export includes all supported classes for the selected scope.
@@ -296,6 +298,8 @@ clio-coder share import project.clio-coder-share.json --force
296
298
 
297
299
  Dry-run imports produce a plan and report conflicts without writing. Without `--force`, conflicting destination files block writes. With `--force`, conflicting files are overwritten and supported settings-fragment keys are merged into the current settings file.
298
300
 
301
+ Archives accept `agent` and `fleet` file entry types alongside prompts and skills. Agent entries import into the user agent root and must pass the recipe parser and policy checks. Fleet entries import into the user fleet root and must pass `parseFleetContract` before any write. Dry-run plans report both types by kind.
302
+
299
303
  Aliases:
300
304
 
301
305
  ```bash
@@ -136,7 +136,7 @@ clio-coder evidence inspect <evidenceId>
136
136
  run ledger; a tampered or mismatched receipt fails the build with the field
137
137
  that diverged. The receipts of the remote runs verify on the orchestrator host because the
138
138
  ledger and receipts live on the shared filesystem. Current receipts use strict
139
- v15 and authenticate every current receipt and reconstructed-ledger field.
139
+ v16 and authenticate every current receipt and reconstructed-ledger field.
140
140
  Every other receipt version is rejected rather than reported as partial; the
141
141
  current binary has no historical receipt reader.
142
142
 
@@ -168,7 +168,7 @@ reconstruct:
168
168
  complete receipt schema and its stable ledger row. `clio-coder evidence build
169
169
  --run <id>` recomputes and cross-checks it; `verifyReceiptIntegrity` in
170
170
  `src/domains/dispatch/receipt-integrity.ts` is the reference
171
- implementation. Current receipts use v15 and every other version fails
171
+ implementation. Current receipts use v16 and every other version fails
172
172
  verification. Incompatible state must be archived or removed; it is never
173
173
  read as evidence through a compatibility verifier.
174
174
 
@@ -1,6 +1,6 @@
1
1
  # Fleet Dispatch
2
2
 
3
- > **Interactive Spec Available:** An interactive fleet node topology planner, scout router, receipt verifier, and failure taxonomy simulator is located at [docs/html/fleet_dispatch_blueprint.html](html/fleet_dispatch_blueprint.html) (Version: 0.3.4).
3
+ > **Interactive Spec Available:** An interactive fleet node topology planner, scout router, receipt verifier, and failure taxonomy simulator is located at [docs/html/fleet_dispatch_blueprint.html](html/fleet_dispatch_blueprint.html) (Version: 0.3.7).
4
4
 
5
5
  Clio Coder dispatches bounded worker agents. With a fleet configured, those
6
6
  workers run on remote machines over SSH while the orchestrator keeps every
@@ -77,7 +77,11 @@ briefing wins. Supplying both `task` and `tasks` fails instead of choosing one.
77
77
  After approval, execution consumes only the registry-owned resolved plan, so
78
78
  later mutation of raw arguments cannot change either field.
79
79
 
80
- Recipes may declare `budget: {toolCalls, readReserve, synthesis}`. `toolCalls` is the admitted-call phase boundary; the final `readReserve` slots accept canonical `read` plus the agent's granted mutation tools, so a writer can still deliver inside its own reserve; `synthesis: true` forces a text-only final round, while `false` stops after the admitted phase. `guardrails.workerToolCallCap` is transported separately as the ceiling on executed calls and always wins when lower. Native workers and Claude SDK enforce this policy. Claude Code and Antigravity reject explicit-budget recipes because their black-box loops cannot provide equivalent per-call mediation. Before launch, every admitted WorkerSpec v3 contains one concrete effective budget and a settings fingerprint, including custom recipes whose source omitted a budget.
80
+ Recipes declare a default with `budget: {toolCalls, readReserve, synthesis}`. They may also declare `maximum: {toolCalls, readReserve}` inside that object. A recipe without `maximum` is an exact pin, which preserves the fixed behavior of existing recipes. A ranged recipe admits the optional dispatch request `budget: {toolCalls, readReserve, retryRevision?}` only when the request is inside its maximum. `retryRevision` has the same two integer fields and preauthorizes the ceiling that a later automatic retry, bounded result-contract revision, or review revision may select. The loop guard raises a result-contract revision boundary only in this case. A phase without that ceiling cannot grow and retains the existing text-only repair behavior.
81
+
82
+ `toolCalls` is the admitted-call phase boundary. The final `readReserve` slots accept canonical `read` plus the agent's granted mutation tools, so a writer can still deliver inside its own reserve. Admission requires integers and `0 <= readReserve < toolCalls` for every declared phase. `synthesis: true` forces a text-only final round, while `false` stops after the admitted phase. `guardrails.workerToolCallCap` remains the operator-controlled lifetime ceiling and always wins when lower. A default may be clamped by a lower operator cap so default callers retain their prior behavior; an explicit request outside the operator cap is denied.
83
+
84
+ Admission computes one immutable envelope with the recipe policy, invocation request, effective worker budget, and every clamp or escalation reason. Native workers and Claude SDK enforce the effective budget. Claude Code, Antigravity, and ACP delegation reject invocation envelopes because their black-box loops cannot provide equivalent per-call mediation. Before launch, every admitted WorkerSpec v3 still contains one concrete effective budget and a settings fingerprint. The envelope provenance is sealed in the run ledger and receipt and appears in monitor, fleet status, and the live fleet card.
81
85
 
82
86
  ## Node setup
83
87
 
@@ -156,7 +160,7 @@ Use `clio-coder fleet resume [--json]` to reopen admission early. Detailed drain
156
160
 
157
161
  With no fleet configured and nothing requested, placement resolves to the
158
162
  implicit local path and optional fleet-node provenance may remain absent.
159
- Every new receipt uses strict integrity v15; older receipt formats are not
163
+ Every new receipt uses strict integrity v19; older receipt formats are not
160
164
  accepted by the current reader.
161
165
 
162
166
  ## Failure semantics
@@ -198,8 +202,92 @@ request-level `autonomy` can only narrow the level (reviewers and judges run
198
202
  | Detached | `detach: true` | Return logical assignment ids and a batch id immediately; collect later. |
199
203
  | Review gate | `review: {reviewer?, max_cycles?}` | Builder, read-only reviewer verdict, bounded revise loop. |
200
204
  | Compete | `mode: "compete", candidates: 2..4` | N candidates in scratch worktrees, read-only judge, winner applied or preserved. |
205
+ | Council | `mode: "council", roster: "design"` | Two to five read-only members answer the same task, with optional vote or judge synthesis. |
201
206
  | Agent automation | `agent: "auto"` | Baselines candidate agent from task shape via shared classifier (`coder`, `tester`, `documenter`, `verifier`, `researcher`, `scout`); advisory unless activated. |
202
207
 
208
+ ### Single-writer token
209
+
210
+ A parallel batch may declare `writers: 1`. One is the only accepted value in
211
+ this release, and omission retains ordinary parallel admission. The scheduler
212
+ admits at most one write-scope step at a time. An agent step with a nonempty
213
+ `writes` allowlist is a writer, as is a workspace-scope step that may mutate
214
+ the checkout. Read-scope steps and agent steps with `writes: []` remain
215
+ concurrent. Waiting writers follow the plan's declared step order and then the
216
+ request order. Agent ledger claims remain advisory and do not enforce the
217
+ token.
218
+
219
+ The first checkout writer acquires a process-owned lease under the Clio state
220
+ directory. Its key is the canonical checkout path, and its record contains the
221
+ owner pid, process birth token, and acquisition time. A live sibling process
222
+ causes admission to fail with `checkout_writer_lease_held` and the holder pid.
223
+ A dead owner or reused pid is reclaimed. The lease remains held until the last
224
+ writer settles, including writers collected from detached batches. Read-only
225
+ runs never acquire it.
226
+
227
+ ### Worktree per task
228
+
229
+ A singular writer or an item in `tasks` may declare `worktree: true` and
230
+ `apply: "merge" | "preserve"`. The default is `merge`. Clio creates
231
+ `.clio-coder/worktrees/<runId>/` on `clio/task/<runId>`, maps the worker cwd and
232
+ protected artifacts into that checkout, and runs declared host verification
233
+ there. The approved execution snapshot renders both fields and freezes the
234
+ parent checkout as the merge destination.
235
+
236
+ After a successful worker and successful host verification, merge application
237
+ commits the task branch, rechecks protected paths, and uses the same guarded
238
+ merge path as compete. A conflict fails closed with
239
+ `worktree_merge_conflict` and preserves the branch and worktree. Preserve
240
+ application never merges and reports the branch. A detached task applies when its run finalizes, so `monitor(mode="collect")` returns the sealed application receipt.
241
+ Admission refuses a non-git checkout, a read-only agent, compete mode, or an
242
+ explicit cwd outside the parent checkout with a named reason.
243
+
244
+ ### Typed intent and host-run verification
245
+
246
+ The singular request and every object in `tasks` accept an optional `intent`:
247
+
248
+ ```json
249
+ {
250
+ "read_roots": ["src/domains/dispatch"],
251
+ "write_roots": ["src/tools"],
252
+ "relevant_paths": ["docs/fleet-dispatch.md"],
253
+ "expected_outputs": ["dist/cli.js"],
254
+ "verification": [{ "check": "test", "timeout_ms": 600000 }]
255
+ }
256
+ ```
257
+
258
+ A top-level intent is inherited by batch items unless an item supplies its own
259
+ intent. `gate: "test"` is exact shorthand for
260
+ `intent.verification: [{check: "test"}]`; supplying both spellings is refused.
261
+ Every path is normalized into a sorted, duplicate-free repository-relative
262
+ POSIX path list before approval. Absolute paths, empty paths, root escapes,
263
+ malformed entries, and values beyond the documented caps fail admission.
264
+ Normalized `intent.writeRoots` feeds the existing worker write-boundary
265
+ enforcement when no legacy `JobSpec.writeRoots` exists. Conflicting declarations
266
+ are refused as `intent_write_roots_contradiction`.
267
+
268
+ Verification values are declared check ids, never shell commands. Admission
269
+ resolves each id from a package script or `.clio-coder/verifiers.yaml`, clamps
270
+ the requested timeout to the declaration, and freezes the exact argv, cwd,
271
+ timeout, and normalized intent into the execution snapshot and plan hash. A
272
+ later catalog edit cannot change the approved command. Undeclared ids fail
273
+ before approval with `verification_check_undeclared` and declaration guidance.
274
+
275
+ After a successful worker attempt, the orchestrator runs the frozen checks with
276
+ no shell, a fixed cwd, and the code-step environment allowlist. Logs are written
277
+ under the run artifact directory. Successful evidence is memoized by the
278
+ workspace fingerprint, resolved argv, cwd, and allowed environment values. A
279
+ memo hit names the run that produced the original evidence. A changed tree is a
280
+ miss. An unsuccessful worker records `hostVerification.status="skipped"` with
281
+ `reason="worker_not_successful"`; a failed host check records `rejected` with
282
+ its exit code, bounded output tail, and artifact path. Worker-reported command
283
+ success never populates this status.
284
+
285
+ Host checks are supported for singular, parallel, sequential, pipeline, and
286
+ detached native runs. Review and compete accept intent paths and outputs but
287
+ refuse verification entries with `verification_unsupported_for_mode`.
288
+ Claude Code subprocess routes refuse them with
289
+ `verification_unsupported_runtime`.
290
+
203
291
  ### Agent ledger
204
292
 
205
293
  Every topology that runs more than one worker at once opens an agent ledger, the
@@ -317,6 +405,32 @@ the workers are quiesced but the candidates remain until that output is bound
317
405
  to an integrity-verified judge receipt; a recovered winner is preserved for
318
406
  operator inspection rather than silently auto-applied after restart.
319
407
 
408
+ ### Council
409
+
410
+ Council is the read-only sibling of compete. Two to five members run the same
411
+ singular task concurrently on local HTTP or native targets. A request selects
412
+ exactly one configured `workers.rosters` entry or supplies inline `members`.
413
+ Admission pins every member to `read-only` autonomy and to the `read`, `grep`,
414
+ `find`, `ls`, `code_nav`, and `context` tool surface. A route that resolves to
415
+ an SSH fleet node is refused before approval. Council never creates a worktree
416
+ and never mutates the workspace.
417
+
418
+ Council supports one to three rounds. The first round gives every member the
419
+ same task and briefing. A later round gives each member the other members'
420
+ prior answers as labelled, untrusted briefing data. The member never receives
421
+ its own prior answer. Each briefing is limited to 8 KiB and carries an explicit
422
+ truncation marker when necessary. A failed peer contributes a labelled failure
423
+ marker and no answer text.
424
+
425
+ `synthesis: "none"` returns the final member answers directly. `vote` performs
426
+ a deterministic majority tally over structured `verdict` fields without a
427
+ model call. A vote with no majority reports `no_majority`, and a vote with no
428
+ verdict fields reports `no_verdict_field`. `judge` runs one additional read-only judge against all final
429
+ answers. Every member run seals a receipt. A judge receipt points backward to
430
+ every final member receipt through gate provenance. The approval artifact names
431
+ each member's label, target, model, thinking level, node, color, round count,
432
+ and synthesis mode, so the plan hash binds the whole council contract.
433
+
320
434
  ### ExecutionPlan and plan approval
321
435
 
322
436
  Every orchestration shape compiles to one strict ExecutionPlan v2 DAG with
@@ -363,11 +477,36 @@ rejected.
363
477
 
364
478
  Clio ships three builtin fleet contracts under `src/domains/agents/fleets/`: `build-test`, `build-review`, and `sdlc`. Projects can declare custom fleet contracts or shadow builtin fleets by placing Markdown files under `.clio-coder/fleets/<name>.md`. A file named `.clio-coder/fleets/<name>.md` shadows a builtin fleet of the same name.
365
479
 
366
- Fleet contracts support schema versions 1 through 4:
480
+ Fleet contracts support schema versions 1 through 5:
367
481
  - Version 1: Supports agent steps only.
368
482
  - Version 2: Introduces deterministic code steps.
369
483
  - Version 3: Adds bounded check/repair loops and commit steps with `commitFrom` message sources.
370
484
  - Version 4 (`FLEET_WRITE_BOUNDARY_VERSION = 4`): Introduces per-step declared write boundaries (`writes`) and orchestrator post-step enforcement.
485
+ - Version 5 (`FLEET_DYNAMIC_STEP_VERSION = 5`): Adds plan steps, executable gate steps, per-step target or worker-profile defaults, and the optional single-writer declaration.
486
+
487
+ #### Contract v5: plan, gate, and per-step target
488
+
489
+ A version 5 agent step, including an agent loop check or repair, may declare either `target: <targetId>` or `profile: <workers.profiles key>`. It may never declare both. Fleet preflight resolves these values through the same worker routing used by `/run --target` and `/run --agent-profile`. An unknown value refuses before approval and names the target or profile. Versions 1 through 4 continue to refuse both fields.
490
+
491
+ A `kind: gate` step asks its validator agent to write exactly one repository-relative `path`. The contract derives the step's write boundary from that path, so a separate `writes` property is refused. Its `run` property names a command whose argv contains one whole-token `{{path}}` placeholder. After the agent writes the executable acceptance check, the coordinator runs it without a shell against the otherwise untouched tree. A red result admits the gate. A green result refuses the run as `gate_not_discriminating`. The fleet ledger records the gate path hash. A loop may use `check: {kind: gate, gate: <stepId>}`. Only the bounded output lines beginning with `FAIL` cross that failed check edge into the repair agent.
492
+
493
+ A `kind: plan` step defaults to the builtin `architect`. It declares `roster`, `maxTasks` from 1 through 16, an optional `proposals: true`, its own scope and write boundary, and an optional target or profile default. The architect returns a `delegation-plan` object whose tasks contain `id`, `agent`, `description`, `depends_on`, `writes`, and an optional `mode` of `sequential` or `parallel`. The coordinator admits only roster agents, unique and acyclic task ids, resolvable dependencies, the declared task count, and task writes contained by the plan step boundary. Successful tasks carry lineage to the plan step and inherit its target or profile. A contract with `writers: 1` serializes write tasks through the existing single-writer token.
494
+
495
+ When `proposals: true`, every roster member first runs with read-only autonomy against the same task. Their answers reach the architect as labelled, bounded briefing data. Proposal agents do not choose targets for generated work. The plan step's contract default remains authoritative for every admitted task.
496
+
497
+ ### Fleet authoring
498
+
499
+ The fleet CLI provides five authoring and inspection operations:
500
+
501
+ - `clio-coder fleet new <name> --from <builtin>` copies one of `build-review`, `build-test`, or `sdlc` into `.clio-coder/fleets/<name>.md`. The command requires a safe file stem and refuses to replace an existing contract.
502
+ - `clio-coder fleet validate <name> [--json]` parses the contract, validates its graph and command bindings, resolves every agent, and compiles the execution plan. It creates no state directory, ledger row, reservation, worker, or receipt.
503
+ - `clio-coder fleet graph <name> [--json]` renders the compiled waves with each step kind, agent or command, scope, and write boundary. Bounded loops also show their check and repair nodes beneath the loop identifier.
504
+ - `clio-coder fleet commands init` discovers declared package scripts, just recipes, Makefile targets, and supported `pyproject.toml` script and tool entries. It writes a fully commented `.clio-coder/fleets/commands.yaml` draft. Uncommenting an entry confirms its exact argument vector, and an existing registry is never replaced.
505
+ - `clio-coder fleet run <name> --resume <runId>` starts a new fleet run after replaying the successful, integrity-valid prefix recorded for the named prior fleet run.
506
+
507
+ Run resumption is separate from `clio-coder fleet resume`, which continues to reopen dispatch admission after an operator drain. A resumable fleet run records its contract name, rendered plan hash, ordered step identifiers, variables, and receipt references in the durable fleet ledger. Runs started from the TUI through `/fleet run` use the same durable record and can be resumed by the authoring CLI. The new run records the prior fleet run as its resume parent. Replayed steps are reported as `replayed`, retain their original receipt or code-report references, and do not create new receipts.
508
+
509
+ The current contract must compile to the same plan hash. A mismatch refuses before execution and prints the changed positions in the ordered step list. Variables must exactly match the original run. A different value, an added value, or an omitted value is refused even when the resulting task text would otherwise be similar.
371
510
 
372
511
  ### Per-step write boundaries (Contract v4)
373
512
 
@@ -428,7 +567,10 @@ commands:
428
567
  argv: ["npm", "run", "build"]
429
568
  timeoutMs: 600000
430
569
  commit:
431
- argv: ["git", "commit", "-m"]
570
+ argv: ["git", "commit", "-m", "{{commitMessage}}"]
571
+ timeoutMs: 60000
572
+ acceptance:
573
+ argv: ["node", "{{path}}"]
432
574
  timeoutMs: 60000
433
575
  ```
434
576
 
@@ -439,6 +581,8 @@ Each command entry supports:
439
581
  - `env` (optional): Array of extra environment variable names to pass through on top of `FLEET_COMMAND_BASE_ENV` (`PATH`, `HOME`, `LANG`, `LC_ALL`, `TZ`, `TMPDIR`).
440
582
  - `description` (optional): Human-readable description.
441
583
 
584
+ The whole-token `{{commitMessage}}` substitution is available to commit steps. The whole-token `{{path}}` substitution is available to version 5 gate commands. Each substitution becomes exactly one argv element and never passes through a shell.
585
+
442
586
 
443
587
  ## Measured route selection and agent automation
444
588
 
@@ -522,7 +666,7 @@ assignment failed, reports the reason on stderr, and records it in the
522
666
  assignment's `outcomeDetail`.
523
667
 
524
668
  Assignment status, attempt ids, and terminal run id are stored separately in
525
- `assignments.json` while each attempt keeps its own strict v15 receipt.
669
+ `assignments.json` while each attempt keeps its own strict v19 receipt.
526
670
  Pipelines and batches await assignment terminals, so downstream stages consume
527
671
  the successful fallback output rather than an earlier failed attempt.
528
672
 
@@ -536,7 +680,7 @@ closed while a winner remains unapplied.
536
680
 
537
681
  ## Receipts
538
682
 
539
- Receipts carry exactly one integrity version (`RUN_RECEIPT_INTEGRITY_VERSION = 15`), which authenticates the complete receipt and reconstructible ledger provenance surface. There is no historical verification path: any other version is invalid, and a receipt that fails verification is never read as evidence. The fleet provenance fields covered by the digest
683
+ Receipts carry exactly one integrity version (`RUN_RECEIPT_INTEGRITY_VERSION = 19`), which authenticates the complete receipt and reconstructible ledger provenance surface. There is no historical verification path: any other version is invalid, and a receipt that fails verification is never read as evidence. The fleet provenance fields covered by the digest
540
684
  include:
541
685
 
542
686
  - `node`: the fleet node the worker ran on (`id`, `kind`, `host`). The `node.id` explicitly identifies the worker process host executing the task, not the model host (which is represented by the `target` id). This behavior tracks issue #120.
@@ -547,11 +691,22 @@ include:
547
691
  approval kind, and the registry approval identity when supervised).
548
692
  - `briefing`: byte count and SHA-256 of the exact canonical parent briefing;
549
693
  the prose is not retained and is distinct from bounded project context.
694
+ - `intent`: the normalized typed path, expected-output, and verification
695
+ declaration that admission sealed for the run.
696
+ - `verification`: the existing evidence state and basis observed from worker
697
+ tool execution.
698
+ - `hostVerification`: host-run status and the resolved check evidence, including
699
+ argv, cwd, exit code, duration, memo provenance, bounded output tail, and
700
+ optional artifact path.
701
+ - `worktree`: task worktree path, branch, diff hash, requested application,
702
+ applied status, and an optional closed failure reason.
550
703
  - `steering`: ordered byte/hash/timestamp and acknowledgement provenance for
551
704
  successfully written steers; steering prose is never stored.
552
705
  - `outcomeCode`: the stable terminal classifier, including
553
706
  `worker_final_output_missing` when an otherwise successful worker exits
554
- without a nonempty receipt-sealed final answer.
707
+ without a nonempty receipt-sealed final answer and
708
+ `host_verification_rejected` when a declared host check rejects the settled
709
+ tree. Both suppress automatic retry.
555
710
  - `routingIntent`, `routeDecision`, and `quality`: the normalized hard bounds,
556
711
  complete current-policy decision, exact execution role, route estimate and
557
712
  readiness evidence, and authenticated quality sources.
@@ -571,11 +726,14 @@ retained only as `state: "partial"` diagnostics and automatic retry is
571
726
  suppressed. Dispatch, monitor, ledger, receipt, terminal bus event, and retry
572
727
  policy all consume that same final classification.
573
728
 
574
- Receipt integrity and evidence verification are separate axes. Integrity says
729
+ Receipt integrity, host verification, and evidence verification are separate axes. Integrity says
575
730
  that the sealed receipt matches its ledger envelope; evidence verification
576
731
  reports whether Clio observed an applicable validation tool (or marks the
577
- basis unknown/not applicable). A read-only Scout can therefore report `receipt_integrity=verified/v15/sha256` alongside
578
- `evidence_verification=not_applicable/read-only-agent`. Briefing provenance and
732
+ basis unknown/not applicable). A read-only Scout can therefore report `receipt_integrity=verified/v19/sha256` alongside
733
+ `evidence_verification=not_applicable/read-only-agent`. Host verification is
734
+ rendered independently as `host_verification=verified|rejected|skipped|not_requested`.
735
+ A host-executed successful check projects onto canonical validation grounding as
736
+ authenticated validator evidence. Briefing provenance and
579
737
  bounded `project_context` provenance are also rendered independently; neither
580
738
  hash substitutes for the other.
581
739
 
@@ -658,15 +816,70 @@ hard block.
658
816
  renders `local`), gate badges (`gate reviewer c2`), reroute badges, live
659
817
  tool activity (names only; arguments never cross the worker stdout seam),
660
818
  and a per-worker context meter.
819
+ - `Enter` on the selected Fleet Runs row opens its worker detail: the phase,
820
+ the running call with a redacted action descriptor (`bash running npm
821
+ test`), and the bounded tail of the worker's own prose. The default list
822
+ stays compact, so a fan-out of scouts costs one card each until an operator
823
+ opens one. Detail follows the cursor rather than pinning to a run.
824
+ - The board and the transcript worker block read one projection
825
+ (`src/interactive/worker-progress.ts`), so they cannot disagree about what a
826
+ worker is saying or touching. It keeps 40 lines and 4096 bytes of tail, 8
827
+ distinct tool names, 4 recent actions, and accepts 16 KB of delta bytes per
828
+ 250 ms; what the bounds refuse is counted and named on the card beside the
829
+ `/view dispatch:<runId>` deep link.
830
+ - Action descriptors are composed where the arguments are trusted: the tool
831
+ registry's admission path, the Claude tool mapper, and the ACP update
832
+ mapper. Each reads a fixed verb vocabulary and a fixed argument-field
833
+ allowlist, scrubs credentials, strips escape sequences, and bounds the
834
+ result to 64 characters before it crosses the worker stdout seam. Raw
835
+ argument objects never cross at all.
836
+ - Reasoning content is never displayed. The detail may name a `thinking`
837
+ phase and the usage facts the card already carries, never the text.
838
+ - Settlement replaces the provisional tail with the sealed receipt's answer;
839
+ a run whose receipt cannot be read keeps its own last durable message.
661
840
  - The context meter renders the worker's last-message context occupancy
662
841
  against the model's context window: healthy below 80 percent, warn from 80,
663
842
  critical from 95.
664
843
  - `/fleet` opens Settings → Fleet: profiles (with the node pin), bindings,
665
844
  and read-only node rows (state, capacity, and last-seen). Running and
666
845
  retrying runs, with their node, live in the `Alt+W` Fleet Runs board.
846
+ - `/fleet run <name> [--var k=v ...]` compiles the contract's plan and opens
847
+ the approval overlay before anything dispatches. The overlay lists the steps
848
+ grouped by wave, and for each step its kind, its agent and resolved target
849
+ (or its command id and the exact argv from `commands.yaml` for a code step),
850
+ its scope, and its declared write boundary, followed by the budget ceiling
851
+ the run would be admitted under. Enter dispatches the plan through the same
852
+ path `clio-coder fleet run` uses, so admission, autonomy, receipts, and the
853
+ durable ledger are identical. Esc cancels with nothing dispatched and nothing
854
+ written. A contract that fails preflight opens the same overlay with its
855
+ diagnostics and no accept key. A turn in flight refuses the command with a
856
+ notice rather than queueing it: an approved plan describes the workspace as
857
+ it stands.
858
+ - A council is one question asked of several members, so its rows render as one
859
+ card rather than as three to five unrelated neighbours. On the `Alt+W` board the
860
+ members sit side by side, one column each, as long as every column keeps at
861
+ least 34 cells; below that the whole group stacks one member under another
862
+ rather than squeezing some columns and not others. Each column carries the
863
+ member label in its roster color (a member with no color takes the accent), the
864
+ target and model, the round, the status, and the same bounded answer tail the
865
+ run's own card would show. The synthesis run takes the full width under the
866
+ members, because it is the council's answer rather than one voice in it. A
867
+ council that ran several rounds still shows one column per member: each label
868
+ keeps its newest round, so the card describes the council rather than its
869
+ history.
870
+ - The compact Fleet Runs island shows a council as one card naming the group, how
871
+ many members are seated, and which round they are on. The grid belongs to the
872
+ board, where there is width to read an answer in. `/share` is what moves a
873
+ council answer into the main agent's context; the card moves nothing.
874
+ - Board rows a fleet plan dispatched carry a phase column naming the step's
875
+ wave index and step id (`w2 build`). A run that is not a fleet step renders
876
+ the column empty. The compact Fleet Runs island keeps its fixed width, so it
877
+ shows the column only when the row can still hold a readable agent label;
878
+ otherwise the phase appears on the expanded card.
667
879
  - The monitor tool reports the node and reroute lineage on `status`, `list`,
668
880
  and `collect`.
669
881
  - `clio-coder fleet status [--json]` shows the durable ledger view cross-process.
882
+ - A worker permission escalation uses the `Worker escalation` consequence tier in operator presentation. The tier names the worker agent and run and describes where the one-shot answer returns. It does not approve the request, change the worker's inherited autonomy, or weaken the safety net; the existing worker escalation protocol remains the only resolution path.
670
883
 
671
884
  ## Speculation observer
672
885
 
@@ -49,11 +49,11 @@ Co-authored-by: Clio Coder <clio-coder@iowarp.ai>
49
49
  Existing human trailers stay in place. A Clio trailer already present in any
50
50
  letter case is respected rather than repeated, line endings are normalized only
51
51
  while attribution is enabled, and repeated processing is idempotent. When a directly relevant
52
- receipt-v15 digest passes integrity verification, Clio may additionally add the
52
+ receipt-v19 digest passes integrity verification, Clio may additionally add the
53
53
  full digest:
54
54
 
55
55
  ```text
56
- Clio-Evidence: receipt-v15/sha256:<64-character digest>
56
+ Clio-Evidence: receipt-v19/sha256:<64-character digest>
57
57
  ```
58
58
 
59
59
  Clio does not invent, shorten, or add an unrelated digest. The role trailers do
package/docs/glossary.md CHANGED
@@ -28,7 +28,7 @@ This document defines the 45 core architectural concepts and terminology used th
28
28
 
29
29
  ### 6. Receipt
30
30
  - **Definition**: An immutable, cryptographically sealed record of a completed run containing full execution facts, tool telemetry, token accounting, validation grounding, and outcome codes.
31
- - **Owning Type**: `RunReceipt` in `src/domains/dispatch/types.ts` (`RUN_RECEIPT_INTEGRITY_VERSION = 15`).
31
+ - **Owning Type**: `RunReceipt` in `src/domains/dispatch/types.ts` (`RUN_RECEIPT_INTEGRITY_VERSION = 19`).
32
32
 
33
33
  ### 7. Envelope
34
34
  - **Definition**: A bounded container enforcing byte-length limits and truncation indicators on a dynamic payload. Tool output carries shown and total byte counts plus a continuation fragment; a parent briefing carries byte count and SHA-256 content hash instead.
@@ -3,7 +3,7 @@
3
3
  Clio Coder is designed to be self-contained and platform-compliant. This document outlines the default directory paths, file purposes, permission levels, and lifecycle commands (`install`, `reset`, `upgrade`, and `uninstall`). Clio Coder installs from npm as `@iowarp/clio-coder` (`npm install -g @iowarp/clio-coder`, published since v0.3.0) or from a source checkout with a deterministic local symlink; the CLI classifies both install kinds and `clio-coder upgrade` handles each.
4
4
 
5
5
  > [!TIP]
6
- > **Interactive Spec Available:** An interactive dashboard with a path simulator and visual flowcharts is located at [docs/html/lifecycle_blueprint.html](html/lifecycle_blueprint.html) (Version: 0.3.4). You can open it directly in any web browser to view details dynamically.
6
+ > **Interactive Spec Available:** An interactive dashboard with a path simulator and visual flowcharts is located at [docs/html/lifecycle_blueprint.html](html/lifecycle_blueprint.html) (Version: 0.3.7). You can open it directly in any web browser to view details dynamically.
7
7
 
8
8
  ---
9
9
 
@@ -229,7 +229,7 @@ Upgrading from 0.3.1 to 0.3.3 is automated:
229
229
  clio-coder upgrade
230
230
  ```
231
231
 
232
- Key lifecycle and operational updates in v0.3.4:
232
+ Key lifecycle and operational updates in v0.3.7:
233
233
  - Upgraded the underlying engine SDK libraries to 0.84.0 with signal-aware OAuth cancellation.
234
234
  - Hardened migration resilience: damaged `credentials.yaml` files no longer block upgrades when no renames are needed (#121); `--skip-migrations` is available as a recovery override.
235
235
  - Fullscreen TUI mode (`terminal.tuiMode`, `terminal.fullscreenScrollbar`) is available via Settings → Terminal (restart required). Adaptive presentation pacing is the live `terminal.smoothStreaming` setting; 0.3.3 defaults it to `off`, with conservative `auto` and explicit `on` available from the same section.