@logixjs/core 0.0.1 → 0.0.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 (300) hide show
  1. package/LICENSE +201 -0
  2. package/dist/{Bound-BN1DQ_lM.d.ts → Bound-CEa1ihvH.d.ts} +2 -2
  3. package/dist/{Bound-BPIfH9SS.d.cts → Bound-CNLNkC7c.d.cts} +2 -2
  4. package/dist/Bound.cjs +620 -163
  5. package/dist/Bound.cjs.map +1 -1
  6. package/dist/Bound.d.cts +3 -3
  7. package/dist/Bound.d.ts +3 -3
  8. package/dist/Bound.js +14 -14
  9. package/dist/{Debug-Bq8Sqjcr.d.cts → Debug-BhMYr-1i.d.cts} +3 -3
  10. package/dist/{Debug-B5q5Bkzx.d.ts → Debug-ByM7m4Ft.d.ts} +3 -3
  11. package/dist/Debug.cjs +553 -32
  12. package/dist/Debug.cjs.map +1 -1
  13. package/dist/Debug.d.cts +10 -8
  14. package/dist/Debug.d.ts +10 -8
  15. package/dist/Debug.js +12 -10
  16. package/dist/EffectOp.cjs.map +1 -1
  17. package/dist/EffectOp.js +2 -3
  18. package/dist/EffectOp.js.map +1 -1
  19. package/dist/Env.cjs +664 -6
  20. package/dist/Env.cjs.map +1 -1
  21. package/dist/Env.js +5 -2
  22. package/dist/ExternalStore-BAz83PVq.d.cts +60 -0
  23. package/dist/ExternalStore-BYWPbYs8.d.ts +60 -0
  24. package/dist/ExternalStore.cjs +746 -0
  25. package/dist/ExternalStore.cjs.map +1 -0
  26. package/dist/ExternalStore.d.cts +4 -0
  27. package/dist/ExternalStore.d.ts +4 -0
  28. package/dist/ExternalStore.js +19 -0
  29. package/dist/ExternalStore.js.map +1 -0
  30. package/dist/{Flow-1fZT8MpX.d.cts → Flow-BlSoMmhV.d.cts} +2 -2
  31. package/dist/{Flow-BhpjE22E.d.ts → Flow-CQSGve5c.d.ts} +2 -2
  32. package/dist/Flow.cjs +2 -2
  33. package/dist/Flow.cjs.map +1 -1
  34. package/dist/Flow.d.cts +4 -4
  35. package/dist/Flow.d.ts +4 -4
  36. package/dist/Flow.js +7 -8
  37. package/dist/{Handle-D_cLW1Z3.d.ts → Handle-B7PSmsrY.d.ts} +1 -1
  38. package/dist/{Handle-D8D1zPb_.d.cts → Handle-ByovhL-c.d.cts} +1 -1
  39. package/dist/Handle.d.cts +3 -3
  40. package/dist/Handle.d.ts +3 -3
  41. package/dist/{Kernel-CnGE1Fyk.d.ts → Kernel-DGSpS4GM.d.ts} +2 -2
  42. package/dist/{Kernel-8kC-jOda.d.cts → Kernel-DZAk-Mrn.d.cts} +2 -2
  43. package/dist/Kernel.cjs +680 -22
  44. package/dist/Kernel.cjs.map +1 -1
  45. package/dist/Kernel.d.cts +10 -8
  46. package/dist/Kernel.d.ts +10 -8
  47. package/dist/Kernel.js +7 -4
  48. package/dist/{Link-Db7975nU.d.ts → Link-Cm4eR9n0.d.ts} +10 -3
  49. package/dist/{Link-fX8x1eCK.d.cts → Link-DF8i8iWR.d.cts} +10 -3
  50. package/dist/Link.cjs +1128 -86
  51. package/dist/Link.cjs.map +1 -1
  52. package/dist/Link.d.cts +3 -3
  53. package/dist/Link.d.ts +3 -3
  54. package/dist/Link.js +30 -25
  55. package/dist/{Logic-DRh4sDZj.d.cts → Logic-BcQA0AvE.d.cts} +1 -1
  56. package/dist/{Logic-BRjEMr-W.d.ts → Logic-OotSE1xw.d.ts} +1 -1
  57. package/dist/Logic.d.cts +3 -3
  58. package/dist/Logic.d.ts +3 -3
  59. package/dist/{MatchBuilder-CJk5oCkR.d.cts → MatchBuilder-BNDJ8waF.d.ts} +1 -1
  60. package/dist/{MatchBuilder-0QOc-nlU.d.ts → MatchBuilder-CvZ5WY1B.d.cts} +1 -1
  61. package/dist/MatchBuilder.d.cts +4 -4
  62. package/dist/MatchBuilder.d.ts +4 -4
  63. package/dist/Middleware-D8tUDLv_.d.cts +100 -0
  64. package/dist/Middleware-DS7CbTTN.d.ts +100 -0
  65. package/dist/Middleware.cjs +461 -13
  66. package/dist/Middleware.cjs.map +1 -1
  67. package/dist/Middleware.d.cts +2 -86
  68. package/dist/Middleware.d.ts +2 -86
  69. package/dist/Middleware.js +13 -11
  70. package/dist/{Module-DnzluX2J.d.ts → Module-CFj0I2yE.d.ts} +45 -18
  71. package/dist/{Module-B_0xRDMR.d.cts → Module-DpXPW9EQ.d.cts} +45 -18
  72. package/dist/Module.cjs +8583 -5741
  73. package/dist/Module.cjs.map +1 -1
  74. package/dist/Module.d.cts +5 -4
  75. package/dist/Module.d.ts +5 -4
  76. package/dist/Module.js +32 -27
  77. package/dist/ModuleTag-BcVF6z7B.d.ts +113 -0
  78. package/dist/ModuleTag-DuZXo_NS.d.cts +113 -0
  79. package/dist/ModuleTag.cjs +2609 -1232
  80. package/dist/ModuleTag.cjs.map +1 -1
  81. package/dist/ModuleTag.d.cts +4 -4
  82. package/dist/ModuleTag.d.ts +4 -4
  83. package/dist/ModuleTag.js +28 -25
  84. package/dist/{Observability-cY4kLn0S.d.ts → Observability-D-ZWeEVb.d.ts} +22 -15
  85. package/dist/{Observability-COqEvp2C.d.cts → Observability-V7sRMYTh.d.cts} +22 -15
  86. package/dist/Observability.cjs +1938 -640
  87. package/dist/Observability.cjs.map +1 -1
  88. package/dist/Observability.d.cts +4 -4
  89. package/dist/Observability.d.ts +4 -4
  90. package/dist/Observability.js +21 -19
  91. package/dist/{Process-mL8fHDSB.d.cts → Process-B55aJMFk.d.cts} +29 -4
  92. package/dist/{Process-CM9xbMdP.d.ts → Process-DvhFEwUS.d.ts} +29 -4
  93. package/dist/Process.cjs +1122 -85
  94. package/dist/Process.cjs.map +1 -1
  95. package/dist/Process.d.cts +4 -3
  96. package/dist/Process.d.ts +4 -3
  97. package/dist/Process.js +27 -22
  98. package/dist/{ReadQuery-BlMwhe-F.d.ts → ReadQuery-C4vZ8Prc.d.ts} +2 -2
  99. package/dist/{ReadQuery-SinbStGF.d.ts → ReadQuery-CafjlJQo.d.cts} +1 -1
  100. package/dist/{ReadQuery-SinbStGF.d.cts → ReadQuery-CafjlJQo.d.ts} +1 -1
  101. package/dist/{ReadQuery-CL5XlXts.d.cts → ReadQuery-mc0NgrFV.d.cts} +2 -2
  102. package/dist/ReadQuery.cjs +3 -3
  103. package/dist/ReadQuery.cjs.map +1 -1
  104. package/dist/ReadQuery.d.cts +2 -2
  105. package/dist/ReadQuery.d.ts +2 -2
  106. package/dist/ReadQuery.js +3 -3
  107. package/dist/{Reflection-CQnKwPXj.d.ts → Reflection-C8xZ267q.d.ts} +88 -7
  108. package/dist/{Reflection-Kabo1mlU.d.cts → Reflection-DP7Vsv3f.d.cts} +88 -7
  109. package/dist/Reflection.cjs +2934 -1553
  110. package/dist/Reflection.cjs.map +1 -1
  111. package/dist/Reflection.d.cts +14 -11
  112. package/dist/Reflection.d.ts +14 -11
  113. package/dist/Reflection.js +26 -21
  114. package/dist/Resource.cjs +670 -12
  115. package/dist/Resource.cjs.map +1 -1
  116. package/dist/Resource.js +6 -3
  117. package/dist/Root.cjs +675 -17
  118. package/dist/Root.cjs.map +1 -1
  119. package/dist/Root.js +7 -3
  120. package/dist/{Runtime-CtyzZG4i.d.ts → Runtime-BWc9YfUB.d.ts} +37 -7
  121. package/dist/{Runtime-B-aL-f29.d.cts → Runtime-PShIC4DW.d.cts} +37 -7
  122. package/dist/Runtime.cjs +1899 -809
  123. package/dist/Runtime.cjs.map +1 -1
  124. package/dist/Runtime.d.cts +14 -11
  125. package/dist/Runtime.d.ts +14 -11
  126. package/dist/Runtime.js +33 -28
  127. package/dist/ScopeRegistry.cjs +668 -10
  128. package/dist/ScopeRegistry.cjs.map +1 -1
  129. package/dist/ScopeRegistry.js +6 -3
  130. package/dist/{StateTrait-OWhbj12c.d.cts → StateTrait-CQsDlXJm.d.cts} +23 -6
  131. package/dist/{StateTrait-BGsZghTz.d.ts → StateTrait-YvJzVDKl.d.ts} +23 -6
  132. package/dist/StateTrait.cjs +1475 -370
  133. package/dist/StateTrait.cjs.map +1 -1
  134. package/dist/StateTrait.d.cts +7 -5
  135. package/dist/StateTrait.d.ts +7 -5
  136. package/dist/StateTrait.js +17 -14
  137. package/dist/{TraitLifecycle-LdIWmKlg.d.ts → TraitLifecycle-CjIBICAA.d.ts} +2 -2
  138. package/dist/{TraitLifecycle-CwV5WPFX.d.cts → TraitLifecycle-NmqGiXPC.d.cts} +2 -2
  139. package/dist/TraitLifecycle.cjs +489 -32
  140. package/dist/TraitLifecycle.cjs.map +1 -1
  141. package/dist/TraitLifecycle.d.cts +4 -4
  142. package/dist/TraitLifecycle.d.ts +4 -4
  143. package/dist/TraitLifecycle.js +7 -7
  144. package/dist/Workflow-BlFG_20_.d.cts +414 -0
  145. package/dist/Workflow-CW9S_aAP.d.ts +414 -0
  146. package/dist/Workflow.cjs +2977 -0
  147. package/dist/Workflow.cjs.map +1 -0
  148. package/dist/Workflow.d.cts +7 -0
  149. package/dist/Workflow.d.ts +7 -0
  150. package/dist/Workflow.js +55 -0
  151. package/dist/Workflow.js.map +1 -0
  152. package/dist/{chunk-G5ZBFPNU.js → chunk-2A4UKO2D.js} +2 -2
  153. package/dist/chunk-2DE6D42I.js +248 -0
  154. package/dist/chunk-2DE6D42I.js.map +1 -0
  155. package/dist/{chunk-ANLBCBDC.js → chunk-2DVLMSOE.js} +6 -6
  156. package/dist/{chunk-BE3HW4FY.js → chunk-34CF6OGE.js} +14 -16
  157. package/dist/chunk-34CF6OGE.js.map +1 -0
  158. package/dist/{chunk-ZFY7U2FR.js → chunk-3LPIXG56.js} +43 -3
  159. package/dist/chunk-3LPIXG56.js.map +1 -0
  160. package/dist/chunk-3VZYDNXZ.js +10 -0
  161. package/dist/chunk-3VZYDNXZ.js.map +1 -0
  162. package/dist/{chunk-3TMODYZV.js → chunk-3XO4HR6V.js} +2 -2
  163. package/dist/chunk-46FGVWRF.js +817 -0
  164. package/dist/chunk-46FGVWRF.js.map +1 -0
  165. package/dist/chunk-4LODUXFI.js +288 -0
  166. package/dist/chunk-4LODUXFI.js.map +1 -0
  167. package/dist/{chunk-GMPEOUP2.js → chunk-4MZ7BT3R.js} +2 -2
  168. package/dist/chunk-4MZ7BT3R.js.map +1 -0
  169. package/dist/{chunk-TKZ7MEIA.js → chunk-53GVPGSM.js} +2 -2
  170. package/dist/{chunk-KP7MUZNX.js → chunk-5W2V2NVJ.js} +2 -2
  171. package/dist/chunk-5W2V2NVJ.js.map +1 -0
  172. package/dist/chunk-6DACKW3D.js +613 -0
  173. package/dist/chunk-6DACKW3D.js.map +1 -0
  174. package/dist/chunk-AQ7L2QZ5.js +1395 -0
  175. package/dist/chunk-AQ7L2QZ5.js.map +1 -0
  176. package/dist/{chunk-NZJKFF45.js → chunk-C2UZZQ76.js} +2 -2
  177. package/dist/chunk-CCKP5Z6F.js +701 -0
  178. package/dist/chunk-CCKP5Z6F.js.map +1 -0
  179. package/dist/chunk-CUKM2XUW.js +27 -0
  180. package/dist/{chunk-QCHIQWAJ.js.map → chunk-CUKM2XUW.js.map} +1 -1
  181. package/dist/{chunk-M2RGJPXX.js → chunk-DBD6Q6JH.js} +3 -3
  182. package/dist/{chunk-ZGDVUPTM.js → chunk-EB4RGQO3.js} +2 -2
  183. package/dist/{chunk-PAYXCY6A.js → chunk-G7ESIQTI.js} +12 -14
  184. package/dist/chunk-G7ESIQTI.js.map +1 -0
  185. package/dist/chunk-GPBAZQ23.js +348 -0
  186. package/dist/chunk-GPBAZQ23.js.map +1 -0
  187. package/dist/{chunk-OFADUJWJ.js → chunk-I4LCE5OY.js} +3 -5
  188. package/dist/{chunk-OFADUJWJ.js.map → chunk-I4LCE5OY.js.map} +1 -1
  189. package/dist/{chunk-DFNM3WX2.js → chunk-IMCC6TBN.js} +158 -39
  190. package/dist/chunk-IMCC6TBN.js.map +1 -0
  191. package/dist/{chunk-76WT3HOR.js → chunk-IROZNQAF.js} +22 -21
  192. package/dist/chunk-IROZNQAF.js.map +1 -0
  193. package/dist/{chunk-TAAPQVZN.js → chunk-ISKNULNH.js} +2 -2
  194. package/dist/chunk-J3CWXIPV.js +242 -0
  195. package/dist/chunk-J3CWXIPV.js.map +1 -0
  196. package/dist/{chunk-PYOE4VSI.js → chunk-JBKYRTCS.js} +224 -161
  197. package/dist/chunk-JBKYRTCS.js.map +1 -0
  198. package/dist/{chunk-66ALHVEX.js → chunk-KKIAYH4X.js} +3 -3
  199. package/dist/{chunk-3RMKLXHX.js → chunk-KLDVG3SY.js} +2 -2
  200. package/dist/{chunk-BABLDP24.js → chunk-KSZQYSEH.js} +3 -3
  201. package/dist/chunk-KSZQYSEH.js.map +1 -0
  202. package/dist/{chunk-CW6T36TN.js → chunk-M3M7JFAH.js} +4 -4
  203. package/dist/chunk-M3M7JFAH.js.map +1 -0
  204. package/dist/{chunk-THATMZXD.js → chunk-MLB253V2.js} +2 -2
  205. package/dist/{chunk-THATMZXD.js.map → chunk-MLB253V2.js.map} +1 -1
  206. package/dist/{chunk-JGIWG6SR.js → chunk-MS77U77X.js} +664 -550
  207. package/dist/chunk-MS77U77X.js.map +1 -0
  208. package/dist/chunk-MW4FA3MW.js +23 -0
  209. package/dist/chunk-MW4FA3MW.js.map +1 -0
  210. package/dist/chunk-MYKNINNN.js +228 -0
  211. package/dist/chunk-MYKNINNN.js.map +1 -0
  212. package/dist/{chunk-4CQAV7YB.js → chunk-O6TTQXTY.js} +2 -2
  213. package/dist/{chunk-NBD3KUOZ.js → chunk-OJDJ4VDQ.js} +35 -24
  214. package/dist/chunk-OJDJ4VDQ.js.map +1 -0
  215. package/dist/{chunk-NQZ2OSGR.js → chunk-PVZEMNJY.js} +9 -9
  216. package/dist/chunk-PVZEMNJY.js.map +1 -0
  217. package/dist/chunk-RN26DV2M.js +271 -0
  218. package/dist/chunk-RN26DV2M.js.map +1 -0
  219. package/dist/{chunk-JCXGZRMU.js → chunk-RQQW3IQC.js} +3 -3
  220. package/dist/chunk-RQQW3IQC.js.map +1 -0
  221. package/dist/{chunk-24VULZ7A.js → chunk-TKOGZDD6.js} +3 -3
  222. package/dist/{chunk-EGK3KN7B.js → chunk-TQYLVXGY.js} +70 -39
  223. package/dist/chunk-TQYLVXGY.js.map +1 -0
  224. package/dist/{chunk-QMM6O4CD.js → chunk-UACD2CL2.js} +15 -3
  225. package/dist/{chunk-QMM6O4CD.js.map → chunk-UACD2CL2.js.map} +1 -1
  226. package/dist/{chunk-M3WTHJHJ.js → chunk-VH575UTV.js} +30 -34
  227. package/dist/chunk-VH575UTV.js.map +1 -0
  228. package/dist/{chunk-AUIR5O6W.js → chunk-WWBMC24F.js} +9 -15
  229. package/dist/chunk-WWBMC24F.js.map +1 -0
  230. package/dist/{chunk-JWOYLO27.js → chunk-WYJUJV4L.js} +80 -7
  231. package/dist/chunk-WYJUJV4L.js.map +1 -0
  232. package/dist/{chunk-EY4NZKDR.js → chunk-XFMMPYNU.js} +2 -2
  233. package/dist/chunk-Y4VRBIS6.js +35 -0
  234. package/dist/chunk-Y4VRBIS6.js.map +1 -0
  235. package/dist/{chunk-DMBALCE2.js → chunk-ZC7MSQ5U.js} +77 -4
  236. package/dist/chunk-ZC7MSQ5U.js.map +1 -0
  237. package/dist/{chunk-OGWBVHB3.js → chunk-ZCK6SCOE.js} +67 -8
  238. package/dist/chunk-ZCK6SCOE.js.map +1 -0
  239. package/dist/{chunk-IHVBV5C2.js → chunk-ZTFTABXV.js} +2 -1
  240. package/dist/chunk-ZTFTABXV.js.map +1 -0
  241. package/dist/index.cjs +9532 -5017
  242. package/dist/index.cjs.map +1 -1
  243. package/dist/index.d.cts +163 -27
  244. package/dist/index.d.ts +163 -27
  245. package/dist/index.js +119 -56
  246. package/dist/index.js.map +1 -1
  247. package/dist/{ir-BMP7yxJJ.d.cts → ir-C-Zm_GlZ.d.cts} +1 -1
  248. package/dist/{ir-DUOz6H-5.d.ts → ir-DGyGiwVe.d.ts} +1 -1
  249. package/dist/{module-k7m3txak.d.ts → module-DqQ1U-Me.d.ts} +129 -100
  250. package/dist/{module-B8CBqIZ_.d.cts → module-doenaCsZ.d.cts} +129 -100
  251. package/package.json +12 -1
  252. package/dist/ModuleTag-C8FHY_sY.d.ts +0 -93
  253. package/dist/ModuleTag-EGbgBMpZ.d.cts +0 -93
  254. package/dist/chunk-3QMIVH35.js +0 -43
  255. package/dist/chunk-3QMIVH35.js.map +0 -1
  256. package/dist/chunk-76WT3HOR.js.map +0 -1
  257. package/dist/chunk-AUIR5O6W.js.map +0 -1
  258. package/dist/chunk-BABLDP24.js.map +0 -1
  259. package/dist/chunk-BE3HW4FY.js.map +0 -1
  260. package/dist/chunk-CW6T36TN.js.map +0 -1
  261. package/dist/chunk-DFNM3WX2.js.map +0 -1
  262. package/dist/chunk-DMBALCE2.js.map +0 -1
  263. package/dist/chunk-EGK3KN7B.js.map +0 -1
  264. package/dist/chunk-GMPEOUP2.js.map +0 -1
  265. package/dist/chunk-IHVBV5C2.js.map +0 -1
  266. package/dist/chunk-JCXGZRMU.js.map +0 -1
  267. package/dist/chunk-JGIWG6SR.js.map +0 -1
  268. package/dist/chunk-JWOYLO27.js.map +0 -1
  269. package/dist/chunk-KIXAU3GM.js +0 -137
  270. package/dist/chunk-KIXAU3GM.js.map +0 -1
  271. package/dist/chunk-KP7MUZNX.js.map +0 -1
  272. package/dist/chunk-M3WTHJHJ.js.map +0 -1
  273. package/dist/chunk-M7IYCTJV.js +0 -79
  274. package/dist/chunk-M7IYCTJV.js.map +0 -1
  275. package/dist/chunk-NBD3KUOZ.js.map +0 -1
  276. package/dist/chunk-NQZ2OSGR.js.map +0 -1
  277. package/dist/chunk-OGWBVHB3.js.map +0 -1
  278. package/dist/chunk-PAYXCY6A.js.map +0 -1
  279. package/dist/chunk-PYOE4VSI.js.map +0 -1
  280. package/dist/chunk-QCHIQWAJ.js +0 -21
  281. package/dist/chunk-VZB726PE.js +0 -93
  282. package/dist/chunk-VZB726PE.js.map +0 -1
  283. package/dist/chunk-W3TEWHLO.js +0 -568
  284. package/dist/chunk-W3TEWHLO.js.map +0 -1
  285. package/dist/chunk-ZFLHVFUC.js +0 -192
  286. package/dist/chunk-ZFLHVFUC.js.map +0 -1
  287. package/dist/chunk-ZFY7U2FR.js.map +0 -1
  288. /package/dist/{chunk-G5ZBFPNU.js.map → chunk-2A4UKO2D.js.map} +0 -0
  289. /package/dist/{chunk-ANLBCBDC.js.map → chunk-2DVLMSOE.js.map} +0 -0
  290. /package/dist/{chunk-3TMODYZV.js.map → chunk-3XO4HR6V.js.map} +0 -0
  291. /package/dist/{chunk-TKZ7MEIA.js.map → chunk-53GVPGSM.js.map} +0 -0
  292. /package/dist/{chunk-NZJKFF45.js.map → chunk-C2UZZQ76.js.map} +0 -0
  293. /package/dist/{chunk-M2RGJPXX.js.map → chunk-DBD6Q6JH.js.map} +0 -0
  294. /package/dist/{chunk-ZGDVUPTM.js.map → chunk-EB4RGQO3.js.map} +0 -0
  295. /package/dist/{chunk-TAAPQVZN.js.map → chunk-ISKNULNH.js.map} +0 -0
  296. /package/dist/{chunk-66ALHVEX.js.map → chunk-KKIAYH4X.js.map} +0 -0
  297. /package/dist/{chunk-3RMKLXHX.js.map → chunk-KLDVG3SY.js.map} +0 -0
  298. /package/dist/{chunk-4CQAV7YB.js.map → chunk-O6TTQXTY.js.map} +0 -0
  299. /package/dist/{chunk-24VULZ7A.js.map → chunk-TKOGZDD6.js.map} +0 -0
  300. /package/dist/{chunk-EY4NZKDR.js.map → chunk-XFMMPYNU.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/internal/runtime/core/ModuleRuntime.registry.ts","../src/internal/runtime/core/LogicUnitMeta.ts","../src/internal/runtime/core/ModuleRuntime.ts","../src/internal/runtime/core/StateTransaction.ts","../src/internal/runtime/core/normalize.ts","../src/internal/runtime/core/ModuleRuntime.operation.ts","../src/internal/runtime/core/ModuleRuntime.dispatch.ts","../src/internal/runtime/core/ReducerDiagnostics.ts","../src/internal/runtime/core/ModuleRuntime.effects.ts","../src/internal/runtime/core/ModuleRuntime.transaction.ts","../src/internal/state-trait/plan-cache.ts","../src/internal/state-trait/converge.types.ts","../src/internal/state-trait/converge-in-transaction.ts","../src/internal/state-trait/converge-ir.ts","../src/internal/state-trait/converge-draft.ts","../src/internal/state-trait/converge-diagnostics.ts","../src/internal/state-trait/exec-vm-mode.ts","../src/internal/state-trait/bitset.ts","../src/internal/state-trait/converge-exec-ir.ts","../src/internal/state-trait/converge-step.ts","../src/internal/state-trait/validate.ts","../src/internal/state-trait/graph.ts","../src/internal/state-trait/reverse-closure.ts","../src/internal/runtime/core/ModuleRuntime.concurrencyPolicy.ts","../src/internal/runtime/core/ModuleRuntime.txnLanePolicy.ts","../src/internal/runtime/core/ModuleRuntime.traitConvergeConfig.ts","../src/internal/runtime/core/ModuleRuntime.internalHooks.ts","../src/internal/runtime/core/SelectorGraph.ts","../src/internal/runtime/core/ModuleRuntime.txnQueue.ts","../src/internal/runtime/core/ModuleRuntime.logics.ts","../src/internal/runtime/core/LifecycleDiagnostics.ts","../src/internal/runtime/core/LogicPlanMarker.ts","../src/internal/runtime/core/ConcurrencyDiagnostics.ts"],"sourcesContent":["import { Context } from 'effect'\nimport type { ModuleRuntime as PublicModuleRuntime } from './module.js'\n\n/**\n * Process-level runtime registry (debug-only / non-authoritative):\n * - key: Module Tag (the ModuleTag itself).\n * - value: the corresponding ModuleRuntime instance.\n *\n * Constraints:\n * - This is a \"single-slot table\": one Tag can only map to one runtime; it cannot represent correct multi-instance/multi-root semantics.\n * - Must not be used as a resolution fallback (in strict mode, missing providers must fail).\n * - Devtools/internal debugging only; migrate to explicit handles/Link when feasible.\n */\nconst runtimeRegistry = new WeakMap<Context.Tag<any, PublicModuleRuntime<any, any>>, PublicModuleRuntime<any, any>>()\n\n/**\n * Runtime registry indexed by moduleId + instanceId:\n * - Primarily used by Devtools / internal debugging to locate ModuleRuntime by instance.\n * - key format: `${moduleId}::${instanceId}`.\n * - The primary anchor is instanceId (do not use dual anchors).\n */\nconst runtimeByInstanceKey = new Map<string, PublicModuleRuntime<any, any>>()\n\nexport const registerRuntime = <S, A>(\n tag: Context.Tag<any, PublicModuleRuntime<S, A>>,\n runtime: PublicModuleRuntime<S, A>,\n): void => {\n runtimeRegistry.set(tag as Context.Tag<any, PublicModuleRuntime<any, any>>, runtime as PublicModuleRuntime<any, any>)\n}\n\nexport const unregisterRuntime = (tag: Context.Tag<any, PublicModuleRuntime<any, any>>): void => {\n runtimeRegistry.delete(tag)\n}\n\nexport const getRegisteredRuntime = <S, A>(\n tag: Context.Tag<any, PublicModuleRuntime<S, A>>,\n): PublicModuleRuntime<S, A> | undefined =>\n runtimeRegistry.get(tag as Context.Tag<any, PublicModuleRuntime<any, any>>) as PublicModuleRuntime<S, A> | undefined\n\nexport const getRuntimeByModuleAndInstance = <S, A>(\n moduleId: string,\n instanceId: string,\n): PublicModuleRuntime<S, A> | undefined =>\n runtimeByInstanceKey.get(`${moduleId}::${instanceId}`) as PublicModuleRuntime<S, A> | undefined\n\nexport const registerRuntimeByInstanceKey = (instanceKey: string, runtime: PublicModuleRuntime<any, any>): void => {\n runtimeByInstanceKey.set(instanceKey, runtime)\n}\n\nexport const unregisterRuntimeByInstanceKey = (instanceKey: string): void => {\n runtimeByInstanceKey.delete(instanceKey)\n}\n","export type LogicUnitIdKind = 'explicit' | 'derived'\n\nexport type LogicUnitSource = {\n readonly file: string\n readonly line: number\n readonly column: number\n}\n\nexport type LogicUnitMeta = {\n /**\n * Default id (from module.logic(build, { id })):\n * - Used for id resolution during the mount phase (priority: mount explicit > default id > derived id).\n */\n readonly id?: string\n readonly kind?: string\n readonly name?: string\n readonly source?: LogicUnitSource\n readonly moduleId?: string\n\n /**\n * Resolved id (the final logicUnitId after mounting):\n * - Computed during the mount phase by Module.withLogic/withLogics.\n * - Serves as a stable provenance anchor (aligned with specs/022-module).\n */\n readonly resolvedId?: string\n readonly resolvedIdKind?: LogicUnitIdKind\n readonly resolvedKind?: string\n readonly resolvedName?: string\n readonly resolvedSource?: LogicUnitSource\n}\n\nexport const LOGIC_UNIT_META = Symbol.for('logix.module.logic.meta')\n\nexport const getLogicUnitMeta = (logic: unknown): LogicUnitMeta | undefined => {\n if (!logic || (typeof logic !== 'object' && typeof logic !== 'function')) {\n return undefined\n }\n return (logic as any)[LOGIC_UNIT_META] as LogicUnitMeta | undefined\n}\n\nexport const attachLogicUnitMeta = <L extends object>(logic: L, meta: LogicUnitMeta): L => {\n try {\n Object.defineProperty(logic, LOGIC_UNIT_META, {\n value: meta,\n enumerable: false,\n configurable: true,\n })\n } catch {\n // best-effort: if the underlying object is non-extensible, we still return it.\n }\n return logic\n}\n\nexport const updateLogicUnitMeta = <L extends object>(logic: L, patch: Partial<LogicUnitMeta>): L => {\n const prev = getLogicUnitMeta(logic)\n return attachLogicUnitMeta(logic, { ...(prev ?? {}), ...patch })\n}\n","import {\n Effect,\n Stream,\n SubscriptionRef,\n PubSub,\n Scope,\n Context,\n Ref,\n FiberRef,\n Option,\n Queue,\n Duration,\n Chunk,\n} from 'effect'\nimport type { LogicPlan, ModuleRuntime as PublicModuleRuntime, StateChangeWithMeta } from './module.js'\nimport * as Lifecycle from './Lifecycle.js'\nimport * as Debug from './DebugSink.js'\nimport { currentConvergeStaticIrCollectors } from './ConvergeStaticIrCollector.js'\nimport type { RuntimeInternals } from './RuntimeInternals.js'\nimport type * as ModuleTraits from './ModuleTraits.js'\nimport * as StateTransaction from './StateTransaction.js'\nimport * as RuntimeKernel from './RuntimeKernel.js'\nimport * as FullCutoverGate from './FullCutoverGate.js'\nimport * as KernelRef from './KernelRef.js'\nimport * as RuntimeServiceBuiltins from './RuntimeServiceBuiltins.js'\nimport {\n getDefaultStateTxnInstrumentation,\n isDevEnv,\n ReadQueryStrictGateConfigTag,\n StateTransactionConfigTag,\n StateTransactionOverridesTag,\n} from './env.js'\nimport type {\n StateTransactionInstrumentation,\n StateTransactionOverrides,\n TraitConvergeTimeSlicingPatch,\n TxnLanesPatch,\n} from './env.js'\nimport { normalizeNonEmptyString } from './normalize.js'\nimport { EvidenceCollectorTag } from '../../observability/evidenceCollector.js'\nimport * as EffectOp from '../../effect-op.js'\nimport { makeRunOperation } from './ModuleRuntime.operation.js'\nimport { makeDispatchOps } from './ModuleRuntime.dispatch.js'\nimport { makeEffectsRegistry } from './ModuleRuntime.effects.js'\nimport { makeTransactionOps } from './ModuleRuntime.transaction.js'\nimport { makeResolveConcurrencyPolicy } from './ModuleRuntime.concurrencyPolicy.js'\nimport { makeResolveTxnLanePolicy } from './ModuleRuntime.txnLanePolicy.js'\nimport {\n makeResolveTraitConvergeConfig,\n type ResolvedTraitConvergeConfig,\n} from './ModuleRuntime.traitConvergeConfig.js'\nimport type { DirtyAllReason } from '../../field-path.js'\nimport * as RowId from '../../state-trait/rowid.js'\nimport * as StateTraitBuild from '../../state-trait/build.js'\nimport { exportConvergeStaticIr } from '../../state-trait/converge-ir.js'\nimport { makeConvergeExecIr } from '../../state-trait/converge-exec-ir.js'\nimport * as StateTraitConverge from '../../state-trait/converge.js'\nimport * as StateTraitValidate from '../../state-trait/validate.js'\nimport { installInternalHooks, type TraitState } from './ModuleRuntime.internalHooks.js'\nimport { RootContextTag, type RootContext } from './RootContext.js'\nimport * as ProcessRuntime from './process/ProcessRuntime.js'\nimport * as ReadQuery from './ReadQuery.js'\nimport * as SelectorGraph from './SelectorGraph.js'\nimport {\n getRegisteredRuntime,\n getRuntimeByModuleAndInstance,\n registerRuntime,\n registerRuntimeByInstanceKey,\n unregisterRuntime,\n unregisterRuntimeByInstanceKey,\n} from './ModuleRuntime.registry.js'\nimport { makeEnqueueTransaction } from './ModuleRuntime.txnQueue.js'\nimport { runModuleLogics } from './ModuleRuntime.logics.js'\nimport * as ConcurrencyDiagnostics from './ConcurrencyDiagnostics.js'\n\nexport { registerRuntime, unregisterRuntime, getRegisteredRuntime, getRuntimeByModuleAndInstance }\n\nexport interface ModuleRuntimeOptions<S, A, R = never> {\n readonly tag?: Context.Tag<any, PublicModuleRuntime<S, A>>\n /**\n * List of \"child modules\" resolvable within the current instance scope (imports-scope):\n * - Used only to build a minimal imports injector (ModuleToken -> ModuleRuntime).\n * - Do not capture the whole Context into ModuleRuntime (avoid accidentally retaining root/base services).\n */\n readonly imports?: ReadonlyArray<Context.Tag<any, PublicModuleRuntime<any, any>>>\n readonly logics?: ReadonlyArray<Effect.Effect<any, any, R> | LogicPlan<any, R, any>>\n readonly processes?: ReadonlyArray<Effect.Effect<void, any, any>>\n readonly moduleId?: string\n /** Stable instance anchor (single source of truth); defaults to a monotonic sequence. Never default to randomness/time. */\n readonly instanceId?: string\n readonly createState?: Effect.Effect<SubscriptionRef.SubscriptionRef<S>, never, Scope.Scope>\n readonly createActionHub?: Effect.Effect<PubSub.PubSub<A>, never, Scope.Scope>\n /**\n * Primary reducer map: `_tag -> (state, action) => nextState`.\n *\n * - If provided, dispatch will synchronously apply the reducer before publishing the Action.\n * - If a `_tag` has no reducer, behavior matches the current watcher-only mode.\n */\n readonly reducers?: Readonly<\n Record<string, (state: S, action: A, sink?: (path: StateTransaction.StatePatchPath) => void) => S>\n >\n /**\n * Module-level StateTransaction config:\n * - If instrumentation is provided, it takes precedence over the Runtime-level config and NODE_ENV defaults.\n * - Otherwise, fall back to the Runtime-level config (if any) or getDefaultStateTxnInstrumentation().\n */\n readonly stateTransaction?: {\n readonly instrumentation?: StateTransactionInstrumentation\n readonly traitConvergeBudgetMs?: number\n readonly traitConvergeDecisionBudgetMs?: number\n readonly traitConvergeMode?: 'auto' | 'full' | 'dirty'\n readonly traitConvergeTimeSlicing?: TraitConvergeTimeSlicingPatch\n readonly txnLanes?: TxnLanesPatch\n }\n}\n\nlet nextInstanceSeq = 0\n\nconst makeDefaultInstanceId = (): string => {\n nextInstanceSeq += 1\n return `i${nextInstanceSeq}`\n}\n\nexport const make = <S, A, R = never>(\n initialState: S,\n options: ModuleRuntimeOptions<S, A, R> = {},\n): Effect.Effect<PublicModuleRuntime<S, A>, never, Scope.Scope | R> => {\n const program = Effect.gen(function* () {\n const stateRef = options.createState ? yield* options.createState : yield* SubscriptionRef.make(initialState)\n\n const commitHub = yield* PubSub.unbounded<StateChangeWithMeta<S>>()\n const actionCommitHub = yield* PubSub.unbounded<StateChangeWithMeta<A>>()\n let commitHubSubscriberCount = 0\n\n const fromCommitHub = Stream.unwrapScoped(\n Effect.gen(function* () {\n commitHubSubscriberCount += 1\n yield* Effect.addFinalizer(() =>\n Effect.sync(() => {\n commitHubSubscriberCount = Math.max(0, commitHubSubscriberCount - 1)\n }),\n )\n return Stream.fromPubSub(commitHub)\n }),\n )\n\n const moduleId = options.moduleId ?? 'unknown'\n const instanceId = normalizeNonEmptyString(options.instanceId) ?? makeDefaultInstanceId()\n const runtimeLabel = yield* FiberRef.get(Debug.currentRuntimeLabel)\n const lifecycle = yield* Lifecycle.makeLifecycleManager({\n moduleId,\n instanceId,\n runtimeLabel,\n })\n const concurrencyDiagnostics = yield* ConcurrencyDiagnostics.make({\n moduleId: options.moduleId,\n instanceId,\n })\n\n // Resolve StateTransaction instrumentation:\n // - Prefer ModuleRuntimeOptions.stateTransaction.instrumentation.\n // - Otherwise read the default from the Runtime-level StateTransactionConfig service.\n // - Finally fall back to NODE_ENV-based defaults.\n const runtimeConfigOpt = yield* Effect.serviceOption(StateTransactionConfigTag)\n const runtimeInstrumentation: StateTransactionInstrumentation | undefined = Option.isSome(runtimeConfigOpt)\n ? runtimeConfigOpt.value.instrumentation\n : undefined\n\n const instrumentation: StateTransactionInstrumentation =\n options.stateTransaction?.instrumentation ?? runtimeInstrumentation ?? getDefaultStateTxnInstrumentation()\n\n const resolveTraitConvergeConfig = makeResolveTraitConvergeConfig({\n moduleId: options.moduleId,\n stateTransaction: options.stateTransaction,\n })\n\n const resolveConcurrencyPolicy = makeResolveConcurrencyPolicy({\n moduleId: options.moduleId,\n diagnostics: concurrencyDiagnostics,\n })\n\n const resolveTxnLanePolicy = makeResolveTxnLanePolicy({\n moduleId: options.moduleId,\n stateTransaction: options.stateTransaction,\n })\n\n const actionHub = options.createActionHub\n ? yield* options.createActionHub\n : yield* Effect.gen(function* () {\n const policy = yield* resolveConcurrencyPolicy()\n return yield* PubSub.bounded<A>(policy.losslessBackpressureCapacity)\n })\n\n const convergePlanCacheCapacity = 128\n const traitState: TraitState = {\n program: undefined,\n convergePlanCache: undefined,\n convergeGeneration: {\n generation: 0,\n generationBumpCount: 0,\n },\n pendingCacheMissReason: undefined,\n lastConvergeIrKeys: undefined,\n listConfigs: [],\n }\n const rowIdStore = new RowId.RowIdStore(instanceId)\n const selectorGraph = SelectorGraph.make<S>({\n moduleId,\n instanceId,\n getFieldPathIdRegistry: () => {\n const convergeIr: any = (traitState.program as any)?.convergeIr\n if (!convergeIr || convergeIr.configError) return undefined\n return convergeIr.fieldPathIdRegistry\n },\n })\n\n // StateTransaction context:\n // - Maintain a single active transaction per ModuleRuntime;\n // - Aggregate state writes from all entrypoints on this instance (dispatch / Traits / source-refresh, etc.);\n // - New entrypoints (e.g. service writebacks / devtools operations) must also go through the same context + queue.\n const txnContext = StateTransaction.makeContext<S>({\n moduleId,\n instanceId,\n instrumentation,\n getFieldPathIdRegistry: () => {\n const convergeIr: any = (traitState.program as any)?.convergeIr\n if (!convergeIr || convergeIr.configError) return undefined\n return convergeIr.fieldPathIdRegistry\n },\n })\n\n const recordStatePatch: RuntimeInternals['txn']['recordStatePatch'] = (\n path,\n reason,\n from,\n to,\n traitNodeId,\n stepId,\n ): void => {\n StateTransaction.recordPatch(txnContext, path, reason, from, to, traitNodeId, stepId)\n }\n\n const updateDraft: RuntimeInternals['txn']['updateDraft'] = (nextState): void => {\n if (!txnContext.current) return\n StateTransaction.updateDraft(txnContext, nextState as S)\n }\n\n const traitConvergeTimeSlicingSignal = yield* Queue.unbounded<void>()\n const traitConvergeTimeSlicingState: {\n readonly signal: Queue.Queue<void>\n readonly backlogDirtyPaths: Set<StateTransaction.StatePatchPath>\n backlogDirtyAllReason?: DirtyAllReason\n firstPendingAtMs: number | undefined\n lastTouchedAtMs: number | undefined\n latestConvergeConfig: ResolvedTraitConvergeConfig | undefined\n capturedContext:\n | {\n readonly runtimeLabel: string | undefined\n readonly diagnosticsLevel: Debug.DiagnosticsLevel\n readonly debugSinks: ReadonlyArray<Debug.Sink>\n readonly overrides: StateTransactionOverrides | undefined\n }\n | undefined\n } = {\n signal: traitConvergeTimeSlicingSignal,\n backlogDirtyPaths: new Set(),\n backlogDirtyAllReason: undefined,\n firstPendingAtMs: undefined,\n lastTouchedAtMs: undefined,\n latestConvergeConfig: undefined,\n capturedContext: undefined,\n }\n\n const moduleTraitsState: {\n frozen: boolean\n contributions: Array<ModuleTraits.TraitContribution>\n snapshot: ModuleTraits.ModuleTraitsSnapshot | undefined\n } = {\n frozen: false,\n contributions: [],\n snapshot: undefined,\n }\n\n /**\n * Transaction history:\n * - Keeps the latest N StateTransaction records per ModuleRuntime.\n * - Used only for dev/test devtools features (e.g. time-travel, txn summary views).\n * - Capacity is bounded to avoid unbounded memory growth in long-running apps.\n */\n const maxTxnHistory = 500\n const txnHistory: Array<StateTransaction.StateTransaction<S>> = []\n const txnById = new Map<string, StateTransaction.StateTransaction<S>>()\n\n /**\n * Transaction queue:\n * - Executes each logic entrypoint (dispatch / source-refresh / future extensions) serially in FIFO order.\n * - Guarantees at most one transaction at a time per instance; different instances can still run in parallel.\n */\n const kernelImplementationRef = yield* KernelRef.resolveKernelImplementationRef()\n const runtimeServicesOverrides = yield* RuntimeKernel.resolveRuntimeServicesOverrides({\n moduleId: options.moduleId,\n })\n\n const runtimeServicesRegistryOpt = yield* Effect.serviceOption(RuntimeKernel.RuntimeServicesRegistryTag)\n const runtimeServicesRegistry = Option.isSome(runtimeServicesRegistryOpt)\n ? runtimeServicesRegistryOpt.value\n : undefined\n\n const resolveRuntimeServiceImpls = <Service>(\n serviceId: string,\n builtin: ReadonlyArray<RuntimeKernel.RuntimeServiceImpl<Service>>,\n ): ReadonlyArray<RuntimeKernel.RuntimeServiceImpl<Service>> => {\n const extraRaw = runtimeServicesRegistry?.implsByServiceId[serviceId]\n if (!extraRaw || extraRaw.length === 0) return builtin\n\n const extra = extraRaw as ReadonlyArray<RuntimeKernel.RuntimeServiceImpl<Service>>\n const seen = new Set<string>()\n const out: Array<RuntimeKernel.RuntimeServiceImpl<Service>> = []\n\n for (const impl of builtin) {\n seen.add(impl.implId)\n out.push(impl)\n }\n\n for (const impl of extra) {\n if (!impl || typeof impl.implId !== 'string' || impl.implId.length === 0) continue\n if (seen.has(impl.implId)) continue\n seen.add(impl.implId)\n out.push(impl)\n }\n\n return out\n }\n\n const makeTxnQueueBuiltin = makeEnqueueTransaction({\n moduleId: options.moduleId,\n instanceId,\n resolveConcurrencyPolicy,\n diagnostics: concurrencyDiagnostics,\n })\n\n const enqueueTxnSel = RuntimeKernel.selectRuntimeService(\n 'txnQueue',\n resolveRuntimeServiceImpls('txnQueue', [\n {\n implId: 'builtin',\n implVersion: 'v1',\n make: makeTxnQueueBuiltin,\n },\n {\n implId: 'trace',\n implVersion: 'v1',\n make: makeTxnQueueBuiltin,\n notes: 'no-op wrapper (used for override isolation tests)',\n },\n ]),\n runtimeServicesOverrides,\n )\n\n const enqueueTransaction = yield* enqueueTxnSel.impl.make.pipe(\n Effect.provideService(RuntimeServiceBuiltins.RuntimeServiceBuiltinsTag, {\n getBuiltinMake: (serviceId) =>\n serviceId === 'txnQueue'\n ? (makeTxnQueueBuiltin as Effect.Effect<unknown, never, any>)\n : Effect.dieMessage(`[Logix] builtin make not available: ${serviceId}`),\n } satisfies RuntimeServiceBuiltins.RuntimeServiceBuiltins),\n )\n\n const makeOperationRunnerBuiltin = Effect.succeed(\n makeRunOperation({\n optionsModuleId: options.moduleId,\n instanceId,\n txnContext,\n }),\n )\n\n const runOperationSel = RuntimeKernel.selectRuntimeService(\n 'operationRunner',\n resolveRuntimeServiceImpls('operationRunner', [\n {\n implId: 'builtin',\n implVersion: 'v1',\n make: makeOperationRunnerBuiltin,\n },\n ]),\n runtimeServicesOverrides,\n )\n\n const runOperation = yield* runOperationSel.impl.make.pipe(\n Effect.provideService(RuntimeServiceBuiltins.RuntimeServiceBuiltinsTag, {\n getBuiltinMake: (serviceId) =>\n serviceId === 'operationRunner'\n ? (makeOperationRunnerBuiltin as Effect.Effect<unknown, never, any>)\n : Effect.dieMessage(`[Logix] builtin make not available: ${serviceId}`),\n } satisfies RuntimeServiceBuiltins.RuntimeServiceBuiltins),\n )\n\n yield* runOperation(\n 'lifecycle',\n 'module:init',\n { meta: { moduleId, instanceId } },\n Debug.record({\n type: 'module:init',\n moduleId,\n instanceId,\n }),\n )\n\n // Initial state snapshot:\n // - Emit a state:update event to write the initial state into the Debug stream.\n // - Helps Devtools show \"Current State\" even before any business interaction.\n // - Provides frame 0 for the timeline so later events can build time-travel views on top of it.\n const initialSnapshot = yield* SubscriptionRef.get(stateRef)\n yield* runOperation(\n 'state',\n 'state:init',\n { meta: { moduleId, instanceId } },\n Debug.record({\n type: 'state:update',\n moduleId,\n state: initialSnapshot,\n instanceId,\n txnSeq: 0,\n }),\n )\n\n const makeTransactionBuiltin = Effect.sync(() =>\n makeTransactionOps<S>({\n moduleId,\n optionsModuleId: options.moduleId,\n instanceId,\n stateRef,\n commitHub,\n shouldPublishCommitHub: () => commitHubSubscriberCount > 0,\n recordStatePatch,\n onCommit: ({ state, meta, dirtySet, diagnosticsLevel }) =>\n selectorGraph.onCommit(state, meta, dirtySet, diagnosticsLevel),\n enqueueTransaction,\n runOperation,\n txnContext,\n traitConvergeTimeSlicing: traitConvergeTimeSlicingState,\n traitRuntime: {\n getProgram: () => traitState.program,\n getConvergePlanCache: () => traitState.convergePlanCache,\n getConvergeGeneration: () => traitState.convergeGeneration,\n getPendingCacheMissReason: () => traitState.pendingCacheMissReason,\n setPendingCacheMissReason: (next) => {\n traitState.pendingCacheMissReason = next\n },\n rowIdStore,\n getListConfigs: () => traitState.listConfigs,\n },\n resolveTraitConvergeConfig,\n isDevEnv,\n maxTxnHistory,\n txnHistory,\n txnById,\n }),\n )\n\n const transactionSel = RuntimeKernel.selectRuntimeService(\n 'transaction',\n resolveRuntimeServiceImpls('transaction', [\n {\n implId: 'builtin',\n implVersion: 'v1',\n make: makeTransactionBuiltin,\n },\n ]),\n runtimeServicesOverrides,\n )\n\n const { readState, setStateInternal, runWithStateTransaction } = yield* transactionSel.impl.make.pipe(\n Effect.provideService(RuntimeServiceBuiltins.RuntimeServiceBuiltinsTag, {\n getBuiltinMake: (serviceId) =>\n serviceId === 'transaction'\n ? (makeTransactionBuiltin as Effect.Effect<unknown, never, any>)\n : Effect.dieMessage(`[Logix] builtin make not available: ${serviceId}`),\n } satisfies RuntimeServiceBuiltins.RuntimeServiceBuiltins),\n )\n\n let deferredFlushCoalescedCount = 0\n let deferredFlushCanceledCount = 0\n\n const runDeferredConvergeFlush = (args: {\n readonly dirtyPathsSnapshot: ReadonlyArray<StateTransaction.StatePatchPath>\n readonly dirtyAllReason?: DirtyAllReason\n readonly lane: 'urgent' | 'nonUrgent'\n readonly slice?: { readonly start: number; readonly end: number; readonly total: number }\n readonly captureOpSeq?: boolean\n }): Effect.Effect<{ readonly txnSeq: number; readonly txnId?: string; readonly opSeq?: number }> => {\n let capturedTxnSeq = 0\n let capturedTxnId: string | undefined = undefined\n let capturedOpSeq: number | undefined = undefined\n\n const details: any = { dirtyPathCount: args.dirtyPathsSnapshot.length }\n if (args.dirtyAllReason) {\n details.dirtyAllReason = args.dirtyAllReason\n }\n if (args.slice) {\n details.sliceStart = args.slice.start\n details.sliceEnd = args.slice.end\n details.sliceTotal = args.slice.total\n }\n\n return enqueueTransaction(\n args.lane,\n runOperation(\n 'lifecycle',\n 'trait:deferredConvergeFlush',\n {\n payload: { dirtyPathCount: args.dirtyPathsSnapshot.length },\n meta: { moduleId, instanceId },\n },\n runWithStateTransaction(\n {\n kind: 'trait:deferred_flush',\n name: 'trait:deferredConvergeFlush',\n details,\n },\n () =>\n Effect.gen(function* () {\n const current: any = txnContext.current\n if (current) {\n capturedTxnSeq = current.txnSeq\n capturedTxnId = current.txnId\n }\n\n if (args.captureOpSeq) {\n const opSeqRaw = yield* FiberRef.get(Debug.currentOpSeq)\n if (typeof opSeqRaw === 'number' && Number.isFinite(opSeqRaw) && opSeqRaw >= 0) {\n capturedOpSeq = Math.floor(opSeqRaw)\n }\n }\n\n if (!current) return\n if (args.dirtyAllReason) {\n current.dirtyAllReason = args.dirtyAllReason\n }\n for (const p of args.dirtyPathsSnapshot) {\n if (typeof p === 'number' && Number.isFinite(p) && p >= 0) {\n current.dirtyPathIds.add(Math.floor(p))\n }\n }\n }),\n ),\n ),\n ).pipe(\n Effect.as({\n txnSeq: capturedTxnSeq,\n txnId: capturedTxnId,\n opSeq: capturedOpSeq,\n } as const),\n )\n }\n\n // 043: time-slicing scheduler for deferred converge (debounce + maxLag); triggered by in-txn signals and enqueued outside the txn.\n yield* Effect.forkScoped(\n Effect.forever(\n Effect.gen(function* () {\n yield* Queue.take(traitConvergeTimeSlicingState.signal)\n\n while (true) {\n const config = traitConvergeTimeSlicingState.latestConvergeConfig?.traitConvergeTimeSlicing\n if (!config?.enabled) {\n traitConvergeTimeSlicingState.backlogDirtyPaths.clear()\n traitConvergeTimeSlicingState.backlogDirtyAllReason = undefined\n traitConvergeTimeSlicingState.firstPendingAtMs = undefined\n traitConvergeTimeSlicingState.lastTouchedAtMs = undefined\n return\n }\n\n const now = Date.now()\n const firstPendingAtMs = traitConvergeTimeSlicingState.firstPendingAtMs ?? now\n traitConvergeTimeSlicingState.firstPendingAtMs = firstPendingAtMs\n\n const captured = traitConvergeTimeSlicingState.capturedContext\n const txnLanePolicy = yield* captured?.overrides\n ? Effect.provideService(resolveTxnLanePolicy(), StateTransactionOverridesTag, captured.overrides)\n : resolveTxnLanePolicy()\n\n const debounceMs = txnLanePolicy.enabled ? txnLanePolicy.debounceMs : config.debounceMs\n const maxLagMs = txnLanePolicy.enabled ? txnLanePolicy.maxLagMs : config.maxLagMs\n\n const elapsedMs = Math.max(0, now - firstPendingAtMs)\n const remainingLagMs = Math.max(0, maxLagMs - elapsedMs)\n if (remainingLagMs <= 0) {\n break\n }\n\n const sleepMs = Math.max(0, Math.min(debounceMs, remainingLagMs))\n if (sleepMs > 0) {\n yield* Effect.sleep(Duration.millis(sleepMs))\n } else {\n yield* Effect.yieldNow()\n }\n\n const drained = yield* Queue.takeAll(traitConvergeTimeSlicingState.signal)\n if (Chunk.isEmpty(drained)) {\n break\n }\n }\n\n const dirtyPathsSnapshot = Array.from(traitConvergeTimeSlicingState.backlogDirtyPaths)\n traitConvergeTimeSlicingState.backlogDirtyPaths.clear()\n const dirtyAllReasonSnapshot = traitConvergeTimeSlicingState.backlogDirtyAllReason\n traitConvergeTimeSlicingState.backlogDirtyAllReason = undefined\n const firstPendingAtMsForRun = traitConvergeTimeSlicingState.firstPendingAtMs\n traitConvergeTimeSlicingState.firstPendingAtMs = undefined\n traitConvergeTimeSlicingState.lastTouchedAtMs = undefined\n\n if (dirtyPathsSnapshot.length === 0 && !dirtyAllReasonSnapshot) {\n return\n }\n\n const program = traitState.program\n if (!program?.convergeExecIr || program.convergeExecIr.topoOrderDeferredInt32.length === 0) {\n return\n }\n\n const captured = traitConvergeTimeSlicingState.capturedContext\n const txnLanePolicy = yield* captured?.overrides\n ? Effect.provideService(resolveTxnLanePolicy(), StateTransactionOverridesTag, captured.overrides)\n : resolveTxnLanePolicy()\n\n const shouldEmitLaneEvidence = captured != null && captured.diagnosticsLevel !== 'off'\n const shouldEmitLaneEvidenceForPolicy =\n shouldEmitLaneEvidence && (txnLanePolicy.enabled || txnLanePolicy.overrideMode != null)\n\n const withCapturedContext = <A2, E2, R2>(eff: Effect.Effect<A2, E2, R2>): Effect.Effect<A2, E2, R2> => {\n let next = eff\n if (captured?.overrides) {\n next = Effect.provideService(next, StateTransactionOverridesTag, captured.overrides)\n }\n if (captured) {\n next = next.pipe(\n Effect.locally(Debug.currentRuntimeLabel, captured.runtimeLabel),\n Effect.locally(Debug.currentDiagnosticsLevel, captured.diagnosticsLevel),\n Effect.locally(Debug.currentDebugSinks, captured.debugSinks),\n )\n }\n return next\n }\n\n const firstPendingAtMs = firstPendingAtMsForRun ?? Date.now()\n\n if (!txnLanePolicy.enabled) {\n const anchor = yield* withCapturedContext(\n runDeferredConvergeFlush({\n dirtyPathsSnapshot,\n dirtyAllReason: dirtyAllReasonSnapshot,\n lane: 'urgent',\n captureOpSeq: shouldEmitLaneEvidenceForPolicy,\n }),\n )\n\n if (shouldEmitLaneEvidenceForPolicy) {\n const reasons: ReadonlyArray<Debug.TxnLaneEvidenceReason> =\n txnLanePolicy.overrideMode === 'forced_off'\n ? ['forced_off']\n : txnLanePolicy.overrideMode === 'forced_sync'\n ? ['forced_sync']\n : ['disabled']\n\n const evidence: Debug.TxnLaneEvidence = {\n anchor: {\n moduleId,\n instanceId,\n txnSeq: anchor.txnSeq,\n ...(typeof anchor.opSeq === 'number' ? { opSeq: anchor.opSeq } : {}),\n },\n lane: 'urgent',\n kind: 'trait:deferred_flush',\n policy: txnLanePolicy,\n backlog: {\n pendingCount: 0,\n ageMs: Math.max(0, Date.now() - firstPendingAtMs),\n coalescedCount: deferredFlushCoalescedCount,\n canceledCount: deferredFlushCanceledCount,\n },\n starvation: { triggered: false },\n reasons,\n }\n\n yield* withCapturedContext(\n Debug.record({\n type: 'trace:txn-lane',\n moduleId,\n instanceId,\n txnSeq: anchor.txnSeq,\n txnId: anchor.txnId,\n data: { evidence },\n }),\n )\n }\n\n return\n }\n\n const totalSteps = program.convergeExecIr.topoOrderDeferredInt32.length\n\n let cursor = 0\n let chunkSize = Math.min(32, totalSteps)\n let yieldCount = 0\n let lastYieldAtMs = Date.now()\n\n const readIsInputPending = (): boolean => {\n const nav = (globalThis as any).navigator\n const scheduling = nav?.scheduling\n const isInputPending = scheduling?.isInputPending\n if (typeof isInputPending !== 'function') return false\n try {\n return Boolean(isInputPending.call(scheduling))\n } catch {\n return false\n }\n }\n\n while (cursor < totalSteps) {\n const lagMs = Math.max(0, Date.now() - firstPendingAtMs)\n const lagExceeded = lagMs >= txnLanePolicy.maxLagMs\n const budgetMs = lagExceeded\n ? Math.max(txnLanePolicy.budgetMs, txnLanePolicy.budgetMs * 4)\n : txnLanePolicy.budgetMs\n\n const sliceStart = cursor\n const sliceEnd = Math.min(totalSteps, cursor + chunkSize)\n\n const { sliceDurationMs, anchor } = yield* withCapturedContext(\n Effect.gen(function* () {\n const sliceStartedAtMs = Date.now()\n const anchor = yield* runDeferredConvergeFlush({\n dirtyPathsSnapshot,\n dirtyAllReason: dirtyAllReasonSnapshot,\n lane: 'nonUrgent',\n slice: { start: sliceStart, end: sliceEnd, total: totalSteps },\n captureOpSeq: shouldEmitLaneEvidence,\n })\n const sliceDurationMs = Math.max(0, Date.now() - sliceStartedAtMs)\n return { sliceDurationMs, anchor } as const\n }),\n )\n\n cursor = sliceEnd\n\n // Keep the signal queue bounded during long backlog processing.\n yield* Queue.takeAll(traitConvergeTimeSlicingState.signal)\n\n const hasPending =\n traitConvergeTimeSlicingState.backlogDirtyPaths.size > 0 ||\n traitConvergeTimeSlicingState.backlogDirtyAllReason != null\n const willCoalesce = txnLanePolicy.allowCoalesce && !lagExceeded && hasPending\n\n const elapsedSinceLastYieldMs = Math.max(0, Date.now() - lastYieldAtMs)\n const budgetExceeded = budgetMs > 0 && Number.isFinite(budgetMs) && elapsedSinceLastYieldMs >= budgetMs\n const forcedFrameYield = elapsedSinceLastYieldMs >= 16\n const inputPending =\n !willCoalesce && txnLanePolicy.yieldStrategy === 'inputPending' ? readIsInputPending() : false\n\n const shouldYield =\n cursor < totalSteps && !willCoalesce && (inputPending || budgetExceeded || forcedFrameYield)\n\n const yieldReason: Debug.TxnLaneNonUrgentYieldReason = !shouldYield\n ? 'none'\n : inputPending\n ? 'input_pending'\n : budgetExceeded\n ? 'budget_exceeded'\n : 'forced_frame_yield'\n\n if (shouldEmitLaneEvidence) {\n yield* withCapturedContext(\n Effect.gen(function* () {\n const reasons: Array<Debug.TxnLaneEvidenceReason> = ['queued_non_urgent']\n if (lagExceeded) reasons.push('max_lag_forced', 'starvation_protection')\n if (yieldReason === 'budget_exceeded') reasons.push('budget_yield')\n\n const evidence: Debug.TxnLaneEvidence = {\n anchor: {\n moduleId,\n instanceId,\n txnSeq: anchor.txnSeq,\n ...(typeof anchor.opSeq === 'number' ? { opSeq: anchor.opSeq } : {}),\n },\n lane: 'nonUrgent',\n kind: 'trait:deferred_flush',\n policy: txnLanePolicy,\n backlog: {\n pendingCount: Math.max(0, totalSteps - sliceEnd),\n ageMs: lagMs,\n coalescedCount: deferredFlushCoalescedCount,\n canceledCount: deferredFlushCanceledCount,\n },\n budget: {\n budgetMs,\n sliceDurationMs,\n yieldCount,\n yielded: shouldYield,\n yieldReason,\n },\n starvation: lagExceeded ? { triggered: true, reason: 'max_lag_exceeded' } : { triggered: false },\n reasons,\n }\n\n yield* Debug.record({\n type: 'trace:txn-lane',\n moduleId,\n instanceId,\n txnSeq: anchor.txnSeq,\n txnId: anchor.txnId,\n data: { evidence },\n })\n }),\n )\n }\n\n if (willCoalesce) {\n // Ensure the scheduler wakes again for the new backlog after we cancel.\n deferredFlushCoalescedCount += 1\n deferredFlushCanceledCount += 1\n if (shouldEmitLaneEvidence) {\n yield* withCapturedContext(\n Debug.record({\n type: 'trace:txn-lane',\n moduleId,\n instanceId,\n txnSeq: anchor.txnSeq,\n txnId: anchor.txnId,\n data: {\n evidence: {\n anchor: {\n moduleId,\n instanceId,\n txnSeq: anchor.txnSeq,\n ...(typeof anchor.opSeq === 'number' ? { opSeq: anchor.opSeq } : {}),\n },\n lane: 'nonUrgent',\n kind: 'trait:deferred_flush',\n policy: txnLanePolicy,\n backlog: {\n pendingCount: Math.max(0, totalSteps - cursor),\n ageMs: lagMs,\n coalescedCount: deferredFlushCoalescedCount,\n canceledCount: deferredFlushCanceledCount,\n },\n budget: {\n budgetMs,\n sliceDurationMs,\n yieldCount,\n yielded: false,\n yieldReason: 'none',\n },\n starvation: { triggered: false },\n reasons: ['coalesced', 'canceled'],\n } satisfies Debug.TxnLaneEvidence,\n },\n }),\n )\n }\n yield* Queue.offer(traitConvergeTimeSlicingState.signal, undefined)\n break\n }\n\n if (budgetMs > 0 && Number.isFinite(budgetMs)) {\n if (sliceDurationMs > budgetMs && chunkSize > 1) {\n chunkSize = Math.max(1, Math.floor(chunkSize / 2))\n } else if (sliceDurationMs < budgetMs / 2) {\n chunkSize = Math.min(totalSteps, chunkSize * 2)\n }\n }\n\n if (shouldYield) {\n yieldCount += 1\n lastYieldAtMs = Date.now()\n yield* Effect.yieldNow()\n }\n }\n\n // If new backlog arrived while processing, ensure we don't lose wakeup after draining signals.\n if (\n traitConvergeTimeSlicingState.backlogDirtyPaths.size > 0 ||\n traitConvergeTimeSlicingState.backlogDirtyAllReason != null\n ) {\n yield* Queue.offer(traitConvergeTimeSlicingState.signal, undefined)\n }\n }),\n ),\n )\n\n const declaredActionTags = (() => {\n const actionMap = (options.tag as any)?.shape?.actionMap\n if (!actionMap || typeof actionMap !== 'object') {\n return undefined\n }\n return new Set(Object.keys(actionMap))\n })()\n\n const makeDispatchBuiltin = Effect.sync(() =>\n makeDispatchOps<S, A>({\n optionsModuleId: options.moduleId,\n instanceId,\n declaredActionTags,\n initialReducers: options.reducers as any,\n txnContext,\n readState,\n setStateInternal,\n recordStatePatch,\n actionHub,\n actionCommitHub,\n diagnostics: concurrencyDiagnostics,\n enqueueTransaction,\n resolveConcurrencyPolicy,\n runOperation,\n runWithStateTransaction,\n isDevEnv,\n }),\n )\n\n const dispatchSel = RuntimeKernel.selectRuntimeService(\n 'dispatch',\n resolveRuntimeServiceImpls('dispatch', [\n {\n implId: 'builtin',\n implVersion: 'v1',\n make: makeDispatchBuiltin,\n },\n ]),\n runtimeServicesOverrides,\n )\n\n const dispatchOps = yield* dispatchSel.impl.make.pipe(\n Effect.provideService(RuntimeServiceBuiltins.RuntimeServiceBuiltinsTag, {\n getBuiltinMake: (serviceId) =>\n serviceId === 'dispatch'\n ? (makeDispatchBuiltin as Effect.Effect<unknown, never, any>)\n : Effect.dieMessage(`[Logix] builtin make not available: ${serviceId}`),\n } satisfies RuntimeServiceBuiltins.RuntimeServiceBuiltins),\n )\n\n const runtimeServicesEvidence = RuntimeKernel.makeRuntimeServicesEvidence({\n moduleId: options.moduleId,\n instanceId,\n bindings: [enqueueTxnSel.binding, runOperationSel.binding, transactionSel.binding, dispatchSel.binding],\n overridesApplied: [\n ...enqueueTxnSel.overridesApplied,\n ...runOperationSel.overridesApplied,\n ...transactionSel.overridesApplied,\n ...dispatchSel.overridesApplied,\n ],\n })\n\n if (kernelImplementationRef.kernelId !== 'core') {\n const modeOpt = yield* Effect.serviceOption(RuntimeKernel.FullCutoverGateModeTag)\n const mode = Option.isSome(modeOpt) ? modeOpt.value : 'trial'\n\n if (mode === 'fullCutover') {\n const gate = FullCutoverGate.evaluateFullCutoverGate({\n mode: 'fullCutover',\n requestedKernelId: kernelImplementationRef.kernelId,\n runtimeServicesEvidence,\n diagnosticsLevel: isDevEnv() ? 'light' : 'off',\n })\n\n if (gate.verdict === 'FAIL') {\n const msg = isDevEnv()\n ? [\n '[FullCutoverGateFailed] Runtime assembly detected implicit fallback / missing bindings under fullCutover mode.',\n `requestedKernelId: ${kernelImplementationRef.kernelId}`,\n `missingServiceIds: ${gate.missingServiceIds.join(',')}`,\n `fallbackServiceIds: ${gate.fallbackServiceIds.join(',')}`,\n `anchor: moduleId=${gate.anchor.moduleId}, instanceId=${gate.anchor.instanceId}, txnSeq=${gate.anchor.txnSeq}`,\n ].join('\\n')\n : 'Full cutover gate failed'\n\n const err: any = new Error(msg)\n err.name = 'FullCutoverGateFailed'\n err.gate = gate\n err.instanceId = instanceId\n err.moduleId = options.moduleId\n throw err\n }\n }\n }\n\n const runtime: PublicModuleRuntime<S, A> = {\n // Expose moduleId on the runtime so React / Devtools can correlate module information at the view layer.\n moduleId,\n instanceId,\n lifecycleStatus: lifecycle.getStatus,\n getState: readState,\n setState: (next) => setStateInternal(next, '*', 'unknown', undefined, next),\n dispatch: (action) =>\n // Enqueue the txn request to guarantee FIFO serialization within a single instance.\n dispatchOps.dispatch(action),\n dispatchBatch: (actions) => dispatchOps.dispatchBatch(actions),\n dispatchLowPriority: (action) => dispatchOps.dispatchLowPriority(action),\n actions$: Stream.fromPubSub(actionHub),\n actionsWithMeta$: Stream.fromPubSub(actionCommitHub),\n changes: <V>(selector: (s: S) => V) => Stream.map(stateRef.changes, selector).pipe(Stream.changes),\n changesWithMeta: <V>(selector: (s: S) => V) =>\n Stream.map(fromCommitHub, ({ value, meta }) => ({\n value: selector(value),\n meta,\n })),\n changesReadQueryWithMeta: <V>(input: ReadQuery.ReadQueryInput<S, V>) => {\n const compiled: ReadQuery.ReadQueryCompiled<S, V> =\n (input as any)?.staticIr != null &&\n typeof (input as any)?.lane === 'string' &&\n typeof (input as any)?.producer === 'string'\n ? (input as any)\n : ReadQuery.compile(input)\n\n if (compiled.lane !== 'static') {\n return Stream.unwrapScoped(\n Effect.gen(function* () {\n const strictGateOpt = yield* Effect.serviceOption(ReadQueryStrictGateConfigTag)\n\n if (Option.isSome(strictGateOpt)) {\n const decision = ReadQuery.evaluateStrictGate({\n config: strictGateOpt.value,\n moduleId,\n instanceId,\n txnSeq: 0,\n compiled,\n })\n\n if (decision.verdict === 'WARN') {\n yield* Debug.record(decision.diagnostic)\n } else if (decision.verdict === 'FAIL') {\n yield* Debug.record(decision.diagnostic)\n yield* Effect.die(decision.error)\n }\n }\n\n return Stream.map(fromCommitHub, ({ value, meta }) => ({\n value: compiled.select(value),\n meta,\n }))\n }),\n )\n }\n\n return Stream.unwrapScoped(\n Effect.gen(function* () {\n const entry = yield* selectorGraph.ensureEntry(compiled)\n entry.subscriberCount += 1\n\n yield* Effect.addFinalizer(() =>\n Effect.sync(() => {\n selectorGraph.releaseEntry(compiled.selectorId)\n }),\n )\n\n if (!entry.hasValue) {\n const current = yield* readState\n try {\n entry.cachedValue = compiled.select(current) as any\n entry.hasValue = true\n entry.cachedAtTxnSeq = 0\n } catch {\n // keep entry empty; commit-time eval will emit diagnostic in diagnostics mode (if enabled)\n }\n }\n\n return Stream.fromPubSub(entry.hub) as Stream.Stream<StateChangeWithMeta<V>>\n }),\n )\n },\n ref: <V = S>(selector?: (s: S) => V): SubscriptionRef.SubscriptionRef<V> => {\n if (!selector) {\n return stateRef as unknown as SubscriptionRef.SubscriptionRef<V>\n }\n\n // Read-only derived view: derive from the root state via selector and forbid writes.\n const readonlyRef = {\n get: Effect.map(SubscriptionRef.get(stateRef), selector),\n modify: () => Effect.dieMessage('Cannot write to a derived ref'),\n } as unknown as Ref.Ref<V>\n\n const derived = {\n // SubscriptionRef internals access self.ref / self.pubsub / self.semaphore.\n ref: readonlyRef,\n pubsub: {\n publish: () => Effect.succeed(true),\n },\n semaphore: {\n withPermits:\n () =>\n <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>\n self,\n },\n get: readonlyRef.get,\n modify: readonlyRef.modify,\n // Derived stream: selector-map stateRef.changes and de-duplicate.\n changes: Stream.map(stateRef.changes, selector).pipe(Stream.changes) as Stream.Stream<V>,\n } as unknown as SubscriptionRef.SubscriptionRef<V>\n\n return derived\n },\n }\n\n KernelRef.setKernelImplementationRef(runtime, kernelImplementationRef)\n RuntimeKernel.setRuntimeServicesEvidence(runtime, runtimeServicesEvidence)\n\n // Optional: when RunSession/EvidenceCollector is in scope, write runtime services evidence into the collector.\n // By default (non-trial-run), Env does not contain EvidenceCollectorTag, so this adds no overhead.\n const collectorOpt = yield* Effect.serviceOption(EvidenceCollectorTag)\n if (Option.isSome(collectorOpt)) {\n collectorOpt.value.setKernelImplementationRef(kernelImplementationRef)\n const level = yield* FiberRef.get(Debug.currentDiagnosticsLevel)\n if (level !== 'off') {\n collectorOpt.value.setRuntimeServicesEvidence(runtimeServicesEvidence)\n }\n }\n\n const convergeStaticIrCollectors = yield* FiberRef.get(currentConvergeStaticIrCollectors)\n const registerConvergeStaticIr = (staticIr: unknown): void => {\n if (convergeStaticIrCollectors.length === 0) return\n for (const collector of convergeStaticIrCollectors) {\n collector.register(staticIr as any)\n }\n }\n\n const sourceRefreshRegistry = new Map<string, (state: unknown) => Effect.Effect<void, never, any>>()\n yield* Effect.addFinalizer(() =>\n Effect.sync(() => {\n sourceRefreshRegistry.clear()\n }),\n )\n\n // Build a minimal imports-scope injector:\n // - Only store ModuleToken -> ModuleRuntime mappings.\n // - Never capture the whole Context into ModuleRuntime (avoid leaking root/base services by accident).\n const importsMap = new Map<Context.Tag<any, PublicModuleRuntime<any, any>>, PublicModuleRuntime<any, any>>()\n\n for (const imported of options.imports ?? []) {\n const maybe = yield* Effect.serviceOption(imported)\n if (Option.isSome(maybe)) {\n importsMap.set(imported, maybe.value)\n }\n }\n\n const importsScope: RuntimeInternals['imports'] = {\n kind: 'imports-scope',\n get: (module) => importsMap.get(module),\n }\n\n const instanceKey = options.moduleId != null ? `${options.moduleId}::${instanceId}` : undefined\n\n if (instanceKey) {\n registerRuntimeByInstanceKey(instanceKey, runtime as PublicModuleRuntime<any, any>)\n }\n\n const registerStateTraitProgram = (\n program: any,\n registerOptions?: { readonly bumpReason?: any; readonly exportStaticIr?: boolean },\n ): void => {\n const nextIr = (program as any).convergeIr\n const nextKeys = nextIr\n ? {\n writersKey: nextIr.writersKey,\n depsKey: nextIr.depsKey,\n }\n : undefined\n\n const requestedBumpReason = registerOptions?.bumpReason\n let bumpReason: any\n\n if (traitState.lastConvergeIrKeys && nextKeys) {\n if (requestedBumpReason) {\n bumpReason = requestedBumpReason\n } else if (traitState.lastConvergeIrKeys.writersKey !== nextKeys.writersKey) {\n bumpReason = 'writers_changed'\n } else if (traitState.lastConvergeIrKeys.depsKey !== nextKeys.depsKey) {\n bumpReason = 'deps_changed'\n }\n } else if (traitState.lastConvergeIrKeys && !nextKeys) {\n bumpReason = requestedBumpReason ?? 'unknown'\n }\n\n if (bumpReason) {\n const nextGeneration = traitState.convergeGeneration.generation + 1\n const nextBumpCount = (traitState.convergeGeneration.generationBumpCount ?? 0) + 1\n traitState.convergeGeneration = {\n generation: nextGeneration,\n generationBumpCount: nextBumpCount,\n lastBumpReason: bumpReason,\n }\n\n traitState.pendingCacheMissReason = 'generation_bumped'\n traitState.convergePlanCache = new StateTraitConverge.ConvergePlanCache(convergePlanCacheCapacity)\n }\n\n traitState.lastConvergeIrKeys = nextKeys\n\n const convergeIr = nextIr\n ? {\n ...nextIr,\n generation: traitState.convergeGeneration.generation,\n }\n : undefined\n\n const convergeExecIr =\n convergeIr && !(convergeIr as any).configError ? makeConvergeExecIr(convergeIr as any) : undefined\n\n traitState.program = {\n ...(program as any),\n convergeIr,\n convergeExecIr,\n }\n traitState.listConfigs = RowId.collectListConfigs((program as any).spec)\n\n if (!traitState.convergePlanCache) {\n traitState.convergePlanCache = new StateTraitConverge.ConvergePlanCache(convergePlanCacheCapacity)\n }\n\n const exportStaticIrEnabled = registerOptions?.exportStaticIr !== false\n\n if (exportStaticIrEnabled && convergeIr && !(convergeIr as any).configError) {\n if (convergeStaticIrCollectors.length > 0) {\n registerConvergeStaticIr(\n exportConvergeStaticIr({\n ir: convergeIr,\n moduleId: options.moduleId ?? 'unknown',\n instanceId,\n }),\n )\n }\n }\n }\n\n // 065: even if the module declares no traits, it must still have a schema-backed Static IR table (FieldPathIdRegistry),\n // otherwise reducer patchPaths / ReadQuery(static lane) cannot be mapped and will degrade to dirtyAll.\n if (!traitState.program) {\n const stateSchema = (options.tag as any)?.stateSchema as unknown\n if (stateSchema) {\n try {\n registerStateTraitProgram(StateTraitBuild.build(stateSchema as any, {} as any), { exportStaticIr: false })\n } catch {\n // best-effort: keep trait program undefined and fall back to dirtyAll scheduling when registry is missing.\n }\n }\n }\n\n const enqueueStateTraitValidateRequest = (request: StateTraitValidate.ScopedValidateRequest): void => {\n if (!txnContext.current) return\n const current: any = txnContext.current\n const list: Array<StateTraitValidate.ScopedValidateRequest> = current.stateTraitValidateRequests ?? []\n list.push(request)\n current.stateTraitValidateRequests = list\n }\n\n const recordReplayEvent = (event: unknown): void => {\n if (!txnContext.current) return\n const current: any = txnContext.current\n current.lastReplayEvent = {\n ...(event as any),\n txnId: current.txnId,\n trigger: current.origin,\n }\n }\n\n const runWithStateTransactionInternal = (\n origin: StateTransaction.StateTxnOrigin,\n body: () => Effect.Effect<void>,\n ): Effect.Effect<void> =>\n enqueueTransaction(\n runOperation(\n origin.kind as any as EffectOp.EffectOp['kind'],\n origin.name ? `txn:${origin.name}` : 'txn',\n { meta: { moduleId: options.moduleId, instanceId } },\n runWithStateTransaction(origin, body),\n ),\n )\n\n const applyTransactionSnapshot = (txnId: string, mode: 'before' | 'after'): Effect.Effect<void> =>\n enqueueTransaction(\n Effect.gen(function* () {\n // Time travel is disabled by default in production to avoid misuse.\n // Devtools should use this only in dev/test with instrumentation = \"full\".\n if (!isDevEnv()) {\n return\n }\n\n const txn = txnById.get(txnId)\n if (!txn) {\n return\n }\n\n const targetState = mode === 'before' ? txn.initialStateSnapshot : txn.finalStateSnapshot\n\n if (targetState === undefined) {\n // Time travel is not possible when snapshots are not collected.\n return\n }\n\n // Record a replay operation as a StateTransaction with origin.kind = \"devtools\"\n // so Devtools txn views can show a complete time-travel trace.\n yield* runWithStateTransaction(\n {\n kind: 'devtools',\n name: 'time-travel',\n details: {\n baseTxnId: txnId,\n mode,\n },\n },\n () =>\n Effect.sync(() => {\n StateTransaction.updateDraft(txnContext, targetState as S)\n StateTransaction.recordPatch(txnContext, '*', 'devtools')\n }),\n )\n }),\n )\n\n const stateSchema = (options.tag as any)?.stateSchema\n\n const effectsRegistry = makeEffectsRegistry({\n moduleId: options.moduleId,\n instanceId,\n actions$: runtime.actions$ as Stream.Stream<unknown>,\n })\n\n const runtimeInternals: RuntimeInternals = {\n moduleId: options.moduleId,\n instanceId,\n stateSchema,\n lifecycle: {\n registerInitRequired: (eff, options) => {\n lifecycle.registerInitRequired(eff, options)\n },\n registerStart: (eff, options) => {\n lifecycle.registerStart(eff, options)\n },\n registerDestroy: (eff, options) => {\n lifecycle.registerDestroy(eff, options)\n },\n registerOnError: (handler) => {\n lifecycle.registerOnError(handler)\n },\n registerPlatformSuspend: (eff, options) => {\n lifecycle.registerPlatformSuspend(eff, options)\n },\n registerPlatformResume: (eff, options) => {\n lifecycle.registerPlatformResume(eff, options)\n },\n registerPlatformReset: (eff, options) => {\n lifecycle.registerPlatformReset(eff, options)\n },\n },\n imports: importsScope,\n txn: {\n instrumentation,\n registerReducer: dispatchOps.registerReducer as any,\n runWithStateTransaction: runWithStateTransactionInternal as any,\n updateDraft,\n recordStatePatch,\n recordReplayEvent,\n applyTransactionSnapshot: applyTransactionSnapshot as any,\n },\n concurrency: {\n resolveConcurrencyPolicy,\n },\n txnLanes: {\n resolveTxnLanePolicy,\n },\n traits: {\n rowIdStore,\n getListConfigs: () => traitState.listConfigs as ReadonlyArray<unknown>,\n registerSourceRefresh: (fieldPath, handler) => {\n sourceRefreshRegistry.set(fieldPath, handler)\n },\n getSourceRefreshHandler: (fieldPath) => sourceRefreshRegistry.get(fieldPath),\n registerStateTraitProgram: registerStateTraitProgram as any,\n enqueueStateTraitValidateRequest: enqueueStateTraitValidateRequest as any,\n registerModuleTraitsContribution: (contribution) => {\n if (moduleTraitsState.frozen) {\n throw new Error('[ModuleTraitsFrozen] Cannot register traits contribution after finalize/freeze.')\n }\n moduleTraitsState.contributions.push(contribution)\n },\n freezeModuleTraits: () => {\n moduleTraitsState.frozen = true\n },\n getModuleTraitsContributions: () => moduleTraitsState.contributions,\n getModuleTraitsSnapshot: () => moduleTraitsState.snapshot,\n setModuleTraitsSnapshot: (snapshot) => {\n moduleTraitsState.snapshot = snapshot\n },\n },\n effects: {\n registerEffect: (args) => effectsRegistry.registerEffect(args as any),\n },\n devtools: {\n registerConvergeStaticIr: registerConvergeStaticIr as any,\n },\n }\n\n yield* installInternalHooks({ runtime, runtimeInternals })\n\n yield* Effect.addFinalizer(() =>\n Effect.sync(() => {\n importsMap.clear()\n }),\n )\n\n if (options.tag) {\n registerRuntime(options.tag as Context.Tag<any, PublicModuleRuntime<S, A>>, runtime)\n }\n\n yield* Effect.addFinalizer(() =>\n lifecycle.runDestroy.pipe(\n Effect.flatMap(() =>\n runOperation(\n 'lifecycle',\n 'module:destroy',\n { meta: { moduleId: options.moduleId, instanceId } },\n Debug.record({\n type: 'module:destroy',\n moduleId: options.moduleId,\n instanceId,\n }),\n ),\n ),\n Effect.tap(() =>\n Effect.sync(() => {\n if (options.tag) {\n unregisterRuntime(options.tag as Context.Tag<any, PublicModuleRuntime<any, any>>)\n }\n if (instanceKey) {\n unregisterRuntimeByInstanceKey(instanceKey)\n }\n }),\n ),\n ),\n )\n\n if (options.tag && options.logics?.length) {\n yield* runModuleLogics({\n tag: options.tag as Context.Tag<any, PublicModuleRuntime<S, A>>,\n logics: options.logics,\n runtime,\n lifecycle,\n moduleId,\n instanceId,\n })\n }\n\n if (options.processes && options.processes.length > 0) {\n const env = (yield* Effect.context<Scope.Scope | R>()) as Context.Context<any>\n const rootContextOpt = Context.getOption(env, RootContextTag as any)\n const isAppModule =\n Option.isSome(rootContextOpt) &&\n Array.isArray((rootContextOpt.value as RootContext).appModuleIds) &&\n (rootContextOpt.value as RootContext).appModuleIds!.includes(moduleId)\n\n if (!isAppModule) {\n const processRuntimeOpt = Context.getOption(env, ProcessRuntime.ProcessRuntimeTag as any)\n const processRuntime = Option.isSome(processRuntimeOpt)\n ? (processRuntimeOpt.value as ProcessRuntime.ProcessRuntime)\n : undefined\n const scope = {\n type: 'moduleInstance',\n moduleId,\n instanceId,\n } as const\n\n yield* Effect.forEach(\n options.processes,\n (process) =>\n Effect.gen(function* () {\n if (processRuntime) {\n const installEffect = processRuntime.install(process as any, {\n scope,\n enabled: true,\n installedAt: 'moduleRuntime',\n })\n\n // During the acquire phase of Layer.scoped(...), the current module runtime is not yet in Context,\n // but instance-scope processes (especially Link) may strictly require dependencies to be resolvable in scope.\n // We explicitly provide the current module runtime to avoid falsely treating itself as a missing dependency.\n const installation = options.tag\n ? yield* installEffect.pipe(\n Effect.provideService(options.tag as Context.Tag<any, any>, runtime as any),\n )\n : yield* installEffect\n\n if (installation !== undefined) {\n return\n }\n }\n\n // Legacy fallback: a raw Effect is still allowed as a process host, but it has no Process static surface/diagnostics.\n yield* Effect.forkScoped(process as any)\n }),\n { discard: true },\n )\n }\n }\n\n return runtime\n })\n\n return program as Effect.Effect<PublicModuleRuntime<S, A>, never, Scope.Scope | R>\n}\n","import { Effect, SubscriptionRef } from 'effect'\nimport {\n getFieldPathId,\n dirtyPathsToRootIds,\n normalizeFieldPath,\n normalizePatchReason,\n type FieldPathIdRegistry,\n type DirtyAllReason,\n type DirtySet,\n type FieldPath,\n type FieldPathId,\n type PatchReason,\n} from '../../field-path.js'\n\nexport type { PatchReason } from '../../field-path.js'\n\nexport type StatePatchPath = string | FieldPath | FieldPathId\n\nexport interface TxnPatchRecord {\n readonly opSeq: number\n readonly pathId?: FieldPathId\n readonly reason: PatchReason\n readonly stepId?: number\n readonly traitNodeId?: string\n readonly from?: unknown\n readonly to?: unknown\n}\n\nexport interface StateTxnOrigin {\n readonly kind: string\n readonly name?: string\n readonly details?: unknown\n}\n\nexport type StateTxnInstrumentationLevel = 'full' | 'light'\n\nexport interface StateTxnConfig {\n readonly moduleId?: string\n readonly instanceId?: string\n readonly instrumentation?: StateTxnInstrumentationLevel\n readonly getFieldPathIdRegistry?: () => FieldPathIdRegistry | undefined\n /**\n * Whether to capture initial/final state snapshots:\n * - enabled by default in full mode\n * - disabled by default in light mode\n */\n readonly captureSnapshots?: boolean\n /**\n * Time source function (useful for injecting a fake clock in tests).\n */\n readonly now?: () => number\n}\n\nexport interface StateTransaction<S> {\n readonly txnId: string\n readonly txnSeq: number\n readonly origin: StateTxnOrigin\n readonly startedAt: number\n readonly endedAt: number\n readonly durationMs: number\n readonly dirtySet: DirtySet\n readonly patchCount: number\n readonly patchesTruncated: boolean\n readonly patchesTruncatedReason?: 'max_patches'\n readonly initialStateSnapshot?: S\n readonly finalStateSnapshot?: S\n readonly patches: ReadonlyArray<TxnPatchRecord>\n readonly moduleId?: string\n readonly instanceId?: string\n}\n\n/**\n * StateTxnContext:\n * - Holds transaction state within a single ModuleRuntime.\n * - current is the active transaction (undefined when none).\n *\n * Notes:\n * - The current implementation supports a single active transaction; queueing strategies are added later (US1).\n * - To avoid premature coupling, Context provides only minimal begin/update/record/commit primitives; entry points\n * (dispatch/source-refresh/devtools) are controlled by higher layers.\n */\nexport interface StateTxnRuntimeConfig {\n readonly moduleId?: string\n readonly instanceId?: string\n readonly instrumentation: StateTxnInstrumentationLevel\n readonly captureSnapshots: boolean\n readonly now: () => number\n readonly getFieldPathIdRegistry?: () => FieldPathIdRegistry | undefined\n}\n\nexport interface StateTxnContext<S> {\n readonly config: StateTxnRuntimeConfig\n current?: StateTxnState<S>\n nextTxnSeq: number\n readonly scratch: StateTxnState<S>\n /**\n * recordPatch:\n * - makeContext selects the implementation based on instrumentation (full/light).\n * - Avoids branching per patch record inside hot loops (051: branch relocation).\n */\n recordPatch: (\n path: StatePatchPath | undefined,\n reason: PatchReason,\n from?: unknown,\n to?: unknown,\n traitNodeId?: string,\n stepId?: number,\n ) => void\n}\n\ninterface StateTxnState<S> {\n txnId: string\n txnSeq: number\n origin: StateTxnOrigin\n startedAt: number\n baseState: S\n draft: S\n initialStateSnapshot?: S\n readonly patches: Array<TxnPatchRecord>\n patchCount: number\n\tpatchesTruncated: boolean\n\tfieldPathIdRegistry?: FieldPathIdRegistry\n /**\n * dirtyPathIds:\n * - The set of FieldPathIds for all trackable writes within the transaction window (hot path records only integer anchors).\n * - Any non-mappable/non-trackable write must explicitly degrade to dirtyAll (dirtyAllReason); no silent fallback.\n * - Independent of instrumentation: light mode does not keep patches, but still maintains dirtyPathIds/dirtyAllReason for low-cost semantics (e.g. scheduling/diagnostics).\n */\n readonly dirtyPathIds: Set<FieldPathId>\n dirtyAllReason?: DirtyAllReason\n}\n\nconst defaultNow = () => {\n const perf = globalThis.performance\n if (perf && typeof perf.now === 'function') {\n return perf.now()\n }\n return Date.now()\n}\n\nexport const makeContext = <S>(config: StateTxnConfig): StateTxnContext<S> => {\n const instrumentation: StateTxnInstrumentationLevel = config.instrumentation ?? 'full'\n\n const captureSnapshots = config.captureSnapshots ?? instrumentation === 'full'\n\n const scratch: StateTxnState<S> = {\n txnId: '',\n txnSeq: 0,\n origin: { kind: 'unknown' },\n startedAt: 0,\n baseState: undefined as any,\n draft: undefined as any,\n initialStateSnapshot: undefined,\n patches: [],\n patchCount: 0,\n patchesTruncated: false,\n dirtyPathIds: new Set(),\n dirtyAllReason: undefined,\n }\n\n const ctx: StateTxnContext<S> = {\n config: {\n instrumentation,\n captureSnapshots,\n now: config.now ?? defaultNow,\n moduleId: config.moduleId,\n instanceId: config.instanceId,\n getFieldPathIdRegistry: config.getFieldPathIdRegistry,\n },\n current: undefined,\n nextTxnSeq: 0,\n scratch,\n recordPatch: () => {},\n }\n\n const recordPatchLight = (\n path: StatePatchPath | undefined,\n _reason: PatchReason,\n _from?: unknown,\n _to?: unknown,\n _traitNodeId?: string,\n _stepId?: number,\n ): void => {\n const state = ctx.current\n if (!state) return\n state.patchCount += 1\n resolveAndRecordDirtyPathId(state, path, _reason)\n }\n\n const MAX_PATCHES_FULL = 256\n\n const recordPatchFull = (\n path: StatePatchPath | undefined,\n reason: PatchReason,\n from?: unknown,\n to?: unknown,\n traitNodeId?: string,\n stepId?: number,\n ): void => {\n const state = ctx.current\n if (!state) return\n state.patchCount += 1\n const opSeq = state.patchCount - 1\n const pathId = resolveAndRecordDirtyPathId(state, path, reason)\n if (state.patchesTruncated || state.patches.length >= MAX_PATCHES_FULL) {\n state.patchesTruncated = true\n return\n }\n state.patches.push({\n opSeq,\n ...(pathId != null ? { pathId } : null),\n ...(from !== undefined ? { from } : null),\n ...(to !== undefined ? { to } : null),\n reason: normalizePatchReason(reason),\n ...(traitNodeId ? { traitNodeId } : null),\n ...(typeof stepId === 'number' && Number.isFinite(stepId) && stepId >= 0 ? { stepId: Math.floor(stepId) } : null),\n })\n }\n\n ctx.recordPatch = instrumentation === 'full' ? recordPatchFull : recordPatchLight\n\n return ctx\n}\n\n/**\n * Begins a new transaction:\n * - Default behavior: overrides the current transaction (queueing/nesting are refined in US1).\n * - initialState is provided by the caller (typically the current SubscriptionRef snapshot).\n */\nexport const beginTransaction = <S>(ctx: StateTxnContext<S>, origin: StateTxnOrigin, initialState: S): void => {\n const { config } = ctx\n const now = config.now\n const startedAt = now()\n\n ctx.nextTxnSeq += 1\n const txnSeq = ctx.nextTxnSeq\n const anchor = config.instanceId ?? 'unknown'\n const txnId = `${anchor}::t${txnSeq}`\n\n const initialSnapshot = config.captureSnapshots ? initialState : undefined\n\n const state = ctx.scratch\n state.txnId = txnId\n state.txnSeq = txnSeq\n state.origin = origin\n state.startedAt = startedAt\n state.baseState = initialState\n state.draft = initialState\n state.initialStateSnapshot = initialSnapshot\n state.patches.length = 0\n state.patchCount = 0\n state.patchesTruncated = false\n state.fieldPathIdRegistry = ctx.config.getFieldPathIdRegistry?.()\n state.dirtyPathIds.clear()\n state.dirtyAllReason = undefined\n ctx.current = state\n}\n\nconst resolveAndRecordDirtyPathId = <S>(\n state: StateTxnState<S>,\n path: StatePatchPath | undefined,\n reason: PatchReason,\n): FieldPathId | undefined => {\n if (state.dirtyAllReason) return undefined\n\n if (path === undefined) {\n state.dirtyAllReason = 'customMutation'\n return undefined\n }\n\n if (path === '*') {\n state.dirtyAllReason = 'unknownWrite'\n return undefined\n }\n\n const registry = state.fieldPathIdRegistry\n if (!registry) {\n state.dirtyAllReason = reason === 'reducer' ? 'customMutation' : 'fallbackPolicy'\n return undefined\n }\n\n let id: FieldPathId | undefined\n\n if (typeof path === 'number') {\n if (!Number.isFinite(path)) {\n state.dirtyAllReason = 'nonTrackablePatch'\n return undefined\n }\n const n = Math.floor(path)\n if (n < 0) {\n state.dirtyAllReason = 'nonTrackablePatch'\n return undefined\n }\n if (!registry.fieldPaths[n]) {\n state.dirtyAllReason = 'fallbackPolicy'\n return undefined\n }\n id = n\n } else if (typeof path === 'string') {\n const direct = registry.pathStringToId?.get(path)\n if (direct == null) {\n state.dirtyAllReason = 'fallbackPolicy'\n return undefined\n }\n id = direct\n } else {\n const normalized = normalizeFieldPath(path)\n if (!normalized) {\n state.dirtyAllReason = 'nonTrackablePatch'\n return undefined\n }\n\n const next = getFieldPathId(registry, normalized)\n if (next == null) {\n state.dirtyAllReason = 'fallbackPolicy'\n return undefined\n }\n id = next\n }\n\n state.dirtyPathIds.add(id)\n return id\n}\n\n/**\n * Updates the draft state:\n * - next is the latest draft.\n * - When instrumentation is full, patch info is recorded into the transaction via recordPatch.\n */\nexport const updateDraft = <S>(ctx: StateTxnContext<S>, next: S): void => {\n const state = ctx.current\n if (!state) {\n // No active transaction: ignore patch info; higher layers decide whether to start an implicit transaction.\n return\n }\n\n state.draft = next\n}\n\n/**\n * recordPatch:\n * - In full mode, appends a Patch.\n * - In light mode, silently ignores to avoid extra overhead.\n */\nexport const recordPatch = <S>(\n ctx: StateTxnContext<S>,\n path: StatePatchPath | undefined,\n reason: PatchReason,\n from?: unknown,\n to?: unknown,\n traitNodeId?: string,\n stepId?: number,\n): void => {\n ctx.recordPatch(path, reason, from, to, traitNodeId, stepId)\n}\n\n/**\n * Commits the transaction:\n * - Writes the final draft to SubscriptionRef exactly once.\n * - Returns the aggregated StateTransaction; returns undefined if there is no active transaction.\n *\n * Notes:\n * - Emitting Debug/Devtools events is decided by the caller based on the returned transaction.\n * - This module does not depend on DebugSink to avoid circular dependencies in core.\n */\nexport const commit = <S>(\n ctx: StateTxnContext<S>,\n stateRef: SubscriptionRef.SubscriptionRef<S>,\n): Effect.Effect<StateTransaction<S> | undefined> =>\n Effect.gen(function* () {\n const state = ctx.current\n if (!state) {\n return undefined\n }\n\n const { config } = ctx\n const now = config.now\n\n const finalState = state.draft\n\n // 0 commit: when there is no change, do not write SubscriptionRef and do not emit state:update.\n if (Object.is(finalState, state.baseState)) {\n ctx.current = undefined\n return undefined\n }\n\n // Single write to SubscriptionRef: ensures only one external state commit + subscription notification.\n yield* SubscriptionRef.set(stateRef, finalState)\n\n const endedAt = now()\n const durationMs = Math.max(0, endedAt - state.startedAt)\n\n const registry = state.fieldPathIdRegistry\n const dirtySet: DirtySet =\n registry == null\n ? {\n dirtyAll: true,\n reason: state.dirtyAllReason ?? 'fallbackPolicy',\n rootIds: [],\n rootCount: 0,\n keySize: 0,\n keyHash: 0,\n }\n : dirtyPathsToRootIds({\n dirtyPaths: state.dirtyPathIds,\n registry,\n dirtyAllReason: state.dirtyAllReason,\n })\n\n const transaction: StateTransaction<S> = {\n txnId: state.txnId,\n txnSeq: state.txnSeq,\n origin: state.origin,\n startedAt: state.startedAt,\n endedAt,\n durationMs,\n dirtySet,\n patchCount: state.patchCount,\n patchesTruncated: state.patchesTruncated,\n ...(state.patchesTruncated ? { patchesTruncatedReason: 'max_patches' } : null),\n initialStateSnapshot: state.initialStateSnapshot,\n finalStateSnapshot: config.captureSnapshots ? finalState : undefined,\n patches: ctx.config.instrumentation === 'full' ? state.patches.slice() : [],\n moduleId: config.moduleId,\n instanceId: config.instanceId,\n }\n\n // Clear the current transaction.\n ctx.current = undefined\n\n return transaction\n })\n\n/**\n * abort:\n * - Terminates the current transaction and clears context.\n * - Does not write to stateRef.\n * - Higher layers decide whether to record diagnostics/observability events.\n */\nexport const abort = <S>(ctx: StateTxnContext<S>): void => {\n ctx.current = undefined\n}\n","export const normalizeNonEmptyString = (value: unknown): string | undefined =>\n typeof value === 'string' && value.length > 0 ? value : undefined\n\nexport const normalizePositiveInt = (value: unknown): number | undefined =>\n typeof value === 'number' && Number.isInteger(value) && value > 0 ? value : undefined\n\nexport const normalizePositiveNumber = (value: unknown): number | undefined =>\n typeof value === 'number' && Number.isFinite(value) && value > 0 ? value : undefined\n\nexport const normalizeNonNegativeNumber = (value: unknown): number | undefined =>\n typeof value === 'number' && Number.isFinite(value) && value >= 0 ? value : undefined\n\nexport const normalizeBoolean = (value: unknown): boolean | undefined =>\n typeof value === 'boolean' ? value : undefined\n","import { Effect, FiberRef, Option } from 'effect'\nimport type { StateTxnContext } from './StateTransaction.js'\nimport * as Debug from './DebugSink.js'\nimport * as EffectOpCore from './EffectOpCore.js'\nimport * as EffectOp from '../../effect-op.js'\nimport { RunSessionTag } from '../../observability/runSession.js'\n\nexport const getMiddlewareStack = (): Effect.Effect<EffectOp.MiddlewareStack, never, never> =>\n Effect.serviceOption(EffectOpCore.EffectOpMiddlewareTag).pipe(\n Effect.map((maybe) => (Option.isSome(maybe) ? maybe.value.stack : [])),\n )\n\nexport type RunOperation = <A, E, R>(\n kind: EffectOp.EffectOp['kind'],\n name: string,\n params: {\n readonly payload?: unknown\n readonly meta?: EffectOp.EffectOp['meta']\n },\n eff: Effect.Effect<A, E, R>,\n) => Effect.Effect<A, E, R>\n\nexport const makeRunOperation = (args: {\n readonly optionsModuleId: string | undefined\n readonly instanceId: string\n readonly txnContext: StateTxnContext<any>\n}): RunOperation => {\n const { optionsModuleId, instanceId, txnContext } = args\n\n const runOperation: RunOperation = <A2, E2, R2>(\n kind: EffectOp.EffectOp['kind'],\n name: string,\n params: {\n readonly payload?: unknown\n readonly meta?: EffectOp.EffectOp['meta']\n },\n eff: Effect.Effect<A2, E2, R2>,\n ): Effect.Effect<A2, E2, R2> =>\n Effect.gen(function* () {\n const stack = yield* getMiddlewareStack()\n\n const currentTxnId = txnContext.current?.txnId\n const existingLinkId = yield* FiberRef.get(EffectOpCore.currentLinkId)\n\n const runtimeLabel = yield* FiberRef.get(Debug.currentRuntimeLabel)\n\n // NOTE: linkId is generated/propagated by the Runtime:\n // - Boundary entrypoints create a new linkId.\n // - Nested operations reuse the current FiberRef.linkId.\n // - Never default to randomness/time to avoid non-replayable implicit identifiers.\n const { linkId: _ignoredLinkId, ...restMeta } = (params.meta ?? {}) as any\n\n const baseMeta: EffectOp.EffectOp['meta'] = {\n ...restMeta,\n // Filled by the runtime.\n moduleId: (params.meta as any)?.moduleId ?? optionsModuleId,\n instanceId: (params.meta as any)?.instanceId ?? instanceId,\n runtimeLabel: (params.meta as any)?.runtimeLabel ?? runtimeLabel,\n txnSeq: (params.meta as any)?.txnSeq ?? txnContext.current?.txnSeq,\n txnId: (params.meta as any)?.txnId ?? currentTxnId,\n }\n\n const baseMetaAny = baseMeta as any\n if (!(typeof baseMetaAny.opSeq === 'number' && Number.isFinite(baseMetaAny.opSeq))) {\n const sessionOpt = yield* Effect.serviceOption(RunSessionTag)\n if (Option.isSome(sessionOpt)) {\n const key = baseMetaAny.instanceId ?? 'global'\n baseMetaAny.opSeq = sessionOpt.value.local.nextSeq('opSeq', key)\n }\n }\n\n const op0 = EffectOp.make<A2, E2, R2>({\n kind,\n name,\n payload: params.payload,\n effect: eff,\n meta: baseMeta,\n })\n\n const linkId = existingLinkId ?? op0.id\n const op =\n (op0.meta as any)?.linkId === linkId\n ? op0\n : ({\n ...op0,\n meta: {\n ...(op0.meta ?? {}),\n linkId,\n },\n } as typeof op0)\n\n const program = stack.length ? EffectOp.run(op, stack) : op.effect\n\n // linkId: created at the boundary, reused for nested ops (shared across modules via a FiberRef).\n const opSeq =\n typeof baseMetaAny.opSeq === 'number' && Number.isFinite(baseMetaAny.opSeq)\n ? Math.floor(baseMetaAny.opSeq)\n : undefined\n return yield* Effect.locally(\n EffectOpCore.currentLinkId,\n linkId,\n )(Effect.locally(Debug.currentOpSeq, opSeq)(program))\n })\n\n return runOperation\n}\n","import { Effect, PubSub } from 'effect'\nimport type { StateChangeWithMeta, StateCommitMeta, StateCommitMode, StateCommitPriority } from './module.js'\nimport * as Debug from './DebugSink.js'\nimport type { ConcurrencyDiagnostics } from './ConcurrencyDiagnostics.js'\nimport * as ReducerDiagnostics from './ReducerDiagnostics.js'\nimport * as StateTransaction from './StateTransaction.js'\nimport type { RunOperation } from './ModuleRuntime.operation.js'\nimport type { RunWithStateTransaction, SetStateInternal } from './ModuleRuntime.transaction.js'\nimport type { EnqueueTransaction } from './ModuleRuntime.txnQueue.js'\nimport type { ResolvedConcurrencyPolicy } from './ModuleRuntime.concurrencyPolicy.js'\n\nexport const makeDispatchOps = <S, A>(args: {\n readonly optionsModuleId: string | undefined\n readonly instanceId: string\n readonly declaredActionTags?: ReadonlySet<string>\n readonly initialReducers?: Readonly<\n Record<string, (state: S, action: A, sink?: (path: StateTransaction.StatePatchPath) => void) => S>\n >\n readonly txnContext: StateTransaction.StateTxnContext<S>\n readonly readState: Effect.Effect<S>\n readonly setStateInternal: SetStateInternal<S>\n readonly recordStatePatch: (\n path: StateTransaction.StatePatchPath | undefined,\n reason: StateTransaction.PatchReason,\n from?: unknown,\n to?: unknown,\n traitNodeId?: string,\n stepId?: number,\n ) => void\n readonly actionHub: PubSub.PubSub<A>\n readonly actionCommitHub: PubSub.PubSub<StateChangeWithMeta<A>>\n readonly diagnostics: ConcurrencyDiagnostics\n readonly enqueueTransaction: EnqueueTransaction\n readonly resolveConcurrencyPolicy: () => Effect.Effect<ResolvedConcurrencyPolicy>\n readonly runOperation: RunOperation\n readonly runWithStateTransaction: RunWithStateTransaction\n readonly isDevEnv: () => boolean\n}): {\n readonly registerReducer: (tag: string, fn: (state: S, action: A) => S) => void\n readonly dispatch: (action: A) => Effect.Effect<void>\n readonly dispatchBatch: (actions: ReadonlyArray<A>) => Effect.Effect<void>\n readonly dispatchLowPriority: (action: A) => Effect.Effect<void>\n} => {\n const {\n optionsModuleId,\n instanceId,\n declaredActionTags,\n initialReducers,\n txnContext,\n readState,\n setStateInternal,\n recordStatePatch,\n actionHub,\n actionCommitHub,\n diagnostics,\n enqueueTransaction,\n resolveConcurrencyPolicy,\n runOperation,\n runWithStateTransaction,\n isDevEnv,\n } = args\n\n const resolveActionTag = (action: A): string | undefined => {\n const tag = (action as any)?._tag\n if (typeof tag === 'string' && tag.length > 0) return tag\n const type = (action as any)?.type\n if (typeof type === 'string' && type.length > 0) return type\n if (tag != null) return String(tag)\n if (type != null) return String(type)\n return undefined\n }\n\n // Primary reducer map: initial values come from options.reducers and can be extended at runtime via internal hooks (for $.reducer sugar).\n const reducerMap = new Map<string, (state: S, action: A) => S>()\n if (initialReducers) {\n for (const [key, fn] of Object.entries(initialReducers)) {\n reducerMap.set(key, fn as (state: S, action: A) => S)\n }\n }\n\n // Track whether an Action tag has been dispatched, for diagnosing config issues like late reducer registration.\n const dispatchedTags = new Set<string>()\n\n const registerReducer = (tag: string, fn: (state: S, action: A) => S): void => {\n if (reducerMap.has(tag)) {\n // Duplicate registration: throw a config error with extra context; catchAllCause emits diagnostics.\n throw ReducerDiagnostics.makeReducerError('ReducerDuplicateError', tag, optionsModuleId)\n }\n if (dispatchedTags.has(tag)) {\n // Registering after the tag has already been dispatched is a risky config; surfaced via a custom error type for diagnostics.\n throw ReducerDiagnostics.makeReducerError('ReducerLateRegistrationError', tag, optionsModuleId)\n }\n reducerMap.set(tag, fn)\n }\n\n const applyPrimaryReducer = (action: A) => {\n const tag = resolveActionTag(action)\n if (tag == null || reducerMap.size === 0) {\n return Effect.void\n }\n const tagKey = tag.length > 0 ? tag : 'unknown'\n dispatchedTags.add(tagKey)\n const reducer = reducerMap.get(tagKey)\n if (!reducer) {\n return Effect.void\n }\n\n return readState.pipe(\n Effect.flatMap((prev) =>\n Effect.gen(function* () {\n const patchPaths: Array<StateTransaction.StatePatchPath> = []\n const sink = (path: StateTransaction.StatePatchPath): void => {\n if (typeof path === 'string') {\n if (path.length > 0) patchPaths.push(path)\n return\n }\n if (typeof path === 'number') {\n if (Number.isFinite(path)) patchPaths.push(Math.floor(path))\n return\n }\n if (path.length > 0) patchPaths.push(path)\n }\n\n const next = (reducer as any)(prev, action, sink) as S\n\n // No-op reducer: avoid dirty evidence to prevent redundant converge/validate full paths.\n if (Object.is(next, prev)) {\n return\n }\n\n // Prefer the traceable in-transaction path:\n // - If the reducer provides patchPaths (e.g. generated by Logix.Module.Reducer.mutate), record field-level patches.\n // - Otherwise deterministically fall back to dirtyAll (path=\"*\") and emit a migration diagnostic in dev mode.\n if (txnContext.current) {\n if (patchPaths.length > 0) {\n StateTransaction.updateDraft(txnContext, next)\n for (const path of patchPaths) {\n recordStatePatch(path, 'reducer')\n }\n return\n }\n\n StateTransaction.updateDraft(txnContext, next)\n recordStatePatch('*', 'reducer', undefined, next)\n\n if (isDevEnv()) {\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: optionsModuleId,\n instanceId,\n txnSeq: txnContext.current?.txnSeq,\n txnId: txnContext.current?.txnId,\n trigger: txnContext.current?.origin,\n code: 'state_transaction::dirty_all_fallback',\n severity: 'warning',\n message:\n 'Reducer writeback did not provide field-level dirty-set evidence; falling back to dirtyAll scheduling.',\n hint: 'Prefer Logix.Module.Reducer.mutate(...) or $.state.mutate(...) inside the transaction to produce field-level patchPaths.',\n kind: 'dirty_all_fallback:reducer',\n })\n }\n\n return\n }\n\n yield* setStateInternal(next, '*', 'reducer', undefined, next)\n }),\n ),\n )\n }\n\n const makeActionOrigin = (originName: string, action: A): StateTransaction.StateTxnOrigin => ({\n kind: 'action',\n name: originName,\n details: {\n _tag: resolveActionTag(action) ?? 'unknown',\n path: typeof (action as any)?.payload?.path === 'string' ? ((action as any).payload.path as string) : undefined,\n op: (() => {\n const tag = resolveActionTag(action) ?? ''\n if (tag.includes('Remove') || tag.includes('remove')) return 'remove'\n if (\n tag.includes('Append') ||\n tag.includes('Prepend') ||\n tag.includes('Insert') ||\n tag.includes('Swap') ||\n tag.includes('Move') ||\n tag.includes('append') ||\n tag.includes('prepend') ||\n tag.includes('insert') ||\n tag.includes('swap') ||\n tag.includes('move')\n ) {\n return 'insert'\n }\n if (tag.includes('Unset') || tag.includes('unset')) return 'unset'\n return 'set'\n })(),\n },\n })\n\n const dispatchInTransaction = (action: A): Effect.Effect<void> =>\n Effect.gen(function* () {\n // Apply the primary reducer first (may be a no-op).\n yield* applyPrimaryReducer(action)\n\n const actionTag = resolveActionTag(action)\n const actionTagNormalized = typeof actionTag === 'string' && actionTag.length > 0 ? actionTag : 'unknown'\n const unknownAction = declaredActionTags ? !declaredActionTags.has(actionTagNormalized) : false\n\n // Record action dispatch (for Devtools/diagnostics).\n yield* Debug.record({\n type: 'action:dispatch',\n moduleId: optionsModuleId,\n action,\n actionTag: actionTagNormalized,\n ...(unknownAction ? { unknownAction: true } : {}),\n instanceId,\n txnSeq: txnContext.current?.txnSeq,\n txnId: txnContext.current?.txnId,\n })\n\n // actionsWithMeta$: provides stable txnSeq/txnId anchors for higher-level subscriptions (e.g. Process).\n const current = txnContext.current\n if (current) {\n const meta: StateCommitMeta = {\n txnSeq: current.txnSeq,\n txnId: current.txnId,\n commitMode: ((current as any).commitMode ?? 'normal') as StateCommitMode,\n priority: ((current as any).priority ?? 'normal') as StateCommitPriority,\n originKind: current.origin.kind,\n originName: current.origin.name,\n }\n yield* PubSub.publish(actionCommitHub, { value: action, meta })\n }\n })\n\n const runDispatch = (action: A): Effect.Effect<void> =>\n runOperation(\n 'action',\n 'action:dispatch',\n {\n payload: action,\n meta: { moduleId: optionsModuleId, instanceId },\n },\n runWithStateTransaction(makeActionOrigin('dispatch', action), () => dispatchInTransaction(action)),\n ).pipe(Effect.asVoid)\n\n const runDispatchLowPriority = (action: A): Effect.Effect<void> =>\n runOperation(\n 'action',\n 'action:dispatchLowPriority',\n {\n payload: action,\n meta: { moduleId: optionsModuleId, instanceId },\n },\n runWithStateTransaction(makeActionOrigin('dispatchLowPriority', action), () =>\n Effect.gen(function* () {\n if (txnContext.current) {\n ;(txnContext.current as any).commitMode = 'lowPriority' as StateCommitMode\n ;(txnContext.current as any).priority = 'low' as StateCommitPriority\n }\n yield* dispatchInTransaction(action)\n }),\n ),\n ).pipe(Effect.asVoid)\n\n const runDispatchBatch = (actions: ReadonlyArray<A>): Effect.Effect<void> => {\n if (actions.length === 0) return Effect.void\n\n return runOperation(\n 'action',\n 'action:dispatchBatch',\n {\n payload: actions,\n meta: { moduleId: optionsModuleId, instanceId },\n },\n runWithStateTransaction({ kind: 'action', name: 'dispatchBatch', details: { count: actions.length } }, () =>\n Effect.gen(function* () {\n if (txnContext.current) {\n ;(txnContext.current as any).commitMode = 'batch' as StateCommitMode\n ;(txnContext.current as any).priority = 'normal' as StateCommitPriority\n }\n for (const action of actions) {\n yield* dispatchInTransaction(action)\n }\n }),\n ),\n ).pipe(Effect.asVoid)\n }\n\n const publishWithPressureDiagnostics = (triggerName: string, publish: Effect.Effect<unknown>): Effect.Effect<void> =>\n Effect.gen(function* () {\n const startedAt = Date.now()\n yield* publish\n const elapsedMs = Date.now() - startedAt\n\n // fast-path: treat 0ms as \"no backpressure wait observed\" to avoid parsing policy per dispatch.\n if (elapsedMs <= 0) {\n return\n }\n\n const policy = yield* resolveConcurrencyPolicy()\n yield* diagnostics.emitPressureIfNeeded({\n policy,\n trigger: { kind: 'actionHub', name: triggerName },\n saturatedDurationMs: elapsedMs,\n })\n })\n\n return {\n registerReducer,\n // Note: publish is a lossless/backpressure channel and may wait.\n // Must run outside the transaction window (FR-012) and must not block the txnQueue consumer fiber (avoid deadlock).\n dispatch: (action) =>\n enqueueTransaction(runDispatch(action)).pipe(\n Effect.zipRight(publishWithPressureDiagnostics('publish', PubSub.publish(actionHub, action))),\n ),\n dispatchBatch: (actions) =>\n enqueueTransaction(runDispatchBatch(actions)).pipe(\n Effect.zipRight(publishWithPressureDiagnostics('publishAll', PubSub.publishAll(actionHub, actions))),\n ),\n dispatchLowPriority: (action) =>\n enqueueTransaction(runDispatchLowPriority(action)).pipe(\n Effect.zipRight(publishWithPressureDiagnostics('publish', PubSub.publish(actionHub, action))),\n ),\n }\n}\n","import { Cause, Chunk, Effect } from 'effect'\nimport * as Debug from './DebugSink.js'\n\n/**\n * Reducer diagnostic error types:\n * - ReducerDuplicateError: multiple primary reducers registered for the same tag.\n * - ReducerLateRegistrationError: reducer registered after actions with this tag have already been dispatched.\n *\n * These errors are internal to Runtime and are converted into Debug diagnostic events in the catch phase.\n */\nexport interface ReducerDiagnosticError extends Error {\n readonly _tag: 'ReducerDuplicateError' | 'ReducerLateRegistrationError'\n readonly tag: string\n readonly moduleId?: string\n}\n\nexport const makeReducerError = (\n _tag: ReducerDiagnosticError['_tag'],\n tag: string,\n moduleId?: string,\n): ReducerDiagnosticError =>\n Object.assign(\n new Error(\n _tag === 'ReducerDuplicateError'\n ? `[ModuleRuntime] Duplicate primary reducer for tag \"${tag}\". Each action tag must have at most one primary reducer.`\n : `[ModuleRuntime] Late primary reducer registration for tag \"${tag}\". Reducers must be registered before the first dispatch of this tag.`,\n ),\n {\n _tag,\n tag,\n moduleId,\n },\n ) as ReducerDiagnosticError\n\n/**\n * Extracts Reducer diagnostic errors from a Logic-forked Cause and emits them as Debug events.\n *\n * Notes:\n * - Emits diagnostic events only when ReducerDiagnosticError is present.\n * - moduleId prefers the error object's moduleId, falling back to the caller-provided moduleId.\n */\nexport const emitDiagnosticsFromCause = (\n cause: Cause.Cause<unknown>,\n moduleIdFromContext?: string,\n): Effect.Effect<void, never, any> =>\n Effect.sync(() => {\n const defects = Chunk.toReadonlyArray(Cause.defects(cause))\n\n let duplicate: ReducerDiagnosticError | undefined\n let late: ReducerDiagnosticError | undefined\n\n for (const defect of defects) {\n if (!defect || typeof defect !== 'object') continue\n const error = defect as any\n if (error._tag === 'ReducerDuplicateError') {\n duplicate = error as ReducerDiagnosticError\n } else if (error._tag === 'ReducerLateRegistrationError') {\n late = error as ReducerDiagnosticError\n }\n }\n\n const effects: Array<Effect.Effect<void>> = []\n\n if (duplicate) {\n effects.push(\n Debug.record({\n type: 'diagnostic',\n moduleId: duplicate.moduleId ?? moduleIdFromContext,\n code: 'reducer::duplicate',\n severity: 'error',\n message: `Primary reducer for tag \"${duplicate.tag}\" is already registered and cannot be redefined.`,\n hint: 'Ensure each Action tag defines a single primary reducer. If it is defined in both Module.reducers and $.reducer, keep the Module.reducers version or merge into one definition.',\n actionTag: duplicate.tag,\n }),\n )\n }\n\n if (late) {\n effects.push(\n Debug.record({\n type: 'diagnostic',\n moduleId: late.moduleId ?? moduleIdFromContext,\n code: 'reducer::late_registration',\n severity: 'error',\n message: `Primary reducer for tag \"${late.tag}\" was registered after actions with this tag had already been dispatched.`,\n hint: 'Move this reducer to Module.make({ reducers }), or ensure $.reducer(\"tag\", ...) runs before the first dispatch.',\n actionTag: late.tag,\n }),\n )\n }\n\n if (effects.length === 0) {\n return Effect.void\n }\n\n let combined: Effect.Effect<void> = Effect.void\n for (const eff of effects) {\n combined = combined.pipe(Effect.zipRight(eff))\n }\n return combined\n }).pipe(Effect.flatten)\n","import { Effect, Stream } from 'effect'\nimport * as Debug from './DebugSink.js'\nimport { toSerializableErrorSummary } from './errorSummary.js'\n\ntype Phase = 'setup' | 'run'\n\ntype AnyEffectHandler = (payload: unknown) => Effect.Effect<void, any, any>\n\ntype HandlerEntry = {\n readonly actionTag: string\n readonly sourceKey: string\n readonly handler: AnyEffectHandler\n readonly phase: Phase\n readonly logicUnitId: string\n readonly logicUnitLabel: string\n readonly logicUnitPath?: string\n}\n\ntype LogicUnitState = {\n nextHandlerSeq: number\n handlerIds: WeakMap<AnyEffectHandler, string>\n}\n\ntype ActionTagState = {\n readonly handlers: Map<string, HandlerEntry>\n watcherStarted: boolean\n}\n\nconst resolveActionTag = (action: unknown): string | undefined => {\n const tag = (action as any)?._tag\n if (typeof tag === 'string' && tag.length > 0) return tag\n const type = (action as any)?.type\n if (typeof type === 'string' && type.length > 0) return type\n if (tag != null) return String(tag)\n if (type != null) return String(type)\n return undefined\n}\n\nconst matchesActionTag = (action: unknown, actionTag: string): boolean => {\n const tag = resolveActionTag(action)\n return tag === actionTag\n}\n\nconst getOrCreateLogicUnitState = (states: Map<string, LogicUnitState>, logicUnitId: string): LogicUnitState => {\n const existing = states.get(logicUnitId)\n if (existing) return existing\n const next: LogicUnitState = { nextHandlerSeq: 0, handlerIds: new WeakMap() }\n states.set(logicUnitId, next)\n return next\n}\n\nconst getOrAssignHandlerId = (state: LogicUnitState, handler: AnyEffectHandler): string => {\n const existing = state.handlerIds.get(handler)\n if (existing) return existing\n state.nextHandlerSeq += 1\n const id = `h${state.nextHandlerSeq}`\n state.handlerIds.set(handler, id)\n return id\n}\n\nexport type RegisterEffectArgs = {\n readonly actionTag: string\n readonly handler: AnyEffectHandler\n readonly phase: Phase\n readonly logicUnit?: {\n readonly logicUnitId: string\n readonly logicUnitLabel: string\n readonly path?: string\n }\n}\n\nexport const makeEffectsRegistry = (args: {\n readonly moduleId: string | undefined\n readonly instanceId: string\n readonly actions$: Stream.Stream<unknown>\n}): {\n readonly registerEffect: (\n params: RegisterEffectArgs,\n ) => Effect.Effect<{ readonly sourceKey: string; readonly duplicate: boolean }, never, any>\n} => {\n const { moduleId, instanceId, actions$ } = args\n\n const logicUnitStates = new Map<string, LogicUnitState>()\n const tagStates = new Map<string, ActionTagState>()\n\n const getOrCreateTagState = (actionTag: string): ActionTagState => {\n const existing = tagStates.get(actionTag)\n if (existing) return existing\n const next: ActionTagState = { handlers: new Map(), watcherStarted: false }\n tagStates.set(actionTag, next)\n return next\n }\n\n const startWatcherIfNeeded = (actionTag: string, state: ActionTagState): Effect.Effect<void, never, any> => {\n if (state.watcherStarted) return Effect.void\n state.watcherStarted = true\n\n const program = Stream.runForEach(actions$.pipe(Stream.filter((a) => matchesActionTag(a, actionTag))), (action) =>\n Effect.gen(function* () {\n const entries = Array.from(state.handlers.values())\n if (entries.length === 0) return\n\n const payload = (action as any)?.payload\n\n yield* Effect.forEach(\n entries,\n (entry) =>\n Effect.forkScoped(\n Effect.gen(function* () {\n const exit = yield* Effect.exit(entry.handler(payload))\n if (exit._tag === 'Success') return\n\n const { errorSummary, downgrade } = toSerializableErrorSummary(exit.cause)\n const downgradeHint = downgrade ? ` (downgrade=${downgrade})` : ''\n\n yield* Debug.record({\n type: 'diagnostic',\n moduleId,\n instanceId,\n code: 'effects::handler_failure',\n severity: 'error',\n message: `Effect handler failed for actionTag=\"${entry.actionTag}\" sourceKey=\"${entry.sourceKey}\".${downgradeHint}`,\n hint: `${errorSummary.name ? `${errorSummary.name}: ` : ''}${errorSummary.message}`,\n actionTag: entry.actionTag,\n kind: 'effect_handler_failure',\n trigger: {\n kind: 'effect',\n name: 'handler',\n details: {\n actionTag: entry.actionTag,\n sourceKey: entry.sourceKey,\n logicUnitId: entry.logicUnitId,\n },\n },\n })\n }),\n ),\n { discard: true },\n )\n }),\n ).pipe(\n Effect.catchAllCause((cause) =>\n Debug.record({\n type: 'diagnostic',\n moduleId,\n instanceId,\n code: 'effects::watcher_crashed',\n severity: 'error',\n message: `Effect watcher crashed for actionTag=\"${actionTag}\".`,\n hint: toSerializableErrorSummary(cause).errorSummary.message,\n actionTag,\n kind: 'effect_watcher_crashed',\n }),\n ),\n )\n\n return Effect.forkScoped(program).pipe(Effect.asVoid)\n }\n\n const registerEffect = (params: RegisterEffectArgs) =>\n Effect.gen(function* () {\n const actionTag = params.actionTag\n const handler = params.handler\n\n const logicUnitId = params.logicUnit?.logicUnitId ?? 'unknown'\n const logicUnitLabel = params.logicUnit?.logicUnitLabel ?? `logicUnit:${logicUnitId}`\n const logicUnitPath = params.logicUnit?.path\n\n const unitState = getOrCreateLogicUnitState(logicUnitStates, logicUnitId)\n const handlerId = getOrAssignHandlerId(unitState, handler)\n const sourceKey = `${logicUnitId}::${handlerId}`\n\n const tagState = getOrCreateTagState(actionTag)\n\n const duplicate = tagState.handlers.has(sourceKey)\n if (duplicate) {\n yield* Debug.record({\n type: 'diagnostic',\n moduleId,\n instanceId,\n code: 'effects::duplicate_registration',\n severity: 'warning',\n message: `Duplicate effect registration ignored for actionTag=\"${actionTag}\" sourceKey=\"${sourceKey}\".`,\n hint:\n 'The runtime de-duplicates effect handlers by (actionTag, sourceKey). ' +\n 'If you see this unexpectedly, check repeated setup registration or accidental double-mounting.',\n actionTag,\n kind: 'effect_duplicate_registration',\n trigger: {\n kind: 'effect',\n name: 'register',\n details: {\n actionTag,\n sourceKey,\n phase: params.phase,\n logicUnitId,\n logicUnitLabel,\n logicUnitPath,\n },\n },\n })\n return { sourceKey, duplicate: true } as const\n }\n\n tagState.handlers.set(sourceKey, {\n actionTag,\n sourceKey,\n handler,\n phase: params.phase,\n logicUnitId,\n logicUnitLabel,\n logicUnitPath,\n })\n\n if (params.phase === 'run') {\n yield* Debug.record({\n type: 'diagnostic',\n moduleId,\n instanceId,\n code: 'effects::dynamic_registration',\n severity: 'warning',\n message: `Effect registered in run phase for actionTag=\"${actionTag}\" sourceKey=\"${sourceKey}\".`,\n hint: 'Run-phase registration only affects future actions; prefer registering effects during setup for deterministic behavior.',\n actionTag,\n kind: 'effect_dynamic_registration',\n trigger: {\n kind: 'effect',\n name: 'register:run',\n details: { actionTag, sourceKey, logicUnitId, logicUnitLabel, logicUnitPath },\n },\n })\n }\n\n yield* startWatcherIfNeeded(actionTag, tagState)\n return { sourceKey, duplicate: false } as const\n })\n\n return { registerEffect }\n}\n","import { Cause, Effect, Exit, Fiber, FiberRef, Option, PubSub, Queue, SubscriptionRef } from 'effect'\nimport type { StateChangeWithMeta, StateCommitMeta, StateCommitMode, StateCommitPriority } from './module.js'\nimport type {\n StateTraitProgram,\n TraitConvergeGenerationEvidence,\n TraitConvergePlanCacheEvidence,\n} from '../../state-trait/model.js'\nimport type { DirtyAllReason, DirtySet } from '../../field-path.js'\nimport * as Debug from './DebugSink.js'\nimport * as StateTransaction from './StateTransaction.js'\nimport * as TaskRunner from './TaskRunner.js'\nimport * as StateTraitConverge from '../../state-trait/converge.js'\nimport * as StateTraitValidate from '../../state-trait/validate.js'\nimport * as StateTraitSource from '../../state-trait/source.js'\nimport { getConvergeStaticIrDigest } from '../../state-trait/converge-ir.js'\nimport type * as RowId from '../../state-trait/rowid.js'\nimport type { RunOperation } from './ModuleRuntime.operation.js'\nimport type { ResolvedTraitConvergeConfig } from './ModuleRuntime.traitConvergeConfig.js'\nimport type { EnqueueTransaction } from './ModuleRuntime.txnQueue.js'\nimport { StateTransactionOverridesTag, type StateTransactionOverrides } from './env.js'\n\nconst DIRTY_ALL_SET_STATE_HINT = Symbol.for('@logixjs/core/dirtyAllSetStateHint')\n\nconst readDeferredFlushSlice = (details: unknown): { readonly start: number; readonly end: number } | undefined => {\n if (!details || typeof details !== 'object') return undefined\n const raw = details as any\n const start = raw.sliceStart\n const end = raw.sliceEnd\n if (typeof start !== 'number' || typeof end !== 'number') return undefined\n if (!Number.isFinite(start) || !Number.isFinite(end)) return undefined\n const s = Math.floor(start)\n const e = Math.floor(end)\n if (s < 0 || e <= s) return undefined\n return { start: s, end: e }\n}\n\nexport type RunWithStateTransaction = <E>(\n origin: StateTransaction.StateTxnOrigin,\n body: () => Effect.Effect<void, E, never>,\n) => Effect.Effect<void, E, never>\n\nexport type SetStateInternal<S> = (\n next: S,\n path: StateTransaction.StatePatchPath,\n reason: StateTransaction.PatchReason,\n from?: unknown,\n to?: unknown,\n traitNodeId?: string,\n stepId?: number,\n) => Effect.Effect<void>\n\nexport type TraitRuntimeAccess = {\n readonly getProgram: () => StateTraitProgram<any> | undefined\n readonly getConvergePlanCache: () => StateTraitConverge.ConvergePlanCache | undefined\n readonly getConvergeGeneration: () => TraitConvergeGenerationEvidence\n readonly getPendingCacheMissReason: () => TraitConvergePlanCacheEvidence['missReason'] | undefined\n readonly setPendingCacheMissReason: (next: TraitConvergePlanCacheEvidence['missReason'] | undefined) => void\n readonly rowIdStore: RowId.RowIdStore\n readonly getListConfigs: () => ReadonlyArray<RowId.ListConfig>\n}\n\nexport type TraitConvergeTimeSlicingState = {\n readonly signal: Queue.Queue<void>\n readonly backlogDirtyPaths: Set<StateTransaction.StatePatchPath>\n backlogDirtyAllReason?: DirtyAllReason\n firstPendingAtMs: number | undefined\n lastTouchedAtMs: number | undefined\n latestConvergeConfig: ResolvedTraitConvergeConfig | undefined\n capturedContext:\n | {\n readonly runtimeLabel: string | undefined\n readonly diagnosticsLevel: Debug.DiagnosticsLevel\n readonly debugSinks: ReadonlyArray<Debug.Sink>\n readonly overrides: StateTransactionOverrides | undefined\n }\n | undefined\n}\n\nexport const makeTransactionOps = <S>(args: {\n readonly moduleId: string\n readonly optionsModuleId: string | undefined\n readonly instanceId: string\n readonly stateRef: SubscriptionRef.SubscriptionRef<S>\n readonly commitHub: PubSub.PubSub<StateChangeWithMeta<S>>\n readonly shouldPublishCommitHub?: () => boolean\n readonly recordStatePatch: (\n path: StateTransaction.StatePatchPath | undefined,\n reason: StateTransaction.PatchReason,\n from?: unknown,\n to?: unknown,\n traitNodeId?: string,\n stepId?: number,\n ) => void\n readonly onCommit?: (args: {\n readonly state: S\n readonly meta: StateCommitMeta\n readonly dirtySet: DirtySet\n readonly diagnosticsLevel: Debug.DiagnosticsLevel\n }) => Effect.Effect<void>\n readonly enqueueTransaction: EnqueueTransaction\n readonly runOperation: RunOperation\n readonly txnContext: StateTransaction.StateTxnContext<S>\n readonly traitConvergeTimeSlicing: TraitConvergeTimeSlicingState\n readonly traitRuntime: TraitRuntimeAccess\n readonly resolveTraitConvergeConfig: () => Effect.Effect<ResolvedTraitConvergeConfig, never, never>\n readonly isDevEnv: () => boolean\n readonly maxTxnHistory: number\n readonly txnHistory: Array<StateTransaction.StateTransaction<S>>\n readonly txnById: Map<string, StateTransaction.StateTransaction<S>>\n}): {\n readonly readState: Effect.Effect<S>\n readonly setStateInternal: SetStateInternal<S>\n readonly runWithStateTransaction: RunWithStateTransaction\n readonly __logixGetExecVmAssemblyEvidence?: () => unknown\n} => {\n const {\n moduleId,\n optionsModuleId,\n instanceId,\n stateRef,\n commitHub,\n shouldPublishCommitHub,\n recordStatePatch,\n onCommit,\n enqueueTransaction,\n runOperation,\n txnContext,\n traitConvergeTimeSlicing,\n traitRuntime,\n resolveTraitConvergeConfig,\n isDevEnv,\n maxTxnHistory,\n txnHistory,\n txnById,\n } = args\n\n /**\n * Read current state:\n * - If a transaction is active, return the transaction draft.\n * - Otherwise, fall back to the underlying SubscriptionRef snapshot.\n */\n const readState: Effect.Effect<S> = Effect.gen(function* () {\n const inTxn = yield* FiberRef.get(TaskRunner.inSyncTransactionFiber)\n const current = txnContext.current\n if (inTxn && current) return current.draft\n return yield* SubscriptionRef.get(stateRef)\n })\n\n /**\n * runWithStateTransaction:\n * - Open a transaction for a single logic entrypoint (dispatch / source-refresh / future extensions).\n * - Aggregate all state writes within body; at the end commit once and emit a state:update debug event.\n * - The caller must ensure body does not cross long IO boundaries (see the spec constraints on the transaction window).\n */\n const runWithStateTransaction: RunWithStateTransaction = <E2>(\n origin: StateTransaction.StateTxnOrigin,\n body: () => Effect.Effect<void, E2, never>,\n ): Effect.Effect<void, E2, never> =>\n Effect.locally(\n TaskRunner.inSyncTransactionFiber,\n true,\n )(\n Effect.gen(function* () {\n const baseState = yield* SubscriptionRef.get(stateRef)\n\n StateTransaction.beginTransaction(txnContext, origin, baseState)\n const txnCurrent: any = txnContext.current\n txnCurrent.stateTraitValidateRequests = []\n txnCurrent.commitMode = 'normal' as StateCommitMode\n txnCurrent.priority = 'normal' as StateCommitPriority\n\n const txnId = txnContext.current?.txnId\n const txnSeq = txnContext.current?.txnSeq\n\n TaskRunner.enterSyncTransaction()\n let exit: Exit.Exit<void, E2> | undefined\n\n try {\n exit = yield* Effect.exit(\n Effect.locally(\n Debug.currentTxnId,\n txnId,\n )(\n Effect.gen(function* () {\n // Trait summary inside the transaction window (for devtools/diagnostics).\n let traitSummary: unknown | undefined\n\n // Execute the actual logic inside the transaction window (reducer / watcher writeback / traits, etc.).\n if (isDevEnv()) {\n const bodyFiber = yield* Effect.fork(body())\n\n const YIELD_BUDGET = 5\n let polled = yield* Fiber.poll(bodyFiber)\n for (let i = 0; i < YIELD_BUDGET && Option.isNone(polled); i++) {\n yield* Effect.yieldNow()\n polled = yield* Fiber.poll(bodyFiber)\n }\n\n if (Option.isNone(polled)) {\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: optionsModuleId,\n instanceId,\n txnSeq,\n txnId,\n trigger: origin,\n code: 'state_transaction::async_escape',\n severity: 'error',\n message:\n 'Synchronous StateTransaction body escaped the transaction window (async/await detected).',\n hint: 'No IO/await/sleep/promises inside the transaction window; use run*Task (pending → IO → writeback) or move async logic outside the transaction.',\n kind: 'async_in_transaction',\n })\n }\n\n const bodyExit = yield* Fiber.await(bodyFiber)\n yield* Exit.match(bodyExit, {\n onFailure: (cause) => Effect.failCause(cause),\n onSuccess: () => Effect.void,\n })\n } else {\n yield* body()\n }\n\n const stateTraitProgram = traitRuntime.getProgram()\n\n // StateTrait: converge derived fields (computed/link, etc.) before commit to ensure 0/1 commit per window.\n if (stateTraitProgram && txnContext.current) {\n const convergeConfig = yield* resolveTraitConvergeConfig()\n traitConvergeTimeSlicing.latestConvergeConfig = convergeConfig\n const timeSlicingConfig = convergeConfig.traitConvergeTimeSlicing\n const isDeferredFlushTxn = origin.kind === 'trait:deferred_flush'\n const hasDeferredSteps =\n stateTraitProgram.convergeExecIr != null &&\n stateTraitProgram.convergeExecIr.topoOrderDeferredInt32.length > 0\n const canTimeSlice = timeSlicingConfig.enabled === true && hasDeferredSteps\n const schedulingScope: StateTraitConverge.ConvergeContext<any>['schedulingScope'] = isDeferredFlushTxn\n ? 'deferred'\n : canTimeSlice\n ? 'immediate'\n : 'all'\n\n const deferredSlice = isDeferredFlushTxn ? readDeferredFlushSlice(origin.details) : undefined\n const deferredScopeStepIds =\n deferredSlice && stateTraitProgram.convergeExecIr\n ? stateTraitProgram.convergeExecIr.topoOrderDeferredInt32.subarray(\n deferredSlice.start,\n deferredSlice.end,\n )\n : undefined\n\n const convergeExit = yield* Effect.exit(\n StateTraitConverge.convergeInTransaction(\n stateTraitProgram as any,\n {\n moduleId: optionsModuleId,\n instanceId,\n txnSeq,\n txnId,\n configScope: convergeConfig.configScope,\n now: txnContext.config.now,\n budgetMs: convergeConfig.traitConvergeBudgetMs,\n decisionBudgetMs: convergeConfig.traitConvergeDecisionBudgetMs,\n requestedMode: deferredScopeStepIds ? 'full' : convergeConfig.traitConvergeMode,\n schedulingScope,\n ...(deferredScopeStepIds ? { schedulingScopeStepIds: deferredScopeStepIds } : {}),\n dirtyAllReason: (txnContext.current as any)?.dirtyAllReason,\n dirtyPaths: txnContext.current?.dirtyPathIds,\n allowInPlaceDraft:\n txnContext.current != null &&\n !Object.is(txnContext.current.draft, txnContext.current.baseState),\n planCache: traitRuntime.getConvergePlanCache(),\n generation: traitRuntime.getConvergeGeneration(),\n cacheMissReasonHint: traitRuntime.getPendingCacheMissReason(),\n getDraft: () => txnContext.current!.draft as any,\n setDraft: (next) => {\n StateTransaction.updateDraft(txnContext, next as any)\n },\n recordPatch: (path, reason, from, to, traitNodeId, stepId) =>\n recordStatePatch(path, reason, from, to, traitNodeId, stepId),\n } as StateTraitConverge.ConvergeContext<any>,\n ),\n )\n\n if (traitRuntime.getPendingCacheMissReason() === 'generation_bumped') {\n traitRuntime.setPendingCacheMissReason(undefined)\n }\n\n if (convergeExit._tag === 'Failure') {\n const errors = [...Cause.failures(convergeExit.cause), ...Cause.defects(convergeExit.cause)]\n const configError = errors.find(\n (err): err is StateTraitConverge.StateTraitConfigError =>\n err instanceof StateTraitConverge.StateTraitConfigError,\n )\n\n if (configError) {\n const fields = configError.fields ?? []\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: optionsModuleId,\n instanceId,\n txnSeq,\n txnId,\n trigger: origin,\n code: 'state_trait::config_error',\n severity: 'error',\n message: configError.message,\n hint:\n configError.code === 'CYCLE_DETECTED'\n ? `computed/link graph has a cycle: ${fields.join(', ')}`\n : `multiple writers detected for the same field: ${fields.join(', ')}`,\n kind: `state_trait_config_error:${configError.code}`,\n })\n }\n\n return yield* Effect.failCause(convergeExit.cause)\n }\n\n const outcome = convergeExit.value\n\n const dirtyAllReasonForDeferred: DirtyAllReason | undefined = (txnContext.current as any)?.dirtyAllReason\n const dirtyPathsSnapshotForDeferred: ReadonlyArray<StateTransaction.StatePatchPath> | undefined =\n canTimeSlice && !isDeferredFlushTxn && !dirtyAllReasonForDeferred\n ? Array.from(txnContext.current.dirtyPathIds)\n : undefined\n\n if (\n canTimeSlice &&\n !isDeferredFlushTxn &&\n outcome._tag !== 'Degraded' &&\n (dirtyAllReasonForDeferred != null ||\n (dirtyPathsSnapshotForDeferred != null && dirtyPathsSnapshotForDeferred.length > 0))\n ) {\n const nowMs = Date.now()\n traitConvergeTimeSlicing.firstPendingAtMs = traitConvergeTimeSlicing.firstPendingAtMs ?? nowMs\n traitConvergeTimeSlicing.lastTouchedAtMs = nowMs\n\n if (dirtyAllReasonForDeferred != null) {\n traitConvergeTimeSlicing.backlogDirtyAllReason = dirtyAllReasonForDeferred\n traitConvergeTimeSlicing.backlogDirtyPaths.clear()\n } else if (!traitConvergeTimeSlicing.backlogDirtyAllReason && dirtyPathsSnapshotForDeferred) {\n for (const p of dirtyPathsSnapshotForDeferred) {\n traitConvergeTimeSlicing.backlogDirtyPaths.add(p)\n }\n }\n\n const runtimeLabel = yield* FiberRef.get(Debug.currentRuntimeLabel)\n const diagnosticsLevel = yield* FiberRef.get(Debug.currentDiagnosticsLevel)\n const debugSinks = yield* FiberRef.get(Debug.currentDebugSinks)\n const overridesOpt = yield* Effect.serviceOption(StateTransactionOverridesTag)\n const overrides = Option.isSome(overridesOpt) ? overridesOpt.value : undefined\n\n traitConvergeTimeSlicing.capturedContext = {\n runtimeLabel,\n diagnosticsLevel,\n debugSinks,\n overrides,\n }\n\n yield* Queue.offer(traitConvergeTimeSlicing.signal, undefined)\n }\n\n traitSummary = outcome.decision ? { converge: outcome.decision } : undefined\n\n if (outcome._tag === 'Degraded') {\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: optionsModuleId,\n instanceId,\n txnSeq,\n code: outcome.reason === 'budget_exceeded' ? 'trait::budget_exceeded' : 'trait::runtime_error',\n severity: 'warning',\n message:\n outcome.reason === 'budget_exceeded'\n ? 'Trait converge exceeded budget; derived fields are frozen for this operation window.'\n : 'Trait converge failed at runtime; derived fields are frozen for this operation window.',\n hint:\n outcome.reason === 'budget_exceeded'\n ? 'Check whether computed/check contains heavy computation; move it to source/task or split into cacheable derived pieces.'\n : 'Check computed/link/check for invalid inputs or impure logic; add equals or guards if needed.',\n kind: 'trait_degraded',\n })\n }\n }\n\n // TraitLifecycle scoped validate: flush after converge so validation reads the latest derived state.\n if (stateTraitProgram && txnContext.current) {\n const dedupeScopedValidateRequests = (\n requests: ReadonlyArray<StateTraitValidate.ScopedValidateRequest>,\n ): ReadonlyArray<StateTraitValidate.ScopedValidateRequest> => {\n if (requests.length <= 1) return requests\n\n const priorities: Record<StateTraitValidate.ValidateMode, number> = {\n submit: 4,\n blur: 3,\n valueChange: 2,\n manual: 1,\n }\n\n let bestMode: StateTraitValidate.ValidateMode = 'manual'\n let bestP = priorities[bestMode]\n let hasRoot = false\n\n for (const r of requests) {\n const p = priorities[r.mode]\n if (p > bestP) {\n bestP = p\n bestMode = r.mode\n }\n if (r.target.kind === 'root') {\n hasRoot = true\n }\n }\n\n if (hasRoot) {\n return [{ mode: bestMode, target: { kind: 'root' } }]\n }\n\n const makeKey = (target: StateTraitValidate.ValidateTarget): string => {\n switch (target.kind) {\n case 'field':\n return `field:${target.path}`\n case 'list':\n return `list:${target.path}`\n case 'item':\n return `item:${target.path}:${target.index}:${target.field ?? ''}`\n case 'root':\n return 'root'\n }\n }\n\n const order: Array<string> = []\n const byKey = new Map<string, StateTraitValidate.ScopedValidateRequest>()\n\n for (const req of requests) {\n const key = makeKey(req.target)\n const existing = byKey.get(key)\n if (!existing) {\n byKey.set(key, req)\n order.push(key)\n continue\n }\n if (priorities[req.mode] > priorities[existing.mode]) {\n byKey.set(key, { ...existing, mode: req.mode })\n }\n }\n\n return order.map((k) => byKey.get(k)!).filter(Boolean)\n }\n\n const pending = (txnContext.current as any).stateTraitValidateRequests as\n | ReadonlyArray<StateTraitValidate.ScopedValidateRequest>\n | undefined\n\n if (pending && pending.length > 0) {\n const deduped = dedupeScopedValidateRequests(pending)\n yield* StateTraitValidate.validateInTransaction(\n stateTraitProgram as any,\n {\n moduleId: optionsModuleId,\n instanceId,\n txnSeq: txnContext.current!.txnSeq,\n txnId: txnContext.current!.txnId,\n origin: txnContext.current!.origin,\n rowIdStore: traitRuntime.rowIdStore,\n listConfigs: traitRuntime.getListConfigs(),\n getDraft: () => txnContext.current!.draft as any,\n setDraft: (next) => {\n StateTransaction.updateDraft(txnContext, next as any)\n },\n recordPatch: (path, reason, from, to, traitNodeId, stepId) =>\n recordStatePatch(path, reason, from, to, traitNodeId, stepId),\n } as StateTraitValidate.ValidateContext<any>,\n deduped,\n )\n }\n }\n\n // If a source key becomes empty, synchronously recycle it back to idle (avoid tearing / ghost data).\n if (stateTraitProgram && txnContext.current) {\n yield* StateTraitSource.syncIdleInTransaction(\n stateTraitProgram as any,\n {\n moduleId: optionsModuleId,\n instanceId,\n getDraft: () => txnContext.current!.draft as any,\n setDraft: (next) => {\n StateTransaction.updateDraft(txnContext, next as any)\n },\n recordPatch: (path, reason, from, to, traitNodeId, stepId) =>\n recordStatePatch(path, reason, from, to, traitNodeId, stepId),\n } as StateTraitSource.SourceSyncContext<any>,\n )\n }\n\n // Commit the transaction: write to the underlying state once, and emit a single aggregated state:update event.\n yield* runOperation(\n 'state',\n 'state:update',\n { meta: { moduleId: optionsModuleId, instanceId } },\n Effect.gen(function* () {\n const replayEvent = (txnContext.current as any)?.lastReplayEvent as unknown\n const commitMode = ((txnContext.current as any)?.commitMode ?? 'normal') as StateCommitMode\n const priority = ((txnContext.current as any)?.priority ?? 'normal') as StateCommitPriority\n const dirtyAllSetStateHint = !!(txnContext.current as any)\n ? (txnContext.current as any)[DIRTY_ALL_SET_STATE_HINT] === true\n : false\n const txn = yield* StateTransaction.commit(txnContext, stateRef)\n\n if (txn) {\n const shouldWarnDirtyAllSetState =\n dirtyAllSetStateHint || (txn.origin.kind === 'state' && txn.origin.name === 'setState')\n\n if (shouldWarnDirtyAllSetState && isDevEnv() && (txn.dirtySet as any)?.dirtyAll === true) {\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: optionsModuleId,\n instanceId,\n txnSeq: txn.txnSeq,\n txnId: txn.txnId,\n trigger: txn.origin,\n code: 'state_transaction::dirty_all_fallback',\n severity: 'warning',\n message:\n 'setState/state.update did not provide field-level dirty-set evidence; falling back to dirtyAll scheduling.',\n hint: 'Prefer $.state.mutate(...) or Logix.Module.Reducer.mutate(...) to produce field-level patchPaths; otherwise converge/validate degrades to full-path scheduling.',\n kind: 'dirty_all_fallback:set_state',\n })\n }\n\n // Record txn history: only for dev/test or explicit full instrumentation (devtools/debugging).\n // In production (default light), keep zero retention to avoid turning \"txn history\" into an implicit memory tax.\n if (isDevEnv() || txnContext.config.instrumentation === 'full') {\n txnHistory.push(txn)\n txnById.set(txn.txnId, txn)\n if (txnHistory.length > maxTxnHistory) {\n const oldest = txnHistory.shift()\n if (oldest) {\n txnById.delete(oldest.txnId)\n }\n }\n }\n\n const nextState =\n txn.finalStateSnapshot !== undefined\n ? txn.finalStateSnapshot\n : yield* SubscriptionRef.get(stateRef)\n\n // RowID virtual identity layer: align mappings after each observable commit\n // so in-flight gates and cache reuse remain stable under insert/remove/reorder.\n const listConfigs = traitRuntime.getListConfigs()\n if (listConfigs.length > 0) {\n traitRuntime.rowIdStore.updateAll(nextState as any, listConfigs)\n }\n\n const meta: StateCommitMeta = {\n txnSeq: txn.txnSeq,\n txnId: txn.txnId,\n commitMode,\n priority,\n originKind: txn.origin.kind,\n originName: txn.origin.name,\n }\n\n if (!shouldPublishCommitHub || shouldPublishCommitHub()) {\n yield* PubSub.publish(commitHub, {\n value: nextState,\n meta,\n })\n }\n\n // Perf-sensitive ordering:\n // - In diagnostics=off mode (default for production/perf runs), allow selectorGraph notifications to be published\n // before state:update debug recording so React external store subscribers can start flushing earlier.\n // - In diagnostics=light/full, keep the original ordering so any selector eval trace stays after state:update\n // (preserves a more intuitive txn → selector → render causal chain in devtools).\n const diagnosticsLevel = yield* FiberRef.get(Debug.currentDiagnosticsLevel)\n if (onCommit && diagnosticsLevel === 'off') {\n yield* onCommit({\n state: nextState,\n meta,\n dirtySet: txn.dirtySet,\n diagnosticsLevel,\n })\n }\n\n const debugSinks = yield* FiberRef.get(Debug.currentDebugSinks)\n const shouldRecordStateUpdate = debugSinks.length > 0 && !Debug.isErrorOnlyOnlySinks(debugSinks)\n\n if (shouldRecordStateUpdate) {\n const shouldComputeEvidence = diagnosticsLevel !== 'off'\n\n const staticIrDigest = shouldComputeEvidence\n ? (() => {\n const convergeIr: any = (stateTraitProgram as any)?.convergeIr\n if (!convergeIr || convergeIr.configError) return undefined\n return getConvergeStaticIrDigest(convergeIr)\n })()\n : undefined\n\n const dirtySetEvidence = shouldComputeEvidence\n ? (() => {\n const rootIdsTopK = diagnosticsLevel === 'full' ? 32 : 3\n\n if (txn.dirtySet.dirtyAll) {\n return {\n dirtyAll: true,\n reason: txn.dirtySet.reason ?? 'unknownWrite',\n rootIds: [],\n rootCount: 0,\n keySize: 0,\n keyHash: 0,\n rootIdsTruncated: false,\n }\n }\n\n const fullRootIds = txn.dirtySet.rootIds\n const topK = fullRootIds.slice(0, rootIdsTopK)\n return {\n dirtyAll: false,\n // Keep diff anchors (count/hash/size) for the full set; only truncate the rootIds payload.\n rootIds: topK,\n rootCount: txn.dirtySet.rootCount,\n keySize: txn.dirtySet.keySize,\n keyHash: txn.dirtySet.keyHash,\n rootIdsTruncated: fullRootIds.length > rootIdsTopK,\n }\n })()\n : undefined\n\n yield* Debug.record({\n type: 'state:update',\n moduleId: optionsModuleId,\n state: nextState,\n instanceId,\n txnSeq: txn.txnSeq,\n txnId: txn.txnId,\n staticIrDigest,\n dirtySet: dirtySetEvidence,\n patchCount: txn.patchCount,\n patchesTruncated: txn.patchesTruncated,\n ...(txn.patchesTruncated ? { patchesTruncatedReason: txn.patchesTruncatedReason } : null),\n commitMode,\n priority,\n originKind: txn.origin.kind,\n originName: txn.origin.name,\n traitSummary,\n replayEvent: replayEvent as any,\n })\n }\n\n if (onCommit && diagnosticsLevel !== 'off') {\n yield* onCommit({\n state: nextState,\n meta,\n dirtySet: txn.dirtySet,\n diagnosticsLevel,\n })\n }\n }\n }),\n )\n }),\n ),\n )\n } finally {\n TaskRunner.exitSyncTransaction()\n }\n\n if (exit!._tag === 'Failure') {\n // Always clear the transaction context on failure to avoid leaking into subsequent entrypoints.\n StateTransaction.abort(txnContext)\n return yield* Effect.failCause(exit!.cause)\n }\n }),\n )\n\n /**\n * setStateInternal:\n * - Inside an active transaction: only update the draft and record patches (whole-State granularity), without writing to the underlying Ref.\n * - Outside a transaction: keep legacy behavior, write to SubscriptionRef directly and emit a state:update Debug event.\n *\n * Notes:\n * - When path=\"*\" and field-level evidence is missing, treat it as a dirtyAll-degrade entrypoint: it triggers full converge/validate paths;\n * - Prefer `$.state.mutate(...)` / `Logix.Module.Reducer.mutate(...)` to produce field-level patchPaths;\n * - Any non-trackable write (including path=\"*\") must explicitly degrade (dirtyAll); do not \"ignore *\" when roots exist.\n */\n const setStateInternal: SetStateInternal<S> = (\n next: S,\n path: StateTransaction.StatePatchPath,\n reason: StateTransaction.PatchReason,\n from?: unknown,\n to?: unknown,\n traitNodeId?: string,\n stepId?: number,\n ): Effect.Effect<void> =>\n Effect.gen(function* () {\n const inTxn = yield* FiberRef.get(TaskRunner.inSyncTransactionFiber)\n if (inTxn && txnContext.current) {\n const current: any = txnContext.current\n\n StateTransaction.updateDraft(txnContext, next)\n recordStatePatch(path, reason, from, to, traitNodeId, stepId)\n\n if (path === '*') {\n current[DIRTY_ALL_SET_STATE_HINT] = true\n }\n return\n }\n\n // Writes from non-transaction fibers must be queued to avoid bypassing txnQueue with concurrent updates.\n yield* enqueueTransaction(\n runOperation(\n 'state',\n 'state:update',\n {\n payload: next,\n meta: { moduleId, instanceId },\n },\n runWithStateTransaction(\n {\n kind: 'state',\n name: 'setState',\n },\n () =>\n Effect.sync(() => {\n // baseState is injected by runWithStateTransaction at txn start; we only need to update the draft here.\n StateTransaction.updateDraft(txnContext, next)\n recordStatePatch(path, reason, from, to, traitNodeId, stepId)\n }),\n ),\n ),\n )\n })\n\n const getExecVmAssemblyEvidence = (): unknown => {\n const program: any = traitRuntime.getProgram()\n const convergeIr: any = program?.convergeIr\n if (!convergeIr || convergeIr.configError) return undefined\n\n const digest = getConvergeStaticIrDigest(convergeIr)\n return {\n convergeStaticIrDigest: digest,\n convergeGeneration: convergeIr.generation,\n }\n }\n\n return {\n readState,\n setStateInternal,\n runWithStateTransaction,\n __logixGetExecVmAssemblyEvidence: getExecVmAssemblyEvidence,\n }\n}\n","import type { TraitConvergePlanCacheEvidence } from './model.js'\n\ninterface ConvergePlanCacheEntry {\n readonly hash: number\n readonly rootIds: ReadonlyArray<number>\n planStepIds: Int32Array\n prev?: ConvergePlanCacheEntry\n next?: ConvergePlanCacheEntry\n}\n\nconst rootIdsEquals = (a: ReadonlyArray<number>, b: ReadonlyArray<number>): boolean => {\n if (a.length !== b.length) return false\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false\n }\n return true\n}\n\n/**\n * ConvergePlanCache:\n * - Per-module-instance ExecutionPlan cache (LRU + bounded capacity + stats).\n * - Triggers self-protection under low hit-rate: disable reuse and clear the cache to avoid long-term negative optimization.\n */\nexport class ConvergePlanCache {\n readonly capacity: number\n private readonly buckets = new Map<number, Array<ConvergePlanCacheEntry>>()\n private head?: ConvergePlanCacheEntry\n private tail?: ConvergePlanCacheEntry\n private size_ = 0\n private hits_ = 0\n private misses_ = 0\n private evicts_ = 0\n\n private disabled_ = false\n private disableReason_: TraitConvergePlanCacheEvidence['disableReason'] | undefined\n\n constructor(capacity: number) {\n const next = Math.floor(capacity)\n this.capacity = next > 0 ? next : 0\n }\n\n isDisabled(): boolean {\n return this.disabled_\n }\n\n disable(reason: TraitConvergePlanCacheEvidence['disableReason']): void {\n if (this.disabled_) return\n this.disableInternal(reason)\n }\n\n get(hash: number, rootIds: ReadonlyArray<number>): Int32Array | undefined {\n if (this.capacity <= 0) return undefined\n if (this.disabled_) return undefined\n\n const bucket = this.buckets.get(hash)\n if (!bucket) {\n this.misses_ += 1\n return undefined\n }\n for (const entry of bucket) {\n if (!rootIdsEquals(entry.rootIds, rootIds)) continue\n this.hits_ += 1\n this.touch(entry)\n return entry.planStepIds\n }\n this.misses_ += 1\n return undefined\n }\n\n set(hash: number, rootIds: ReadonlyArray<number>, planStepIds: Int32Array): void {\n if (this.capacity <= 0) {\n return\n }\n if (this.disabled_) {\n return\n }\n\n const bucket = this.buckets.get(hash) ?? []\n for (const entry of bucket) {\n if (!rootIdsEquals(entry.rootIds, rootIds)) continue\n entry.planStepIds = planStepIds\n this.touch(entry)\n if (!this.buckets.has(hash)) this.buckets.set(hash, bucket)\n return\n }\n\n const entry: ConvergePlanCacheEntry = {\n hash,\n rootIds,\n planStepIds,\n }\n bucket.push(entry)\n this.buckets.set(hash, bucket)\n this.attachFront(entry)\n this.size_ += 1\n\n while (this.size_ > this.capacity) {\n this.evictOne()\n }\n\n this.maybeTriggerLowHitRateProtection()\n }\n\n evidence(options: {\n readonly hit: boolean\n readonly keySize?: number\n readonly missReason?: TraitConvergePlanCacheEvidence['missReason']\n }): TraitConvergePlanCacheEvidence {\n return {\n capacity: this.capacity,\n size: this.size_,\n hits: this.hits_,\n misses: this.misses_,\n evicts: this.evicts_,\n hit: options.hit,\n ...(typeof options.keySize === 'number' ? { keySize: options.keySize } : null),\n ...(options.hit ? null : options.missReason ? { missReason: options.missReason } : null),\n ...(this.disabled_\n ? {\n disabled: true,\n disableReason: this.disableReason_ ?? 'unknown',\n }\n : null),\n }\n }\n\n private maybeTriggerLowHitRateProtection(): void {\n if (this.disabled_) return\n if (this.capacity <= 0) return\n\n const total = this.hits_ + this.misses_\n // Only make a call after at least one eviction could have happened.\n if (total < Math.max(64, this.capacity + 1)) return\n\n const hitRate = total > 0 ? this.hits_ / total : 1\n if (hitRate > 0.01) return\n\n this.disable('low_hit_rate')\n }\n\n private disableInternal(reason: TraitConvergePlanCacheEvidence['disableReason']): void {\n this.disabled_ = true\n this.disableReason_ = reason\n this.clearEntries()\n }\n\n private clearEntries(): void {\n this.buckets.clear()\n this.head = undefined\n this.tail = undefined\n this.size_ = 0\n }\n\n private attachFront(entry: ConvergePlanCacheEntry): void {\n entry.prev = undefined\n entry.next = this.head\n if (this.head) {\n this.head.prev = entry\n } else {\n this.tail = entry\n }\n this.head = entry\n }\n\n private detach(entry: ConvergePlanCacheEntry): void {\n const prev = entry.prev\n const next = entry.next\n if (prev) {\n prev.next = next\n } else {\n this.head = next\n }\n if (next) {\n next.prev = prev\n } else {\n this.tail = prev\n }\n entry.prev = undefined\n entry.next = undefined\n }\n\n private touch(entry: ConvergePlanCacheEntry): void {\n if (this.head === entry) return\n this.detach(entry)\n this.attachFront(entry)\n }\n\n private evictOne(): void {\n const entry = this.tail\n if (!entry) return\n\n this.detach(entry)\n const bucket = this.buckets.get(entry.hash)\n if (bucket) {\n const idx = bucket.indexOf(entry)\n if (idx >= 0) bucket.splice(idx, 1)\n if (bucket.length === 0) this.buckets.delete(entry.hash)\n }\n this.size_ = Math.max(0, this.size_ - 1)\n this.evicts_ += 1\n }\n}\n","import type { PatchReason } from '../runtime/core/StateTransaction.js'\nimport type {\n DowngradeReason as ErrorDowngradeReason,\n SerializableErrorSummary,\n} from '../runtime/core/errorSummary.js'\nimport type { DirtyAllReason, FieldPath, FieldPathId } from '../field-path.js'\nimport type {\n TraitConvergeConfigScope,\n TraitConvergeDecisionSummary,\n TraitConvergeGenerationEvidence,\n TraitConvergePlanCacheEvidence,\n TraitConvergeReason,\n TraitConvergeRequestedMode,\n} from './model.js'\nimport type { ConvergePlanCache } from './plan-cache.js'\n\nexport class StateTraitConfigError extends Error {\n readonly _tag = 'StateTraitConfigError'\n\n constructor(\n readonly code: 'CYCLE_DETECTED' | 'MULTIPLE_WRITERS',\n message: string,\n readonly fields: ReadonlyArray<string> = [],\n ) {\n super(message)\n this.name = 'StateTraitConfigError'\n }\n}\n\nexport type ConvergeDegradeReason = 'budget_exceeded' | 'runtime_error'\n\nexport type ConvergeMode = 'full' | 'dirty'\n\nexport interface ConvergeStepSummary {\n readonly stepId: string\n readonly kind: 'computed' | 'link'\n readonly fieldPath: string\n readonly durationMs: number\n readonly changed: boolean\n}\n\nexport interface ConvergeSummary {\n readonly mode: ConvergeMode\n readonly budgetMs: number\n readonly totalDurationMs: number\n readonly totalSteps: number\n readonly executedSteps: number\n readonly skippedSteps: number\n readonly changedSteps: number\n readonly dirtyRoots?: ReadonlyArray<string>\n readonly top3: ReadonlyArray<ConvergeStepSummary>\n}\n\nexport type ConvergeOutcome =\n | {\n readonly _tag: 'Converged'\n readonly patchCount: number\n readonly summary?: ConvergeSummary\n readonly decision?: TraitConvergeDecisionSummary\n }\n | {\n readonly _tag: 'Noop'\n readonly summary?: ConvergeSummary\n readonly decision?: TraitConvergeDecisionSummary\n }\n | {\n readonly _tag: 'Degraded'\n readonly reason: ConvergeDegradeReason\n readonly errorSummary?: SerializableErrorSummary\n readonly errorDowngrade?: ErrorDowngradeReason\n readonly summary?: ConvergeSummary\n readonly decision?: TraitConvergeDecisionSummary\n }\n\nexport interface ConvergeContext<S> {\n readonly moduleId?: string\n readonly instanceId: string\n readonly txnSeq?: number\n readonly txnId?: string\n readonly configScope?: TraitConvergeConfigScope\n readonly generation?: TraitConvergeGenerationEvidence\n readonly cacheMissReasonHint?: TraitConvergePlanCacheEvidence['missReason']\n readonly now: () => number\n readonly budgetMs: number\n readonly decisionBudgetMs?: number\n readonly requestedMode?: TraitConvergeRequestedMode\n /**\n * 043: select the execution scope for this converge (default: all).\n * - all: keep legacy behavior\n * - immediate: run only computed/link with scheduling=immediate\n * - deferred: run only computed/link with scheduling=deferred\n */\n readonly schedulingScope?: 'all' | 'immediate' | 'deferred'\n /**\n * 060: explicitly specify stepIds for this converge (used to slice the deferred scope).\n *\n * - If not provided, select the corresponding topoOrder by schedulingScope.\n * - If provided, it must be monotonic increasing in topo order (caller guarantees).\n */\n readonly schedulingScopeStepIds?: Int32Array\n /**\n * dirtyAllReason: when a non-trackable/non-mappable write happens within the transaction window,\n * it must explicitly degrade to dirtyAll and provide a stable reason code (for diagnostics & gating).\n */\n readonly dirtyAllReason?: DirtyAllReason\n readonly dirtyPaths?: ReadonlySet<string | FieldPath | FieldPathId> | ReadonlyArray<string | FieldPath | FieldPathId>\n readonly allowInPlaceDraft?: boolean\n readonly planCache?: ConvergePlanCache\n readonly getDraft: () => S\n readonly setDraft: (next: S) => void\n readonly recordPatch: (\n path: string | FieldPath | FieldPathId | undefined,\n reason: PatchReason,\n from?: unknown,\n to?: unknown,\n traitNodeId?: string,\n stepId?: number,\n ) => void\n}\n","import { Effect, FiberRef } from 'effect'\nimport * as Debug from '../runtime/core/DebugSink.js'\nimport {\n toSerializableErrorSummary,\n} from '../runtime/core/errorSummary.js'\nimport { dirtyPathsToRootIds, type FieldPath } from '../field-path.js'\nimport { getConvergeStaticIrDigest } from './converge-ir.js'\nimport { CowDraft, ShallowInPlaceDraft } from './converge-draft.js'\nimport { emitSchemaMismatch } from './converge-diagnostics.js'\nimport { currentExecVmMode } from './exec-vm-mode.js'\nimport { makeConvergeExecIr } from './converge-exec-ir.js'\nimport { getMiddlewareStack, runWriterStep, runWriterStepOffFast } from './converge-step.js'\nimport {\n StateTraitConfigError,\n type ConvergeContext,\n type ConvergeOutcome,\n type ConvergeStepSummary,\n type ConvergeSummary,\n type ConvergeMode,\n} from './converge.types.js'\nimport type {\n StateTraitEntry,\n StateTraitProgram,\n TraitConvergeConfigScope,\n TraitConvergeDecisionSummary,\n TraitConvergeDiagnosticsSamplingSummary,\n TraitConvergeDirtySummary,\n TraitConvergeGenerationEvidence,\n TraitConvergeHotspot,\n TraitConvergeOutcome as TraitConvergeOutcomeTag,\n TraitConvergePlanCacheEvidence,\n TraitConvergeReason,\n TraitConvergeRequestedMode,\n TraitConvergeStaticIrEvidence,\n TraitConvergeStepStats,\n} from './model.js'\n\nconst pickTop3Steps = (steps: ReadonlyArray<ConvergeStepSummary>): ReadonlyArray<ConvergeStepSummary> => {\n let first: ConvergeStepSummary | undefined\n let second: ConvergeStepSummary | undefined\n let third: ConvergeStepSummary | undefined\n\n for (const step of steps) {\n const d = step.durationMs\n if (!first || d > first.durationMs) {\n third = second\n second = first\n first = step\n continue\n }\n if (!second || d > second.durationMs) {\n third = second\n second = step\n continue\n }\n if (!third || d > third.durationMs) {\n third = step\n }\n }\n\n if (!first) return []\n if (!second) return [first]\n if (!third) return [first, second]\n return [first, second, third]\n}\n\nconst normalizePositiveInt = (value: unknown): number | undefined => {\n if (typeof value !== 'number' || !Number.isFinite(value)) return undefined\n const n = Math.floor(value)\n return n > 0 ? n : undefined\n}\n\nconst insertTopKHotspot = (args: {\n readonly hotspots: Array<TraitConvergeHotspot>\n readonly next: TraitConvergeHotspot\n readonly topK: number\n}): void => {\n const { hotspots, next, topK } = args\n if (topK <= 0) return\n\n const idx = (() => {\n for (let i = 0; i < hotspots.length; i++) {\n if (next.durationMs > hotspots[i]!.durationMs) return i\n }\n return hotspots.length\n })()\n\n if (idx >= topK) return\n hotspots.splice(idx, 0, next)\n if (hotspots.length > topK) {\n hotspots.length = topK\n }\n}\n\n/**\n * convergeInTransaction:\n * - Execute one derived converge pass within an already-started StateTransaction context.\n * - Currently covers computed/link only (check/source will be added in later phases).\n */\nexport const convergeInTransaction = <S extends object>(\n program: StateTraitProgram<S>,\n ctx: ConvergeContext<S>,\n): Effect.Effect<ConvergeOutcome> =>\n Effect.gen(function* () {\n yield* emitSchemaMismatch(program, ctx)\n\n const decisionStartedAt = ctx.now()\n let decisionDurationMs: number | undefined\n let executionStartedAt = decisionStartedAt\n const base = ctx.getDraft()\n const requestedMode: TraitConvergeRequestedMode = ctx.requestedMode ?? 'auto'\n const reasons: Array<TraitConvergeReason> = []\n let mode: ConvergeMode = requestedMode === 'dirty' ? 'dirty' : requestedMode === 'full' ? 'full' : 'full'\n\n const ir = program.convergeIr\n if (!ir) {\n return { _tag: 'Noop' } as const\n }\n\n // 049: Exec IR must be tied to the generation lifecycle and should not be rebuilt on every txn window.\n let execIr = program.convergeExecIr\n if (!execIr || execIr.generation !== ir.generation) {\n execIr = makeConvergeExecIr(ir)\n ;(program as any).convergeExecIr = execIr\n }\n\n if (ir.configError) {\n throw new StateTraitConfigError(ir.configError.code, ir.configError.message, ir.configError.fields)\n }\n\n const stepsInTopoOrder = (ir.stepsById ?? []) as ReadonlyArray<StateTraitEntry<any, string>>\n const totalSteps = stepsInTopoOrder.length\n\n if (totalSteps === 0) {\n return { _tag: 'Noop' } as const\n }\n\n const stack = yield* getMiddlewareStack()\n const diagnosticsLevel: Debug.DiagnosticsLevel = yield* FiberRef.get(Debug.currentDiagnosticsLevel)\n const debugSinks = yield* FiberRef.get(Debug.currentDebugSinks)\n // Decision / TraitSummary gate is based on \"will it be consumed\" (sinks), not diagnosticsLevel.\n // diagnosticsLevel only controls exportable/heavy details (trace payload, hotspots, static IR export, etc.).\n const shouldCollectDecision = debugSinks.length > 0 && !Debug.isErrorOnlyOnlySinks(debugSinks)\n const shouldCollectDecisionDetails = shouldCollectDecision\n const shouldCollectDecisionHeavyDetails = shouldCollectDecision && diagnosticsLevel !== 'off'\n const execVmMode = yield* FiberRef.get(currentExecVmMode)\n\n // 044: deterministic sampling for sampled mode (uses txnSeq as a stable anchor by default).\n let diagnosticsSampling: TraitConvergeDiagnosticsSamplingSummary | undefined\n if (diagnosticsLevel === 'sampled') {\n const cfg = yield* FiberRef.get(Debug.currentTraitConvergeDiagnosticsSampling)\n const sampleEveryN = normalizePositiveInt(cfg.sampleEveryN) ?? 32\n const topK = normalizePositiveInt(cfg.topK) ?? 3\n const txnSeq = ctx.txnSeq\n const sampled =\n typeof txnSeq === 'number' && Number.isFinite(txnSeq) && txnSeq > 0\n ? (Math.floor(txnSeq) - 1) % sampleEveryN === 0\n : false\n diagnosticsSampling = {\n strategy: 'txnSeq_interval',\n sampleEveryN,\n topK,\n sampled,\n }\n }\n\n const shouldTimeStepsForHotspots =\n shouldCollectDecision && (diagnosticsLevel === 'full' || diagnosticsSampling?.sampled === true)\n const hotspotsTopK = diagnosticsLevel === 'full' ? 3 : (diagnosticsSampling?.topK ?? 3)\n const hotspots: Array<TraitConvergeHotspot> | undefined = shouldTimeStepsForHotspots ? [] : undefined\n const schedulingScope = ctx.schedulingScope ?? 'all'\n const scopeStepIds =\n ctx.schedulingScopeStepIds ??\n (schedulingScope === 'immediate'\n ? execIr.topoOrderImmediateInt32\n : schedulingScope === 'deferred'\n ? execIr.topoOrderDeferredInt32\n : execIr.topoOrderInt32)\n const scopeStepCount = scopeStepIds.length\n const immediateStepCount = execIr.topoOrderImmediateInt32.length\n const deferredStepCount = execIr.topoOrderDeferredInt32.length\n const timeSlicingSummary =\n deferredStepCount > 0\n ? {\n scope: schedulingScope,\n immediateStepCount,\n deferredStepCount,\n }\n : undefined\n\n if (deferredStepCount > 0) {\n if (schedulingScope === 'immediate' && !reasons.includes('time_slicing_immediate')) {\n reasons.push('time_slicing_immediate')\n } else if (schedulingScope === 'deferred' && !reasons.includes('time_slicing_deferred')) {\n reasons.push('time_slicing_deferred')\n }\n }\n\n const emitTraitConvergeTraceEvent = (decision: TraitConvergeDecisionSummary): Effect.Effect<void> =>\n !shouldCollectDecision\n ? Effect.void\n : Debug.record({\n type: 'trace:trait:converge',\n moduleId: ctx.moduleId,\n instanceId: ctx.instanceId,\n txnSeq: ctx.txnSeq,\n txnId: ctx.txnId,\n data: decision as any,\n })\n\n const registry = ir.fieldPathIdRegistry\n const dirtyPaths = ctx.dirtyPaths == null ? [] : Array.isArray(ctx.dirtyPaths) ? ctx.dirtyPaths : ctx.dirtyPaths\n\n const dirtyRootIds = dirtyPathsToRootIds({\n dirtyPaths,\n registry,\n dirtyAllReason: ctx.dirtyAllReason,\n })\n\n const DIRTY_ROOT_IDS_TOP_K = 3\n const AUTO_FLOOR_RATIO = 1.05\n const dirtySummary: TraitConvergeDirtySummary | undefined = !shouldCollectDecisionDetails\n ? undefined\n : dirtyRootIds.dirtyAll\n ? {\n dirtyAll: true,\n reason: dirtyRootIds.reason ?? 'unknownWrite',\n rootCount: 0,\n rootIds: [],\n rootIdsTruncated: false,\n }\n : {\n dirtyAll: false,\n rootCount: dirtyRootIds.rootCount,\n rootIds: dirtyRootIds.rootIds.slice(0, DIRTY_ROOT_IDS_TOP_K),\n rootIdsTruncated: dirtyRootIds.rootIds.length > DIRTY_ROOT_IDS_TOP_K,\n }\n\n const configScope: TraitConvergeConfigScope = ctx.configScope ?? 'builtin'\n const generationEvidence: TraitConvergeGenerationEvidence = ctx.generation ?? {\n generation: ir.generation,\n }\n const generation = generationEvidence.generation\n const staticIrDigest = !shouldCollectDecisionHeavyDetails ? '' : getConvergeStaticIrDigest(ir)\n const decisionBudgetMs = requestedMode === 'auto' ? ctx.decisionBudgetMs : undefined\n const cacheMissReasonHint = ctx.cacheMissReasonHint\n\n if (cacheMissReasonHint === 'generation_bumped' && !reasons.includes('generation_bumped')) {\n reasons.push('generation_bumped')\n }\n\n const isDecisionBudgetExceeded = (): boolean =>\n typeof decisionBudgetMs === 'number' &&\n Number.isFinite(decisionBudgetMs) &&\n decisionBudgetMs > 0 &&\n ctx.now() - decisionStartedAt > decisionBudgetMs\n\n const markDecisionBudgetCutoff = (): void => {\n if (!reasons.includes('budget_cutoff')) reasons.push('budget_cutoff')\n }\n\n const prefixFieldPathIdsByPathId = execIr.prefixFieldPathIdsByPathId\n const prefixOffsetsByPathId = execIr.prefixOffsetsByPathId\n\n const dirtyPrefixBitSet = execIr.scratch.dirtyPrefixBitSet\n const reachableStepBitSet = execIr.scratch.reachableStepBitSet\n const dirtyPrefixQueue = execIr.scratch.dirtyPrefixQueue\n const planScratch = execIr.scratch.planStepIds\n const triggerStepIdsByFieldPathId = execIr.triggerStepIdsByFieldPathId\n const triggerStepOffsetsByFieldPathId = execIr.triggerStepOffsetsByFieldPathId\n\n const addPathPrefixes = (pathId: number): void => {\n const start = prefixOffsetsByPathId[pathId]\n const end = prefixOffsetsByPathId[pathId + 1]\n if (start == null || end == null) return\n for (let i = start; i < end; i++) {\n dirtyPrefixBitSet.add(prefixFieldPathIdsByPathId[i]!)\n }\n }\n\n const hasAnyDirtyPrefix = (pathId: number): boolean => {\n const start = prefixOffsetsByPathId[pathId]\n const end = prefixOffsetsByPathId[pathId + 1]\n if (start == null || end == null) return false\n for (let i = start; i < end; i++) {\n if (dirtyPrefixBitSet.has(prefixFieldPathIdsByPathId[i]!)) return true\n }\n return false\n }\n\n const shouldRunStepById = (stepId: number): boolean => {\n const outId = execIr.stepOutFieldPathIdByStepId[stepId]\n if (typeof outId === 'number' && hasAnyDirtyPrefix(outId)) {\n return true\n }\n const depsStart = execIr.stepDepsOffsetsByStepId[stepId]\n const depsEnd = execIr.stepDepsOffsetsByStepId[stepId + 1]\n if (depsStart == null || depsEnd == null) return false\n for (let i = depsStart; i < depsEnd; i++) {\n if (hasAnyDirtyPrefix(execIr.stepDepsFieldPathIds[i]!)) return true\n }\n return false\n }\n\n const computePlanStepIds = (\n rootIds: ReadonlyArray<number>,\n options?: { readonly stopOnDecisionBudget?: boolean },\n ): { readonly plan?: Int32Array; readonly budgetCutoff?: true } => {\n // Small graphs and custom step slices are cheap to scan; keep the simpler logic.\n if (totalSteps < 32 || ctx.schedulingScopeStepIds != null) {\n dirtyPrefixBitSet.clear()\n for (let i = 0; i < rootIds.length; i++) {\n addPathPrefixes(rootIds[i]!)\n }\n\n let planLen = 0\n let checks = 0\n for (let i = 0; i < scopeStepIds.length; i++) {\n const stepId = scopeStepIds[i]!\n if (options?.stopOnDecisionBudget) {\n checks += 1\n if (checks >= 32) {\n checks = 0\n if (isDecisionBudgetExceeded()) {\n dirtyPrefixBitSet.clear()\n return { budgetCutoff: true } as const\n }\n }\n }\n\n if (!shouldRunStepById(stepId)) {\n continue\n }\n\n planScratch[planLen] = stepId\n planLen += 1\n addPathPrefixes(execIr.stepOutFieldPathIdByStepId[stepId]!)\n }\n\n const plan = execVmMode ? planScratch.subarray(0, planLen) : new Int32Array(planLen)\n if (!execVmMode && planLen > 0) {\n plan.set(planScratch.subarray(0, planLen))\n }\n dirtyPrefixBitSet.clear()\n return { plan } as const\n }\n\n // 059: Typed reachability (prefixId -> stepIds) + queue + bitset.\n dirtyPrefixBitSet.clear()\n reachableStepBitSet.clear()\n\n let queueLen = 0\n const enqueuePathPrefixes = (pathId: number): void => {\n const start = prefixOffsetsByPathId[pathId]\n const end = prefixOffsetsByPathId[pathId + 1]\n if (start == null || end == null) return\n for (let i = start; i < end; i++) {\n const prefixId = prefixFieldPathIdsByPathId[i]!\n if (dirtyPrefixBitSet.has(prefixId)) continue\n dirtyPrefixBitSet.add(prefixId)\n dirtyPrefixQueue[queueLen] = prefixId\n queueLen += 1\n }\n }\n\n for (let i = 0; i < rootIds.length; i++) {\n enqueuePathPrefixes(rootIds[i]!)\n }\n\n const isStepInScope = (stepId: number): boolean => {\n if (schedulingScope === 'all') return true\n const flag = execIr.stepSchedulingByStepId[stepId]\n return schedulingScope === 'immediate' ? flag === 0 : flag === 1\n }\n\n let cursor = 0\n let checks = 0\n while (cursor < queueLen) {\n if (options?.stopOnDecisionBudget) {\n checks += 1\n if (checks >= 32) {\n checks = 0\n if (isDecisionBudgetExceeded()) {\n dirtyPrefixBitSet.clear()\n return { budgetCutoff: true } as const\n }\n }\n }\n\n const prefixId = dirtyPrefixQueue[cursor]!\n cursor += 1\n\n const start = triggerStepOffsetsByFieldPathId[prefixId]\n const end = triggerStepOffsetsByFieldPathId[prefixId + 1]\n if (start == null || end == null) continue\n for (let i = start; i < end; i++) {\n const stepId = triggerStepIdsByFieldPathId[i]!\n if (!isStepInScope(stepId)) continue\n if (reachableStepBitSet.has(stepId)) continue\n reachableStepBitSet.add(stepId)\n enqueuePathPrefixes(execIr.stepOutFieldPathIdByStepId[stepId]!)\n }\n }\n\n let planLen = 0\n for (let i = 0; i < scopeStepIds.length; i++) {\n const stepId = scopeStepIds[i]!\n if (!reachableStepBitSet.has(stepId)) continue\n planScratch[planLen] = stepId\n planLen += 1\n }\n\n const plan = execVmMode ? planScratch.subarray(0, planLen) : new Int32Array(planLen)\n if (!execVmMode && planLen > 0) {\n plan.set(planScratch.subarray(0, planLen))\n }\n dirtyPrefixBitSet.clear()\n return { plan } as const\n }\n\n const cache = ctx.planCache\n if (\n cacheMissReasonHint === 'generation_bumped' &&\n typeof generationEvidence.generationBumpCount === 'number' &&\n generationEvidence.generationBumpCount >= 3 &&\n cache &&\n !cache.isDisabled()\n ) {\n cache.disable('generation_thrash')\n }\n const canUseCache =\n !!cache &&\n !cache.isDisabled() &&\n ctx.schedulingScopeStepIds == null &&\n !dirtyRootIds.dirtyAll &&\n dirtyRootIds.rootIds.length > 0\n const planKeyHash = dirtyRootIds.keyHash ^ (schedulingScope === 'all' ? 0 : schedulingScope === 'immediate' ? 1 : 2)\n const rootIdsKey = canUseCache ? dirtyRootIds.rootIds : undefined\n\n let cacheEvidence: TraitConvergePlanCacheEvidence | undefined = shouldCollectDecisionHeavyDetails\n ? {\n capacity: 0,\n size: 0,\n hits: 0,\n misses: 0,\n evicts: 0,\n hit: false,\n }\n : undefined\n\n let affectedSteps: number | undefined\n let planStepIds: Int32Array | undefined\n\n const getOrComputePlan = (options?: {\n readonly missReason?: TraitConvergePlanCacheEvidence['missReason']\n readonly stopOnDecisionBudget?: boolean\n }): { readonly plan?: Int32Array; readonly hit: boolean; readonly budgetCutoff?: true } => {\n if (dirtyRootIds.dirtyAll) {\n if (cacheEvidence && cache) {\n cacheEvidence = cache.evidence({\n hit: false,\n keySize: dirtyRootIds.keySize,\n missReason: options?.missReason ?? 'unknown',\n })\n }\n const fullPlan = scopeStepIds\n affectedSteps = fullPlan.length\n return { plan: fullPlan, hit: false }\n }\n\n if (canUseCache && cache && rootIdsKey) {\n const cached = cache.get(planKeyHash, rootIdsKey)\n if (cached) {\n if (cacheEvidence) {\n cacheEvidence = cache.evidence({\n hit: true,\n keySize: dirtyRootIds.keySize,\n })\n }\n affectedSteps = cached.length\n return { plan: cached, hit: true }\n }\n }\n\n // Decision budget is designed to cap worst-case plan computation cost.\n // For small graphs (<32 steps), the plan scan is bounded and the early cutoff\n // can introduce flakiness due to sub-ms clock jitter on some platforms.\n if (options?.stopOnDecisionBudget && totalSteps >= 32 && isDecisionBudgetExceeded()) {\n if (cacheEvidence && cache) {\n cacheEvidence = cache.evidence({\n hit: false,\n keySize: dirtyRootIds.keySize,\n missReason: options?.missReason ?? 'unknown',\n })\n }\n return { hit: false, budgetCutoff: true } as const\n }\n\n const computed = computePlanStepIds(dirtyRootIds.rootIds, {\n stopOnDecisionBudget: options?.stopOnDecisionBudget,\n })\n if (computed.budgetCutoff) {\n if (cacheEvidence && cache) {\n cacheEvidence = cache.evidence({\n hit: false,\n keySize: dirtyRootIds.keySize,\n missReason: options?.missReason ?? 'unknown',\n })\n }\n return { hit: false, budgetCutoff: true } as const\n }\n\n const plan = computed.plan ?? new Int32Array(0)\n if (canUseCache && cache && rootIdsKey) {\n cache.set(planKeyHash, rootIdsKey, execVmMode ? plan.slice() : plan)\n }\n if (cacheEvidence && cache) {\n cacheEvidence = cache.evidence({\n hit: false,\n keySize: dirtyRootIds.keySize,\n missReason: options?.missReason ?? 'not_cached',\n })\n }\n affectedSteps = plan.length\n return { plan, hit: false }\n }\n\n const NEAR_FULL_ROOT_RATIO_THRESHOLD = 0.75\n const NEAR_FULL_PLAN_RATIO_THRESHOLD = 0.9\n\n if (requestedMode === 'auto') {\n if (ctx.txnSeq === 1) {\n mode = 'full'\n reasons.push('cold_start')\n } else if (dirtyRootIds.dirtyAll) {\n mode = 'full'\n reasons.push('dirty_all')\n reasons.push('unknown_write')\n } else if (dirtyRootIds.rootIds.length === 0) {\n mode = 'full'\n reasons.push('unknown_write')\n } else {\n const rootRatio = scopeStepCount > 0 ? dirtyRootIds.rootCount / scopeStepCount : 1\n if (rootRatio >= NEAR_FULL_ROOT_RATIO_THRESHOLD) {\n mode = 'full'\n reasons.push('near_full')\n } else {\n const { plan, hit, budgetCutoff } = getOrComputePlan({\n missReason: cacheMissReasonHint ?? 'not_cached',\n stopOnDecisionBudget: decisionBudgetMs != null,\n })\n if (budgetCutoff || !plan) {\n mode = 'full'\n markDecisionBudgetCutoff()\n } else {\n planStepIds = plan\n reasons.push(hit ? 'cache_hit' : 'cache_miss')\n const ratio = scopeStepCount > 0 ? plan.length / scopeStepCount : 1\n if (ratio >= NEAR_FULL_PLAN_RATIO_THRESHOLD) {\n mode = 'full'\n reasons.push('near_full')\n } else {\n mode = 'dirty'\n }\n }\n }\n }\n } else {\n reasons.push('module_override')\n if (mode === 'dirty') {\n const { plan, hit } = getOrComputePlan({ missReason: cacheMissReasonHint ?? 'not_cached' })\n planStepIds = plan\n if (dirtyRootIds.dirtyAll) {\n reasons.push('dirty_all')\n } else if (cache && dirtyRootIds.rootIds.length > 0) {\n reasons.push(hit ? 'cache_hit' : 'cache_miss')\n }\n }\n }\n\n if (\n cacheEvidence?.disabled &&\n cacheEvidence.disableReason === 'low_hit_rate' &&\n !reasons.includes('low_hit_rate_protection')\n ) {\n reasons.push('low_hit_rate_protection')\n }\n\n executionStartedAt = ctx.now()\n if (requestedMode === 'auto') {\n decisionDurationMs = Math.max(0, executionStartedAt - decisionStartedAt)\n }\n\n let changedCount = 0\n\n const makeDecisionSummary = (params: {\n readonly outcome: TraitConvergeOutcomeTag\n readonly executedSteps: number\n readonly executionDurationMs: number\n }): TraitConvergeDecisionSummary => {\n const stepStats: TraitConvergeStepStats = {\n totalSteps,\n executedSteps: params.executedSteps,\n skippedSteps: Math.max(0, totalSteps - params.executedSteps),\n changedSteps: changedCount,\n ...(typeof affectedSteps === 'number' ? { affectedSteps } : null),\n }\n\n const base = {\n requestedMode,\n executedMode: mode,\n outcome: params.outcome,\n configScope,\n staticIrDigest,\n executionBudgetMs: ctx.budgetMs,\n executionDurationMs: params.executionDurationMs,\n ...(requestedMode === 'auto' && ctx.decisionBudgetMs != null\n ? { decisionBudgetMs: ctx.decisionBudgetMs }\n : null),\n ...(requestedMode === 'auto' && decisionDurationMs != null ? { decisionDurationMs } : null),\n reasons,\n stepStats,\n } satisfies TraitConvergeDecisionSummary\n\n if (!shouldCollectDecisionDetails) {\n return base\n }\n\n if (!shouldCollectDecisionHeavyDetails) {\n return {\n ...base,\n dirty: dirtySummary,\n } satisfies TraitConvergeDecisionSummary\n }\n\n return {\n ...base,\n thresholds: { floorRatio: AUTO_FLOOR_RATIO },\n dirty: dirtySummary,\n cache: cacheEvidence,\n generation: generationEvidence,\n staticIr: {\n fieldPathCount: ir.fieldPaths.length,\n stepCount: totalSteps,\n buildDurationMs: ir.buildDurationMs,\n },\n ...(timeSlicingSummary ? { timeSlicing: timeSlicingSummary } : {}),\n ...(diagnosticsSampling ? { diagnosticsSampling } : {}),\n ...(hotspots && hotspots.length > 0 ? { top3: hotspots.slice() } : {}),\n } satisfies TraitConvergeDecisionSummary\n }\n\n const steps: Array<ConvergeStepSummary> | undefined = diagnosticsLevel === 'full' ? [] : undefined\n let executedSteps = 0\n const canUseInPlaceDraft = ctx.allowInPlaceDraft === true && execIr.allOutPathsShallow\n const draft = canUseInPlaceDraft ? new ShallowInPlaceDraft(base) : new CowDraft(base)\n let budgetChecks = 0\n const rollbackDraft = (): void => {\n if (draft instanceof ShallowInPlaceDraft) {\n draft.rollback()\n }\n ctx.setDraft(base)\n }\n\n try {\n if (mode === 'dirty' && !planStepIds) {\n const { plan } = getOrComputePlan({ missReason: cacheMissReasonHint ?? 'not_cached' })\n planStepIds = plan\n }\n\n let dirtyPrefixSet: typeof dirtyPrefixBitSet | undefined\n if (mode === 'dirty' && !dirtyRootIds.dirtyAll) {\n dirtyPrefixBitSet.clear()\n const roots = dirtyRootIds.rootIds\n for (let i = 0; i < roots.length; i++) {\n addPathPrefixes(roots[i]!)\n }\n dirtyPrefixSet = dirtyPrefixBitSet\n }\n\n const stepIds = mode === 'dirty' && planStepIds ? planStepIds : scopeStepIds\n\n for (let i = 0; i < stepIds.length; i++) {\n const stepId = stepIds[i]!\n const entry = stepsInTopoOrder[stepId]\n if (!entry) continue\n\n const fieldPath = entry.fieldPath\n\n if (steps) {\n if (ctx.now() - executionStartedAt > ctx.budgetMs) {\n // Budget exceeded: soft degrade, roll back to base (avoid partially-applied state).\n rollbackDraft()\n const totalDurationMs = Math.max(0, ctx.now() - executionStartedAt)\n const top3 = pickTop3Steps(steps)\n const summary: ConvergeSummary = {\n mode,\n budgetMs: ctx.budgetMs,\n totalDurationMs,\n totalSteps,\n executedSteps,\n skippedSteps: Math.max(0, totalSteps - executedSteps),\n changedSteps: changedCount,\n top3,\n }\n if (!reasons.includes('budget_cutoff')) reasons.push('budget_cutoff')\n const decision = makeDecisionSummary({\n outcome: 'Degraded',\n executedSteps,\n executionDurationMs: totalDurationMs,\n })\n if (decision && diagnosticsLevel !== 'off') {\n yield* emitTraitConvergeTraceEvent(decision)\n }\n return {\n _tag: 'Degraded',\n reason: 'budget_exceeded',\n summary,\n ...(decision ? { decision } : null),\n } as const\n }\n } else {\n budgetChecks += 1\n if (budgetChecks >= 32) {\n budgetChecks = 0\n if (ctx.now() - executionStartedAt > ctx.budgetMs) {\n // Budget exceeded: soft degrade, roll back to base (avoid partially-applied state).\n rollbackDraft()\n if (!reasons.includes('budget_cutoff')) reasons.push('budget_cutoff')\n const totalDurationMs = Math.max(0, ctx.now() - executionStartedAt)\n const decision = shouldCollectDecision\n ? makeDecisionSummary({\n outcome: 'Degraded',\n executedSteps,\n executionDurationMs: totalDurationMs,\n })\n : undefined\n if (decision && diagnosticsLevel !== 'off') yield* emitTraitConvergeTraceEvent(decision)\n return {\n _tag: 'Degraded',\n reason: 'budget_exceeded',\n ...(decision ? { decision } : null),\n } as const\n }\n }\n }\n\n if (mode === 'dirty' && dirtyPrefixSet) {\n const shouldRun = shouldRunStepById(stepId)\n if (!shouldRun) {\n continue\n }\n }\n\n executedSteps += 1\n\n if (steps) {\n const stepStartedAt = ctx.now()\n const exit = yield* Effect.exit(\n runWriterStep(ctx, execIr, draft, stepId, entry, shouldCollectDecision, diagnosticsLevel, stack),\n )\n const stepEndedAt = ctx.now()\n const durationMs = Math.max(0, stepEndedAt - stepStartedAt)\n const stepKind = entry.kind === 'computed' ? 'computed' : 'link'\n const stepLabel = execIr.stepLabelByStepId[stepId] ?? String(stepId)\n const changed = exit._tag === 'Success' ? exit.value : false\n if (hotspots) {\n insertTopKHotspot({\n hotspots,\n topK: hotspotsTopK,\n next: {\n kind: stepKind,\n stepId,\n outFieldPathId: execIr.stepOutFieldPathIdByStepId[stepId],\n durationMs,\n changed,\n },\n })\n }\n steps.push({\n stepId: stepLabel,\n kind: stepKind,\n fieldPath,\n durationMs,\n changed,\n })\n if (exit._tag === 'Failure') {\n const error = toSerializableErrorSummary(exit.cause)\n rollbackDraft()\n const totalDurationMs = Math.max(0, ctx.now() - executionStartedAt)\n const top3 = pickTop3Steps(steps)\n const summary: ConvergeSummary = {\n mode,\n budgetMs: ctx.budgetMs,\n totalDurationMs,\n totalSteps,\n executedSteps,\n skippedSteps: Math.max(0, totalSteps - executedSteps),\n changedSteps: changedCount,\n top3,\n }\n const decision = makeDecisionSummary({\n outcome: 'Degraded',\n executedSteps,\n executionDurationMs: totalDurationMs,\n })\n if (decision && diagnosticsLevel !== 'off') {\n yield* emitTraitConvergeTraceEvent(decision)\n }\n return {\n _tag: 'Degraded',\n reason: 'runtime_error',\n errorSummary: error.errorSummary,\n errorDowngrade: error.downgrade,\n summary,\n ...(decision ? { decision } : null),\n } as const\n }\n if (exit.value) {\n changedCount += 1\n if (mode === 'dirty' && dirtyPrefixSet) {\n addPathPrefixes(execIr.stepOutFieldPathIdByStepId[stepId]!)\n }\n }\n continue\n }\n\n if (hotspots) {\n const stepStartedAt = ctx.now()\n const exit = yield* Effect.exit(\n runWriterStep(ctx, execIr, draft, stepId, entry, shouldCollectDecision, diagnosticsLevel, stack),\n )\n const stepEndedAt = ctx.now()\n const durationMs = Math.max(0, stepEndedAt - stepStartedAt)\n const stepKind = entry.kind === 'computed' ? 'computed' : 'link'\n const changed = exit._tag === 'Success' ? exit.value : false\n insertTopKHotspot({\n hotspots,\n topK: hotspotsTopK,\n next: {\n kind: stepKind,\n stepId,\n outFieldPathId: execIr.stepOutFieldPathIdByStepId[stepId],\n durationMs,\n changed,\n },\n })\n\n if (exit._tag === 'Failure') {\n const error = toSerializableErrorSummary(exit.cause)\n rollbackDraft()\n const totalDurationMs = Math.max(0, ctx.now() - executionStartedAt)\n const decision = makeDecisionSummary({\n outcome: 'Degraded',\n executedSteps,\n executionDurationMs: totalDurationMs,\n })\n if (decision && diagnosticsLevel !== 'off') {\n yield* emitTraitConvergeTraceEvent(decision)\n }\n return {\n _tag: 'Degraded',\n reason: 'runtime_error',\n errorSummary: error.errorSummary,\n errorDowngrade: error.downgrade,\n ...(decision ? { decision } : null),\n } as const\n }\n\n if (changed) {\n changedCount += 1\n if (mode === 'dirty' && dirtyPrefixSet) {\n addPathPrefixes(execIr.stepOutFieldPathIdByStepId[stepId]!)\n }\n }\n\n continue\n }\n\n // Off-fast-path: enabled only when middleware is empty and diagnostics=off, to keep near-zero overhead in off mode.\n // If you need deps tracing / mismatch diagnostics, switch to light/full/sampled explicitly.\n if (diagnosticsLevel === 'off' && stack.length === 0) {\n try {\n if (runWriterStepOffFast(ctx, execIr, draft, stepId, entry)) {\n changedCount += 1\n if (mode === 'dirty' && dirtyPrefixSet) {\n addPathPrefixes(execIr.stepOutFieldPathIdByStepId[stepId]!)\n }\n }\n } catch (e) {\n const error = toSerializableErrorSummary(e)\n rollbackDraft()\n const totalDurationMs = Math.max(0, ctx.now() - executionStartedAt)\n const decision = shouldCollectDecision\n ? makeDecisionSummary({\n outcome: 'Degraded',\n executedSteps,\n executionDurationMs: totalDurationMs,\n })\n : undefined\n if (decision && diagnosticsLevel !== 'off') yield* emitTraitConvergeTraceEvent(decision)\n return {\n _tag: 'Degraded',\n reason: 'runtime_error',\n errorSummary: error.errorSummary,\n errorDowngrade: error.downgrade,\n ...(decision ? { decision } : null),\n } as const\n }\n continue\n }\n\n const exit = yield* Effect.exit(\n runWriterStep(ctx, execIr, draft, stepId, entry, shouldCollectDecision, diagnosticsLevel, stack),\n )\n if (exit._tag === 'Failure') {\n const error = toSerializableErrorSummary(exit.cause)\n rollbackDraft()\n const totalDurationMs = Math.max(0, ctx.now() - executionStartedAt)\n const decision = shouldCollectDecision\n ? makeDecisionSummary({\n outcome: 'Degraded',\n executedSteps,\n executionDurationMs: totalDurationMs,\n })\n : undefined\n if (decision && diagnosticsLevel !== 'off') yield* emitTraitConvergeTraceEvent(decision)\n return {\n _tag: 'Degraded',\n reason: 'runtime_error',\n errorSummary: error.errorSummary,\n errorDowngrade: error.downgrade,\n ...(decision ? { decision } : null),\n } as const\n }\n if (exit.value) {\n changedCount += 1\n if (mode === 'dirty' && dirtyPrefixSet) {\n addPathPrefixes(execIr.stepOutFieldPathIdByStepId[stepId]!)\n }\n }\n }\n } catch (e) {\n // Config error: hard fail (let the outer transaction entrypoint block commit).\n if (e instanceof StateTraitConfigError) {\n throw e\n }\n const error = toSerializableErrorSummary(e)\n // Runtime error: soft degrade, roll back to base (avoid partially-applied state).\n rollbackDraft()\n const totalDurationMs = Math.max(0, ctx.now() - executionStartedAt)\n const summary: ConvergeSummary | undefined = steps\n ? {\n mode,\n budgetMs: ctx.budgetMs,\n totalDurationMs,\n totalSteps,\n executedSteps,\n skippedSteps: Math.max(0, totalSteps - executedSteps),\n changedSteps: changedCount,\n top3: pickTop3Steps(steps),\n }\n : undefined\n const decision = shouldCollectDecision\n ? makeDecisionSummary({\n outcome: 'Degraded',\n executedSteps,\n executionDurationMs: totalDurationMs,\n })\n : undefined\n if (decision && diagnosticsLevel !== 'off') yield* emitTraitConvergeTraceEvent(decision)\n return {\n _tag: 'Degraded',\n reason: 'runtime_error',\n errorSummary: error.errorSummary,\n errorDowngrade: error.downgrade,\n ...(summary ? { summary } : null),\n ...(decision ? { decision } : null),\n } as const\n }\n\n const totalDurationMs = Math.max(0, ctx.now() - executionStartedAt)\n const outcome: TraitConvergeOutcomeTag = changedCount > 0 ? 'Converged' : 'Noop'\n const decision = shouldCollectDecision\n ? makeDecisionSummary({\n outcome,\n executedSteps,\n executionDurationMs: totalDurationMs,\n })\n : undefined\n if (decision && diagnosticsLevel !== 'off') yield* emitTraitConvergeTraceEvent(decision)\n\n return changedCount > 0\n ? ({\n _tag: 'Converged',\n patchCount: changedCount,\n ...(steps\n ? {\n summary: {\n mode,\n budgetMs: ctx.budgetMs,\n totalDurationMs,\n totalSteps,\n executedSteps,\n skippedSteps: Math.max(0, totalSteps - executedSteps),\n changedSteps: changedCount,\n top3: pickTop3Steps(steps),\n } satisfies ConvergeSummary,\n }\n : null),\n ...(decision ? { decision } : null),\n } as const)\n : ({\n _tag: 'Noop',\n ...(steps\n ? {\n summary: {\n mode,\n budgetMs: ctx.budgetMs,\n totalDurationMs,\n totalSteps,\n executedSteps,\n skippedSteps: Math.max(0, totalSteps - executedSteps),\n changedSteps: changedCount,\n top3: pickTop3Steps(steps),\n } satisfies ConvergeSummary,\n }\n : null),\n ...(decision ? { decision } : null),\n } as const)\n })\n","import type { FieldPath, FieldPathId, FieldPathIdRegistry } from '../field-path.js'\nimport { fnv1a32, stableStringify } from '../digest.js'\nimport type { StateTraitEntry, TraitConvergeScheduling } from './model.js'\n\nexport type ConvergeStepId = number\n\n/**\n * ConvergeStaticIrRegistry:\n * - Converge-only static IR generated during build/load (stable within a generation).\n * - Hot paths prefer integer-backed structures; keep only the necessary tables for evidence export and explainability.\n */\nexport interface ConvergeStaticIrRegistry {\n readonly generation: number\n /**\n * writerKey/depsKey:\n * - Used to determine \"structural changes\" of Converge Static IR (bump generation++ and invalidate strictly).\n * - Does not include generation itself.\n */\n readonly writersKey: string\n readonly depsKey: string\n /**\n * fieldPathsKey:\n * - Incorporates FieldPathId semantics (fieldPaths table) into the stable definition of staticIrDigest;\n * - Precomputed at build time to avoid repeatedly stringifying large tables at runtime.\n */\n readonly fieldPathsKey: string\n readonly fieldPaths: ReadonlyArray<FieldPath>\n readonly fieldPathIdRegistry: FieldPathIdRegistry\n readonly configError?: {\n readonly code: 'CYCLE_DETECTED' | 'MULTIPLE_WRITERS'\n readonly message: string\n readonly fields: ReadonlyArray<string>\n }\n\n /**\n * stepsById:\n * - StepId -> writer entry (currently computed/link only).\n * - Numbered by topo order by default (so topoOrder is usually 0..stepCount-1).\n */\n readonly stepsById: ReadonlyArray<StateTraitEntry<any, string>>\n\n readonly stepOutFieldPathIdByStepId: ReadonlyArray<FieldPathId>\n readonly stepDepsFieldPathIdsByStepId: ReadonlyArray<ReadonlyArray<FieldPathId>>\n readonly stepSchedulingByStepId: ReadonlyArray<TraitConvergeScheduling>\n\n readonly topoOrder: ReadonlyArray<ConvergeStepId>\n readonly buildDurationMs: number\n}\n\nexport interface ConvergeStaticIrExport {\n readonly staticIrDigest: string\n readonly moduleId: string\n readonly instanceId: string\n readonly generation: number\n readonly fieldPaths: ReadonlyArray<FieldPath>\n readonly stepOutFieldPathIdByStepId: ReadonlyArray<number>\n readonly stepSchedulingByStepId: ReadonlyArray<TraitConvergeScheduling>\n readonly topoOrder?: ReadonlyArray<number>\n readonly buildDurationMs?: number\n}\n\n/**\n * ConvergeStaticIr digest (stable definition):\n * - Depends on the converge graph structural keys (writersKey/depsKey) and the FieldPathId table key (fieldPathsKey);\n * - Must not depend on instanceId/time/randomness;\n * - Enables aligning Static IR and integer mappings across runs/processes.\n */\nexport const getConvergeStaticIrDigest = (\n ir: Pick<ConvergeStaticIrRegistry, 'writersKey' | 'depsKey' | 'fieldPathsKey'>,\n): string => {\n const hash = fnv1a32(\n stableStringify({ writersKey: ir.writersKey, depsKey: ir.depsKey, fieldPathsKey: ir.fieldPathsKey }),\n )\n return `converge_ir_v2:${hash}`\n}\n\nexport const exportConvergeStaticIr = (options: {\n readonly ir: ConvergeStaticIrRegistry\n readonly moduleId: string\n readonly instanceId: string\n}): ConvergeStaticIrExport => ({\n staticIrDigest: getConvergeStaticIrDigest(options.ir),\n moduleId: options.moduleId,\n instanceId: options.instanceId,\n generation: options.ir.generation,\n fieldPaths: options.ir.fieldPaths,\n stepOutFieldPathIdByStepId: Array.from(options.ir.stepOutFieldPathIdByStepId),\n stepSchedulingByStepId: options.ir.stepSchedulingByStepId.slice(),\n topoOrder: options.ir.topoOrder.slice(),\n buildDurationMs: options.ir.buildDurationMs,\n})\n","import type { FieldPath } from '../field-path.js'\n\nconst getAtFieldPath = (state: any, path: FieldPath): any => {\n let current: any = state\n for (let i = 0; i < path.length; i++) {\n if (current == null) return undefined\n current = current[path[i]!]\n }\n return current\n}\n\nconst isObjectLike = (value: unknown): value is object => typeof value === 'object' && value !== null\n\nconst shallowCopy = (value: object): any => {\n if (Array.isArray(value)) {\n return value.slice()\n }\n const proto = Object.getPrototypeOf(value)\n const out = proto === null ? Object.create(null) : Object.create(proto)\n return Object.assign(out, value)\n}\n\nexport class CowDraft<S extends object> {\n private root: S\n private readonly owned = new WeakSet<object>()\n private readonly copies = new WeakMap<object, object>()\n\n constructor(base: S) {\n this.root = base\n }\n\n getRoot(): S {\n return this.root\n }\n\n getAt(path: FieldPath): unknown {\n return getAtFieldPath(this.root as any, path)\n }\n\n setAt(path: FieldPath, value: unknown, _prev?: unknown): void {\n if (path.length === 0) return\n this.root = this.ensureOwnedRoot()\n\n let current: any = this.root\n for (let i = 0; i < path.length - 1; i++) {\n const key = path[i]!\n const existing = current[key]\n\n if (!isObjectLike(existing)) {\n const created = {}\n this.owned.add(created)\n current[key] = created\n current = created\n continue\n }\n\n if (this.owned.has(existing)) {\n current = existing\n continue\n }\n\n const cached = this.copies.get(existing)\n const next = cached ?? shallowCopy(existing)\n if (!cached) {\n this.copies.set(existing, next)\n }\n this.owned.add(next)\n current[key] = next\n current = next\n }\n\n current[path[path.length - 1]!] = value\n }\n\n private ensureOwnedRoot(): S {\n const root = this.root as any as unknown\n if (!isObjectLike(root)) {\n return this.root\n }\n if (this.owned.has(root)) {\n return this.root\n }\n const cached = this.copies.get(root)\n const next = (cached ?? shallowCopy(root)) as S\n if (!cached) {\n this.copies.set(root, next as any)\n }\n this.owned.add(next as any)\n return next\n }\n}\n\nexport class ShallowInPlaceDraft<S extends object> {\n private readonly root: S\n private readonly keys: Array<string> = []\n private readonly prev: Array<unknown> = []\n private readonly had: Array<boolean> = []\n\n constructor(base: S) {\n this.root = base\n }\n\n getRoot(): S {\n return this.root\n }\n\n getAt(path: FieldPath): unknown {\n if (path.length === 1) {\n return (this.root as any)[path[0]!]\n }\n return getAtFieldPath(this.root as any, path)\n }\n\n setAt(path: FieldPath, value: unknown, _prev?: unknown): void {\n if (path.length !== 1) {\n throw new Error('[StateTrait.converge] ShallowInPlaceDraft only supports root-level writes')\n }\n const key = path[0]!\n const root: any = this.root\n const had = Object.prototype.hasOwnProperty.call(root, key)\n this.keys.push(key)\n this.had.push(had)\n this.prev.push(had ? root[key] : undefined)\n root[key] = value\n }\n\n rollback(): void {\n const root: any = this.root\n for (let i = this.keys.length - 1; i >= 0; i--) {\n const key = this.keys[i]!\n if (this.had[i]!) {\n root[key] = this.prev[i]\n } else {\n delete root[key]\n }\n }\n this.keys.length = 0\n this.prev.length = 0\n this.had.length = 0\n }\n}\n\n","import { Effect, FiberRef, Option } from 'effect'\nimport * as SchemaAST from 'effect/SchemaAST'\nimport * as Debug from '../runtime/core/DebugSink.js'\nimport { isDevEnv } from '../runtime/core/env.js'\nimport { RunSessionTag } from '../observability/runSession.js'\nimport { normalizeFieldPath } from '../field-path.js'\nimport * as DepsTrace from './deps-trace.js'\nimport type { ConvergeContext } from './converge.types.js'\nimport type { StateTraitProgram, StateTraitSchemaPathRef } from './model.js'\n\nconst onceKeysFallback = new Set<string>()\n\nexport const onceInRunSession = (key: string): Effect.Effect<boolean> =>\n Effect.serviceOption(RunSessionTag).pipe(\n Effect.map((maybe) => {\n if (Option.isSome(maybe)) {\n return maybe.value.local.once(key)\n }\n if (onceKeysFallback.has(key)) return false\n onceKeysFallback.add(key)\n return true\n }),\n )\n\nconst formatList = (items: ReadonlyArray<string>, limit = 10): string => {\n if (items.length === 0) return ''\n if (items.length <= limit) return items.join(', ')\n return `${items.slice(0, limit).join(', ')}, …(+${items.length - limit})`\n}\n\nexport const emitDepsMismatch = (params: {\n readonly moduleId?: string\n readonly instanceId?: string\n readonly kind: 'computed' | 'source'\n readonly fieldPath: string\n readonly diff: DepsTrace.DepsDiff\n}): Effect.Effect<void> => {\n return Effect.gen(function* () {\n const key = `${params.moduleId ?? 'unknown'}::${params.instanceId ?? 'unknown'}::${params.kind}::${params.fieldPath}`\n const shouldEmit = yield* onceInRunSession(`deps_mismatch:${key}`)\n if (!shouldEmit) return\n\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: params.moduleId,\n instanceId: params.instanceId,\n code: 'state_trait::deps_mismatch',\n severity: 'warning',\n message:\n `[deps] ${params.kind} \"${params.fieldPath}\" declared=[${formatList(params.diff.declared)}] ` +\n `reads=[${formatList(params.diff.reads)}] missing=[${formatList(params.diff.missing)}] ` +\n `unused=[${formatList(params.diff.unused)}]`,\n hint:\n 'deps is the single source of truth for dependencies: incremental scheduling / reverse closures / performance optimizations rely on deps only. ' +\n 'Keep deps consistent with actual reads; if you really depend on the whole object, declare a coarser-grained dep (e.g. \"profile\") to cover sub-field reads.',\n kind: `deps_mismatch:${params.kind}`,\n })\n })\n}\n\nconst schemaHasPath = (\n ast: SchemaAST.AST,\n segments: ReadonlyArray<string>,\n seen: Set<SchemaAST.AST> = new Set(),\n): boolean => {\n if (segments.length === 0) return true\n\n let current = ast\n\n // unwrap Suspend/Refinement (common for recursive schemas and branded schemas)\n while (true) {\n if (SchemaAST.isSuspend(current)) {\n if (seen.has(current)) {\n // Recursion: if we can't statically decide further, allow conservatively to avoid false positives.\n return true\n }\n seen.add(current)\n current = current.f()\n continue\n }\n if (SchemaAST.isRefinement(current)) {\n current = current.from\n continue\n }\n break\n }\n\n // Transformation: prefer `to` (decoded shape), but also allow `from` to reduce false positives.\n if (SchemaAST.isTransformation(current)) {\n return schemaHasPath(current.to, segments, seen) || schemaHasPath(current.from, segments, seen)\n }\n\n if (SchemaAST.isUnion(current)) {\n return current.types.some((t) => schemaHasPath(t, segments, seen))\n }\n\n if (SchemaAST.isTupleType(current)) {\n const candidates: Array<SchemaAST.AST> = []\n for (const e of current.elements) candidates.push(e.type)\n for (const r of current.rest) candidates.push(r.type)\n if (candidates.length === 0) return true\n return candidates.some((t) => schemaHasPath(t, segments, seen))\n }\n\n if (SchemaAST.isTypeLiteral(current)) {\n const [head, ...tail] = segments\n\n for (const ps of current.propertySignatures) {\n if (String(ps.name) !== head) continue\n return schemaHasPath(ps.type, tail, seen)\n }\n\n // index signature: open objects like Record<string, T> allow any key\n for (const sig of current.indexSignatures) {\n let param: SchemaAST.AST = sig.parameter as unknown as SchemaAST.AST\n while (SchemaAST.isRefinement(param)) {\n param = param.from\n }\n const tag = (param as any)?._tag\n if (tag === 'StringKeyword' || tag === 'TemplateLiteral') {\n return schemaHasPath(sig.type, tail, seen)\n }\n }\n\n return false\n }\n\n const tag = (current as any)?._tag\n if (tag === 'AnyKeyword' || tag === 'UnknownKeyword' || tag === 'ObjectKeyword' || tag === 'Declaration') {\n return true\n }\n\n return false\n}\n\nconst schemaHasFieldPath = (stateSchemaAst: SchemaAST.AST, path: string): boolean => {\n if (!path) return true\n if (path === '$root') return true\n\n const normalized = normalizeFieldPath(path)\n if (!normalized) return false\n\n const segs = normalized[0] === '$root' ? normalized.slice(1) : normalized\n return schemaHasPath(stateSchemaAst, segs)\n}\n\nconst formatSchemaMismatchLine = (ref: StateTraitSchemaPathRef): string => {\n if (ref.kind === 'fieldPath') {\n return `- ${ref.entryKind} \"${ref.entryFieldPath}\" fieldPath=\"${ref.path}\"`\n }\n if (ref.kind === 'dep') {\n const rule = ref.ruleName ? ` rule=\"${ref.ruleName}\"` : ''\n return `- ${ref.entryKind} \"${ref.entryFieldPath}\" deps=\"${ref.path}\"${rule}`\n }\n if (ref.kind === 'link_from') {\n return `- link \"${ref.entryFieldPath}\" from=\"${ref.path}\"`\n }\n if (ref.kind === 'check_writeback') {\n return `- check \"${ref.entryFieldPath}\" writeback=\"${ref.path}\"`\n }\n return `- ${ref.entryKind} \"${ref.entryFieldPath}\" path=\"${ref.path}\"`\n}\n\nexport const emitSchemaMismatch = <S extends object>(\n program: StateTraitProgram<S>,\n ctx: Pick<ConvergeContext<S>, 'moduleId' | 'instanceId'>,\n): Effect.Effect<void> =>\n Effect.gen(function* () {\n if (!isDevEnv()) return\n\n const level = yield* FiberRef.get(Debug.currentDiagnosticsLevel)\n if (level === 'off') return\n\n const key = `${ctx.moduleId ?? 'unknown'}::${ctx.instanceId}`\n const shouldEmit = yield* onceInRunSession(`schema_mismatch:${key}`)\n if (!shouldEmit) return\n\n const refs = (program.schemaPaths ?? []) as ReadonlyArray<StateTraitSchemaPathRef>\n if (refs.length === 0) return\n\n const stateSchemaAst = program.stateSchema.ast as unknown as SchemaAST.AST\n\n const mismatches: Array<StateTraitSchemaPathRef> = []\n const seen = new Set<string>()\n\n for (const ref of refs) {\n if (schemaHasFieldPath(stateSchemaAst, ref.path)) continue\n const k = `${ref.kind}|${ref.entryKind}|${ref.entryFieldPath}|${ref.ruleName ?? ''}|${ref.path}`\n if (seen.has(k)) continue\n seen.add(k)\n mismatches.push(ref)\n }\n\n if (mismatches.length === 0) return\n\n const limit = level === 'light' ? 8 : 24\n const lines = mismatches.slice(0, limit).map(formatSchemaMismatchLine)\n if (mismatches.length > limit) {\n lines.push(`- …(+${mismatches.length - limit})`)\n }\n\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: ctx.moduleId,\n instanceId: ctx.instanceId,\n code: 'state_trait::schema_mismatch',\n severity: 'warning',\n message: `[schema] The following paths are not declared in stateSchema (total ${mismatches.length}):\\n${lines.join('\\n')}`,\n hint: 'StateTrait writeback will create missing objects/fields. Declare all fieldPath/deps/link.from and errors.* writeback paths in stateSchema, or fix typos in trait paths.',\n kind: 'schema_mismatch',\n })\n })\n","import { Effect, FiberRef, Layer } from 'effect'\n\n/**\n * ExecVmMode:\n * - Allows kernel implementations (core-ng) to switch converge hot-path execution form without changing public semantics.\n * - Currently mainly affects typed-array reuse strategy in converge plan computation.\n * - Disabled by default in core (enable explicitly via Layer for perf/comparison runs).\n */\nexport const currentExecVmMode = FiberRef.unsafeMake<boolean>(false)\n\nexport const withExecVmMode = <A, E, R>(effect: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>\n Effect.locally(currentExecVmMode, true)(effect)\n\nexport const execVmModeLayer = (enabled: boolean): Layer.Layer<any, never, never> =>\n Layer.fiberRefLocallyScopedWith(currentExecVmMode, () => enabled) as Layer.Layer<any, never, never>\n","export class DenseIdBitSet {\n readonly size: number\n\n private readonly words: Uint32Array\n private readonly touchedWords: Uint32Array | undefined\n private readonly touchedFlags: Uint8Array | undefined\n private touchedCount = 0\n\n constructor(\n size: number,\n options?: {\n readonly clearStrategy?: 'fill' | 'touched-words'\n },\n ) {\n const nextSize = Math.max(0, Math.floor(size))\n this.size = nextSize\n\n const wordCount = Math.ceil(nextSize / 32)\n this.words = new Uint32Array(wordCount)\n\n if (options?.clearStrategy === 'touched-words') {\n this.touchedWords = new Uint32Array(wordCount)\n this.touchedFlags = new Uint8Array(wordCount)\n } else {\n this.touchedWords = undefined\n this.touchedFlags = undefined\n }\n }\n\n clear(): void {\n if (!this.touchedWords) {\n this.words.fill(0)\n return\n }\n\n for (let i = 0; i < this.touchedCount; i++) {\n const wordIndex = this.touchedWords[i]!\n this.words[wordIndex] = 0\n this.touchedFlags![wordIndex] = 0\n }\n this.touchedCount = 0\n }\n\n has(id: number): boolean {\n if (!(id >= 0 && id < this.size)) return false\n const wordIndex = (id / 32) | 0\n const bit = id & 31\n return (this.words[wordIndex]! & (1 << bit)) !== 0\n }\n\n add(id: number): void {\n if (!(id >= 0 && id < this.size)) return\n const wordIndex = (id / 32) | 0\n const bit = id & 31\n const mask = 1 << bit\n\n const prev = this.words[wordIndex]!\n if ((prev & mask) !== 0) return\n\n this.words[wordIndex] = prev | mask\n\n if (!this.touchedWords) return\n if (this.touchedFlags![wordIndex] === 1) return\n this.touchedFlags![wordIndex] = 1\n this.touchedWords[this.touchedCount] = wordIndex\n this.touchedCount += 1\n }\n}\n","import type { ConvergeStaticIrRegistry } from './converge-ir.js'\nimport type { FieldPath } from '../field-path.js'\nimport { DenseIdBitSet } from './bitset.js'\n\nexport interface ConvergeExecIr {\n readonly generation: number\n\n readonly fieldPathsById: ReadonlyArray<FieldPath>\n readonly prefixFieldPathIdsByPathId: Int32Array\n readonly prefixOffsetsByPathId: Int32Array\n\n /**\n * Reachability triggers (059):\n * - prefixPathId -> stepIds that should run when this prefix becomes dirty\n * - includes prefixes of step outPath and depsPaths\n */\n readonly triggerStepIdsByFieldPathId: Int32Array\n readonly triggerStepOffsetsByFieldPathId: Int32Array\n\n readonly topoOrderInt32: Int32Array\n readonly topoOrderImmediateInt32: Int32Array\n readonly topoOrderDeferredInt32: Int32Array\n /**\n * 0=immediate, 1=deferred(043)\n */\n readonly stepSchedulingByStepId: Uint8Array\n readonly stepLabelByStepId: ReadonlyArray<string>\n readonly stepOutFieldPathIdByStepId: Int32Array\n readonly stepFromFieldPathIdByStepId: Int32Array\n readonly allOutPathsShallow: boolean\n readonly stepDepsFieldPathIds: Int32Array\n readonly stepDepsOffsetsByStepId: Int32Array\n\n readonly scratch: {\n readonly dirtyPrefixBitSet: DenseIdBitSet\n readonly reachableStepBitSet: DenseIdBitSet\n readonly dirtyPrefixQueue: Int32Array\n readonly planStepIds: Int32Array\n }\n}\n\nexport const makeConvergeExecIr = (ir: ConvergeStaticIrRegistry): ConvergeExecIr => {\n const generation = ir.generation\n\n const registry = ir.fieldPathIdRegistry\n const fieldPathsById = registry.fieldPaths\n\n const fieldPathCount = fieldPathsById.length\n const prefixOffsetsByPathId = new Int32Array(fieldPathCount + 1)\n let prefixCount = 0\n for (let pathId = 0; pathId < fieldPathCount; pathId++) {\n prefixOffsetsByPathId[pathId] = prefixCount\n prefixCount += fieldPathsById[pathId]?.length ?? 0\n }\n prefixOffsetsByPathId[fieldPathCount] = prefixCount\n\n const prefixFieldPathIdsByPathId = new Int32Array(prefixCount)\n for (let pathId = 0; pathId < fieldPathCount; pathId++) {\n const path = fieldPathsById[pathId]\n if (!path) continue\n let node = registry.root\n let cursor = prefixOffsetsByPathId[pathId]!\n for (const seg of path) {\n const next = node.children.get(seg)\n if (!next) {\n throw new Error(\n `[StateTrait.converge] Failed to resolve prefix trie node for pathId=${String(pathId)} seg=${seg}`,\n )\n }\n node = next\n const id = node.id\n if (typeof id !== 'number') {\n throw new Error(`[StateTrait.converge] Missing FieldPathId for prefix of pathId=${String(pathId)} seg=${seg}`)\n }\n prefixFieldPathIdsByPathId[cursor] = id\n cursor += 1\n }\n }\n\n const topoOrderInt32 = Int32Array.from(ir.topoOrder)\n\n const stepCount = ir.stepsById.length\n const stepSchedulingByStepId = new Uint8Array(stepCount)\n for (let stepId = 0; stepId < stepCount; stepId++) {\n stepSchedulingByStepId[stepId] = ir.stepSchedulingByStepId[stepId] === 'deferred' ? 1 : 0\n }\n\n const immediateTopo: Array<number> = []\n const deferredTopo: Array<number> = []\n for (const stepId of topoOrderInt32) {\n if (stepSchedulingByStepId[stepId] === 1) deferredTopo.push(stepId)\n else immediateTopo.push(stepId)\n }\n const topoOrderImmediateInt32 = Int32Array.from(immediateTopo)\n const topoOrderDeferredInt32 = Int32Array.from(deferredTopo)\n\n const stepLabelByStepId: Array<string> = new Array(stepCount)\n const stepOutFieldPathIdByStepId = new Int32Array(stepCount)\n const stepFromFieldPathIdByStepId = new Int32Array(stepCount)\n stepFromFieldPathIdByStepId.fill(-1)\n for (let stepId = 0; stepId < stepCount; stepId++) {\n const step = ir.stepsById[stepId]\n if (step) {\n stepLabelByStepId[stepId] =\n step.kind === 'computed'\n ? `computed:${step.fieldPath}`\n : step.kind === 'link'\n ? `link:${step.fieldPath}`\n : step.fieldPath\n } else {\n stepLabelByStepId[stepId] = String(stepId)\n }\n stepOutFieldPathIdByStepId[stepId] = ir.stepOutFieldPathIdByStepId[stepId] as number\n if (step?.kind === 'link') {\n const deps = ir.stepDepsFieldPathIdsByStepId[stepId]\n if (deps && deps.length > 0) {\n stepFromFieldPathIdByStepId[stepId] = deps[0] as number\n }\n }\n }\n\n const stepDepsOffsetsByStepId = new Int32Array(stepCount + 1)\n let depCount = 0\n for (let stepId = 0; stepId < stepCount; stepId++) {\n stepDepsOffsetsByStepId[stepId] = depCount\n const deps = ir.stepDepsFieldPathIdsByStepId[stepId] as ReadonlyArray<number> | undefined\n depCount += deps?.length ?? 0\n }\n stepDepsOffsetsByStepId[stepCount] = depCount\n\n const stepDepsFieldPathIds = new Int32Array(depCount)\n for (let stepId = 0; stepId < stepCount; stepId++) {\n const deps = ir.stepDepsFieldPathIdsByStepId[stepId] as ReadonlyArray<number> | undefined\n if (!deps || deps.length === 0) continue\n let cursor = stepDepsOffsetsByStepId[stepId]!\n for (let i = 0; i < deps.length; i++) {\n stepDepsFieldPathIds[cursor] = deps[i]!\n cursor += 1\n }\n }\n\n let allOutPathsShallow = true\n for (let stepId = 0; stepId < stepCount; stepId++) {\n const outPathId = stepOutFieldPathIdByStepId[stepId]!\n const path = fieldPathsById[outPathId]\n if (!path || path.length !== 1) {\n allOutPathsShallow = false\n break\n }\n }\n\n // 059: Build reachability trigger index (prefixId -> stepIds) for plan computation.\n const triggerStepCountsByFieldPathId = new Int32Array(fieldPathCount)\n for (let stepId = 0; stepId < stepCount; stepId++) {\n const outId = stepOutFieldPathIdByStepId[stepId]!\n {\n const start = prefixOffsetsByPathId[outId]!\n const end = prefixOffsetsByPathId[outId + 1]!\n for (let i = start; i < end; i++) {\n const prefixId = prefixFieldPathIdsByPathId[i]!\n triggerStepCountsByFieldPathId[prefixId] = (triggerStepCountsByFieldPathId[prefixId]! + 1) | 0\n }\n }\n\n const depsStart = stepDepsOffsetsByStepId[stepId]!\n const depsEnd = stepDepsOffsetsByStepId[stepId + 1]!\n for (let i = depsStart; i < depsEnd; i++) {\n const depId = stepDepsFieldPathIds[i]!\n const start = prefixOffsetsByPathId[depId]!\n const end = prefixOffsetsByPathId[depId + 1]!\n for (let j = start; j < end; j++) {\n const prefixId = prefixFieldPathIdsByPathId[j]!\n triggerStepCountsByFieldPathId[prefixId] = (triggerStepCountsByFieldPathId[prefixId]! + 1) | 0\n }\n }\n }\n\n const triggerStepOffsetsByFieldPathId = new Int32Array(fieldPathCount + 1)\n let triggerTotal = 0\n for (let fieldPathId = 0; fieldPathId < fieldPathCount; fieldPathId++) {\n triggerStepOffsetsByFieldPathId[fieldPathId] = triggerTotal\n triggerTotal += triggerStepCountsByFieldPathId[fieldPathId]!\n }\n triggerStepOffsetsByFieldPathId[fieldPathCount] = triggerTotal\n\n const triggerStepIdsByFieldPathId = new Int32Array(triggerTotal)\n for (let fieldPathId = 0; fieldPathId < fieldPathCount; fieldPathId++) {\n triggerStepCountsByFieldPathId[fieldPathId] = triggerStepOffsetsByFieldPathId[fieldPathId]!\n }\n\n for (let stepId = 0; stepId < stepCount; stepId++) {\n const outId = stepOutFieldPathIdByStepId[stepId]!\n {\n const start = prefixOffsetsByPathId[outId]!\n const end = prefixOffsetsByPathId[outId + 1]!\n for (let i = start; i < end; i++) {\n const prefixId = prefixFieldPathIdsByPathId[i]!\n const cursor = triggerStepCountsByFieldPathId[prefixId]!\n triggerStepIdsByFieldPathId[cursor] = stepId\n triggerStepCountsByFieldPathId[prefixId] = cursor + 1\n }\n }\n\n const depsStart = stepDepsOffsetsByStepId[stepId]!\n const depsEnd = stepDepsOffsetsByStepId[stepId + 1]!\n for (let i = depsStart; i < depsEnd; i++) {\n const depId = stepDepsFieldPathIds[i]!\n const start = prefixOffsetsByPathId[depId]!\n const end = prefixOffsetsByPathId[depId + 1]!\n for (let j = start; j < end; j++) {\n const prefixId = prefixFieldPathIdsByPathId[j]!\n const cursor = triggerStepCountsByFieldPathId[prefixId]!\n triggerStepIdsByFieldPathId[cursor] = stepId\n triggerStepCountsByFieldPathId[prefixId] = cursor + 1\n }\n }\n }\n\n return {\n generation,\n fieldPathsById,\n prefixFieldPathIdsByPathId,\n prefixOffsetsByPathId,\n triggerStepIdsByFieldPathId,\n triggerStepOffsetsByFieldPathId,\n topoOrderInt32,\n topoOrderImmediateInt32,\n topoOrderDeferredInt32,\n stepSchedulingByStepId,\n stepLabelByStepId,\n stepOutFieldPathIdByStepId,\n stepFromFieldPathIdByStepId,\n allOutPathsShallow,\n stepDepsFieldPathIds,\n stepDepsOffsetsByStepId,\n scratch: {\n dirtyPrefixBitSet: new DenseIdBitSet(fieldPathCount),\n reachableStepBitSet: new DenseIdBitSet(stepCount),\n dirtyPrefixQueue: new Int32Array(fieldPathCount),\n planStepIds: new Int32Array(stepCount),\n },\n }\n}\n","import { Effect, Option } from 'effect'\nimport * as EffectOp from '../effect-op.js'\nimport * as EffectOpCore from '../runtime/core/EffectOpCore.js'\nimport * as Debug from '../runtime/core/DebugSink.js'\nimport { isDevEnv } from '../runtime/core/env.js'\nimport { RunSessionTag } from '../observability/runSession.js'\nimport type { PatchReason } from '../runtime/core/StateTransaction.js'\nimport type { FieldPath } from '../field-path.js'\nimport { emitDepsMismatch, onceInRunSession } from './converge-diagnostics.js'\nimport type { ConvergeContext } from './converge.types.js'\nimport type { ConvergeExecIr } from './converge-exec-ir.js'\nimport * as DepsTrace from './deps-trace.js'\nimport type { StateTraitEntry } from './model.js'\n\nexport const getMiddlewareStack = (): Effect.Effect<EffectOp.MiddlewareStack> =>\n Effect.serviceOption(EffectOpCore.EffectOpMiddlewareTag).pipe(\n Effect.map((maybe) => (Option.isSome(maybe) ? maybe.value.stack : [])),\n )\n\ntype WriterKind = 'computed' | 'link'\n\nconst getWriterKind = (entry: StateTraitEntry<any, string>): WriterKind | undefined =>\n entry.kind === 'computed' ? 'computed' : entry.kind === 'link' ? 'link' : undefined\n\nconst getWriterDeps = (entry: StateTraitEntry<any, string>): ReadonlyArray<string> => {\n if (entry.kind === 'computed') {\n return ((entry.meta as any)?.deps ?? []) as ReadonlyArray<string>\n }\n if (entry.kind === 'link') {\n return [entry.meta.from as string]\n }\n return []\n}\n\nconst shouldSkip = (entry: StateTraitEntry<any, string>, prev: unknown, next: unknown): boolean => {\n if (entry.kind === 'computed') {\n const equals = (entry.meta as any)?.equals as ((a: unknown, b: unknown) => boolean) | undefined\n return equals ? equals(prev, next) : Object.is(prev, next)\n }\n return Object.is(prev, next)\n}\n\nexport const runWriterStepOffFast = <S extends object>(\n ctx: ConvergeContext<S>,\n execIr: ConvergeExecIr,\n draft: {\n readonly getRoot: () => S\n readonly getAt: (path: FieldPath) => unknown\n readonly setAt: (path: FieldPath, value: unknown, prev?: unknown) => void\n },\n stepId: number,\n entry: StateTraitEntry<any, string>,\n): boolean => {\n const kind = getWriterKind(entry)\n if (!kind) return false\n\n const reason: PatchReason = kind === 'computed' ? 'trait-computed' : 'trait-link'\n const from = kind === 'link' ? (entry.meta as any).from : undefined\n const outPathId = execIr.stepOutFieldPathIdByStepId[stepId]\n const outPath = execIr.fieldPathsById[outPathId]!\n const fromPathId = execIr.stepFromFieldPathIdByStepId[stepId]\n const fromPath = fromPathId >= 0 ? execIr.fieldPathsById[fromPathId] : undefined\n\n const current = draft.getRoot() as any\n const prev = draft.getAt(outPath)\n\n let next: unknown\n if (kind === 'computed') {\n const derive = (entry.meta as any).derive as (s: any) => unknown\n next = derive(current)\n } else {\n if (!fromPath) {\n throw new Error(`[StateTrait.converge] Missing link.from FieldPathId: from=\"${String(from)}\"`)\n }\n next = draft.getAt(fromPath)\n }\n\n const changed = !shouldSkip(entry, prev, next)\n if (!changed) return false\n\n draft.setAt(outPath, next, prev)\n ctx.setDraft(draft.getRoot())\n ctx.recordPatch(outPathId, reason, prev, next)\n return true\n}\n\nexport const runWriterStep = <S extends object>(\n ctx: ConvergeContext<S>,\n execIr: ConvergeExecIr,\n draft: {\n readonly getRoot: () => S\n readonly getAt: (path: FieldPath) => unknown\n readonly setAt: (path: FieldPath, value: unknown, prev?: unknown) => void\n },\n stepId: number,\n entry: StateTraitEntry<any, string>,\n shouldCollectDecision: boolean,\n diagnosticsLevel: Debug.DiagnosticsLevel,\n stack: EffectOp.MiddlewareStack,\n): Effect.Effect<boolean> => {\n const moduleId = ctx.moduleId\n const instanceId = ctx.instanceId\n const fieldPath = entry.fieldPath\n\n const kind = getWriterKind(entry)\n if (!kind) return Effect.succeed(false)\n\n const reason: PatchReason = kind === 'computed' ? 'trait-computed' : 'trait-link'\n const opKind: EffectOp.EffectOp<any, any, any>['kind'] = kind === 'computed' ? 'trait-computed' : 'trait-link'\n const opName = kind === 'computed' ? 'computed:update' : 'link:propagate'\n\n const deps = getWriterDeps(entry)\n const from = kind === 'link' ? (entry.meta as any).from : undefined\n const outPathId = execIr.stepOutFieldPathIdByStepId[stepId]\n const outPath = execIr.fieldPathsById[outPathId]!\n const fromPathId = execIr.stepFromFieldPathIdByStepId[stepId]\n const fromPath = fromPathId >= 0 ? execIr.fieldPathsById[fromPathId] : undefined\n\n return Effect.gen(function* () {\n const stepLabel = diagnosticsLevel === 'off' ? undefined : (execIr.stepLabelByStepId[stepId] ?? String(stepId))\n\n let shouldTraceDeps = false\n if (kind === 'computed' && shouldCollectDecision && isDevEnv()) {\n const traceKey = `${moduleId ?? 'unknown'}::${instanceId ?? 'unknown'}::computed::${fieldPath}`\n shouldTraceDeps = yield* onceInRunSession(`deps_trace:settled:${traceKey}`)\n }\n\n const body: Effect.Effect<boolean> = Effect.sync(() => {\n const current = draft.getRoot() as any\n\n const prev = draft.getAt(outPath)\n\n let next: unknown\n let depsDiff: DepsTrace.DepsDiff | undefined\n\n if (kind === 'computed') {\n const derive = (entry.meta as any).derive as (s: any) => unknown\n if (shouldTraceDeps) {\n const traced = DepsTrace.trace((s) => derive(s), current)\n next = traced.value\n depsDiff = DepsTrace.diffDeps(((entry.meta as any).deps ?? []) as ReadonlyArray<string>, traced.reads)\n } else {\n next = derive(current)\n }\n } else {\n if (!fromPath) {\n throw new Error(`[StateTrait.converge] Missing link.from FieldPathId: from=\"${String(from)}\"`)\n }\n next = draft.getAt(fromPath)\n }\n\n const changed = !shouldSkip(entry, prev, next)\n if (!changed) {\n return { changed: false, depsDiff }\n }\n\n draft.setAt(outPath, next, prev)\n ctx.setDraft(draft.getRoot())\n ctx.recordPatch(outPathId, reason, prev, next, undefined, stepId)\n return { changed: true, depsDiff }\n }).pipe(\n Effect.flatMap(({ changed, depsDiff }) =>\n depsDiff && kind === 'computed'\n ? emitDepsMismatch({\n moduleId,\n instanceId,\n kind: 'computed',\n fieldPath,\n diff: depsDiff,\n }).pipe(Effect.as(changed))\n : Effect.succeed(changed),\n ),\n )\n\n const meta: any = {\n moduleId,\n instanceId,\n txnSeq: ctx.txnSeq,\n txnId: ctx.txnId,\n fieldPath,\n deps,\n ...(kind === 'link'\n ? {\n from,\n to: fieldPath,\n }\n : null),\n ...(stepLabel ? { stepId: stepLabel } : null),\n }\n\n if (!(typeof meta.opSeq === 'number' && Number.isFinite(meta.opSeq))) {\n const sessionOpt = yield* Effect.serviceOption(RunSessionTag)\n if (Option.isSome(sessionOpt)) {\n const key = instanceId ?? 'global'\n meta.opSeq = sessionOpt.value.local.nextSeq('opSeq', key)\n }\n }\n\n const op = EffectOp.make<boolean, never, never>({\n kind: opKind,\n name: opName,\n effect: body,\n meta,\n })\n\n if (stack.length === 0) {\n return yield* body\n }\n\n return yield* EffectOp.run(op, stack)\n })\n}\n","import { Effect, FiberRef } from 'effect'\nimport { create } from 'mutative'\nimport type { PatchReason, StateTxnOrigin } from '../runtime/core/StateTransaction.js'\nimport { normalizeFieldPath, type FieldPath, type FieldPathId } from '../field-path.js'\nimport * as Debug from '../runtime/core/DebugSink.js'\nimport { buildDependencyGraph } from './graph.js'\nimport type { StateTraitEntry, StateTraitProgram } from './model.js'\nimport { reverseClosure } from './reverse-closure.js'\nimport type * as RowId from './rowid.js'\n\nexport type ValidateMode = 'submit' | 'blur' | 'valueChange' | 'manual'\n\n/**\n * RULE_SKIP:\n * - Used by rules to indicate \"skip execution for this run\" (e.g. validateOn gating).\n * - Distinct from `undefined` (\"no error after execution\"): skip must not clear existing errors.\n */\nconst RULE_SKIP = Symbol.for('logix.state-trait.validate.skip')\n\nexport type ValidateTarget =\n | { readonly kind: 'root' }\n | { readonly kind: 'field'; readonly path: string }\n | {\n readonly kind: 'list'\n readonly path: string\n readonly listIndexPath?: ReadonlyArray<number>\n }\n | {\n readonly kind: 'item'\n readonly path: string\n readonly listIndexPath?: ReadonlyArray<number>\n readonly index: number\n readonly field?: string\n }\n\nexport interface ScopedValidateRequest {\n readonly mode: ValidateMode\n readonly target: ValidateTarget\n}\n\nexport interface ValidateContext<S> {\n readonly moduleId?: string\n readonly instanceId?: string\n readonly txnSeq?: number\n readonly txnId?: string\n /**\n * External trigger at transaction start: stabilizes validate attribution to the txn origin,\n * preventing in-transaction derived writes from polluting attribution.\n */\n readonly origin?: StateTxnOrigin\n /**\n * RowIdStore: stable row identity for list scopes (later `$rowId` and rowIdMode depend on this).\n */\n readonly rowIdStore?: RowId.RowIdStore\n /**\n * List config hint from StateTraitSpec.list.identityHint (trackBy), used for rowIdMode explanation and degrade diagnostics.\n */\n readonly listConfigs?: ReadonlyArray<RowId.ListConfig>\n readonly getDraft: () => S\n readonly setDraft: (next: S) => void\n readonly recordPatch: (\n path: string | FieldPath | FieldPathId | undefined,\n reason: PatchReason,\n from?: unknown,\n to?: unknown,\n traitNodeId?: string,\n stepId?: number,\n ) => void\n}\n\ntype RuleContext = {\n readonly mode: ValidateMode\n readonly state: unknown\n readonly scope: {\n readonly fieldPath: string\n readonly listPath?: string\n readonly listIndexPath?: ReadonlyArray<number>\n readonly index?: number\n }\n}\n\nconst parseSegments = (path: string): ReadonlyArray<string | number> => {\n if (!path) return []\n return path.split('.').map((seg) => (/^[0-9]+$/.test(seg) ? Number(seg) : seg))\n}\n\nconst getAtPath = (state: any, path: string): any => {\n if (!path || state == null) return state\n const segments = parseSegments(path)\n let current: any = state\n for (const seg of segments) {\n if (current == null) return undefined\n current = current[seg as any]\n }\n return current\n}\n\nconst setAtPathMutating = (draft: unknown, path: string, value: unknown): void => {\n if (!path) return\n const segments = parseSegments(path)\n if (segments.length === 0) return\n\n let current: any = draft\n for (let i = 0; i < segments.length - 1; i++) {\n const key = segments[i]!\n const nextKey = segments[i + 1]!\n\n const next = current[key as any]\n if (next == null || typeof next !== 'object') {\n current[key as any] = typeof nextKey === 'number' ? [] : {}\n }\n current = current[key as any]\n }\n\n const last = segments[segments.length - 1]!\n current[last as any] = value\n}\n\nconst unsetAtPathMutating = (draft: unknown, path: string): void => {\n if (!path) return\n const segments = parseSegments(path)\n if (segments.length === 0) return\n\n let current: any = draft\n for (let i = 0; i < segments.length - 1; i++) {\n const key = segments[i]!\n const next = current[key as any]\n if (next == null || typeof next !== 'object') {\n return\n }\n current = next\n }\n\n const last = segments[segments.length - 1]!\n if (Array.isArray(current) && typeof last === 'number') {\n current[last] = undefined\n return\n }\n if (current && typeof current === 'object') {\n delete current[last as any]\n }\n}\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst normalizeErrorValue = (value: unknown): unknown => (value === undefined || value === null ? undefined : value)\n\nconst mergeRuleErrors = (errors: ReadonlyArray<unknown>): unknown => {\n if (errors.length === 0) return undefined\n if (errors.length === 1) return errors[0]\n\n // ErrorValue constraint: arrays must not represent \"multiple errors\"; for duplicates on the same field, keep the first deterministically.\n if (errors.every(isPlainObject)) {\n const merged: Record<string, unknown> = {}\n for (const patch of errors as ReadonlyArray<Record<string, unknown>>) {\n for (const key of Object.keys(patch)) {\n const incoming = normalizeErrorValue(patch[key])\n if (incoming === undefined) continue\n if (!(key in merged)) merged[key] = incoming\n }\n }\n return Object.keys(merged).length > 0 ? merged : undefined\n }\n\n return errors[0]\n}\n\ntype ErrorValueLeafObject = {\n readonly message: string\n readonly code?: string\n readonly details?: unknown\n}\n\nconst isErrorValueLeafObject = (value: unknown): value is ErrorValueLeafObject => {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false\n const anyValue = value as Record<string, unknown>\n const msg = anyValue.message\n if (typeof msg !== 'string' || msg.length === 0) return false\n for (const key of Object.keys(anyValue)) {\n if (key !== 'message' && key !== 'code' && key !== 'details') return false\n }\n const code = anyValue.code\n if (code !== undefined && (typeof code !== 'string' || code.length === 0)) return false\n return true\n}\n\nconst countErrorLeaves = (value: unknown): number => {\n if (value === null || value === undefined) return 0\n if (typeof value === 'string') return value.length > 0 ? 1 : 0\n if (Array.isArray(value)) return value.reduce((acc, v) => acc + countErrorLeaves(v), 0)\n if (typeof value === 'object') {\n if (isErrorValueLeafObject(value)) return 1\n let acc = 0\n for (const [k, v] of Object.entries(value as any)) {\n if (k === '$rowId') continue\n acc += countErrorLeaves(v)\n }\n return acc\n }\n return 1\n}\n\ntype ListScopeResult = {\n readonly listError?: unknown\n readonly rows?: ReadonlyArray<unknown>\n readonly traces?: ReadonlyArray<ListScopeRuleTrace>\n readonly touchedKeys: ReadonlySet<string>\n readonly touchedListError: boolean\n}\n\ntype TraitCheckOp = 'set' | 'unset' | 'insert' | 'remove'\n\ntype ListScopeRuleTrace = {\n readonly ruleId: string\n readonly summary: {\n readonly scannedRows: number\n readonly affectedRows: number\n readonly changedRows: number\n readonly setCount?: number\n readonly clearedCount?: number\n readonly durationMs?: number\n }\n}\n\ntype TraitCheckRowIdMode = 'trackBy' | 'store' | 'index'\n\ntype TraitCheckDegraded = {\n readonly kind: string\n readonly message?: string\n}\n\nconst nowMs = (() => {\n const perf = globalThis.performance\n if (perf && typeof perf.now === 'function') {\n return () => perf.now()\n }\n return () => Date.now()\n})()\n\nconst isTraitCheckOp = (value: unknown): value is TraitCheckOp =>\n value === 'set' || value === 'unset' || value === 'insert' || value === 'remove'\n\nconst normalizeTraitCheckPath = (path: string): ReadonlyArray<string> => normalizeFieldPath(path) ?? ['$root']\n\nconst sameFieldPath = (a: ReadonlyArray<string>, b: ReadonlyArray<string>): boolean => {\n if (a.length !== b.length) return false\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false\n }\n return true\n}\n\nconst toTraitCheckTrigger = (\n origin: StateTxnOrigin | undefined,\n fallbackPath: string,\n): { readonly kind: string; readonly path: ReadonlyArray<string>; readonly op: TraitCheckOp } => {\n const details = origin?.details\n const detailsObj = isPlainObject(details) ? (details as Record<string, unknown>) : undefined\n const tag = detailsObj && typeof detailsObj._tag === 'string' ? detailsObj._tag : undefined\n\n const kindBase = origin?.kind && origin.kind.length > 0 ? origin.kind : 'unknown'\n const kind =\n tag && tag.length > 0\n ? `${kindBase}:${tag}`\n : origin?.name && origin.name.length > 0\n ? `${kindBase}:${origin.name}`\n : kindBase\n\n const opRaw = detailsObj?.op\n const op: TraitCheckOp = isTraitCheckOp(opRaw) ? opRaw : 'set'\n\n const pathRaw = detailsObj && typeof detailsObj.path === 'string' ? detailsObj.path : undefined\n const path = normalizeTraitCheckPath(pathRaw ?? fallbackPath)\n\n return { kind, path, op }\n}\n\nconst toTraitCheckRowIdMode = (params: {\n readonly trackBy?: string\n readonly rowIdStore?: RowId.RowIdStore\n}): TraitCheckRowIdMode => {\n if (params.trackBy) return 'trackBy'\n if (params.rowIdStore) return 'store'\n return 'index'\n}\n\nconst toTraitCheckDegraded = (\n trigger: { readonly op: TraitCheckOp; readonly path: ReadonlyArray<string> },\n scopeFieldPath: ReadonlyArray<string>,\n rowIdMode: TraitCheckRowIdMode,\n): TraitCheckDegraded | undefined => {\n if (rowIdMode === 'trackBy') return undefined\n if (trigger.op !== 'set') return undefined\n if (!sameFieldPath(trigger.path, scopeFieldPath)) return undefined\n return {\n kind: 'rowId:degraded:no_trackBy_root_replace',\n message: 'list root was replaced without trackBy; rowId stability is degraded',\n }\n}\n\nconst mergeRowPatchPreferFirst = (\n base: Record<string, unknown> | undefined,\n incoming: unknown,\n): Record<string, unknown> | undefined => {\n if (!isPlainObject(incoming)) return base\n const next: Record<string, unknown> = base ? { ...base } : {}\n for (const key of Object.keys(incoming)) {\n const v = normalizeErrorValue(incoming[key])\n if (v === undefined) continue\n if (!(key in next)) next[key] = v\n }\n return Object.keys(next).length > 0 ? next : undefined\n}\n\nconst shallowEqualPlainObject = (a: Record<string, unknown>, b: Record<string, unknown>): boolean => {\n const aKeys = Object.keys(a)\n const bKeys = Object.keys(b)\n if (aKeys.length !== bKeys.length) return false\n for (const key of aKeys) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false\n if (!Object.is(a[key], b[key])) return false\n }\n return true\n}\n\nconst collectRuleKeysFromDeps = (rule: unknown, listPath: string): ReadonlyArray<string> => {\n if (!rule || typeof rule !== 'object') return []\n const deps = (rule as any).deps\n if (!Array.isArray(deps)) return []\n\n const prefix = `${listPath}[].`\n const keys: Array<string> = []\n for (const dep of deps) {\n if (typeof dep !== 'string') continue\n if (dep.startsWith(prefix)) {\n const key = dep.slice(prefix.length)\n if (key) keys.push(key)\n continue\n }\n if (dep.length > 0 && !dep.includes('.') && !dep.includes('[') && !dep.includes(']')) {\n keys.push(dep)\n }\n }\n\n return Array.from(new Set(keys)).sort()\n}\n\nconst evalListScopeCheck = (\n entry: Extract<StateTraitEntry<any, string>, { readonly kind: 'check' }>,\n input: unknown,\n ctx: RuleContext,\n options?: {\n readonly trace?: {\n readonly listPath: string\n readonly errorsBasePath: string\n readonly errorsRoot: unknown\n }\n },\n): ListScopeResult | typeof RULE_SKIP => {\n const rules = entry.meta.rules as Record<string, any>\n const names = Object.keys(rules).sort()\n\n let listError: unknown | undefined = undefined\n let rows: Array<Record<string, unknown> | undefined> | undefined = undefined\n let traces: Array<ListScopeRuleTrace> | undefined = undefined\n let ran = false\n let touchedListError = false\n const touchedKeys = new Set<string>()\n const listPath = ctx.scope.listPath ?? ctx.scope.fieldPath\n\n const mergeRows = (incomingRows: ReadonlyArray<unknown>): void => {\n if (!rows) rows = []\n const limit = Math.max(rows.length, incomingRows.length)\n if (rows.length < limit) rows.length = limit\n\n for (let i = 0; i < incomingRows.length; i++) {\n const merged = mergeRowPatchPreferFirst(rows[i], incomingRows[i])\n rows[i] = merged\n }\n }\n\n const summarizeRuleRows = (\n errorsBasePath: string,\n keys: ReadonlyArray<string>,\n scannedRows: number,\n rowsPatch: ReadonlyArray<unknown> | undefined,\n ): {\n readonly affectedRows: number\n readonly changedRows: number\n readonly setCount: number\n readonly clearedCount: number\n } => {\n if (keys.length === 0 || scannedRows <= 0) {\n return { affectedRows: 0, changedRows: 0, setCount: 0, clearedCount: 0 }\n }\n\n let affectedRows = 0\n let changedRows = 0\n let setCount = 0\n let clearedCount = 0\n\n for (let index = 0; index < scannedRows; index++) {\n const prevRow = getAtPath(options?.trace?.errorsRoot as any, `${errorsBasePath}.rows.${index}`)\n const prevObj = isPlainObject(prevRow) ? (prevRow as Record<string, unknown>) : undefined\n const patch = rowsPatch?.[index]\n const patchObj = isPlainObject(patch) ? (patch as Record<string, unknown>) : undefined\n\n let hasPrev = false\n let hasNext = false\n let rowChanged = false\n\n for (const key of keys) {\n const prev = normalizeErrorValue(prevObj?.[key])\n const next = normalizeErrorValue(patchObj?.[key])\n if (prev !== undefined) hasPrev = true\n if (next !== undefined) hasNext = true\n if (Object.is(prev, next)) continue\n rowChanged = true\n if (next === undefined) {\n if (prev !== undefined) clearedCount += 1\n } else {\n setCount += 1\n }\n }\n\n if (hasPrev || hasNext) affectedRows += 1\n if (rowChanged) changedRows += 1\n }\n\n return { affectedRows, changedRows, setCount, clearedCount }\n }\n\n for (const name of names) {\n const rule = rules[name]\n const collectTrace = options?.trace?.listPath && options?.trace?.errorsRoot\n const startedAt = collectTrace ? nowMs() : 0\n try {\n const out =\n typeof rule === 'function'\n ? rule(input, ctx)\n : rule && typeof rule === 'object'\n ? rule.validate(input, ctx)\n : undefined\n\n if (out === RULE_SKIP) continue\n ran = true\n\n for (const key of collectRuleKeysFromDeps(rule, listPath)) {\n touchedKeys.add(key)\n }\n\n if (collectTrace) {\n const traceListPath = options!.trace!.listPath\n const traceErrorsBasePath = options!.trace!.errorsBasePath\n const keys = collectRuleKeysFromDeps(rule, traceListPath)\n const scannedRows = Array.isArray(input) ? input.length : 0\n\n const rowsPatch: ReadonlyArray<unknown> | undefined = Array.isArray(out)\n ? out\n : isPlainObject(out) && Array.isArray((out as any).rows)\n ? ((out as any).rows as ReadonlyArray<unknown>)\n : undefined\n\n const summary = summarizeRuleRows(traceErrorsBasePath, keys, scannedRows, rowsPatch)\n const durationMs = Math.max(0, nowMs() - startedAt)\n\n if (!traces) traces = []\n traces.push({\n ruleId: `${entry.fieldPath}#${name}`,\n summary: {\n scannedRows,\n affectedRows: summary.affectedRows,\n changedRows: summary.changedRows,\n setCount: summary.setCount,\n clearedCount: summary.clearedCount,\n durationMs,\n },\n })\n }\n\n if (out === undefined) continue\n\n if (Array.isArray(out)) {\n mergeRows(out)\n continue\n }\n\n if (isPlainObject(out)) {\n const maybeRows = (out as any).rows\n const hasListKey = Object.prototype.hasOwnProperty.call(out, '$list')\n if (hasListKey) touchedListError = true\n const maybeListError = normalizeErrorValue((out as any).$list)\n if (maybeListError !== undefined && listError === undefined) {\n listError = maybeListError\n }\n if (Array.isArray(maybeRows)) {\n mergeRows(maybeRows)\n } else if (!hasListKey && maybeListError === undefined) {\n // Allow list-scope rules to return a `$list` error value (string/object) directly without implying a rows structure.\n const v = normalizeErrorValue(out)\n if (v !== undefined && listError === undefined) listError = v\n touchedListError = true\n }\n continue\n }\n\n // Non object/array: treat as a `$list` error value.\n const v = normalizeErrorValue(out)\n if (v !== undefined && listError === undefined) listError = v\n touchedListError = true\n } catch {\n // Rule runtime error: keep it a no-op to avoid producing a partial error tree.\n // Diagnostics and degrade handling are handled by DebugSink/DevtoolsHub in later phases.\n }\n }\n\n if (!ran) return RULE_SKIP\n return {\n listError,\n rows,\n traces,\n touchedKeys,\n touchedListError,\n }\n}\n\nconst toPatternPath = (path: string): string => {\n if (!path) return path\n const segments = path.split('.').filter(Boolean)\n const out: Array<string> = []\n\n for (const seg of segments) {\n if (/^[0-9]+$/.test(seg)) {\n if (out.length === 0) continue\n const last = out[out.length - 1]!\n if (!last.endsWith('[]')) out[out.length - 1] = `${last}[]`\n continue\n }\n out.push(seg)\n }\n\n return out.join('.')\n}\n\nconst toGraphTargets = (target: ValidateTarget): ReadonlyArray<string> => {\n if (target.kind === 'root') {\n return []\n }\n if (target.kind === 'field') {\n return [toPatternPath(target.path)]\n }\n if (target.kind === 'list') {\n // A list target should hit both list-scope check (fieldPath=listPath) and item-scope check (fieldPath=listPath[]).\n return [target.path, `${target.path}[]`]\n }\n // item\n const base = `${target.path}[]`\n const field = target.field ? toPatternPath(target.field) : undefined\n return [field ? `${base}.${field}` : base]\n}\n\nconst normalizeListIndexPath = (listIndexPath: ReadonlyArray<number> | undefined): ReadonlyArray<number> => {\n if (!Array.isArray(listIndexPath) || listIndexPath.length === 0) return []\n const out: Array<number> = []\n for (const n of listIndexPath) {\n if (!Number.isInteger(n) || n < 0) continue\n out.push(n)\n }\n return out\n}\n\nconst toListInstanceKey = (listPath: string, listIndexPath: ReadonlyArray<number> | undefined): string => {\n const p = normalizeListIndexPath(listIndexPath)\n return p.length === 0 ? `${listPath}@@` : `${listPath}@@${p.join(',')}`\n}\n\nconst extractIndexBindings = (requests: ReadonlyArray<ScopedValidateRequest>): Map<string, ReadonlySet<number>> => {\n const map = new Map<string, Set<number>>()\n for (const req of requests) {\n if (req.target.kind !== 'item') continue\n const key = toListInstanceKey(req.target.path, req.target.listIndexPath)\n const set = map.get(key) ?? new Set<number>()\n set.add(req.target.index)\n map.set(key, set)\n }\n return map\n}\n\nconst extractListBindings = (\n requests: ReadonlyArray<ScopedValidateRequest>,\n): {\n readonly all: ReadonlySet<string>\n readonly instances: ReadonlySet<string>\n} => {\n const all = new Set<string>()\n const instances = new Set<string>()\n for (const req of requests) {\n if (req.target.kind !== 'list') continue\n if (!req.target.path) continue\n if (req.target.listIndexPath && req.target.listIndexPath.length > 0) {\n instances.add(toListInstanceKey(req.target.path, req.target.listIndexPath))\n continue\n }\n all.add(req.target.path)\n }\n return { all, instances }\n}\n\nconst resolveMode = (requests: ReadonlyArray<ScopedValidateRequest>): ValidateMode => {\n const priorities: Record<ValidateMode, number> = {\n submit: 4,\n blur: 3,\n valueChange: 2,\n manual: 1,\n }\n let best: ValidateMode = 'manual'\n let bestP = priorities[best]\n for (const r of requests) {\n const p = priorities[r.mode]\n if (p > bestP) {\n bestP = p\n best = r.mode\n }\n }\n return best\n}\n\nconst evalCheck = (\n entry: Extract<StateTraitEntry<any, string>, { readonly kind: 'check' }>,\n input: unknown,\n ctx: RuleContext,\n): unknown => {\n const rules = entry.meta.rules as Record<string, any>\n const names = Object.keys(rules).sort()\n const results: Array<unknown> = []\n let ran = false\n\n for (const name of names) {\n const rule = rules[name]\n try {\n const out =\n typeof rule === 'function'\n ? rule(input, ctx)\n : rule && typeof rule === 'object'\n ? rule.validate(input, ctx)\n : undefined\n if (out === RULE_SKIP) continue\n ran = true\n const normalized = normalizeErrorValue(out)\n if (normalized !== undefined) results.push(normalized)\n } catch {\n // Rule runtime error: keep it a no-op to avoid producing a partial error tree.\n // Diagnostics and degrade handling are handled by DebugSink/DevtoolsHub in later phases.\n }\n }\n\n if (!ran) return RULE_SKIP\n return mergeRuleErrors(results)\n}\n\ntype ErrorUpdate = {\n readonly errorPath: string\n readonly prev: unknown\n readonly next: unknown\n readonly stepId: string\n}\n\n/**\n * validateInTransaction:\n * - Execute a batch of scoped validate requests within an already-started StateTransaction.\n * - Compute the minimal check set via ReverseClosure, and write results back to `state.errors.*`.\n * - If no actual error changes occur, do not update the draft (preserve 0-commit semantics).\n */\nexport const validateInTransaction = <S extends object>(\n program: StateTraitProgram<S>,\n ctx: ValidateContext<S>,\n requests: ReadonlyArray<ScopedValidateRequest>,\n): Effect.Effect<void> =>\n Effect.gen(function* () {\n const diagnosticsLevel = yield* FiberRef.get(Debug.currentDiagnosticsLevel)\n const enableTrace = diagnosticsLevel !== 'off'\n const traceEvents: Array<Debug.Event> | undefined = enableTrace ? [] : undefined\n\n yield* Effect.sync(() => {\n if (requests.length === 0) return\n\n const checks = program.entries.filter(\n (e): e is Extract<StateTraitEntry<any, string>, { readonly kind: 'check' }> => (e as any).kind === 'check',\n )\n if (checks.length === 0) return\n\n const hasRoot = requests.some((r) => r.target.kind === 'root')\n const draft = ctx.getDraft() as any\n\n // Compute check scopes to execute (set of field paths).\n const scopesToValidate = (() => {\n if (hasRoot) {\n return new Set<string>(checks.map((c) => c.fieldPath))\n }\n const graph = buildDependencyGraph(program)\n const set = new Set<string>()\n for (const req of requests) {\n for (const t of toGraphTargets(req.target)) {\n for (const node of reverseClosure(graph, t)) {\n set.add(node)\n }\n }\n }\n return set\n })()\n\n const selectedChecks = checks.filter((c) => scopesToValidate.has(c.fieldPath))\n if (selectedChecks.length === 0) return\n\n const mode = resolveMode(requests)\n\n if (enableTrace && traceEvents) {\n traceEvents.push({\n type: 'trace:trait:validate',\n moduleId: ctx.moduleId,\n instanceId: ctx.instanceId,\n txnSeq: ctx.txnSeq,\n txnId: ctx.txnId,\n data: {\n mode,\n requestCount: requests.length,\n selectedCheckCount: selectedChecks.length,\n hasRoot,\n },\n })\n }\n\n // Item-scope bindings: used only for non-root validate (root validate runs full length by current arrays).\n const indexBindings = extractIndexBindings(requests)\n const listBindings = extractListBindings(requests)\n const listBindingsAll = listBindings.all\n const listBindingsInstances = listBindings.instances\n\n const instanceIndexPathByKey = (() => {\n const map = new Map<string, ReadonlyArray<number>>()\n for (const req of requests) {\n if (req.target.kind !== 'item' && req.target.kind !== 'list') continue\n const key = toListInstanceKey(req.target.path, req.target.listIndexPath)\n map.set(key, normalizeListIndexPath(req.target.listIndexPath))\n }\n return map\n })()\n\n const updates: Array<ErrorUpdate> = []\n\n const listConfigByPath = (() => {\n const map = new Map<string, RowId.ListConfig>()\n const configs = ctx.listConfigs ?? []\n for (const cfg of configs) {\n if (!cfg || typeof (cfg as any).path !== 'string') continue\n map.set((cfg as any).path, cfg as any)\n }\n return map\n })()\n\n const readTrackBy = (item: unknown, trackBy: string): unknown => {\n if (!item || typeof item !== 'object') return undefined\n const segments = trackBy.split('.')\n let current: any = item\n for (const seg of segments) {\n if (current == null) return undefined\n current = current[seg as any]\n }\n return current\n }\n\n const makeStepId = (fieldPath: string, index?: number): string =>\n index === undefined ? `check:${fieldPath}` : `check:${fieldPath}@${index}`\n\n type ListRuntime = {\n readonly listPath: string\n readonly listIndexPath: ReadonlyArray<number>\n readonly valuePath: string\n readonly errorBasePath: string\n readonly parentRowId?: RowId.RowId\n readonly items: ReadonlyArray<unknown>\n readonly trackBy?: string\n readonly rowIds?: ReadonlyArray<string>\n }\n\n const listPaths = Array.from(listConfigByPath.keys())\n const listPathSet = new Set(listPaths)\n\n const parentOf = (path: string): string | undefined => {\n const segments = path.split('.').filter(Boolean)\n let best: string | undefined\n for (let i = 1; i < segments.length; i++) {\n const prefix = segments.slice(0, i).join('.')\n if (listPathSet.has(prefix)) best = prefix\n }\n return best\n }\n\n const parentByPath = new Map<string, string | undefined>()\n const suffixByPath = new Map<string, string>()\n for (const path of listPaths) {\n const parent = parentOf(path)\n parentByPath.set(path, parent)\n const suffix = parent ? path.slice(parent.length + 1) : path\n suffixByPath.set(path, suffix)\n }\n\n const normalizeInstanceIndexPath = (\n listPath: string,\n listIndexPath: ReadonlyArray<number> | undefined,\n ): ReadonlyArray<number> | undefined => {\n const normalized = normalizeListIndexPath(listIndexPath)\n let expected = 0\n let p = parentByPath.get(listPath)\n while (p) {\n expected += 1\n p = parentByPath.get(p)\n }\n if (expected === 0) return []\n if (normalized.length !== expected) return undefined\n return normalized\n }\n\n const listRuntimeByKey = new Map<string, ListRuntime>()\n\n const getListRuntime = (listPath: string, listIndexPath: ReadonlyArray<number>): ListRuntime | undefined => {\n const parent = parentByPath.get(listPath)\n const cacheKey = parent ? `${listPath}@@#${listIndexPath.join(',')}` : `${listPath}@@root`\n\n const cached = listRuntimeByKey.get(cacheKey)\n if (cached) return cached\n\n const listCfg = listConfigByPath.get(listPath)\n const trackBy =\n listCfg && typeof (listCfg as any).trackBy === 'string' ? ((listCfg as any).trackBy as string) : undefined\n\n if (!parent) {\n const listValue = getAtPath(draft, listPath)\n const items: ReadonlyArray<unknown> = Array.isArray(listValue) ? listValue : []\n const rowIds: ReadonlyArray<string> | undefined = ctx.rowIdStore\n ? ctx.rowIdStore.ensureList(listPath, items, trackBy)\n : undefined\n\n const out: ListRuntime = {\n listPath,\n listIndexPath: [],\n valuePath: listPath,\n errorBasePath: `errors.${listPath}`,\n items,\n trackBy,\n rowIds,\n }\n listRuntimeByKey.set(cacheKey, out)\n return out\n }\n\n if (listIndexPath.length === 0) return undefined\n const parentIndexPath = listIndexPath.slice(0, -1)\n const parentIndex = listIndexPath[listIndexPath.length - 1]!\n const parentRuntime = getListRuntime(parent, parentIndexPath)\n if (!parentRuntime) return undefined\n if (parentIndex < 0 || parentIndex >= parentRuntime.items.length) return undefined\n\n const suffix = suffixByPath.get(listPath) ?? ''\n if (!suffix) return undefined\n\n const valuePath = `${parentRuntime.valuePath}.${parentIndex}.${suffix}`\n const errorBasePath = `${parentRuntime.errorBasePath}.rows.${parentIndex}.${suffix}`\n\n const listValue = getAtPath(draft, valuePath)\n const items: ReadonlyArray<unknown> = Array.isArray(listValue) ? listValue : []\n\n const parentRowId =\n (parentRuntime.rowIds?.[parentIndex] as any) ??\n (ctx.rowIdStore ? ctx.rowIdStore.getRowId(parent, parentIndex, parentRuntime.parentRowId) : undefined)\n\n const rowIds: ReadonlyArray<string> | undefined = ctx.rowIdStore\n ? ctx.rowIdStore.ensureList(listPath, items, trackBy, parentRowId)\n : undefined\n\n const out: ListRuntime = {\n listPath,\n listIndexPath,\n valuePath,\n errorBasePath,\n parentRowId,\n items,\n trackBy,\n rowIds,\n }\n listRuntimeByKey.set(cacheKey, out)\n return out\n }\n\n const enumerateAllListInstances = (listPath: string): ReadonlyArray<ListRuntime> => {\n const parent = parentByPath.get(listPath)\n if (!parent) {\n const rt = getListRuntime(listPath, [])\n return rt ? [rt] : []\n }\n\n const parentInstances = enumerateAllListInstances(parent)\n const out: Array<ListRuntime> = []\n for (const p of parentInstances) {\n for (let i = 0; i < p.items.length; i++) {\n const childIndexPath = [...p.listIndexPath, i]\n const rt = getListRuntime(listPath, childIndexPath)\n if (rt) out.push(rt)\n }\n }\n return out\n }\n\n type RowDraft = {\n readonly listPath: string\n readonly listIndexPath: ReadonlyArray<number>\n readonly parentRowId?: RowId.RowId\n readonly index: number\n readonly errorBasePath: string\n readonly errorPath: string\n readonly prev: unknown\n readonly next: Record<string, unknown>\n readonly stepId: string\n removed?: boolean\n }\n\n const rowDrafts = new Map<string, RowDraft>()\n\n const getOrCreateRowDraft = (list: ListRuntime, index: number, stepId: string): RowDraft => {\n const errorPath = `${list.errorBasePath}.rows.${index}`\n const existing = rowDrafts.get(errorPath)\n if (existing) return existing\n\n const prev = getAtPath(draft, errorPath)\n const next: Record<string, unknown> = isPlainObject(prev) ? { ...(prev as any) } : {}\n\n const out: RowDraft = {\n listPath: list.listPath,\n listIndexPath: list.listIndexPath,\n parentRowId: list.parentRowId,\n index,\n errorBasePath: list.errorBasePath,\n errorPath,\n prev,\n next,\n stepId,\n removed: false,\n }\n rowDrafts.set(errorPath, out)\n return out\n }\n\n const applyScopedRowPatch = (\n row: RowDraft,\n keysFromDeps: ReadonlySet<string>,\n patchObj: Record<string, unknown> | undefined,\n ): void => {\n if (keysFromDeps.size === 0) return\n\n const patchKeys = patchObj ? Object.keys(patchObj) : []\n const existingKeys = Object.keys(row.next).filter((k) => k !== '$rowId')\n\n const keysToApply = new Set<string>()\n for (const key of existingKeys) {\n if (keysFromDeps.has(key)) keysToApply.add(key)\n }\n for (const key of patchKeys) {\n if (keysFromDeps.has(key)) keysToApply.add(key)\n }\n\n if (keysToApply.size === 0) return\n\n for (const key of keysToApply) {\n const v = normalizeErrorValue(patchObj?.[key])\n if (v === undefined) {\n delete row.next[key]\n } else {\n row.next[key] = v\n }\n }\n }\n\n for (const check of selectedChecks) {\n const scopeFieldPath = check.fieldPath\n\n // list-scope check: write back into `$list/rows[]` (errors.<listPath>.$list / errors.<listPath>.rows[i].*).\n const listCfg = listConfigByPath.get(scopeFieldPath)\n if (listCfg) {\n const listPath = scopeFieldPath\n const listInstances = (() => {\n if (hasRoot) return enumerateAllListInstances(listPath)\n if (listBindingsAll.has(listPath)) return enumerateAllListInstances(listPath)\n\n const keys = new Set<string>()\n for (const k of listBindingsInstances) {\n if (k.startsWith(`${listPath}@@`)) keys.add(k)\n }\n for (const k of indexBindings.keys()) {\n if (k.startsWith(`${listPath}@@`)) keys.add(k)\n }\n\n if (keys.size === 0) return enumerateAllListInstances(listPath)\n\n const out: Array<ListRuntime> = []\n for (const k of keys) {\n const indexPath = instanceIndexPathByKey.get(k)\n const normalized = normalizeInstanceIndexPath(listPath, indexPath)\n if (!normalized) continue\n const rt = getListRuntime(listPath, normalized)\n if (rt) out.push(rt)\n }\n return out\n })()\n\n for (const listRuntime of listInstances) {\n const items = listRuntime.items\n\n const trigger = enableTrace ? toTraitCheckTrigger(ctx.origin, listPath) : undefined\n\n const scopeFieldPathSegments = enableTrace ? normalizeTraitCheckPath(listPath) : undefined\n\n const rowIdMode = enableTrace\n ? toTraitCheckRowIdMode({\n trackBy: listRuntime.trackBy,\n rowIdStore: ctx.rowIdStore,\n })\n : undefined\n\n const degraded =\n enableTrace && trigger && scopeFieldPathSegments && rowIdMode\n ? toTraitCheckDegraded(trigger, scopeFieldPathSegments, rowIdMode)\n : undefined\n\n const next = evalListScopeCheck(\n check,\n items,\n {\n mode,\n state: draft,\n scope: { fieldPath: scopeFieldPath, listPath, listIndexPath: listRuntime.listIndexPath },\n },\n enableTrace\n ? {\n trace: { listPath, errorsBasePath: listRuntime.errorBasePath, errorsRoot: draft },\n }\n : undefined,\n )\n if (next === RULE_SKIP) continue\n const keysFromDeps = next.touchedKeys\n\n if (\n enableTrace &&\n traceEvents &&\n trigger &&\n scopeFieldPathSegments &&\n rowIdMode &&\n next.traces &&\n next.traces.length > 0\n ) {\n for (const t of next.traces) {\n const data: any = {\n ruleId: t.ruleId,\n scopeFieldPath: scopeFieldPathSegments,\n mode,\n trigger,\n summary: t.summary,\n rowIdMode,\n }\n if (degraded) {\n data.degraded = degraded\n }\n traceEvents.push({\n type: 'trace:trait:check',\n moduleId: ctx.moduleId,\n instanceId: ctx.instanceId,\n txnSeq: ctx.txnSeq,\n txnId: ctx.txnId,\n data,\n })\n }\n }\n\n const listErrorPath = `${listRuntime.errorBasePath}.$list`\n const prevListError = getAtPath(draft, listErrorPath)\n const nextListError = normalizeErrorValue(next.listError)\n\n if (next.touchedListError && !Object.is(prevListError, nextListError)) {\n updates.push({\n errorPath: listErrorPath,\n prev: prevListError,\n next: nextListError,\n stepId: makeStepId(scopeFieldPath),\n })\n }\n\n const rows = next.rows ?? []\n const prevRows = getAtPath(draft, `${listRuntime.errorBasePath}.rows`)\n const prevLen = Array.isArray(prevRows) ? prevRows.length : 0\n const limit = Math.max(items.length, rows.length, prevLen)\n\n for (let index = 0; index < limit; index++) {\n const rowErrorPath = `${listRuntime.errorBasePath}.rows.${index}`\n const existing = rowDrafts.get(rowErrorPath)\n\n if (index >= items.length) {\n const prevRow = existing?.prev ?? getAtPath(draft, rowErrorPath)\n if (prevRow === undefined && !existing) continue\n const row = existing ?? getOrCreateRowDraft(listRuntime, index, makeStepId(scopeFieldPath, index))\n row.removed = true\n for (const key of Object.keys(row.next)) {\n delete row.next[key]\n }\n continue\n }\n\n const patch = rows[index]\n const patchObj = isPlainObject(patch) ? patch : undefined\n\n if (existing) {\n applyScopedRowPatch(existing, keysFromDeps, patchObj)\n continue\n }\n\n const patchHasRelevant = patchObj && Object.keys(patchObj).some((k) => keysFromDeps.has(k))\n\n if (patchHasRelevant) {\n const row = getOrCreateRowDraft(listRuntime, index, makeStepId(scopeFieldPath, index))\n applyScopedRowPatch(row, keysFromDeps, patchObj)\n continue\n }\n\n const prevRow = getAtPath(draft, rowErrorPath)\n const prevHasRelevant =\n isPlainObject(prevRow) && Object.keys(prevRow).some((k) => k !== '$rowId' && keysFromDeps.has(k))\n const prevOnlyRowId =\n isPlainObject(prevRow) && Object.keys(prevRow).length === 1 && Object.keys(prevRow)[0] === '$rowId'\n\n if (prevHasRelevant || prevOnlyRowId) {\n const row = getOrCreateRowDraft(listRuntime, index, makeStepId(scopeFieldPath, index))\n applyScopedRowPatch(row, keysFromDeps, undefined)\n }\n }\n\n continue\n }\n\n continue\n }\n\n // Phase 2: supports list.item scope (\"items[]\" / \"orders.items[]\"), and uses listIndexPath for nested writebacks.\n if (scopeFieldPath.endsWith('[]')) {\n const listPath = scopeFieldPath.slice(0, -2)\n\n const listInstances = (() => {\n if (hasRoot) return enumerateAllListInstances(listPath)\n if (listBindingsAll.has(listPath)) return enumerateAllListInstances(listPath)\n\n const keys = new Set<string>()\n for (const k of listBindingsInstances) {\n if (k.startsWith(`${listPath}@@`)) keys.add(k)\n }\n for (const k of indexBindings.keys()) {\n if (k.startsWith(`${listPath}@@`)) keys.add(k)\n }\n\n if (keys.size === 0) return enumerateAllListInstances(listPath)\n\n const out: Array<ListRuntime> = []\n for (const k of keys) {\n const indexPath = instanceIndexPathByKey.get(k)\n const normalized = normalizeInstanceIndexPath(listPath, indexPath)\n if (!normalized) continue\n const rt = getListRuntime(listPath, normalized)\n if (rt) out.push(rt)\n }\n return out\n })()\n\n const rules = check.meta.rules as Record<string, any>\n const names = Object.keys(rules).sort()\n\n for (const listRuntime of listInstances) {\n const instanceKey = toListInstanceKey(listPath, listRuntime.listIndexPath)\n const indices: ReadonlyArray<number> =\n hasRoot || listBindingsAll.has(listPath) || listBindingsInstances.has(instanceKey)\n ? listRuntime.items.map((_, i) => i)\n : Array.from(indexBindings.get(instanceKey) ?? [])\n\n if (indices.length === 0) continue\n\n for (const index of indices) {\n if (index < 0 || index >= listRuntime.items.length) continue\n\n const boundValuePath = `${listRuntime.valuePath}.${index}`\n const input = getAtPath(draft, boundValuePath)\n\n const rowErrorPath = `${listRuntime.errorBasePath}.rows.${index}`\n const prevRow = getAtPath(draft, rowErrorPath)\n const prevObj = isPlainObject(prevRow) ? (prevRow as Record<string, unknown>) : undefined\n const prevOnlyRowId =\n isPlainObject(prevRow) && Object.keys(prevRow).length === 1 && Object.keys(prevRow)[0] === '$rowId'\n\n let rowDraft: RowDraft | undefined = undefined\n let lockedKeys: Set<string> | undefined = undefined\n\n const ctxForRule: RuleContext = {\n mode,\n state: draft,\n scope: { fieldPath: scopeFieldPath, listPath, listIndexPath: listRuntime.listIndexPath, index },\n }\n\n const ensureRowDraft = (): RowDraft => {\n if (rowDraft) return rowDraft\n rowDraft = getOrCreateRowDraft(listRuntime, index, makeStepId(scopeFieldPath, index))\n return rowDraft\n }\n\n for (const name of names) {\n const rule = rules[name]\n try {\n const out =\n typeof rule === 'function'\n ? rule(input, ctxForRule)\n : rule && typeof rule === 'object'\n ? rule.validate(input, ctxForRule)\n : undefined\n\n if (out === RULE_SKIP) continue\n\n const keys = collectRuleKeysFromDeps(rule, listPath)\n if (keys.length === 0) continue\n\n const patchObj = isPlainObject(out) ? (out as Record<string, unknown>) : undefined\n const patchHasRelevant =\n patchObj && Object.keys(patchObj).some((k) => k !== '$rowId' && keys.includes(k))\n const prevHasRelevant =\n prevObj && Object.keys(prevObj).some((k) => k !== '$rowId' && keys.includes(k))\n\n if (!rowDraft && !patchHasRelevant && !prevHasRelevant && !prevOnlyRowId) {\n continue\n }\n\n const row = ensureRowDraft()\n for (const key of keys) {\n if (key === '$rowId') continue\n if (lockedKeys?.has(key)) continue\n const v = normalizeErrorValue(patchObj?.[key])\n if (v === undefined) {\n delete row.next[key]\n } else {\n row.next[key] = v\n if (!lockedKeys) lockedKeys = new Set<string>()\n lockedKeys.add(key)\n }\n }\n } catch {\n // Rule runtime error: keep it a no-op to avoid producing a partial error tree.\n // Diagnostics and degrade handling are handled by DebugSink/DevtoolsHub in later phases.\n }\n }\n }\n }\n\n continue\n }\n\n const input = scopeFieldPath === '$root' ? draft : getAtPath(draft, scopeFieldPath)\n\n const nextError = evalCheck(check, input, {\n mode,\n state: draft,\n scope: { fieldPath: scopeFieldPath },\n })\n if (nextError === RULE_SKIP) continue\n\n const writebackPath = (() => {\n const wb = (check as any)?.meta?.writeback\n const p = wb && typeof wb === 'object' ? (wb as any).path : undefined\n return typeof p === 'string' && p.startsWith('errors.') ? p : undefined\n })()\n\n const errorPath = writebackPath ?? `errors.${scopeFieldPath}`\n const prev = getAtPath(draft, errorPath)\n\n if (!Object.is(prev, nextError)) {\n updates.push({\n errorPath,\n prev,\n next: nextError,\n stepId: makeStepId(scopeFieldPath),\n })\n }\n }\n\n for (const row of rowDrafts.values()) {\n const prevRow = row.prev\n\n const nextRow = (() => {\n if (row.removed) return undefined\n\n delete row.next.$rowId\n const errorKeys = Object.keys(row.next).filter((k) => k !== '$rowId')\n if (errorKeys.length === 0) return undefined\n\n const listRuntime = getListRuntime(row.listPath, row.listIndexPath)\n const item = listRuntime?.items[row.index]\n const rowId = (() => {\n if (listRuntime?.trackBy) {\n const k = readTrackBy(item, listRuntime.trackBy)\n if (k !== undefined) return String(k)\n }\n const fromStore =\n listRuntime?.rowIds?.[row.index] ?? ctx.rowIdStore?.getRowId(row.listPath, row.index, row.parentRowId)\n if (typeof fromStore === 'string' && fromStore.length > 0) return fromStore\n return String(row.index)\n })()\n\n const nextRowRaw: Record<string, unknown> = { $rowId: rowId, ...row.next }\n return isPlainObject(prevRow) && shallowEqualPlainObject(prevRow, nextRowRaw) ? prevRow : nextRowRaw\n })()\n\n if (!Object.is(prevRow, nextRow)) {\n updates.push({\n errorPath: row.errorPath,\n prev: prevRow,\n next: nextRow,\n stepId: row.stepId,\n })\n }\n }\n\n if (updates.length === 0) {\n return\n }\n\n const reason: PatchReason = 'unknown'\n\n const prevFormErrorCount =\n draft &&\n typeof draft === 'object' &&\n (draft as any).$form &&\n typeof (draft as any).$form === 'object' &&\n !Array.isArray((draft as any).$form) &&\n typeof (draft as any).$form.errorCount === 'number'\n ? ((draft as any).$form.errorCount as number)\n : undefined\n\n const errorCountDelta =\n prevFormErrorCount === undefined\n ? 0\n : updates.reduce((acc, u) => acc + (countErrorLeaves(u.next) - countErrorLeaves(u.prev)), 0)\n\n const nextState = create(draft, (nextDraft) => {\n for (const u of updates) {\n if (u.next === undefined) {\n unsetAtPathMutating(nextDraft, u.errorPath)\n } else {\n setAtPathMutating(nextDraft, u.errorPath, u.next)\n }\n }\n\n if (prevFormErrorCount !== undefined && errorCountDelta !== 0) {\n const meta = nextDraft.$form\n if (meta && typeof meta === 'object' && !Array.isArray(meta)) {\n meta.errorCount = Math.max(0, prevFormErrorCount + errorCountDelta)\n }\n }\n }) as unknown as S\n\n ctx.setDraft(nextState)\n\n for (const u of updates) {\n const normalized = normalizeFieldPath(u.errorPath) ?? []\n ctx.recordPatch(normalized, reason, u.prev, u.next)\n }\n })\n\n if (traceEvents && traceEvents.length > 0) {\n yield* Effect.forEach(traceEvents, (event) => Debug.record(event), {\n discard: true,\n })\n }\n })\n","import type { StateTraitProgram } from './model.js'\n\n/**\n * DependencyGraph (Phase 2 skeleton).\n *\n * Notes:\n * - build.ts already records deps/link edges in Graph.edges.\n * - This module only normalizes edges into an adjacency list usable for reverse-closure traversal.\n * - Later phases will add stricter node/edge models, cycle detection, and richer diagnostics.\n */\nexport interface DependencyGraph {\n readonly _tag: 'StateTraitDependencyGraph'\n /**\n * reverseAdj: adjacency list for quickly finding downstream fields that depend on a given field.\n */\n readonly reverseAdj: ReadonlyMap<string, ReadonlyArray<string>>\n}\n\nexport const buildDependencyGraph = (program: StateTraitProgram<any>): DependencyGraph => {\n const reverseAdj = new Map<string, Array<string>>()\n\n for (const edge of program.graph.edges) {\n const list = reverseAdj.get(edge.from) ?? []\n list.push(edge.to)\n reverseAdj.set(edge.from, list)\n }\n\n return {\n _tag: 'StateTraitDependencyGraph',\n reverseAdj,\n }\n}\n","import type { DependencyGraph } from './graph.js'\n\n/**\n * ReverseClosure (Phase 2 skeleton).\n *\n * - Returns target and all fields that directly or indirectly depend on target.\n * - Used by scoped validate / converge triggering.\n */\nexport const reverseClosure = (graph: DependencyGraph, target: string): ReadonlySet<string> => {\n const visited = new Set<string>()\n const queue: Array<string> = [target]\n\n while (queue.length) {\n const current = queue.shift()\n if (!current) break\n if (visited.has(current)) continue\n visited.add(current)\n\n const nexts = graph.reverseAdj.get(current)\n if (nexts) {\n for (const n of nexts) queue.push(n)\n }\n }\n\n return visited\n}\n","import { Effect, Option } from 'effect'\nimport type { ConcurrencyDiagnostics } from './ConcurrencyDiagnostics.js'\nimport {\n ConcurrencyPolicyOverridesTag,\n ConcurrencyPolicyTag,\n type ConcurrencyLimit,\n type ConcurrencyPolicy,\n type ConcurrencyPolicyOverrides,\n type ConcurrencyPolicyPatch,\n} from './env.js'\nimport { normalizeBoolean, normalizePositiveInt, normalizePositiveNumber } from './normalize.js'\n\nexport type ConcurrencyPolicyConfigScope = 'builtin' | 'runtime_default' | 'runtime_module' | 'provider'\n\nexport type ResolvedConcurrencyPolicy = {\n readonly concurrencyLimit: ConcurrencyLimit\n readonly losslessBackpressureCapacity: number\n readonly allowUnbounded: boolean\n readonly pressureWarningThreshold: {\n readonly backlogCount: number\n readonly backlogDurationMs: number\n }\n readonly warningCooldownMs: number\n readonly configScope: ConcurrencyPolicyConfigScope\n /** Field-level scope for the effective concurrency limit. */\n readonly concurrencyLimitScope: ConcurrencyPolicyConfigScope\n /** The originally requested concurrency limit (for explaining the unbounded gate). */\n readonly requestedConcurrencyLimit: ConcurrencyLimit\n /** Field-level scope for the originally requested concurrency limit. */\n readonly requestedConcurrencyLimitScope: ConcurrencyPolicyConfigScope\n /** Field-level scope for allowUnbounded. */\n readonly allowUnboundedScope: ConcurrencyPolicyConfigScope\n}\n\nconst normalizeConcurrencyLimit = (v: unknown): ConcurrencyLimit | undefined =>\n v === 'unbounded' ? 'unbounded' : normalizePositiveInt(v)\n\nexport const makeResolveConcurrencyPolicy = (args: {\n /** Original options.moduleId (may be undefined); used for module overrides map lookup. */\n readonly moduleId: string | undefined\n /** Optional: one-shot audit diagnostics for unbounded opt-in/blocked. */\n readonly diagnostics?: ConcurrencyDiagnostics\n}): (() => Effect.Effect<ResolvedConcurrencyPolicy>) => {\n const builtinConcurrencyLimit: ConcurrencyLimit = 16\n const builtinLosslessBackpressureCapacity = 4096\n const builtinAllowUnbounded = false\n const builtinThresholdBacklogCount = 1000\n const builtinThresholdBacklogDurationMs = 5000\n const builtinWarningCooldownMs = 30_000\n\n return () =>\n Effect.gen(function* () {\n const runtimeConfigOpt = yield* Effect.serviceOption(ConcurrencyPolicyTag)\n const overridesOpt = yield* Effect.serviceOption(ConcurrencyPolicyOverridesTag)\n\n const runtimeConfig: ConcurrencyPolicy | undefined = Option.isSome(runtimeConfigOpt)\n ? runtimeConfigOpt.value\n : undefined\n const providerOverrides: ConcurrencyPolicyOverrides | undefined = Option.isSome(overridesOpt)\n ? overridesOpt.value\n : undefined\n\n let concurrencyLimit: ConcurrencyLimit = builtinConcurrencyLimit\n let concurrencyLimitScope: ConcurrencyPolicyConfigScope = 'builtin'\n let lastBoundedConcurrencyLimit = builtinConcurrencyLimit as number\n let lastBoundedConcurrencyLimitScope: ConcurrencyPolicyConfigScope = 'builtin'\n\n let losslessBackpressureCapacity = builtinLosslessBackpressureCapacity\n let allowUnbounded = builtinAllowUnbounded\n let allowUnboundedScope: ConcurrencyPolicyConfigScope = 'builtin'\n let thresholdBacklogCount = builtinThresholdBacklogCount\n let thresholdBacklogDurationMs = builtinThresholdBacklogDurationMs\n let warningCooldownMs = builtinWarningCooldownMs\n\n let configScope: ConcurrencyPolicyConfigScope = 'builtin'\n\n const applyPatch = (\n patch: ConcurrencyPolicy | ConcurrencyPolicyPatch | ConcurrencyPolicyOverrides | undefined,\n scope: ConcurrencyPolicyConfigScope,\n ): void => {\n if (!patch) return\n let changed = false\n\n const limit = normalizeConcurrencyLimit((patch as any).concurrencyLimit)\n if (limit) {\n concurrencyLimit = limit\n concurrencyLimitScope = scope\n if (limit !== 'unbounded') {\n lastBoundedConcurrencyLimit = limit\n lastBoundedConcurrencyLimitScope = scope\n }\n changed = true\n }\n\n const capacity = normalizePositiveInt((patch as any).losslessBackpressureCapacity)\n if (capacity != null) {\n losslessBackpressureCapacity = capacity\n changed = true\n }\n\n const allow = normalizeBoolean((patch as any).allowUnbounded)\n if (allow != null) {\n allowUnbounded = allow\n allowUnboundedScope = scope\n changed = true\n }\n\n const threshold = (patch as any).pressureWarningThreshold\n if (threshold && typeof threshold === 'object') {\n const count = normalizePositiveInt((threshold as any).backlogCount)\n if (count != null) {\n thresholdBacklogCount = count\n changed = true\n }\n\n const duration = normalizePositiveNumber((threshold as any).backlogDurationMs)\n if (duration != null) {\n thresholdBacklogDurationMs = duration\n changed = true\n }\n }\n\n const cooldownMs = normalizePositiveNumber((patch as any).warningCooldownMs)\n if (cooldownMs != null) {\n warningCooldownMs = cooldownMs\n changed = true\n }\n\n if (changed) {\n configScope = scope\n }\n }\n\n const moduleId = args.moduleId\n const runtimeModulePatch: ConcurrencyPolicyPatch | undefined =\n moduleId && runtimeConfig?.overridesByModuleId ? runtimeConfig.overridesByModuleId[moduleId] : undefined\n const providerModulePatch: ConcurrencyPolicyPatch | undefined =\n moduleId && providerOverrides?.overridesByModuleId ? providerOverrides.overridesByModuleId[moduleId] : undefined\n\n // priority: provider > runtime_module > runtime_default > builtin\n applyPatch(runtimeConfig, 'runtime_default')\n applyPatch(runtimeModulePatch, 'runtime_module')\n applyPatch(providerOverrides, 'provider')\n applyPatch(providerModulePatch, 'provider')\n\n const requestedConcurrencyLimit = concurrencyLimit\n const requestedConcurrencyLimitScope = concurrencyLimitScope\n\n // Unbounded gate: effective unbounded requires an explicit allowUnbounded=true (FR-004).\n if (typeof concurrencyLimit === 'string' && !allowUnbounded) {\n concurrencyLimit = lastBoundedConcurrencyLimit\n concurrencyLimitScope = lastBoundedConcurrencyLimitScope\n }\n\n // NOTE: diagnostics may add implementation-level metrics (e.g. \"saturated duration\"); the resolver only decides configuration.\n const resolved: ResolvedConcurrencyPolicy = {\n concurrencyLimit,\n losslessBackpressureCapacity,\n allowUnbounded,\n pressureWarningThreshold: {\n backlogCount: thresholdBacklogCount,\n backlogDurationMs: thresholdBacklogDurationMs,\n },\n warningCooldownMs,\n configScope,\n concurrencyLimitScope,\n requestedConcurrencyLimit,\n requestedConcurrencyLimitScope,\n allowUnboundedScope,\n }\n\n if (args.diagnostics) {\n yield* args.diagnostics.emitUnboundedPolicyIfNeeded({\n policy: resolved,\n trigger: { kind: 'concurrencyPolicy', name: 'resolve' },\n })\n }\n\n return resolved\n })\n}\n","import { Effect, Option } from 'effect'\nimport {\n StateTransactionConfigTag,\n StateTransactionOverridesTag,\n type StateTransactionOverrides,\n type TxnLanesPatch,\n} from './env.js'\nimport { normalizeBoolean, normalizeNonNegativeNumber } from './normalize.js'\n\nexport type TxnLanePolicyScope = 'provider' | 'runtime_module' | 'runtime_default' | 'builtin'\n\nexport type TxnLaneQueueMode = 'fifo' | 'lanes'\n\nexport type TxnLaneYieldStrategy = 'baseline' | 'inputPending'\n\nexport type ResolvedTxnLanePolicy = {\n readonly enabled: boolean\n readonly overrideMode?: 'forced_off' | 'forced_sync'\n readonly configScope: TxnLanePolicyScope\n readonly budgetMs: number\n readonly debounceMs: number\n readonly maxLagMs: number\n readonly allowCoalesce: boolean\n readonly yieldStrategy: TxnLaneYieldStrategy\n readonly queueMode: TxnLaneQueueMode\n}\n\ntype ModuleStateTransactionOptions =\n | {\n readonly txnLanes?: TxnLanesPatch\n }\n | undefined\n\nconst normalizeMs = normalizeNonNegativeNumber\nconst normalizeBool = normalizeBoolean\n\nexport const makeResolveTxnLanePolicy = (args: {\n /** Raw options.moduleId (may be undefined), used to query overrides maps. */\n readonly moduleId: string | undefined\n readonly stateTransaction: ModuleStateTransactionOptions\n}): (() => Effect.Effect<ResolvedTxnLanePolicy>) => {\n const builtinEnabled = normalizeBool(args.stateTransaction?.txnLanes?.enabled) ?? true\n const builtinBudgetMs = normalizeMs(args.stateTransaction?.txnLanes?.budgetMs) ?? 1\n const builtinDebounceMs = normalizeMs(args.stateTransaction?.txnLanes?.debounceMs) ?? 0\n const builtinMaxLagMs = normalizeMs(args.stateTransaction?.txnLanes?.maxLagMs) ?? 50\n const builtinAllowCoalesce = normalizeBool(args.stateTransaction?.txnLanes?.allowCoalesce) ?? true\n const builtinYieldStrategy: TxnLaneYieldStrategy =\n args.stateTransaction?.txnLanes?.yieldStrategy === 'inputPending' ? 'inputPending' : 'baseline'\n\n return () =>\n Effect.gen(function* () {\n const runtimeConfigOpt = yield* Effect.serviceOption(StateTransactionConfigTag)\n const overridesOpt = yield* Effect.serviceOption(StateTransactionOverridesTag)\n\n const runtimeConfig = Option.isSome(runtimeConfigOpt) ? runtimeConfigOpt.value : undefined\n const providerOverrides = Option.isSome(overridesOpt) ? overridesOpt.value : undefined\n\n let enabled = builtinEnabled\n let budgetMs = builtinBudgetMs\n let debounceMs = builtinDebounceMs\n let maxLagMs = builtinMaxLagMs\n let allowCoalesce = builtinAllowCoalesce\n let yieldStrategy: TxnLaneYieldStrategy = builtinYieldStrategy\n\n let overrideMode: ResolvedTxnLanePolicy['overrideMode'] = undefined\n\n let configScope: TxnLanePolicyScope = 'builtin'\n\n const applyPatch = (\n patch: TxnLanesPatch | StateTransactionOverrides | undefined,\n scope: TxnLanePolicyScope,\n ): void => {\n if (!patch) return\n\n const raw = (patch as any).txnLanes != null ? (patch as any).txnLanes : patch\n if (!raw || typeof raw !== 'object') return\n\n let changed = false\n\n const nextEnabled = normalizeBool((raw as any).enabled)\n if (nextEnabled != null) {\n enabled = nextEnabled\n changed = true\n }\n\n const nextOverrideMode = (raw as any).overrideMode\n if (nextOverrideMode === 'forced_off' || nextOverrideMode === 'forced_sync') {\n overrideMode = nextOverrideMode\n changed = true\n }\n\n const nextBudgetMs = normalizeMs((raw as any).budgetMs)\n if (nextBudgetMs != null) {\n budgetMs = nextBudgetMs\n changed = true\n }\n\n const nextDebounceMs = normalizeMs((raw as any).debounceMs)\n if (nextDebounceMs != null) {\n debounceMs = nextDebounceMs\n changed = true\n }\n\n const nextMaxLagMs = normalizeMs((raw as any).maxLagMs)\n if (nextMaxLagMs != null) {\n maxLagMs = nextMaxLagMs\n changed = true\n }\n\n const nextAllowCoalesce = normalizeBool((raw as any).allowCoalesce)\n if (nextAllowCoalesce != null) {\n allowCoalesce = nextAllowCoalesce\n changed = true\n }\n\n const nextYieldStrategy = (raw as any).yieldStrategy\n if (nextYieldStrategy === 'baseline' || nextYieldStrategy === 'inputPending') {\n yieldStrategy = nextYieldStrategy\n changed = true\n }\n\n if (changed) {\n configScope = scope\n }\n }\n\n const moduleId = args.moduleId\n const runtimeModulePatch =\n moduleId && runtimeConfig?.txnLanesOverridesByModuleId\n ? runtimeConfig.txnLanesOverridesByModuleId[moduleId]\n : undefined\n const providerModulePatch =\n moduleId && providerOverrides?.txnLanesOverridesByModuleId\n ? providerOverrides.txnLanesOverridesByModuleId[moduleId]\n : undefined\n\n // priority: provider > runtime_module > runtime_default > builtin\n applyPatch(runtimeConfig, 'runtime_default')\n applyPatch(runtimeModulePatch, 'runtime_module')\n applyPatch(providerOverrides, 'provider')\n applyPatch(providerModulePatch, 'provider')\n\n const effectiveEnabled = overrideMode ? false : enabled\n const queueMode: TxnLaneQueueMode = effectiveEnabled ? 'lanes' : 'fifo'\n\n return {\n enabled: effectiveEnabled,\n ...(overrideMode ? { overrideMode } : {}),\n configScope,\n budgetMs,\n debounceMs,\n maxLagMs,\n allowCoalesce,\n yieldStrategy,\n queueMode,\n }\n })\n}\n","import { Effect, Option } from 'effect'\nimport {\n StateTransactionConfigTag,\n StateTransactionOverridesTag,\n type StateTransactionOverrides,\n type StateTransactionTraitConvergeOverrides,\n type TraitConvergeTimeSlicingPatch,\n} from './env.js'\nimport { normalizePositiveNumber } from './normalize.js'\nimport type { TraitConvergeConfigScope, TraitConvergeRequestedMode } from '../../state-trait/model.js'\n\nexport type ResolvedTraitConvergeTimeSlicingConfig = {\n readonly enabled: boolean\n readonly debounceMs: number\n readonly maxLagMs: number\n}\n\nexport type ResolvedTraitConvergeConfig = {\n readonly traitConvergeMode: TraitConvergeRequestedMode\n readonly traitConvergeBudgetMs: number\n readonly traitConvergeDecisionBudgetMs: number\n readonly traitConvergeTimeSlicing: ResolvedTraitConvergeTimeSlicingConfig\n readonly configScope: TraitConvergeConfigScope\n}\n\ntype ModuleStateTransactionOptions =\n | {\n readonly traitConvergeBudgetMs?: number\n readonly traitConvergeDecisionBudgetMs?: number\n readonly traitConvergeMode?: 'auto' | 'full' | 'dirty'\n readonly traitConvergeTimeSlicing?: TraitConvergeTimeSlicingPatch\n }\n | undefined\n\nconst normalizePositiveMs = normalizePositiveNumber\n\nconst normalizeRequestedMode = (mode: unknown): TraitConvergeRequestedMode | undefined =>\n mode === 'auto' || mode === 'full' || mode === 'dirty' ? mode : undefined\n\nconst normalizeBool = (value: unknown): boolean | undefined => (typeof value === 'boolean' ? value : undefined)\n\nexport const makeResolveTraitConvergeConfig = (args: {\n /** Original options.moduleId (may be undefined); used for module overrides map lookup. */\n readonly moduleId: string | undefined\n readonly stateTransaction: ModuleStateTransactionOptions\n}): (() => Effect.Effect<ResolvedTraitConvergeConfig>) => {\n const builtinTraitConvergeBudgetMs: number = normalizePositiveMs(args.stateTransaction?.traitConvergeBudgetMs) ?? 200\n const builtinTraitConvergeDecisionBudgetMs: number =\n normalizePositiveMs(args.stateTransaction?.traitConvergeDecisionBudgetMs) ?? 0.5\n const builtinTraitConvergeMode: TraitConvergeRequestedMode =\n normalizeRequestedMode(args.stateTransaction?.traitConvergeMode) ?? 'auto'\n\n const builtinTimeSlicingEnabled: boolean =\n normalizeBool(args.stateTransaction?.traitConvergeTimeSlicing?.enabled) ?? false\n const builtinTimeSlicingDebounceMs: number =\n normalizePositiveMs(args.stateTransaction?.traitConvergeTimeSlicing?.debounceMs) ?? 16\n const builtinTimeSlicingMaxLagMs: number =\n normalizePositiveMs(args.stateTransaction?.traitConvergeTimeSlicing?.maxLagMs) ?? 200\n\n return () =>\n Effect.gen(function* () {\n const runtimeConfigOpt = yield* Effect.serviceOption(StateTransactionConfigTag)\n const overridesOpt = yield* Effect.serviceOption(StateTransactionOverridesTag)\n\n const runtimeConfig = Option.isSome(runtimeConfigOpt) ? runtimeConfigOpt.value : undefined\n const providerOverrides = Option.isSome(overridesOpt) ? overridesOpt.value : undefined\n\n let traitConvergeMode = builtinTraitConvergeMode\n let traitConvergeBudgetMs = builtinTraitConvergeBudgetMs\n let traitConvergeDecisionBudgetMs = builtinTraitConvergeDecisionBudgetMs\n let traitConvergeTimeSlicingEnabled = builtinTimeSlicingEnabled\n let traitConvergeTimeSlicingDebounceMs = builtinTimeSlicingDebounceMs\n let traitConvergeTimeSlicingMaxLagMs = builtinTimeSlicingMaxLagMs\n\n let configScope: TraitConvergeConfigScope = 'builtin'\n\n const applyPatch = (\n patch: StateTransactionTraitConvergeOverrides | StateTransactionOverrides | undefined,\n scope: TraitConvergeConfigScope,\n ): void => {\n if (!patch) return\n let changed = false\n\n const mode = normalizeRequestedMode((patch as any).traitConvergeMode)\n if (mode) {\n traitConvergeMode = mode\n changed = true\n }\n\n const budgetMs = normalizePositiveMs((patch as any).traitConvergeBudgetMs)\n if (budgetMs != null) {\n traitConvergeBudgetMs = budgetMs\n changed = true\n }\n\n const decisionBudgetMs = normalizePositiveMs((patch as any).traitConvergeDecisionBudgetMs)\n if (decisionBudgetMs != null) {\n traitConvergeDecisionBudgetMs = decisionBudgetMs\n changed = true\n }\n\n const timeSlicing = (patch as any).traitConvergeTimeSlicing\n if (timeSlicing && typeof timeSlicing === 'object') {\n const enabled = normalizeBool((timeSlicing as any).enabled)\n if (enabled != null) {\n traitConvergeTimeSlicingEnabled = enabled\n changed = true\n }\n\n const debounceMs = normalizePositiveMs((timeSlicing as any).debounceMs)\n if (debounceMs != null) {\n traitConvergeTimeSlicingDebounceMs = debounceMs\n changed = true\n }\n\n const maxLagMs = normalizePositiveMs((timeSlicing as any).maxLagMs)\n if (maxLagMs != null) {\n traitConvergeTimeSlicingMaxLagMs = maxLagMs\n changed = true\n }\n }\n\n if (changed) {\n configScope = scope\n }\n }\n\n const moduleId = args.moduleId\n const runtimeModulePatch =\n moduleId && runtimeConfig?.traitConvergeOverridesByModuleId\n ? runtimeConfig.traitConvergeOverridesByModuleId[moduleId]\n : undefined\n const providerModulePatch =\n moduleId && providerOverrides?.traitConvergeOverridesByModuleId\n ? providerOverrides.traitConvergeOverridesByModuleId[moduleId]\n : undefined\n\n // priority: provider > runtime_module > runtime_default > builtin\n applyPatch(runtimeConfig, 'runtime_default')\n applyPatch(runtimeModulePatch, 'runtime_module')\n applyPatch(providerOverrides, 'provider')\n applyPatch(providerModulePatch, 'provider')\n\n return {\n traitConvergeMode,\n traitConvergeBudgetMs,\n traitConvergeDecisionBudgetMs,\n traitConvergeTimeSlicing: {\n enabled: traitConvergeTimeSlicingEnabled,\n debounceMs: traitConvergeTimeSlicingDebounceMs,\n maxLagMs: traitConvergeTimeSlicingMaxLagMs,\n },\n configScope,\n }\n })\n}\n","import { Effect } from 'effect'\nimport type { ModuleRuntime as PublicModuleRuntime } from './module.js'\nimport type {\n StateTraitProgram,\n TraitConvergeGenerationEvidence,\n TraitConvergePlanCacheEvidence,\n} from '../../state-trait/model.js'\nimport type * as StateTraitConverge from '../../state-trait/converge.js'\nimport type { RuntimeInternals } from './RuntimeInternals.js'\nimport { setRuntimeInternals } from './runtimeInternalsAccessor.js'\nimport type * as RowId from '../../state-trait/rowid.js'\n\nexport type TraitState = {\n program: StateTraitProgram<any> | undefined\n convergePlanCache: StateTraitConverge.ConvergePlanCache | undefined\n convergeGeneration: TraitConvergeGenerationEvidence\n pendingCacheMissReason: TraitConvergePlanCacheEvidence['missReason'] | undefined\n lastConvergeIrKeys: { readonly writersKey: string; readonly depsKey: string } | undefined\n listConfigs: ReadonlyArray<RowId.ListConfig>\n}\n\nexport const installInternalHooks = <S, A>(args: {\n readonly runtime: PublicModuleRuntime<S, A>\n readonly runtimeInternals: RuntimeInternals\n}): Effect.Effect<void, never, never> =>\n Effect.sync(() => {\n const { runtime, runtimeInternals } = args\n\n setRuntimeInternals(runtime as any, runtimeInternals)\n })\n","import { Effect, PubSub, Scope } from 'effect'\nimport { isPrefixOf, normalizeFieldPath, type DirtySet, type FieldPath, type FieldPathIdRegistry } from '../../field-path.js'\nimport type { ReadQueryCompiled } from './ReadQuery.js'\nimport type { StateChangeWithMeta, StateCommitMeta } from './module.js'\nimport * as Debug from './DebugSink.js'\n\ntype ReadRootKey = string\n\ntype SelectorEntry<S, V> = {\n readonly selectorId: string\n readonly readQuery: ReadQueryCompiled<S, V>\n readonly reads: ReadonlyArray<FieldPath>\n readonly readRootKeys: ReadonlyArray<ReadRootKey>\n readonly hub: PubSub.PubSub<StateChangeWithMeta<V>>\n subscriberCount: number\n cachedAtTxnSeq: number\n hasValue: boolean\n cachedValue: V | undefined\n}\n\nexport interface SelectorGraph<S> {\n readonly ensureEntry: <V>(\n readQuery: ReadQueryCompiled<S, V>,\n ) => Effect.Effect<SelectorEntry<S, V>, never, Scope.Scope>\n readonly releaseEntry: (selectorId: string) => void\n readonly onCommit: (\n state: S,\n meta: StateCommitMeta,\n dirtySet: DirtySet,\n diagnosticsLevel: Debug.DiagnosticsLevel,\n ) => Effect.Effect<void, never, never>\n}\n\nconst getReadRootKeyFromPath = (path: FieldPath): ReadRootKey => path[0] ?? ''\n\nconst overlaps = (a: FieldPath, b: FieldPath): boolean => isPrefixOf(a, b) || isPrefixOf(b, a)\n\nconst equalsShallowStruct = (a: unknown, b: unknown): boolean => {\n if (Object.is(a, b)) return true\n if (!a || !b) return false\n if (typeof a !== 'object' || typeof b !== 'object') return false\n if (Array.isArray(a) || Array.isArray(b)) return false\n\n const aObj = a as Record<string, unknown>\n const bObj = b as Record<string, unknown>\n const aKeys = Object.keys(aObj)\n const bKeys = Object.keys(bObj)\n if (aKeys.length !== bKeys.length) return false\n for (const k of aKeys) {\n if (!Object.prototype.hasOwnProperty.call(bObj, k)) return false\n if (!Object.is(aObj[k], bObj[k])) return false\n }\n return true\n}\n\nconst equalsValue = <V>(query: ReadQueryCompiled<any, V>, a: V, b: V): boolean => {\n if (query.equalsKind === 'custom' && typeof query.equals === 'function') {\n return query.equals(a, b)\n }\n if (query.equalsKind === 'shallowStruct') {\n return equalsShallowStruct(a, b)\n }\n return Object.is(a, b)\n}\n\nconst nowMs = (): number => {\n const perf = (globalThis as any).performance as { now?: () => number } | undefined\n if (perf && typeof perf.now === 'function') {\n return perf.now()\n }\n return Date.now()\n}\n\nexport const make = <S>(args: {\n readonly moduleId: string\n readonly instanceId: string\n readonly getFieldPathIdRegistry?: () => FieldPathIdRegistry | undefined\n}): SelectorGraph<S> => {\n const { moduleId, instanceId, getFieldPathIdRegistry } = args\n\n const selectorsById = new Map<string, SelectorEntry<S, any>>()\n const indexByReadRoot = new Map<ReadRootKey, Set<string>>()\n\n const ensureEntry: SelectorGraph<S>['ensureEntry'] = (readQuery) => {\n const existing = selectorsById.get(readQuery.selectorId)\n if (existing) {\n return Effect.succeed(existing as any)\n }\n\n return Effect.gen(function* () {\n const hub = yield* PubSub.unbounded<StateChangeWithMeta<any>>()\n\n const reads = readQuery.reads\n .filter((x): x is string => typeof x === 'string')\n .map((raw) => normalizeFieldPath(raw))\n .filter((x): x is FieldPath => x != null)\n const readRootKeys = Array.from(new Set(reads.map(getReadRootKeyFromPath)))\n\n for (const rootKey of readRootKeys) {\n const set = indexByReadRoot.get(rootKey)\n if (set) {\n set.add(readQuery.selectorId)\n } else {\n indexByReadRoot.set(rootKey, new Set([readQuery.selectorId]))\n }\n }\n\n const entry: SelectorEntry<S, any> = {\n selectorId: readQuery.selectorId,\n readQuery: readQuery as any,\n reads,\n readRootKeys,\n hub,\n subscriberCount: 0,\n cachedAtTxnSeq: 0,\n hasValue: false,\n cachedValue: undefined,\n }\n selectorsById.set(readQuery.selectorId, entry)\n return entry as any\n })\n }\n\n const releaseEntry: SelectorGraph<S>['releaseEntry'] = (selectorId) => {\n const entry = selectorsById.get(selectorId)\n if (!entry) return\n entry.subscriberCount = Math.max(0, entry.subscriberCount - 1)\n if (entry.subscriberCount > 0) return\n\n selectorsById.delete(selectorId)\n for (const rootKey of entry.readRootKeys) {\n const set = indexByReadRoot.get(rootKey)\n if (!set) continue\n set.delete(selectorId)\n if (set.size === 0) {\n indexByReadRoot.delete(rootKey)\n }\n }\n }\n\n const onCommit: SelectorGraph<S>['onCommit'] = (state, meta, dirtySet, diagnosticsLevel) =>\n Effect.gen(function* () {\n if (selectorsById.size === 0) return\n\n const emitEvalEvent =\n diagnosticsLevel === 'light' || diagnosticsLevel === 'full' || diagnosticsLevel === 'sampled'\n\n const registry: FieldPathIdRegistry | undefined =\n dirtySet.dirtyAll || dirtySet.rootIds.length === 0 ? undefined : getFieldPathIdRegistry?.()\n\n const getDirtyRootPath = (id: number): FieldPath | undefined => {\n if (!registry) return undefined\n if (!Number.isFinite(id)) return undefined\n const idx = Math.floor(id)\n if (idx < 0) return undefined\n const path = registry.fieldPaths[idx]\n return path && Array.isArray(path) ? path : undefined\n }\n\n if (selectorsById.size === 1) {\n const entry = selectorsById.values().next().value\n if (!entry || entry.subscriberCount === 0) return\n\n const isDirty = (() => {\n if (dirtySet.dirtyAll) return true\n if (entry.reads.length === 0) return true\n if (!registry) return true\n for (const dirtyRootId of dirtySet.rootIds) {\n const dirtyRoot = getDirtyRootPath(dirtyRootId)\n if (!dirtyRoot) return true\n const dirtyRootKey = getReadRootKeyFromPath(dirtyRoot)\n if (entry.readRootKeys.length > 0 && !entry.readRootKeys.includes(dirtyRootKey)) continue\n for (const read of entry.reads) {\n if (overlaps(dirtyRoot, read)) {\n return true\n }\n }\n }\n return false\n })()\n\n if (!isDirty) {\n return\n }\n\n let next: any\n const evalStartedAt = emitEvalEvent ? nowMs() : undefined\n try {\n next = entry.readQuery.select(state)\n } catch (err) {\n if (emitEvalEvent) {\n yield* Debug.record({\n type: 'diagnostic',\n moduleId,\n instanceId,\n txnSeq: meta.txnSeq,\n txnId: meta.txnId,\n code: 'read_query::eval_error',\n severity: 'error',\n message: 'ReadQuery selector threw during evaluation.',\n hint: 'Selectors must be pure and not throw; check the selector implementation and inputs.',\n kind: 'read_query_eval_error',\n trigger: { kind: 'read_query', name: 'selector:eval', details: { selectorId: entry.selectorId } },\n })\n }\n return\n }\n const evalMs = emitEvalEvent && evalStartedAt != null ? Math.max(0, nowMs() - evalStartedAt) : undefined\n\n const hadValue = entry.hasValue\n const prev = entry.cachedValue as any\n const equal = hadValue ? equalsValue(entry.readQuery as any, prev, next) : false\n const changed = !hadValue || !equal\n\n if (changed) {\n entry.cachedValue = next\n entry.hasValue = true\n entry.cachedAtTxnSeq = meta.txnSeq\n\n yield* PubSub.publish(entry.hub as any, {\n value: entry.cachedValue,\n meta,\n } satisfies StateChangeWithMeta<any>)\n }\n\n if (emitEvalEvent) {\n yield* Debug.record({\n type: 'trace:selector:eval',\n moduleId,\n instanceId,\n txnSeq: meta.txnSeq,\n txnId: meta.txnId,\n data: {\n selectorId: entry.selectorId,\n lane: entry.readQuery.lane,\n producer: entry.readQuery.producer,\n fallbackReason: entry.readQuery.fallbackReason,\n readsDigest: entry.readQuery.readsDigest,\n equalsKind: entry.readQuery.equalsKind,\n changed,\n evalMs,\n },\n })\n }\n\n return\n }\n\n const dirtySelectorIds: Set<string> = new Set()\n\n if (dirtySet.dirtyAll) {\n for (const [id, entry] of selectorsById.entries()) {\n if (entry.subscriberCount > 0) dirtySelectorIds.add(id)\n }\n } else {\n if (!registry) {\n for (const [id, entry] of selectorsById.entries()) {\n if (entry.subscriberCount > 0) dirtySelectorIds.add(id)\n }\n } else {\n for (const dirtyRootId of dirtySet.rootIds) {\n const dirtyRoot = getDirtyRootPath(dirtyRootId)\n if (!dirtyRoot) {\n for (const [id, entry] of selectorsById.entries()) {\n if (entry.subscriberCount > 0) dirtySelectorIds.add(id)\n }\n break\n }\n\n const rootKey = getReadRootKeyFromPath(dirtyRoot)\n const candidates = indexByReadRoot.get(rootKey)\n if (!candidates) continue\n for (const selectorId of candidates) {\n if (dirtySelectorIds.has(selectorId)) continue\n const entry = selectorsById.get(selectorId)\n if (!entry || entry.subscriberCount === 0) continue\n if (entry.reads.length === 0) {\n dirtySelectorIds.add(selectorId)\n continue\n }\n for (const read of entry.reads) {\n if (overlaps(dirtyRoot, read)) {\n dirtySelectorIds.add(selectorId)\n break\n }\n }\n }\n }\n }\n }\n\n if (dirtySelectorIds.size === 0) return\n\n for (const selectorId of dirtySelectorIds) {\n const entry = selectorsById.get(selectorId)\n if (!entry || entry.subscriberCount === 0) continue\n\n let next: any\n const evalStartedAt = emitEvalEvent ? nowMs() : undefined\n try {\n next = entry.readQuery.select(state)\n } catch (err) {\n if (emitEvalEvent) {\n yield* Debug.record({\n type: 'diagnostic',\n moduleId,\n instanceId,\n txnSeq: meta.txnSeq,\n txnId: meta.txnId,\n code: 'read_query::eval_error',\n severity: 'error',\n message: 'ReadQuery selector threw during evaluation.',\n hint: 'Selectors must be pure and not throw; check the selector implementation and inputs.',\n kind: 'read_query_eval_error',\n trigger: { kind: 'read_query', name: 'selector:eval', details: { selectorId } },\n })\n }\n continue\n }\n const evalMs = emitEvalEvent && evalStartedAt != null ? Math.max(0, nowMs() - evalStartedAt) : undefined\n\n const hadValue = entry.hasValue\n const prev = entry.cachedValue as any\n const equal = hadValue ? equalsValue(entry.readQuery as any, prev, next) : false\n const changed = !hadValue || !equal\n\n if (changed) {\n entry.cachedValue = next\n entry.hasValue = true\n entry.cachedAtTxnSeq = meta.txnSeq\n\n yield* PubSub.publish(entry.hub as any, {\n value: entry.cachedValue,\n meta,\n } satisfies StateChangeWithMeta<any>)\n }\n\n if (emitEvalEvent) {\n yield* Debug.record({\n type: 'trace:selector:eval',\n moduleId,\n instanceId,\n txnSeq: meta.txnSeq,\n txnId: meta.txnId,\n data: {\n selectorId,\n lane: entry.readQuery.lane,\n producer: entry.readQuery.producer,\n fallbackReason: entry.readQuery.fallbackReason,\n readsDigest: entry.readQuery.readsDigest,\n equalsKind: entry.readQuery.equalsKind,\n changed,\n evalMs,\n },\n })\n }\n }\n })\n\n return { ensureEntry, releaseEntry, onCommit }\n}\n","import { Deferred, Effect, Exit, FiberRef, Option, Queue, Ref, Scope } from 'effect'\nimport * as EffectOpCore from './EffectOpCore.js'\nimport * as Debug from './DebugSink.js'\nimport * as TaskRunner from './TaskRunner.js'\nimport type { ConcurrencyDiagnostics } from './ConcurrencyDiagnostics.js'\nimport { StateTransactionOverridesTag, type StateTransactionOverrides } from './env.js'\nimport type { ResolvedConcurrencyPolicy } from './ModuleRuntime.concurrencyPolicy.js'\n\nexport type TxnLane = 'urgent' | 'nonUrgent'\n\nexport interface EnqueueTransaction {\n <A, E>(eff: Effect.Effect<A, E, never>): Effect.Effect<A, E, never>\n <A, E>(lane: TxnLane, eff: Effect.Effect<A, E, never>): Effect.Effect<A, E, never>\n}\n\ntype BackpressureState = {\n readonly backlogCount: number\n readonly waiters: number\n readonly signal: Deferred.Deferred<void>\n}\n\ntype BacklogAcquireAttempt =\n | { readonly _tag: 'acquired' }\n | {\n readonly _tag: 'wait'\n readonly backlogCount: number\n readonly signal: Deferred.Deferred<void>\n }\n\ntype CapturedDiagnosticContext = {\n readonly linkId: string\n readonly runtimeLabel: string | undefined\n readonly diagnosticsLevel: Debug.DiagnosticsLevel\n readonly debugSinks: ReadonlyArray<Debug.Sink>\n readonly overridesOpt: Option.Option<StateTransactionOverrides>\n}\n\nconst captureDiagnosticContext = (args: {\n readonly nextLinkId: () => string\n}): Effect.Effect<CapturedDiagnosticContext> =>\n Effect.gen(function* () {\n const overridesOpt = yield* Effect.serviceOption(StateTransactionOverridesTag)\n const diagnosticsLevel = yield* FiberRef.get(Debug.currentDiagnosticsLevel)\n const runtimeLabel = yield* FiberRef.get(Debug.currentRuntimeLabel)\n const debugSinks = yield* FiberRef.get(Debug.currentDebugSinks)\n const existingLinkId = yield* FiberRef.get(EffectOpCore.currentLinkId)\n const linkId = existingLinkId ?? args.nextLinkId()\n\n return {\n linkId,\n runtimeLabel,\n diagnosticsLevel,\n debugSinks,\n overridesOpt,\n }\n })\n\nconst withDiagnosticContext = <A, E>(\n context: CapturedDiagnosticContext,\n eff: Effect.Effect<A, E, never>,\n): Effect.Effect<A, E, never> => {\n const effWithOverrides = Option.isSome(context.overridesOpt)\n ? Effect.provideService(eff, StateTransactionOverridesTag, context.overridesOpt.value)\n : eff\n\n return effWithOverrides.pipe(\n Effect.locally(EffectOpCore.currentLinkId, context.linkId),\n Effect.locally(Debug.currentRuntimeLabel, context.runtimeLabel),\n Effect.locally(Debug.currentDiagnosticsLevel, context.diagnosticsLevel),\n Effect.locally(Debug.currentDebugSinks, context.debugSinks),\n )\n}\n\n/**\n * Builds a \"single-instance transaction queue\":\n * - All entry points (dispatch/source-refresh/...) execute serially through the same FIFO queue.\n * - Callers still experience the entry as a single Effect (preserving the existing API shape).\n * - Tasks must \"never fail\", otherwise the queue consumer fiber would deadlock (so we return results via Deferred/Exit).\n *\n * NOTE: transaction execution happens inside a background queue fiber. To support Provider-local overrides (Tag/Layer)\n * and diagnostics tiers (FiberRef) at the call site, we capture minimal context at enqueue-time and re-provide it to the task.\n */\nexport const makeEnqueueTransaction = (args: {\n readonly moduleId: string | undefined\n readonly instanceId: string\n readonly resolveConcurrencyPolicy: () => Effect.Effect<ResolvedConcurrencyPolicy>\n readonly diagnostics: ConcurrencyDiagnostics\n}): Effect.Effect<EnqueueTransaction, never, Scope.Scope> =>\n Effect.gen(function* () {\n const urgentQueue = yield* Queue.unbounded<Effect.Effect<void>>()\n const nonUrgentQueue = yield* Queue.unbounded<Effect.Effect<void>>()\n const wakeQueue = yield* Queue.unbounded<void>()\n const diagnostics = args.diagnostics\n\n let nextLinkSeq = 0\n const nextLinkId = (): string => {\n nextLinkSeq += 1\n return `${args.instanceId}::l${nextLinkSeq}`\n }\n\n const initialUrgentSignal = yield* Deferred.make<void>()\n const urgentStateRef = yield* Ref.make<BackpressureState>({\n backlogCount: 0,\n waiters: 0,\n signal: initialUrgentSignal,\n })\n\n const initialNonUrgentSignal = yield* Deferred.make<void>()\n const nonUrgentStateRef = yield* Ref.make<BackpressureState>({\n backlogCount: 0,\n waiters: 0,\n signal: initialNonUrgentSignal,\n })\n\n const release = (stateRef: Ref.Ref<BackpressureState>) =>\n Effect.gen(function* () {\n let prevSignal: Deferred.Deferred<void> | undefined\n const nextSignal = yield* Deferred.make<void>()\n yield* Ref.update(stateRef, (s) => {\n const nextBacklogCount = s.backlogCount > 0 ? s.backlogCount - 1 : 0\n if (s.waiters <= 0) {\n return {\n backlogCount: nextBacklogCount,\n waiters: 0,\n signal: s.signal,\n }\n }\n prevSignal = s.signal\n return {\n backlogCount: nextBacklogCount,\n waiters: s.waiters,\n signal: nextSignal,\n }\n })\n if (prevSignal) {\n yield* Deferred.succeed(prevSignal, undefined)\n }\n })\n\n const acquireBacklogSlot = (lane: TxnLane, capacity: number): Effect.Effect<void> =>\n Effect.gen(function* () {\n const inTxn = yield* FiberRef.get(TaskRunner.inSyncTransactionFiber)\n if (inTxn) {\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: args.moduleId,\n instanceId: args.instanceId,\n code: 'state_transaction::enqueue_in_transaction',\n severity: 'error',\n message:\n 'enqueueTransaction is not allowed inside a synchronous StateTransaction body (it may deadlock or violate backpressure constraints).',\n hint: 'Move dispatch/setState calls outside the transaction window, or use a multi-entry pattern (pending → IO → writeback).',\n kind: 'enqueue_in_transaction',\n })\n yield* Effect.dieMessage('enqueueTransaction is not allowed inside a synchronous StateTransaction body')\n }\n\n const stateRef = lane === 'urgent' ? urgentStateRef : nonUrgentStateRef\n\n let waitedFromMs: number | undefined\n while (true) {\n const policy = yield* args.resolveConcurrencyPolicy()\n const attempt = yield* Ref.modify(stateRef, (s): readonly [BacklogAcquireAttempt, BackpressureState] => {\n if (s.backlogCount < capacity) {\n return [\n { _tag: 'acquired' },\n {\n backlogCount: s.backlogCount + 1,\n waiters: s.waiters,\n signal: s.signal,\n },\n ] as const\n }\n\n return [{ _tag: 'wait', backlogCount: s.backlogCount, signal: s.signal }, s] as const\n })\n\n if (attempt._tag === 'acquired') {\n return\n }\n\n const now = Date.now()\n if (waitedFromMs === undefined) {\n waitedFromMs = now\n }\n const saturatedDurationMs = now - waitedFromMs\n\n yield* diagnostics.emitPressureIfNeeded({\n policy,\n trigger: { kind: 'txnQueue', name: `enqueueTransaction.${lane}` },\n backlogCount: attempt.backlogCount,\n saturatedDurationMs,\n })\n\n yield* Effect.acquireUseRelease(\n Ref.update(stateRef, (s) => ({\n backlogCount: s.backlogCount,\n waiters: s.waiters + 1,\n signal: s.signal,\n })).pipe(Effect.as(attempt.signal)),\n (signal) => Deferred.await(signal),\n () =>\n Ref.update(stateRef, (s) => ({\n backlogCount: s.backlogCount,\n waiters: s.waiters > 0 ? s.waiters - 1 : 0,\n signal: s.signal,\n })),\n )\n }\n })\n\n // Background consumer fiber: executes queued transaction Effects sequentially (urgent first).\n yield* Effect.forkScoped(\n Effect.forever(\n Effect.gen(function* () {\n yield* Queue.take(wakeQueue)\n\n while (true) {\n const urgent = yield* Queue.poll(urgentQueue)\n if (Option.isSome(urgent)) {\n yield* urgent.value\n continue\n }\n\n const nonUrgent = yield* Queue.poll(nonUrgentQueue)\n if (Option.isSome(nonUrgent)) {\n yield* nonUrgent.value\n continue\n }\n\n break\n }\n }),\n ),\n )\n\n const enqueueTransaction: EnqueueTransaction = <A2, E2>(\n a0: TxnLane | Effect.Effect<A2, E2, never>,\n a1?: Effect.Effect<A2, E2, never>,\n ): Effect.Effect<A2, E2, never> =>\n Effect.gen(function* () {\n const lane: TxnLane = a1 ? (a0 as TxnLane) : 'urgent'\n const eff: Effect.Effect<A2, E2, never> = a1 ? a1 : (a0 as Effect.Effect<A2, E2, never>)\n const stateRef = lane === 'urgent' ? urgentStateRef : nonUrgentStateRef\n\n const policy = yield* args.resolveConcurrencyPolicy()\n const capacity = policy.losslessBackpressureCapacity\n yield* acquireBacklogSlot(lane, capacity)\n\n const done = yield* Deferred.make<Exit.Exit<A2, E2>>()\n\n const capturedContext = yield* captureDiagnosticContext({ nextLinkId })\n const effWithContext = withDiagnosticContext(capturedContext, eff)\n\n const task: Effect.Effect<void> = effWithContext.pipe(\n Effect.exit,\n Effect.flatMap((exit) => Deferred.succeed(done, exit)),\n Effect.asVoid,\n Effect.ensuring(release(stateRef)),\n )\n\n // Important: slot is already acquired; offer must be uninterruptible to avoid leaking backlog counters.\n const targetQueue = lane === 'urgent' ? urgentQueue : nonUrgentQueue\n yield* Effect.uninterruptible(Effect.all([Queue.offer(targetQueue, task), Queue.offer(wakeQueue, undefined)]))\n\n const exit = yield* Deferred.await(done)\n return yield* Exit.match(exit, {\n onFailure: (cause) => Effect.failCause(cause),\n onSuccess: (value) => Effect.succeed(value),\n })\n })\n\n return enqueueTransaction\n })\n","import { Cause, Context, Effect, Exit, Fiber, Option } from 'effect'\nimport type { LogicPlan, ModuleRuntime as PublicModuleRuntime } from './module.js'\nimport * as Lifecycle from './Lifecycle.js'\nimport * as ReducerDiagnostics from './ReducerDiagnostics.js'\nimport * as LifecycleDiagnostics from './LifecycleDiagnostics.js'\nimport * as LogicDiagnostics from './LogicDiagnostics.js'\nimport * as LogicUnitMeta from './LogicUnitMeta.js'\nimport * as Platform from './Platform.js'\nimport * as LogicPlanMarker from './LogicPlanMarker.js'\n\ntype PhaseRef = LogicPlanMarker.PhaseRef\n\nconst createPhaseRef = (): PhaseRef => ({ current: 'run' })\n\nexport const runModuleLogics = <S, A, R>(args: {\n readonly tag: Context.Tag<any, PublicModuleRuntime<S, A>>\n readonly logics: ReadonlyArray<Effect.Effect<any, any, R> | LogicPlan<any, R, any>>\n readonly runtime: PublicModuleRuntime<S, A>\n readonly lifecycle: Lifecycle.LifecycleManager\n readonly moduleId: string\n readonly instanceId: string\n}): Effect.Effect<void, unknown, any> => {\n const { tag, logics, runtime, lifecycle, moduleId, instanceId } = args\n const moduleIdForLogs = moduleId\n\n return Effect.gen(function* () {\n const withRuntimeAndLifecycle = <R2, E2, A2>(\n eff: Effect.Effect<A2, E2, R2>,\n phaseRef?: PhaseRef,\n logicUnit?: LogicDiagnostics.LogicUnitService,\n ) => {\n const withServices = Effect.provideService(\n Effect.provideService(eff, Lifecycle.LifecycleContext, lifecycle),\n tag,\n runtime,\n )\n\n // Annotate logs produced inside Logic effects (moduleId, etc.) so the Logger layer can correlate them to a Module.\n const annotated = Effect.annotateLogs({\n 'logix.moduleId': moduleIdForLogs,\n })(withServices as Effect.Effect<A2, E2, any>) as Effect.Effect<A2, E2, R2>\n\n const withLogicUnit = logicUnit\n ? Effect.provideService(annotated, LogicDiagnostics.LogicUnitServiceTag, logicUnit)\n : annotated\n\n if (!phaseRef) {\n return withLogicUnit\n }\n\n const phaseService: LogicDiagnostics.LogicPhaseService = {\n get current() {\n return phaseRef.current\n },\n }\n\n return Effect.provideService(withLogicUnit, LogicDiagnostics.LogicPhaseServiceTag, phaseService)\n }\n\n const formatSource = (source?: {\n readonly file: string\n readonly line: number\n readonly column: number\n }): string | undefined => (source ? `${source.file}:${source.line}:${source.column}` : undefined)\n\n const resolveLogicUnitService = (rawLogic: unknown, index: number): LogicDiagnostics.LogicUnitService => {\n const meta = LogicUnitMeta.getLogicUnitMeta(rawLogic)\n\n const logicUnitId = meta?.resolvedId ?? meta?.id ?? `logic#${index + 1}`\n\n const logicUnitIdKind = meta?.resolvedIdKind ?? (meta?.id ? 'explicit' : 'derived')\n\n const labelBase = meta?.resolvedName ?? meta?.name ?? logicUnitId\n\n const kind = meta?.resolvedKind ?? meta?.kind\n const kindPrefix = kind && kind.length > 0 ? `${kind}:` : ''\n\n const source = meta?.resolvedSource ?? meta?.source\n\n return {\n logicUnitId,\n logicUnitIdKind,\n logicUnitLabel: `logicUnit:${kindPrefix}${labelBase}`,\n path: formatSource(source),\n }\n }\n\n const handleLogicFailure = (cause: any) => {\n if (Cause.isInterrupted(cause)) {\n return Effect.failCause(cause)\n }\n\n const phaseErrorMarker = [...Cause.failures(cause), ...Cause.defects(cause)].some(\n (err) => (err as any)?._tag === 'LogicPhaseError',\n )\n\n const base = lifecycle\n .notifyError(cause, {\n phase: 'run',\n hook: 'unknown',\n moduleId,\n instanceId,\n origin: 'logic.fork',\n })\n .pipe(\n Effect.tap(() => LifecycleDiagnostics.emitMissingOnErrorDiagnosticIfNeeded(lifecycle, moduleId)),\n Effect.tap(() => LifecycleDiagnostics.emitAssemblyFailureDiagnosticIfNeeded(cause, moduleId)),\n Effect.tap(() => ReducerDiagnostics.emitDiagnosticsFromCause(cause, moduleId)),\n Effect.tap(() => LogicDiagnostics.emitEnvServiceNotFoundDiagnosticIfNeeded(cause, moduleId)),\n Effect.tap(() => LogicDiagnostics.emitInvalidPhaseDiagnosticIfNeeded(cause, moduleId)),\n )\n\n // For LogicPhaseError: emit diagnostics only and avoid failing ModuleRuntime construction,\n // so runSync paths are not interrupted by AsyncFiberException.\n if (phaseErrorMarker) {\n return base\n }\n\n return base.pipe(Effect.flatMap(() => Effect.failCause(cause)))\n }\n\n const handleInitFailure = (cause: Cause.Cause<unknown>) =>\n Cause.isInterrupted(cause)\n ? Effect.failCause(cause)\n : Effect.void.pipe(\n Effect.tap(() => LifecycleDiagnostics.emitMissingOnErrorDiagnosticIfNeeded(lifecycle, moduleId)),\n Effect.tap(() => LifecycleDiagnostics.emitAssemblyFailureDiagnosticIfNeeded(cause, moduleId)),\n Effect.tap(() => ReducerDiagnostics.emitDiagnosticsFromCause(cause, moduleId)),\n Effect.tap(() => LogicDiagnostics.emitEnvServiceNotFoundDiagnosticIfNeeded(cause, moduleId)),\n Effect.tap(() => LogicDiagnostics.emitInvalidPhaseDiagnosticIfNeeded(cause, moduleId)),\n Effect.zipRight(Effect.failCause(cause)),\n )\n\n const isLogicPlan = (value: unknown): value is LogicPlan<any, any, any> =>\n Boolean(value && typeof value === 'object' && 'run' in (value as any) && 'setup' in (value as any))\n\n const normalizeToPlan = (value: unknown, defaultPhaseRef?: PhaseRef): LogicPlan<any, any, any> => {\n const phaseRef = LogicPlanMarker.getPhaseRef(value) ?? defaultPhaseRef ?? createPhaseRef()\n\n if (isLogicPlan(value)) {\n const plan = value as LogicPlan<any, any, any>\n if (!LogicPlanMarker.getPhaseRef(plan)) {\n LogicPlanMarker.attachPhaseRef(plan as any, phaseRef)\n }\n return plan\n }\n\n const plan: LogicPlan<any, any, any> = {\n setup: Effect.void,\n run: value as Effect.Effect<any, any, any>,\n }\n LogicPlanMarker.attachPhaseRef(plan as any, phaseRef)\n return plan\n }\n\n const pendingRunForks: Array<Effect.Effect<void, never, any>> = []\n\n let logicIndex = 0\n for (const rawLogic of logics) {\n const logicUnit = resolveLogicUnitService(rawLogic, logicIndex)\n logicIndex += 1\n\n if (isLogicPlan(rawLogic)) {\n const phaseRef = LogicPlanMarker.getPhaseRef(rawLogic) ?? createPhaseRef()\n const setupPhase = withRuntimeAndLifecycle(rawLogic.setup, phaseRef, logicUnit)\n const runPhase = withRuntimeAndLifecycle(rawLogic.run, phaseRef, logicUnit)\n\n phaseRef.current = 'setup'\n yield* setupPhase.pipe(Effect.catchAllCause(handleLogicFailure))\n\n pendingRunForks.push(\n Effect.sync(() => {\n phaseRef.current = 'run'\n }).pipe(\n Effect.zipRight(Effect.forkScoped(runPhase.pipe(Effect.catchAllCause(handleLogicFailure)))),\n Effect.asVoid,\n ),\n )\n continue\n }\n\n if (LogicPlanMarker.isLogicPlanEffect(rawLogic)) {\n // The logic is an Effect that returns a LogicPlan; run it once to resolve the plan.\n const phaseRef = LogicPlanMarker.getPhaseRef(rawLogic) ?? createPhaseRef()\n const makeNoopPlan = (): LogicPlan<any, any, any> =>\n (() => {\n const plan: LogicPlan<any, any, any> = {\n setup: Effect.void,\n run: Effect.void,\n }\n LogicPlanMarker.attachPhaseRef(plan as any, phaseRef)\n LogicPlanMarker.markSkipRun(plan as any)\n return plan\n })()\n\n phaseRef.current = 'setup'\n const resolvedPlan = yield* withRuntimeAndLifecycle(\n rawLogic as Effect.Effect<any, any, any>,\n phaseRef,\n logicUnit,\n ).pipe(\n Effect.matchCauseEffect({\n onSuccess: (value) => Effect.succeed(normalizeToPlan(value, phaseRef)),\n onFailure: (cause) => {\n const isLogicPhaseError = [...Cause.failures(cause), ...Cause.defects(cause)].some(\n (err) => (err as any)?._tag === 'LogicPhaseError',\n )\n\n if (isLogicPhaseError) {\n // For LogicPhaseError: record diagnostics and continue with a noop plan,\n // to avoid failing ModuleRuntime.make on runSync paths.\n return LogicDiagnostics.emitInvalidPhaseDiagnosticIfNeeded(cause, moduleId).pipe(\n Effect.zipRight(handleLogicFailure(cause)),\n Effect.as(makeNoopPlan()),\n )\n }\n\n // Other errors: treat as hard errors — emit diagnostics/errors first, then failCause so the caller can observe it.\n return LogicDiagnostics.emitEnvServiceNotFoundDiagnosticIfNeeded(cause, moduleId).pipe(\n Effect.zipRight(handleLogicFailure(cause)),\n Effect.zipRight(Effect.failCause(cause)),\n )\n },\n }),\n )\n\n const resolvedPlanHadPhaseRef = Boolean(LogicPlanMarker.getPhaseRef(resolvedPlan))\n const planPhaseRef = LogicPlanMarker.getPhaseRef(resolvedPlan) ?? phaseRef\n if (!resolvedPlanHadPhaseRef) {\n LogicPlanMarker.attachPhaseRef(resolvedPlan as any, planPhaseRef)\n }\n const setupPhase = withRuntimeAndLifecycle(resolvedPlan.setup, planPhaseRef, logicUnit)\n const runPhase = withRuntimeAndLifecycle(resolvedPlan.run, planPhaseRef, logicUnit)\n\n // If this is a placeholder plan for phase diagnostics, only run setup (usually Effect.void),\n // and do not fork run so ModuleRuntime.make remains synchronous under runSync.\n const skipRun = LogicPlanMarker.isSkipRun(resolvedPlan)\n\n planPhaseRef.current = 'setup'\n yield* setupPhase.pipe(Effect.catchAllCause(handleLogicFailure))\n\n if (!skipRun) {\n pendingRunForks.push(\n Effect.sync(() => {\n planPhaseRef.current = 'run'\n }).pipe(\n Effect.zipRight(Effect.forkScoped(runPhase.pipe(Effect.catchAllCause(handleLogicFailure)))),\n Effect.asVoid,\n ),\n )\n }\n continue\n }\n\n // Default: single-phase Logic. Fork immediately; if it later resolves to a LogicPlan, execute setup/run.\n const basePhaseRef = LogicPlanMarker.getPhaseRef(rawLogic)\n const runPhase = withRuntimeAndLifecycle(rawLogic as Effect.Effect<any, any, any>, basePhaseRef, logicUnit).pipe(\n Effect.catchAllCause(handleLogicFailure),\n )\n\n pendingRunForks.push(\n Effect.gen(function* () {\n const runFiber = yield* Effect.forkScoped(runPhase)\n\n yield* Effect.forkScoped(\n Fiber.await(runFiber).pipe(\n Effect.flatMap((exit) =>\n Exit.match(exit, {\n onFailure: () => Effect.void,\n onSuccess: (value) => {\n const executePlan = (plan: LogicPlan<any, any, any>): Effect.Effect<void, unknown, any> => {\n const phaseRef = LogicPlanMarker.getPhaseRef(plan) ?? createPhaseRef()\n const setupPhase = withRuntimeAndLifecycle(plan.setup, phaseRef, logicUnit)\n const runPlanPhase = withRuntimeAndLifecycle(plan.run, phaseRef, logicUnit)\n\n phaseRef.current = 'setup'\n return setupPhase.pipe(\n Effect.catchAllCause(handleLogicFailure),\n Effect.zipRight(\n Effect.sync(() => {\n phaseRef.current = 'run'\n }).pipe(\n Effect.zipRight(Effect.forkScoped(runPlanPhase.pipe(Effect.catchAllCause(handleLogicFailure)))),\n Effect.asVoid,\n ),\n ),\n )\n }\n\n if (isLogicPlan(value)) {\n return executePlan(value)\n }\n\n if (LogicPlanMarker.isLogicPlanEffect(value)) {\n return withRuntimeAndLifecycle(\n value as Effect.Effect<any, any, any>,\n basePhaseRef,\n logicUnit,\n ).pipe(\n Effect.map((value) => normalizeToPlan(value, basePhaseRef)),\n Effect.matchCauseEffect({\n onFailure: (cause) => handleLogicFailure(cause),\n onSuccess: (plan) => executePlan(plan),\n }),\n )\n }\n\n return Effect.void\n },\n }),\n ),\n ),\n )\n }),\n )\n continue\n }\n\n // lifecycle initRequired: blocking gate (must complete before forking run fibers).\n yield* lifecycle.runInitRequired.pipe(Effect.catchAllCause(handleInitFailure))\n\n // platform signals: read Platform only after initRequired succeeds (avoid reading Env during setup).\n const platformOpt = yield* Effect.serviceOption(Platform.Tag)\n if (Option.isSome(platformOpt)) {\n const platform = platformOpt.value\n const snapshot = yield* lifecycle.getTaskSnapshot\n\n const platformPhaseRef: PhaseRef = { current: 'run' }\n const phaseService: LogicDiagnostics.LogicPhaseService = {\n get current() {\n return platformPhaseRef.current\n },\n }\n\n const providePlatformEnv = <A2, E2, R2>(eff: Effect.Effect<A2, E2, R2>): Effect.Effect<A2, E2, any> =>\n Effect.provideService(\n Effect.provideService(\n Effect.provideService(\n Effect.provideService(eff as Effect.Effect<A2, E2, any>, Platform.Tag, platform),\n Lifecycle.LifecycleContext,\n lifecycle,\n ),\n tag,\n runtime,\n ),\n LogicDiagnostics.LogicPhaseServiceTag,\n phaseService,\n )\n\n const register = (\n label: Lifecycle.Hook,\n subscribe: (eff: Effect.Effect<void, never, any>) => Effect.Effect<void, never, any>,\n ) =>\n Effect.forkScoped(\n subscribe(\n providePlatformEnv(\n label === 'suspend'\n ? lifecycle.runPlatformSuspend\n : label === 'resume'\n ? lifecycle.runPlatformResume\n : lifecycle.runPlatformReset,\n ).pipe(Effect.asVoid),\n ).pipe(\n Effect.catchAllCause((cause) =>\n lifecycle.notifyError(cause, {\n phase: 'platform',\n hook: label,\n moduleId,\n instanceId,\n origin: 'platform.subscribe',\n }),\n ),\n ),\n ).pipe(Effect.asVoid)\n\n if (snapshot.platformSuspend.length > 0) {\n yield* register('suspend', platform.lifecycle.onSuspend)\n }\n if (snapshot.platformResume.length > 0) {\n yield* register('resume', platform.lifecycle.onResume)\n }\n if (snapshot.platformReset.length > 0 && typeof platform.lifecycle.onReset === 'function') {\n yield* register('reset', platform.lifecycle.onReset)\n }\n }\n\n // Fork run fibers (start after init completes).\n yield* Effect.forEach(pendingRunForks, (eff) => eff, { discard: true })\n\n // lifecycle start: non-blocking (start after ready).\n yield* lifecycle.runStart\n\n // Give forked logics a scheduling chance so upper layers (e.g. Root processes) don't dispatch actions before logics are ready.\n yield* Effect.yieldNow()\n })\n}\n","import { Cause, Chunk, Effect } from 'effect'\nimport * as Debug from './DebugSink.js'\nimport type { LifecycleManager } from './Lifecycle.js'\n\nexport type UnhandledErrorKind = 'interrupt' | 'diagnostic' | 'assembly' | 'defect'\n\nexport const classifyUnhandledCause = (cause: Cause.Cause<unknown>): UnhandledErrorKind => {\n if (Cause.isInterrupted(cause)) {\n return 'interrupt'\n }\n\n const all = [\n ...Chunk.toReadonlyArray(Cause.failures(cause)),\n ...Chunk.toReadonlyArray(Cause.defects(cause)),\n ] as ReadonlyArray<any>\n\n if (all.some((err) => err && typeof err === 'object' && err._tag === 'LogicPhaseError')) {\n return 'diagnostic'\n }\n\n if (all.some((err) => err && typeof err === 'object' && err.name === 'MissingModuleRuntimeError')) {\n return 'assembly'\n }\n\n return 'defect'\n}\n\n/**\n * When a Module hits a lifecycle error during Logic execution and no onError handler is registered,\n * emit a warning diagnostic suggesting adding $.lifecycle.onError at the beginning of the module logic.\n */\nexport const emitMissingOnErrorDiagnosticIfNeeded = (\n lifecycle: LifecycleManager,\n moduleId?: string,\n): Effect.Effect<void, never, any> =>\n lifecycle.hasOnErrorHandlers.pipe(\n Effect.flatMap((has) =>\n has || !moduleId\n ? Effect.void\n : Debug.record({\n type: 'diagnostic',\n moduleId,\n code: 'lifecycle::missing_on_error',\n severity: 'warning',\n message: `Module \"${moduleId}\" received a lifecycle error but has no $.lifecycle.onError handler registered.`,\n hint: \"Add $.lifecycle.onError((cause, context) => ...) at the beginning of this Module's logic to handle logic errors consistently.\",\n }),\n ),\n )\n\n/**\n * When a lifecycle error originates from \"assembly failure\" (e.g. missing Module runtime provider),\n * emit an error diagnostic with actionable fix suggestions.\n *\n * Notes:\n * - This diagnostic explains the error classification and does not change the original error semantics.\n * - If higher layers (e.g. React RuntimeProvider.onError) listen to both lifecycle:error and diagnostic(error),\n * they should de-duplicate or report based on context/phase to avoid duplicate alerts.\n */\nexport const emitAssemblyFailureDiagnosticIfNeeded = (\n cause: Cause.Cause<unknown>,\n moduleId?: string,\n): Effect.Effect<void, never, any> =>\n Effect.sync(() => {\n const defects = Chunk.toReadonlyArray(Cause.defects(cause))\n const missing = defects.find(\n (e) => e && typeof e === 'object' && (e as any).name === 'MissingModuleRuntimeError',\n ) as any\n\n if (!missing) {\n return Effect.void\n }\n\n const tokenId = typeof missing.tokenId === 'string' ? missing.tokenId : '<unknown module id>'\n const fix =\n Array.isArray(missing.fix) && missing.fix.every((l: unknown) => typeof l === 'string')\n ? (missing.fix as ReadonlyArray<string>).join('\\n')\n : undefined\n\n return Debug.record({\n type: 'diagnostic',\n moduleId,\n code: 'assembly::missing_module_runtime',\n severity: 'error',\n message: `Missing Module runtime provider for \"${tokenId}\".`,\n hint:\n fix ?? 'Provide the child implementation in the same scope (imports), or provide a root singleton at app root.',\n kind: 'assembly_failure',\n })\n }).pipe(Effect.flatten)\n","export type PhaseRef = { current: 'setup' | 'run' }\n\nconst LOGIC_PLAN_EFFECT = Symbol.for('@logixjs/core/logicPlanEffect')\nconst LOGIC_PHASE_REF = Symbol.for('@logixjs/core/logicPhaseRef')\nconst LOGIC_SKIP_RUN = Symbol.for('@logixjs/core/logicSkipRun')\n\nconst defineHidden = (target: object, key: symbol, value: unknown): void => {\n Object.defineProperty(target, key, {\n value,\n enumerable: false,\n configurable: true,\n writable: false,\n })\n}\n\nexport const markAsLogicPlanEffect = (value: unknown): void => {\n if (!value || typeof value !== 'object') return\n defineHidden(value as object, LOGIC_PLAN_EFFECT, true)\n}\n\nexport const isLogicPlanEffect = (value: unknown): boolean =>\n Boolean(value && typeof value === 'object' && (value as any)[LOGIC_PLAN_EFFECT] === true)\n\nexport const attachPhaseRef = (value: unknown, phaseRef: PhaseRef): void => {\n if (!value || typeof value !== 'object') return\n defineHidden(value as object, LOGIC_PHASE_REF, phaseRef)\n}\n\nexport const getPhaseRef = (value: unknown): PhaseRef | undefined => {\n if (!value || typeof value !== 'object') return undefined\n return (value as any)[LOGIC_PHASE_REF] as PhaseRef | undefined\n}\n\nexport const markSkipRun = (plan: unknown): void => {\n if (!plan || typeof plan !== 'object') return\n defineHidden(plan as object, LOGIC_SKIP_RUN, true)\n}\n\nexport const isSkipRun = (plan: unknown): boolean =>\n Boolean(plan && typeof plan === 'object' && (plan as any)[LOGIC_SKIP_RUN] === true)\n","import { Effect, Ref } from 'effect'\nimport * as Debug from './DebugSink.js'\nimport type { RuntimeInternalsResolvedConcurrencyPolicy } from './RuntimeInternals.js'\n\ntype PressureKey = string\n\ntype PressureCooldownState = {\n readonly lastEmittedAtMs: number\n readonly suppressedCount: number\n}\n\nconst keyOf = (trigger: Debug.TriggerRef): PressureKey =>\n `${trigger.kind}::${typeof trigger.name === 'string' ? trigger.name : ''}`\n\nconst nowMs = Effect.clockWith((clock) => clock.currentTimeMillis)\n\nexport interface ConcurrencyDiagnostics {\n readonly emitPressureIfNeeded: (args: {\n readonly policy: RuntimeInternalsResolvedConcurrencyPolicy\n readonly trigger: Debug.TriggerRef\n readonly backlogCount?: number\n readonly inFlight?: number\n readonly saturatedDurationMs?: number\n }) => Effect.Effect<void>\n readonly emitUnboundedPolicyIfNeeded: (args: {\n readonly policy: RuntimeInternalsResolvedConcurrencyPolicy\n readonly trigger: Debug.TriggerRef\n }) => Effect.Effect<void>\n}\n\nexport const make = (args: {\n readonly moduleId: string | undefined\n readonly instanceId: string\n}): Effect.Effect<ConcurrencyDiagnostics> =>\n Effect.gen(function* () {\n const pressureCooldownByKeyRef = yield* Ref.make<Readonly<Record<PressureKey, PressureCooldownState>>>({})\n\n const unboundedEnabledEmittedRef = yield* Ref.make(false)\n const unboundedBlockedEmittedRef = yield* Ref.make(false)\n\n const emitPressureIfNeeded: ConcurrencyDiagnostics['emitPressureIfNeeded'] = (inArgs) =>\n Effect.gen(function* () {\n const policy = inArgs.policy\n\n const backlogCount = inArgs.backlogCount ?? 0\n const saturatedDurationMs = inArgs.saturatedDurationMs ?? 0\n\n const threshold = policy.pressureWarningThreshold\n const meetsThreshold =\n backlogCount >= threshold.backlogCount || saturatedDurationMs >= threshold.backlogDurationMs\n\n if (!meetsThreshold) {\n return\n }\n\n const cooldownMs = policy.warningCooldownMs\n const now = yield* nowMs\n const key = keyOf(inArgs.trigger)\n\n const decision = yield* Ref.modify(\n pressureCooldownByKeyRef,\n (\n byKey,\n ): readonly [\n { readonly _tag: 'emit'; readonly suppressedCount: number } | { readonly _tag: 'suppress' },\n Readonly<Record<PressureKey, PressureCooldownState>>,\n ] => {\n const prev = byKey[key]\n if (prev && now - prev.lastEmittedAtMs < cooldownMs) {\n return [\n { _tag: 'suppress' },\n {\n ...byKey,\n [key]: {\n lastEmittedAtMs: prev.lastEmittedAtMs,\n suppressedCount: prev.suppressedCount + 1,\n },\n },\n ] as const\n }\n\n const suppressedCount = prev?.suppressedCount ?? 0\n return [\n { _tag: 'emit', suppressedCount },\n {\n ...byKey,\n [key]: {\n lastEmittedAtMs: now,\n suppressedCount: 0,\n },\n },\n ] as const\n },\n )\n\n if (decision._tag === 'suppress') {\n return\n }\n\n const details: Record<string, unknown> = {\n configScope: policy.concurrencyLimitScope,\n limit: policy.concurrencyLimit,\n backlogCount,\n saturatedDurationMs,\n threshold: {\n backlogCount: threshold.backlogCount,\n backlogDurationMs: threshold.backlogDurationMs,\n },\n cooldownMs,\n degradeStrategy: decision.suppressedCount > 0 ? ('cooldown' as const) : ('none' as const),\n suppressedCount: decision.suppressedCount,\n sampleRate: 1,\n droppedCount: 0,\n }\n if (typeof inArgs.inFlight === 'number' && Number.isFinite(inArgs.inFlight)) {\n details.inFlight = inArgs.inFlight\n }\n\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: args.moduleId,\n instanceId: args.instanceId,\n code: 'concurrency::pressure',\n severity: 'warning',\n message: 'Concurrency pressure detected (backpressure / saturation).',\n hint: 'Reduce trigger frequency, split work, switch to runLatest or batch processing; or tune concurrency/backpressure limits via concurrencyPolicy.',\n kind: 'concurrency:pressure',\n trigger: {\n kind: inArgs.trigger.kind,\n name: inArgs.trigger.name,\n details,\n },\n })\n })\n\n const emitUnboundedPolicyIfNeeded: ConcurrencyDiagnostics['emitUnboundedPolicyIfNeeded'] = (inArgs) =>\n Effect.gen(function* () {\n const policy = inArgs.policy\n\n // 1) effective unbounded: emit only once (SC-004 / FR-004)\n if (policy.concurrencyLimit === 'unbounded' && policy.allowUnbounded === true) {\n const shouldEmit = yield* Ref.modify(unboundedEnabledEmittedRef, (emitted) =>\n emitted ? ([false, true] as const) : ([true, true] as const),\n )\n if (!shouldEmit) {\n return\n }\n\n const details: Record<string, unknown> = {\n configScope: policy.concurrencyLimitScope,\n limit: policy.concurrencyLimit,\n }\n\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: args.moduleId,\n instanceId: args.instanceId,\n code: 'concurrency::unbounded_enabled',\n severity: 'error',\n message: 'Unbounded concurrency is enabled (risk: resource exhaustion).',\n hint:\n 'Enable only for short-lived, controlled, cancelable fan-out; prefer bounded concurrency and increase gradually; ' +\n 'avoid piling up long-running or never-ending tasks under unbounded.',\n kind: 'concurrency:unbounded_enabled',\n trigger: {\n kind: inArgs.trigger.kind,\n name: inArgs.trigger.name,\n details,\n },\n })\n return\n }\n\n // 2) requested unbounded without explicit allow: fall back to bounded + diagnostic (T023)\n const requestedUnbounded =\n policy.requestedConcurrencyLimit === 'unbounded' && policy.concurrencyLimit !== 'unbounded'\n\n if (!requestedUnbounded) {\n return\n }\n\n const shouldEmit = yield* Ref.modify(unboundedBlockedEmittedRef, (emitted) =>\n emitted ? ([false, true] as const) : ([true, true] as const),\n )\n if (!shouldEmit) {\n return\n }\n\n const details: Record<string, unknown> = {\n configScope: policy.requestedConcurrencyLimitScope,\n limit: policy.requestedConcurrencyLimit,\n }\n\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: args.moduleId,\n instanceId: args.instanceId,\n code: 'concurrency::unbounded_requires_opt_in',\n severity: 'error',\n message: 'Unbounded concurrency was requested but is not allowed; falling back to bounded concurrency.',\n hint:\n 'If you really need unbounded, explicitly set concurrencyPolicy.allowUnbounded = true; ' +\n 'otherwise set concurrencyPolicy.concurrencyLimit to a positive integer limit.',\n kind: 'concurrency:unbounded_blocked',\n trigger: {\n kind: inArgs.trigger.kind,\n name: inArgs.trigger.name,\n details,\n },\n })\n })\n\n return { emitPressureIfNeeded, emitUnboundedPolicyIfNeeded }\n })\n"],"mappings":"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","names":["Effect","Stream","SubscriptionRef","PubSub","Context","FiberRef","Option","Queue","Chunk","Effect","Effect","currentTxnId","Effect","Effect","Effect","isDevEnv","resolveActionTag","Effect","Effect","Effect","Cause","Effect","FiberRef","Option","PubSub","SubscriptionRef","entry","Effect","FiberRef","Effect","FiberRef","Option","Effect","Option","tag","FiberRef","Effect","FiberRef","Effect","Option","getMiddlewareStack","Effect","Option","normalizePositiveInt","Effect","getMiddlewareStack","FiberRef","decision","planLen","checks","plan","base","totalDurationMs","exit","Effect","FiberRef","v","Effect","FiberRef","listValue","items","rowIds","out","prevRow","input","isDevEnv","Effect","FiberRef","SubscriptionRef","Option","Cause","nowMs","PubSub","Effect","Option","Effect","Option","Effect","Option","Effect","Option","Effect","Option","normalizeBool","Effect","Option","Effect","Effect","Effect","PubSub","nowMs","make","Effect","PubSub","Effect","Exit","FiberRef","Option","Queue","Effect","FiberRef","Option","Queue","exit","Exit","Cause","Effect","Exit","Fiber","Option","Cause","Chunk","Effect","Effect","Chunk","Cause","Effect","Cause","plan","runPhase","Fiber","Exit","value","Option","Effect","Ref","nowMs","Effect","make","Ref","shouldEmit","details","make","Effect","SubscriptionRef","PubSub","Stream","FiberRef","Option","updateDraft","Queue","firstPendingAtMs","captured","txnLanePolicy","Chunk","program","anchor","sliceDurationMs","stateSchema","options","Context"]}