dominds 1.18.2 → 1.19.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 (277) hide show
  1. package/dist/access-control.js +6 -6
  2. package/dist/apps/runtime.d.ts +2 -2
  3. package/dist/apps/runtime.js +28 -28
  4. package/dist/apps-host/client.d.ts +1 -1
  5. package/dist/apps-host/host.js +7 -7
  6. package/dist/apps-host/ipc-types.d.ts +2 -2
  7. package/dist/apps-host/ipc-types.js +10 -10
  8. package/dist/cli/read.d.ts +0 -1
  9. package/dist/cli/read.js +1 -6
  10. package/dist/dialog-display-state.d.ts +6 -6
  11. package/dist/dialog-display-state.js +46 -46
  12. package/dist/dialog-factory.d.ts +12 -12
  13. package/dist/dialog-factory.js +33 -30
  14. package/dist/dialog-fork.d.ts +2 -2
  15. package/dist/dialog-fork.js +140 -115
  16. package/dist/dialog-global-registry.d.ts +5 -5
  17. package/dist/dialog-global-registry.js +11 -11
  18. package/dist/dialog-instance-registry.d.ts +3 -3
  19. package/dist/dialog-instance-registry.js +52 -41
  20. package/dist/dialog.d.ts +100 -113
  21. package/dist/dialog.js +274 -229
  22. package/dist/docs/agent-priming.md +5 -5
  23. package/dist/docs/agent-priming.zh.md +5 -5
  24. package/dist/docs/app-constitution.md +1 -1
  25. package/dist/docs/app-constitution.zh.md +1 -1
  26. package/dist/docs/cli-usage.md +1 -1
  27. package/dist/docs/cli-usage.zh.md +1 -1
  28. package/dist/docs/design.md +14 -14
  29. package/dist/docs/design.zh.md +14 -14
  30. package/dist/docs/dialog-persistence.md +58 -58
  31. package/dist/docs/dialog-persistence.zh.md +61 -61
  32. package/dist/docs/dialog-system.md +363 -367
  33. package/dist/docs/dialog-system.zh.md +355 -357
  34. package/dist/docs/diligence-push.md +18 -18
  35. package/dist/docs/diligence-push.zh.md +17 -17
  36. package/dist/docs/dominds-agent-collaboration.zh.md +3 -3
  37. package/dist/docs/dominds-terminology.md +46 -47
  38. package/dist/docs/encapsulated-taskdoc.md +4 -4
  39. package/dist/docs/encapsulated-taskdoc.zh.md +3 -3
  40. package/dist/docs/fbr.md +30 -30
  41. package/dist/docs/fbr.zh.md +15 -15
  42. package/dist/docs/i18n.md +2 -2
  43. package/dist/docs/i18n.zh.md +2 -2
  44. package/dist/docs/mcp-support.md +5 -4
  45. package/dist/docs/mcp-support.zh.md +3 -2
  46. package/dist/docs/memory-system.md +4 -4
  47. package/dist/docs/memory-system.zh.md +1 -1
  48. package/dist/docs/mottos.md +1 -1
  49. package/dist/docs/mottos.zh.md +1 -1
  50. package/dist/docs/q4h.md +3 -3
  51. package/dist/docs/q4h.zh.md +1 -1
  52. package/dist/docs/roadmap.md +2 -2
  53. package/dist/docs/team_mgmt-toolset.md +11 -3
  54. package/dist/docs/team_mgmt-toolset.zh.md +9 -2
  55. package/dist/docs/tellask-collab.md +18 -18
  56. package/dist/docs/tellask-collab.zh.md +8 -8
  57. package/dist/docs/tellask-revive-context-refactor.zh.md +591 -0
  58. package/dist/evt-registry.d.ts +1 -2
  59. package/dist/evt-registry.js +2 -7
  60. package/dist/llm/gen/mock.js +9 -0
  61. package/dist/llm/kernel-driver/context.d.ts +1 -2
  62. package/dist/llm/kernel-driver/context.js +12 -26
  63. package/dist/llm/kernel-driver/drive.js +99 -75
  64. package/dist/llm/kernel-driver/engine.d.ts +2 -2
  65. package/dist/llm/kernel-driver/engine.js +10 -10
  66. package/dist/llm/kernel-driver/fbr.js +6 -6
  67. package/dist/llm/kernel-driver/flow.d.ts +1 -1
  68. package/dist/llm/kernel-driver/flow.js +129 -93
  69. package/dist/llm/kernel-driver/guardrails.js +4 -4
  70. package/dist/llm/kernel-driver/index.d.ts +1 -1
  71. package/dist/llm/kernel-driver/index.js +2 -2
  72. package/dist/llm/kernel-driver/loop.js +30 -30
  73. package/dist/llm/kernel-driver/reply-guidance.js +47 -52
  74. package/dist/llm/kernel-driver/restore.d.ts +3 -3
  75. package/dist/llm/kernel-driver/restore.js +23 -28
  76. package/dist/llm/kernel-driver/runtime.d.ts +1 -1
  77. package/dist/llm/kernel-driver/runtime.js +1 -1
  78. package/dist/llm/kernel-driver/sideDialog-txn.d.ts +8 -0
  79. package/dist/llm/kernel-driver/{subdialog-txn.js → sideDialog-txn.js} +13 -13
  80. package/dist/llm/kernel-driver/{subdialog.d.ts → sideDialog.d.ts} +13 -13
  81. package/dist/llm/kernel-driver/{subdialog.js → sideDialog.js} +203 -170
  82. package/dist/llm/kernel-driver/tellask-special.d.ts +7 -3
  83. package/dist/llm/kernel-driver/tellask-special.js +474 -497
  84. package/dist/llm/kernel-driver/types.d.ts +25 -9
  85. package/dist/mcp/config.d.ts +1 -0
  86. package/dist/mcp/config.js +7 -2
  87. package/dist/mcp/supervisor.d.ts +2 -0
  88. package/dist/mcp/supervisor.js +2 -1
  89. package/dist/minds/builtin/pangu/persona.en.md +4 -4
  90. package/dist/minds/load.js +6 -6
  91. package/dist/minds/system-prompt-parts.d.ts +1 -1
  92. package/dist/minds/system-prompt-parts.js +12 -12
  93. package/dist/minds/system-prompt.d.ts +1 -1
  94. package/dist/minds/system-prompt.js +56 -56
  95. package/dist/persistence-errors.d.ts +1 -1
  96. package/dist/persistence.d.ts +126 -121
  97. package/dist/persistence.js +1190 -786
  98. package/dist/priming.d.ts +3 -3
  99. package/dist/priming.js +62 -61
  100. package/dist/recovery/reply-special.js +5 -5
  101. package/dist/runtime/driver-messages.d.ts +3 -2
  102. package/dist/runtime/driver-messages.js +68 -57
  103. package/dist/runtime/inter-dialog-format.d.ts +12 -10
  104. package/dist/runtime/inter-dialog-format.js +80 -35
  105. package/dist/runtime/interjection-pause-stop.js +1 -1
  106. package/dist/runtime/reply-prompt-copy.d.ts +7 -3
  107. package/dist/runtime/reply-prompt-copy.js +39 -14
  108. package/dist/server/api-routes.js +87 -83
  109. package/dist/server/static-server.js +1 -1
  110. package/dist/server/websocket-handler.js +163 -153
  111. package/dist/tool-availability.js +1 -1
  112. package/dist/tools/app-reminders.js +17 -4
  113. package/dist/tools/ctrl.js +5 -5
  114. package/dist/tools/os.js +16 -16
  115. package/dist/tools/pending-tellask-reminder.js +20 -14
  116. package/dist/tools/prompts/control/en/index.md +1 -1
  117. package/dist/tools/prompts/control/en/principles.md +8 -8
  118. package/dist/tools/prompts/control/en/scenarios.md +7 -7
  119. package/dist/tools/prompts/control/en/tools.md +7 -7
  120. package/dist/tools/prompts/control/zh/principles.md +4 -4
  121. package/dist/tools/prompts/control/zh/scenarios.md +5 -5
  122. package/dist/tools/prompts/control/zh/tools.md +3 -3
  123. package/dist/tools/prompts/team_memory/en/scenarios.md +1 -1
  124. package/dist/tools/prompts/team_memory/zh/scenarios.md +1 -1
  125. package/dist/tools/team_mgmt-manual.js +2 -2
  126. package/dist/tools/team_mgmt-mcp-manual.js +10 -0
  127. package/dist/tools/team_mgmt.js +4 -4
  128. package/dist/utils/taskdoc.js +12 -12
  129. package/package.json +3 -3
  130. package/webapp/dist/assets/{_basePickBy-BPJaiZdW.js → _basePickBy-B7M9Q0Fa.js} +3 -3
  131. package/webapp/dist/assets/_basePickBy-B7M9Q0Fa.js.map +1 -0
  132. package/webapp/dist/assets/{_baseUniq-BEetT15i.js → _baseUniq-DAeYoL6j.js} +2 -2
  133. package/webapp/dist/assets/_baseUniq-DAeYoL6j.js.map +1 -0
  134. package/webapp/dist/assets/{arc-Dm7Zf36f.js → arc-Bh4nDbNR.js} +2 -2
  135. package/webapp/dist/assets/arc-Bh4nDbNR.js.map +1 -0
  136. package/webapp/dist/assets/{architectureDiagram-VXUJARFQ-BpTPtkuo.js → architectureDiagram-2XIMDMQ5-CxqmdsIm.js} +26 -8
  137. package/webapp/dist/assets/architectureDiagram-2XIMDMQ5-CxqmdsIm.js.map +1 -0
  138. package/webapp/dist/assets/{blockDiagram-VD42YOAC-C8fLN0iu.js → blockDiagram-WCTKOSBZ-CxIWLtpt.js} +187 -170
  139. package/webapp/dist/assets/blockDiagram-WCTKOSBZ-CxIWLtpt.js.map +1 -0
  140. package/webapp/dist/assets/{c4Diagram-YG6GDRKO-BpPr62CH.js → c4Diagram-IC4MRINW-1qErOIgG.js} +4 -4
  141. package/webapp/dist/assets/c4Diagram-IC4MRINW-1qErOIgG.js.map +1 -0
  142. package/webapp/dist/assets/{channel-EMYoPjW3.js → channel-DkgZHNUe.js} +2 -2
  143. package/webapp/dist/assets/channel-DkgZHNUe.js.map +1 -0
  144. package/webapp/dist/assets/{chunk-4BX2VUAB-CefNtjWG.js → chunk-4BX2VUAB-BmdMbU9v.js} +2 -2
  145. package/webapp/dist/assets/chunk-4BX2VUAB-BmdMbU9v.js.map +1 -0
  146. package/webapp/dist/assets/{chunk-55IACEB6-C_X7T43V.js → chunk-55IACEB6-D6LDTDBy.js} +2 -2
  147. package/webapp/dist/assets/chunk-55IACEB6-D6LDTDBy.js.map +1 -0
  148. package/webapp/dist/assets/{chunk-FMBD7UC4-ORmtkrtS.js → chunk-FMBD7UC4-C-BdCe4C.js} +2 -2
  149. package/webapp/dist/assets/chunk-FMBD7UC4-C-BdCe4C.js.map +1 -0
  150. package/webapp/dist/assets/{chunk-TZMSLE5B-Gao4qrq7.js → chunk-JSJVCQXG-WA_BLIm9.js} +14 -6
  151. package/webapp/dist/assets/chunk-JSJVCQXG-WA_BLIm9.js.map +1 -0
  152. package/webapp/dist/assets/{chunk-QN33PNHL-LTAOVhWu.js → chunk-KX2RTZJC-CA7sDJO5.js} +2 -2
  153. package/webapp/dist/assets/chunk-KX2RTZJC-CA7sDJO5.js.map +1 -0
  154. package/webapp/dist/assets/{chunk-DI55MBZ5-CbvrsI_w.js → chunk-NQ4KR5QH-wlvxalE3.js} +9 -7
  155. package/webapp/dist/assets/chunk-NQ4KR5QH-wlvxalE3.js.map +1 -0
  156. package/webapp/dist/assets/{chunk-QZHKN3VN-ZoUM_4u5.js → chunk-QZHKN3VN-Bo1VMcph.js} +2 -2
  157. package/webapp/dist/assets/chunk-QZHKN3VN-Bo1VMcph.js.map +1 -0
  158. package/webapp/dist/assets/{chunk-B4BG7PRW-BRe3_2oA.js → chunk-WL4C6EOR-B-Pk44be.js} +171 -121
  159. package/webapp/dist/assets/chunk-WL4C6EOR-B-Pk44be.js.map +1 -0
  160. package/webapp/dist/assets/{classDiagram-2ON5EDUG-uha1vIGN.js → classDiagram-VBA2DB6C-BqKuyb49.js} +7 -6
  161. package/webapp/dist/assets/classDiagram-VBA2DB6C-BqKuyb49.js.map +1 -0
  162. package/webapp/dist/assets/{classDiagram-v2-WZHVMYZB-uha1vIGN.js → classDiagram-v2-RAHNMMFH-BqKuyb49.js} +7 -6
  163. package/webapp/dist/assets/classDiagram-v2-RAHNMMFH-BqKuyb49.js.map +1 -0
  164. package/webapp/dist/assets/{clone-_9Ayb1Gp.js → clone-BX5z8WVZ.js} +2 -2
  165. package/webapp/dist/assets/clone-BX5z8WVZ.js.map +1 -0
  166. package/webapp/dist/assets/{cose-bilkent-S5V4N54A-C8wDw3NY.js → cose-bilkent-S5V4N54A-B-s11SgN.js} +2 -2
  167. package/webapp/dist/assets/cose-bilkent-S5V4N54A-B-s11SgN.js.map +1 -0
  168. package/webapp/dist/assets/cytoscape.esm-Bm8DJGmZ.js.map +1 -1
  169. package/webapp/dist/assets/{dagre-6UL2VRFP-BUSeNot0.js → dagre-KLK3FWXG-DmQFV2qK.js} +7 -7
  170. package/webapp/dist/assets/dagre-KLK3FWXG-DmQFV2qK.js.map +1 -0
  171. package/webapp/dist/assets/defaultLocale-B2RvLBDe.js.map +1 -1
  172. package/webapp/dist/assets/{diagram-PSM6KHXK-CMZAksVC.js → diagram-E7M64L7V-QRaBfST8.js} +10 -10
  173. package/webapp/dist/assets/diagram-E7M64L7V-QRaBfST8.js.map +1 -0
  174. package/webapp/dist/assets/{diagram-QEK2KX5R-BQKoRtwy.js → diagram-IFDJBPK2-lrWn1Obo.js} +9 -8
  175. package/webapp/dist/assets/diagram-IFDJBPK2-lrWn1Obo.js.map +1 -0
  176. package/webapp/dist/assets/{diagram-S2PKOQOG-DjMG97kd.js → diagram-P4PSJMXO-sTU7Hh-Y.js} +8 -8
  177. package/webapp/dist/assets/diagram-P4PSJMXO-sTU7Hh-Y.js.map +1 -0
  178. package/webapp/dist/assets/{erDiagram-Q2GNP2WA-BujwA137.js → erDiagram-INFDFZHY-Cx6jc9Wq.js} +96 -75
  179. package/webapp/dist/assets/erDiagram-INFDFZHY-Cx6jc9Wq.js.map +1 -0
  180. package/webapp/dist/assets/{flowDiagram-NV44I4VS-DgwPjg4y.js → flowDiagram-PKNHOUZH-DfGI49Dz.js} +98 -81
  181. package/webapp/dist/assets/flowDiagram-PKNHOUZH-DfGI49Dz.js.map +1 -0
  182. package/webapp/dist/assets/{ganttDiagram-JELNMOA3-Db2ykf3E.js → ganttDiagram-A5KZAMGK-nrcHWWaM.js} +28 -3
  183. package/webapp/dist/assets/ganttDiagram-A5KZAMGK-nrcHWWaM.js.map +1 -0
  184. package/webapp/dist/assets/{gitGraphDiagram-V2S2FVAM-D_gSifkv.js → gitGraphDiagram-K3NZZRJ6-D8ivAqd6.js} +38 -46
  185. package/webapp/dist/assets/gitGraphDiagram-K3NZZRJ6-D8ivAqd6.js.map +1 -0
  186. package/webapp/dist/assets/graph-R5G-y8tB.js +782 -0
  187. package/webapp/dist/assets/graph-R5G-y8tB.js.map +1 -0
  188. package/webapp/dist/assets/{index-DLajsIDJ.js → index--fy89xGh.js} +2214 -2023
  189. package/webapp/dist/assets/index--fy89xGh.js.map +1 -0
  190. package/webapp/dist/assets/{index-xvYYeHuy.css → index-DZFkLLVz.css} +18 -10
  191. package/webapp/dist/assets/{infoDiagram-HS3SLOUP-BDba5pKs.js → infoDiagram-LFFYTUFH-PIoZHr7s.js} +7 -7
  192. package/webapp/dist/assets/infoDiagram-LFFYTUFH-PIoZHr7s.js.map +1 -0
  193. package/webapp/dist/assets/init-ZxktEp_H.js.map +1 -1
  194. package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-oCM-LYk1.js +966 -0
  195. package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-oCM-LYk1.js.map +1 -0
  196. package/webapp/dist/assets/{journeyDiagram-XKPGCS4Q-CmJAbmlm.js → journeyDiagram-4ABVD52K-C2qidjQ5.js} +5 -5
  197. package/webapp/dist/assets/journeyDiagram-4ABVD52K-C2qidjQ5.js.map +1 -0
  198. package/webapp/dist/assets/{kanban-definition-3W4ZIXB7-DxQeBTDk.js → kanban-definition-K7BYSVSG-Du0TC8WS.js} +5 -3
  199. package/webapp/dist/assets/kanban-definition-K7BYSVSG-Du0TC8WS.js.map +1 -0
  200. package/webapp/dist/assets/{layout-DteV_yE8.js → layout-VmEo1OEB.js} +5 -5
  201. package/webapp/dist/assets/layout-VmEo1OEB.js.map +1 -0
  202. package/webapp/dist/assets/{linear-zItbPrND.js → linear-B662YHAc.js} +2 -2
  203. package/webapp/dist/assets/linear-B662YHAc.js.map +1 -0
  204. package/webapp/dist/assets/{mindmap-definition-VGOIOE7T-BJXI7UqO.js → mindmap-definition-YRQLILUH-D7arZj95.js} +7 -5
  205. package/webapp/dist/assets/mindmap-definition-YRQLILUH-D7arZj95.js.map +1 -0
  206. package/webapp/dist/assets/ordinal-CxptdPJm.js.map +1 -1
  207. package/webapp/dist/assets/{pieDiagram-ADFJNKIX-BpM-aH2p.js → pieDiagram-SKSYHLDU-DvjPP4PA.js} +8 -8
  208. package/webapp/dist/assets/pieDiagram-SKSYHLDU-DvjPP4PA.js.map +1 -0
  209. package/webapp/dist/assets/{quadrantDiagram-AYHSOK5B-NXdIpA15.js → quadrantDiagram-337W2JSQ-B_JUGMj_.js} +3 -3
  210. package/webapp/dist/assets/quadrantDiagram-337W2JSQ-B_JUGMj_.js.map +1 -0
  211. package/webapp/dist/assets/{requirementDiagram-UZGBJVZJ-D1AICAA0.js → requirementDiagram-Z7DCOOCP-DF0mpvE3.js} +16 -6
  212. package/webapp/dist/assets/requirementDiagram-Z7DCOOCP-DF0mpvE3.js.map +1 -0
  213. package/webapp/dist/assets/{sankeyDiagram-TZEHDZUN-WiReDPfo.js → sankeyDiagram-WA2Y5GQK-CoXlxv00.js} +2 -2
  214. package/webapp/dist/assets/sankeyDiagram-WA2Y5GQK-CoXlxv00.js.map +1 -0
  215. package/webapp/dist/assets/{sequenceDiagram-WL72ISMW-Cw76oP8t.js → sequenceDiagram-2WXFIKYE-DYqT5Pg7.js} +601 -201
  216. package/webapp/dist/assets/sequenceDiagram-2WXFIKYE-DYqT5Pg7.js.map +1 -0
  217. package/webapp/dist/assets/{stateDiagram-FKZM4ZOC-QjCeRczs.js → stateDiagram-RAJIS63D-D9b1mN8-.js} +9 -9
  218. package/webapp/dist/assets/stateDiagram-RAJIS63D-D9b1mN8-.js.map +1 -0
  219. package/webapp/dist/assets/{stateDiagram-v2-4FDKWEC3-IClqxQ4s.js → stateDiagram-v2-FVOUBMTO-DNzgudL_.js} +5 -5
  220. package/webapp/dist/assets/stateDiagram-v2-FVOUBMTO-DNzgudL_.js.map +1 -0
  221. package/webapp/dist/assets/{timeline-definition-IT6M3QCI-BfyfTY7m.js → timeline-definition-YZTLITO2-CkyKUY7A.js} +3 -3
  222. package/webapp/dist/assets/timeline-definition-YZTLITO2-CkyKUY7A.js.map +1 -0
  223. package/webapp/dist/assets/{treemap-GDKQZRPO-C5MiL6--.js → treemap-KZPCXAKY-CZd09kF-.js} +37 -24
  224. package/webapp/dist/assets/treemap-KZPCXAKY-CZd09kF-.js.map +1 -0
  225. package/webapp/dist/assets/vennDiagram-LZ73GAT5-BxVF5Olo.js +2487 -0
  226. package/webapp/dist/assets/vennDiagram-LZ73GAT5-BxVF5Olo.js.map +1 -0
  227. package/webapp/dist/assets/{xychartDiagram-PRI3JC2R-ybaJrSry.js → xychartDiagram-JWTSCODW-BRwRloPc.js} +4 -4
  228. package/webapp/dist/assets/xychartDiagram-JWTSCODW-BRwRloPc.js.map +1 -0
  229. package/webapp/dist/index.html +2 -2
  230. package/dist/docs/issues/global-dialog-event-broadcaster-missing.md +0 -128
  231. package/dist/llm/kernel-driver/subdialog-txn.d.ts +0 -8
  232. package/webapp/dist/assets/_basePickBy-BPJaiZdW.js.map +0 -1
  233. package/webapp/dist/assets/_baseUniq-BEetT15i.js.map +0 -1
  234. package/webapp/dist/assets/arc-Dm7Zf36f.js.map +0 -1
  235. package/webapp/dist/assets/architectureDiagram-VXUJARFQ-BpTPtkuo.js.map +0 -1
  236. package/webapp/dist/assets/blockDiagram-VD42YOAC-C8fLN0iu.js.map +0 -1
  237. package/webapp/dist/assets/c4Diagram-YG6GDRKO-BpPr62CH.js.map +0 -1
  238. package/webapp/dist/assets/channel-EMYoPjW3.js.map +0 -1
  239. package/webapp/dist/assets/chunk-4BX2VUAB-CefNtjWG.js.map +0 -1
  240. package/webapp/dist/assets/chunk-55IACEB6-C_X7T43V.js.map +0 -1
  241. package/webapp/dist/assets/chunk-B4BG7PRW-BRe3_2oA.js.map +0 -1
  242. package/webapp/dist/assets/chunk-DI55MBZ5-CbvrsI_w.js.map +0 -1
  243. package/webapp/dist/assets/chunk-FMBD7UC4-ORmtkrtS.js.map +0 -1
  244. package/webapp/dist/assets/chunk-QN33PNHL-LTAOVhWu.js.map +0 -1
  245. package/webapp/dist/assets/chunk-QZHKN3VN-ZoUM_4u5.js.map +0 -1
  246. package/webapp/dist/assets/chunk-TZMSLE5B-Gao4qrq7.js.map +0 -1
  247. package/webapp/dist/assets/classDiagram-2ON5EDUG-uha1vIGN.js.map +0 -1
  248. package/webapp/dist/assets/classDiagram-v2-WZHVMYZB-uha1vIGN.js.map +0 -1
  249. package/webapp/dist/assets/clone-_9Ayb1Gp.js.map +0 -1
  250. package/webapp/dist/assets/cose-bilkent-S5V4N54A-C8wDw3NY.js.map +0 -1
  251. package/webapp/dist/assets/dagre-6UL2VRFP-BUSeNot0.js.map +0 -1
  252. package/webapp/dist/assets/diagram-PSM6KHXK-CMZAksVC.js.map +0 -1
  253. package/webapp/dist/assets/diagram-QEK2KX5R-BQKoRtwy.js.map +0 -1
  254. package/webapp/dist/assets/diagram-S2PKOQOG-DjMG97kd.js.map +0 -1
  255. package/webapp/dist/assets/erDiagram-Q2GNP2WA-BujwA137.js.map +0 -1
  256. package/webapp/dist/assets/flowDiagram-NV44I4VS-DgwPjg4y.js.map +0 -1
  257. package/webapp/dist/assets/ganttDiagram-JELNMOA3-Db2ykf3E.js.map +0 -1
  258. package/webapp/dist/assets/gitGraphDiagram-V2S2FVAM-D_gSifkv.js.map +0 -1
  259. package/webapp/dist/assets/graph-BHjCU5xP.js +0 -425
  260. package/webapp/dist/assets/graph-BHjCU5xP.js.map +0 -1
  261. package/webapp/dist/assets/index-DLajsIDJ.js.map +0 -1
  262. package/webapp/dist/assets/infoDiagram-HS3SLOUP-BDba5pKs.js.map +0 -1
  263. package/webapp/dist/assets/journeyDiagram-XKPGCS4Q-CmJAbmlm.js.map +0 -1
  264. package/webapp/dist/assets/kanban-definition-3W4ZIXB7-DxQeBTDk.js.map +0 -1
  265. package/webapp/dist/assets/layout-DteV_yE8.js.map +0 -1
  266. package/webapp/dist/assets/linear-zItbPrND.js.map +0 -1
  267. package/webapp/dist/assets/mindmap-definition-VGOIOE7T-BJXI7UqO.js.map +0 -1
  268. package/webapp/dist/assets/pieDiagram-ADFJNKIX-BpM-aH2p.js.map +0 -1
  269. package/webapp/dist/assets/quadrantDiagram-AYHSOK5B-NXdIpA15.js.map +0 -1
  270. package/webapp/dist/assets/requirementDiagram-UZGBJVZJ-D1AICAA0.js.map +0 -1
  271. package/webapp/dist/assets/sankeyDiagram-TZEHDZUN-WiReDPfo.js.map +0 -1
  272. package/webapp/dist/assets/sequenceDiagram-WL72ISMW-Cw76oP8t.js.map +0 -1
  273. package/webapp/dist/assets/stateDiagram-FKZM4ZOC-QjCeRczs.js.map +0 -1
  274. package/webapp/dist/assets/stateDiagram-v2-4FDKWEC3-IClqxQ4s.js.map +0 -1
  275. package/webapp/dist/assets/timeline-definition-IT6M3QCI-BfyfTY7m.js.map +0 -1
  276. package/webapp/dist/assets/treemap-GDKQZRPO-C5MiL6--.js.map +0 -1
  277. package/webapp/dist/assets/xychartDiagram-PRI3JC2R-ybaJrSry.js.map +0 -1
@@ -11,10 +11,10 @@ This document provides detailed implementation specifications for the Dominds di
11
11
  3. [3-Type Teammate Tellask Taxonomy](#3-type-teammate-tellask-taxonomy)
12
12
  4. [Core Mechanisms](#core-mechanisms)
13
13
  5. [Q4H: Questions for Human](#q4h-questions-for-human)
14
- 6. [Dialog Hierarchy & Subdialogs](#dialog-hierarchy--subdialogs)
14
+ 6. [Dialog Relationship & SideDialogs](#dialog-relationship--sidedialogs)
15
15
  7. [Mental Clarity Tools](#mental-clarity-tools)
16
16
  8. [Reminder Management](#reminder-management)
17
- 9. [Subdialog Registry](#subdialog-registry)
17
+ 9. [SideDialog Registry](#sideDialog-registry)
18
18
  10. [Technical Architecture](#technical-architecture)
19
19
  11. [Dialog Management](#dialog-management)
20
20
  12. [Memory Management](#memory-management)
@@ -27,55 +27,55 @@ This document provides detailed implementation specifications for the Dominds di
27
27
  ## Terminology
28
28
 
29
29
  This chapter defines the implementation-facing terms used throughout this document.
30
- For bilingual / user-facing naming conventions (mainline dialog / sideline dialog; tellasker dialog / tellaskee dialog), see [`dominds-terminology.md`](./dominds-terminology.md).
30
+ For bilingual / user-facing naming conventions (Main Dialog / Side Dialog; tellasker / tellaskee), see [`dominds-terminology.md`](./dominds-terminology.md).
31
31
  For Taskdoc package structure and encapsulation rules, see [`encapsulated-taskdoc.md`](./encapsulated-taskdoc.md).
32
32
 
33
- ### Supdialog
33
+ ### AskerDialog
34
34
 
35
- A **supdialog** (short for "super dialog") is the supdialog in a hierarchical dialog relationship. It orchestrates and manages subdialogs, providing context, objectives, and guidance while receiving results, questions, and escalations from its subdialogs. The supdialog maintains the overall task context and determines when subdialogs are no longer needed.
35
+ An **askerDialog** is the implementation-facing dialog that currently owns an assignment or reply obligation for a sideDialog. It may be the main dialog or another sideDialog; it is a tellask/reply relationship, not inherently a hierarchy label.
36
36
 
37
- Note: **supdialog** is a structural parent in the dialog hierarchy. It is not the same as the **tellasker dialog** (the caller for the current Tellask). For TYPE A (`tellaskBack`), the tellasker dialog is the direct supdialog; for TYPE B/C, the tellasker dialog may be a different dialog.
37
+ Note: **askerDialog** is a tellask/reply relation, not a hierarchy or seniority label. For TYPE A (`tellaskBack`), the tellasker is the direct askerDialog; for TYPE B/C, the tellasker may be a different dialog.
38
38
 
39
- A supdialog may receive **TellaskBack** from its subdialogs during their task execution. When a subdialog needs guidance or additional context, it can Tellask back via `tellaskBack({ tellaskContent: "..." })` (TYPE A / `TellaskBack`), which provides responses that feed back into the subdialog's context.
39
+ An askerDialog may receive **TellaskBack** from sideDialogs that currently owe it a reply. When a sideDialog needs guidance or additional context, it can Tellask back via `tellaskBack({ tellaskContent: "..." })` (TYPE A / `TellaskBack`), which provides responses that feed back into the sideDialog's context.
40
40
 
41
- ### Subdialog
41
+ ### SideDialog
42
42
 
43
- A **subdialog** is a specialized dialog spawned by a supdialog to handle specific subtasks. Subdialogs operate with fresh context, focusing on targeted objectives while maintaining a communication link back to their supdialog.
43
+ A **sideDialog** is a specialized dialog spawned by an askerDialog to handle specific subtasks. SideDialogs operate with fresh context, focusing on targeted objectives while maintaining a communication link back to their askerDialog.
44
44
 
45
- **TellaskBack**: A subdialog can Tellask its **tellasker dialog** to request clarification during task execution. In TYPE A, the tellasker dialog is the direct supdialog. This allows the subdialog to ask questions and receive guidance while maintaining its own context and progress.
45
+ **TellaskBack**: A sideDialog can Tellask its **tellasker** to request clarification during task execution. In TYPE A, the tellasker is the direct askerDialog. This allows the sideDialog to ask questions and receive guidance while maintaining its own context and progress.
46
46
 
47
- ### Tellasker dialog / Tellaskee dialog (caller roles)
47
+ ### Tellasker / Tellaskee (Tellask roles)
48
48
 
49
- A **tellasker dialog** is the dialog that issued the current Tellask (the caller). A **tellaskee dialog** is the dialog handling that Tellask (this dialog). These are **call roles**, not hierarchy:
49
+ A **tellasker** is the dialog that issued the current Tellask. A **tellaskee** is the dialog handling that Tellask (this dialog). These are **Tellask roles**, not hierarchy:
50
50
 
51
- - For TYPE A (`tellaskBack`), the tellasker dialog is the direct supdialog.
52
- - For TYPE B/C, the tellasker dialog may be a different dialog (root dialog or another sideline dialog).
53
- - Responses route to the **current tellasker dialog** recorded in `assignmentFromSup`.
51
+ - For TYPE A (`tellaskBack`), the tellasker is the direct askerDialog.
52
+ - For TYPE B/C, the tellasker may be a different dialog (main dialog or another Side Dialog).
53
+ - Responses route to the **current tellasker** recorded in `assignmentFromAsker`.
54
54
 
55
- ### Main Dialog (Root Dialog)
55
+ ### Main Dialog
56
56
 
57
- The **main dialog** (also called **root dialog**) is the top-level dialog in a dialog hierarchy, with no supdialog relationship. It serves as the main entry point for task execution and can spawn multiple levels of subdialogs. These terms are used interchangeably throughout the system.
57
+ The **main dialog** is the top-level dialog with no askerDialog relationship. It serves as the main entry point for task execution and can spawn multiple levels of sideDialogs.
58
58
 
59
59
  ### Q4H (Questions for Human)
60
60
 
61
- A **Q4H** is a pending question raised by a dialog (main or subdialog) that requires human input to proceed. Q4Hs are indexed in the dialog's `q4h.yaml` file (an index, not source of truth) and are **cleared by `clear_mind` operations**. The actual question content is stored in the dialog's messages where the `askHuman({ tellaskContent: "..." })` Tellask was recorded.
61
+ A **Q4H** is a pending question raised by a dialog (main or sideDialog) that requires human input to proceed. Q4Hs are indexed in the dialog's `q4h.yaml` file (an index, not source of truth) and are **cleared by `clear_mind` operations**. The actual question content is stored in the dialog's messages where the `askHuman({ tellaskContent: "..." })` Tellask was recorded.
62
62
 
63
- ### Subdialog Index (subdlg.yaml)
63
+ ### SideDialog Index (subdlg.yaml)
64
64
 
65
- A **subdlg.yaml** file indexes pending subdialogs that a supdialog is waiting for. Like `q4h.yaml`, it is an index file, not the source of truth:
65
+ A **subdlg.yaml** file indexes pending sideDialogs that an askerDialog is waiting for. Like `q4h.yaml`, it is an index file, not the source of truth:
66
66
 
67
- - The index tracks which subdialog IDs the parent is waiting for
68
- - Actual subdialog state is verified from disk (done/ directory)
67
+ - The index tracks which sideDialog IDs the tellasker is waiting for
68
+ - Actual sideDialog state is verified from disk (done/ directory)
69
69
  - Used by the backend coroutine for crash recovery and auto-revive
70
70
 
71
- ### Subdialog Registry
71
+ ### SideDialog Registry
72
72
 
73
- The **subdialog registry** is a root dialog-scoped Map that maintains persistent references to registered subdialogs. The registry uses `agentId!sessionSlug` as its key format. It moves with the root to `done/` when the root completes, and is rebuilt on root load by scanning done/ subdialog YAMLs.
74
- If a sideline dialog is declared dead, its Type B registry entry is removed so the same `agentId!sessionSlug` can start a brand-new sideline dialog on the next Tellask.
73
+ The **sideDialog registry** is a main-dialog-scoped Map that maintains persistent references to registered sideDialogs. The registry uses `agentId!sessionSlug` as its key format. It moves with the main dialog to `done/` when the main dialog completes, and is rebuilt on main dialog load by scanning done/ sideDialog YAMLs.
74
+ If a Side Dialog is declared dead, its Type B registry entry is removed so the same `agentId!sessionSlug` can start a brand-new Side Dialog on the next Tellask.
75
75
 
76
76
  ### Teammate Tellask
77
77
 
78
- A **teammate Tellask** is a Dominds specific syntax that triggers communication with another agent as subdialog. Teammate Tellasks have three distinct patterns with different semantics (see Section 3).
78
+ A **teammate Tellask** is a Dominds specific syntax that triggers communication with another agent as sideDialog. Teammate Tellasks have three distinct patterns with different semantics (see Section 3).
79
79
 
80
80
  **Tellask block structure** (see also [`dominds-terminology.md`](./dominds-terminology.md)):
81
81
 
@@ -91,18 +91,18 @@ A **teammate Tellask** is a Dominds specific syntax that triggers communication
91
91
 
92
92
  Dialog driving is a **sole backend algorithm**. The frontend/client never drives dialogs. All dialog state transitions, resumption logic, and generation loops execute entirely in backend coroutines. Frontend only subscribes to publish channels (PubChan) for real-time UI updates.
93
93
 
94
- ### Registry Hierarchy
94
+ ### Registry Structure
95
95
 
96
96
  The system maintains three levels of registries for dialog management:
97
97
 
98
98
  **Global Registry (Server-Scoped)**
99
- A server-wide mapping of `rootId → RootDialog` objects. This is the single source of truth for all active root dialogs. Backend coroutines scan this registry to find dialogs needing driving.
99
+ A server-wide mapping of `rootId → MainDialog` objects. This is the single source of truth for all active main dialogs. Backend coroutines scan this registry to find dialogs needing driving.
100
100
 
101
- **Local Registry (Per RootDialog)**
102
- A per-root mapping of `selfId → Dialog` objects. This registry contains the root dialog itself plus all loaded subdialogs, enabling O(1) lookup of any dialog within a hierarchy.
101
+ **Local Registry (Per MainDialog)**
102
+ A per-root mapping of `selfId → Dialog` objects. This registry contains the main dialog itself plus all loaded sideDialogs, enabling O(1) lookup of any dialog within a main dialog tree.
103
103
 
104
- **Subdialog Registry (Per RootDialog)**
105
- A per-root mapping of `agentId!sessionSlug → Subdialog` objects. This registry tracks TYPE B registered subdialogs for resumption across multiple interactions. TYPE C transient subdialogs are never registered.
104
+ **SideDialog Registry (Per MainDialog)**
105
+ A per-root mapping of `agentId!sessionSlug → SideDialog` objects. This registry tracks TYPE B registered sideDialogs for resumption across multiple interactions. TYPE C transient sideDialogs are never registered.
106
106
 
107
107
  ### Per-Dialog Mutex
108
108
 
@@ -112,14 +112,14 @@ Each Dialog object carries an exclusive mutex with an associated wait queue. Whe
112
112
 
113
113
  Backend coroutines drive dialogs using the following pattern:
114
114
 
115
- 1. Scan the Global Registry to identify root dialogs needing driving
116
- 2. For each candidate, check resumption conditions (Q4H answered, subdialog completions received)
115
+ 1. Scan the Global Registry to identify main dialogs needing driving
116
+ 2. For each candidate, check resumption conditions (Q4H answered, sideDialog completions received)
117
117
  3. Acquire the dialog's mutex before driving
118
118
  4. Execute the generation loop until suspension point or completion
119
119
  5. Release the mutex
120
120
  6. Persist all state changes to storage
121
121
 
122
- The driving loop continues until a dialog suspends (awaiting Q4H or subdialog) or completes. When conditions change (user answers Q4H, subdialog finishes), the backend detects these via storage checks and resumes driving automatically.
122
+ The driving loop continues until a dialog suspends (awaiting Q4H or sideDialog) or completes. When conditions change (user answers Q4H, sideDialog finishes), the backend detects these via storage checks and resumes driving automatically.
123
123
 
124
124
  ### Frontend Integration
125
125
 
@@ -134,7 +134,7 @@ All driving logic, resumption decisions, and state management remain purely back
134
134
 
135
135
  ### Global Dialog Event Broadcaster
136
136
 
137
- Some dialog events are rtws-global rather than dialog-scoped, including `new_q4h_asked`, `q4h_answered`, `subdialog_created_evt`, and `dlg_touched_evt`.
137
+ Some dialog events are rtws-global rather than dialog-scoped, including `new_q4h_asked`, `q4h_answered`, `sideDialog_created_evt`, and `dlg_touched_evt`.
138
138
 
139
139
  These events require a **global dialog event broadcaster** to be installed during runtime bootstrap before any dialog-driving logic runs. This broadcaster is mandatory infrastructure, not an optional optimization:
140
140
 
@@ -149,8 +149,8 @@ Missing broadcaster is therefore a runtime bootstrap invariant violation, not a
149
149
  Dialog state is persisted to storage at key points:
150
150
 
151
151
  - After each message generation
152
- - On suspension (Q4H raised, subdialog created)
153
- - On resumption (Q4H answered, subdialog completed)
152
+ - On suspension (Q4H raised, sideDialog created)
153
+ - On resumption (Q4H answered, sideDialog completed)
154
154
  - On completion
155
155
 
156
156
  This ensures crash recovery and enables the backend to resume from any persisted state without depending on frontend state.
@@ -177,7 +177,7 @@ After the user clicks `Continue`, the backend MUST re-evaluate fresh persistence
177
177
  - **Case 1: the dialog no longer has a reply obligation**
178
178
  If there is also no blocker, the dialog should simply continue driving. If it has already become ordinary idle-waiting-user, then `resume_dialog` is no longer actually resumable.
179
179
  - **Case 2: the dialog still has a reply obligation and is still suspended**
180
- Typical examples are pending Q4H or pending subdialogs. In this case, `Continue` should exit the interjection-paused projection and restore the true `blocked` state.
180
+ Typical examples are pending Q4H or pending sideDialogs. In this case, `Continue` should exit the interjection-paused projection and restore the true `blocked` state.
181
181
  - **Case 3: the dialog still has a reply obligation but is no longer suspended and is eligible to proceed**
182
182
  For example, the blocker has disappeared, or a queued prompt provides a valid continuation path. In this case, `Continue` must not first fall back to an intermediate placeholder `blocked/idle` state; it should keep driving immediately.
183
183
 
@@ -212,44 +212,38 @@ This section documents the three distinct types of teammate Tellasks in the Domi
212
212
 
213
213
  ```mermaid
214
214
  flowchart TD
215
- M["LLM emits tellaskSessionless(...)"] --> Q{"Is this a subdialog Tellasking its direct supdialog (tellasker dialog for TYPE A)?"}
215
+ M["LLM emits tellaskSessionless(...)"] --> Q{"Is this a sideDialog Tellasking its direct askerDialog (tellasker for TYPE A)?"}
216
216
  Q -- yes --> A["TYPE A: TellaskBack<br/>(TellaskBack)<br/>Primary: tellaskBack(...) (NO sessionSlug)"]
217
217
  Q -- no --> T{Is sessionSlug present?}
218
- T -- yes --> B["TYPE B: Registered subdialog Tellask<br/>(Tellask Session / Registered Session Tellask)<br/>tellask(..., sessionSlug=...)"]
219
- T -- no --> C["TYPE C: Transient subdialog Tellask<br/>(Fresh Tellask / One-shot Tellask)<br/>tellaskSessionless(...)"]
218
+ T -- yes --> B["TYPE B: Registered sideDialog Tellask<br/>(Tellask Session / Registered Session Tellask)<br/>tellask(..., sessionSlug=...)"]
219
+ T -- no --> C["TYPE C: Transient sideDialog Tellask<br/>(Fresh Tellask / One-shot Tellask)<br/>tellaskSessionless(...)"]
220
220
  ```
221
221
 
222
222
  ### TYPE A: TellaskBack (Type A / `TellaskBack`)
223
223
 
224
224
  **Primary syntax**: `tellaskBack({ tellaskContent: "..." })` (NO `sessionSlug`) — `tellaskBack({ tellaskContent: "..." }) sessionSlug ...` is a **syntax error**
225
225
 
226
- **Tolerated fallback**: `tellaskBack({ tellaskContent: "..." })` (NO `sessionSlug`)
227
-
228
226
  **Behavior**:
229
227
 
230
- 1. Current subdialog **suspends**
231
- 2. Driver switches to drive the **tellasker dialog** (direct supdialog for TYPE A; uses `subdialog.supdialog` reference)
232
- 3. Tellasker dialog response flows back to the subdialog
233
- 4. Subdialog **resumes** with tellasker dialog's response in context
228
+ 1. Current sideDialog **suspends**
229
+ 2. Driver switches to drive the **tellasker** (direct askerDialog for TYPE A; uses `sideDialog.askerDialog` reference)
230
+ 3. Tellasker response flows back to the sideDialog
231
+ 4. SideDialog **resumes** with tellasker's response in context
234
232
 
235
233
  **Key Characteristics**:
236
234
 
237
- - Uses `subdialog.supdialog` reference (no registry lookup)
238
- - No registration - supdialog relationship is inherent
239
- - Supdialog is always the direct parent in the hierarchy (the tellasker dialog for TYPE A)
235
+ - Uses `sideDialog.askerDialog` reference (no registry lookup)
236
+ - No registration - askerDialog relationship is inherent
237
+ - TYPE A always targets the direct askerDialog (the tellasker for that Tellask).
240
238
  - `tellaskBack({ tellaskContent: "..." })` is the canonical Type A syntax: it always routes to the tellasker (the dialog that issued the current Tellask).
241
- - This matters especially when the supdialog’s `agentId` is identical to the subdialog’s `agentId` (common when a sideline
242
- is created via `freshBootsReasoning({ tellaskContent: "..." })`), where an explicit `tellaskBack({ tellaskContent: "..." })` is easier to get wrong by accident.
243
- - The explicit `tellaskBack({ tellaskContent: "..." })` form is accepted as a semantic fallback for backwards compatibility, but is more
244
- error-prone in FBR/self-subdialog cases.
245
239
 
246
- **Sideline delivery rule (normative)**:
240
+ **Side Dialog delivery rule (normative)**:
247
241
 
248
- - If a sideline dialog has completed all assigned goals and can deliver the final result, it MUST reply directly with the response body; do not use `tellaskBack` to send final delivery.
249
- - Runtime treats that direct reply as the completion delivery to the tellasker dialog and injects the work-language marker automatically (`【Completed】` in English work language, `【最终完成】` in Chinese work language).
242
+ - If a Side Dialog has completed all assigned goals and can deliver the final result, it MUST reply directly with the response body; do not use `tellaskBack` to send final delivery.
243
+ - Runtime treats that direct reply as the completion delivery to the tellasker and injects the work-language marker automatically (`【Completed】` in English work language, `【最终完成】` in Chinese work language).
250
244
  - If the work is unfinished, do not default to `tellaskBack`; first use team SOP / role ownership to judge whether a responsible owner is already clear, and if yes for execution work, directly use `tellask` / `tellaskSessionless` for that owner.
251
- - Use `tellaskBack({ tellaskContent: "..." })` only when the upstream requester must clarify the request, decide a tradeoff, confirm acceptance criteria, provide missing input, or current SOP cannot determine ownership.
252
- - **FBR exception**: FBR sideline dialogs forbid all tellask calls (including `tellaskBack` / `tellask` / `tellaskSessionless` / `askHuman`); they must list missing context and return.
245
+ - Use `tellaskBack({ tellaskContent: "..." })` only when the tellasker must clarify the request, decide a tradeoff, confirm acceptance criteria, provide missing input, or current SOP cannot determine ownership.
246
+ - **FBR exception**: FBR Side Dialogs forbid all tellask calls (including `tellaskBack` / `tellask` / `tellaskSessionless` / `askHuman`); they must list missing context and return.
253
247
 
254
248
  **Inter-dialog transfer and markers (normative)**:
255
249
 
@@ -257,20 +251,20 @@ flowchart TD
257
251
  - First-line markers are runtime-injected into that transfer payload by semantics; agents must not hand-write them:
258
252
  - English work language:
259
253
  - Ask-back reply: `【TellaskBack】`
260
- - Regular completed sideline reply: `【Completed】`
261
- - FBR sideline reply: `【FBR-Direct Reply】` or `【FBR-Reasoning Only】`
254
+ - Regular completed Side Dialog reply: `【Completed】`
255
+ - FBR Side Dialog reply: `【FBR-Direct Reply】` or `【FBR-Reasoning Only】`
262
256
  - Chinese work language:
263
257
  - Ask-back reply: `【回问诉请】`
264
- - Regular completed sideline reply: `【最终完成】`
265
- - FBR sideline reply: `【FBR-直接回复】` or `【FBR-仅推理】`
266
- - If the requester defines a “reply/delivery format” inside the tellask body, keep it to the business delivery structure; do not require responder-side hand-written markers, because runtime injects those markers automatically.
258
+ - Regular completed Side Dialog reply: `【最终完成】`
259
+ - FBR Side Dialog reply: `【FBR-直接回复】` or `【FBR-仅推理】`
260
+ - If the tellasker defines a “reply/delivery format” inside the tellask body, keep it to the business delivery structure; do not require tellaskee-side hand-written markers, because runtime injects those markers automatically.
267
261
  - Source-dialog model raw is naturally preserved in source-dialog persistence; inter-dialog transfer must not rewrite or overwrite that source raw.
268
262
  - Template-wrapped transfer is allowed: a model output from one dialog may be embedded into a runtime template and sent as the body to another dialog.
269
263
 
270
264
  **Protocol clarification**:
271
265
 
272
- - When you truly need to ask upstream back, emit it via `tellaskBack({ tellaskContent: "..." })`; first judge whether team SOP already identifies another responsible owner. Do not post plain-text intermediate status updates while unfinished.
273
- - A direct plain-text reply is correct when the sideline is already complete and is delivering the final result upstream.
266
+ - When you truly need to ask the tellasker back, emit it via `tellaskBack({ tellaskContent: "..." })`; first judge whether team SOP already identifies another responsible owner. Do not post plain-text intermediate status updates while unfinished.
267
+ - A direct plain-text reply is correct when the Side Dialog is already complete and is delivering the final result to the tellasker.
274
268
 
275
269
  Note: no extra "Status: ..." line is required; the first-line marker is the stage reminder.
276
270
 
@@ -278,7 +272,7 @@ Note: no extra "Status: ..." line is required; the first-line marker is the stag
278
272
 
279
273
  ```
280
274
  Current dialog: sub-001 (agentId: "backend-dev")
281
- Parent supdialog: "orchestrator" (agentId)
275
+ Tellasker: "orchestrator" (agentId)
282
276
 
283
277
  LLM emits: tellaskSessionless({ targetAgentId: "orchestrator", tellaskContent: "..." }) How should I handle the database migration?
284
278
 
@@ -289,7 +283,7 @@ Result:
289
283
  - sub-001 resumes with orchestrator's response
290
284
  ```
291
285
 
292
- ### TYPE B: Registered Subdialog Tellask (Type B / `Tellask Session` / Registered Session Tellask)
286
+ ### TYPE B: Registered SideDialog Tellask (Type B / `Tellask Session` / Registered Session Tellask)
293
287
 
294
288
  **Syntax**: `tellask({ targetAgentId: "<anyAgentId>", sessionSlug: "<tellaskSession>", tellaskContent: "..." })` (note the space before `sessionSlug`)
295
289
 
@@ -307,58 +301,58 @@ headline text is ignored for tellaskSession parsing.
307
301
 
308
302
  **Behavior**:
309
303
 
310
- 1. Check registry for existing subdialog with key `agentId!sessionSlug`
311
- 2. **If exists**: Resume the registered subdialog
312
- 3. **If not exists**: Create NEW subdialog AND register it with key `agentId!sessionSlug`
313
- 4. Parent dialog **suspends** while subdialog runs
314
- 5. Subdialog response flows back to parent
315
- 6. Parent **resumes** with subdialog's response
304
+ 1. Check registry for existing sideDialog with key `agentId!sessionSlug`
305
+ 2. **If exists**: Resume the registered sideDialog
306
+ 3. **If not exists**: Create NEW sideDialog AND register it with key `agentId!sessionSlug`
307
+ 4. Tellasker **suspends** while sideDialog runs
308
+ 5. SideDialog response flows back to the tellasker
309
+ 6. Tellasker **resumes** with sideDialog's response
316
310
 
317
- **Current Caller Tracking (important for reuse):**
311
+ **Current Tellasker Tracking (important for reuse):**
318
312
 
319
- When a registered subdialog is Tellasked again (same `agentId!sessionSlug`), the caller can be a **different dialog** (root dialog or another sideline dialog). On every Type B Tellask, the subdialog’s metadata is updated with:
313
+ When a registered sideDialog is Tellasked again (same `agentId!sessionSlug`), the tellasker can be a **different dialog** (main dialog or another Side Dialog). On every Type B Tellask, the sideDialog’s metadata is updated with:
320
314
 
321
- - The **current caller dialog ID** (so responses route back to the _latest_ caller)
315
+ - The **current tellasker ID** (so responses route back to the _latest_ tellasker)
322
316
  - The **Tellask info** (headline/body, origin role, origin member, callId)
323
317
 
324
- This makes Type B subdialogs reusable across multiple Tellask sites without losing correct response routing.
318
+ This makes Type B sideDialogs reusable across multiple Tellask sites without losing correct response routing.
325
319
 
326
320
  **Tellask Context on Resume**:
327
321
 
328
- - On every TYPE B Tellask (new or resumed), the parent-provided `mentionList`/`tellaskContent`
329
- is appended to the subdialog as a new user message before the subdialog is driven.
330
- This ensures the subdialog receives the latest request context for each Tellask.
322
+ - On every TYPE B Tellask (new or resumed), the tellasker-provided `mentionList`/`tellaskContent`
323
+ is appended to the sideDialog as a new user message before the sideDialog is driven.
324
+ This ensures the sideDialog receives the latest request context for each Tellask.
331
325
  - System-injected resume prompts are context only and are **not parsed** for teammate/tool Tellasks.
332
326
 
333
327
  **Updated Tellask While an Earlier Round Is Still Waiting (normative)**:
334
328
 
335
- - For a registered sideline (`same agentId!sessionSlug`), runtime maintains one current waiting caller round.
329
+ - For a registered Side Dialog (`same agentId!sessionSlug`), runtime maintains one current waiting tellasker round.
336
330
  - If a newer TYPE B Tellask arrives before the earlier round replies, runtime immediately closes the earlier waiting round with a system-generated failed Tellask result. The wording must describe the conversation fact in business terms, not protocol jargon.
337
- - The callee is not force-stopped. Instead, its next runtime prompt explains that the work request has been updated, explicitly says not to send a standalone acknowledgement, and includes the latest full assignment.
331
+ - The tellaskee is not force-stopped. Instead, its next runtime prompt explains that the work request has been updated, explicitly says not to send a standalone acknowledgement, and includes the latest full assignment.
338
332
  - Delivery of that updated assignment prompt is queued in-order at the next safe turn boundary. Runtime must not reject the update merely because another normal queued prompt already exists; queued prompts are ordered work, not a single overwrite slot.
339
- - A sideline reply produced before that updated assignment prompt is rendered locally MUST NOT be delivered upstream as the newer round's result.
333
+ - A Side Dialog reply produced before that updated assignment prompt is rendered locally MUST NOT be delivered to the tellasker as the newer round's result.
340
334
 
341
335
  **Key Characteristics**:
342
336
 
343
337
  - Registry lookup is performed on each Tellask
344
- - Enables **resumption** of previous subdialogs
345
- - Registered subdialogs persist in the registry until root completion
346
- - Registry is root-dialog scoped (not accessible to subdialogs)
338
+ - Enables **resumption** of previous sideDialogs
339
+ - Registered sideDialogs persist in the registry until main dialog completion
340
+ - Registry is main-dialog scoped (not accessible to sideDialogs)
347
341
 
348
342
  **Example**:
349
343
 
350
344
  ```
351
- Root dialog: orchestrator
345
+ Main dialog: orchestrator
352
346
  Registry: {} (empty)
353
347
 
354
348
  LLM emits: tellask({ targetAgentId: "researcher", sessionSlug: "market-analysis", tellaskContent: "..." })
355
349
 
356
350
  Result (first call):
357
351
  - Registry lookup: no "researcher!market-analysis" exists
358
- - Create new subdialog "researcher!market-analysis"
359
- - Register it in root's registry
352
+ - Create new sideDialog "researcher!market-analysis"
353
+ - Register it in main dialog's registry
360
354
  - orchestrator suspends
361
- - Drive researcher subdialog
355
+ - Drive researcher sideDialog
362
356
  - Response flows back to orchestrator
363
357
  - orchestrator resumes
364
358
 
@@ -366,41 +360,41 @@ LLM emits again: tellask({ targetAgentId: "researcher", sessionSlug: "market-ana
366
360
 
367
361
  Result (second call):
368
362
  - Registry lookup: "researcher!market-analysis" exists
369
- - Resume existing subdialog
363
+ - Resume existing sideDialog
370
364
  - orchestrator suspends
371
- - Drive existing researcher subdialog from where it left off
365
+ - Drive existing researcher sideDialog from where it left off
372
366
  - Response flows back to orchestrator
373
367
  - orchestrator resumes
374
368
  ```
375
369
 
376
- ### TYPE C: Transient Subdialog Tellask (Type C / `Fresh Tellask` / One-shot Tellask)
370
+ ### TYPE C: Transient SideDialog Tellask (Type C / `Fresh Tellask` / One-shot Tellask)
377
371
 
378
- **Syntax**: `tellaskSessionless({ targetAgentId: "<nonSupdialogAgentId>", tellaskContent: "..." })` (NO `sessionSlug`)
372
+ **Syntax**: `tellaskSessionless({ targetAgentId: "<nonAskerDialogAgentId>", tellaskContent: "..." })` (NO `sessionSlug`)
379
373
 
380
374
  **Fresh Boots Reasoning (FBR) self-tellask syntax (default; most common)**: `freshBootsReasoning({ tellaskContent: "..." })`
381
375
 
382
- - `freshBootsReasoning({ tellaskContent: "..." })` targets the current dialog’s agentId and creates a **new ephemeral subdialog** routed to the same agentId.
383
- - The sideline dialog created by `freshBootsReasoning({ tellaskContent: "..." })` is FBR and is driven under a stricter, tool-less policy; see [`fbr.md`](./fbr.md).
376
+ - `freshBootsReasoning({ tellaskContent: "..." })` targets the current dialog’s agentId and creates a **new ephemeral sideDialog** routed to the same agentId.
377
+ - The Side Dialog created by `freshBootsReasoning({ tellaskContent: "..." })` is FBR and is driven under a stricter, tool-less policy; see [`fbr.md`](./fbr.md).
384
378
  - Use this for most Fresh Boots Reasoning sessions: isolate a single sub-problem, produce an answer, and return.
385
379
 
386
380
  **Behavior**:
387
381
 
388
382
  1. Current dialog **suspends**
389
- 2. Create **NEW subdialog** with the specified agentId
390
- 3. Drive the new subdialog:
391
- - For general Type C, the subdialog is full-fledged (supcalls, teammate Tellasks, tools per config).
383
+ 2. Create **NEW sideDialog** with the specified agentId
384
+ 3. Drive the new sideDialog:
385
+ - For general Type C, the sideDialog is full-fledged (TellaskBack, teammate Tellasks, tools per config).
392
386
  - For `freshBootsReasoning({ tellaskContent: "..." })`, runtime applies the FBR tool-less policy (no tools; no Tellasks).
393
- 4. Subdialog response flows back to parent
394
- 5. Parent **resumes** with subdialog's response
387
+ 4. SideDialog response flows back to the tellasker
388
+ 5. Tellasker **resumes** with sideDialog's response
395
389
 
396
390
  **Key Characteristics**:
397
391
 
398
- - **No registry lookup** - always creates a new subdialog
392
+ - **No registry lookup** - always creates a new sideDialog
399
393
  - **Not registered** - no persistence across Tellasks
400
394
  - **No assignment-update channel** - once emitted, it cannot be updated in place like Type B
401
- - Another `tellaskSessionless` creates **another new transient subdialog**; it does not update, stop, or tell the earlier Type C sideline to stop
395
+ - Another `tellaskSessionless` creates **another new transient sideDialog**; it does not update, stop, or tell the earlier Type C Side Dialog to stop
402
396
  - If later correction, scope change, or earlier wrap-up may be needed, choose Type B `tellask` with `sessionSlug` from the start
403
- - The subdialog itself is fully capable **except** for `freshBootsReasoning({ tellaskContent: "..." })` FBR, which is tool-less and tellask-free (see `fbr.md`).
397
+ - The sideDialog itself is fully capable **except** for `freshBootsReasoning({ tellaskContent: "..." })` FBR, which is tool-less and tellask-free (see `fbr.md`).
404
398
  - Only difference from TYPE B: no registry lookup/resume capability
405
399
  - Used for one-off, independent tasks
406
400
 
@@ -413,8 +407,8 @@ LLM emits: @code-reviewer Please review this PR
413
407
 
414
408
  Result:
415
409
  - orchestrator suspends
416
- - Create NEW subdialog with agentId "code-reviewer"
417
- - Drive the code-reviewer subdialog (it can make its own Tellasks, tools, etc.)
410
+ - Create NEW sideDialog with agentId "code-reviewer"
411
+ - Drive the code-reviewer sideDialog (it can make its own Tellasks, tools, etc.)
418
412
  - code-reviewer completes with review findings
419
413
  - orchestrator resumes with review in context
420
414
 
@@ -422,23 +416,23 @@ LLM emits again: @code-reviewer Review this other PR
422
416
 
423
417
  Result:
424
418
  - orchestrator suspends
425
- - Create ANOTHER NEW subdialog (not the same as before!)
426
- - Drive the new code-reviewer subdialog
419
+ - Create ANOTHER NEW sideDialog (not the same as before!)
420
+ - Drive the new code-reviewer sideDialog
427
421
  - orchestrator resumes with new review in context
428
422
  ```
429
423
 
430
424
  ### Comparison Summary
431
425
 
432
- | Aspect | TYPE A: Supdialog Tellask (`TellaskBack`) | TYPE B: Registered Subdialog Tellask (`Tellask Session`) | TYPE C: Transient Subdialog Tellask (`Fresh Tellask`) |
433
- | -------------------------- | ----------------------------------------- | ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
434
- | **Syntax** | `tellaskBack({ tellaskContent: "..." })` | `tellask({ targetAgentId: "<anyAgentId>", sessionSlug: "<id>", tellaskContent: "..." })` | `tellaskSessionless({ targetAgentId: "<nonSupdialogAgentId>", tellaskContent: "..." })` |
435
- | **sessionSlug** | Not allowed | Required | Not allowed |
436
- | **Registry Lookup** | No (uses `subdialog.supdialog`) | Yes (`agentId!sessionSlug`) | No (never registered) |
437
- | **Resumption** | No (supdialog not a subdialog) | Yes (lookup finds existing) | No (always new) |
438
- | **Registration** | Not applicable | Created AND registered | Never registered |
439
- | **Parent Behavior** | Subdialog suspends | Parent suspends | Parent suspends |
440
- | **Subdialog Capabilities** | Full (supcalls, teammates, tools) | Full (supcalls, teammates, tools) | Full (supcalls, teammates, tools) |
441
- | **Use Case** | Clarification from parent (`TellaskBack`) | Resume persistent subtask (`Tellask Session`) | One-off independent task (`Fresh Tellask`) |
426
+ | Aspect | TYPE A: AskerDialog Tellask (`TellaskBack`) | TYPE B: Registered SideDialog Tellask (`Tellask Session`) | TYPE C: Transient SideDialog Tellask (`Fresh Tellask`) |
427
+ | --------------------------- | -------------------------------------------- | ---------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
428
+ | **Syntax** | `tellaskBack({ tellaskContent: "..." })` | `tellask({ targetAgentId: "<anyAgentId>", sessionSlug: "<id>", tellaskContent: "..." })` | `tellaskSessionless({ targetAgentId: "<nonAskerDialogAgentId>", tellaskContent: "..." })` |
429
+ | **sessionSlug** | Not allowed | Required | Not allowed |
430
+ | **Registry Lookup** | No (uses `sideDialog.askerDialog`) | Yes (`agentId!sessionSlug`) | No (never registered) |
431
+ | **Resumption** | No (askerDialog not a sideDialog) | Yes (lookup finds existing) | No (always new) |
432
+ | **Registration** | Not applicable | Created AND registered | Never registered |
433
+ | **Tellasker Behavior** | SideDialog suspends | Tellasker suspends | Tellasker suspends |
434
+ | **SideDialog Capabilities** | Full (TellaskBack, teammates, tools) | Full (TellaskBack, teammates, tools) | Full (TellaskBack, teammates, tools) |
435
+ | **Use Case** | Clarification from tellasker (`TellaskBack`) | Resume persistent subtask (`Tellask Session`) | One-off independent task (`Fresh Tellask`) |
442
436
 
443
437
  ---
444
438
 
@@ -448,7 +442,7 @@ The Dominds dialog system is built on four interconnected core mechanisms that w
448
442
 
449
443
  ```mermaid
450
444
  flowchart TD
451
- H[Dialog hierarchy<br/>(rootsubdialogs)] <--> S[Subdialog supply<br/>(responses, pending list, registry)]
445
+ H[Dialog relationship<br/>(mainsideDialogs)] <--> S[SideDialog supply<br/>(responses, pending list, registry)]
452
446
  H --> Q["Q4H (askHuman(...))<br/>(q4h.yaml index)"]
453
447
  S --> Q
454
448
 
@@ -458,27 +452,27 @@ flowchart TD
458
452
 
459
453
  Clarity[clear_mind] -->|clears| Q
460
454
  Clarity -->|preserves| R[Reminders]
461
- Clarity -->|preserves| Reg[Registry (root only)]
455
+ Clarity -->|preserves| Reg[Registry (main only)]
462
456
  ```
463
457
 
464
458
  ### Key Design Principles
465
459
 
466
460
  1. **Q4H Index in `q4h.yaml`**: Q4H questions are indexed in `q4h.yaml` (as an index, not source of truth) and cleared by mental clarity operations. The actual question content is in the dialog's messages where the `askHuman({ tellaskContent: "..." })` Tellask was recorded. They do not survive `clear_mind`.
467
461
 
468
- 2. **Hierarchical Q4H**: Any dialog in the hierarchy can raise Q4H on its own right (root dialog or subdialog). Questions are indexed in the dialog that asked them, not passed upward.
462
+ 2. **Dialog-scoped Q4H**: Any dialog in a Main Dialog / Side Dialog relationship can raise Q4H on its own right. Questions are indexed in the dialog that asked them, not passed upward.
469
463
 
470
- 3. **Subdialog Q4H Autonomy**: Subdialogs can ask Q4H questions directly, not as a proxy for parent. User navigates to the subdialog to answer inline.
464
+ 3. **SideDialog Q4H Autonomy**: SideDialogs can ask Q4H questions directly, not as a proxy for tellasker. User navigates to the sideDialog to answer inline.
471
465
 
472
466
  4. **UI Renders Q4H Like Teammate Tellasks**: The UI treats Q4H similarly to other teammate Tellasks - with navigation linking to the Tellask site in the dialog. The user answers inline using the same input textarea used for regular messages.
473
467
 
474
- 5. **Subdialog Response Supply**: Subdialogs write their responses to the _current Tellasker’s_ context via persistence (not callbacks). For TYPE B, each Tellask updates the subdialog’s `assignmentFromSup` with the latest Tellasker + tellaskInfo, so the response is routed to the most recent Tellasker (root or subdialog). This enables detached operation, reuse, and crash recovery.
468
+ 5. **SideDialog Response Supply**: SideDialogs write their responses to the _current tellasker’s_ context via persistence (not callbacks). For TYPE B, each Tellask updates the sideDialog’s `assignmentFromAsker` with the latest tellasker + tellaskInfo, so the response is routed to the most recent tellasker (main dialog or sideDialog). This enables detached operation, reuse, and crash recovery.
475
469
 
476
- 6. **Subdialog Registry**: Registered subdialogs (TYPE B Tellasks) are tracked in a root-dialog-scoped registry. The registry persists across `clear_mind` operations and is rebuilt on root load.
470
+ 6. **SideDialog Registry**: Registered sideDialogs (TYPE B Tellasks) are tracked in a main-dialog-scoped registry. The registry persists across `clear_mind` operations and is rebuilt on main dialog load.
477
471
 
478
472
  7. **State Preservation Contract**:
479
473
  - `clear_mind`: Clears messages, clears Q4H index, preserves reminders, preserves registry
480
- - Subdialog completion: Writes response to the current tellasker dialog, removes from pending list (registry unchanged)
481
- - Subdialog declared dead: marks runState dead and removes its Type B registry entry; same slug can be reused as a fresh sideline dialog
474
+ - SideDialog completion: Writes response to the current tellasker, removes from pending list (registry unchanged)
475
+ - SideDialog declared dead: marks runState dead and removes its Type B registry entry; same slug can be reused as a fresh Side Dialog
482
476
  - Q4H answer: Clears the answered question from index, continues the dialog
483
477
 
484
478
  ---
@@ -487,7 +481,7 @@ flowchart TD
487
481
 
488
482
  ### Overview
489
483
 
490
- Q4H (Questions for Human) is the mechanism by which dialogs can suspend execution and request human input. It is a core, integral mechanism that works seamlessly with subdialogs, reminders, and mental clarity tools.
484
+ Q4H (Questions for Human) is the mechanism by which dialogs can suspend execution and request human input. It is a core, integral mechanism that works seamlessly with sideDialogs, reminders, and mental clarity tools.
491
485
 
492
486
  ### Q4H Data Structure
493
487
 
@@ -514,7 +508,7 @@ interface HumanQuestion {
514
508
 
515
509
  ```mermaid
516
510
  sequenceDiagram
517
- participant D as Dialog (root or subdialog)
511
+ participant D as Dialog (main dialog or sideDialog)
518
512
  participant P as Persistence (q4h.yaml)
519
513
  participant UI as Frontend UI
520
514
  participant WS as WebSocket handler
@@ -532,7 +526,7 @@ sequenceDiagram
532
526
 
533
527
  ### When Does a Dialog Raise Q4H?
534
528
 
535
- Q4H is raised when the `askHuman({ tellaskContent: "..." })` tellask function is invoked by ANY dialog (root or subdialog) on its own right:
529
+ Q4H is raised when the `askHuman({ tellaskContent: "..." })` tellask function is invoked by ANY dialog (main dialog or sideDialog) on its own right:
536
530
 
537
531
  ```typescript
538
532
  // From main/llm/kernel-driver/tellask-special.ts
@@ -646,34 +640,34 @@ interface DriveDialogByUserAnswerRequest {
646
640
  | Backend Action | Just drive dialog | Clear q4h.yaml first → drive dialog |
647
641
  | Continuation Type | N/A | `'answer'` |
648
642
 
649
- ### Subdialog Q4H Handling
643
+ ### SideDialog Q4H Handling
650
644
 
651
645
  **Key Principles**:
652
646
 
653
- 1. Q4H is indexed in the dialog that asked it, not passed upward to the supdialog
654
- 2. Subdialogs ask Q4H on their own right (not as proxy for parent)
655
- 3. User navigates to the subdialog to answer inline
647
+ 1. Q4H is indexed in the dialog that asked it, not passed upward to the askerDialog
648
+ 2. SideDialogs ask Q4H on their own right (not as proxy for tellasker)
649
+ 3. User navigates to the sideDialog to answer inline
656
650
  4. The `q4h.yaml` file is an index, not source of truth
657
651
 
658
652
  ```mermaid
659
653
  sequenceDiagram
660
- participant Sup as Supdialog
661
- participant Sub as Subdialog
654
+ participant Asker as AskerDialog
655
+ participant Side as SideDialog
662
656
  participant UI as Frontend UI
663
657
  participant WS as WebSocket handler
664
658
  participant Driver as driveDialogStream
665
659
 
666
- Sup->>Sub: creates subdialog (Type B or C)
667
- Note over Sup: Supdialog is blocked on pending subdialogs
660
+ Asker->>Side: creates sideDialog (Type B or C)
661
+ Note over Asker: AskerDialog is blocked on pending sideDialogs
668
662
 
669
- Sub->>WS: emits askHuman({ tellaskContent: "..." }) question
663
+ Side->>WS: emits askHuman({ tellaskContent: "..." }) question
670
664
  WS-->>UI: questions_count_update
671
- Note over Sub: Subdialog cannot proceed until answered
665
+ Note over Side: SideDialog cannot proceed until answered
672
666
 
673
- UI->>WS: drive_dialog_by_user_answer(dialog=subdialogId, questionId, content)
674
- WS->>Driver: driveDialogStream(subdialog, human answer)
675
- Driver-->>Sub: subdialog resumes
676
- Sub-->>Sup: response supplied (clears pending-subdialogs)
667
+ UI->>WS: drive_dialog_by_user_answer(dialog=sideDialogId, questionId, content)
668
+ WS->>Driver: driveDialogStream(sideDialog, human answer)
669
+ Driver-->>Side: sideDialog resumes
670
+ Side-->>Asker: response supplied (clears pending-sideDialogs)
677
671
  ```
678
672
 
679
673
  ### Q4H and Mental Clarity Operations
@@ -688,20 +682,20 @@ flowchart LR
688
682
 
689
683
  ---
690
684
 
691
- ## Dialog Hierarchy & Subdialogs
685
+ ## Dialog Relationship & SideDialogs
692
686
 
693
- ### Hierarchy Overview
687
+ ### Relationship Overview
694
688
 
695
689
  ```mermaid
696
690
  flowchart TD
697
- Root[Root dialog] --> S1[Subdialog sub-001]
698
- Root --> S2[Subdialog sub-002]
699
- Root --> S3[Subdialog sub-003]
691
+ Main[Main dialog] --> S1[SideDialog sub-001]
692
+ Main --> S2[SideDialog sub-002]
693
+ Main --> S3[SideDialog sub-003]
700
694
 
701
- S1 --> N1[Nested subdialog sub-001-001]
695
+ S1 --> N1[Nested sideDialog sub-001-001]
702
696
 
703
- Root -.-> Reg["registry.yaml<br/>(root-scoped, Type B only)"]
704
- Root -.-> QRoot[q4h.yaml (root)]
697
+ Main -.-> Reg["registry.yaml<br/>(main-scoped, Type B only)"]
698
+ Main -.-> QRoot[q4h.yaml (root)]
705
699
  S1 -.-> QS1[q4h.yaml (sub-001)]
706
700
  N1 -.-> QN1[q4h.yaml (sub-001-001)]
707
701
  ```
@@ -713,55 +707,57 @@ flowchart TD
713
707
  - `.dialogs/run/<root-id>/reminders.json`
714
708
  - `.dialogs/run/<root-id>/q4h.yaml`
715
709
  - `.dialogs/run/<root-id>/course-001.jsonl` (and further courses)
716
- - `.dialogs/run/<root-id>/subdialogs/<sub-id>/dialog.yaml`
717
- - `.dialogs/run/<root-id>/subdialogs/<sub-id>/q4h.yaml`
718
- - `.dialogs/run/<root-id>/registry.yaml` (root only; Type B registry)
710
+ - `.dialogs/run/<root-id>/sideDialogs/<sub-id>/dialog.yaml`
711
+ - `.dialogs/run/<root-id>/sideDialogs/<sub-id>/q4h.yaml`
712
+ - `.dialogs/run/<root-id>/registry.yaml` (main only; Type B registry)
719
713
 
720
- ### Subdialog Response Supply Mechanism
714
+ ### SideDialog Response Supply Mechanism
721
715
 
722
- **Core Principle**: Subdialogs supply responses to the **current tellasker dialog's** context via persistence, not callbacks (the tellasker is the direct supdialog for TYPE A; for TYPE B/C it may be a different dialog).
716
+ **Core Principle**: SideDialogs supply responses to the **current tellasker's** context via persistence, not callbacks (the tellasker is the direct askerDialog for TYPE A; for TYPE B/C it may be a different dialog).
723
717
 
724
718
  ```mermaid
725
719
  sequenceDiagram
726
- participant Sup as Tellasker dialog
720
+ participant Asker as Tellasker
727
721
  participant Driver as Backend driver
728
- participant Sub as Subdialog
722
+ participant Side as SideDialog
729
723
  participant Store as Persistence
730
724
 
731
- Sup->>Driver: create subdialog (adds to pending list)
732
- Driver->>Sub: drive subdialog (detached execution)
733
- Sub-->>Store: persist final response
734
- Driver-->>Sup: supply response + clear pending-subdialogs
735
- opt Sup is root and now unblocked
736
- Driver-->>Sup: set needsDrive=true (auto-revive)
725
+ Asker->>Driver: create sideDialog (adds to pending list)
726
+ Driver->>Side: drive sideDialog (detached execution)
727
+ Side-->>Store: persist final response
728
+ Driver-->>Asker: supply response + clear pending-sideDialogs
729
+ opt Asker is root and now unblocked
730
+ Driver-->>Asker: set needsDrive=true (auto-revive)
737
731
  end
738
732
  ```
739
733
 
740
- ### Subdialog Q4H and Supdialog Revival
734
+ ### SideDialog Q4H and AskerDialog Revival
741
735
 
742
- When a subdialog has raised Q4H and is waiting for human input, the supdialog's auto-revival logic must handle this:
736
+ When a sideDialog has raised Q4H and is waiting for human input, the askerDialog's auto-revival logic must handle this:
743
737
 
744
738
  ```typescript
745
- // Supdialog checks subdialog completion status
746
- async function checkSubdialogRevival(supdialog: Dialog): Promise<void> {
747
- const pending = await loadPendingSubdialogs(supdialog.id);
739
+ // AskerDialog checks sideDialog completion status
740
+ async function checkSideDialogRevival(askerDialog: Dialog): Promise<void> {
741
+ const pending = await loadPendingSideDialogs(askerDialog.id);
748
742
 
749
743
  for (const p of pending) {
750
- // Check if subdialog has unresolved Q4H
751
- const subdialogQ4H = await DialogPersistence.loadQuestions4HumanState(p.subdialogId);
744
+ // Check if sideDialog has unresolved Q4H
745
+ const sideDialogQ4H = await DialogPersistence.loadQuestions4HumanState(p.sideDialogId);
752
746
 
753
- if (subdialogQ4H.length > 0) {
754
- // Subdialog is waiting for human input
747
+ if (sideDialogQ4H.length > 0) {
748
+ // SideDialog is waiting for human input
755
749
  // Do NOT auto-revive - wait for human to answer Q4H
756
- log.debug(`Subdialog ${p.subdialogId} has ${subdialogQ4H.length} Q4H, skipping auto-revive`);
750
+ log.debug(
751
+ `SideDialog ${p.sideDialogId} has ${sideDialogQ4H.length} Q4H, skipping auto-revive`,
752
+ );
757
753
  continue;
758
754
  }
759
755
 
760
- // Subdialog has no Q4H, check if it's done
761
- const isDone = await isSubdialogCompleted(p.subdialogId);
756
+ // SideDialog has no Q4H, check if it's done
757
+ const isDone = await isSideDialogCompleted(p.sideDialogId);
762
758
  if (isDone) {
763
759
  // Incorporate response and auto-revive
764
- await incorporateSubdialogResponse(supdialog, p.subdialogId);
760
+ await incorporateSideDialogResponse(askerDialog, p.sideDialogId);
765
761
  }
766
762
  }
767
763
  }
@@ -798,22 +794,22 @@ Invoke the function tool `clear_mind` with:
798
794
  - Clears all dialog messages in the current dialog
799
795
  - Preserves all reminders
800
796
  - **Clears all Q4H questions** (critical!)
801
- - Preserves subdialog registry (root dialog only)
802
- - Has no effect on supdialog
797
+ - Preserves sideDialog registry (main dialog only)
798
+ - Has no effect on askerDialog
803
799
  - Redirects attention to Taskdoc
804
800
  - A system-generated new-course prompt is queued and used as the **first `role=user` message** in the new dialog course
805
801
  - Starts a new dialog course
806
802
 
807
803
  **Multi-course dialog note**:
808
804
 
809
- - The first course is created naturally when a main dialog or subdialog is created.
810
- - Later courses are started by the dialog responder via `clear_mind`.
805
+ - The first course is created naturally when a main dialog or sideDialog is created.
806
+ - Later courses are started by the Dialog Responder via `clear_mind`.
811
807
  - Exception: the system may auto-start a new course as remediation (e.g., context health becomes critical).
812
808
 
813
809
  **Implementation Notes**:
814
810
 
815
811
  - Operation is scoped to the current dialog only
816
- - Subdialogs are not affected by parent's `clear_mind`
812
+ - SideDialogs are not affected by tellasker's `clear_mind`
817
813
  - Taskdoc remains unchanged and accessible
818
814
  - Reminders provide continuity across the clarity operation
819
815
 
@@ -839,12 +835,12 @@ Invoke the function tool `change_mind` with:
839
835
  - The updated file immediately becomes available to all dialogs referencing it
840
836
  - **Does not start a new dialog course.** If starting a new dialog course is desired, use `clear_mind` separately.
841
837
  - Does not clear messages, reminders, Q4H, or registry by itself
842
- - Affects all participant agents (main and subdialogs) referencing the same Taskdoc
838
+ - Affects all participant agents (main and sideDialogs) referencing the same Taskdoc
843
839
  - Use `progress` for key decisions/status/next steps; use `constraints` for hard rules (don’t leave them only in chat/reminders).
844
840
 
845
841
  **Implementation Notes**:
846
842
 
847
- - `change_mind` is only available in root dialogs (not subdialogs); subdialogs must ask the tellasker via a TellaskBack (`tellaskBack({ tellaskContent: "..." })`) to update the shared Taskdoc.
843
+ - `change_mind` is only available in main dialogs (not sideDialogs); sideDialogs must ask the tellasker via a TellaskBack (`tellaskBack({ tellaskContent: "..." })`) to update the shared Taskdoc.
848
844
  - For `*.tsk/` Taskdoc packages, the Taskdoc is encapsulated: general file tools must not read/write/list/delete anything under `*.tsk/`. See [`encapsulated-taskdoc.md`](./encapsulated-taskdoc.md).
849
845
 
850
846
  ---
@@ -873,22 +869,22 @@ Invoke the function tool `change_mind` with:
873
869
 
874
870
  ---
875
871
 
876
- ## Subdialog Registry
872
+ ## SideDialog Registry
877
873
 
878
874
  ### Overview
879
875
 
880
- The **subdialog registry** is a root-dialog-scoped data structure that maintains persistent references to registered subdialogs created via TYPE B (Registered Subdialog Tellask / `Tellask Session`) teammate Tellasks.
876
+ The **sideDialog registry** is a main-dialog-scoped data structure that maintains persistent references to registered sideDialogs created via TYPE B (Registered SideDialog Tellask / `Tellask Session`) teammate Tellasks.
881
877
 
882
878
  ### Key Characteristics
883
879
 
884
- | Aspect | Description |
885
- | --------------- | --------------------------------------------------------------- |
886
- | **Scope** | Root dialog only (not accessible to subdialogs) |
887
- | **Key Format** | `agentId!sessionSlug` (single-level Map) |
888
- | **Storage** | `registry.yaml` in root dialog directory |
889
- | **Lifecycle** | Retained during normal runs; dead subdialog entries are removed |
890
- | **Persistence** | Moves with root to `done/` when root completes |
891
- | **Restoration** | Rebuilt on root load by scanning done/ subdialog YAMLs |
880
+ | Aspect | Description |
881
+ | --------------- | ---------------------------------------------------------------- |
882
+ | **Scope** | Main dialog only (not accessible to sideDialogs) |
883
+ | **Key Format** | `agentId!sessionSlug` (single-level Map) |
884
+ | **Storage** | `registry.yaml` in main dialog directory |
885
+ | **Lifecycle** | Retained during normal runs; dead sideDialog entries are removed |
886
+ | **Persistence** | Moves with root to `done/` when main dialog completes |
887
+ | **Restoration** | Rebuilt on main dialog load by scanning done/ sideDialog YAMLs |
892
888
 
893
889
  ### Registry Operations
894
890
 
@@ -896,7 +892,7 @@ Example `registry.yaml` (conceptual):
896
892
 
897
893
  ```yaml
898
894
  researcher!market-analysis:
899
- subdialogId: uuid-123
895
+ sideDialogId: uuid-123
900
896
  agentId: researcher
901
897
  tellaskSession: market-analysis
902
898
  createdAt: 2025-12-27T10:00:00Z
@@ -907,43 +903,43 @@ researcher!market-analysis:
907
903
  flowchart TD
908
904
  Tellask["TYPE B Tellask: tellask(..., sessionSlug=...)"] --> Key[Compute key: agentId!sessionSlug]
909
905
  Key --> Lookup{Registry hit?}
910
- Lookup -- yes --> Resume[Restore + drive existing subdialog]
911
- Lookup -- no --> Create[Create + register + drive new subdialog]
912
- Resume --> Supply[Supply response to caller]
906
+ Lookup -- yes --> Resume[Restore + drive existing sideDialog]
907
+ Lookup -- no --> Create[Create + register + drive new sideDialog]
908
+ Resume --> Supply[Supply response to tellasker]
913
909
  Create --> Supply
914
910
  ```
915
911
 
916
- ### Class Design: RootDialog vs SubDialog
912
+ ### Class Design: MainDialog vs SideDialog
917
913
 
918
- **Critical Design Principle**: The subdialog registry is managed exclusively by `RootDialog` and is **not accessible** to `SubDialog` instances.
914
+ **Critical Design Principle**: The sideDialog registry is managed exclusively by `MainDialog` and is **not accessible** to `SideDialog` instances.
919
915
 
920
916
  **Responsibilities:**
921
917
 
922
- - `RootDialog`
923
- - Owns the TYPE B subdialog registry (`registry.yaml`)
924
- - Creates/registers/looks up registered subdialogs (`agentId!sessionSlug`)
925
- - `SubDialog`
926
- - Has a `supdialog` reference (direct parent) and uses it for TYPE A (`tellaskBack({ tellaskContent: "..." })`)
927
- - Cannot access or mutate the root registry (by design)
918
+ - `MainDialog`
919
+ - Owns the TYPE B sideDialog registry (`registry.yaml`)
920
+ - Creates/registers/looks up registered sideDialogs (`agentId!sessionSlug`)
921
+ - `SideDialog`
922
+ - Has a `askerDialog` reference (direct askerDialog) and uses it for TYPE A (`tellaskBack({ tellaskContent: "..." })`)
923
+ - Cannot access or mutate the main dialog registry (by design)
928
924
 
929
925
  **Mutex Semantics**:
930
926
 
931
- - `locked: true` → Subdialog is currently being driven (mutex held)
932
- - `locked: false` → Entry exists but subdialog is not locked (can resume)
927
+ - `locked: true` → SideDialog is currently being driven (mutex held)
928
+ - `locked: false` → Entry exists but sideDialog is not locked (can resume)
933
929
  - Registry does NOT track: 'active' | 'completed' | 'suspended' lifecycle states
934
930
 
935
- **Design Principle**: The registry tracks "locked" (being driven) vs "unlocked" (can resume) state. It does NOT track dialog lifecycle states (active/completed/suspended). Those are Dialog concerns, not Registry concerns. A registered subdialog may be unlocked (not currently being driven) but still exist as a completed or suspended dialog.
931
+ **Design Principle**: The registry tracks "locked" (being driven) vs "unlocked" (can resume) state. It does NOT track dialog lifecycle states (active/completed/suspended). Those are Dialog concerns, not Registry concerns. A registered sideDialog may be unlocked (not currently being driven) but still exist as a completed or suspended dialog.
936
932
 
937
933
  ### Registry Persistence
938
934
 
939
- **File Location**: `<root-dialog-path>/registry.yaml`
935
+ **File Location**: `<main-dialog-path>/registry.yaml`
940
936
 
941
937
  **Format**:
942
938
 
943
939
  ```typescript
944
- interface SubdialogRegistry {
940
+ interface SideDialogRegistry {
945
941
  [key: string]: {
946
- subdialogId: string; // UUID of the subdialog
942
+ sideDialogId: string; // UUID of the sideDialog
947
943
  agentId: string; // Agent identifier
948
944
  tellaskSession: string; // Tellask session key
949
945
  createdAt: string; // ISO timestamp
@@ -958,8 +954,8 @@ interface SubdialogRegistry {
958
954
  1. **On Registration**: New entry added to registry, file saved
959
955
  2. **On Resume**: `lastAccessed` updated, file saved
960
956
  3. **On Clear Mind**: Registry preserved (not cleared)
961
- 4. **On Root Completion**: Registry moves with root to `done/`
962
- 5. **On Root Load**: Registry rebuilt from done/ subdialog YAMLs
957
+ 4. **On Main Completion**: Registry moves with root to `done/`
958
+ 5. **On Main Load**: Registry rebuilt from done/ sideDialog YAMLs
963
959
 
964
960
  ---
965
961
 
@@ -971,17 +967,17 @@ The complete Dialog class implementation with all methods, properties, and detai
971
967
 
972
968
  **Key Components**:
973
969
 
974
- - **Hierarchy Support**: Parent-child relationships for subdialog management
970
+ - **Dialog Relationship Support**: Tellask/response relationships for sideDialog management
975
971
  - **Memory Management**: Persistent reminders and ephemeral dialog messages
976
972
  - **Mental Clarity Operations**: `startNewCourse(newCoursePrompt)` method (clears messages, clears Q4H, increments course, queues new course prompt for the next drive)
977
- - **Subdialog Management**: Creation and coordination of specialized subtasks
973
+ - **SideDialog Management**: Creation and coordination of specialized subtasks
978
974
  - **Q4H Management**: `updateQuestions4Human()` method for question tracking
979
975
  - **Memory Access**: Integration with Taskdocs and team/agent memories
980
- - **Registry Management** (RootDialog only): Registration and lookup of subdialogs
976
+ - **Registry Management** (MainDialog only): Registration and lookup of sideDialogs
981
977
 
982
978
  ### Main Dialog Resolution
983
979
 
984
- For subdialogs needing to communicate with the main dialog (root dialog), see the implementation in `dominds/main/dialog.ts` which provides methods for traversing the dialog hierarchy.
980
+ For sideDialogs needing to communicate with the Main Dialog, see the implementation in `dominds/main/dialog.ts` which provides methods for resolving dialog relationships.
985
981
 
986
982
  ### Persistence Layer
987
983
 
@@ -991,7 +987,7 @@ The persistence layer handles:
991
987
  - **Q4H Storage**: `q4h.yaml` per dialog (cleared by clear_mind)
992
988
  - **Reminder Storage**: `reminders.json` per dialog
993
989
  - **Event Persistence**: Course-based JSONL files
994
- - **Registry Storage**: `registry.yaml` per root dialog
990
+ - **Registry Storage**: `registry.yaml` per main dialog
995
991
 
996
992
  **Q4H Persistence Methods**:
997
993
 
@@ -1014,13 +1010,13 @@ static async clearQuestions4HumanState(
1014
1010
  **Registry Persistence Methods**:
1015
1011
 
1016
1012
  ```typescript
1017
- // In RootDialog (dialog.ts)
1013
+ // In MainDialog (dialog.ts)
1018
1014
  interface RegistryMethods {
1019
- loadRegistry(): Promise<SubdialogRegistry>;
1020
- saveRegistry(registry: SubdialogRegistry): Promise<void>;
1021
- registerSubdialog(key: string, metadata: SubdialogMetadata): void;
1022
- lookupSubdialog(key: string): SubdialogMetadata | undefined;
1023
- getRegistry(): SubdialogRegistry;
1015
+ loadRegistry(): Promise<SideDialogRegistry>;
1016
+ saveRegistry(registry: SideDialogRegistry): Promise<void>;
1017
+ registerSideDialog(key: string, metadata: SideDialogMetadata): void;
1018
+ lookupSideDialog(key: string): SideDialogMetadata | undefined;
1019
+ getRegistry(): SideDialogRegistry;
1024
1020
  }
1025
1021
  ```
1026
1022
 
@@ -1028,66 +1024,66 @@ interface RegistryMethods {
1028
1024
 
1029
1025
  ## Dialog Management
1030
1026
 
1031
- ### Hierarchy Management
1027
+ ### Dialog Relationship Management
1032
1028
 
1033
- **Creation**: Subdialogs are created when agents need to delegate specialized tasks or when complex problems require decomposition.
1029
+ **Creation**: SideDialogs are created when agents need to delegate specialized tasks or when complex problems require decomposition.
1034
1030
 
1035
- **Context Inheritance**: New subdialogs automatically receive:
1031
+ **Context Inheritance**: New sideDialogs automatically receive:
1036
1032
 
1037
1033
  - Reference to the same rtws (runtime workspace) Taskdoc (recommended: `tasks/feature-auth.tsk/`); `dlg.taskDocPath` is fixed at dialog creation and never reassigned
1038
- - Tellasker dialog Tellask context (mentionList + tellaskContent) explaining their purpose
1034
+ - Tellasker-provided context (mentionList + tellaskContent) explaining their purpose
1039
1035
  - Access to shared team memories
1040
1036
  - Access to their agent's individual memories
1041
1037
 
1042
- ### Subdialog course header (required)
1038
+ ### SideDialog course header (required)
1043
1039
 
1044
- At the start of every subdialog course, the runtime must prepend a role header to the assignment prompt:
1040
+ At the start of every sideDialog course, the runtime must prepend a role header to the assignment prompt:
1045
1041
 
1046
- - EN: `You are the responder (tellaskee dialog) for this dialog; the tellasker dialog is @xxx (the current caller).`
1042
+ - EN: `You are the Dialog Responder for this dialog; the tellasker is @xxx (current tellasker).`
1047
1043
  - Chinese variant: see [the Chinese doc](./dialog-system.zh.md) for the corresponding work-language header.
1048
1044
 
1049
- **FBR special handling**: FBR is a self-subdialog and must keep a dedicated header to avoid confusion:
1045
+ **FBR special handling**: FBR is a self-sideDialog and must keep a dedicated header to avoid confusion:
1050
1046
 
1051
- - EN (example): `This is an FBR sideline dialog; the tellasker dialog is @xxx (may be the same agent).`
1047
+ - EN (example): `This is an FBR Side Dialog; the tellasker is @xxx (may be the same agent).`
1052
1048
  - Chinese variant example: see [the Chinese doc](./dialog-system.zh.md) for the corresponding FBR header example.
1053
1049
 
1054
- **Insertion point**: prefer a single insertion point by updating `formatAssignmentFromSupdialog()` (covers `dialog.ts`, `tellask-bridge`).
1050
+ **Insertion point**: prefer a single insertion point by updating `formatAssignmentFromAskerDialog()` (covers `dialog.ts`, `tellask-bridge`).
1055
1051
  There is no separate frontend twin anymore; [`main/runtime/inter-dialog-format.ts`](../main/runtime/inter-dialog-format.ts) is the authoritative formatter.
1056
1052
 
1057
- **Storage**: All subdialogs are stored flat under the main dialog's (root dialog's) `subdialogs/` directory, regardless of nesting depth.
1053
+ **Storage**: All sideDialogs are stored flat under the main dialog's `sideDialogs/` directory, regardless of nesting depth.
1058
1054
 
1059
- **Navigation**: Each subdialog maintains a reference to its parent, enabling upward traversal to the main dialog.
1055
+ **Navigation**: Each sideDialog maintains a reference to its askerDialog, enabling traversal toward the main dialog.
1060
1056
 
1061
- **Registry**: Registered subdialogs (TYPE B Tellasks) are tracked in the root dialog's registry and persist across restarts.
1057
+ **Registry**: Registered sideDialogs (TYPE B Tellasks) are tracked in the main dialog's registry and persist across restarts.
1062
1058
 
1063
- ### Root dialog fork
1059
+ ### Main dialog fork
1064
1060
 
1065
- An entire root dialog tree can be forked at the start of a chosen root generation into a brand-new root dialog. This is used to preserve prior context while re-running the later mainline/sideline path from a historical branch point.
1061
+ An entire main dialog tree can be forked at the start of a chosen root generation into a brand-new main dialog. This is used to preserve prior context while re-running the later Main Dialog/Side Dialog path from a historical branch point.
1066
1062
 
1067
1063
  **Entry points**:
1068
1064
 
1069
- - UI shows `Fork dialog` only on generation bubbles of a root dialog (`selfId === rootId`)
1065
+ - UI shows `Fork dialog` only on generation bubbles of a main dialog (`selfId === rootId`)
1070
1066
  - Backend API: `POST /api/dialogs/:rootId/fork`
1071
1067
  - Request body: `{ course, genseq, status? }`
1072
1068
 
1073
1069
  **Semantics (required)**:
1074
1070
 
1075
- - The selected generation bubble is **not** copied into the forked root; the fork point means "branch immediately before this generation starts"
1076
- - The copy scope is the **entire root dialog tree**, not just one dialog
1077
- - A subdialog is included only if the root had already persisted it as created before the cutoff
1078
- - Subdialog transcript retention is bounded by the root-generation anchor, not by the subdialog's local `genseq`
1071
+ - The selected generation bubble is **not** copied into the forked main dialog; the fork point means "branch immediately before this generation starts"
1072
+ - The copy scope is the **entire main dialog tree**, not just one dialog
1073
+ - A sideDialog is included only if the root had already persisted it as created before the cutoff
1074
+ - SideDialog transcript retention is bounded by the root-generation anchor, not by the sideDialog's local `genseq`
1079
1075
 
1080
1076
  **Post-fork actions** (returned by backend to UI):
1081
1077
 
1082
1078
  - `draft_user_text`: if the target generation is a user message, prefill that text into the new dialog input and wait for user confirmation
1083
- - `restore_pending`: if there were pending Q4H or pending subdialogs before the cutoff, restore those blocking states in the new root
1084
- - `auto_continue`: if there is no pending blocker before the cutoff, initialize the new root as `interrupted(system_stop: fork_dialog_continue)` and have UI immediately send `resume_dialog`
1079
+ - `restore_pending`: if there were pending Q4H or pending sideDialogs before the cutoff, restore those blocking states in the new main dialog
1080
+ - `auto_continue`: if there is no pending blocker before the cutoff, initialize the new main dialog as `interrupted(system_stop: fork_dialog_continue)` and have UI immediately send `resume_dialog`
1085
1081
 
1086
1082
  **Consistency requirements**:
1087
1083
 
1088
1084
  - Fork must preserve the same Taskdoc reference
1089
- - The forked root and all forked subdialogs are persisted under `running/` with a new rootId
1090
- - Frontend must not expose this entry for sideline dialogs; current implementation supports root dialogs only
1085
+ - The forked main dialog and all forked sideDialogs are persisted under `running/` with a new rootId
1086
+ - Frontend must not expose this entry for Side Dialogs; current implementation supports main dialogs only
1091
1087
 
1092
1088
  ### Lifecycle Management
1093
1089
 
@@ -1097,28 +1093,28 @@ An entire root dialog tree can be forked at the start of a chosen root generatio
1097
1093
 
1098
1094
  - Tasks are finished successfully
1099
1095
  - Agents explicitly mark them complete
1100
- - Supdialogs determine subtasks are no longer needed
1101
- - All pending subdialogs are complete AND all Q4H are answered
1096
+ - AskerDialogs determine subtasks are no longer needed
1097
+ - All pending sideDialogs are complete AND all Q4H are answered
1102
1098
 
1103
- **Registry on Completion**: When a root dialog completes, its registry moves with it to the `done/` directory and is preserved for potential restoration.
1099
+ **Registry on Completion**: When a main dialog completes, its registry moves with it to the `done/` directory and is preserved for potential restoration.
1104
1100
 
1105
1101
  **Cleanup**: Completed dialogs may be archived or cleaned up based on retention policies.
1106
1102
 
1107
1103
  ### Communication Patterns
1108
1104
 
1109
- **Upward Communication**: Subdialogs communicate results, questions, and escalations to their **tellasker dialog** (the caller).
1105
+ **Tellasker-Bound Communication**: SideDialogs communicate results, questions, and escalations to their **tellasker**.
1110
1106
 
1111
- - **Clarification Requests (TYPE A / `TellaskBack`)**: A subdialog may Tellask its tellasker dialog to request clarification while working on its subtask. For TYPE A, the tellasker dialog is the direct supdialog. The tellasker dialog provides guidance, and the subdialog continues with updated context.
1112
- - **Subtask Response**: When a subdialog produces a final "saying" content block (no pending Q4H), that message is treated as the response to the **current caller** recorded in `assignmentFromSup` (root or another subdialog). This keeps responses aligned with the most recent Tellask site.
1113
- - **Q4H Escalation**: If a subdialog has Q4H, it suspends. The user can answer via the UI, which triggers continuation of the subdialog only.
1114
- - **Registered Subdialogs (TYPE B / `Tellask Session`)**: A parent can resume a previously created registered subdialog, enabling ongoing task continuation.
1115
- - **Transient Subdialogs (TYPE C / `Fresh Tellask`)**: A parent can spawn a one-off subdialog for independent tasks that don't require persistence.
1107
+ - **Clarification Requests (TYPE A / `TellaskBack`)**: A sideDialog may Tellask its tellasker to request clarification while working on its subtask. For TYPE A, the tellasker is the direct askerDialog. The tellasker provides guidance, and the sideDialog continues with updated context.
1108
+ - **Subtask Response**: When a sideDialog produces a final "saying" content block (no pending Q4H), that message is treated as the response to the **current tellasker** recorded in `assignmentFromAsker` (main dialog or another sideDialog). This keeps responses aligned with the most recent Tellask site.
1109
+ - **Q4H Escalation**: If a sideDialog has Q4H, it suspends. The user can answer via the UI, which triggers continuation of the sideDialog only.
1110
+ - **Registered SideDialogs (TYPE B / `Tellask Session`)**: A tellasker can resume a previously created registered sideDialog, enabling ongoing task continuation.
1111
+ - **Transient SideDialogs (TYPE C / `Fresh Tellask`)**: A tellasker can spawn a one-off sideDialog for independent tasks that don't require persistence.
1116
1112
 
1117
- **Downward Communication**: Supdialogs provide context, objectives, and guidance to subdialogs.
1113
+ **Side-Bound Communication**: AskerDialogs provide context, objectives, and guidance to sideDialogs.
1118
1114
 
1119
- **Lateral Communication**: Sibling subdialogs coordinate through their shared supdialog.
1115
+ **Lateral Communication**: Sibling sideDialogs coordinate through their shared askerDialog.
1120
1116
 
1121
- **Broadcast Communication**: Main dialog (root dialog) can communicate changes (like rtws Taskdoc file updates) to all dialogs through the Taskdoc reference.
1117
+ **Broadcast Communication**: Main dialog (main dialog) can communicate changes (like rtws Taskdoc file updates) to all dialogs through the Taskdoc reference.
1122
1118
 
1123
1119
  ---
1124
1120
 
@@ -1132,9 +1128,9 @@ An entire root dialog tree can be forked at the start of a chosen root generatio
1132
1128
 
1133
1129
  **Q4H Questions**: Transient questions for human input that are **cleared by mental clarity operations**.
1134
1130
 
1135
- **Parent Call Context**: Immutable context explaining why a subdialog was created.
1131
+ **Tellasker Call Context**: Immutable context explaining why a sideDialog was created.
1136
1132
 
1137
- **Subdialog Registry**: Root-dialog-scoped persistent mapping of registered subdialogs (survives clarity operations).
1133
+ **SideDialog Registry**: Main-dialog-scoped persistent mapping of registered sideDialogs (survives clarity operations).
1138
1134
 
1139
1135
  ### rtws-Persistent Memory
1140
1136
 
@@ -1150,7 +1146,7 @@ An entire root dialog tree can be forked at the start of a chosen root generatio
1150
1146
 
1151
1147
  **Q4H Persistence**: Q4H questions are persisted when created and cleared atomically when answered or when clear_mind is called.
1152
1148
 
1153
- **Registry Persistence**: Registry is persisted after each modification and restored on root dialog load.
1149
+ **Registry Persistence**: Registry is persisted after each modification and restored on main dialog load.
1154
1150
 
1155
1151
  ---
1156
1152
 
@@ -1164,16 +1160,16 @@ An entire root dialog tree can be forked at the start of a chosen root generatio
1164
1160
  - `<dialog-root>/latest.yaml` — current course tracking and status
1165
1161
  - `<dialog-root>/reminders.json` — persistent reminder storage
1166
1162
  - `<dialog-root>/q4h.yaml` — Q4H index (cleared by clarity tools)
1167
- - `<dialog-root>/registry.yaml` — subdialog registry (root dialogs only)
1163
+ - `<dialog-root>/registry.yaml` — sideDialog registry (main dialogs only)
1168
1164
  - `<dialog-root>/course-001.jsonl` (and further courses) — streamed message files
1169
- - `<dialog-root>/subdialogs/<subdialog-id>/dialog.yaml`
1170
- - `<dialog-root>/subdialogs/<subdialog-id>/q4h.yaml` — per-subdialog Q4H index (cleared by clarity)
1165
+ - `<dialog-root>/sideDialogs/<sideDialog-id>/dialog.yaml`
1166
+ - `<dialog-root>/sideDialogs/<sideDialog-id>/q4h.yaml` — per-sideDialog Q4H index (cleared by clarity)
1171
1167
 
1172
1168
  **Taskdoc Storage**: Taskdocs are rtws artifacts referenced by dialogs through paths. Taskdocs MUST be encapsulated `*.tsk/` Taskdoc packages.
1173
1169
 
1174
1170
  **Memory Storage**: Team and agent memories are stored in dedicated files within the rtws.
1175
1171
 
1176
- **Registry Storage**: The subdialog registry (`registry.yaml`) is stored in the root dialog directory and moves to `done/` on root completion.
1172
+ **Registry Storage**: The sideDialog registry (`registry.yaml`) is stored in the main dialog directory and moves to `done/` on main dialog completion.
1177
1173
 
1178
1174
  ### Streaming Substream Ordering Contract (Thinking / Saying)
1179
1175
 
@@ -1192,8 +1188,8 @@ Dominds persists fine-grained message entries (thinking/saying/tool call/tool re
1192
1188
  - **Ideal target**: Provider SDKs/protocols should natively support `role='environment'` (or an equivalent mechanism) for runtime-injected environment/system content (e.g. reminders, transient guides), so we don't have to disguise environment content as user messages.
1193
1189
  - **Current reality**: Most providers do not support `role='environment'`. Therefore, when projecting Dominds messages into provider request payloads, Dominds must flatten internal message kinds into provider-supported roles.
1194
1190
  - Runtime/system notices (`environment_msg`) are projected as `role='user'` text blocks.
1195
- - Self-authored guides / self-reminders (`transient_guide_msg`) are projected as `role='assistant'` text blocks.
1196
- - Reminders follow their source semantics rather than one blanket rule: system-maintained reminders (for example runtime status signals) should land on the `user` side as explicit system notices, while self-maintained work reminders stay on the `assistant` side as first-person work notes.
1191
+ - Self-authored transient guides (`transient_guide_msg`) are projected as `role='assistant'` text blocks.
1192
+ - Default reminder context wrappers are runtime/system notices: Dominds' built-in and fallback wrappers land on the `user` side with an explicit system notice marker (for example `[System notice]`) and second-person wording to the LLM. Custom reminder owners keep responsibility for the role they emit under their own contract. Regardless of that owner-level role choice, the surrounding reminder block is environment-style runtime context rather than a fresh user instruction or an assistant-authored chat turn. Reminder projections should be inserted before the real dialog messages and wrapped in a paired reminder-block header/footer; the footer must scope the warning to the content between that header and footer, so real user instructions elsewhere in dialog history are not accidentally downgraded.
1197
1193
 
1198
1194
  Additionally, some providers (especially Anthropic-compatible endpoints) enforce stricter validation around **role alternation** and **tool_use/tool_result boundaries**. Dominds' projection layer must assemble internal fine-grained entries into provider-friendly turns (turn assembly), rather than sending a 1:1 mapping of persisted entries.
1199
1195
 
@@ -1203,19 +1199,19 @@ Additionally, some providers (especially Anthropic-compatible endpoints) enforce
1203
1199
 
1204
1200
  **Tool Invocation**: Mental clarity tools are invoked through CLI commands or agent actions.
1205
1201
 
1206
- **Status Monitoring**: Dialog status, pending subdialogs, Q4H count, and registered subdialogs can be inspected through CLI tools.
1202
+ **Status Monitoring**: Dialog status, pending sideDialogs, Q4H count, and registered sideDialogs can be inspected through CLI tools.
1207
1203
 
1208
1204
  ### Agent Integration
1209
1205
 
1210
- **Autonomous Operation**: Agents can independently create subdialogs (TYPE B and C), manage reminders, raise Q4H, and trigger clarity operations.
1206
+ **Autonomous Operation**: Agents can independently create sideDialogs (TYPE B and C), manage reminders, raise Q4H, and trigger clarity operations.
1211
1207
 
1212
- **Context Awareness**: Agents have full access to their dialog context, memories, hierarchy position, pending Q4H from subdialogs, and (for root dialogs) the subdialog registry.
1208
+ **Context Awareness**: Agents have full access to their dialog context, memories, dialog relationship position, pending Q4H from sideDialogs, and (for main dialogs) the sideDialog registry.
1213
1209
 
1214
1210
  **Teammate Tellask Capability**: Agents can invoke all three types of teammate Tellasks:
1215
1211
 
1216
- - TYPE A / `TellaskBack`: Tellask the tellasker dialog for clarification (direct supdialog for TYPE A)
1217
- - TYPE B / `Tellask Session`: Tellask/resume registered subdialogs
1218
- - TYPE C / `Fresh Tellask`: Spawn transient subdialogs
1212
+ - TYPE A / `TellaskBack`: Tellask the tellasker for clarification (direct askerDialog for TYPE A)
1213
+ - TYPE B / `Tellask Session`: Tellask/resume registered sideDialogs
1214
+ - TYPE C / `Fresh Tellask`: Spawn transient sideDialogs
1219
1215
 
1220
1216
  **Tool Access**: All mental clarity tools, Q4H capability, and teammate Tellask capability are available to agents for autonomous cognitive management.
1221
1217
 
@@ -1226,7 +1222,7 @@ driven is derived from persisted facts:
1226
1222
 
1227
1223
  - Persisted status (API/index): `running | completed | archived`
1228
1224
  - Persisted `latest.yaml`: `status`, `needsDrive`, `generating`
1229
- - Derived gates: `hasPendingQ4H()` and `hasPendingSubdialogs()`
1225
+ - Derived gates: `hasPendingQ4H()` and `hasPendingSideDialogs()`
1230
1226
 
1231
1227
  **Persisted status lifecycle:**
1232
1228
 
@@ -1238,13 +1234,13 @@ stateDiagram-v2
1238
1234
  completed --> archived: archive
1239
1235
  ```
1240
1236
 
1241
- **Root driver gating (conceptual):**
1237
+ **Main driver gating (conceptual):**
1242
1238
 
1243
1239
  ```mermaid
1244
1240
  flowchart TD
1245
- A[status=running] --> B{canDrive?\\n(no pending Q4H\\n& no pending subdialogs)}
1246
- B -- no --> S[Suspended\\n(waiting on Q4H and/or subdialogs)]
1247
- S -->|Q4H answered\\nor subdialog responses supplied| C{needsDrive?}
1241
+ A[status=running] --> B{canDrive?\\n(no pending Q4H\\n& no pending sideDialogs)}
1242
+ B -- no --> S[Suspended\\n(waiting on Q4H and/or sideDialogs)]
1243
+ S -->|Q4H answered\\nor sideDialog responses supplied| C{needsDrive?}
1248
1244
  B -- yes --> C{needsDrive?}
1249
1245
  C -- no --> I[Idle\\n(waiting for trigger)]
1250
1246
  C -- yes --> D[Drive loop\\n(generating=true while streaming)]
@@ -1262,58 +1258,58 @@ rendered in different markdown viewers.
1262
1258
 
1263
1259
  ```mermaid
1264
1260
  sequenceDiagram
1265
- participant Sub as Subdialog
1261
+ participant Side as SideDialog
1266
1262
  participant Driver as Backend driver
1267
- participant Sup as Tellasker dialog (direct supdialog)
1263
+ participant Asker as Tellasker (direct askerDialog)
1268
1264
 
1269
- Sub->>Driver: emits `tellaskBack({ tellaskContent: "..." })` + question
1270
- Driver->>Sup: drive tellasker dialog to answer
1271
- Sup-->>Driver: response text
1272
- Driver-->>Sub: resume subdialog with response in context
1265
+ Side->>Driver: emits `tellaskBack({ tellaskContent: "..." })` + question
1266
+ Driver->>Asker: drive tellasker to answer
1267
+ Asker-->>Driver: response text
1268
+ Driver-->>Side: resume sideDialog with response in context
1273
1269
  ```
1274
1270
 
1275
- #### TYPE B: Registered Subdialog Tellask (`Tellask Session`) (`tellask({ targetAgentId: "agentId", sessionSlug: "tellaskSession", tellaskContent: "..." })`)
1271
+ #### TYPE B: Registered SideDialog Tellask (`Tellask Session`) (`tellask({ targetAgentId: "agentId", sessionSlug: "tellaskSession", tellaskContent: "..." })`)
1276
1272
 
1277
1273
  ```mermaid
1278
1274
  sequenceDiagram
1279
- participant Caller as Caller dialog
1275
+ participant Tellasker as Tellasker
1280
1276
  participant Driver as Backend driver
1281
- participant Reg as Root subdialog registry
1282
- participant Sub as Registered subdialog
1277
+ participant Reg as Main sideDialog registry
1278
+ participant Side as Registered sideDialog
1283
1279
 
1284
- Caller->>Driver: emits `tellask({ targetAgentId: "agentId", sessionSlug: "tellaskSession", tellaskContent: "..." })`
1280
+ Tellasker->>Driver: emits `tellask({ targetAgentId: "agentId", sessionSlug: "tellaskSession", tellaskContent: "..." })`
1285
1281
  Driver->>Reg: lookup `agentId!sessionSlug`
1286
1282
  alt registry hit
1287
- Reg-->>Driver: existing subdialog selfId
1283
+ Reg-->>Driver: existing sideDialog selfId
1288
1284
  opt earlier round still waiting
1289
- Driver-->>Caller: close earlier waiting round with system-generated business notice
1290
- Driver->>Sub: queue update notice + latest full assignment
1285
+ Driver-->>Tellasker: close earlier waiting round with system-generated business notice
1286
+ Driver->>Side: queue update notice + latest full assignment
1291
1287
  end
1292
- Driver->>Sub: restore + drive
1288
+ Driver->>Side: restore + drive
1293
1289
  else registry miss
1294
1290
  Reg-->>Driver: none
1295
- Driver->>Sub: create + register + drive
1291
+ Driver->>Side: create + register + drive
1296
1292
  end
1297
- Sub-->>Driver: final response
1298
- Driver-->>Caller: supply response + clear pending-subdialogs
1299
- opt Caller is root and now unblocked
1300
- Driver-->>Caller: set `needsDrive=true` (auto-revive scheduling)
1293
+ Side-->>Driver: final response
1294
+ Driver-->>Tellasker: supply response + clear pending-sideDialogs
1295
+ opt Tellasker is the main dialog and now unblocked
1296
+ Driver-->>Tellasker: set `needsDrive=true` (auto-revive scheduling)
1301
1297
  end
1302
1298
  ```
1303
1299
 
1304
- #### TYPE C: Transient Subdialog Tellask (`Fresh Tellask`) (`tellaskSessionless({ targetAgentId: "agentId", tellaskContent: "..." })`; `freshBootsReasoning({ tellaskContent: "..." })` is FBR tool-less)
1300
+ #### TYPE C: Transient SideDialog Tellask (`Fresh Tellask`) (`tellaskSessionless({ targetAgentId: "agentId", tellaskContent: "..." })`; `freshBootsReasoning({ tellaskContent: "..." })` is FBR tool-less)
1305
1301
 
1306
1302
  ```mermaid
1307
1303
  sequenceDiagram
1308
- participant Caller as Caller dialog
1304
+ participant Tellasker as Tellasker
1309
1305
  participant Driver as Backend driver
1310
- participant Sub as Transient subdialog
1306
+ participant Side as Transient sideDialog
1311
1307
 
1312
- Caller->>Driver: emits `tellaskSessionless({ targetAgentId: "agentId", tellaskContent: "..." })`
1313
- Driver->>Sub: create (NOT registered)
1314
- Driver->>Sub: drive
1315
- Sub-->>Driver: final response
1316
- Driver-->>Caller: supply response (no registry update)
1308
+ Tellasker->>Driver: emits `tellaskSessionless({ targetAgentId: "agentId", tellaskContent: "..." })`
1309
+ Driver->>Side: create (NOT registered)
1310
+ Driver->>Side: drive
1311
+ Side-->>Driver: final response
1312
+ Driver-->>Tellasker: supply response (no registry update)
1317
1313
  ```
1318
1314
 
1319
1315
  ### Q4H Lifecycle State
@@ -1333,31 +1329,31 @@ flowchart TD
1333
1329
  `q4h.yaml` is treated as an index; the source-of-truth “asked question” content lives in the dialog’s
1334
1330
  message stream, referenced by `callSiteRef`.
1335
1331
 
1336
- ### Subdialog + Q4H Interaction
1332
+ ### SideDialog + Q4H Interaction
1337
1333
 
1338
1334
  ```mermaid
1339
1335
  sequenceDiagram
1340
- participant Sup as Supdialog
1341
- participant Sub as Subdialog
1336
+ participant Asker as AskerDialog
1337
+ participant Side as SideDialog
1342
1338
  participant UI as Frontend UI
1343
1339
  participant WS as WebSocket handler
1344
1340
  participant Driver as driveDialogStream
1345
1341
 
1346
- Sup->>Sub: create subdialog (Type B or C)
1347
- Note over Sup,Sub: Supdialog becomes blocked on pending subdialogs
1348
- Sub->>WS: emits askHuman({ tellaskContent: "..." }) question (Q4H)
1342
+ Asker->>Side: create sideDialog (Type B or C)
1343
+ Note over Asker,Side: AskerDialog becomes blocked on pending sideDialogs
1344
+ Side->>WS: emits askHuman({ tellaskContent: "..." }) question (Q4H)
1349
1345
  WS-->>UI: questions_count_update (global)
1350
1346
 
1351
- Note over Sub: Subdialog cannot proceed until answered
1347
+ Note over Side: SideDialog cannot proceed until answered
1352
1348
 
1353
- UI->>WS: drive_dialog_by_user_answer (dialogId=subdialogId, questionId, content)
1354
- WS->>Sub: clear q4h.yaml entry
1355
- WS->>Driver: driveDialogStream(subdialog, user answer)
1356
- Driver-->>Sub: subdialog resumes and continues
1357
- Sub-->>Sup: subdialog response supplied to caller (clears pending-subdialogs)
1349
+ UI->>WS: drive_dialog_by_user_answer (dialogId=sideDialogId, questionId, content)
1350
+ WS->>Side: clear q4h.yaml entry
1351
+ WS->>Driver: driveDialogStream(sideDialog, user answer)
1352
+ Driver-->>Side: sideDialog resumes and continues
1353
+ Side-->>Asker: sideDialog response supplied to tellasker (clears pending-sideDialogs)
1358
1354
 
1359
- opt Sup is root and now unblocked
1360
- Sup-->>Sup: set needsDrive=true (auto-revive)
1355
+ opt Asker is the main dialog and now unblocked
1356
+ Asker-->>Asker: set needsDrive=true (auto-revive)
1361
1357
  end
1362
1358
  ```
1363
1359
 
@@ -1386,50 +1382,50 @@ sequenceDiagram
1386
1382
  Main-->>Main: driveDialogStream(answer)
1387
1383
  ```
1388
1384
 
1389
- ### 2. Subdialog Raises Q4H, User Answers via Root
1385
+ ### 2. SideDialog Raises Q4H, User Answers via Main
1390
1386
 
1391
1387
  ```mermaid
1392
1388
  sequenceDiagram
1393
1389
  participant User as User
1394
- participant Sup as Supdialog (root)
1395
- participant Sub as Subdialog
1396
- participant Store as Persistence (sub/q4h.yaml, sub/response.yaml)
1390
+ participant Asker as AskerDialog (main)
1391
+ participant Side as SideDialog
1392
+ participant Store as Persistence (side/q4h.yaml, side/response.yaml)
1397
1393
  participant UI as Frontend
1398
1394
 
1399
- Sup->>Sub: createSubDialog()
1400
- Sub->>Store: recordQuestionForHuman()
1401
- Sub-->>UI: questions_count_update (subdialog)
1402
- Sup-->>Sup: suspended (waiting on Q4H/subdialog)
1403
-
1404
- User->>UI: select subdialog Q4H
1405
- User->>Sup: drive_dialog_by_user_answer(targetSubdialogId)
1406
- Sup->>Sub: handleDriveDialogByUserAnswer(...)
1407
- Sub->>Store: loadQuestions4HumanState()
1408
- Sub->>Store: clearQuestions4HumanState()
1409
- Sub-->>Sub: driveDialogStream(answer)
1410
- Sub->>Store: write response.yaml
1411
- Sub-->>Sup: supply response (resume root)
1395
+ Asker->>Side: createSideDialog()
1396
+ Side->>Store: recordQuestionForHuman()
1397
+ Side-->>UI: questions_count_update (sideDialog)
1398
+ Asker-->>Asker: suspended (waiting on Q4H/sideDialog)
1399
+
1400
+ User->>UI: select sideDialog Q4H
1401
+ User->>Asker: drive_dialog_by_user_answer(targetSideDialogId)
1402
+ Asker->>Side: handleDriveDialogByUserAnswer(...)
1403
+ Side->>Store: loadQuestions4HumanState()
1404
+ Side->>Store: clearQuestions4HumanState()
1405
+ Side-->>Side: driveDialogStream(answer)
1406
+ Side->>Store: write response.yaml
1407
+ Side-->>Asker: supply response (resume root)
1412
1408
  ```
1413
1409
 
1414
- ### 3. Registered Subdialog Tellask (TYPE B / `Tellask Session` / Registered Session Tellask)
1410
+ ### 3. Registered SideDialog Tellask (TYPE B / `Tellask Session` / Registered Session Tellask)
1415
1411
 
1416
1412
  ```mermaid
1417
1413
  sequenceDiagram
1418
- participant Root as Root Dialog
1414
+ participant Main as Main Dialog
1419
1415
  participant Store as Persistence (registry.yaml + dialogs/)
1420
- participant Sub as Subdialog (@researcher sessionSlug market)
1416
+ participant Side as SideDialog (@researcher sessionSlug market)
1421
1417
 
1422
- Root->>Store: lookup registry key "researcher!market"
1418
+ Main->>Store: lookup registry key "researcher!market"
1423
1419
  alt not found
1424
- Root->>Store: create subdialog + save registry.yaml
1425
- Root->>Sub: drive (root suspended)
1420
+ Main->>Store: create sideDialog + save registry.yaml
1421
+ Main->>Side: drive (root suspended)
1426
1422
  else found
1427
- Root->>Store: load subdialog + update lastAccessed
1428
- Root->>Sub: drive (root suspended)
1423
+ Main->>Store: load sideDialog + update lastAccessed
1424
+ Main->>Side: drive (root suspended)
1429
1425
  end
1430
1426
 
1431
- Sub->>Store: write response.yaml
1432
- Sub-->>Root: supply response (root resumes)
1427
+ Side->>Store: write response.yaml
1428
+ Side-->>Main: supply response (root resumes)
1433
1429
  ```
1434
1430
 
1435
1431
  ### 4. Clarity Operations Preserve Registry
@@ -1449,9 +1445,9 @@ sequenceDiagram
1449
1445
 
1450
1446
  ### Scalability
1451
1447
 
1452
- **Flat Storage**: Subdialog flat storage prevents deep directory nesting issues.
1448
+ **Flat Storage**: SideDialog flat storage prevents deep directory nesting issues.
1453
1449
 
1454
- **Registry Efficiency**: Single-level Map lookup for registered subdialogs is O(1).
1450
+ **Registry Efficiency**: Single-level Map lookup for registered sideDialogs is O(1).
1455
1451
 
1456
1452
  **Memory Efficiency**: Shared memories reduce duplication across dialogs.
1457
1453
 
@@ -1463,13 +1459,13 @@ sequenceDiagram
1463
1459
 
1464
1460
  **Backup and Recovery**: Dialog state can be backed up and restored independently. Registry is restored from done/ on load.
1465
1461
 
1466
- **Error Handling**: System gracefully handles dialog corruption, missing files, and registry corruption.
1462
+ **Error Handling**: System loudly reports and quarantines malformed dialog state instead of silently ignoring dialog corruption, missing files, or registry corruption.
1467
1463
 
1468
1464
  ### Monitoring
1469
1465
 
1470
1466
  **Performance Metrics**: System tracks dialog creation, completion, registry size, resource usage, and Q4H count.
1471
1467
 
1472
- **Health Checks**: Regular validation of dialog hierarchy integrity, Q4H persistence, registry consistency, and memory.
1468
+ **Health Checks**: Regular validation of dialog dialog relationship integrity, Q4H persistence, registry consistency, and memory.
1473
1469
 
1474
1470
  **Debugging Support**: Comprehensive logging and inspection tools for troubleshooting teammate Tellasks, registry operations, and Q4H flows.
1475
1471
 
@@ -1477,17 +1473,17 @@ sequenceDiagram
1477
1473
 
1478
1474
  ## Summary
1479
1475
 
1480
- The Dominds dialog system provides a robust framework for hierarchical, human-in-the-loop AI collaboration:
1476
+ The Dominds dialog system provides a robust framework for human-in-the-loop AI collaboration:
1481
1477
 
1482
1478
  ### Four Core Mechanisms
1483
1479
 
1484
- | Mechanism | Purpose | Survives Clarity | Cleared By |
1485
- | ---------------------- | ----------------------------- | ---------------- | -------------------------------------------- |
1486
- | **Dialog Hierarchy** | Parent-child task delegation | N/A | N/A |
1487
- | **Q4H** | Human input requests | No | clear_mind |
1488
- | **Mental Clarity** | Context reset tools | N/A | N/A |
1489
- | **Reminders** | Persistent working memory | Yes | N/A |
1490
- | **Subdialog Registry** | Registered subdialog tracking | Yes | dead-entry prune on `declare_subdialog_dead` |
1480
+ | Mechanism | Purpose | Survives Clarity | Cleared By |
1481
+ | ----------------------- | ------------------------------------- | ---------------- | --------------------------------------------- |
1482
+ | **Dialog Relationship** | Tellasker/Side Dialog task delegation | N/A | N/A |
1483
+ | **Q4H** | Human input requests | No | clear_mind |
1484
+ | **Mental Clarity** | Context reset tools | N/A | N/A |
1485
+ | **Reminders** | Persistent working memory | Yes | N/A |
1486
+ | **SideDialog Registry** | Registered sideDialog tracking | Yes | dead-entry prune on `declare_sideDialog_dead` |
1491
1487
 
1492
1488
  ### Three Types of Teammate Tellasks
1493
1489
 
@@ -1499,12 +1495,12 @@ The Dominds dialog system provides a robust framework for hierarchical, human-in
1499
1495
 
1500
1496
  ### Class Responsibility
1501
1497
 
1502
- - **RootDialog**: Manages registry, can make all three teammate Tellask types
1503
- - **SubDialog**: Has supdialog reference, can make TYPE A and TYPE C directly; TYPE B routes through the root registry and updates caller context on each Tellask
1498
+ - **MainDialog**: Manages registry, can make all three teammate Tellask types
1499
+ - **SideDialog**: Has askerDialog reference, can make TYPE A and TYPE C directly; TYPE B routes through the main dialog registry and updates tellasker context on each Tellask
1504
1500
 
1505
1501
  ### Persistence Guarantees
1506
1502
 
1507
1503
  - **Q4H**: Persisted, cleared by clarity operations
1508
1504
  - **Reminders**: Persisted, survives clarity operations
1509
1505
  - **Registry**: Persisted, survives clarity operations, moves to done/ on completion
1510
- - **Subdialogs**: Registered subdialogs persist in registry; transient subdialogs are not registered
1506
+ - **SideDialogs**: Registered sideDialogs persist in registry; transient sideDialogs are not registered