@logixjs/core 0.0.1

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 (345) hide show
  1. package/dist/Action-BkRHy2vg.d.cts +10 -0
  2. package/dist/Action-mqVvtEHt.d.ts +10 -0
  3. package/dist/Action.cjs +57 -0
  4. package/dist/Action.cjs.map +1 -0
  5. package/dist/Action.d.cts +2 -0
  6. package/dist/Action.d.ts +2 -0
  7. package/dist/Action.js +9 -0
  8. package/dist/Action.js.map +1 -0
  9. package/dist/Actions-AsQ07yTP.d.cts +22 -0
  10. package/dist/Actions-AsQ07yTP.d.ts +22 -0
  11. package/dist/Actions.cjs +19 -0
  12. package/dist/Actions.cjs.map +1 -0
  13. package/dist/Actions.d.cts +2 -0
  14. package/dist/Actions.d.ts +2 -0
  15. package/dist/Actions.js +2 -0
  16. package/dist/Actions.js.map +1 -0
  17. package/dist/Bound-BN1DQ_lM.d.ts +23 -0
  18. package/dist/Bound-BPIfH9SS.d.cts +23 -0
  19. package/dist/Bound.cjs +1532 -0
  20. package/dist/Bound.cjs.map +1 -0
  21. package/dist/Bound.d.cts +7 -0
  22. package/dist/Bound.d.ts +7 -0
  23. package/dist/Bound.js +25 -0
  24. package/dist/Bound.js.map +1 -0
  25. package/dist/Debug-B5q5Bkzx.d.ts +320 -0
  26. package/dist/Debug-Bq8Sqjcr.d.cts +320 -0
  27. package/dist/Debug.cjs +1821 -0
  28. package/dist/Debug.cjs.map +1 -0
  29. package/dist/Debug.d.cts +13 -0
  30. package/dist/Debug.d.ts +13 -0
  31. package/dist/Debug.js +76 -0
  32. package/dist/Debug.js.map +1 -0
  33. package/dist/EffectOp.cjs +169 -0
  34. package/dist/EffectOp.cjs.map +1 -0
  35. package/dist/EffectOp.d.cts +118 -0
  36. package/dist/EffectOp.d.ts +118 -0
  37. package/dist/EffectOp.js +28 -0
  38. package/dist/EffectOp.js.map +1 -0
  39. package/dist/Env-DuJ6JrU2.d.cts +10 -0
  40. package/dist/Env-DuJ6JrU2.d.ts +10 -0
  41. package/dist/Env.cjs +60 -0
  42. package/dist/Env.cjs.map +1 -0
  43. package/dist/Env.d.cts +1 -0
  44. package/dist/Env.d.ts +1 -0
  45. package/dist/Env.js +11 -0
  46. package/dist/Env.js.map +1 -0
  47. package/dist/Flow-1fZT8MpX.d.cts +152 -0
  48. package/dist/Flow-BhpjE22E.d.ts +152 -0
  49. package/dist/Flow.cjs +504 -0
  50. package/dist/Flow.cjs.map +1 -0
  51. package/dist/Flow.d.cts +8 -0
  52. package/dist/Flow.d.ts +8 -0
  53. package/dist/Flow.js +15 -0
  54. package/dist/Flow.js.map +1 -0
  55. package/dist/Handle-D8D1zPb_.d.cts +30 -0
  56. package/dist/Handle-D_cLW1Z3.d.ts +30 -0
  57. package/dist/Handle.cjs +42 -0
  58. package/dist/Handle.cjs.map +1 -0
  59. package/dist/Handle.d.cts +7 -0
  60. package/dist/Handle.d.ts +7 -0
  61. package/dist/Handle.js +10 -0
  62. package/dist/Handle.js.map +1 -0
  63. package/dist/Kernel-8kC-jOda.d.cts +171 -0
  64. package/dist/Kernel-CnGE1Fyk.d.ts +171 -0
  65. package/dist/Kernel.cjs +284 -0
  66. package/dist/Kernel.cjs.map +1 -0
  67. package/dist/Kernel.d.cts +14 -0
  68. package/dist/Kernel.d.ts +14 -0
  69. package/dist/Kernel.js +36 -0
  70. package/dist/Kernel.js.map +1 -0
  71. package/dist/Link-Db7975nU.d.ts +45 -0
  72. package/dist/Link-fX8x1eCK.d.cts +45 -0
  73. package/dist/Link.cjs +542 -0
  74. package/dist/Link.cjs.map +1 -0
  75. package/dist/Link.d.cts +7 -0
  76. package/dist/Link.d.ts +7 -0
  77. package/dist/Link.js +35 -0
  78. package/dist/Link.js.map +1 -0
  79. package/dist/Logic-BRjEMr-W.d.ts +38 -0
  80. package/dist/Logic-DRh4sDZj.d.cts +38 -0
  81. package/dist/Logic.cjs +37 -0
  82. package/dist/Logic.cjs.map +1 -0
  83. package/dist/Logic.d.cts +7 -0
  84. package/dist/Logic.d.ts +7 -0
  85. package/dist/Logic.js +10 -0
  86. package/dist/Logic.js.map +1 -0
  87. package/dist/MatchBuilder-0QOc-nlU.d.ts +14 -0
  88. package/dist/MatchBuilder-CJk5oCkR.d.cts +14 -0
  89. package/dist/MatchBuilder.cjs +85 -0
  90. package/dist/MatchBuilder.cjs.map +1 -0
  91. package/dist/MatchBuilder.d.cts +8 -0
  92. package/dist/MatchBuilder.d.ts +8 -0
  93. package/dist/MatchBuilder.js +11 -0
  94. package/dist/MatchBuilder.js.map +1 -0
  95. package/dist/Middleware.cjs +411 -0
  96. package/dist/Middleware.cjs.map +1 -0
  97. package/dist/Middleware.d.cts +88 -0
  98. package/dist/Middleware.d.ts +88 -0
  99. package/dist/Middleware.js +27 -0
  100. package/dist/Middleware.js.map +1 -0
  101. package/dist/Module-B_0xRDMR.d.cts +203 -0
  102. package/dist/Module-DnzluX2J.d.ts +203 -0
  103. package/dist/Module.cjs +13512 -0
  104. package/dist/Module.cjs.map +1 -0
  105. package/dist/Module.d.cts +8 -0
  106. package/dist/Module.d.ts +8 -0
  107. package/dist/Module.js +53 -0
  108. package/dist/Module.js.map +1 -0
  109. package/dist/ModuleTag-C8FHY_sY.d.ts +93 -0
  110. package/dist/ModuleTag-EGbgBMpZ.d.cts +93 -0
  111. package/dist/ModuleTag.cjs +12231 -0
  112. package/dist/ModuleTag.cjs.map +1 -0
  113. package/dist/ModuleTag.d.cts +8 -0
  114. package/dist/ModuleTag.d.ts +8 -0
  115. package/dist/ModuleTag.js +39 -0
  116. package/dist/ModuleTag.js.map +1 -0
  117. package/dist/Observability-COqEvp2C.d.cts +713 -0
  118. package/dist/Observability-cY4kLn0S.d.ts +713 -0
  119. package/dist/Observability.cjs +5865 -0
  120. package/dist/Observability.cjs.map +1 -0
  121. package/dist/Observability.d.cts +9 -0
  122. package/dist/Observability.d.ts +9 -0
  123. package/dist/Observability.js +41 -0
  124. package/dist/Observability.js.map +1 -0
  125. package/dist/Platform-C49Pv956.d.cts +21 -0
  126. package/dist/Platform-C49Pv956.d.ts +21 -0
  127. package/dist/Platform-CHX8o-U4.d.ts +51 -0
  128. package/dist/Platform-CVlv0xLQ.d.cts +51 -0
  129. package/dist/Platform.cjs +58 -0
  130. package/dist/Platform.cjs.map +1 -0
  131. package/dist/Platform.d.cts +4 -0
  132. package/dist/Platform.d.ts +4 -0
  133. package/dist/Platform.js +15 -0
  134. package/dist/Platform.js.map +1 -0
  135. package/dist/Process-CM9xbMdP.d.ts +92 -0
  136. package/dist/Process-mL8fHDSB.d.cts +92 -0
  137. package/dist/Process.cjs +575 -0
  138. package/dist/Process.cjs.map +1 -0
  139. package/dist/Process.d.cts +8 -0
  140. package/dist/Process.d.ts +8 -0
  141. package/dist/Process.js +42 -0
  142. package/dist/Process.js.map +1 -0
  143. package/dist/ReadQuery-BlMwhe-F.d.ts +30 -0
  144. package/dist/ReadQuery-CL5XlXts.d.cts +30 -0
  145. package/dist/ReadQuery-SinbStGF.d.cts +38 -0
  146. package/dist/ReadQuery-SinbStGF.d.ts +38 -0
  147. package/dist/ReadQuery.cjs +377 -0
  148. package/dist/ReadQuery.cjs.map +1 -0
  149. package/dist/ReadQuery.d.cts +2 -0
  150. package/dist/ReadQuery.d.ts +2 -0
  151. package/dist/ReadQuery.js +14 -0
  152. package/dist/ReadQuery.js.map +1 -0
  153. package/dist/Reflection-CQnKwPXj.d.ts +182 -0
  154. package/dist/Reflection-Kabo1mlU.d.cts +182 -0
  155. package/dist/Reflection.cjs +2954 -0
  156. package/dist/Reflection.cjs.map +1 -0
  157. package/dist/Reflection.d.cts +17 -0
  158. package/dist/Reflection.d.ts +17 -0
  159. package/dist/Reflection.js +40 -0
  160. package/dist/Reflection.js.map +1 -0
  161. package/dist/Resource-Dy1xD_DG.d.cts +75 -0
  162. package/dist/Resource-Dy1xD_DG.d.ts +75 -0
  163. package/dist/Resource.cjs +166 -0
  164. package/dist/Resource.cjs.map +1 -0
  165. package/dist/Resource.d.cts +3 -0
  166. package/dist/Resource.d.ts +3 -0
  167. package/dist/Resource.js +21 -0
  168. package/dist/Resource.js.map +1 -0
  169. package/dist/Root-7ADUMk4t.d.cts +29 -0
  170. package/dist/Root-7ADUMk4t.d.ts +29 -0
  171. package/dist/Root.cjs +125 -0
  172. package/dist/Root.cjs.map +1 -0
  173. package/dist/Root.d.cts +4 -0
  174. package/dist/Root.d.ts +4 -0
  175. package/dist/Root.js +12 -0
  176. package/dist/Root.js.map +1 -0
  177. package/dist/Runtime-B-aL-f29.d.cts +274 -0
  178. package/dist/Runtime-CtyzZG4i.d.ts +274 -0
  179. package/dist/Runtime.cjs +5740 -0
  180. package/dist/Runtime.cjs.map +1 -0
  181. package/dist/Runtime.d.cts +19 -0
  182. package/dist/Runtime.d.ts +19 -0
  183. package/dist/Runtime.js +62 -0
  184. package/dist/Runtime.js.map +1 -0
  185. package/dist/ScopeRegistry-D1owDNSm.d.cts +61 -0
  186. package/dist/ScopeRegistry-D1owDNSm.d.ts +61 -0
  187. package/dist/ScopeRegistry.cjs +152 -0
  188. package/dist/ScopeRegistry.cjs.map +1 -0
  189. package/dist/ScopeRegistry.d.cts +2 -0
  190. package/dist/ScopeRegistry.d.ts +2 -0
  191. package/dist/ScopeRegistry.js +16 -0
  192. package/dist/ScopeRegistry.js.map +1 -0
  193. package/dist/State-CU50R26M.d.cts +19 -0
  194. package/dist/State-CU50R26M.d.ts +19 -0
  195. package/dist/State.cjs +19 -0
  196. package/dist/State.cjs.map +1 -0
  197. package/dist/State.d.cts +2 -0
  198. package/dist/State.d.ts +2 -0
  199. package/dist/State.js +2 -0
  200. package/dist/State.js.map +1 -0
  201. package/dist/StateTrait-BGsZghTz.d.ts +122 -0
  202. package/dist/StateTrait-OWhbj12c.d.cts +122 -0
  203. package/dist/StateTrait.cjs +2737 -0
  204. package/dist/StateTrait.cjs.map +1 -0
  205. package/dist/StateTrait.d.cts +9 -0
  206. package/dist/StateTrait.d.ts +9 -0
  207. package/dist/StateTrait.js +39 -0
  208. package/dist/StateTrait.js.map +1 -0
  209. package/dist/TraitLifecycle-CwV5WPFX.d.cts +88 -0
  210. package/dist/TraitLifecycle-LdIWmKlg.d.ts +88 -0
  211. package/dist/TraitLifecycle.cjs +581 -0
  212. package/dist/TraitLifecycle.cjs.map +1 -0
  213. package/dist/TraitLifecycle.d.cts +8 -0
  214. package/dist/TraitLifecycle.d.ts +8 -0
  215. package/dist/TraitLifecycle.js +24 -0
  216. package/dist/TraitLifecycle.js.map +1 -0
  217. package/dist/action-DiMDD_0v.d.cts +35 -0
  218. package/dist/action-DiMDD_0v.d.ts +35 -0
  219. package/dist/chunk-24VULZ7A.js +76 -0
  220. package/dist/chunk-24VULZ7A.js.map +1 -0
  221. package/dist/chunk-3IYZ5IGG.js +17 -0
  222. package/dist/chunk-3IYZ5IGG.js.map +1 -0
  223. package/dist/chunk-3QMIVH35.js +43 -0
  224. package/dist/chunk-3QMIVH35.js.map +1 -0
  225. package/dist/chunk-3RMKLXHX.js +83 -0
  226. package/dist/chunk-3RMKLXHX.js.map +1 -0
  227. package/dist/chunk-3TMODYZV.js +111 -0
  228. package/dist/chunk-3TMODYZV.js.map +1 -0
  229. package/dist/chunk-3VG5TWQR.js +27 -0
  230. package/dist/chunk-3VG5TWQR.js.map +1 -0
  231. package/dist/chunk-4CQAV7YB.js +37 -0
  232. package/dist/chunk-4CQAV7YB.js.map +1 -0
  233. package/dist/chunk-4SO6JMZL.js +7 -0
  234. package/dist/chunk-4SO6JMZL.js.map +1 -0
  235. package/dist/chunk-66ALHVEX.js +40 -0
  236. package/dist/chunk-66ALHVEX.js.map +1 -0
  237. package/dist/chunk-76WT3HOR.js +397 -0
  238. package/dist/chunk-76WT3HOR.js.map +1 -0
  239. package/dist/chunk-ANLBCBDC.js +285 -0
  240. package/dist/chunk-ANLBCBDC.js.map +1 -0
  241. package/dist/chunk-AUIR5O6W.js +75 -0
  242. package/dist/chunk-AUIR5O6W.js.map +1 -0
  243. package/dist/chunk-BABLDP24.js +445 -0
  244. package/dist/chunk-BABLDP24.js.map +1 -0
  245. package/dist/chunk-BE3HW4FY.js +1099 -0
  246. package/dist/chunk-BE3HW4FY.js.map +1 -0
  247. package/dist/chunk-BZ2SHDN2.js +54 -0
  248. package/dist/chunk-BZ2SHDN2.js.map +1 -0
  249. package/dist/chunk-CW6T36TN.js +393 -0
  250. package/dist/chunk-CW6T36TN.js.map +1 -0
  251. package/dist/chunk-DFNM3WX2.js +632 -0
  252. package/dist/chunk-DFNM3WX2.js.map +1 -0
  253. package/dist/chunk-DMBALCE2.js +1034 -0
  254. package/dist/chunk-DMBALCE2.js.map +1 -0
  255. package/dist/chunk-EGK3KN7B.js +406 -0
  256. package/dist/chunk-EGK3KN7B.js.map +1 -0
  257. package/dist/chunk-EY4NZKDR.js +19 -0
  258. package/dist/chunk-EY4NZKDR.js.map +1 -0
  259. package/dist/chunk-G5ZBFPNU.js +23 -0
  260. package/dist/chunk-G5ZBFPNU.js.map +1 -0
  261. package/dist/chunk-GMPEOUP2.js +31 -0
  262. package/dist/chunk-GMPEOUP2.js.map +1 -0
  263. package/dist/chunk-IHVBV5C2.js +279 -0
  264. package/dist/chunk-IHVBV5C2.js.map +1 -0
  265. package/dist/chunk-IPF7E66P.js +23 -0
  266. package/dist/chunk-IPF7E66P.js.map +1 -0
  267. package/dist/chunk-JCXGZRMU.js +204 -0
  268. package/dist/chunk-JCXGZRMU.js.map +1 -0
  269. package/dist/chunk-JGIWG6SR.js +6359 -0
  270. package/dist/chunk-JGIWG6SR.js.map +1 -0
  271. package/dist/chunk-JWOYLO27.js +241 -0
  272. package/dist/chunk-JWOYLO27.js.map +1 -0
  273. package/dist/chunk-KIXAU3GM.js +137 -0
  274. package/dist/chunk-KIXAU3GM.js.map +1 -0
  275. package/dist/chunk-KL5ACTCT.js +8 -0
  276. package/dist/chunk-KL5ACTCT.js.map +1 -0
  277. package/dist/chunk-KP7MUZNX.js +83 -0
  278. package/dist/chunk-KP7MUZNX.js.map +1 -0
  279. package/dist/chunk-LEU6UA5J.js +1 -0
  280. package/dist/chunk-LEU6UA5J.js.map +1 -0
  281. package/dist/chunk-M2RGJPXX.js +35 -0
  282. package/dist/chunk-M2RGJPXX.js.map +1 -0
  283. package/dist/chunk-M3BFQ7HK.js +13 -0
  284. package/dist/chunk-M3BFQ7HK.js.map +1 -0
  285. package/dist/chunk-M3WTHJHJ.js +1051 -0
  286. package/dist/chunk-M3WTHJHJ.js.map +1 -0
  287. package/dist/chunk-M7IYCTJV.js +79 -0
  288. package/dist/chunk-M7IYCTJV.js.map +1 -0
  289. package/dist/chunk-NBD3KUOZ.js +838 -0
  290. package/dist/chunk-NBD3KUOZ.js.map +1 -0
  291. package/dist/chunk-NQZ2OSGR.js +151 -0
  292. package/dist/chunk-NQZ2OSGR.js.map +1 -0
  293. package/dist/chunk-NZJKFF45.js +106 -0
  294. package/dist/chunk-NZJKFF45.js.map +1 -0
  295. package/dist/chunk-OFADUJWJ.js +175 -0
  296. package/dist/chunk-OFADUJWJ.js.map +1 -0
  297. package/dist/chunk-OGWBVHB3.js +461 -0
  298. package/dist/chunk-OGWBVHB3.js.map +1 -0
  299. package/dist/chunk-PAYXCY6A.js +1696 -0
  300. package/dist/chunk-PAYXCY6A.js.map +1 -0
  301. package/dist/chunk-PYOE4VSI.js +1924 -0
  302. package/dist/chunk-PYOE4VSI.js.map +1 -0
  303. package/dist/chunk-PZ5AY32C.js +10 -0
  304. package/dist/chunk-PZ5AY32C.js.map +1 -0
  305. package/dist/chunk-QCHIQWAJ.js +21 -0
  306. package/dist/chunk-QCHIQWAJ.js.map +1 -0
  307. package/dist/chunk-QMM6O4CD.js +71 -0
  308. package/dist/chunk-QMM6O4CD.js.map +1 -0
  309. package/dist/chunk-RNFE3ML2.js +22 -0
  310. package/dist/chunk-RNFE3ML2.js.map +1 -0
  311. package/dist/chunk-TAAPQVZN.js +23 -0
  312. package/dist/chunk-TAAPQVZN.js.map +1 -0
  313. package/dist/chunk-THATMZXD.js +21 -0
  314. package/dist/chunk-THATMZXD.js.map +1 -0
  315. package/dist/chunk-TKZ7MEIA.js +27 -0
  316. package/dist/chunk-TKZ7MEIA.js.map +1 -0
  317. package/dist/chunk-TQOBJYDP.js +7 -0
  318. package/dist/chunk-TQOBJYDP.js.map +1 -0
  319. package/dist/chunk-VZB726PE.js +93 -0
  320. package/dist/chunk-VZB726PE.js.map +1 -0
  321. package/dist/chunk-W3TEWHLO.js +568 -0
  322. package/dist/chunk-W3TEWHLO.js.map +1 -0
  323. package/dist/chunk-YS3AZQ2G.js +52 -0
  324. package/dist/chunk-YS3AZQ2G.js.map +1 -0
  325. package/dist/chunk-ZDTRWK5F.js +40 -0
  326. package/dist/chunk-ZDTRWK5F.js.map +1 -0
  327. package/dist/chunk-ZFLHVFUC.js +192 -0
  328. package/dist/chunk-ZFLHVFUC.js.map +1 -0
  329. package/dist/chunk-ZFY7U2FR.js +133 -0
  330. package/dist/chunk-ZFY7U2FR.js.map +1 -0
  331. package/dist/chunk-ZGDVUPTM.js +270 -0
  332. package/dist/chunk-ZGDVUPTM.js.map +1 -0
  333. package/dist/index.cjs +19700 -0
  334. package/dist/index.cjs.map +1 -0
  335. package/dist/index.d.cts +195 -0
  336. package/dist/index.d.ts +195 -0
  337. package/dist/index.js +286 -0
  338. package/dist/index.js.map +1 -0
  339. package/dist/ir-BMP7yxJJ.d.cts +39 -0
  340. package/dist/ir-DUOz6H-5.d.ts +39 -0
  341. package/dist/module-B8CBqIZ_.d.cts +1191 -0
  342. package/dist/module-k7m3txak.d.ts +1191 -0
  343. package/dist/protocol-g_1897M2.d.cts +127 -0
  344. package/dist/protocol-g_1897M2.d.ts +127 -0
  345. package/package.json +162 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/Module.ts","../src/Debug.ts","../src/internal/runtime/core/DebugSink.ts","../src/internal/observability/jsonValue.ts","../src/internal/runtime/core/errorSummary.ts","../src/internal/runtime/core/EffectOpCore.ts","../src/internal/runtime/core/DevtoolsHub.ts","../src/internal/observability/evidence.ts","../src/internal/runtime/core/ConvergeStaticIrCollector.ts","../src/internal/runtime/core/env.ts","../src/internal/field-path.ts","../src/internal/digest.ts","../src/internal/state-trait/ir.ts","../src/internal/debug/ModuleTraitsRegistry.ts","../src/internal/runtime/core/runtimeInternalsAccessor.ts","../src/ModuleTag.ts","../src/internal/action.ts","../src/internal/runtime/ModuleFactory.ts","../src/internal/runtime/core/ModuleRuntime.ts","../src/internal/runtime/core/Lifecycle.ts","../src/internal/runtime/core/StateTransaction.ts","../src/internal/runtime/core/RuntimeKernel.ts","../src/internal/runtime/core/FullCutoverGate.ts","../src/internal/runtime/core/KernelRef.ts","../src/internal/runtime/core/RuntimeServiceBuiltins.ts","../src/internal/runtime/core/normalize.ts","../src/internal/observability/evidenceCollector.ts","../src/internal/observability/runSession.ts","../src/internal/runtime/core/ModuleRuntime.operation.ts","../src/internal/effect-op.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/runtime/core/TaskRunner.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/deps-trace.ts","../src/internal/state-trait/validate.ts","../src/internal/state-trait/graph.ts","../src/internal/state-trait/reverse-closure.ts","../src/internal/state-trait/source.ts","../src/internal/resource.ts","../src/internal/runtime/core/ReplayLog.ts","../src/internal/state-trait/rowid.ts","../src/internal/runtime/core/ModuleRuntime.concurrencyPolicy.ts","../src/internal/runtime/core/ModuleRuntime.txnLanePolicy.ts","../src/internal/runtime/core/ModuleRuntime.traitConvergeConfig.ts","../src/internal/state-trait/build.ts","../src/internal/state-trait/meta.ts","../src/internal/state-trait/model.ts","../src/internal/runtime/core/ModuleRuntime.internalHooks.ts","../src/internal/runtime/core/RootContext.ts","../src/internal/runtime/core/process/ProcessRuntime.ts","../src/internal/runtime/core/process/identity.ts","../src/internal/runtime/core/process/concurrency.ts","../src/internal/runtime/core/process/events.ts","../src/internal/runtime/core/process/meta.ts","../src/internal/runtime/core/process/selectorSchema.ts","../src/internal/runtime/core/process/supervision.ts","../src/internal/runtime/core/ReadQuery.ts","../src/internal/runtime/core/SelectorGraph.ts","../src/internal/runtime/core/ModuleRuntime.registry.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/LogicDiagnostics.ts","../src/internal/runtime/core/LogicUnitMeta.ts","../src/internal/runtime/core/Platform.ts","../src/internal/runtime/core/LogicPlanMarker.ts","../src/internal/runtime/core/ConcurrencyDiagnostics.ts","../src/internal/runtime/core/BoundApiRuntime.ts","../src/internal/runtime/core/mutativePatches.ts","../src/internal/runtime/core/FlowRuntime.ts","../src/internal/runtime/core/MatchBuilder.ts","../src/internal/root.ts","../src/StateTrait.ts","../src/internal/state-trait/install.ts","../src/internal/runtime/core/ModuleTraits.ts","../src/State.ts","../src/Actions.ts","../src/Action.ts","../src/Logic.ts","../src/Bound.ts","../src/Link.ts","../src/Process.ts","../src/Handle.ts","../src/Flow.ts","../src/MatchBuilder.ts","../src/ReadQuery.ts","../src/TraitLifecycle.ts","../src/internal/trait-lifecycle/index.ts","../src/Resource.ts","../src/Runtime.ts","../src/internal/runtime/AppRuntime.ts","../src/Middleware.ts","../src/ScopeRegistry.ts","../src/Env.ts","../src/internal/runtime/core/configValidation.ts","../src/internal/runtime/core/runner/ProgramRunner.ts","../src/internal/runtime/core/runner/ProgramRunner.closeScope.ts","../src/internal/runtime/core/runner/ProgramRunner.errors.ts","../src/internal/runtime/core/runner/ProgramRunner.exitCode.ts","../src/internal/runtime/core/runner/ProgramRunner.signals.ts","../src/internal/runtime/core/runner/ProgramRunner.kernel.ts","../src/internal/runtime/core/runner/ProgramRunner.options.ts","../src/Kernel.ts","../src/Root.ts","../src/Platform.ts","../src/Observability.ts","../src/internal/observability/trialRun.ts","../src/internal/observability/trialRunModule.ts","../src/internal/platform/BuildEnv.ts","../src/internal/platform/ConstructionGuard.ts","../src/internal/platform/RuntimeHost.ts","../src/internal/reflection/manifest.ts","../src/internal/reflection/staticIr.ts","../src/internal/runtime/Runtime.ts","../src/internal/observability/artifacts/model.ts","../src/internal/observability/artifacts/digest.ts","../src/internal/observability/artifacts/collect.ts","../src/internal/observability/artifacts/registry.ts","../src/Reflection.ts","../src/internal/reflection/diff.ts","../src/internal/reflection/kernelContract.ts","../src/internal/InternalContracts.ts"],"sourcesContent":["// Public barrel for @logixjs/core\n// Recommended usage:\n// import * as Logix from '@logixjs/core'\n// Then `Logix` exposes Module / State / Actions / Logic / Bound / Handle / Link / Flow / Runtime / Debug namespaces.\n\n// Core module API: Module / ModuleRuntime / ModuleImpl / StateOf / ActionOf / Reducer, etc.\nexport * as Module from './Module.js'\nexport type * from './Module.js'\nexport * as ModuleTag from './ModuleTag.js'\nexport type { ModuleTag as ModuleTagType, ModuleRuntimeTag } from './internal/module.js'\nexport * as State from './State.js'\nexport * as Actions from './Actions.js'\nexport * as Action from './Action.js'\n\n// Logic / Bound / Link: orchestration and cross-module access\nexport * as Logic from './Logic.js'\nexport * as Bound from './Bound.js'\nexport * as Link from './Link.js'\nexport * as Process from './Process.js'\nexport * as Handle from './Handle.js'\n\n// Flow & DSL: fluent orchestration tools for application code\nexport * as Flow from './Flow.js'\nexport * as MatchBuilder from './MatchBuilder.js'\n\n// ReadQuery: protocolized state reads (selectorId/deps/lane/strict gate entry point)\nexport * as ReadQuery from './ReadQuery.js'\n\n// StateTrait: field capabilities and StateTrait kernel (see specs/000-module-traits-runtime)\nexport * as StateTrait from './StateTrait.js'\n\n// TraitLifecycle: unified lower-level interface for domain packages (Form/Query/...) (see specs/007-unify-trait-system)\nexport * as TraitLifecycle from './TraitLifecycle.js'\n\n// Resource: resource specs and registry (see specs/000-module-traits-runtime/references/resource-and-query.md)\nexport * as Resource from './Resource.js'\n\n// Runtime: application runtime (Logix.Runtime.make, etc.)\nexport * as Runtime from './Runtime.js'\nexport type {\n ConcurrencyLimit,\n ConcurrencyPolicy,\n ConcurrencyPolicyOverrides,\n ConcurrencyPolicyPatch,\n} from './internal/runtime/core/env.js'\n\n// Kernel: replaceable kernel contract (requested kernel family + runtime services evidence accessors)\nexport * as Kernel from './Kernel.js'\n\n// ScopeRegistry: scope-bound registry isolated by runtime tree (for reusing the same scope across paths)\nexport * as ScopeRegistry from './ScopeRegistry.js'\n\n// Root: explicit root provider resolution entry (ignores local overrides)\nexport * as Root from './Root.js'\n\n// Env: unified runtime env detection (avoid bundler-inlined NODE_ENV)\nexport * as Env from './Env.js'\n\n// Debug & Platform: debugging and platform integration\nexport * as Debug from './Debug.js'\nexport * from './Debug.js'\nexport type { SnapshotToken } from './Debug.js'\nexport { getDevtoolsSnapshotToken } from './Debug.js'\nexport * as Platform from './Platform.js'\n\n// Observability protocol: exportable evidence package and envelope across hosts (see specs/005-*)\nexport * as Observability from './Observability.js'\n\n// Reflection: IR export + trial-run entry for platform/CI/agents (see specs/025-*)\nexport * as Reflection from './Reflection.js'\n\n// Internal contracts: in-repo integration surface (instead of runtime.__* direct reads)\nexport * as InternalContracts from './internal/InternalContracts.js'\n","import { Context, Effect, FiberRef, Layer, Schema } from 'effect'\nimport * as Debug from './Debug.js'\nimport * as Logic from './Logic.js'\nimport * as ModuleTagNS from './ModuleTag.js'\nimport * as Action from './internal/action.js'\nimport { isDevEnv } from './internal/runtime/core/env.js'\nimport * as LogicUnitMetaInternal from './internal/runtime/core/LogicUnitMeta.js'\nimport type {\n ActionsFromMap,\n ActionOf,\n AnyModuleShape,\n AnySchema,\n BoundApi,\n ModuleLike,\n ModuleHandle,\n ModuleImpl,\n ModuleImplementStateTransactionOptions,\n ModuleLogic,\n ModuleRuntime,\n ModuleTag,\n ModuleShape,\n MutatorsFromMap,\n ReducersFromMap,\n StateChangeWithMeta,\n StateCommitMeta,\n StateCommitMode,\n StateCommitPriority,\n StateOf,\n} from './internal/module.js'\n\n/**\n * Module (definition object) public API.\n *\n * - Domain factories (Form / CRUD / ...) should return this object.\n * - `.tag` is the identity anchor (ModuleTag/Context.Tag), used by `$.use(...)` and Env injection.\n * - `.impl` is the assembly blueprint (ModuleImpl), consumed by React/Runtime entry points.\n * - `.logic()` only produces the logic value; `.withLogic/withLayer(s)` changes the runnable shape (immutable: returns a new object).\n */\n\nexport type {\n AnySchema,\n AnyModuleShape,\n ModuleShape,\n ModuleLogic,\n ModuleImpl,\n ModuleRuntime,\n ModuleHandle,\n ModuleTag,\n StateOf,\n ActionOf,\n ActionsFromMap,\n MutatorsFromMap,\n ReducersFromMap,\n BoundApi,\n StateCommitMode,\n StateCommitPriority,\n StateCommitMeta,\n StateChangeWithMeta,\n} from './internal/module.js'\n\nexport interface DevSource {\n readonly file: string\n readonly line: number\n readonly column: number\n}\n\nexport interface ModuleDev {\n readonly source?: DevSource\n}\n\nexport interface LogicUnitOptions {\n readonly id?: string\n readonly kind?: string\n readonly name?: string\n readonly source?: DevSource\n}\n\nexport interface MountedLogicUnitSummary {\n readonly kind: string\n readonly id: string\n readonly derived?: boolean\n readonly name?: string\n}\n\nexport interface ModuleDescriptor {\n readonly id: string\n readonly moduleId: string\n readonly instanceId: string\n readonly actionKeys: ReadonlyArray<string>\n readonly logicUnits: ReadonlyArray<MountedLogicUnitSummary>\n readonly schemaKeys?: ReadonlyArray<string>\n readonly meta?: Record<string, unknown>\n readonly source?: DevSource\n}\n\nexport type HandleExtendFn<Sh extends AnyModuleShape, Ext extends object> = (\n runtime: ModuleRuntime<StateOf<Sh>, ActionOf<Sh>>,\n base: ModuleHandle<Sh>,\n) => Ext | (ModuleHandle<Sh> & Ext) | null | undefined\n\ntype LogicUnitMeta = LogicUnitMetaInternal.LogicUnitMeta\nconst attachLogicUnitMeta = <L extends object>(logic: L, meta: LogicUnitMeta): L =>\n LogicUnitMetaInternal.attachLogicUnitMeta(logic, meta as any) as any\n\ntype NoInfer_<T> = [T][T extends any ? 0 : never]\n\ntype MountedLogicUnit<Sh extends AnyModuleShape> = {\n readonly id: string\n readonly derived: boolean\n readonly kind: string\n readonly name?: string\n readonly source?: DevSource\n readonly logic: ModuleLogic<Sh, any, any>\n readonly origin?: {\n readonly explicitId?: string\n readonly defaultId?: string\n readonly derivedBase?: string\n }\n}\n\ntype LogicOverrideWarning = {\n readonly id: string\n readonly from: Pick<MountedLogicUnit<any>, 'kind' | 'name' | 'source'> & {\n readonly order: number\n }\n readonly to: Pick<MountedLogicUnit<any>, 'kind' | 'name' | 'source'> & {\n readonly order: number\n }\n}\n\ntype ModuleInternal<Id extends string, Sh extends AnyModuleShape> = {\n readonly initial: StateOf<Sh>\n readonly imports?: ReadonlyArray<Layer.Layer<any, any, any> | ModuleImpl<any, AnyModuleShape, any>>\n readonly processes?: ReadonlyArray<Effect.Effect<void, any, any>>\n readonly stateTransaction?: ModuleImplementStateTransactionOptions\n readonly mounted: ReadonlyArray<MountedLogicUnit<Sh>>\n readonly overrides: ReadonlyArray<LogicOverrideWarning>\n readonly layers: ReadonlyArray<Layer.Layer<any, never, any>>\n readonly rebuild: () => ModuleImpl<Id, Sh, any>\n}\n\nconst MODULE_INTERNAL = Symbol.for('logix.module.internal')\nconst MODULE_DECLARED_EFFECTS = Symbol.for('logix.module.effects.declared')\n\ntype ModuleDefBase<\n Id extends string = string,\n Sh extends AnyModuleShape = AnyModuleShape,\n Ext extends object = {},\n> = ModuleLike<Id, Sh, Ext> & {\n readonly shape: Sh\n readonly stateSchema: Sh['stateSchema']\n readonly actionSchema: Sh['actionSchema']\n /**\n * Raw ActionMap (tag -> payload schema).\n * - Mainly for DX/reflection; runtime contract is still based on tag.shape/actionSchema.\n */\n readonly actions: Sh['actionMap']\n /**\n * Raw reducers (if provided by the definition).\n * - Mainly for DX/reflection; runtime normalizes them into primary reducers inside ModuleTag/ModuleFactory.\n */\n readonly reducers?: ReducersFromMap<Sh['stateSchema'], Sh['actionMap']>\n readonly live: <R = never, E = never>(\n initial: StateOf<Sh>,\n ...logics: Array<ModuleLogic<Sh, R, E>>\n ) => Layer.Layer<ModuleRuntime<StateOf<Sh>, ActionOf<Sh>>, E, R>\n readonly schemas?: Record<string, unknown>\n readonly meta?: Record<string, unknown>\n readonly services?: Record<string, Context.Tag<any, any>>\n readonly dev?: ModuleDev\n readonly logic: <R = never, E = unknown>(\n build: (\n api: BoundApi<Sh, R> & {\n readonly self: Logic.Of<Sh, R, ModuleHandle<Sh> & Ext, never>\n },\n ) => ModuleLogic<Sh, R, E>,\n options?: LogicUnitOptions,\n ) => ModuleLogic<Sh, R, E>\n}\n\nexport type AnyModule = {\n readonly _kind: 'Module'\n readonly id: string\n readonly tag: ModuleTag<string, AnyModuleShape>\n readonly impl: ModuleImpl<any, AnyModuleShape, any>\n readonly actions: Record<string, AnySchema>\n readonly reducers?: Record<string, unknown>\n readonly schemas?: Record<string, unknown>\n readonly meta?: Record<string, unknown>\n readonly services?: Record<string, Context.Tag<any, any>>\n readonly dev?: ModuleDev\n}\n\nexport type Module<Id extends string, Sh extends AnyModuleShape, Ext extends object = {}, R = never> = ModuleDefBase<\n Id,\n Sh,\n Ext\n> & {\n readonly _kind: 'Module'\n readonly impl: ModuleImpl<Id, Sh, R>\n readonly withLogic: (logic: ModuleLogic<Sh, any, any>, options?: LogicUnitOptions) => Module<Id, Sh, Ext, R>\n readonly withLogics: (...inputs: ReadonlyArray<MountInput<Sh>>) => Module<Id, Sh, Ext, R>\n readonly withLayer: (layer: Layer.Layer<any, never, any>) => Module<Id, Sh, Ext, R>\n readonly withLayers: (...layers: ReadonlyArray<Layer.Layer<any, never, any>>) => Module<Id, Sh, Ext, R>\n}\n\nexport type ModuleDef<Id extends string, Sh extends AnyModuleShape, Ext extends object = {}> = ModuleDefBase<\n Id,\n Sh,\n Ext\n> & {\n readonly _kind: 'ModuleDef'\n readonly implement: <R = never>(config: {\n readonly initial: StateOf<Sh>\n readonly logics?: Array<ModuleLogic<Sh, R, any>>\n readonly imports?: ReadonlyArray<Layer.Layer<any, any, any> | ModuleImpl<any, AnyModuleShape, any>>\n readonly processes?: ReadonlyArray<Effect.Effect<void, any, any>>\n readonly stateTransaction?: ModuleImplementStateTransactionOptions\n }) => Module<Id, Sh, Ext, R>\n}\n\nexport const is = (value: unknown): value is ModuleDefBase => {\n if (!value || typeof value !== 'object') return false\n const kind = (value as any)._kind\n if (kind !== 'ModuleDef' && kind !== 'Module') return false\n return Context.isTag((value as any).tag)\n}\n\nexport const hasImpl = (value: unknown): value is AnyModule => {\n if (!is(value)) return false\n return (\n typeof (value as any).impl === 'object' && (value as any).impl !== null && (value as any).impl._tag === 'ModuleImpl'\n )\n}\n\nexport const unwrapTag = <Id extends string, Sh extends AnyModuleShape>(\n module: ModuleLike<Id, Sh, any>,\n): ModuleTag<Id, Sh> => module.tag\n\nexport const unwrapImpl = <Id extends string, Sh extends AnyModuleShape>(\n module: AnyModule & { readonly id: Id; readonly tag: ModuleTag<Id, Sh> },\n): ModuleImpl<Id, Sh, any> => (module as any).impl as ModuleImpl<Id, Sh, any>\n\nexport const descriptor = (\n module: ModuleDefBase<string, AnyModuleShape, any>,\n runtime: ModuleRuntime<any, any>,\n): ModuleDescriptor => {\n const actionKeys = Object.keys((module.tag as any).shape?.actionMap ?? {})\n\n const internal = (module as any)[MODULE_INTERNAL] as ModuleInternal<string, AnyModuleShape> | undefined\n\n const logicUnits: ReadonlyArray<MountedLogicUnitSummary> = internal\n ? internal.mounted.map((u) => ({\n kind: u.kind,\n id: u.id,\n derived: u.derived ? true : undefined,\n name: u.name,\n }))\n : []\n\n const schemaKeys = module.schemas && typeof module.schemas === 'object' ? Object.keys(module.schemas) : undefined\n\n const meta = module.meta && typeof module.meta === 'object' ? module.meta : undefined\n\n const source = module.dev?.source\n\n return {\n id: module.id,\n moduleId: String(runtime.moduleId),\n instanceId: String(runtime.instanceId),\n actionKeys,\n logicUnits,\n schemaKeys,\n meta,\n source,\n }\n}\n\ntype MountInput<Sh extends AnyModuleShape> =\n | ModuleLogic<Sh, any, any>\n | readonly [ModuleLogic<Sh, any, any>, LogicUnitOptions]\n\nconst normalizeMountInput = <Sh extends AnyModuleShape>(\n input: MountInput<Sh>,\n): { readonly logic: ModuleLogic<Sh, any, any>; readonly options?: LogicUnitOptions } => {\n if (Array.isArray(input)) {\n return { logic: input[0], options: input[1] }\n }\n return { logic: input as ModuleLogic<Sh, any, any> }\n}\n\nconst resolveLogicUnit = <Sh extends AnyModuleShape>(\n existing: ReadonlyArray<MountedLogicUnit<Sh>>,\n logic: ModuleLogic<Sh, any, any>,\n options?: LogicUnitOptions,\n): MountedLogicUnit<Sh> => {\n const meta = LogicUnitMetaInternal.getLogicUnitMeta(logic)\n const explicitId = options?.id\n const defaultId = meta?.id\n\n const kind = (options?.kind ?? meta?.kind ?? 'user').trim() || 'user'\n const name =\n options?.name ?? meta?.name ?? (typeof defaultId === 'string' && defaultId.length > 0 ? defaultId : undefined)\n\n const source = options?.source ?? meta?.source\n\n if (typeof explicitId === 'string' && explicitId.trim().length > 0) {\n return {\n id: explicitId.trim(),\n derived: false,\n kind,\n name,\n source,\n logic,\n origin: { explicitId: explicitId.trim(), defaultId },\n }\n }\n\n if (typeof defaultId === 'string' && defaultId.trim().length > 0) {\n return {\n id: defaultId.trim(),\n derived: false,\n kind,\n name,\n source,\n logic,\n origin: { defaultId: defaultId.trim() },\n }\n }\n\n // Derived id: reproducible within the same composition order.\n const used = new Set(existing.map((u) => u.id))\n const baseRaw = (name ?? kind ?? 'logic').trim() || 'logic'\n const base = baseRaw.replace(/\\s+/g, '_')\n\n let n = 1\n while (used.has(`${base}#${n}`)) n += 1\n const derivedId = `${base}#${n}`\n\n return {\n id: derivedId,\n derived: true,\n kind,\n name: name ?? baseRaw,\n source,\n logic,\n origin: { derivedBase: baseRaw },\n }\n}\n\nconst mountLogicUnit = <Sh extends AnyModuleShape>(\n current: ReadonlyArray<MountedLogicUnit<Sh>>,\n overrides: ReadonlyArray<LogicOverrideWarning>,\n input: { readonly logic: ModuleLogic<Sh, any, any>; readonly options?: LogicUnitOptions },\n): {\n readonly mounted: ReadonlyArray<MountedLogicUnit<Sh>>\n readonly overrides: ReadonlyArray<LogicOverrideWarning>\n} => {\n const nextUnit = resolveLogicUnit(current, input.logic, input.options)\n // Write the resolved verdict back to logic meta for provenance/diagnostics (aligned with 022-module).\n LogicUnitMetaInternal.updateLogicUnitMeta(nextUnit.logic as any, {\n resolvedId: nextUnit.id,\n resolvedIdKind: nextUnit.derived ? 'derived' : 'explicit',\n resolvedKind: nextUnit.kind,\n resolvedName: nextUnit.name,\n resolvedSource: nextUnit.source as any,\n })\n\n const prevIndex = current.findIndex((u) => u.id === nextUnit.id)\n if (prevIndex < 0) {\n return { mounted: [...current, nextUnit], overrides }\n }\n\n const prev = current[prevIndex]\n const nextMounted = [...current.slice(0, prevIndex), ...current.slice(prevIndex + 1), nextUnit]\n\n const nextOverrides: ReadonlyArray<LogicOverrideWarning> = [\n ...overrides,\n {\n id: nextUnit.id,\n from: {\n kind: prev.kind,\n name: prev.name,\n source: prev.source,\n order: prevIndex,\n },\n to: {\n kind: nextUnit.kind,\n name: nextUnit.name,\n source: nextUnit.source,\n order: nextMounted.length - 1,\n },\n },\n ]\n\n return { mounted: nextMounted, overrides: nextOverrides }\n}\n\nconst formatSource = (source?: DevSource): string => {\n if (!source) return 'unknown'\n return `${source.file}:${source.line}:${source.column}`\n}\n\nconst makeOverrideDiagnosticsLogic = (\n tag: ModuleTag<any, AnyModuleShape>,\n overrides: ReadonlyArray<LogicOverrideWarning>,\n): ModuleLogic<any, any, never> => {\n if (overrides.length === 0) {\n return Effect.void as any\n }\n\n return tag.logic(() =>\n Effect.gen(function* () {\n if (!isDevEnv()) return\n\n const diagnosticsLevel = yield* FiberRef.get(Debug.internal.currentDiagnosticsLevel as any)\n if (diagnosticsLevel === 'off') return\n\n const runtime = (yield* tag) as ModuleRuntime<any, any>\n\n yield* Effect.forEach(\n overrides,\n (o) =>\n Debug.record({\n type: 'diagnostic',\n moduleId: runtime.moduleId,\n instanceId: runtime.instanceId,\n code: 'module_logic::override',\n severity: 'warning',\n message: `logicUnitId \"${o.id}\" overridden (last-write-wins).`,\n hint:\n `from(#${o.from.order}) kind=${o.from.kind} name=${o.from.name ?? 'unknown'} source=${formatSource(o.from.source)}\\n` +\n `to(#${o.to.order}) kind=${o.to.kind} name=${o.to.name ?? 'unknown'} source=${formatSource(o.to.source)}`,\n kind: 'logic_unit_override',\n }),\n { discard: true },\n )\n }),\n )\n}\n\nconst makeDeclaredEffectsLogic = (\n tag: ModuleTag<any, AnyModuleShape>,\n effects: Record<string, ReadonlyArray<unknown> | undefined> | undefined,\n moduleId: string,\n): ModuleLogic<any, any, never> => {\n if (!effects || typeof effects !== 'object' || Object.keys(effects).length === 0) {\n return Effect.void as any\n }\n\n const logic = tag.logic(($) => ({\n setup: Effect.gen(function* () {\n const actions = ($ as any).actions as Record<string, Action.AnyActionToken>\n const effectApi = ($ as any).effect as\n | ((token: unknown, handler: (payload: unknown) => Effect.Effect<void, any, any>) => Effect.Effect<void, never, any>)\n | undefined\n if (typeof effectApi !== 'function') return\n\n const wrappedHandlers = new WeakMap<(...args: any[]) => any, (payload: unknown) => Effect.Effect<void, any, any>>()\n\n for (const actionTag of Object.keys(effects).sort()) {\n const token = actions[actionTag]\n if (!Action.isActionToken(token)) continue\n\n const handlers = effects[actionTag]\n if (!Array.isArray(handlers)) continue\n\n for (const handler of handlers) {\n if (typeof handler !== 'function') continue\n let wrapped = wrappedHandlers.get(handler)\n if (!wrapped) {\n wrapped = (payload: unknown) => (handler as any)($, payload)\n wrappedHandlers.set(handler, wrapped)\n }\n yield* effectApi(token, wrapped)\n }\n }\n }),\n run: Effect.void,\n })) as ModuleLogic<any, any, never>\n\n LogicUnitMetaInternal.attachLogicUnitMeta(logic as any, {\n id: '__logix_internal:effects:declared',\n kind: 'internal',\n name: 'effects:declared',\n moduleId,\n })\n\n return logic\n}\n\nconst makeLogicFactory = <Id extends string, Sh extends AnyModuleShape, Ext extends object>(\n selfModule: ModuleDefBase<Id, Sh, Ext>,\n): ModuleDefBase<Id, Sh, Ext>['logic'] => {\n const tag = selfModule.tag\n return (build, options) => {\n const eff = tag.logic((api) => {\n const withSelf = Object.create(api) as BoundApi<Sh, any> & {\n readonly self: Logic.Of<Sh, any, ModuleHandle<Sh> & Ext, never>\n }\n ;(withSelf as any).self = Effect.suspend(() => (api as any).use(selfModule as any))\n return build(withSelf as any)\n }) as ModuleLogic<Sh, any, any>\n\n const meta: LogicUnitMeta = {\n id: options?.id,\n kind: options?.kind,\n name: options?.name,\n source: options?.source,\n moduleId: selfModule.id,\n }\n\n return attachLogicUnitMeta(eff as any, meta) as any\n }\n}\n\ntype MakeDef<Id extends string, SSchema extends AnySchema, AMap extends Action.ActionDefs> = {\n readonly state: SSchema\n readonly actions: AMap\n readonly reducers?: ReducersFromMap<SSchema, NoInfer_<AMap>>\n readonly immerReducers?: MutatorsFromMap<SSchema, NoInfer_<AMap>>\n readonly effects?: EffectsFromMap<NoInfer_<AMap>>\n readonly traits?: unknown\n readonly schemas?: Record<string, unknown>\n readonly meta?: Record<string, unknown>\n readonly services?: Record<string, Context.Tag<any, any>>\n readonly dev?: ModuleDev\n}\n\ntype AnyActionMap = Action.ActionDefs\ntype EmptyActionMap = Record<never, never>\n\ntype PayloadOfActionDef<V> = V extends Schema.Schema<any, any, any>\n ? Schema.Schema.Type<V>\n : V extends Action.ActionToken<any, infer P, any>\n ? P\n : never\n\ntype DeclaredEffectHandler<Payload> = ($: unknown, payload: Payload) => Effect.Effect<void, any, any>\n\ntype EffectsFromMap<M extends AnyActionMap> = {\n readonly [K in keyof M]?: ReadonlyArray<DeclaredEffectHandler<PayloadOfActionDef<M[K]>>>\n}\n\ntype MergeActionMap<Base extends AnyActionMap, Ext extends AnyActionMap> = {\n readonly [K in keyof Base | keyof Ext]: K extends keyof Ext ? Ext[K] : K extends keyof Base ? Base[K] : never\n}\n\n/**\n * Module.make \"app-side extension/override\" parameters (a two-stage responsibility split: domain library author → app developer).\n *\n * - `actions`: add-only (cannot override existing action schema); used to extend actionMap.\n * - `reducers`: add and override; used to override domain reducers or provide reducers for new actions.\n * - Other reflective fields (schemas/meta/services/dev) are shallow-merged (last-write-wins).\n */\nexport type MakeExtendDef<\n SSchema extends AnySchema,\n BaseActions extends AnyActionMap,\n ExtActions extends AnyActionMap = EmptyActionMap,\n> = {\n readonly actions?: ExtActions\n readonly reducers?: ReducersFromMap<SSchema, MergeActionMap<BaseActions, ExtActions>>\n readonly immerReducers?: MutatorsFromMap<SSchema, MergeActionMap<BaseActions, ExtActions>>\n readonly effects?: EffectsFromMap<MergeActionMap<BaseActions, ExtActions>>\n readonly schemas?: Record<string, unknown>\n readonly meta?: Record<string, unknown>\n readonly services?: Record<string, Context.Tag<any, any>>\n readonly dev?: ModuleDev\n}\n\nconst mergeMakeDef = <\n Id extends string,\n SSchema extends AnySchema,\n BaseActions extends AnyActionMap,\n ExtActions extends AnyActionMap,\n>(\n base: MakeDef<Id, SSchema, BaseActions>,\n extend?: MakeExtendDef<SSchema, BaseActions, ExtActions>,\n): MakeDef<Id, SSchema, MergeActionMap<BaseActions, ExtActions>> => {\n const baseActions = base.actions as Record<string, AnySchema>\n const extActions = (extend?.actions ?? {}) as Record<string, AnySchema>\n\n for (const key of Object.keys(extActions)) {\n if (key in baseActions && baseActions[key] !== extActions[key]) {\n throw new Error(\n `[Logix.Module.make] action key \"${key}\" already exists; overriding action schemas is not supported (define a new action tag instead).`,\n )\n }\n }\n\n const mergedActionDefs = { ...(base.actions as any), ...(extend?.actions as any) } as MergeActionMap<\n BaseActions,\n ExtActions\n >\n const actions = Action.normalizeActions(mergedActionDefs)\n\n const mergeEffects = (): Record<string, ReadonlyArray<unknown>> | undefined => {\n const baseEffects = (base.effects ?? {}) as Record<string, unknown>\n const extEffects = (extend?.effects ?? {}) as Record<string, unknown>\n\n const keys = Array.from(new Set([...Object.keys(baseEffects), ...Object.keys(extEffects)])).sort()\n if (keys.length === 0) return undefined\n\n const out: Record<string, ReadonlyArray<unknown>> = {}\n for (const key of keys) {\n if (!(key in actions)) {\n throw new Error(`[Logix.Module.make] effect key \"${key}\" does not exist in actionMap.`)\n }\n\n const baseValue = baseEffects[key]\n const extValue = extEffects[key]\n const baseArr = Array.isArray(baseValue) ? baseValue : baseValue === undefined ? [] : null\n const extArr = Array.isArray(extValue) ? extValue : extValue === undefined ? [] : null\n\n if (baseArr === null) {\n throw new Error(`[Logix.Module.make] effects[\"${key}\"] must be an array of handlers.`)\n }\n if (extArr === null) {\n throw new Error(`[Logix.Module.make] effects[\"${key}\"] must be an array of handlers.`)\n }\n\n const merged = [...baseArr, ...extArr].filter((h) => h !== undefined)\n for (const h of merged) {\n if (typeof h !== 'function') {\n throw new Error(`[Logix.Module.make] effects[\"${key}\"] handlers must be functions.`)\n }\n }\n\n if (merged.length > 0) {\n out[key] = merged as ReadonlyArray<unknown>\n }\n }\n\n return Object.keys(out).length > 0 ? out : undefined\n }\n\n const effects = mergeEffects()\n\n const wrapImmerReducers = (mutators?: Record<string, ((draft: unknown, payload: unknown) => void) | undefined>) => {\n if (!mutators) return {}\n const out: Record<string, unknown> = {}\n for (const key of Object.keys(mutators)) {\n const mutator = mutators[key]\n if (typeof mutator !== 'function') continue\n out[key] = ModuleTagNS.Reducer.mutate(mutator as any)\n }\n return out\n }\n\n const reducers = {\n ...wrapImmerReducers(base.immerReducers as any),\n ...(base.reducers ?? {}),\n ...wrapImmerReducers(extend?.immerReducers as any),\n ...(extend?.reducers ?? {}),\n } as Record<string, unknown>\n\n for (const key of Object.keys(reducers)) {\n if (!(key in actions)) {\n throw new Error(`[Logix.Module.make] reducer key \"${key}\" does not exist in actionMap.`)\n }\n }\n\n const schemas =\n base.schemas || extend?.schemas ? { ...(base.schemas ?? {}), ...(extend?.schemas ?? {}) } : undefined\n\n const meta = base.meta || extend?.meta ? { ...(base.meta ?? {}), ...(extend?.meta ?? {}) } : undefined\n\n const services =\n base.services || extend?.services ? { ...(base.services ?? {}), ...(extend?.services ?? {}) } : undefined\n\n const dev = base.dev || extend?.dev ? { ...(base.dev ?? {}), ...(extend?.dev ?? {}) } : undefined\n\n return {\n ...base,\n actions: actions as any,\n reducers: Object.keys(reducers).length > 0 ? (reducers as any) : undefined,\n effects: effects as any,\n schemas,\n meta,\n services,\n dev,\n } as any\n}\n\nexport const Reducer = ModuleTagNS.Reducer\n\nexport type Shape<S extends AnySchema, M extends Action.ActionDefs> = ModuleShape<\n S,\n Schema.Schema<ActionsFromMap<Action.NormalizedActionTokens<M>>>,\n Action.NormalizedActionTokens<M>\n>\n\nexport function make<\n Id extends string,\n SSchema extends AnySchema,\n AMap extends Action.ActionDefs,\n Ext extends object = {},\n>(\n id: Id,\n def: MakeDef<Id, SSchema, AMap>,\n): ModuleDef<\n Id,\n ModuleShape<\n SSchema,\n Schema.Schema<ActionsFromMap<Action.NormalizedActionTokens<AMap>>>,\n Action.NormalizedActionTokens<AMap>\n >,\n Ext\n>\n\nexport function make<\n Id extends string,\n SSchema extends AnySchema,\n AMap extends Action.ActionDefs,\n Ext extends object = {},\n ExtActions extends Action.ActionDefs = EmptyActionMap,\n>(\n id: Id,\n def: MakeDef<Id, SSchema, AMap>,\n extend: MakeExtendDef<SSchema, NoInfer_<AMap>, ExtActions>,\n): ModuleDef<\n Id,\n ModuleShape<\n SSchema,\n Schema.Schema<ActionsFromMap<Action.NormalizedActionTokens<MergeActionMap<AMap, ExtActions>>>>,\n Action.NormalizedActionTokens<MergeActionMap<AMap, ExtActions>>\n >,\n Ext\n>\n\nexport function make(id: any, def: any, extend?: any): any {\n const merged = mergeMakeDef(def as any, extend as any)\n\n const tag = ModuleTagNS.make(id, {\n state: merged.state,\n actions: merged.actions,\n reducers: merged.reducers,\n traits: merged.traits,\n }) as unknown as ModuleTag<any, AnyModuleShape>\n\n if (merged.effects && typeof merged.effects === 'object' && Object.keys(merged.effects).length > 0) {\n Object.defineProperty(tag as any, MODULE_DECLARED_EFFECTS, {\n value: merged.effects,\n enumerable: false,\n configurable: true,\n writable: false,\n })\n }\n\n const base: any = {\n _kind: 'ModuleDef' as const,\n id,\n tag,\n shape: tag.shape,\n stateSchema: tag.stateSchema,\n actionSchema: tag.actionSchema,\n actions: merged.actions,\n reducers: merged.reducers,\n effects: merged.effects,\n live: tag.live,\n schemas: merged.schemas,\n meta: merged.meta,\n services: merged.services,\n dev: merged.dev,\n }\n\n base.logic = makeLogicFactory(base as any)\n\n base.implement = (config: any) => {\n type Sh = AnyModuleShape\n\n const initial = config.initial as any\n const imports = config.imports as any\n const processes = config.processes as any\n const stateTransaction = config.stateTransaction as any\n\n const mountedResult = (config.logics ?? []).reduce(\n (\n acc: {\n mounted: ReadonlyArray<MountedLogicUnit<any>>\n overrides: ReadonlyArray<LogicOverrideWarning>\n },\n logic: any,\n ) => mountLogicUnit(acc.mounted, acc.overrides, { logic }),\n { mounted: [] as const, overrides: [] as const },\n )\n\n type State = {\n readonly mounted: ReadonlyArray<MountedLogicUnit<any>>\n readonly overrides: ReadonlyArray<LogicOverrideWarning>\n readonly layers: ReadonlyArray<Layer.Layer<any, never, any>>\n }\n\n const buildImpl = (state: State): ModuleImpl<any, AnyModuleShape, any> => {\n const diagnosticsLogic = makeOverrideDiagnosticsLogic(tag as any, state.overrides)\n const declaredEffectsLogic = makeDeclaredEffectsLogic(tag as any, merged.effects, id)\n const allLogics = [...state.mounted.map((u) => u.logic), declaredEffectsLogic, diagnosticsLogic]\n\n let impl = (tag as any).implement({\n initial,\n logics: allLogics,\n imports,\n processes,\n stateTransaction,\n }) as ModuleImpl<any, AnyModuleShape, any>\n\n for (const layer of state.layers) {\n impl = impl.withLayer(layer)\n }\n\n return impl\n }\n\n const createModule = (state: State): any => {\n const internal: ModuleInternal<any, AnyModuleShape> = {\n initial,\n imports,\n processes,\n stateTransaction,\n mounted: state.mounted,\n overrides: state.overrides,\n layers: state.layers,\n rebuild: () => buildImpl(state),\n }\n\n const mod: any = {\n ...base,\n _kind: 'Module' as const,\n impl: buildImpl(state),\n }\n\n Object.defineProperty(mod, MODULE_INTERNAL, {\n value: internal,\n enumerable: false,\n configurable: true,\n })\n\n mod.logic = makeLogicFactory(mod)\n\n mod.withLogic = (logic: any, options?: LogicUnitOptions) => mod.withLogics([logic, options] as any)\n\n mod.withLogics = (...inputs: ReadonlyArray<MountInput<any>>) => {\n const current = (mod as any)[MODULE_INTERNAL] as ModuleInternal<any, AnyModuleShape>\n const normalized = inputs.map(normalizeMountInput)\n const next = normalized.reduce((acc, item) => mountLogicUnit(acc.mounted, acc.overrides, item as any), {\n mounted: current.mounted,\n overrides: current.overrides,\n })\n\n return createModule({\n mounted: next.mounted,\n overrides: next.overrides,\n layers: current.layers,\n })\n }\n\n mod.withLayer = (layer: Layer.Layer<any, never, any>) => {\n const current = (mod as any)[MODULE_INTERNAL] as ModuleInternal<any, AnyModuleShape>\n return createModule({\n mounted: current.mounted,\n overrides: current.overrides,\n layers: [...current.layers, layer],\n })\n }\n\n mod.withLayers = (...layers: ReadonlyArray<Layer.Layer<any, never, any>>) =>\n layers.reduce((acc, layer) => acc.withLayer(layer), mod as any)\n\n return mod as any\n }\n\n return createModule({\n mounted: mountedResult.mounted,\n overrides: mountedResult.overrides,\n layers: [],\n })\n }\n\n return base\n}\n\nexport const Manage = {\n make: <D extends (...args: any[]) => AnyModule>(config: {\n readonly kind?: string\n readonly define: D\n }): { readonly kind?: string; readonly make: D } => ({\n kind: config.kind,\n make: config.define,\n }),\n} as const\n","import { Effect, Layer, Logger } from 'effect'\nimport type { AnyModuleShape, ModuleLike, ModuleRuntime, ModuleTag } from './internal/module.js'\nimport type { StateTraitProgram, StateTraitGraph, StateTraitPlan } from './StateTrait.js'\nimport * as Internal from './internal/runtime/core/DebugSink.js'\nimport * as DevtoolsHub from './internal/runtime/core/DevtoolsHub.js'\nimport * as ConvergeStaticIrCollector from './internal/runtime/core/ConvergeStaticIrCollector.js'\nimport * as ModuleTraitsRegistry from './internal/debug/ModuleTraitsRegistry.js'\nimport type * as ModuleTraits from './internal/runtime/core/ModuleTraits.js'\nimport { getModuleTraitsProgram, getRuntimeInternals } from './internal/runtime/core/runtimeInternalsAccessor.js'\nimport { getNodeEnv } from './internal/runtime/core/env.js'\nimport type { EvidencePackage, EvidencePackageSource } from './Observability.js'\n\n// Public Debug API: a namespace-shaped facade for debugging capabilities used by apps and platforms.\n// The event model and core Layers live in internal/runtime/core/DebugSink.ts; this module provides ergonomic entry points.\n\nexport type Event = Internal.Event\nexport interface Sink extends Internal.Sink {}\nexport interface RuntimeDebugEventRef extends Internal.RuntimeDebugEventRef {}\nexport type DiagnosticsLevel = Internal.DiagnosticsLevel\nexport type TraitConvergeDiagnosticsSamplingConfig = Internal.TraitConvergeDiagnosticsSamplingConfig\nexport type SnapshotToken = DevtoolsHub.SnapshotToken\n\nexport const toRuntimeDebugEventRef = Internal.toRuntimeDebugEventRef\n\nexport const internal = {\n currentDebugSinks: Internal.currentDebugSinks,\n currentRuntimeLabel: Internal.currentRuntimeLabel,\n currentDiagnosticsLevel: Internal.currentDiagnosticsLevel,\n currentTraitConvergeDiagnosticsSampling: Internal.currentTraitConvergeDiagnosticsSampling,\n toRuntimeDebugEventRef: Internal.toRuntimeDebugEventRef,\n}\n\nexport interface DevtoolsSnapshot extends DevtoolsHub.DevtoolsSnapshot {}\nexport interface DevtoolsHubOptions extends DevtoolsHub.DevtoolsHubOptions {\n readonly diagnosticsLevel?: DiagnosticsLevel\n readonly traitConvergeDiagnosticsSampling?: TraitConvergeDiagnosticsSamplingConfig\n}\n\nexport const getDevtoolsSnapshot = DevtoolsHub.getDevtoolsSnapshot\nexport const getDevtoolsSnapshotToken = DevtoolsHub.getDevtoolsSnapshotToken\nexport const subscribeDevtoolsSnapshot = DevtoolsHub.subscribeDevtoolsSnapshot\nexport const clearDevtoolsEvents = DevtoolsHub.clearDevtoolsEvents\nexport const getDevtoolsRunId = DevtoolsHub.getDevtoolsRunId\nexport const setDevtoolsRunId = DevtoolsHub.setDevtoolsRunId\nexport const startDevtoolsRun = DevtoolsHub.startDevtoolsRun\nexport const setInstanceLabel = DevtoolsHub.setInstanceLabel\nexport const getInstanceLabel = DevtoolsHub.getInstanceLabel\n\nexport const exportEvidencePackage = (options?: {\n readonly runId?: string\n readonly source?: EvidencePackageSource\n readonly protocolVersion?: string\n}): EvidencePackage => DevtoolsHub.exportDevtoolsEvidencePackage(options)\n\n/**\n * Diagnostics level for exportable events.\n *\n * Controls what DevtoolsHub exports (ring buffer / snapshots), without changing Debug.record's fallback semantics.\n */\nexport const diagnosticsLevel = (level: DiagnosticsLevel): Layer.Layer<any, never, never> =>\n Layer.fiberRefLocallyScopedWith(Internal.currentDiagnosticsLevel as any, () => level) as Layer.Layer<\n any,\n never,\n never\n >\n\nexport const traitConvergeDiagnosticsSampling = (\n config: TraitConvergeDiagnosticsSamplingConfig,\n): Layer.Layer<any, never, never> => Internal.traitConvergeDiagnosticsSampling(config)\n\n/**\n * Whether Devtools is enabled.\n *\n * Used by React/Devtools UI to decide if extra instrumentation should be active; turned on by devtoolsHubLayer.\n */\nexport const isDevtoolsEnabled = DevtoolsHub.isDevtoolsEnabled\n\n/**\n * A lightweight counter of active module runtimes.\n *\n * Derived from module:init / module:destroy events; suitable as a DevTools / Playground data source.\n */\nexport interface ModuleRuntimeCounter {\n readonly sink: Sink\n readonly getSnapshot: () => ReadonlyMap<string, number>\n}\n\n/**\n * A simple in-memory ring buffer for Debug events.\n *\n * No filtering/grouping; consumers can post-process snapshots (by moduleId/type/etc.).\n */\nexport interface RingBufferSink {\n readonly sink: Sink\n readonly getSnapshot: () => ReadonlyArray<Event>\n readonly clear: () => void\n}\n\n/**\n * Create a Debug sink that counts active instances per moduleId.\n *\n * Snapshots are exposed via getSnapshot(); bridging to UI (window/postMessage/etc.) is left to consumers.\n */\nexport const makeModuleRuntimeCounterSink = (): ModuleRuntimeCounter => {\n const counts = new Map<string, number>()\n\n const sink: Sink = {\n record: (event: Event) =>\n Effect.sync(() => {\n if (event.type === 'module:init') {\n const moduleId = event.moduleId ?? 'unknown'\n const runtimeLabel = 'runtimeLabel' in event && event.runtimeLabel ? event.runtimeLabel : 'unknown'\n const key = `${runtimeLabel}::${moduleId}`\n const prev = counts.get(key) ?? 0\n counts.set(key, prev + 1)\n return\n }\n if (event.type === 'module:destroy') {\n const moduleId = event.moduleId ?? 'unknown'\n const runtimeLabel = 'runtimeLabel' in event && event.runtimeLabel ? event.runtimeLabel : 'unknown'\n const key = `${runtimeLabel}::${moduleId}`\n const prev = counts.get(key) ?? 0\n const next = prev - 1\n if (next <= 0) {\n counts.delete(key)\n } else {\n counts.set(key, next)\n }\n }\n }),\n }\n\n const getSnapshot = (): ReadonlyMap<string, number> => new Map(counts)\n\n return { sink, getSnapshot }\n}\n\n/**\n * Create a ring-buffer Debug sink.\n *\n * Records the last N events in chronological order; a good foundation for event timelines.\n */\nexport const makeRingBufferSink = (capacity = 1000): RingBufferSink => {\n const buffer: Event[] = []\n\n const sink: Sink = {\n record: (event: Event) =>\n Effect.sync(() => {\n if (capacity <= 0) {\n return\n }\n if (buffer.length >= capacity) {\n buffer.shift()\n }\n buffer.push(event)\n }),\n }\n\n const getSnapshot = (): ReadonlyArray<Event> => buffer.slice()\n const clear = (): void => {\n buffer.length = 0\n }\n\n return { sink, getSnapshot, clear }\n}\n\n/**\n * Emit a Debug event to sinks attached to the current Fiber.\n *\n * If no sink is provided, the runtime chooses a safe fallback (browser console grouping; node preserves error-class events).\n */\nexport const record = Internal.record\n\n/**\n * A no-op Debug layer.\n *\n * Provides an empty sink set and drops all Debug events; useful for tests or explicitly disabling Debug.\n */\nexport const noopLayer = Internal.noopLayer as unknown as Layer.Layer<any, never, never>\n\n/**\n * Debug mode selector.\n *\n * - `auto`: infer dev/prod from NODE_ENV.\n * - `dev`: verbose diagnostics.\n * - `prod`: keep only high-value diagnostics/errors.\n * - `off`: disable sinks (benchmarks/special tests).\n */\nexport type DebugMode = 'auto' | 'dev' | 'prod' | 'off'\n\nexport interface DebugLayerOptions {\n readonly mode?: DebugMode\n /**\n * In dev mode, choose what to print to the browser console:\n * - default: diagnostic + lifecycle:error + trace:* (legacy behavior)\n * - diagnostic: diagnostic(warn/error) + lifecycle:error only (recommended for app dev with Devtools)\n */\n readonly devConsole?: 'default' | 'diagnostic'\n /**\n * Diagnostics level for exportable debug event refs (used by DevtoolsHub and debug sinks that normalize events).\n *\n * Equivalent to composing `Debug.diagnosticsLevel(level)` with `Debug.layer(...)`.\n */\n readonly diagnosticsLevel?: DiagnosticsLevel\n /**\n * Reserved for future use: enable high-noise action/state logs in dev.\n */\n readonly verboseActions?: boolean\n /**\n * Reserved for future use: emit key events into metrics in prod.\n */\n readonly enableMetrics?: boolean\n}\n\nconst resolveMode = (mode: DebugMode | undefined): DebugMode => {\n if (mode && mode !== 'auto') {\n return mode\n }\n\n const env = getNodeEnv()\n return env === 'production' ? 'prod' : 'dev'\n}\n\n/**\n * Public entry: compose a Debug layer based on the environment or an explicit mode.\n *\n * Default mode is `auto`: non-production → `dev`; production → `prod`.\n *\n * @example\n * ```ts\n * const runtime = Runtime.make(AppImpl, {\n * layer: Layer.mergeAll(Debug.layer(), businessLayer),\n * })\n * ```\n */\nexport const layer = (options?: DebugLayerOptions): Layer.Layer<any, never, never> => {\n const mode = resolveMode(options?.mode)\n const diagnostics = options?.diagnosticsLevel\n\n const sinks = (() => {\n switch (mode) {\n case 'off':\n return Internal.noopLayer as unknown as Layer.Layer<any, never, never>\n case 'prod':\n // Production: keep only high-value diagnostics/errors to avoid noisy logs.\n return Internal.errorOnlyLayer as unknown as Layer.Layer<any, never, never>\n case 'dev':\n case 'auto': {\n // Dev: enable browser-friendly Debug sink output by default.\n // Logger.pretty is intentionally opt-in by callers to avoid implicitly rewriting the logger.\n return options?.devConsole === 'diagnostic'\n ? (Internal.browserDiagnosticConsoleLayer as unknown as Layer.Layer<any, never, never>)\n : (Internal.browserConsoleLayer as unknown as Layer.Layer<any, never, never>)\n }\n }\n })()\n\n return diagnostics\n ? (Layer.mergeAll(sinks, diagnosticsLevel(diagnostics)) as Layer.Layer<any, never, never>)\n : sinks\n}\n\n/**\n * PrettyLoggerOptions: parameters of Effect.Logger.prettyLogger.\n */\nexport type PrettyLoggerOptions = Parameters<typeof Logger.prettyLogger>[0]\n\n/**\n * Replace the default Effect logger with a pretty logger (as a Layer).\n *\n * Equivalent to `Logger.replace(Logger.defaultLogger, Logger.prettyLogger(options))`.\n */\nexport const withPrettyLogger = (\n base: Layer.Layer<any, any, any>,\n options?: PrettyLoggerOptions,\n): Layer.Layer<any, any, any> =>\n Layer.merge(\n base,\n Logger.replace(Logger.defaultLogger, Logger.prettyLogger(options)) as unknown as Layer.Layer<any, any, any>,\n )\n\n/**\n * Replace Debug sinks with the provided sink set.\n *\n * Advanced: use either `Debug.layer` or `Debug.replace` in a scope, not both.\n */\nexport const replace = (sinks: ReadonlyArray<Sink>): Layer.Layer<any, never, never> =>\n Layer.locallyScoped(internal.currentDebugSinks, sinks as ReadonlyArray<Internal.Sink>) as Layer.Layer<\n any,\n never,\n never\n >\n\n/**\n * Append sinks to the current Fiber's sink set (without overriding existing sinks).\n */\nexport const appendSinks = (sinks: ReadonlyArray<Sink>): Layer.Layer<any, never, never> =>\n Layer.fiberRefLocallyScopedWith(Internal.currentDebugSinks, (current) => [\n ...current,\n ...(sinks as ReadonlyArray<Internal.Sink>),\n ]) as Layer.Layer<any, never, never>\n\n/**\n * Append the DevtoolsHub sink to aggregate Debug events into snapshots.\n *\n * Works by appending sinks; it does not override `Debug.layer` / `Debug.replace` / custom sinks.\n */\nexport function devtoolsHubLayer(options?: DevtoolsHubOptions): Layer.Layer<any, never, never>\nexport function devtoolsHubLayer(\n base: Layer.Layer<any, any, any>,\n options?: DevtoolsHubOptions,\n): Layer.Layer<any, never, any>\nexport function devtoolsHubLayer(\n baseOrOptions?: Layer.Layer<any, any, any> | DevtoolsHubOptions,\n maybeOptions?: DevtoolsHubOptions,\n): Layer.Layer<any, never, any> {\n // In effect v3, Layer values are objects tagged with `_op_layer`.\n const isLayerValue = (value: unknown): value is Layer.Layer<any, any, any> =>\n typeof value === 'object' && value !== null && '_op_layer' in (value as Record<string, unknown>)\n\n const hasBase = isLayerValue(baseOrOptions)\n const base = hasBase\n ? (baseOrOptions as Layer.Layer<any, any, any>)\n : (Layer.empty as unknown as Layer.Layer<any, any, any>)\n const options = hasBase ? maybeOptions : (baseOrOptions as DevtoolsHubOptions | undefined)\n\n DevtoolsHub.configureDevtoolsHub(options)\n const append = appendSinks([DevtoolsHub.devtoolsHubSink])\n const appendConvergeStaticIr = ConvergeStaticIrCollector.appendConvergeStaticIrCollectors([\n DevtoolsHub.devtoolsHubConvergeStaticIrCollector,\n ])\n const enableExportableDiagnostics = diagnosticsLevel(options?.diagnosticsLevel ?? 'light')\n const convergeSamplingLayer = options?.traitConvergeDiagnosticsSampling\n ? traitConvergeDiagnosticsSampling(options.traitConvergeDiagnosticsSampling)\n : (Layer.empty as unknown as Layer.Layer<any, never, never>)\n\n // FiberRef layers must build base sinks first, then append; provideMerge(append, base)\n // builds base first and then applies append's FiberRefs patch, avoiding overrides.\n return Layer.provideMerge(\n Layer.mergeAll(append, enableExportableDiagnostics, convergeSamplingLayer, appendConvergeStaticIr) as Layer.Layer<\n any,\n never,\n any\n >,\n base,\n ) as Layer.Layer<any, never, any>\n}\n\n/**\n * Attach a logical runtime label to Debug events within the current Fiber scope.\n *\n * DevTools can group events by this label.\n */\nexport const runtimeLabel = (label: string): Layer.Layer<any, never, never> =>\n Layer.fiberRefLocallyScopedWith(internal.currentRuntimeLabel as any, () => label) as Layer.Layer<any, never, never>\n\n/**\n * StateTrait debug view for Devtools/scripts.\n */\nexport interface ModuleTraitsDebug {\n readonly program?: StateTraitProgram<any>\n readonly graph?: StateTraitGraph\n readonly plan?: StateTraitPlan\n}\n\n/**\n * A minimal enumerable trait item from the finalized snapshot (023).\n */\nexport interface ModuleTraitsFinalItem {\n readonly traitId: string\n readonly name: string\n readonly description?: string\n readonly provenance: ModuleTraits.TraitProvenance\n}\n\n/**\n * Read the StateTrait program (if any) from a module definition and return a debug view.\n */\nexport const getModuleTraits = (\n module: ModuleTag<string, AnyModuleShape> | ModuleLike<string, AnyModuleShape, any>,\n): ModuleTraitsDebug => {\n const moduleTag = (module as any).tag ? (module as any).tag : module\n\n const program = getModuleTraitsProgram(moduleTag as any) as StateTraitProgram<any> | undefined\n\n if (!program) {\n return {}\n }\n\n return {\n program,\n graph: program.graph,\n plan: program.plan,\n }\n}\n\n/**\n * Get a module's StateTrait debug view by moduleId (registered at Module.make time).\n */\nexport const getModuleTraitsById = (moduleId: string): ModuleTraitsDebug | undefined => {\n const program = ModuleTraitsRegistry.getModuleProgramById(moduleId)\n if (!program) {\n return undefined\n }\n return {\n program,\n graph: program.graph,\n plan: program.plan,\n }\n}\n\n/**\n * Read the finalized traits snapshot (023) from a ModuleRuntime; undefined if not finalized.\n */\nexport const getModuleTraitsSnapshot = (\n runtime: ModuleRuntime<any, any>,\n): ModuleTraits.ModuleTraitsSnapshot | undefined => {\n try {\n const internals = getRuntimeInternals(runtime as any)\n return internals.traits.getModuleTraitsSnapshot()\n } catch {\n return undefined\n }\n}\n\n/**\n * Export a minimal, enumerable trait list from the finalized snapshot (023).\n *\n * Order is deterministic and matches the snapshot.\n */\nexport const getModuleFinalTraits = (runtime: ModuleRuntime<any, any>): ReadonlyArray<ModuleTraitsFinalItem> => {\n const snapshot = getModuleTraitsSnapshot(runtime)\n if (!snapshot) return []\n\n return snapshot.traits.map((t) => ({\n traitId: t.traitId,\n name: t.name,\n description: t.description,\n provenance: snapshot.provenanceIndex[t.traitId]!,\n }))\n}\n\n/**\n * Append a trace-only sink (handles `trace:*`) on top of the current Debug sinks.\n *\n * Default behavior logs trace events via logDebug; you can provide a handler to forward into ring buffers / bridges.\n *\n * @example\n * ```ts\n * const layer = Debug.traceLayer(\n * Debug.layer({ mode: 'dev' }),\n * (event) => Effect.logInfo({ traceEvent: event }),\n * )\n * ```\n */\nconst isLayer = (value: unknown): value is Layer.Layer<any, any, any> =>\n typeof value === 'object' && value !== null && '_op_layer' in (value as Record<string, unknown>)\n\nexport function traceLayer(onTrace?: (event: Event) => Effect.Effect<void>): Layer.Layer<any, never, never>\nexport function traceLayer(\n base: Layer.Layer<any, any, any>,\n onTrace?: (event: Event) => Effect.Effect<void>,\n): Layer.Layer<any, never, any>\nexport function traceLayer(\n baseOrHandler?: Layer.Layer<any, any, any> | ((event: Event) => Effect.Effect<void>),\n maybeOnTrace?: (event: Event) => Effect.Effect<void>,\n): Layer.Layer<any, never, any> {\n const hasBase = isLayer(baseOrHandler)\n const base = hasBase\n ? (baseOrHandler as Layer.Layer<any, any, any>)\n : (Layer.empty as unknown as Layer.Layer<any, any, any>)\n const onTrace = hasBase ? maybeOnTrace : (baseOrHandler as ((event: Event) => Effect.Effect<void>) | undefined)\n\n const traceSink: Sink = {\n record: (event: Event) =>\n typeof event.type === 'string' && event.type.startsWith('trace:')\n ? onTrace\n ? onTrace(event)\n : Effect.logDebug({ traceEvent: event })\n : Effect.void,\n }\n\n // Append the trace sink via FiberRef: extend the current Fiber's sink set.\n // Do not depend on DebugHub/Tag; use FiberRef.currentDebugSinks as the single source of truth.\n const appendTrace = Layer.fiberRefLocallyScopedWith(Internal.currentDebugSinks, (sinks) => [...sinks, traceSink])\n\n // Same as devtoolsHubLayer: build base first, then appendTrace updates FiberRef sinks.\n return Layer.provideMerge(appendTrace, base as Layer.Layer<any, any, any>) as Layer.Layer<any, never, any>\n}\n","import { Cause, Effect, FiberRef, Layer, Logger } from 'effect'\nimport {\n projectJsonValue,\n type DowngradeReason as JsonDowngradeReason,\n type JsonValue,\n type JsonValueProjectionStats,\n} from '../../observability/jsonValue.js'\nimport type * as ReplayLog from './ReplayLog.js'\nimport {\n toSerializableErrorSummary,\n type DowngradeReason as ErrorDowngradeReason,\n type SerializableErrorSummary,\n} from './errorSummary.js'\nimport * as EffectOpCore from './EffectOpCore.js'\nimport type * as ProcessProtocol from './process/protocol.js'\nimport type { ConvergeStaticIrExport } from '../../state-trait/converge-ir.js'\n\nexport interface TriggerRef {\n readonly kind: string\n readonly name?: string\n readonly details?: unknown\n}\n\ntype TraceEventType = `trace:${string}`\ntype GenericTraceEventType = Exclude<\n TraceEventType,\n 'trace:trait:converge' | 'trace:trait:check' | 'trace:trait:validate'\n>\n\n/**\n * ReplayEventRef:\n * - Replay event structure referenced from Debug events.\n * - Based on ReplayLog.Event, enriched with txn/trigger association fields for Devtools aggregation and explanation.\n */\nexport type ReplayEventRef = ReplayLog.ReplayLogEvent & {\n readonly txnId?: string\n readonly trigger?: TriggerRef\n}\n\nexport type Event =\n | {\n readonly type: 'module:init'\n readonly moduleId?: string\n readonly instanceId?: string\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n | {\n readonly type: 'module:destroy'\n readonly moduleId?: string\n readonly instanceId?: string\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n | {\n readonly type: 'lifecycle:phase'\n readonly moduleId?: string\n readonly instanceId?: string\n readonly phase: 'init' | 'run' | 'destroy' | 'platform'\n readonly name: string\n readonly payload?: unknown\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n | {\n readonly type: 'action:dispatch'\n readonly moduleId?: string\n readonly instanceId?: string\n readonly action: unknown\n readonly actionTag?: string\n readonly unknownAction?: boolean\n readonly txnSeq?: number\n readonly txnId?: string\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n | {\n readonly type: 'state:update'\n readonly moduleId?: string\n readonly instanceId?: string\n readonly state: unknown\n readonly txnSeq?: number\n readonly txnId?: string\n /**\n * Optional: Static IR digest aligned with FieldPathId/StepId (for consumer-side reverse-mapping & alignment).\n * - When missing or mismatched, consumers must not attempt to reverse-map rootIds -> rootPaths (avoid wrong UI).\n * - Allowed to be omitted on near-zero-cost diagnostics=off paths.\n */\n readonly staticIrDigest?: string\n /**\n * Optional: the affected scope aggregated by this commit (field-level dirty-set).\n * - Populated by Runtime at commit time;\n * - Must stay slim and serializable;\n * - Devtools can use it to explain \"why converge/validate ran / why it degraded to full\".\n */\n readonly dirtySet?: unknown\n /**\n * Optional: patch count aggregated by this commit (from StateTransaction).\n * - Populated by Runtime only on transaction paths.\n * - Devtools can use it as a lightweight transaction summary metric.\n */\n readonly patchCount?: number\n /**\n * Optional: whether patch records were truncated (bounded) under full instrumentation.\n */\n readonly patchesTruncated?: boolean\n /**\n * Optional: truncation reason code (stable enum).\n */\n readonly patchesTruncatedReason?: 'max_patches'\n /**\n * Optional: commit mode (normal/batched/low-priority, etc).\n * - Populated by Runtime;\n * - Default is chosen by the caller (typically \"normal\").\n */\n readonly commitMode?: string\n /**\n * Optional: external visibility priority (normal/low).\n * - Populated by Runtime.\n * - Mainly used by React external subscription scheduling (avoid unnecessary renders).\n */\n readonly priority?: string\n /**\n * Optional: transaction origin kind (origin.kind) that triggered this state commit:\n * - e.g. \"action\" / \"source-refresh\" / \"service-callback\" / \"devtools\".\n * - Populated by Runtime only on StateTransaction-based paths.\n * - Devtools can distinguish app transactions vs devtools time-travel operations.\n */\n readonly originKind?: string\n /**\n * Optional: transaction origin name (origin.name) that triggered this state commit:\n * - e.g. action dispatch / fieldPath / task:success/task:failure, etc.\n * - Populated by Runtime only on StateTransaction-based paths.\n */\n readonly originName?: string\n /**\n * Reserved: Trait converge summary (for Devtools window-level stats / TopN costs / degrade reasons, etc.).\n * - Phase 2: field slot only; structure is not fixed.\n * - Later phases will align with the Trait/Replay event model into an explainable structure.\n */\n readonly traitSummary?: unknown\n /**\n * Reserved: replay event associated with this transaction (re-emit source of truth from ReplayLog).\n * - Phase 2: field slot only.\n * - Later phases will align with ReplayLog.Event structure.\n */\n readonly replayEvent?: ReplayEventRef\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n | {\n readonly type:\n | 'process:start'\n | 'process:stop'\n | 'process:restart'\n | 'process:trigger'\n | 'process:dispatch'\n | 'process:error'\n readonly moduleId?: string\n readonly instanceId?: string\n readonly identity: ProcessProtocol.ProcessInstanceIdentity\n readonly severity: 'info' | 'warning' | 'error'\n readonly eventSeq: number\n readonly timestampMs: number\n readonly trigger?: ProcessProtocol.ProcessTrigger\n readonly dispatch?: {\n readonly moduleId: string\n readonly instanceId: string\n readonly actionId: string\n }\n readonly error?: ProcessProtocol.SerializableErrorSummary\n readonly txnSeq?: number\n readonly txnId?: string\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n | {\n readonly type: 'lifecycle:error'\n readonly moduleId?: string\n readonly instanceId?: string\n readonly cause: unknown\n readonly phase?: 'init' | 'run' | 'destroy' | 'platform'\n readonly hook?: 'initRequired' | 'start' | 'destroy' | 'suspend' | 'resume' | 'reset' | 'unknown'\n readonly taskId?: string\n readonly opSeq?: number\n readonly origin?: string\n readonly txnSeq?: number\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n | {\n readonly type: 'diagnostic'\n readonly moduleId?: string\n readonly instanceId?: string\n readonly code: string\n readonly severity: 'error' | 'warning' | 'info'\n readonly message: string\n readonly hint?: string\n readonly actionTag?: string\n readonly kind?: string\n readonly txnSeq?: number\n readonly txnId?: string\n readonly trigger?: TriggerRef\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n /**\n * trace:* events:\n * - Extension hook for runtime tracing / Playground / Alignment Lab.\n * - Only the type prefix and moduleId are standardized; payload shape is defined by higher layers (e.g. spanId/attributes in data).\n */\n | {\n readonly type: 'trace:trait:converge'\n readonly moduleId?: string\n readonly instanceId?: string\n readonly data: JsonValue\n readonly txnSeq?: number\n readonly txnId?: string\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n | {\n readonly type: 'trace:trait:check'\n readonly moduleId?: string\n readonly instanceId?: string\n readonly data: JsonValue\n readonly txnSeq?: number\n readonly txnId?: string\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n | {\n readonly type: 'trace:trait:validate'\n readonly moduleId?: string\n readonly instanceId?: string\n readonly data: JsonValue\n readonly txnSeq?: number\n readonly txnId?: string\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n | {\n readonly type: GenericTraceEventType\n readonly moduleId?: string\n readonly instanceId?: string\n readonly data?: unknown\n readonly txnSeq?: number\n readonly txnId?: string\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n\nexport interface Sink {\n readonly record: (event: Event) => Effect.Effect<void>\n}\nexport const currentDebugSinks = FiberRef.unsafeMake<ReadonlyArray<Sink>>([])\nexport const currentRuntimeLabel = FiberRef.unsafeMake<string | undefined>(undefined)\nexport const currentTxnId = FiberRef.unsafeMake<string | undefined>(undefined)\nexport const currentOpSeq = FiberRef.unsafeMake<number | undefined>(undefined)\nexport type DiagnosticsLevel = 'off' | 'light' | 'sampled' | 'full'\nexport const currentDiagnosticsLevel = FiberRef.unsafeMake<DiagnosticsLevel>('off')\n\nexport const diagnosticsLevel = (level: DiagnosticsLevel): Layer.Layer<any, never, never> =>\n Layer.fiberRefLocallyScopedWith(currentDiagnosticsLevel as any, () => level) as Layer.Layer<any, never, never>\n\nexport interface TraitConvergeDiagnosticsSamplingConfig {\n /**\n * Sample once every N txns (deterministic, based on stable txnSeq).\n * - 1: sample every txn (timing granularity similar to full, while keeping payload slim)\n */\n readonly sampleEveryN: number\n /**\n * Max number of TopK hotspots to output (recommended ≤ 3).\n */\n readonly topK: number\n}\n\nexport const currentTraitConvergeDiagnosticsSampling = FiberRef.unsafeMake<TraitConvergeDiagnosticsSamplingConfig>({\n sampleEveryN: 32,\n topK: 3,\n})\n\nexport const traitConvergeDiagnosticsSampling = (\n config: TraitConvergeDiagnosticsSamplingConfig,\n): Layer.Layer<any, never, never> =>\n Layer.fiberRefLocallyScopedWith(currentTraitConvergeDiagnosticsSampling as any, () => config) as Layer.Layer<\n any,\n never,\n never\n >\n\nexport const appendSinks = (sinks: ReadonlyArray<Sink>): Layer.Layer<any, never, never> =>\n Layer.fiberRefLocallyScopedWith(currentDebugSinks, (current) => [...current, ...sinks]) as Layer.Layer<\n any,\n never,\n never\n >\n\nexport type RuntimeDebugEventKind =\n | 'action'\n | 'state'\n | 'service'\n | 'process'\n | 'trait-computed'\n | 'trait-link'\n | 'trait-source'\n | 'lifecycle'\n | 'react-render'\n | 'devtools'\n | 'diagnostic'\n | (string & {})\n\nexport interface RuntimeDebugEventRef {\n readonly eventId: string\n readonly eventSeq: number\n readonly moduleId: string\n readonly instanceId: string\n readonly runtimeLabel?: string\n readonly txnSeq: number\n readonly txnId?: string\n /**\n * linkId:\n * - Current operation chain id (shared by boundary ops in the same chain).\n * - Created by Runtime at the boundary root and propagated via FiberRef across nested/cross-module chains.\n */\n readonly linkId?: string\n readonly timestamp: number\n readonly kind: RuntimeDebugEventKind\n readonly label: string\n readonly meta?: JsonValue\n readonly errorSummary?: SerializableErrorSummary\n readonly downgrade?: {\n readonly reason?: 'non_serializable' | 'oversized' | 'unknown'\n }\n}\n\nexport type TxnLaneEvidenceReason =\n | 'disabled'\n | 'forced_off'\n | 'forced_sync'\n | 'queued_non_urgent'\n | 'preempted_by_urgent'\n | 'budget_yield'\n | 'coalesced'\n | 'canceled'\n | 'max_lag_forced'\n | 'starvation_protection'\n\nexport type TxnLaneNonUrgentYieldReason = 'none' | 'input_pending' | 'budget_exceeded' | 'forced_frame_yield'\n\nexport type TxnLaneEvidence = {\n readonly anchor: {\n readonly moduleId: string\n readonly instanceId: string\n readonly txnSeq: number\n readonly opSeq?: number\n }\n readonly lane: 'urgent' | 'nonUrgent'\n readonly kind: string\n readonly policy: {\n readonly enabled: boolean\n readonly overrideMode?: 'forced_off' | 'forced_sync'\n readonly configScope: 'provider' | 'runtime_module' | 'runtime_default' | 'builtin'\n readonly budgetMs: number\n readonly debounceMs: number\n readonly maxLagMs: number\n readonly allowCoalesce: boolean\n readonly yieldStrategy?: 'baseline' | 'inputPending'\n readonly queueMode?: 'fifo' | 'lanes'\n }\n readonly backlog: {\n readonly pendingCount: number\n readonly ageMs?: number\n readonly coalescedCount?: number\n readonly canceledCount?: number\n }\n readonly budget?: {\n readonly budgetMs?: number\n readonly sliceDurationMs?: number\n readonly yieldCount?: number\n readonly yielded?: boolean\n readonly yieldReason?: TxnLaneNonUrgentYieldReason\n }\n readonly starvation?: {\n readonly triggered?: boolean\n readonly reason?: string\n }\n readonly reasons: ReadonlyArray<TxnLaneEvidenceReason>\n}\n\nlet nextGlobalEventSeq = 0\n\nexport const clearRuntimeDebugEventSeq = (): void => {\n nextGlobalEventSeq = 0\n}\n\nconst nextEventSeq = (): number => {\n nextGlobalEventSeq += 1\n return nextGlobalEventSeq\n}\n\nconst makeEventId = (instanceId: string, eventSeq: number): string => `${instanceId}::e${eventSeq}`\n\ntype DowngradeReason = JsonDowngradeReason | ErrorDowngradeReason\n\nconst mergeDowngrade = (\n current: DowngradeReason | undefined,\n next: DowngradeReason | undefined,\n): DowngradeReason | undefined => {\n if (!current) return next\n if (!next) return current\n if (current === 'non_serializable' || next === 'non_serializable') return 'non_serializable'\n if (current === 'oversized' || next === 'oversized') return 'oversized'\n return 'unknown'\n}\n\n// In browsers, to reduce duplicated noise caused by React StrictMode, etc.,\n// de-duplicate lifecycle:error and diagnostic events: print the same moduleId+payload only once.\nconst browserLifecycleSeen = new Set<string>()\nconst browserDiagnosticSeen = new Set<string>()\n\n// Align trace:react-render events with the most recent state:update txn (UI-only association).\nconst lastTxnByInstance = new Map<string, { readonly txnId: string; readonly txnSeq: number }>()\n\n// trace:react-render / trace:react-selector may enter the sink before state:update (reordering due to concurrency/scheduling).\n// To provide usable txn anchors in Devtools/UI, we allow a one-time backfill for refs missing txn fields.\nconst pendingTxnAlignmentByInstance = new Map<string, Array<RuntimeDebugEventRef>>()\n\nconst enqueuePendingTxnAlignment = (instanceId: string, ref: RuntimeDebugEventRef): void => {\n const list = pendingTxnAlignmentByInstance.get(instanceId)\n if (!list) {\n pendingTxnAlignmentByInstance.set(instanceId, [ref])\n return\n }\n list.push(ref)\n if (list.length > 64) {\n list.shift()\n }\n}\n\nconst backfillPendingTxnAlignment = (\n instanceId: string,\n txn: { readonly txnId: string; readonly txnSeq: number },\n): void => {\n const pending = pendingTxnAlignmentByInstance.get(instanceId)\n if (!pending || pending.length === 0) {\n pendingTxnAlignmentByInstance.delete(instanceId)\n return\n }\n\n for (const ref of pending) {\n const anyRef: any = ref as any\n if (anyRef.txnId == null) {\n anyRef.txnId = txn.txnId\n }\n if (typeof anyRef.txnSeq !== 'number' || anyRef.txnSeq <= 0) {\n anyRef.txnSeq = txn.txnSeq\n }\n }\n\n pendingTxnAlignmentByInstance.delete(instanceId)\n}\n\nconst lifecycleErrorLog = (event: Extract<Event, { readonly type: 'lifecycle:error' }>) => {\n const moduleId = event.moduleId ?? 'unknown'\n const causePretty = (() => {\n try {\n return Cause.pretty(event.cause as Cause.Cause<unknown>, {\n renderErrorCause: true,\n })\n } catch {\n try {\n return JSON.stringify(event.cause, null, 2)\n } catch {\n return String(event.cause)\n }\n }\n })()\n\n const message = `[Logix][module=${moduleId}] lifecycle:error\\n${causePretty}`\n\n return Effect.logError(message).pipe(\n Effect.annotateLogs({\n 'logix.moduleId': moduleId,\n 'logix.event': 'lifecycle:error',\n 'logix.cause': causePretty,\n }),\n )\n}\n\nconst diagnosticLog = (event: Extract<Event, { readonly type: 'diagnostic' }>) => {\n const moduleId = event.moduleId ?? 'unknown'\n const header = `[Logix][module=${moduleId}] diagnostic(${event.severity})`\n const detail = `code=${event.code} message=${event.message}${\n event.actionTag ? ` action=${event.actionTag}` : ''\n }${event.hint ? `\\nhint: ${event.hint}` : ''}`\n const msg = `${header}\\n${detail}`\n\n const base =\n event.severity === 'warning'\n ? Effect.logWarning(msg)\n : event.severity === 'info'\n ? Effect.logInfo(msg)\n : Effect.logError(msg)\n\n const annotations: Record<string, unknown> = {\n 'logix.moduleId': moduleId,\n 'logix.event': `diagnostic(${event.severity})`,\n 'logix.diagnostic.code': event.code,\n 'logix.diagnostic.message': event.message,\n }\n if (event.hint) {\n annotations['logix.diagnostic.hint'] = event.hint\n }\n if (event.actionTag) {\n annotations['logix.diagnostic.actionTag'] = event.actionTag\n }\n\n return base.pipe(Effect.annotateLogs(annotations))\n}\n\n/**\n * Default Layer composition based on FiberRef.currentDebugSinks:\n * - Uses Layer.locallyScoped to inject Debug sinks via FiberRef state.\n * - Avoids misusing FiberRef as a Context.Tag.\n */\nexport const noopLayer = Layer.locallyScoped(currentDebugSinks, [])\n\n/**\n * errorOnlyLayer:\n * - Default DebugSink implementation that only cares about lifecycle:error events.\n * - Suitable as a \"minimum observability\" layer so fatal errors don't silently disappear.\n * - Other events (module:init/destroy, action:dispatch, state:update) are not recorded by default.\n */\nconst errorOnlySink: Sink = {\n record: (event: Event) =>\n event.type === 'lifecycle:error'\n ? lifecycleErrorLog(event)\n : event.type === 'diagnostic' && event.severity !== 'info'\n ? diagnosticLog(event)\n : Effect.void,\n}\n\nexport const errorOnlyLayer = Layer.locallyScoped(currentDebugSinks, [errorOnlySink])\n\nexport const isErrorOnlyOnlySinks = (sinks: ReadonlyArray<Sink>): boolean => sinks.length === 1 && sinks[0] === errorOnlySink\n\n/**\n * consoleLayer:\n * - Full debug layer that logs all Debug events via Effect logs (logfmt / structured).\n * - Suitable as an observability layer for general environments (Node / tests).\n */\nconst consoleSink: Sink = {\n record: (event: Event) =>\n event.type === 'lifecycle:error'\n ? lifecycleErrorLog(event)\n : event.type === 'diagnostic'\n ? diagnosticLog(event)\n : Effect.logDebug({ debugEvent: event }),\n}\n\nexport const consoleLayer = Layer.locallyScoped(currentDebugSinks, [consoleSink])\n\nconst isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined'\n\n// Shared browser console rendering logic used by the default DebugSink and browserConsoleLayer.\nconst renderBrowserConsoleEvent = (event: Event): Effect.Effect<void> => {\n // trace:* events: shown as separate groups in browsers for Playground / DevTools observation.\n if (typeof (event as any).type === 'string' && (event as any).type.startsWith('trace:')) {\n const moduleId = (event as any).moduleId ?? 'unknown'\n const type = (event as any).type\n\n return Effect.sync(() => {\n // eslint-disable-next-line no-console\n console.groupCollapsed(\n '%c[Logix]%c trace %c' + moduleId + '%c ' + String(type),\n 'color:#6b7280;font-weight:bold', // tag\n 'color:#3b82f6', // label\n 'color:#9ca3af', // module id\n 'color:#6b7280', // type\n )\n // eslint-disable-next-line no-console\n console.log(event)\n // eslint-disable-next-line no-console\n console.groupEnd()\n })\n }\n\n if (event.type === 'lifecycle:error') {\n const moduleId = event.moduleId ?? 'unknown'\n const causePretty = (() => {\n try {\n return Cause.pretty(event.cause as Cause.Cause<unknown>, { renderErrorCause: true })\n } catch {\n try {\n return JSON.stringify(event.cause, null, 2)\n } catch {\n return String(event.cause)\n }\n }\n })()\n\n const key = `${moduleId}|${causePretty}`\n if (browserLifecycleSeen.has(key)) {\n return Effect.void\n }\n browserLifecycleSeen.add(key)\n\n return Effect.sync(() => {\n // eslint-disable-next-line no-console\n console.groupCollapsed(\n '%c[Logix]%c lifecycle:error %c' + moduleId,\n 'color:#ef4444;font-weight:bold', // tag\n 'color:#ef4444', // label\n 'color:#9ca3af', // module id\n )\n // eslint-disable-next-line no-console\n console.error(causePretty)\n // eslint-disable-next-line no-console\n console.groupEnd()\n })\n }\n\n if (event.type === 'diagnostic') {\n const moduleId = event.moduleId ?? 'unknown'\n const detail = `code=${event.code} message=${event.message}${\n event.actionTag ? ` action=${event.actionTag}` : ''\n }${event.hint ? `\\nhint: ${event.hint}` : ''}`\n\n const color =\n event.severity === 'warning' ? 'color:#d97706' : event.severity === 'info' ? 'color:#3b82f6' : 'color:#ef4444'\n\n const label =\n event.severity === 'warning'\n ? 'diagnostic(warning)'\n : event.severity === 'info'\n ? 'diagnostic(info)'\n : 'diagnostic(error)'\n\n const key = `${moduleId}|${event.code}|${event.message}`\n if (browserDiagnosticSeen.has(key)) {\n return Effect.void\n }\n browserDiagnosticSeen.add(key)\n\n return Effect.sync(() => {\n // eslint-disable-next-line no-console\n console.groupCollapsed(\n '%c[Logix]%c ' + label + '%c module=' + moduleId,\n 'color:#6b7280;font-weight:bold',\n color,\n 'color:#9ca3af',\n )\n if (event.severity === 'warning') {\n // eslint-disable-next-line no-console\n console.warn(detail)\n } else if (event.severity === 'info') {\n // eslint-disable-next-line no-console\n console.info(detail)\n } else {\n // eslint-disable-next-line no-console\n console.error(detail)\n }\n // eslint-disable-next-line no-console\n console.groupEnd()\n })\n }\n\n // Other events are not printed to the browser console by default to avoid being too noisy during development.\n // For internal debug events, use a custom Debug sink or use consoleLayer in Node.\n return Effect.void\n}\n\n/**\n * Browser console debug layer:\n * - In browsers, uses console.groupCollapsed + colored labels to simulate pretty logger grouping.\n * - In non-browser environments, falls back to consoleLayer's Effect logging implementation.\n */\nconst browserConsoleSink: Sink = {\n record: (event: Event) => {\n if (!isBrowser) {\n // Non-browser: fall back to consoleLayer behavior (Effect.log*).\n return event.type === 'lifecycle:error'\n ? lifecycleErrorLog(event)\n : event.type === 'diagnostic'\n ? diagnosticLog(event)\n : Effect.logDebug({ debugEvent: event })\n }\n\n return renderBrowserConsoleEvent(event)\n },\n}\n\nexport const browserConsoleLayer = Layer.locallyScoped(currentDebugSinks, [browserConsoleSink])\n\n/**\n * Browser diagnostic-only debug layer:\n * - In browsers, prints only lifecycle:error + diagnostic(warning/error) via console.groupCollapsed.\n * - Drops trace:* and other high-frequency events from the browser console (use DevtoolsHub instead).\n * - In non-browser environments, behaves like errorOnlySink (Effect.log*).\n */\nconst browserDiagnosticConsoleSink: Sink = {\n record: (event: Event) => {\n if (!isBrowser) {\n return event.type === 'lifecycle:error'\n ? lifecycleErrorLog(event)\n : event.type === 'diagnostic' && event.severity !== 'info'\n ? diagnosticLog(event)\n : Effect.void\n }\n\n return event.type === 'lifecycle:error' || (event.type === 'diagnostic' && event.severity !== 'info')\n ? renderBrowserConsoleEvent(event)\n : Effect.void\n },\n}\n\nexport const browserDiagnosticConsoleLayer = Layer.locallyScoped(currentDebugSinks, [browserDiagnosticConsoleSink])\n\n/**\n * Browser-friendly Logger layer: replaces the default logger with Effect's pretty logger (browser mode).\n * - Avoids hand-written console styles; reuses Effect's colored/grouped formatting.\n * - Safely degrades to the default logger in server environments.\n */\nexport const browserPrettyLoggerLayer = Logger.replace(\n Logger.defaultLogger,\n Logger.prettyLogger({ mode: 'browser', colors: true }),\n)\n\n/**\n * defaultLayer:\n * - Public default layer; currently equivalent to errorOnlyLayer.\n * - Records lifecycle:error only, avoiding a large volume of action/state logs by default.\n */\nexport const defaultLayer = errorOnlyLayer\n\nexport const record = (event: Event) =>\n Effect.gen(function* () {\n const sinks = yield* FiberRef.get(currentDebugSinks)\n\n // Fast path: production default installs errorOnlyLayer (sinks=1).\n // Avoid paying diagnostics FiberRef + enrichment costs for high-frequency events that are always dropped by errorOnly.\n if (isErrorOnlyOnlySinks(sinks)) {\n if (event.type === 'lifecycle:error') {\n yield* lifecycleErrorLog(event)\n return\n }\n if (event.type === 'diagnostic') {\n if (event.severity !== 'info') {\n yield* diagnosticLog(event)\n } else {\n yield* Effect.void\n }\n return\n }\n yield* Effect.void\n return\n }\n\n // Fast path: when no sinks are installed, only a small subset of events are ever surfaced.\n // Avoid paying per-event FiberRef + enrichment costs for high-frequency events like state:update.\n if (sinks.length === 0) {\n if (isBrowser) {\n if (event.type === 'lifecycle:error' || event.type === 'diagnostic') {\n yield* renderBrowserConsoleEvent(event)\n return\n }\n yield* Effect.void\n return\n }\n\n if (event.type === 'lifecycle:error') {\n yield* lifecycleErrorLog(event)\n return\n }\n if (event.type === 'diagnostic') {\n yield* diagnosticLog(event)\n return\n }\n yield* Effect.void\n return\n }\n\n const enriched = event as Event\n\n const diagnosticsLevel = yield* FiberRef.get(currentDiagnosticsLevel)\n\n // Enrich Debug.Event with basic fields (enabled only when diagnosticsLevel!=off):\n // - timestamp: for Devtools/Timeline/Overview time aggregation; avoids UI-side \"first observed time\" distortion.\n // - runtimeLabel: from FiberRef for grouping by runtime (injected only when not already provided by the event).\n let now: number | undefined\n const getNow = (): number => {\n if (now === undefined) now = Date.now()\n return now\n }\n\n // diagnostics=off: keep near-zero cost; do not add timestamp for high-frequency events (avoid extra Date.now()).\n // Low-frequency events (lifecycle:error/diagnostic) may still get timestamp for easier debugging.\n if (\n enriched.timestamp === undefined &&\n (diagnosticsLevel !== 'off' || enriched.type === 'lifecycle:error' || enriched.type === 'diagnostic')\n ) {\n ;(enriched as any).timestamp = getNow()\n }\n if (diagnosticsLevel !== 'off' && enriched.runtimeLabel === undefined) {\n const runtimeLabel = yield* FiberRef.get(currentRuntimeLabel)\n if (runtimeLabel) {\n ;(enriched as any).runtimeLabel = runtimeLabel\n }\n }\n\n if (enriched.type === 'diagnostic' && (enriched as any).txnId === undefined) {\n const txnId = yield* FiberRef.get(currentTxnId)\n if (txnId) {\n ;(enriched as any).txnId = txnId\n }\n }\n // linkId is meaningful only for EffectOp events: avoid extra FiberRef reads on high-frequency events (state:update, etc.).\n if (\n diagnosticsLevel !== 'off' &&\n (enriched as any).type === 'trace:effectop' &&\n (enriched as any).linkId === undefined\n ) {\n const linkId = yield* FiberRef.get(EffectOpCore.currentLinkId)\n if (linkId) {\n ;(enriched as any).linkId = linkId\n }\n }\n\n if (sinks.length === 1) {\n yield* sinks[0]!.record(enriched)\n return\n }\n\n yield* Effect.forEach(sinks, (sink) => sink.record(enriched), { discard: true })\n })\n\n/**\n * Normalizes internal Debug.Event into RuntimeDebugEventRef:\n * - Allows Devtools / Runtime to consume Debug events uniformly.\n * - Does not change DebugSink behavior; provides a structured view only.\n */\nexport const toRuntimeDebugEventRef = (\n event: Event,\n options?: {\n readonly diagnosticsLevel?: DiagnosticsLevel\n readonly eventSeq?: number\n readonly resolveConvergeStaticIr?: (staticIrDigest: string) => ConvergeStaticIrExport | undefined\n readonly onMetaProjection?: (projection: {\n readonly stats: JsonValueProjectionStats\n readonly downgrade?: JsonDowngradeReason\n }) => void\n },\n): RuntimeDebugEventRef | undefined => {\n const diagnosticsLevel = options?.diagnosticsLevel ?? 'full'\n if (diagnosticsLevel === 'off') {\n return undefined\n }\n\n const isLightLike = diagnosticsLevel === 'light' || diagnosticsLevel === 'sampled'\n\n const timestamp =\n typeof event.timestamp === 'number' && Number.isFinite(event.timestamp) ? event.timestamp : Date.now()\n\n const moduleIdRaw = (event as any).moduleId\n const moduleId = typeof moduleIdRaw === 'string' && moduleIdRaw.length > 0 ? moduleIdRaw : 'unknown'\n\n const instanceIdRaw = (event as any).instanceId\n const instanceId = typeof instanceIdRaw === 'string' && instanceIdRaw.length > 0 ? instanceIdRaw : 'unknown'\n\n const runtimeLabelRaw = (event as any).runtimeLabel\n const runtimeLabel = typeof runtimeLabelRaw === 'string' && runtimeLabelRaw.length > 0 ? runtimeLabelRaw : undefined\n\n const txnSeqRaw = (event as any).txnSeq\n const txnSeq =\n typeof txnSeqRaw === 'number' && Number.isFinite(txnSeqRaw) && txnSeqRaw >= 0 ? Math.floor(txnSeqRaw) : 0\n\n const txnIdRaw = (event as any).txnId\n const txnId =\n typeof txnIdRaw === 'string' && txnIdRaw.length > 0\n ? txnIdRaw\n : txnSeq > 0\n ? `${instanceId}::t${txnSeq}`\n : undefined\n\n const linkId = (() => {\n const linkIdRaw = (event as any).linkId\n if (typeof linkIdRaw === 'string' && linkIdRaw.length > 0) return linkIdRaw\n\n // trace:*: allow fallback extraction from data.meta.linkId (avoid UI diving into deep meta).\n if (typeof (event as any).type !== 'string' || !(event as any).type.startsWith('trace:')) {\n return undefined\n }\n\n const data: any = (event as any).data\n const meta: any = data?.meta\n const linkIdFromMeta = meta?.linkId\n if (typeof linkIdFromMeta === 'string' && linkIdFromMeta.length > 0) return linkIdFromMeta\n\n return undefined\n })()\n\n const eventSeqRaw = options?.eventSeq\n const eventSeq =\n typeof eventSeqRaw === 'number' && Number.isFinite(eventSeqRaw) && eventSeqRaw > 0\n ? Math.floor(eventSeqRaw)\n : nextEventSeq()\n const eventId = makeEventId(instanceId, eventSeq)\n\n const base = {\n eventId,\n eventSeq,\n moduleId,\n instanceId,\n runtimeLabel,\n txnSeq,\n txnId,\n linkId,\n timestamp,\n } as const\n\n let downgrade: DowngradeReason | undefined\n\n const withDowngrade = (ref: Omit<RuntimeDebugEventRef, 'downgrade'>): RuntimeDebugEventRef => {\n if (!downgrade) return ref\n return { ...ref, downgrade: { reason: downgrade } }\n }\n\n switch (event.type) {\n case 'module:init':\n return withDowngrade({\n ...base,\n kind: 'lifecycle',\n label: 'module:init',\n })\n case 'module:destroy':\n return withDowngrade({\n ...base,\n kind: 'lifecycle',\n label: 'module:destroy',\n })\n case 'lifecycle:phase': {\n const e = event as Extract<Event, { readonly type: 'lifecycle:phase' }>\n const metaInput = isLightLike\n ? { type: 'lifecycle:phase', phase: e.phase, name: e.name }\n : { type: 'lifecycle:phase', phase: e.phase, name: e.name, payload: e.payload }\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n return withDowngrade({\n ...base,\n kind: 'lifecycle',\n label: e.name,\n meta: metaProjection.value,\n })\n }\n case 'action:dispatch': {\n const action: any = (event as any).action\n const actionTagRaw = (event as any).actionTag\n const tag = typeof actionTagRaw === 'string' && actionTagRaw.length > 0 ? actionTagRaw : (action?._tag ?? action?.type)\n const label = String(tag ?? 'action:dispatch')\n const labelNormalized = label.length > 0 ? label : 'unknown'\n const unknownAction = (event as any).unknownAction === true ? true : undefined\n const metaInput = isLightLike\n ? { actionTag: labelNormalized, ...(unknownAction ? { unknownAction: true } : {}) }\n : { action, ...(unknownAction ? { unknownAction: true } : {}) }\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n if (unknownAction) {\n downgrade = mergeDowngrade(downgrade, 'unknown')\n }\n return withDowngrade({\n ...base,\n kind: 'action',\n label: labelNormalized,\n meta: metaProjection.value,\n })\n }\n case 'state:update': {\n const e = event as Extract<Event, { readonly type: 'state:update' }>\n\n const resolveDirtySetRootPaths = (): ReadonlyArray<JsonValue> | undefined => {\n const resolve = options?.resolveConvergeStaticIr\n if (!resolve) return undefined\n\n const digest = e.staticIrDigest\n if (typeof digest !== 'string' || digest.length === 0) return undefined\n\n const dirtySet = e.dirtySet as any\n if (!dirtySet || typeof dirtySet !== 'object' || Array.isArray(dirtySet)) return undefined\n\n const rootIds = dirtySet.rootIds\n if (!Array.isArray(rootIds) || rootIds.length === 0) return undefined\n\n const ir = resolve(digest) as ConvergeStaticIrExport | undefined\n const fieldPaths = (ir as any)?.fieldPaths as unknown\n if (!Array.isArray(fieldPaths) || fieldPaths.length === 0) return undefined\n\n const out: Array<JsonValue> = []\n for (const rawId of rootIds) {\n if (typeof rawId !== 'number' || !Number.isFinite(rawId)) continue\n const id = Math.floor(rawId)\n if (id < 0) continue\n const path = (fieldPaths as any)[id] as unknown\n if (!Array.isArray(path) || path.length === 0) continue\n if (!path.every((seg) => typeof seg === 'string' && seg.length > 0)) continue\n out.push(path as any)\n }\n\n return out.length > 0 ? out : undefined\n }\n\n const dirtySetWithRootPaths = (() => {\n const rootPaths = resolveDirtySetRootPaths()\n if (!rootPaths) return e.dirtySet\n const dirtySet = e.dirtySet as any\n if (!dirtySet || typeof dirtySet !== 'object' || Array.isArray(dirtySet)) return e.dirtySet\n return { ...dirtySet, rootPaths }\n })()\n\n const metaInput = isLightLike\n ? {\n state: e.state,\n dirtySet: dirtySetWithRootPaths,\n patchCount: e.patchCount,\n patchesTruncated: e.patchesTruncated,\n patchesTruncatedReason: e.patchesTruncatedReason,\n staticIrDigest: e.staticIrDigest,\n commitMode: e.commitMode,\n priority: e.priority,\n originKind: e.originKind,\n originName: e.originName,\n }\n : {\n state: e.state,\n dirtySet: dirtySetWithRootPaths,\n patchCount: e.patchCount,\n patchesTruncated: e.patchesTruncated,\n patchesTruncatedReason: e.patchesTruncatedReason,\n staticIrDigest: e.staticIrDigest,\n commitMode: e.commitMode,\n priority: e.priority,\n originKind: e.originKind,\n originName: e.originName,\n traitSummary: e.traitSummary,\n replayEvent: e.replayEvent,\n }\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n if (txnId) {\n lastTxnByInstance.set(instanceId, { txnId, txnSeq })\n backfillPendingTxnAlignment(instanceId, { txnId, txnSeq })\n }\n return withDowngrade({\n ...base,\n kind: 'state',\n label: 'state:update',\n meta: metaProjection.value,\n })\n }\n case 'process:start':\n case 'process:stop':\n case 'process:restart':\n case 'process:trigger':\n case 'process:dispatch':\n case 'process:error': {\n const e = event as Extract<\n Event,\n {\n readonly type:\n | 'process:start'\n | 'process:stop'\n | 'process:restart'\n | 'process:trigger'\n | 'process:dispatch'\n | 'process:error'\n }\n >\n\n const ts2 = typeof e.timestampMs === 'number' && Number.isFinite(e.timestampMs) ? e.timestampMs : timestamp\n\n const metaInput = {\n identity: e.identity,\n severity: e.severity,\n eventSeq: e.eventSeq,\n timestampMs: e.timestampMs,\n trigger: e.trigger,\n dispatch: e.dispatch,\n error: e.error,\n }\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n const errorSummary =\n e.type === 'process:error' || e.type === 'process:restart'\n ? (e.error as any as SerializableErrorSummary | undefined)\n : undefined\n\n return withDowngrade({\n ...base,\n timestamp: ts2,\n kind: 'process',\n label: e.type,\n meta: metaProjection.value,\n errorSummary,\n })\n }\n case 'lifecycle:error': {\n const e = event as Extract<Event, { readonly type: 'lifecycle:error' }>\n const summary = toSerializableErrorSummary(e.cause)\n downgrade = mergeDowngrade(downgrade, summary.downgrade)\n const metaInput = isLightLike\n ? { type: 'lifecycle:error', phase: e.phase, name: e.hook }\n : {\n type: 'lifecycle:error',\n phase: e.phase,\n name: e.hook,\n hook: e.hook,\n taskId: e.taskId,\n origin: e.origin,\n txnSeq: e.txnSeq,\n opSeq: e.opSeq,\n }\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n return withDowngrade({\n ...base,\n kind: 'lifecycle',\n label: 'lifecycle:error',\n meta: metaProjection.value,\n errorSummary: summary.errorSummary,\n })\n }\n case 'diagnostic': {\n const e = event as Extract<Event, { readonly type: 'diagnostic' }>\n const metaInput = {\n code: e.code,\n severity: e.severity,\n message: e.message,\n hint: e.hint,\n actionTag: e.actionTag,\n kind: e.kind,\n trigger: e.trigger,\n }\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n return withDowngrade({\n ...base,\n kind: 'diagnostic',\n label: e.code,\n meta: metaProjection.value,\n })\n }\n default: {\n if (typeof event.type !== 'string' || !event.type.startsWith('trace:')) {\n return undefined\n }\n\n // trace:txn-lane: slim evidence for Txn Lanes (lane/backlog/reasons), used for Devtools summary and offline export.\n if (event.type === 'trace:txn-lane') {\n const data: any = (event as any).data\n const evidence = data?.evidence ?? data\n\n const metaProjection = projectJsonValue(evidence)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n const label =\n typeof evidence?.kind === 'string' && evidence.kind.length > 0 ? String(evidence.kind) : 'txn-lane'\n\n return withDowngrade({\n ...base,\n kind: 'txn-lane',\n label,\n meta: metaProjection.value,\n })\n }\n\n // trace:react-render / trace:react-selector: keep slim meta only (field trimming is handled by JsonValue projection).\n if (event.type === 'trace:react-render' || event.type === 'trace:react-selector') {\n const data: any = (event as any).data\n const metaProjection = projectJsonValue(\n isLightLike\n ? {\n componentLabel: data?.componentLabel,\n selectorKey: data?.selectorKey,\n fieldPaths: data?.fieldPaths,\n selectorId: data?.selectorId,\n lane: data?.lane,\n producer: data?.producer,\n fallbackReason: data?.fallbackReason,\n readsDigest: data?.readsDigest,\n equalsKind: data?.equalsKind,\n strictModePhase: data?.strictModePhase,\n }\n : {\n componentLabel: data?.componentLabel,\n selectorKey: data?.selectorKey,\n fieldPaths: data?.fieldPaths,\n selectorId: data?.selectorId,\n lane: data?.lane,\n producer: data?.producer,\n fallbackReason: data?.fallbackReason,\n readsDigest: data?.readsDigest,\n equalsKind: data?.equalsKind,\n strictModePhase: data?.strictModePhase,\n meta: data?.meta,\n },\n )\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n const label =\n typeof data?.componentLabel === 'string' && data.componentLabel.length > 0\n ? data.componentLabel\n : event.type === 'trace:react-selector'\n ? 'react-selector'\n : 'react-render'\n const last = lastTxnByInstance.get(instanceId)\n const txnSeqFromMeta =\n typeof data?.meta?.txnSeq === 'number' && Number.isFinite(data.meta.txnSeq) && data.meta.txnSeq >= 0\n ? Math.floor(data.meta.txnSeq)\n : undefined\n const txnIdFromMeta =\n typeof data?.meta?.txnId === 'string' && data.meta.txnId.length > 0 ? data.meta.txnId : undefined\n const txnIdAligned = txnIdFromMeta ?? base.txnId ?? last?.txnId\n const txnSeqAligned = txnSeqFromMeta ?? (base.txnSeq > 0 ? base.txnSeq : (last?.txnSeq ?? base.txnSeq))\n const ref = withDowngrade({\n ...base,\n txnId: txnIdAligned,\n txnSeq: txnSeqAligned,\n kind: event.type === 'trace:react-selector' ? 'react-selector' : 'react-render',\n label,\n meta: metaProjection.value,\n })\n\n if (instanceId !== 'unknown' && (ref.txnId == null || ref.txnSeq <= 0)) {\n enqueuePendingTxnAlignment(instanceId, ref)\n }\n\n return ref\n }\n\n // trace:selector:eval: SelectorGraph evaluation evidence within commit (used for txn→selector→render causal chain).\n if (event.type === 'trace:selector:eval') {\n const data: any = (event as any).data\n const metaInput = {\n selectorId: data?.selectorId,\n lane: data?.lane,\n producer: data?.producer,\n fallbackReason: data?.fallbackReason,\n readsDigest: data?.readsDigest,\n equalsKind: data?.equalsKind,\n changed: data?.changed,\n evalMs: data?.evalMs,\n }\n\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n return withDowngrade({\n ...base,\n kind: 'devtools',\n label: event.type,\n meta: metaProjection.value,\n })\n }\n\n // trace:exec-vm: Exec VM hit/miss evidence (049). In light tier we keep minimal summary fields.\n if (event.type === 'trace:exec-vm') {\n const data: any = (event as any).data\n const metaInput = {\n version: data?.version,\n stage: data?.stage,\n hit: data?.hit,\n reasonCode: data?.reasonCode ?? data?.reason,\n reasonDetail: data?.reasonDetail,\n execIrVersion: data?.execIrVersion,\n execIrHash: data?.execIrHash,\n serviceId: data?.serviceId,\n implId: data?.implId,\n }\n\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n return withDowngrade({\n ...base,\n kind: 'devtools',\n label: event.type,\n meta: metaProjection.value,\n })\n }\n\n // trace:trait:converge: converge evidence must be exportable (JsonValue hard gate) and trims heavy fields in light tier.\n if (event.type === 'trace:trait:converge') {\n const resolveDirtyRootPaths = (args: {\n readonly staticIrDigest: unknown\n readonly rootIds: unknown\n }): ReadonlyArray<JsonValue> | undefined => {\n const resolve = options?.resolveConvergeStaticIr\n if (!resolve) return undefined\n const digest = args.staticIrDigest\n if (typeof digest !== 'string' || digest.length === 0) return undefined\n\n const rootIds = args.rootIds\n if (!Array.isArray(rootIds) || rootIds.length === 0) return undefined\n\n const ir = resolve(digest) as ConvergeStaticIrExport | undefined\n const fieldPaths = (ir as any)?.fieldPaths as unknown\n if (!Array.isArray(fieldPaths) || fieldPaths.length === 0) return undefined\n\n const out: Array<JsonValue> = []\n for (const id of rootIds) {\n if (typeof id !== 'number' || !Number.isFinite(id)) continue\n const idx = Math.floor(id)\n if (idx < 0 || idx >= fieldPaths.length) continue\n const path = fieldPaths[idx]\n if (Array.isArray(path)) {\n out.push(path as any)\n }\n }\n\n return out.length > 0 ? out : undefined\n }\n\n const enrichDirtyRootPaths = (value: JsonValue): JsonValue => {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return value\n\n const anyValue = value as any\n const dirty = anyValue.dirty\n if (!dirty || typeof dirty !== 'object' || Array.isArray(dirty)) return value\n\n const dirtyRootPaths = resolveDirtyRootPaths({\n staticIrDigest: anyValue.staticIrDigest,\n rootIds: dirty?.rootIds,\n })\n if (!dirtyRootPaths) return value\n\n return {\n ...anyValue,\n dirty: {\n ...(dirty as any),\n rootPaths: dirtyRootPaths,\n },\n } as JsonValue\n }\n\n const stripHeavyLight = (value: JsonValue): JsonValue => {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return value\n\n const anyValue = value as any\n const dirty = anyValue.dirty\n const dirtyRootPaths = resolveDirtyRootPaths({\n staticIrDigest: anyValue.staticIrDigest,\n rootIds: dirty?.rootIds,\n })\n const dirtySlim =\n dirty && typeof dirty === 'object' && !Array.isArray(dirty)\n ? {\n dirtyAll: (dirty as any).dirtyAll,\n ...(typeof (dirty as any).reason === 'string' ? { reason: (dirty as any).reason } : null),\n ...(Array.isArray((dirty as any).rootIds) ? { rootIds: (dirty as any).rootIds } : null),\n ...(typeof (dirty as any).rootIdsTruncated === 'boolean'\n ? { rootIdsTruncated: (dirty as any).rootIdsTruncated }\n : null),\n ...(dirtyRootPaths ? { rootPaths: dirtyRootPaths } : null),\n }\n : undefined\n\n const { top3, dirtyRoots, ...rest } = anyValue\n return (dirtySlim ? { ...rest, dirty: dirtySlim } : rest) as JsonValue\n }\n\n const stripHeavySampled = (value: JsonValue): JsonValue => {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return value\n\n const anyValue = value as any\n const dirty = anyValue.dirty\n const dirtySlim =\n dirty && typeof dirty === 'object' && !Array.isArray(dirty)\n ? {\n dirtyAll: (dirty as any).dirtyAll,\n ...(typeof (dirty as any).reason === 'string' ? { reason: (dirty as any).reason } : null),\n }\n : undefined\n\n const { dirtyRoots, ...rest } = anyValue\n return (dirtySlim ? { ...rest, dirty: dirtySlim } : rest) as JsonValue\n }\n\n const data = (event as Extract<Event, { readonly type: 'trace:trait:converge' }>).data\n const metaInput =\n diagnosticsLevel === 'light'\n ? stripHeavyLight(data)\n : diagnosticsLevel === 'sampled'\n ? stripHeavySampled(data)\n : enrichDirtyRootPaths(data)\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n return withDowngrade({\n ...base,\n kind: 'trait:converge',\n label: 'trait:converge',\n meta: metaProjection.value,\n })\n }\n\n // trace:trait:check: validation diagnostics must be exportable and stay slim in light tier (keep key fields).\n if (event.type === 'trace:trait:check') {\n const stripHeavy = (value: JsonValue): JsonValue => {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return value\n const anyValue = value as any\n const degraded = anyValue.degraded\n const degradedSlim =\n degraded && typeof degraded === 'object' && !Array.isArray(degraded)\n ? { kind: (degraded as any).kind }\n : undefined\n\n const { degraded: _degraded, ...rest } = anyValue\n return (degradedSlim ? { ...rest, degraded: degradedSlim } : rest) as JsonValue\n }\n\n const data = (event as Extract<Event, { readonly type: 'trace:trait:check' }>).data\n const metaInput = isLightLike ? stripHeavy(data) : data\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n return withDowngrade({\n ...base,\n kind: 'trait:check',\n label: 'trait:check',\n meta: metaProjection.value,\n })\n }\n\n // trace:trait:validate: validation decision summary must be exportable and slim in light tier (no heavy fields by default).\n if (event.type === 'trace:trait:validate') {\n const data = (event as Extract<Event, { readonly type: 'trace:trait:validate' }>).data\n const metaProjection = projectJsonValue(data)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n return withDowngrade({\n ...base,\n kind: 'trait:validate',\n label: 'trait:validate',\n meta: metaProjection.value,\n })\n }\n\n // trace:module:traits: final traits snapshot must be exportable and slim in light tier (digest/count).\n if (event.type === 'trace:module:traits') {\n const data: any = (event as any).data\n const metaInput = isLightLike\n ? {\n digest: data?.digest,\n count: data?.count,\n }\n : {\n digest: data?.digest,\n count: data?.count,\n traits: data?.traits,\n provenanceIndex: data?.provenanceIndex,\n }\n\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n return withDowngrade({\n ...base,\n kind: 'devtools',\n label: event.type,\n meta: metaProjection.value,\n })\n }\n\n // trace:module:traits:conflict: conflict details must be exportable; avoid relying on truncated lifecycle:error messages.\n if (event.type === 'trace:module:traits:conflict') {\n const data: any = (event as any).data\n const metaInput = isLightLike\n ? {\n conflictCount: data?.conflictCount,\n traitIds: data?.traitIds,\n }\n : {\n conflictCount: data?.conflictCount,\n conflicts: data?.conflicts,\n }\n\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n return withDowngrade({\n ...base,\n kind: 'devtools',\n label: event.type,\n meta: metaProjection.value,\n })\n }\n\n // trace:module:descriptor: keep key anchors even in light tier (avoid data being fully trimmed).\n if (event.type === 'trace:module:descriptor') {\n const data: any = (event as any).data\n const metaInput = isLightLike\n ? {\n id: data?.id,\n traits: data?.traits,\n source: data?.source,\n }\n : { data }\n\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n return withDowngrade({\n ...base,\n kind: 'devtools',\n label: event.type,\n meta: metaProjection.value,\n })\n }\n\n // trace:effectop: keep slim op meta and prefer EffectOp.meta.moduleId when present.\n if (event.type === 'trace:effectop') {\n const data: any = (event as any).data\n const opMeta: any = data?.meta\n const opKind = (data?.kind ?? 'service') as RuntimeDebugEventKind\n const label = typeof data?.name === 'string' ? data.name : 'effectop'\n const moduleId2 = typeof opMeta?.moduleId === 'string' ? opMeta.moduleId : moduleId\n const txnId2 = typeof opMeta?.txnId === 'string' && opMeta.txnId.length > 0 ? opMeta.txnId : base.txnId\n const txnSeq2 =\n typeof opMeta?.txnSeq === 'number' && Number.isFinite(opMeta.txnSeq) && opMeta.txnSeq >= 0\n ? Math.floor(opMeta.txnSeq)\n : base.txnSeq\n\n const metaInput = isLightLike\n ? {\n id: data?.id,\n kind: data?.kind,\n name: data?.name,\n meta: opMeta,\n }\n : {\n id: data?.id,\n kind: data?.kind,\n name: data?.name,\n payload: data?.payload,\n meta: opMeta,\n }\n\n const metaProjection = projectJsonValue(metaInput)\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n\n return withDowngrade({\n ...base,\n moduleId: moduleId2,\n txnId: txnId2,\n txnSeq: txnSeq2,\n kind: opKind,\n label,\n meta: metaProjection.value,\n })\n }\n\n // Other trace:* events: categorize as devtools and trim meta by tier.\n const metaProjection = projectJsonValue(\n isLightLike\n ? {\n data: undefined,\n }\n : {\n data: (event as any).data,\n },\n )\n options?.onMetaProjection?.({\n stats: metaProjection.stats,\n downgrade: metaProjection.downgrade,\n })\n downgrade = mergeDowngrade(downgrade, metaProjection.downgrade)\n return withDowngrade({\n ...base,\n kind: 'devtools',\n label: event.type,\n meta: metaProjection.value,\n })\n }\n }\n}\n","export type JsonValue =\n | null\n | boolean\n | number\n | string\n | ReadonlyArray<JsonValue>\n | { readonly [key: string]: JsonValue }\n\nexport type DowngradeReason = 'non_serializable' | 'oversized' | 'unknown'\n\nexport const isJsonValue = (input: unknown): input is JsonValue => {\n const seen = new WeakSet<object>()\n\n const loop = (value: unknown, depth: number): value is JsonValue => {\n if (depth > 64) return false\n if (value === null) return true\n\n switch (typeof value) {\n case 'string':\n case 'boolean':\n return true\n case 'number':\n return Number.isFinite(value)\n case 'object': {\n if (Array.isArray(value)) {\n if (seen.has(value)) return false\n seen.add(value)\n for (const item of value) {\n if (!loop(item, depth + 1)) return false\n }\n return true\n }\n\n if (!isPlainRecord(value)) return false\n if (seen.has(value)) return false\n seen.add(value)\n\n for (const v of Object.values(value)) {\n if (!loop(v, depth + 1)) return false\n }\n\n return true\n }\n default:\n return false\n }\n }\n\n return loop(input, 0)\n}\n\nexport interface JsonValueProjectionStats {\n readonly dropped: number\n readonly oversized: number\n readonly nonSerializable: number\n}\n\nexport interface JsonValueProjection {\n readonly value: JsonValue\n readonly stats: JsonValueProjectionStats\n readonly downgrade?: DowngradeReason\n}\n\nexport interface JsonValueProjectOptions {\n readonly maxDepth?: number\n readonly maxObjectKeys?: number\n readonly maxArrayLength?: number\n readonly maxStringLength?: number\n readonly maxJsonBytes?: number\n readonly oversizedPreviewBytes?: number\n}\n\nconst defaultOptions: Required<JsonValueProjectOptions> = {\n maxDepth: 6,\n maxObjectKeys: 32,\n maxArrayLength: 32,\n maxStringLength: 256,\n maxJsonBytes: 4 * 1024,\n oversizedPreviewBytes: 256,\n}\n\nconst truncateString = (value: string, maxLen: number, stats: MutableStats): string => {\n if (value.length <= maxLen) return value\n stats.oversized += 1\n return value.slice(0, maxLen)\n}\n\ntype MutableStats = {\n dropped: number\n oversized: number\n nonSerializable: number\n}\n\nconst mergeDowngrade = (current: DowngradeReason | undefined, next: DowngradeReason): DowngradeReason => {\n if (!current) return next\n if (current === 'non_serializable' || next === 'non_serializable') return 'non_serializable'\n if (current === 'oversized' || next === 'oversized') return 'oversized'\n return 'unknown'\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n if (typeof value !== 'object' || value === null) return false\n const proto = Object.getPrototypeOf(value)\n return proto === Object.prototype || proto === null\n}\n\nconst asNumber = (value: number, stats: MutableStats): JsonValue => {\n if (Number.isFinite(value)) return value\n stats.nonSerializable += 1\n return String(value)\n}\n\nconst toJsonValueInternal = (\n input: unknown,\n options: Required<JsonValueProjectOptions>,\n stats: MutableStats,\n seen: WeakSet<object>,\n depth: number,\n): JsonValue => {\n if (input === null) return null\n\n switch (typeof input) {\n case 'string':\n return truncateString(input, options.maxStringLength, stats)\n case 'number':\n return asNumber(input, stats)\n case 'boolean':\n return input\n case 'bigint':\n stats.nonSerializable += 1\n return truncateString(input.toString(), options.maxStringLength, stats)\n case 'symbol':\n stats.nonSerializable += 1\n return truncateString(input.toString(), options.maxStringLength, stats)\n case 'function':\n stats.nonSerializable += 1\n return '[Function]'\n case 'undefined':\n stats.dropped += 1\n return null\n }\n\n // object\n if (depth >= options.maxDepth) {\n stats.oversized += 1\n return '[Truncated]'\n }\n\n if (input instanceof Date) {\n return input.toISOString()\n }\n\n if (input instanceof Error) {\n stats.nonSerializable += 1\n return {\n name: truncateString(input.name, options.maxStringLength, stats),\n message: truncateString(input.message, options.maxStringLength, stats),\n }\n }\n\n if (typeof input === 'object') {\n if (seen.has(input)) {\n stats.nonSerializable += 1\n return '[Circular]'\n }\n seen.add(input)\n }\n\n if (Array.isArray(input)) {\n const out: Array<JsonValue> = []\n const limit = Math.min(input.length, options.maxArrayLength)\n for (let i = 0; i < limit; i++) {\n out.push(toJsonValueInternal(input[i], options, stats, seen, depth + 1))\n }\n if (input.length > limit) {\n stats.oversized += 1\n out.push(`[...${input.length - limit} more]`)\n }\n return out\n }\n\n if (!isPlainRecord(input)) {\n stats.nonSerializable += 1\n return truncateString(String(input), options.maxStringLength, stats)\n }\n\n const entries = Object.entries(input)\n const limit = Math.min(entries.length, options.maxObjectKeys)\n const out: Record<string, JsonValue> = {}\n\n for (let i = 0; i < limit; i++) {\n const [rawKey, rawValue] = entries[i]!\n const key = truncateString(rawKey, options.maxStringLength, stats)\n if (rawValue === undefined) {\n stats.dropped += 1\n continue\n }\n out[key] = toJsonValueInternal(rawValue, options, stats, seen, depth + 1)\n }\n\n if (entries.length > limit) {\n stats.oversized += 1\n out.__truncatedKeys = entries.length - limit\n }\n\n return out\n}\n\nexport const projectJsonValue = (input: unknown, options?: JsonValueProjectOptions): JsonValueProjection => {\n const resolved: Required<JsonValueProjectOptions> = { ...defaultOptions, ...(options ?? {}) }\n const stats: MutableStats = { dropped: 0, oversized: 0, nonSerializable: 0 }\n const seen = new WeakSet<object>()\n\n let downgrade: DowngradeReason | undefined\n const value = toJsonValueInternal(input, resolved, stats, seen, 0)\n\n if (stats.nonSerializable > 0) {\n downgrade = mergeDowngrade(downgrade, 'non_serializable')\n }\n if (stats.oversized > 0) {\n downgrade = mergeDowngrade(downgrade, 'oversized')\n }\n\n // Hard gate: ensure JSON.stringify never throws and respect the max byte budget.\n try {\n const json = JSON.stringify(value)\n if (json.length > resolved.maxJsonBytes) {\n downgrade = mergeDowngrade(downgrade, 'oversized')\n const preview = json.slice(0, Math.min(resolved.oversizedPreviewBytes, resolved.maxJsonBytes))\n return {\n value: {\n _tag: 'oversized',\n bytes: json.length,\n preview,\n },\n stats: {\n dropped: stats.dropped,\n oversized: stats.oversized + 1,\n nonSerializable: stats.nonSerializable,\n },\n downgrade,\n }\n }\n } catch {\n downgrade = mergeDowngrade(downgrade, 'non_serializable')\n return {\n value: '[Unserializable]',\n stats: {\n dropped: stats.dropped,\n oversized: stats.oversized,\n nonSerializable: stats.nonSerializable + 1,\n },\n downgrade,\n }\n }\n\n return {\n value,\n stats: {\n dropped: stats.dropped,\n oversized: stats.oversized,\n nonSerializable: stats.nonSerializable,\n },\n downgrade,\n }\n}\n","import { Cause } from 'effect'\n\nexport type DowngradeReason = 'non_serializable' | 'oversized' | 'unknown'\n\nexport interface SerializableErrorSummary {\n readonly message: string\n readonly name?: string\n readonly code?: string\n readonly hint?: string\n}\n\nexport interface ErrorSummaryResult {\n readonly errorSummary: SerializableErrorSummary\n readonly downgrade?: DowngradeReason\n}\n\nconst truncate = (value: string, maxLen: number): { readonly value: string; readonly truncated: boolean } => {\n if (value.length <= maxLen) return { value, truncated: false }\n return { value: value.slice(0, maxLen), truncated: true }\n}\n\nconst safeStringify = (value: unknown): { readonly ok: true; readonly json: string } | { readonly ok: false } => {\n try {\n return { ok: true, json: JSON.stringify(value) }\n } catch {\n return { ok: false }\n }\n}\n\nconst getMessageFromUnknown = (cause: unknown): string => {\n if (typeof cause === 'string') return cause\n if (typeof cause === 'number' || typeof cause === 'boolean' || typeof cause === 'bigint') return String(cause)\n if (cause instanceof Error) return cause.message || cause.name || 'Error'\n if (cause && typeof cause === 'object' && 'message' in (cause as any) && typeof (cause as any).message === 'string') {\n return (cause as any).message as string\n }\n\n // Try Effect Cause pretty (best-effort). This may include more details than needed,\n // so callers MUST still treat it as an untrusted/oversized string and truncate.\n try {\n const pretty = Cause.pretty(cause as Cause.Cause<unknown>, { renderErrorCause: true })\n if (typeof pretty === 'string' && pretty.length > 0) return pretty\n } catch {\n // ignore\n }\n\n return 'Unknown error'\n}\n\nexport const toSerializableErrorSummary = (\n cause: unknown,\n options?: {\n readonly maxMessageLength?: number\n },\n): ErrorSummaryResult => {\n const maxMessageLength = options?.maxMessageLength ?? 256\n\n const messageRaw = getMessageFromUnknown(cause)\n const { value: message, truncated } = truncate(messageRaw, maxMessageLength)\n\n const summary: { message: string; name?: string; code?: string; hint?: string } = {\n message,\n }\n\n if (cause instanceof Error) {\n if (cause.name && cause.name !== 'Error') summary.name = cause.name\n const anyCause = cause as any\n if (typeof anyCause.code === 'string' && anyCause.code.length > 0) summary.code = anyCause.code\n else if (typeof anyCause.code === 'number' && Number.isFinite(anyCause.code)) summary.code = String(anyCause.code)\n if (typeof anyCause.hint === 'string' && anyCause.hint.length > 0) summary.hint = anyCause.hint\n return {\n errorSummary: summary,\n downgrade: truncated ? 'oversized' : undefined,\n }\n }\n\n if (cause && typeof cause === 'object') {\n const anyCause = cause as any\n if (typeof anyCause.name === 'string' && anyCause.name.length > 0) summary.name = anyCause.name\n if (typeof anyCause.code === 'string' && anyCause.code.length > 0) summary.code = anyCause.code\n if (typeof anyCause.hint === 'string' && anyCause.hint.length > 0) summary.hint = anyCause.hint\n }\n\n // If the original cause isn't JSON-serializable, mark it explicitly.\n const stringifyResult = safeStringify(cause)\n if (!stringifyResult.ok) {\n return {\n errorSummary: summary,\n downgrade: 'non_serializable',\n }\n }\n\n if (truncated) {\n return {\n errorSummary: summary,\n downgrade: 'oversized',\n }\n }\n\n if (message === 'Unknown error') {\n return {\n errorSummary: summary,\n downgrade: 'unknown',\n }\n }\n\n return { errorSummary: summary }\n}\n","// EffectOp core model and middleware composition logic.\n// For higher-level Runtime / Devtools integration, see:\n// specs/000-module-traits-runtime/references/effectop-and-middleware.md\n\nimport { Context, Effect, FiberRef } from 'effect'\n\n/**\n * currentLinkId:\n * - Stores the current operation chain id (linkId) in a FiberRef.\n * - Used to correlate multiple boundary ops within the same chain (can be shared across modules via the same FiberRef).\n */\nexport const currentLinkId = FiberRef.unsafeMake<string | undefined>(undefined)\n\n/**\n * OperationPolicy:\n * - Local policy markers (intent only; no rule logic attached).\n *\n * Constraints (enforced by Runtime/middleware together):\n * - Only observation-only capabilities (Observer) may be disabled; global guards must not be disabled.\n */\nexport interface OperationPolicy {\n readonly disableObservers?: boolean\n}\n\n/**\n * OperationRejected:\n * - Unified failure result when a guard rejects execution.\n * - Semantics: explicit failure with no business side effects (rejection must happen before user code executes).\n */\nexport interface OperationRejected {\n readonly _tag: 'OperationRejected'\n readonly message: string\n readonly kind?: EffectOp['kind']\n readonly name?: string\n readonly linkId?: string\n readonly details?: unknown\n}\n\n/**\n * OperationError:\n * - Any boundary operation executed via EffectOp may be explicitly rejected by Guard middleware.\n * - Therefore, the middleware error channel must allow OperationRejected to be added.\n */\nexport type OperationError<E> = E | OperationRejected\n\nexport const makeOperationRejected = (params: {\n readonly message: string\n readonly kind?: EffectOp['kind']\n readonly name?: string\n readonly linkId?: string\n readonly details?: unknown\n}): OperationRejected => ({\n _tag: 'OperationRejected',\n message: params.message,\n kind: params.kind,\n name: params.name,\n linkId: params.linkId,\n details: params.details,\n})\n\n/**\n * EffectOp: a unified representation of an Effect execution at an \"observable boundary\".\n *\n * - Out / Err / Env are the generic parameters of the underlying Effect.\n * - meta carries structured context needed by Devtools / Middleware.\n */\nexport interface EffectOp<Out = unknown, Err = unknown, Env = unknown> {\n readonly id: string\n readonly kind:\n | 'action'\n | 'flow'\n | 'state'\n | 'service'\n | 'lifecycle'\n | 'trait-computed'\n | 'trait-link'\n | 'trait-source'\n | 'devtools'\n readonly name: string\n readonly payload?: unknown\n readonly meta?: {\n /**\n * linkId:\n * - Operation chain id: multiple boundary ops in the same chain must share it.\n * - Runtime ensures this field is populated on all boundary ops.\n */\n linkId?: string\n moduleId?: string\n instanceId?: string\n runtimeLabel?: string\n txnId?: string\n txnSeq?: number\n opSeq?: number\n fieldPath?: string\n deps?: ReadonlyArray<string>\n from?: string\n to?: string\n traitNodeId?: string\n stepId?: string\n resourceId?: string\n key?: unknown\n trace?: ReadonlyArray<string>\n tags?: ReadonlyArray<string>\n policy?: OperationPolicy\n // Reserved extension slot for middleware/devtools to attach extra information.\n readonly [k: string]: unknown\n }\n readonly effect: Effect.Effect<Out, Err, Env>\n}\n\n/**\n * Middleware: the general middleware model for observing / wrapping / guarding EffectOps.\n */\nexport type Middleware = <A, E, R>(op: EffectOp<A, E, R>) => Effect.Effect<A, OperationError<E>, R>\n\nexport type MiddlewareStack = ReadonlyArray<Middleware>\n\n/**\n * EffectOpMiddlewareEnv:\n * - A Service in Effect Env that carries the current Runtime's MiddlewareStack.\n * - Injected by Runtime.ts when constructing a ManagedRuntime.\n * - Runtime code (e.g. StateTrait.install) uses this Service to decide which MiddlewareStack to use.\n */\nexport interface EffectOpMiddlewareEnv {\n readonly stack: MiddlewareStack\n}\n\nexport class EffectOpMiddlewareTag extends Context.Tag('Logix/EffectOpMiddleware')<\n EffectOpMiddlewareTag,\n EffectOpMiddlewareEnv\n>() {}\n\n/**\n * composeMiddleware:\n * - Composes Middleware from \"outer to inner\" in declaration order:\n * - stack = [mw1, mw2] => mw1 -> mw2 -> effect -> mw2 -> mw1\n * - Matches the reduceRight example in the reference docs.\n */\nexport const composeMiddleware = (stack: MiddlewareStack): Middleware => {\n return <A, E, R>(op: EffectOp<A, E, R>): Effect.Effect<A, OperationError<E>, R> =>\n stack.reduceRight<Effect.Effect<A, OperationError<E>, R>>(\n (eff, mw) => mw({ ...op, effect: eff } as any) as any,\n op.effect as Effect.Effect<A, OperationError<E>, R>,\n )\n}\n\n/**\n * runWithMiddleware:\n * - Executes a given EffectOp with a MiddlewareStack according to the composition rules.\n * - If the stack is empty, returns op.effect directly.\n */\nexport const runWithMiddleware = <A, E, R>(op: EffectOp<A, E, R>, stack: MiddlewareStack): Effect.Effect<A, E, R> => {\n return Effect.gen(function* () {\n const existing = yield* FiberRef.get(currentLinkId)\n const metaLinkId = (op.meta as any)?.linkId\n const linkId = typeof metaLinkId === 'string' && metaLinkId.length > 0 ? metaLinkId : (existing ?? op.id)\n\n const nextOp: EffectOp<A, E, R> = {\n ...op,\n meta: {\n ...(op.meta ?? {}),\n linkId,\n },\n }\n\n const program = stack.length ? composeMiddleware(stack)(nextOp) : nextOp.effect\n\n // linkId is created at the boundary root and reused for nested ops (the FiberRef is the global single source of truth).\n // NOTE: middleware may explicitly reject with OperationRejected.\n return yield* Effect.locally(currentLinkId, linkId)(program as any)\n }) as Effect.Effect<A, E, R>\n}\n","import { Effect, FiberRef } from 'effect'\nimport type { JsonValue } from '../../observability/jsonValue.js'\nimport type { EvidencePackage, EvidencePackageSource } from '../../observability/evidence.js'\nimport { exportEvidencePackage, OBSERVABILITY_PROTOCOL_VERSION } from '../../observability/evidence.js'\nimport type { ConvergeStaticIrExport } from '../../state-trait/converge-ir.js'\nimport type { ConvergeStaticIrCollector } from './ConvergeStaticIrCollector.js'\nimport {\n currentDiagnosticsLevel,\n clearRuntimeDebugEventSeq,\n toRuntimeDebugEventRef,\n type Event,\n type RuntimeDebugEventRef,\n type Sink,\n} from './DebugSink.js'\n\n/**\n * DevtoolsHub:\n * - Process/page-level Debug event aggregator (global singleton).\n *\n * Note: this hub is only appended to Debug sinks when devtoolsHubLayer is explicitly enabled.\n * The Snapshot API is always available (returns empty snapshots when disabled).\n *\n * Performance:\n * - Devtools Debug events can be extremely dense in hot paths (EffectOp / Trait / StateTxn, etc.).\n * - The previous implementation copied ringBuffer and Maps per event to build an \"immutable snapshot\" (O(bufferSize)).\n * - The current implementation lets Snapshot reference internal Map/Array directly (read-only convention) and batches\n * subscriber notifications in microtasks, avoiding per-event copies and reducing main-thread interference.\n */\n\nexport interface DevtoolsSnapshot {\n /**\n * SnapshotToken:\n * - Monotonic snapshot change token (a subscription-safe source of truth).\n * - Any externally visible change must advance the token.\n * - If the token does not change, externally visible snapshot fields must not change (avoid tearing / missed updates).\n */\n readonly snapshotToken: SnapshotToken\n readonly instances: ReadonlyMap<string, number>\n readonly events: ReadonlyArray<RuntimeDebugEventRef>\n readonly latestStates: ReadonlyMap<string, JsonValue>\n readonly latestTraitSummaries: ReadonlyMap<string, JsonValue>\n /**\n * exportBudget:\n * - Tracks \"degrade counts\" caused by export boundaries (JsonValue projection/trimming), for explainability.\n * - Counts are cumulative (may differ from the ring buffer window); clearDevtoolsEvents resets them.\n */\n readonly exportBudget: {\n readonly dropped: number\n readonly oversized: number\n }\n}\n\nexport interface DevtoolsHubOptions {\n readonly bufferSize?: number\n}\n\nexport type SnapshotToken = number\n\n// ---- Global mutable state (singleton) ----\n\nconst instances = new Map<string, number>()\nconst latestStates = new Map<string, JsonValue>()\nconst latestTraitSummaries = new Map<string, JsonValue>()\nconst instanceLabels = new Map<string, string>()\nconst convergeStaticIrByDigest = new Map<string, ConvergeStaticIrExport>()\nconst liveInstanceKeys = new Set<string>()\n\nconst exportBudget = {\n dropped: 0,\n oversized: 0,\n}\n\nlet lastRunTs = 0\nlet lastRunTsSeq = 0\n\nconst nextRunId = (): string => {\n const ts = Date.now()\n if (ts === lastRunTs) {\n lastRunTsSeq += 1\n } else {\n lastRunTs = ts\n lastRunTsSeq = 0\n }\n\n return lastRunTsSeq === 0 ? `run-${ts}` : `run-${ts}.${lastRunTsSeq}`\n}\n\nlet currentRunId = nextRunId()\nlet nextSeq = 1\n\nlet bufferSize = 500\nconst ringBuffer: RuntimeDebugEventRef[] = []\nconst ringBufferSeq: number[] = []\n\nlet snapshotToken: SnapshotToken = 0\n\nconst ensureRingBufferSize = (): void => {\n if (bufferSize <= 0) {\n ringBuffer.length = 0\n ringBufferSeq.length = 0\n return\n }\n\n if (ringBuffer.length <= bufferSize) return\n const excess = ringBuffer.length - bufferSize\n ringBuffer.splice(0, excess)\n ringBufferSeq.splice(0, excess)\n}\n\nconst trimRingBufferIfNeeded = (): void => {\n if (bufferSize <= 0) {\n ringBuffer.length = 0\n ringBufferSeq.length = 0\n return\n }\n\n // Small windows keep a strict upper bound to avoid \"size=5 but events.length briefly > 5\" surprises.\n // Large windows allow short bursts + batch trimming to avoid linear shift() costs under sustained load.\n if (bufferSize <= 64) {\n ensureRingBufferSize()\n return\n }\n\n const slack = Math.min(1024, Math.floor(bufferSize / 2))\n const threshold = bufferSize + Math.max(1, slack)\n if (ringBuffer.length <= threshold) return\n\n const excess = ringBuffer.length - bufferSize\n ringBuffer.splice(0, excess)\n ringBufferSeq.splice(0, excess)\n}\n\n// Snapshot references internal structures directly (read-only convention) to avoid copy costs in hot paths.\nconst currentSnapshot: DevtoolsSnapshot = {\n snapshotToken,\n instances,\n events: ringBuffer,\n latestStates,\n latestTraitSummaries,\n exportBudget,\n}\n\nconst listeners = new Set<() => void>()\n\nlet notifyScheduled = false\nconst scheduleNotify = () => {\n if (notifyScheduled) return\n notifyScheduled = true\n queueMicrotask(() => {\n notifyScheduled = false\n for (const listener of listeners) {\n listener()\n }\n })\n}\n\nlet devtoolsEnabled = false\n\nconst bumpSnapshotToken = (): void => {\n snapshotToken += 1\n ;(currentSnapshot as any).snapshotToken = snapshotToken\n}\n\nconst markSnapshotChanged = (): void => {\n bumpSnapshotToken()\n scheduleNotify()\n}\n\nexport const configureDevtoolsHub = (options?: DevtoolsHubOptions) => {\n devtoolsEnabled = true\n if (typeof options?.bufferSize === 'number' && Number.isFinite(options.bufferSize)) {\n const next = Math.floor(options.bufferSize)\n const nextBufferSize = next >= 0 ? next : 0\n if (nextBufferSize !== bufferSize) {\n bufferSize = nextBufferSize\n ensureRingBufferSize()\n markSnapshotChanged()\n }\n }\n}\n\nexport const isDevtoolsEnabled = (): boolean => devtoolsEnabled\n\n// ---- Snapshot public helpers ----\n\nexport const getDevtoolsSnapshot = (): DevtoolsSnapshot => currentSnapshot\nexport const getDevtoolsSnapshotToken = (): SnapshotToken => snapshotToken\n\nexport const subscribeDevtoolsSnapshot = (listener: () => void): (() => void) => {\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n}\n\nexport const getDevtoolsRunId = (): string => currentRunId\n\nexport const setDevtoolsRunId = (runId: string): void => {\n if (typeof runId !== 'string' || runId.length === 0) return\n if (runId !== currentRunId) {\n currentRunId = runId\n markSnapshotChanged()\n }\n}\n\nexport const startDevtoolsRun = (runId?: string): string => {\n currentRunId = typeof runId === 'string' && runId.length > 0 ? runId : nextRunId()\n nextSeq = 1\n clearRuntimeDebugEventSeq()\n clearDevtoolsEvents()\n return currentRunId\n}\n\nexport const clearDevtoolsEvents = (): void => {\n ringBuffer.length = 0\n ringBufferSeq.length = 0\n exportBudget.dropped = 0\n exportBudget.oversized = 0\n markSnapshotChanged()\n}\n\nexport const setInstanceLabel = (instanceId: string, label: string): void => {\n instanceLabels.set(instanceId, label)\n markSnapshotChanged()\n}\n\nexport const getInstanceLabel = (instanceId: string): string | undefined => instanceLabels.get(instanceId)\n\nconst registerConvergeStaticIr = (ir: ConvergeStaticIrExport): void => {\n convergeStaticIrByDigest.set(ir.staticIrDigest, ir)\n}\n\nexport const devtoolsHubConvergeStaticIrCollector: ConvergeStaticIrCollector = {\n register: registerConvergeStaticIr,\n}\n\nexport const exportDevtoolsEvidencePackage = (options?: {\n readonly runId?: string\n readonly source?: EvidencePackageSource\n readonly protocolVersion?: string\n}): EvidencePackage => {\n const protocolVersion = options?.protocolVersion ?? OBSERVABILITY_PROTOCOL_VERSION\n const runId = options?.runId ?? currentRunId\n const source = options?.source ?? { host: 'unknown' }\n\n const events = ringBuffer.map((payload, i) => ({\n protocolVersion,\n runId,\n seq: ringBufferSeq[i] ?? i + 1,\n timestamp: payload.timestamp,\n type: 'debug:event',\n payload: payload as unknown as JsonValue,\n }))\n\n const isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\n // In full diagnostics: de-duplicate by staticIrDigest and export matching ConvergeStaticIR (for offline explanation/replay).\n const convergeDigests = new Set<string>()\n let sawFullConverge = false\n\n for (const ref of ringBuffer) {\n if (ref.kind !== 'trait:converge') continue\n const meta = ref.meta\n if (!isRecord(meta)) continue\n\n const digest = meta.staticIrDigest\n if (typeof digest === 'string' && digest.length > 0) {\n convergeDigests.add(digest)\n }\n\n const dirty = meta.dirty\n if (isRecord(dirty) && typeof dirty.rootCount === 'number') {\n sawFullConverge = true\n }\n }\n\n let summary: JsonValue | undefined\n if (sawFullConverge && convergeDigests.size > 0) {\n const staticIrByDigest: Record<string, JsonValue> = {}\n for (const digest of convergeDigests) {\n const ir = convergeStaticIrByDigest.get(digest)\n if (ir) {\n staticIrByDigest[digest] = ir as unknown as JsonValue\n }\n }\n if (Object.keys(staticIrByDigest).length > 0) {\n summary = { converge: { staticIrByDigest } } as unknown as JsonValue\n }\n }\n\n return exportEvidencePackage({\n protocolVersion,\n runId,\n source,\n events,\n summary,\n })\n}\n\n// ---- Hub Sink ----\n\nexport const devtoolsHubSink: Sink = {\n record: (event: Event) =>\n Effect.gen(function* () {\n // NOTE: the hub is a global singleton, but whether events are exportable/written to the buffer is controlled by FiberRef,\n // enabling different perf baselines/diagnostics tiers across scopes within the same process.\n const level = yield* FiberRef.get(currentDiagnosticsLevel)\n\n let changed = false\n\n // trace:instanceLabel: set a human-readable label for a runtime instance.\n if (event.type === 'trace:instanceLabel') {\n const instanceId = (event as any).instanceId as string | undefined\n const data = (event as any).data\n const label = data && typeof data === 'object' && 'label' in data ? String((data as any).label) : undefined\n if (instanceId && label) {\n instanceLabels.set(instanceId, label)\n changed = true\n }\n }\n\n // Instance counters: maintain active instance counts by runtimeLabel::moduleId.\n if (event.type === 'module:init' || event.type === 'module:destroy') {\n const moduleId = (event as any).moduleId ?? 'unknown'\n const runtimeLabel = (event as any).runtimeLabel ?? 'unknown'\n const instanceId = (event as any).instanceId as string | undefined\n const key = `${runtimeLabel}::${moduleId}`\n const prev = instances.get(key) ?? 0\n if (event.type === 'module:init') {\n instances.set(key, prev + 1)\n changed = true\n if (instanceId) {\n const instanceKey = `${runtimeLabel}::${moduleId}::${instanceId}`\n liveInstanceKeys.add(instanceKey)\n // If instanceId is reused, ensure derived caches do not carry leftovers from the previous lifetime.\n if (latestStates.delete(instanceKey)) changed = true\n if (latestTraitSummaries.delete(instanceKey)) changed = true\n }\n } else {\n const next = prev - 1\n if (next <= 0) {\n if (instances.delete(key)) changed = true\n } else {\n instances.set(key, next)\n changed = true\n }\n\n if (instanceId) {\n const instanceKey = `${runtimeLabel}::${moduleId}::${instanceId}`\n liveInstanceKeys.delete(instanceKey)\n if (latestStates.delete(instanceKey)) changed = true\n if (latestTraitSummaries.delete(instanceKey)) changed = true\n if (instanceLabels.delete(instanceId)) changed = true\n changed = true\n }\n }\n }\n\n let exportBudgetChanged = false\n const ref = toRuntimeDebugEventRef(event, {\n diagnosticsLevel: level,\n resolveConvergeStaticIr: (staticIrDigest) => convergeStaticIrByDigest.get(staticIrDigest),\n onMetaProjection: ({ stats }) => {\n if (stats.dropped !== 0 || stats.oversized !== 0) {\n exportBudgetChanged = true\n }\n exportBudget.dropped += stats.dropped\n exportBudget.oversized += stats.oversized\n },\n })\n if (exportBudgetChanged) {\n changed = true\n }\n if (!ref) {\n // off tier: do not write ring buffer / latestStates, but keep minimal counters/labels (including module:destroy cleanup).\n if (changed) {\n markSnapshotChanged()\n }\n return\n }\n\n // latestStates / latestTraitSummaries: record latest snapshots by runtimeLabel::moduleId::instanceId.\n if (ref.kind === 'state' && ref.label === 'state:update') {\n const runtimeLabel = ref.runtimeLabel ?? 'unknown'\n const key = `${runtimeLabel}::${ref.moduleId}::${ref.instanceId}`\n\n // Late/replayed events after module:destroy: allow entering the window for replay, but do not rebuild latest* caches.\n if (liveInstanceKeys.has(key)) {\n if (ref.meta && typeof ref.meta === 'object' && !Array.isArray(ref.meta)) {\n const anyMeta = ref.meta as any\n if ('state' in anyMeta) {\n latestStates.set(key, anyMeta.state as JsonValue)\n changed = true\n }\n if ('traitSummary' in anyMeta && anyMeta.traitSummary !== undefined) {\n latestTraitSummaries.set(key, anyMeta.traitSummary as JsonValue)\n changed = true\n }\n }\n }\n }\n\n // ring buffer: keep the most recent bufferSize RuntimeDebugEventRefs.\n if (bufferSize > 0) {\n const seq = nextSeq++\n ringBuffer.push(ref)\n ringBufferSeq.push(seq)\n trimRingBufferIfNeeded()\n changed = true\n }\n\n if (changed) {\n markSnapshotChanged()\n }\n }),\n}\n","import { isJsonValue, type JsonValue } from './jsonValue.js'\n\nexport const OBSERVABILITY_PROTOCOL_VERSION = 'v1'\n\nexport interface ObservationEnvelope {\n readonly protocolVersion: string\n readonly runId: string\n readonly seq: number\n readonly timestamp: number\n readonly type: string\n readonly payload: JsonValue\n}\n\nexport interface EvidencePackageSource {\n readonly host: string\n readonly label?: string\n}\n\nexport interface EvidencePackage {\n readonly protocolVersion: string\n readonly runId: string\n readonly createdAt: number\n readonly source: EvidencePackageSource\n readonly events: ReadonlyArray<ObservationEnvelope>\n readonly summary?: JsonValue\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst asNonEmptyString = (value: unknown): string | undefined =>\n typeof value === 'string' && value.length > 0 ? value : undefined\n\nconst asFiniteNumber = (value: unknown): number | undefined =>\n typeof value === 'number' && Number.isFinite(value) ? value : undefined\n\nconst asPositiveInt = (value: unknown): number | undefined => {\n if (typeof value !== 'number' || !Number.isFinite(value)) return undefined\n const n = Math.floor(value)\n return n >= 1 ? n : undefined\n}\n\nexport const exportEvidencePackage = (options: {\n readonly runId: string\n readonly source: EvidencePackageSource\n readonly events: ReadonlyArray<ObservationEnvelope>\n readonly createdAt?: number\n readonly protocolVersion?: string\n readonly summary?: JsonValue\n}): EvidencePackage => {\n const protocolVersion = options.protocolVersion ?? OBSERVABILITY_PROTOCOL_VERSION\n return {\n protocolVersion,\n runId: options.runId,\n createdAt: options.createdAt ?? Date.now(),\n source: options.source,\n events: options.events.slice().sort((a, b) => a.seq - b.seq),\n summary: options.summary,\n }\n}\n\nexport const importEvidencePackage = (input: unknown): EvidencePackage => {\n const fallback: EvidencePackage = {\n protocolVersion: OBSERVABILITY_PROTOCOL_VERSION,\n runId: 'unknown',\n createdAt: Date.now(),\n source: { host: 'unknown' },\n events: [],\n }\n\n if (!isRecord(input)) return fallback\n\n const protocolVersion = asNonEmptyString(input.protocolVersion) ?? fallback.protocolVersion\n const runId = asNonEmptyString(input.runId) ?? fallback.runId\n const createdAt = asFiniteNumber(input.createdAt) ?? fallback.createdAt\n\n const sourceRaw = input.source\n const source: EvidencePackageSource = isRecord(sourceRaw)\n ? {\n host: asNonEmptyString(sourceRaw.host) ?? 'unknown',\n label: typeof sourceRaw.label === 'string' ? sourceRaw.label : undefined,\n }\n : fallback.source\n\n const eventsRaw = Array.isArray(input.events) ? input.events : []\n const events: ObservationEnvelope[] = []\n\n for (const e of eventsRaw) {\n if (!isRecord(e)) continue\n\n const seq = asPositiveInt(e.seq)\n const timestamp = asFiniteNumber(e.timestamp)\n const type = asNonEmptyString(e.type)\n const payloadRaw = e.payload\n\n if (!seq || timestamp === undefined || !type || !isJsonValue(payloadRaw)) {\n continue\n }\n\n events.push({\n protocolVersion: asNonEmptyString(e.protocolVersion) ?? protocolVersion,\n runId: asNonEmptyString(e.runId) ?? runId,\n seq,\n timestamp,\n type,\n payload: payloadRaw,\n })\n }\n\n const summary = isJsonValue(input.summary) ? input.summary : undefined\n\n return {\n protocolVersion,\n runId,\n createdAt,\n source,\n events: events.sort((a, b) => a.seq - b.seq),\n summary,\n }\n}\n","import { FiberRef, Layer } from 'effect'\nimport type { ConvergeStaticIrExport } from '../../state-trait/converge-ir.js'\n\n/**\n * ConvergeStaticIrCollector:\n * - Consumer interface for collecting ConvergeStaticIrExport (de-duplicated/indexed by staticIrDigest); an internal injectable capability.\n * - Typical implementations: DevtoolsHub (process-level) / EvidenceCollector (RunSession-level).\n *\n * Notes:\n * - Uses FiberRef<ReadonlyArray<...>> to allow appending multiple collectors within the same scope (similar to Debug sinks).\n * - ModuleRuntime reads the FiberRef value during installation and captures it in a closure, avoiding Env lookup on hot paths.\n */\nexport interface ConvergeStaticIrCollector {\n readonly register: (ir: ConvergeStaticIrExport) => void\n}\n\nexport const currentConvergeStaticIrCollectors = FiberRef.unsafeMake<ReadonlyArray<ConvergeStaticIrCollector>>([])\n\nexport const appendConvergeStaticIrCollectors = (\n collectors: ReadonlyArray<ConvergeStaticIrCollector>,\n): Layer.Layer<any, never, never> =>\n Layer.fiberRefLocallyScopedWith(currentConvergeStaticIrCollectors, (current) => [\n ...current,\n ...collectors,\n ]) as Layer.Layer<any, never, never>\n","import { Context, Layer } from 'effect'\nimport type { TraitConvergeRequestedMode } from '../../state-trait/model.js'\nimport type { ReadQueryStrictGateConfig } from './ReadQuery.js'\n\n// Unified runtime env detection, avoiding bundlers inlining NODE_ENV at build time.\nexport const getNodeEnv = (): string | undefined => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const env = (globalThis as any)?.process?.env\n return typeof env?.NODE_ENV === 'string' ? env.NODE_ENV : undefined\n } catch {\n return undefined\n }\n}\n\nexport const isDevEnv = (): boolean => getNodeEnv() !== 'production'\n\nexport type StateTransactionInstrumentation = 'full' | 'light'\n\n/**\n * getDefaultStateTxnInstrumentation:\n * - Currently chooses default instrumentation by NODE_ENV:\n * - dev / test: full (keep patches and snapshots for debugging).\n * - production: light (keep minimal semantics to reduce overhead).\n * - May evolve with finer-grained overrides in Runtime.make / Module.make.\n */\nexport const getDefaultStateTxnInstrumentation = (): StateTransactionInstrumentation => (isDevEnv() ? 'full' : 'light')\n\n/**\n * Runtime-level StateTransaction config Service:\n * - Provided at the app layer by Logix.Runtime.make / AppRuntime.makeApp.\n * - ModuleRuntime.make can read runtime-level defaults from Env.\n *\n * Notes:\n * - instrumentation is only a runtime-level default.\n * - Explicit instrumentation in ModuleImpl / ModuleRuntimeOptions has higher priority.\n */\nexport interface StateTransactionRuntimeConfig {\n readonly instrumentation?: StateTransactionInstrumentation\n /**\n * StateTrait derived converge budget (ms):\n * - Exceeding the budget triggers a soft degrade (freeze derived fields, preserve base writes and 0/1 commit semantics).\n * - Default is 200ms (aligned with the 007 spec threshold).\n */\n readonly traitConvergeBudgetMs?: number\n /**\n * Auto-mode decision budget (ms):\n * - Only used during the decision phase when requestedMode=\"auto\".\n * - Exceeding the budget must immediately fall back to full (and record evidence).\n */\n readonly traitConvergeDecisionBudgetMs?: number\n /**\n * StateTrait converge scheduling strategy:\n * - full: full topo execution (current default; safest).\n * - dirty: minimal triggering based on dirtyPaths + deps in the txn window (requires accurate deps).\n */\n readonly traitConvergeMode?: TraitConvergeRequestedMode\n /**\n * 043: Trait converge time-slicing (explicit opt-in). Disabled by default.\n */\n readonly traitConvergeTimeSlicing?: TraitConvergeTimeSlicingPatch\n /**\n * 060: Txn Lanes (priority scheduling for transaction follow-up work). Enabled by default since 062.\n */\n readonly txnLanes?: TxnLanesPatch\n /**\n * Runtime-level per-module overrides (hotfix path):\n * - Only affects converge behavior for the specified moduleId.\n * - Lower priority than Provider overrides.\n */\n readonly traitConvergeOverridesByModuleId?: Readonly<Record<string, StateTransactionTraitConvergeOverrides>>\n /**\n * 060: Txn Lanes runtime_module overrides (hotfix / gradual tuning).\n * - Only affects the specified moduleId.\n * - Lower priority than Provider overrides.\n */\n readonly txnLanesOverridesByModuleId?: Readonly<Record<string, TxnLanesPatch>>\n}\n\nclass StateTransactionConfigTagImpl extends Context.Tag('@logixjs/core/StateTransactionRuntimeConfig')<\n StateTransactionConfigTagImpl,\n StateTransactionRuntimeConfig\n>() {}\n\nexport const StateTransactionConfigTag = StateTransactionConfigTagImpl\n\nexport type ReadQueryStrictGateRuntimeConfig = ReadQueryStrictGateConfig\n\nclass ReadQueryStrictGateConfigTagImpl extends Context.Tag('@logixjs/core/ReadQueryStrictGateRuntimeConfig')<\n ReadQueryStrictGateConfigTagImpl,\n ReadQueryStrictGateRuntimeConfig\n>() {}\n\nexport const ReadQueryStrictGateConfigTag = ReadQueryStrictGateConfigTagImpl\n\nexport type ReplayMode = 'live' | 'replay'\n\nexport interface ReplayModeConfig {\n readonly mode: ReplayMode\n}\n\nclass ReplayModeConfigTagImpl extends Context.Tag('@logixjs/core/ReplayModeConfig')<\n ReplayModeConfigTagImpl,\n ReplayModeConfig\n>() {}\n\nexport const ReplayModeConfigTag = ReplayModeConfigTagImpl\n\nexport const replayModeLayer = (mode: ReplayMode): Layer.Layer<ReplayModeConfigTagImpl, never, never> =>\n Layer.succeed(ReplayModeConfigTag, { mode })\n\nexport interface StateTransactionTraitConvergeOverrides {\n readonly traitConvergeMode?: TraitConvergeRequestedMode\n readonly traitConvergeBudgetMs?: number\n readonly traitConvergeDecisionBudgetMs?: number\n readonly traitConvergeTimeSlicing?: TraitConvergeTimeSlicingPatch\n}\n\nexport interface TxnLanesPatch {\n /**\n * enabled: whether Txn Lanes is enabled (default on since 062).\n * - undefined: default enabled (when not explicitly configured)\n * - false: disabled (returns to baseline behavior)\n * - true: enabled (only affects scheduling of follow-up work outside the transaction; transactions remain synchronous)\n */\n readonly enabled?: boolean\n /**\n * overrideMode: runtime temporary override (for debugging/rollback/comparison).\n * - forced_off: forcibly disables Txn Lanes (returns to baseline behavior).\n * - forced_sync: forces fully synchronous execution (ignores non-urgent deferral and time-slicing; used for comparisons).\n *\n * Notes:\n * - Override precedence follows StateTransactionOverrides: provider > runtime_module > runtime_default > builtin.\n * - Overrides must be explainable by evidence (see 060 LaneEvidence reasons).\n */\n readonly overrideMode?: 'forced_off' | 'forced_sync'\n /** non-urgent work loop slice budget (ms). */\n readonly budgetMs?: number\n /** Non-urgent backlog coalescing window (ms). */\n readonly debounceMs?: number\n /** Max lag upper bound (ms): exceeding it triggers an explainable starvation protection (forced catch-up). */\n readonly maxLagMs?: number\n /** Whether to allow coalescing/canceling intermediate non-urgent work (must preserve eventual consistency). */\n readonly allowCoalesce?: boolean\n /**\n * Yield strategy for the non-urgent work loop (progressive enhancement).\n * - baseline: uses only time budget + hard upper bound\n * - inputPending: when supported by browsers, also consults `navigator.scheduling.isInputPending`\n */\n readonly yieldStrategy?: 'baseline' | 'inputPending'\n}\n\nexport interface TraitConvergeTimeSlicingPatch {\n /**\n * enabled:\n * - false/undefined: disabled (default)\n * - true: enables time-slicing (only affects computed/link explicitly marked as deferred)\n */\n readonly enabled?: boolean\n /**\n * debounceMs: coalescing interval (ms) for the deferral window; merges high-frequency inputs into one deferred flush.\n */\n readonly debounceMs?: number\n /**\n * maxLagMs: max lag upper bound (ms); exceeding it triggers an explainable forced flush (starvation protection).\n */\n readonly maxLagMs?: number\n}\n\n/**\n * Provider-scoped StateTransactionOverrides (delta overrides):\n * - Used to inject more local overrides into a Provider subtree on top of inherited global runtime config.\n * - Override precedence: provider > runtime_module > runtime_default > builtin.\n */\nexport interface StateTransactionOverrides {\n readonly traitConvergeMode?: TraitConvergeRequestedMode\n readonly traitConvergeBudgetMs?: number\n readonly traitConvergeDecisionBudgetMs?: number\n readonly traitConvergeTimeSlicing?: TraitConvergeTimeSlicingPatch\n readonly traitConvergeOverridesByModuleId?: Readonly<Record<string, StateTransactionTraitConvergeOverrides>>\n /** 060: Txn Lanes provider-level overrides (delta overrides). */\n readonly txnLanes?: TxnLanesPatch\n /** 060: Txn Lanes provider_module overrides (by moduleId). */\n readonly txnLanesOverridesByModuleId?: Readonly<Record<string, TxnLanesPatch>>\n}\n\nclass StateTransactionOverridesTagImpl extends Context.Tag('@logixjs/core/StateTransactionOverrides')<\n StateTransactionOverridesTagImpl,\n StateTransactionOverrides\n>() {}\n\nexport const StateTransactionOverridesTag = StateTransactionOverridesTagImpl\n\nexport type ConcurrencyLimit = number | 'unbounded'\n\nexport interface ConcurrencyPolicyPatch {\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}\n\n/**\n * Runtime-level ConcurrencyPolicy:\n * - Provided at the app layer by Logix.Runtime.make / AppRuntime.makeApp.\n * - ModuleRuntime merges sources via a resolver (builtin/runtime_module/provider, etc.).\n *\n * Notes:\n * - overridesByModuleId is used for runtime_module hot-switching (hotfix / gradual tuning) and is lower priority than provider overrides.\n */\nexport interface ConcurrencyPolicy extends ConcurrencyPolicyPatch {\n readonly overridesByModuleId?: Readonly<Record<string, ConcurrencyPolicyPatch>>\n}\n\nclass ConcurrencyPolicyTagImpl extends Context.Tag('@logixjs/core/ConcurrencyPolicy')<\n ConcurrencyPolicyTagImpl,\n ConcurrencyPolicy\n>() {}\n\nexport const ConcurrencyPolicyTag = ConcurrencyPolicyTagImpl\n\n/**\n * Provider-scoped ConcurrencyPolicyOverrides (delta overrides):\n * - Used to inject more local overrides into a Provider subtree on top of inherited global runtime config.\n * - Override precedence: provider > runtime_module > runtime_default > builtin.\n */\nexport interface ConcurrencyPolicyOverrides extends ConcurrencyPolicyPatch {\n readonly overridesByModuleId?: Readonly<Record<string, ConcurrencyPolicyPatch>>\n}\n\nclass ConcurrencyPolicyOverridesTagImpl extends Context.Tag('@logixjs/core/ConcurrencyPolicyOverrides')<\n ConcurrencyPolicyOverridesTagImpl,\n ConcurrencyPolicyOverrides\n>() {}\n\nexport const ConcurrencyPolicyOverridesTag = ConcurrencyPolicyOverridesTagImpl\n","export type FieldPath = ReadonlyArray<string>\nexport type FieldPathId = number\n\nexport type DirtyAllReason = 'unknownWrite' | 'customMutation' | 'nonTrackablePatch' | 'fallbackPolicy'\n\nexport type PatchReason =\n | 'reducer'\n | 'trait-computed'\n | 'trait-link'\n | 'source-refresh'\n | 'devtools'\n | 'perf'\n | 'unknown'\n\nexport const normalizePatchReason = (reason: unknown): PatchReason => {\n switch (reason) {\n case 'reducer':\n case 'trait-computed':\n case 'trait-link':\n case 'source-refresh':\n case 'devtools':\n case 'perf':\n case 'unknown':\n return reason\n default:\n return typeof reason === 'string' && reason.startsWith('source:') ? 'source-refresh' : 'unknown'\n }\n}\n\nexport interface DirtySet {\n readonly dirtyAll: boolean\n /**\n * When dirtyAll=true, a stable reason code must be provided; when dirtyAll=false, it should be omitted.\n */\n readonly reason?: DirtyAllReason\n /**\n * FieldPathId (Static IR table index).\n * - When dirtyAll=true, must be an empty array;\n * - When dirtyAll=false, roots are deduped / prefix-free / stably sorted.\n */\n readonly rootIds: ReadonlyArray<FieldPathId>\n readonly rootCount: number\n readonly keySize: number\n readonly keyHash: number\n /**\n * Optional: mark when the output is TopK-truncated (light/full).\n * Note: truncation does not affect the definition of keyHash/keySize/rootCount (they still refer to full roots).\n */\n readonly rootIdsTruncated?: boolean\n}\n\ninterface FieldPathTrieNode {\n id?: FieldPathId\n children: Map<string, FieldPathTrieNode>\n}\n\nexport interface FieldPathIdRegistry {\n readonly fieldPaths: ReadonlyArray<FieldPath>\n readonly root: FieldPathTrieNode\n /**\n * Fast path: direct lookup for common string inputs (e.g. 'a.b').\n *\n * Note: This map is only safe for \"dot-separated\" paths. If a schema key itself contains '.',\n * it is ambiguous with nested paths and should not rely on string-path APIs.\n */\n readonly pathStringToId?: ReadonlyMap<string, FieldPathId>\n}\n\nexport const isFieldPathSegment = (seg: string): boolean => {\n if (!seg) return false\n if (seg === '*') return false\n if (/^\\d+$/.test(seg)) return false\n if (seg.includes('[') || seg.includes(']')) return false\n return true\n}\n\nexport const normalizeFieldPath = (input: string | FieldPath): FieldPath | undefined => {\n if (typeof input === 'string') {\n const segs = splitSegments(input)\n if (!segs || segs.length === 0) return undefined\n const normalized = segs.filter(isFieldPathSegment)\n return normalized.length > 0 ? normalized : undefined\n }\n\n if (input.length === 0) return undefined\n\n let needsFilter = false\n for (const seg of input) {\n if (!isFieldPathSegment(seg)) {\n needsFilter = true\n break\n }\n }\n\n if (!needsFilter) return input\n\n const normalized = input.filter(isFieldPathSegment)\n return normalized.length > 0 ? normalized : undefined\n}\n\nexport const compareFieldPath = (a: FieldPath, b: FieldPath): number => {\n const len = Math.min(a.length, b.length)\n for (let i = 0; i < len; i++) {\n const as = a[i]!\n const bs = b[i]!\n if (as === bs) continue\n return as < bs ? -1 : 1\n }\n return a.length - b.length\n}\n\nexport const isPrefixOf = (prefix: FieldPath, full: FieldPath): boolean => {\n if (prefix.length > full.length) return false\n for (let i = 0; i < prefix.length; i++) {\n if (prefix[i] !== full[i]) return false\n }\n return true\n}\n\nexport const toKey = (path: FieldPath): string => JSON.stringify(path)\n\nexport const toPathString = (path: FieldPath): string => path.join('.')\n\nexport const canonicalizeRoots = (roots: Iterable<FieldPath>): ReadonlyArray<FieldPath> => {\n const byKey = new Map<string, FieldPath>()\n for (const root of roots) {\n const key = toKey(root)\n if (!byKey.has(key)) byKey.set(key, root)\n }\n\n const sorted = Array.from(byKey.values()).sort(compareFieldPath)\n const out: Array<FieldPath> = []\n for (const next of sorted) {\n const prev = out[out.length - 1]\n if (prev && isPrefixOf(prev, next)) {\n continue\n }\n out.push(next)\n }\n return out\n}\n\nexport const canonicalizeRootsFast = (roots: Iterable<FieldPath>): ReadonlyArray<FieldPath> => {\n const sorted = Array.from(roots).sort(compareFieldPath)\n const out: Array<FieldPath> = []\n for (const next of sorted) {\n const prev = out[out.length - 1]\n if (prev && isPrefixOf(prev, next)) continue\n out.push(next)\n }\n return out\n}\n\nexport const makeFieldPathIdRegistry = (fieldPaths: ReadonlyArray<FieldPath>): FieldPathIdRegistry => {\n const root: FieldPathTrieNode = { children: new Map() }\n const pathStringToId = new Map<string, FieldPathId>()\n const ambiguousPathStrings = new Set<string>()\n\n for (let id = 0; id < fieldPaths.length; id++) {\n const path = fieldPaths[id]!\n let node = root\n for (const seg of path) {\n const children = node.children\n let next = children.get(seg)\n if (!next) {\n next = { children: new Map() }\n children.set(seg, next)\n }\n node = next\n }\n node.id = id\n\n if (path.length > 0 && path.some((seg) => seg.includes('.'))) {\n const key = path.join('.')\n ambiguousPathStrings.add(key)\n pathStringToId.delete(key)\n }\n\n if (path.length > 0 && path.every((seg) => !seg.includes('.') && !seg.includes('[') && !seg.includes(']'))) {\n const key = path.join('.')\n if (ambiguousPathStrings.has(key)) continue\n if (pathStringToId.has(key)) {\n ambiguousPathStrings.add(key)\n pathStringToId.delete(key)\n continue\n }\n pathStringToId.set(key, id)\n }\n }\n\n return { fieldPaths, root, pathStringToId }\n}\n\nexport const getFieldPathId = (registry: FieldPathIdRegistry, path: FieldPath): FieldPathId | undefined => {\n let node = registry.root\n for (const seg of path) {\n const next = node.children.get(seg)\n if (!next) return undefined\n node = next\n }\n return node.id\n}\n\nexport const getFieldPathIdFromString = (registry: FieldPathIdRegistry, path: string): FieldPathId | undefined => {\n if (!path || path === '*') return undefined\n const normalized = normalizeFieldPath(path)\n if (!normalized) return undefined\n return getFieldPathId(registry, normalized)\n}\n\nexport const hashFieldPathIds = (ids: ReadonlyArray<number>): number => {\n // FNV-1a (32-bit)\n let hash = 2166136261 >>> 0\n for (const id of ids) {\n hash ^= id >>> 0\n hash = Math.imul(hash, 16777619)\n }\n return hash >>> 0\n}\n\nexport const dirtyPathsToRootIds = (options: {\n readonly dirtyPaths?: Iterable<string | FieldPath | FieldPathId>\n readonly registry: FieldPathIdRegistry\n readonly dirtyAllReason?: DirtyAllReason\n}): DirtySet => {\n if (options.dirtyAllReason) {\n return {\n dirtyAll: true,\n reason: options.dirtyAllReason,\n rootIds: [],\n rootCount: 0,\n keySize: 0,\n keyHash: 0,\n }\n }\n\n let sawStar = false\n let hasInvalid = false\n let missing = false\n\n const ids: Array<number> = []\n for (const raw of options.dirtyPaths ?? []) {\n if (raw === '*') {\n sawStar = true\n continue\n }\n\n if (typeof raw === 'number') {\n if (!Number.isFinite(raw)) {\n hasInvalid = true\n continue\n }\n const id = Math.floor(raw)\n if (id < 0) {\n hasInvalid = true\n continue\n }\n if (!options.registry.fieldPaths[id]) {\n missing = true\n continue\n }\n ids.push(id)\n continue\n }\n\n if (typeof raw === 'string') {\n const direct = options.registry.pathStringToId?.get(raw)\n if (direct != null) {\n ids.push(direct)\n continue\n }\n\n // String path is treated as dot-separated boundary input only.\n // If it cannot be mapped directly, it is considered ambiguous/unmappable.\n missing = true\n continue\n }\n\n const normalized = normalizeFieldPath(raw)\n if (!normalized) {\n hasInvalid = true\n continue\n }\n\n const id = getFieldPathId(options.registry, normalized)\n if (id == null) {\n missing = true\n continue\n }\n ids.push(id)\n }\n\n if (hasInvalid) {\n return {\n dirtyAll: true,\n reason: 'nonTrackablePatch',\n rootIds: [],\n rootCount: 0,\n keySize: 0,\n keyHash: 0,\n }\n }\n\n if (missing) {\n return {\n dirtyAll: true,\n reason: 'fallbackPolicy',\n rootIds: [],\n rootCount: 0,\n keySize: 0,\n keyHash: 0,\n }\n }\n\n // Any non-trackable write must explicitly degrade (do not \"ignore *\" when roots exist).\n if (sawStar) {\n return {\n dirtyAll: true,\n reason: 'unknownWrite',\n rootIds: [],\n rootCount: 0,\n keySize: 0,\n keyHash: 0,\n }\n }\n\n const fieldPathsById = options.registry.fieldPaths\n ids.sort((a, b) => {\n const ap = fieldPathsById[a]\n const bp = fieldPathsById[b]\n if (!ap || !bp) return a - b\n const cmp = compareFieldPath(ap, bp)\n return cmp !== 0 ? cmp : a - b\n })\n\n const rootIds: Array<number> = []\n let prev: FieldPath | undefined\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i]!\n const path = fieldPathsById[id]\n if (!path) continue\n if (prev && isPrefixOf(prev, path)) continue\n rootIds.push(id)\n prev = path\n }\n\n const hasSpecific = rootIds.length > 0\n\n if (!hasSpecific) {\n return {\n dirtyAll: true,\n reason: 'unknownWrite',\n rootIds: [],\n rootCount: 0,\n keySize: 0,\n keyHash: 0,\n }\n }\n\n rootIds.sort((a, b) => a - b)\n\n const keyHash = hashFieldPathIds(rootIds)\n return {\n dirtyAll: false,\n rootIds,\n rootCount: rootIds.length,\n keySize: rootIds.length,\n keyHash,\n }\n}\n\nconst splitSegments = (path: string): Array<string> | undefined => {\n if (!path) return undefined\n if (path === '*') return undefined\n\n const parts = path.split('.').filter((p) => p.length > 0)\n const segs: Array<string> = []\n\n for (const part of parts) {\n if (!part) continue\n if (part === '*') {\n return undefined\n }\n if (part.endsWith('[]')) {\n const base = part.slice(0, -2)\n if (base) segs.push(base)\n continue\n }\n const bracket = /^(.+)\\[(\\d+)\\]$/.exec(part)\n if (bracket) {\n segs.push(bracket[1]!)\n continue\n }\n if (/^\\d+$/.test(part)) {\n continue\n }\n if (part.includes('[') || part.includes(']')) {\n return undefined\n }\n segs.push(part)\n }\n\n return segs\n}\n","/**\n * internal/digest:\n * - Minimal \"stable digest\" utilities for Runtime / Static IR / Traits, etc.\n * - Goal: stable output across runs/processes while staying lightweight (no extra dependencies).\n *\n * Note: stableStringify does not aim for full JSON equivalence; it only covers the subset needed by this repo:\n * - Stable key ordering (object fields sorted lexicographically).\n * - Non-finite numbers (NaN/±Infinity) degrade to null.\n * - Other non-representable values (undefined/function/symbol, etc.) degrade to null.\n * - undefined inside objects is not omitted; it is encoded as null (differs from JSON.stringify).\n */\n\nexport const stableStringify = (value: unknown): string => {\n if (value === null) return 'null'\n const t = typeof value\n if (t === 'string') return JSON.stringify(value)\n if (t === 'number') return Number.isFinite(value) ? String(value) : 'null'\n if (t === 'boolean') return value ? 'true' : 'false'\n\n if (Array.isArray(value)) {\n return `[${value.map(stableStringify).join(',')}]`\n }\n\n if (t === 'object') {\n const record = value as Record<string, unknown>\n const keys = Object.keys(record).sort((a, b) => a.localeCompare(b))\n return `{${keys.map((k) => `${JSON.stringify(k)}:${stableStringify(record[k])}`).join(',')}}`\n }\n\n return 'null'\n}\n\n/**\n * fnv1a32:\n * - 32-bit FNV-1a hash (for short digests); outputs fixed 8-char hex.\n */\nexport const fnv1a32 = (input: string): string => {\n let hash = 0x811c9dc5\n for (let i = 0; i < input.length; i++) {\n hash ^= input.charCodeAt(i)\n hash = (hash * 0x01000193) >>> 0\n }\n return hash.toString(16).padStart(8, '0')\n}\n","import type { StateTraitEntry, StateTraitPlanStep, StateTraitProgram } from './model.js'\nimport * as CanonicalFieldPath from '../field-path.js'\nimport { fnv1a32, stableStringify } from '../digest.js'\n\nexport type FieldPath = CanonicalFieldPath.FieldPath\n\nexport interface StaticIrNode {\n readonly nodeId: string\n readonly kind: string\n readonly reads: ReadonlyArray<FieldPath>\n readonly writes: ReadonlyArray<FieldPath>\n readonly writesUnknown?: boolean\n readonly policy?: Record<string, unknown>\n readonly meta?: {\n readonly label?: string\n readonly description?: string\n readonly tags?: ReadonlyArray<string>\n readonly group?: string\n readonly docsUrl?: string\n readonly cacheGroup?: string\n readonly annotations?: Record<string, unknown>\n }\n}\n\nexport interface StaticIrEdge {\n readonly edgeId: string\n readonly from: string\n readonly to: string\n readonly kind: string\n}\n\nexport interface StaticIr {\n readonly version: string\n readonly moduleId: string\n /**\n * Stable digest (for drift detection / diffing): determined solely by the current export structure.\n */\n readonly digest: string\n readonly nodes: ReadonlyArray<StaticIrNode>\n readonly edges: ReadonlyArray<StaticIrEdge>\n readonly conflicts?: ReadonlyArray<unknown>\n}\n\nconst normalizeFieldPaths = (paths: ReadonlyArray<string> | undefined): ReadonlyArray<FieldPath> => {\n if (!paths || paths.length === 0) return []\n const out: Array<FieldPath> = []\n for (const path of paths) {\n const normalized = CanonicalFieldPath.normalizeFieldPath(path)\n if (normalized) out.push(normalized)\n }\n return out\n}\n\nconst normalizeFieldPath = (path: string | undefined): FieldPath | undefined =>\n path ? CanonicalFieldPath.normalizeFieldPath(path) : undefined\n\nconst toNodeKind = (step: StateTraitPlanStep): string => {\n switch (step.kind) {\n case 'computed-update':\n return 'computed'\n case 'link-propagate':\n return 'link'\n case 'source-refresh':\n return 'source'\n case 'check-validate':\n return 'check'\n }\n}\n\nconst findEntryForStep = (\n program: StateTraitProgram<any>,\n step: StateTraitPlanStep,\n): StateTraitEntry<any, string> | undefined => {\n const fieldPath = step.targetFieldPath\n if (!fieldPath) return undefined\n const kind = toNodeKind(step)\n return program.entries.find(\n (e) =>\n e.fieldPath === fieldPath &&\n (e.kind === kind ||\n (kind === 'check' && e.kind === 'check') ||\n (kind === 'source' && e.kind === 'source') ||\n (kind === 'link' && e.kind === 'link') ||\n (kind === 'computed' && e.kind === 'computed')),\n )\n}\n\nconst getReadsForEntry = (entry: StateTraitEntry<any, string> | undefined): ReadonlyArray<string> | undefined => {\n if (!entry) return undefined\n if (entry.kind === 'computed') {\n return (entry.meta as any).deps as ReadonlyArray<string> | undefined\n }\n if (entry.kind === 'source') {\n return (entry.meta as any).deps as ReadonlyArray<string> | undefined\n }\n if (entry.kind === 'link') {\n const from = (entry.meta as any).from as string | undefined\n return from ? [from] : []\n }\n if (entry.kind === 'check') {\n const rules = ((entry.meta as any)?.rules ?? {}) as Record<string, any>\n const out: Array<string> = []\n for (const name of Object.keys(rules)) {\n const rule = rules[name]\n const deps = rule?.deps as ReadonlyArray<string> | undefined\n if (deps) out.push(...deps)\n }\n return out\n }\n return undefined\n}\n\nexport const exportStaticIr = (params: {\n readonly program: StateTraitProgram<any>\n readonly moduleId: string\n readonly version?: string\n}): StaticIr => {\n const moduleId = params.moduleId\n const version = params.version ?? '009'\n\n const metaByField = new Map<\n string,\n {\n readonly label?: string\n readonly description?: string\n readonly tags?: ReadonlyArray<string>\n readonly group?: string\n readonly docsUrl?: string\n readonly cacheGroup?: string\n readonly annotations?: Record<string, unknown>\n }\n >()\n for (const node of params.program.graph.nodes) {\n const meta = node.meta as any\n if (!meta || typeof meta !== 'object') continue\n const label = typeof meta.label === 'string' ? meta.label : undefined\n const description = typeof meta.description === 'string' ? meta.description : undefined\n const tags =\n Array.isArray(meta.tags) && meta.tags.every((t: unknown) => typeof t === 'string')\n ? (meta.tags as ReadonlyArray<string>)\n : undefined\n const group = typeof meta.group === 'string' ? meta.group : undefined\n const docsUrl = typeof meta.docsUrl === 'string' ? meta.docsUrl : undefined\n const cacheGroup = typeof meta.cacheGroup === 'string' ? meta.cacheGroup : undefined\n\n const annotationsRaw = meta.annotations\n const annotations =\n annotationsRaw && typeof annotationsRaw === 'object' && !Array.isArray(annotationsRaw)\n ? (annotationsRaw as Record<string, unknown>)\n : undefined\n\n if (label || description || tags || group || docsUrl || cacheGroup || annotations) {\n metaByField.set(node.id, {\n label,\n description,\n tags,\n group,\n docsUrl,\n cacheGroup,\n annotations,\n })\n }\n }\n\n const nodes: Array<StaticIrNode> = params.program.plan.steps.map((step) => {\n const kind = toNodeKind(step)\n const entry = findEntryForStep(params.program, step)\n const reads = normalizeFieldPaths(getReadsForEntry(entry))\n\n const target = step.targetFieldPath\n const write = normalizeFieldPath(target)\n const writes = write ? [write] : []\n\n const meta = target ? metaByField.get(target) : undefined\n\n const base: StaticIrNode = {\n nodeId: step.id,\n kind,\n reads,\n writes: kind === 'check' ? [] : writes,\n meta,\n }\n\n if (kind !== 'check' && target && !write) {\n return { ...base, writesUnknown: true }\n }\n return base\n })\n\n const edges: Array<StaticIrEdge> = params.program.graph.edges.map((edge) => ({\n edgeId: edge.id,\n from: edge.from,\n to: edge.to,\n kind: edge.kind,\n }))\n\n const base = {\n version,\n moduleId,\n nodes,\n edges,\n } as const\n\n const digest = `stir:${version}:${fnv1a32(stableStringify(base))}`\n\n return {\n ...base,\n digest,\n }\n}\n","import type { StateTraitProgram } from '../state-trait/model.js'\nimport { isDevEnv } from '../runtime/core/env.js'\nimport { exportStaticIr } from '../state-trait/ir.js'\n\n// Debug/Devtools only: records StateTraitProgram by moduleId.\n// - Not used for runtime behavior decisions.\n// - In production, stores nothing by default to avoid extra memory footprint.\n\nconst programsByIdAndDigest = new Map<string, Map<string, StateTraitProgram<any>>>()\n\nconst latestDigestById = new Map<string, string>()\n\n// Devtools-only: avoid unbounded growth when build/reflection generates many Programs.\nconst MAX_VERSIONS_PER_MODULE = 8\n\nexport const registerModuleProgram = (moduleId: string, program: StateTraitProgram<any>): void => {\n if (!isDevEnv()) {\n // Production: do not register by default to avoid long-lived Program indexes.\n // If Devtools is needed in production, adjust via env vars or build-time configuration.\n return\n }\n\n const ir = exportStaticIr({ program, moduleId, version: '009' })\n const digest = ir.digest\n\n let versions = programsByIdAndDigest.get(moduleId)\n if (!versions) {\n versions = new Map()\n programsByIdAndDigest.set(moduleId, versions)\n }\n\n versions.set(digest, program)\n latestDigestById.set(moduleId, digest)\n\n if (versions.size > MAX_VERSIONS_PER_MODULE) {\n const oldest = versions.keys().next().value as string | undefined\n if (oldest) versions.delete(oldest)\n }\n}\n\nexport const getModuleProgramById = (moduleId: string): StateTraitProgram<any> | undefined => {\n const latestDigest = latestDigestById.get(moduleId)\n if (!latestDigest) return undefined\n return programsByIdAndDigest.get(moduleId)?.get(latestDigest)\n}\n\nexport const getModuleProgramByIdAndDigest = (moduleId: string, digest: string): StateTraitProgram<any> | undefined =>\n programsByIdAndDigest.get(moduleId)?.get(digest)\n\nexport const getModuleProgramDigestsById = (moduleId: string): ReadonlyArray<string> =>\n Array.from(programsByIdAndDigest.get(moduleId)?.keys() ?? [])\n","import { isDevEnv } from './env.js'\nimport type { RuntimeInternals } from './RuntimeInternals.js'\n\nconst RUNTIME_INTERNALS = Symbol.for('@logixjs/core/runtimeInternals')\nconst BOUND_INTERNALS = Symbol.for('@logixjs/core/boundInternals')\nconst MODULE_TRAITS_PROGRAM = Symbol.for('@logixjs/core/moduleTraitsProgram')\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 setRuntimeInternals = (runtime: object, internals: RuntimeInternals): void => {\n defineHidden(runtime, RUNTIME_INTERNALS, internals)\n}\n\nexport const setBoundInternals = (bound: object, internals: RuntimeInternals): void => {\n defineHidden(bound, BOUND_INTERNALS, internals)\n}\n\n/**\n * ModuleTraitsProgram(StateTraitProgram):\n * - Attaches a traits Program to a module definition object (used by TraitLifecycle/Debug).\n * - Uses Symbol + non-enumerable properties to avoid spreading `.__*` magic fields.\n *\n * Note: this is a \"module-definition-side\" internal slot, not RuntimeInternals (instance-level); the semantics differ.\n */\nexport const setModuleTraitsProgram = (module: object, program: unknown): void => {\n defineHidden(module, MODULE_TRAITS_PROGRAM, program)\n}\n\nexport const getModuleTraitsProgram = (module: unknown): unknown | undefined => {\n if (!module) return undefined\n if (typeof module !== 'object' && typeof module !== 'function') return undefined\n return (module as any)[MODULE_TRAITS_PROGRAM] as unknown | undefined\n}\n\nconst formatScope = (moduleId: unknown, instanceId: unknown): string => {\n const m = typeof moduleId === 'string' && moduleId.length > 0 ? moduleId : 'unknown'\n const i = typeof instanceId === 'string' && instanceId.length > 0 ? instanceId : 'unknown'\n return `moduleId=${m}, instanceId=${i}`\n}\n\nexport const getRuntimeInternals = (runtime: object): RuntimeInternals => {\n const scope = runtime as { readonly moduleId?: unknown; readonly instanceId?: unknown }\n const internals = (runtime as any)[RUNTIME_INTERNALS] as RuntimeInternals | undefined\n if (!internals) {\n const msg = isDevEnv()\n ? [\n '[MissingRuntimeInternals] Runtime internals not installed on ModuleRuntime instance.',\n `scope: ${formatScope(scope.moduleId, scope.instanceId)}`,\n 'fix:',\n '- Ensure ModuleRuntime.make calls internalHooks.installInternalHooks (020 foundation).',\n '- If you created a mock runtime for tests, attach internals or avoid calling internal-only APIs.',\n ].join('\\n')\n : 'Runtime internals not installed'\n throw new Error(msg)\n }\n\n const runtimeInstanceId = scope.instanceId\n if (\n typeof runtimeInstanceId === 'string' &&\n runtimeInstanceId.length > 0 &&\n runtimeInstanceId !== internals.instanceId\n ) {\n throw new Error(\n isDevEnv()\n ? [\n '[InconsistentRuntimeInternals] Runtime internals instanceId mismatch.',\n `runtime: ${formatScope(scope.moduleId, runtimeInstanceId)}`,\n `internals: ${formatScope(internals.moduleId, internals.instanceId)}`,\n ].join('\\n')\n : 'Runtime internals mismatch',\n )\n }\n\n return internals\n}\n\nexport const getBoundInternals = (bound: object): RuntimeInternals => {\n const internals = (bound as any)[BOUND_INTERNALS] as RuntimeInternals | undefined\n if (!internals) {\n const msg = isDevEnv()\n ? [\n '[MissingBoundInternals] Bound internals not installed on Bound API instance.',\n 'fix:',\n '- Ensure BoundApiRuntime attaches internals (020 foundation).',\n '- If you created a mock bound for tests, attach internals or avoid calling internal-only APIs.',\n ].join('\\n')\n : 'Bound internals not installed'\n throw new Error(msg)\n }\n\n return internals\n}\n","import { Effect, FiberRef, Layer, Schema } from 'effect'\nimport * as Logic from './Logic.js'\nimport * as Action from './internal/action.js'\nimport * as ModuleFactory from './internal/runtime/ModuleFactory.js'\nimport type { FieldPath } from './internal/field-path.js'\nimport { mutateWithoutPatches, mutateWithPatchPaths } from './internal/runtime/core/mutativePatches.js'\nimport { getBoundInternals, setModuleTraitsProgram } from './internal/runtime/core/runtimeInternalsAccessor.js'\nimport * as Debug from './internal/runtime/core/DebugSink.js'\nimport * as LogicUnitMeta from './internal/runtime/core/LogicUnitMeta.js'\nimport type {\n ActionsFromMap,\n AnyModuleShape,\n AnySchema,\n BoundApi,\n ActionOf,\n ModuleImpl,\n ModuleLogic,\n ModuleShape,\n ModuleRuntime,\n ModuleTag,\n ModuleHandle,\n ModuleHandleUnion,\n StateChangeWithMeta,\n StateCommitMeta,\n StateCommitMode,\n StateCommitPriority,\n ReducersFromMap,\n StateOf,\n} from './internal/module.js'\nimport * as StateTrait from './StateTrait.js'\nimport type { StateTraitProgram } from './StateTrait.js'\nimport * as ModuleTraitsRegistry from './internal/debug/ModuleTraitsRegistry.js'\nimport * as ModuleTraits from './internal/runtime/core/ModuleTraits.js'\n\ntype NoInfer_<T> = [T][T extends any ? 0 : never]\n\n/**\n * Public exports for core type definitions such as ModuleTag / ModuleRuntime / ModuleImpl.\n *\n * Kept aligned with `.codex/skills/project-guide/references/runtime-logix/logix-core/api/02-module-and-logic-api.md`.\n * Concrete type definitions live in internal/module.ts; this module wires the factory implementation.\n */\nexport type {\n AnySchema,\n AnyModuleShape,\n ModuleShape,\n ModuleLogic,\n ModuleImpl,\n ModuleRuntime,\n ModuleTag,\n ModuleHandle,\n ModuleHandleUnion,\n StateOf,\n ActionsFromMap,\n ReducersFromMap,\n BoundApi,\n ActionOf,\n StateCommitMode,\n StateCommitPriority,\n StateCommitMeta,\n StateChangeWithMeta,\n} from './internal/module.js'\n\n/**\n * Reducer helper:\n * - `Reducer.mutate` provides the same mutative style as `$.state.mutate`.\n * - Internally uses mutative-based immutable updates to map \"in-place draft mutation\" into a pure `(state, action) => state`.\n *\n * @example\n *\n * const Counter = Logix.ModuleTag.make(\"Counter\", {\n * state: CounterState,\n * actions: CounterActions,\n * reducers: {\n * inc: Logix.ModuleTag.Reducer.mutate((draft, _payload) => {\n * draft.count += 1\n * }),\n * },\n * })\n *\n * yield* $.reducer(\n * \"setValue\",\n * Logix.ModuleTag.Reducer.mutate((draft, payload) => {\n * draft.value = payload\n * }),\n * )\n */\nexport const Reducer = {\n mutate:\n <S, A extends { readonly payload?: any }>(\n mutator: (draft: Logic.Draft<S>, payload: A['payload']) => void,\n ): ((state: S, action: A, sink?: (path: string | FieldPath) => void) => S) =>\n (state, action, sink) => {\n const payload = (action as any)?.payload as A['payload']\n if (!sink) {\n return mutateWithoutPatches(state as S, (draft) => {\n mutator(draft as Logic.Draft<S>, payload)\n })\n }\n\n const { nextState, patchPaths } = mutateWithPatchPaths(state as S, (draft) => {\n mutator(draft as Logic.Draft<S>, payload)\n })\n\n for (const path of patchPaths) {\n sink(path)\n }\n\n return nextState\n },\n\n mutateMap: <\n R extends Readonly<\n Record<string, ((state: any, action: any, sink?: (path: string | FieldPath) => void) => any) | undefined>\n >,\n >(mutators: {\n readonly [K in keyof NoInfer_<R>]?: (\n draft: Logic.Draft<Parameters<NonNullable<NoInfer_<R>[K]>>[0]>,\n payload: Parameters<NonNullable<NoInfer_<R>[K]>>[1] extends { readonly payload: infer P }\n ? P\n : Parameters<NonNullable<NoInfer_<R>[K]>>[1] extends { readonly payload?: infer P }\n ? P | undefined\n : never,\n ) => void\n }): R => {\n const out: Record<string, unknown> = {}\n for (const key of Object.keys(mutators)) {\n const mutator = (mutators as any)[key]\n if (typeof mutator !== 'function') continue\n out[key] = Reducer.mutate(mutator as any)\n }\n return out as any\n },\n}\n\n/**\n * A simplified Shape definition helper, designed for Action Maps.\n * @example type MyShape = Shape<typeof MyState, typeof MyActionMap>\n */\nexport type Shape<S extends AnySchema, M extends Record<string, AnySchema>> = ModuleShape<\n S,\n Schema.Schema<ActionsFromMap<Action.NormalizedActionTokens<M & Action.ActionDefs>>>,\n Action.NormalizedActionTokens<M & Action.ActionDefs>\n>\n\nconst makeImpl = <Id extends string, SSchema extends AnySchema, AMap extends Record<string, Action.AnyActionToken>>(\n id: Id,\n def: {\n readonly state: SSchema\n readonly actions: AMap\n readonly reducers?: ReducersFromMap<SSchema, AMap>\n },\n): ModuleTag<Id, ModuleShape<SSchema, Schema.Schema<ActionsFromMap<AMap>>, AMap>> =>\n ModuleFactory.Module(id, def) as ModuleTag<Id, ModuleShape<SSchema, Schema.Schema<ActionsFromMap<AMap>>, AMap>>\n\n/**\n * ModuleTag.make:\n * - Defines a domain module Tag using the given id and state/actions/reducers.\n * - The returned ModuleTag is both a Context.Tag and a factory carrying its Shape.\n *\n * Note: since 022, the old `Module` (Tag identity) was renamed to `ModuleTag`; use `Logix.Module` for module definition objects.\n */\nexport const make = <Id extends string, SSchema extends AnySchema, ADefs extends Action.ActionDefs>(\n id: Id,\n def: {\n readonly state: SSchema\n readonly actions: ADefs\n readonly reducers?: ReducersFromMap<SSchema, ADefs>\n /**\n * traits:\n * - Used to attach a StateTraitSpec (see specs/000-module-traits-runtime).\n * - The current implementation builds a Program during ModuleTag.make, and injects a setup-only Logic in `ModuleTag.implement`\n * to call `StateTrait.install`.\n * (Note: if you use `ModuleTag.live` to export a Layer and want trait behavior, call `StateTrait.install` explicitly in logics,\n * or use `ModuleTag.implement` instead.)\n */\n readonly traits?: unknown\n },\n): ModuleTag<\n Id,\n ModuleShape<\n SSchema,\n Schema.Schema<ActionsFromMap<Action.NormalizedActionTokens<ADefs>>>,\n Action.NormalizedActionTokens<ADefs>\n >\n> => {\n const actions = Action.normalizeActions(def.actions)\n const moduleTag = makeImpl(id, {\n state: def.state,\n actions,\n reducers: def.reducers as any,\n })\n\n type Sh = ModuleShape<\n SSchema,\n Schema.Schema<ActionsFromMap<Action.NormalizedActionTokens<ADefs>>>,\n Action.NormalizedActionTokens<ADefs>\n >\n\n const stateSchema = def.state as Schema.Schema<any, any>\n const moduleTraitsSpec = def.traits as StateTrait.StateTraitSpec<any> | undefined\n const baseProgram: StateTraitProgram<any> | undefined = moduleTraitsSpec\n ? StateTrait.build(stateSchema as any, moduleTraitsSpec as any)\n : undefined\n\n if (baseProgram) {\n // For TraitLifecycle/Debug/Devtools reads (definition-side hidden slot).\n setModuleTraitsProgram(moduleTag as any, baseProgram)\n ModuleTraitsRegistry.registerModuleProgram(id, baseProgram as StateTraitProgram<any>)\n }\n\n // 023: consolidate the trait \"declaration/merge entry points\" into the setup phase:\n // - module-level traits register as contributions first;\n // - logic-level declares via $.traits.declare;\n // - finally, finalize → freeze → build/install in one shot.\n\n const makeModuleTraitsContributionLogic = (traits: unknown): ModuleLogic<Sh, never, never> => {\n const logic = moduleTag.logic(($) => ({\n setup: Effect.sync(() => {\n if (!traits || typeof traits !== 'object') return\n // module-level provenance uses moduleId as the stable anchor\n // (aligned with 023 data-model: originType=module, originId=moduleId).\n // Note: traitsSpec still reuses StateTraitSpec; do not introduce a second IR.\n const internals = getBoundInternals($ as any)\n internals.traits.registerModuleTraitsContribution({\n traits,\n provenance: {\n originType: 'module',\n originId: id,\n originIdKind: 'explicit',\n originLabel: `module:${id}`,\n },\n })\n }),\n run: Effect.void,\n })) as ModuleLogic<Sh, never, never>\n\n LogicUnitMeta.attachLogicUnitMeta(logic as any, {\n id: '__logix_internal:traits:module_contrib',\n kind: 'internal',\n name: 'traits:module_contrib',\n moduleId: id,\n })\n return logic\n }\n\n const makeFinalizeTraitsLogic = (): ModuleLogic<Sh, never, never> => {\n const logic = moduleTag.logic(($) => ({\n setup: Effect.gen(function* () {\n const internals = getBoundInternals($ as any)\n const diagnosticsLevel = yield* FiberRef.get(Debug.currentDiagnosticsLevel)\n\n const contributions = internals.traits.getModuleTraitsContributions()\n let merged: ModuleTraits.TraitSpec\n let snapshot: ModuleTraits.ModuleTraitsSnapshot\n\n try {\n ;({ merged, snapshot } = ModuleTraits.finalizeTraitContributions({\n moduleId: id,\n contributions,\n }))\n } catch (cause) {\n if (\n diagnosticsLevel !== 'off' &&\n cause &&\n typeof cause === 'object' &&\n (cause as any)._tag === 'ModuleTraitsConflictError'\n ) {\n const conflicts = Array.isArray((cause as any).conflicts)\n ? ((cause as any).conflicts as ReadonlyArray<unknown>)\n : []\n const traitIds = conflicts\n .map((c: any) => (c && typeof c === 'object' ? (c as any).traitId : undefined))\n .filter((t): t is string => typeof t === 'string' && t.length > 0)\n .slice(0, 20)\n\n const data =\n diagnosticsLevel === 'full'\n ? {\n conflictCount: conflicts.length,\n conflicts,\n }\n : {\n conflictCount: conflicts.length,\n traitIds,\n }\n\n yield* Debug.record({\n type: 'trace:module:traits:conflict',\n moduleId: id,\n instanceId: internals.instanceId,\n data,\n } as any)\n }\n\n throw cause\n }\n\n internals.traits.setModuleTraitsSnapshot(snapshot)\n internals.traits.freezeModuleTraits()\n\n if (diagnosticsLevel !== 'off') {\n const data =\n diagnosticsLevel === 'full'\n ? {\n digest: snapshot.digest,\n count: snapshot.traits.length,\n traits: snapshot.traits,\n provenanceIndex: snapshot.provenanceIndex,\n }\n : {\n digest: snapshot.digest,\n count: snapshot.traits.length,\n }\n\n yield* Debug.record({\n type: 'trace:module:traits',\n moduleId: id,\n instanceId: internals.instanceId,\n data,\n } as any)\n }\n\n if (Object.keys(merged).length === 0) {\n return\n }\n\n const onlyModuleLevel = contributions.length === 1 && contributions[0]?.provenance?.originType === 'module'\n\n // Build a one-shot Program from the final merged Spec, and install it during initialization.\n // - If there is only a module-level contribution, reuse the program built in ModuleTag.make (useful for Debug/TraitLifecycle).\n const program =\n onlyModuleLevel && baseProgram ? baseProgram : StateTrait.build(stateSchema as any, merged as any)\n\n // For TraitLifecycle/Debug/Devtools reads (definition-side hidden slot).\n setModuleTraitsProgram(moduleTag as any, program)\n ModuleTraitsRegistry.registerModuleProgram(id, program as StateTraitProgram<any>)\n\n yield* StateTrait.install($ as unknown as BoundApi<any, any>, program)\n }),\n run: Effect.void,\n })) as ModuleLogic<Sh, never, never>\n\n LogicUnitMeta.attachLogicUnitMeta(logic as any, {\n id: '__logix_internal:traits:finalize',\n kind: 'internal',\n name: 'traits:finalize',\n moduleId: id,\n })\n\n return logic\n }\n\n // Wrap implement: inject (1) optional module-level contribution logic, and (2) required finalize+install logic.\n const originalImplement = moduleTag.implement\n ;(moduleTag as any).implement = (<R = never>(config: {\n initial: StateOf<typeof moduleTag.shape>\n logics?: Array<ModuleLogic<typeof moduleTag.shape, R, any>>\n imports?: ReadonlyArray<Layer.Layer<any, any, any> | ModuleImpl<any, AnyModuleShape, any>>\n processes?: ReadonlyArray<Effect.Effect<void, any, any>>\n }) => {\n const userLogics = (config.logics ?? []) as Array<ModuleLogic<typeof moduleTag.shape, R, any>>\n\n const moduleLevel = def.traits ? [makeModuleTraitsContributionLogic(def.traits) as any] : []\n\n const finalize = makeFinalizeTraitsLogic() as ModuleLogic<typeof moduleTag.shape, R, any>\n\n const mergedLogics = [...moduleLevel, ...userLogics, finalize]\n\n return originalImplement<R>({\n ...config,\n logics: mergedLogics,\n })\n }) as typeof moduleTag.implement\n\n return moduleTag\n}\n","import { Schema } from 'effect'\n\ntype ActionArgs<P> = [P] extends [void] ? [] | [P] : [P]\ntype ActionFn<P, Out> = (...args: ActionArgs<P>) => Out\n\ntype DevSource = {\n readonly file: string\n readonly line: number\n readonly column: number\n}\n\nexport type ActionValue<Tag extends string, Payload> = Payload extends void\n ? {\n readonly _tag: Tag\n readonly payload?: Payload\n }\n : {\n readonly _tag: Tag\n readonly payload: Payload\n }\n\nexport type ActionCreator<Tag extends string, Payload> = ActionFn<Payload, ActionValue<Tag, Payload>>\n\nexport type ActionToken<\n Tag extends string,\n Payload,\n PayloadSchema extends Schema.Schema<any, any, any> = Schema.Schema<any, any, any>,\n> = ActionCreator<Tag, Payload> & {\n readonly _kind: 'ActionToken'\n readonly tag: Tag\n readonly schema: PayloadSchema\n readonly source?: DevSource\n}\n\nexport type AnyActionToken = ActionToken<string, any, Schema.Schema<any, any, any>>\n\nexport const isActionToken = (value: unknown): value is AnyActionToken =>\n typeof value === 'function' &&\n (value as any)._kind === 'ActionToken' &&\n typeof (value as any).tag === 'string' &&\n Schema.isSchema((value as any).schema)\n\nexport const make = <Tag extends string, PayloadSchema extends Schema.Schema<any, any, any>>(\n tag: Tag,\n schema: PayloadSchema,\n options?: { readonly source?: DevSource },\n): ActionToken<Tag, Schema.Schema.Type<PayloadSchema>, PayloadSchema> => {\n const fn = ((...args: readonly [unknown?]) => ({\n _tag: tag,\n payload: args[0],\n })) as unknown as ActionToken<Tag, Schema.Schema.Type<PayloadSchema>, PayloadSchema>\n\n ;(fn as any)._kind = 'ActionToken'\n ;(fn as any).tag = tag\n ;(fn as any).schema = schema\n if (options?.source) {\n ;(fn as any).source = options.source\n }\n\n return fn\n}\n\nexport const makeActions = <M extends Record<string, Schema.Schema<any, any, any>>>(\n schemas: M,\n options?: {\n readonly source?: DevSource\n readonly sources?: Partial<Record<Extract<keyof M, string>, DevSource>>\n },\n): {\n readonly [K in keyof M]: ActionToken<Extract<K, string>, Schema.Schema.Type<M[K]>, M[K]>\n} => {\n const out: Record<string, AnyActionToken> = {}\n const sources = options?.sources as Record<string, DevSource | undefined> | undefined\n const defaultSource = options?.source\n for (const [key, schema] of Object.entries(schemas)) {\n const source = sources?.[key] ?? defaultSource\n out[key] = make(key, schema, source ? { source } : undefined)\n }\n return out as any\n}\n\nexport type ActionDef = Schema.Schema<any, any, any> | AnyActionToken\nexport type ActionDefs = Record<string, ActionDef>\n\nexport type NormalizedActionTokens<M extends ActionDefs> = {\n readonly [K in keyof M]: M[K] extends Schema.Schema<any, any, any>\n ? ActionToken<Extract<K, string>, Schema.Schema.Type<M[K]>, M[K]>\n : M[K] extends ActionToken<any, infer P, infer S>\n ? ActionToken<Extract<K, string>, P, S>\n : never\n}\n\nexport const normalizeActions = <M extends ActionDefs>(defs: M): NormalizedActionTokens<M> => {\n const out: Record<string, AnyActionToken> = {}\n\n for (const [key, def] of Object.entries(defs)) {\n if (Schema.isSchema(def)) {\n out[key] = make(key, def)\n continue\n }\n\n if (isActionToken(def)) {\n if (def.tag !== key) {\n throw new Error(`[Logix.Action] actionTag MUST equal key: key=\"${key}\", token.tag=\"${def.tag}\"`)\n }\n out[key] = def\n continue\n }\n\n throw new Error(`[Logix.Action] invalid action def for key \"${key}\"`)\n }\n\n return out as any\n}\n","import { Context, Effect, Layer, Option, Schema } from 'effect'\nimport * as ModuleRuntimeImpl from './ModuleRuntime.js'\nimport * as BoundApiRuntime from './BoundApiRuntime.js'\nimport * as LogicDiagnostics from './core/LogicDiagnostics.js'\nimport * as LogicPlanMarker from './core/LogicPlanMarker.js'\nimport type * as Action from '../action.js'\nimport type { FieldPath } from '../field-path.js'\nimport type {\n AnyModuleShape,\n AnySchema,\n ActionsFromMap,\n ModuleTag as LogixModuleTag,\n ModuleShape,\n ReducersFromMap,\n StateOf,\n ActionOf,\n ModuleHandle,\n ModuleLogic,\n ModuleImpl,\n ModuleImplementStateTransactionOptions,\n} from './core/module.js'\n\n/**\n * v3: Link (formerly Orchestrator)\n * A glue layer for cross-module collaboration.\n *\n * - Does not own its own State.\n * - Can access multiple Modules' readonly handles.\n * - Can define Logic only; cannot define State/Action.\n */\nexport function Link<Modules extends Record<string, LogixModuleTag<any, AnyModuleShape>>, E = never, R = never>(\n modules: Modules,\n logic: ($: { [K in keyof Modules]: ModuleHandle<Modules[K]['shape']> }) => Effect.Effect<void, E, R>,\n): Effect.Effect<void, E, R> {\n return Effect.gen(function* () {\n const handles: Record<string, ModuleHandle<AnyModuleShape>> = {}\n\n for (const [key, module] of Object.entries(modules)) {\n const runtime = yield* module\n\n handles[key] = {\n read: (selector: any) => Effect.map(runtime.getState, selector),\n changes: runtime.changes,\n dispatch: runtime.dispatch,\n actions$: runtime.actions$,\n actions: new Proxy(\n {},\n {\n get: (_target, prop) => (payload: any) => runtime.dispatch({ _tag: prop as string, payload }),\n },\n ),\n }\n }\n\n return yield* logic(\n handles as {\n [K in keyof Modules]: ModuleHandle<Modules[K]['shape']>\n },\n )\n })\n}\n\n/**\n * Module factory implementation: construct a ModuleTag from an id and Schema definitions.\n */\nexport function Module<Id extends string, SSchema extends AnySchema, AMap extends Record<string, Action.AnyActionToken>>(\n id: Id,\n def: {\n readonly state: SSchema\n readonly actions: AMap\n readonly reducers?: ReducersFromMap<SSchema, AMap>\n },\n): LogixModuleTag<Id, ModuleShape<SSchema, Schema.Schema<ActionsFromMap<AMap>>, AMap>> {\n const shape: ModuleShape<SSchema, Schema.Schema<ActionsFromMap<AMap>>, AMap> = {\n stateSchema: def.state,\n actionSchema: Schema.Union(\n ...Object.entries(def.actions).map(([tag, token]) => {\n const payload = (token as Action.AnyActionToken).schema as AnySchema\n return Schema.Struct(\n payload === Schema.Void\n ? {\n _tag: Schema.Literal(tag),\n payload: Schema.optional(payload),\n }\n : {\n _tag: Schema.Literal(tag),\n payload,\n },\n )\n }),\n ) as unknown as Schema.Schema<ActionsFromMap<AMap>>,\n actionMap: def.actions,\n }\n\n type ShapeState = StateOf<typeof shape>\n type ShapeAction = ActionOf<typeof shape>\n\n // Normalize tag-keyed reducers into `_tag -> (state, action, sink?) => state` for the runtime.\n const reducers =\n def.reducers &&\n (Object.fromEntries(\n Object.entries(def.reducers).map(([tag, reducer]) => [\n tag,\n (state: ShapeState, action: ShapeAction, sink?: (path: string | FieldPath) => void) =>\n // Relies on the runtime `_tag` convention: only actions matching the current tag are routed to this reducer.\n (reducer as any)(\n state,\n action as {\n readonly _tag: string\n readonly payload: unknown\n },\n sink,\n ) as ShapeState,\n ]),\n ) as Record<\n string,\n (state: ShapeState, action: ShapeAction, sink?: (path: string | FieldPath) => void) => ShapeState\n >)\n\n class ModuleTag extends Context.Tag(`@logixjs/Module/${id}`)<\n ModuleTag,\n import('./core/module.js').ModuleRuntime<StateOf<typeof shape>, ActionOf<typeof shape>>\n >() {}\n\n const tag = ModuleTag\n\n const moduleTag = Object.assign(tag, {\n _kind: 'ModuleTag' as const,\n id,\n shape,\n stateSchema: shape.stateSchema,\n actionSchema: shape.actionSchema,\n actions: shape.actionMap,\n reducers: def.reducers,\n /**\n * Build a Logic program for the current Module:\n * - Read its ModuleRuntime from Context at runtime.\n * - Build a BoundApi from the runtime.\n * - Pass the BoundApi to the caller to build business logic.\n */\n logic: <R = unknown, E = never>(\n build: (api: import('./core/module.js').BoundApi<typeof shape, R>) => ModuleLogic<typeof shape, R, E>,\n ): ModuleLogic<typeof shape, R, E> => {\n const logicEffect = Effect.gen(function* () {\n const runtime = yield* tag\n const logicUnit = yield* Effect.serviceOption(LogicDiagnostics.LogicUnitServiceTag).pipe(\n Effect.map(Option.getOrUndefined),\n )\n const phaseService = yield* Effect.serviceOption(LogicDiagnostics.LogicPhaseServiceTag).pipe(\n Effect.map(Option.getOrUndefined),\n )\n const api = BoundApiRuntime.make<typeof shape, R>(shape, runtime, {\n getPhase: () => phaseService?.current ?? 'run',\n phaseService,\n moduleId: id,\n logicUnit,\n })\n\n let built: unknown\n try {\n built = build(api)\n } catch (err) {\n // Convert synchronously thrown LogicPhaseError into Effect.fail so runSync won't treat it as an \"async pending fiber\".\n if ((err as any)?._tag === 'LogicPhaseError') {\n return yield* Effect.fail(err as any)\n }\n throw err\n }\n\n if (LogicPlanMarker.isLogicPlanEffect(built)) {\n return yield* built as Effect.Effect<any, any, any>\n }\n\n const isLogicPlan = (value: unknown): value is import('./core/module.js').LogicPlan<typeof shape, R, E> =>\n Boolean(value && typeof value === 'object' && 'setup' in (value as any) && 'run' in (value as any))\n\n const plan = isLogicPlan(built)\n ? built\n : ({\n setup: Effect.void,\n run: built as Effect.Effect<any, any, any>,\n } satisfies import('./core/module.js').LogicPlan<typeof shape, R, E>)\n\n return plan\n })\n\n LogicPlanMarker.markAsLogicPlanEffect(logicEffect)\n return logicEffect\n },\n\n /**\n * live: given an initial state and a set of logics, construct a scoped ModuleRuntime Layer.\n *\n * Env conventions:\n * - R represents extra environment required by the logics (services / platform, etc.).\n * - ModuleRuntime itself only depends on Scope.Scope and is managed by Layer.scoped.\n */\n live: <R = never, E = never>(\n initial: StateOf<typeof shape>,\n ...logics: Array<ModuleLogic<typeof shape, R, E>>\n ): Layer.Layer<import('./core/module.js').ModuleRuntime<StateOf<typeof shape>, ActionOf<typeof shape>>, E, R> =>\n Layer.scoped(\n tag,\n ModuleRuntimeImpl.make<StateOf<typeof shape>, ActionOf<typeof shape>, R>(initial, {\n tag,\n logics: logics as ReadonlyArray<Effect.Effect<any, any, any>>,\n moduleId: id,\n reducers,\n }),\n ) as unknown as Layer.Layer<\n import('./core/module.js').ModuleRuntime<StateOf<typeof shape>, ActionOf<typeof shape>>,\n E,\n R\n >,\n\n /**\n * implement: build a ModuleImpl blueprint from Module definition + initial state + a set of logics.\n *\n * - R represents the Env required by the logics.\n * - The returned ModuleImpl.layer carries R as its input environment.\n * - withLayer/withLayers can progressively narrow R to a more concrete Env (even never).\n */\n implement: <R = never>(config: {\n initial: StateOf<typeof shape>\n logics?: Array<ModuleLogic<typeof shape, R, never>>\n imports?: ReadonlyArray<Layer.Layer<any, any, any> | ModuleImpl<any, AnyModuleShape, any>>\n /**\n * processes: a set of long-lived flows bound to this Module implementation (including Link).\n *\n * - These Effects will be forked by the runtime container (e.g. Runtime.make).\n * - Types use relaxed E/R to enable composing cross-module orchestration logic.\n * - Business code typically builds these flows via Link.make.\n */\n processes?: ReadonlyArray<Effect.Effect<void, any, any>>\n /**\n * stateTransaction: module-level StateTransaction config.\n *\n * - If instrumentation is not provided, fall back to Runtime-level config (if any) or NODE_ENV defaults.\n * - If instrumentation is provided, it takes precedence over Runtime-level config and defaults.\n */\n stateTransaction?: ModuleImplementStateTransactionOptions\n }): ModuleImpl<Id, ModuleShape<SSchema, Schema.Schema<ActionsFromMap<AMap>>, AMap>, R> => {\n const importedModules = (config.imports ?? []).flatMap((item) => {\n if ((item as ModuleImpl<any, AnyModuleShape, any>)._tag === 'ModuleImpl') {\n return [\n (item as ModuleImpl<any, AnyModuleShape, any>).module as unknown as Context.Tag<\n any,\n import('./core/module.js').ModuleRuntime<any, any>\n >,\n ]\n }\n return []\n })\n\n const baseLayer = Layer.scoped(\n tag,\n ModuleRuntimeImpl.make<StateOf<typeof shape>, ActionOf<typeof shape>, R>(config.initial, {\n tag,\n logics: (config.logics || []) as ReadonlyArray<Effect.Effect<any, any, any>>,\n processes: (config.processes || []) as ReadonlyArray<Effect.Effect<void, any, any>>,\n moduleId: id,\n imports: importedModules,\n reducers,\n stateTransaction: config.stateTransaction,\n }),\n ) as unknown as Layer.Layer<\n import('./core/module.js').ModuleRuntime<StateOf<typeof shape>, ActionOf<typeof shape>>,\n never,\n any\n >\n\n const processes = config.processes ?? []\n\n const makeImplWithLayer = (\n layer: Layer.Layer<\n import('./core/module.js').ModuleRuntime<StateOf<typeof shape>, ActionOf<typeof shape>>,\n never,\n any\n >,\n ): ModuleImpl<Id, ModuleShape<SSchema, Schema.Schema<ActionsFromMap<AMap>>, AMap>, any> => ({\n _tag: 'ModuleImpl',\n module: moduleTag as unknown as LogixModuleTag<\n Id,\n ModuleShape<SSchema, Schema.Schema<ActionsFromMap<AMap>>, AMap>\n >,\n layer,\n processes,\n stateTransaction: config.stateTransaction,\n withLayer: (\n extra: Layer.Layer<any, never, any>,\n ): ModuleImpl<Id, ModuleShape<SSchema, Schema.Schema<ActionsFromMap<AMap>>, AMap>, any> => {\n const provided = (\n layer as Layer.Layer<\n import('./core/module.js').ModuleRuntime<StateOf<typeof shape>, ActionOf<typeof shape>>,\n never,\n any\n >\n ).pipe(Layer.provide(extra as Layer.Layer<any, never, any>))\n\n const merged = Layer.mergeAll(provided, extra as Layer.Layer<any, never, any>) as Layer.Layer<\n import('./core/module.js').ModuleRuntime<StateOf<typeof shape>, ActionOf<typeof shape>>,\n never,\n any\n >\n\n return makeImplWithLayer(merged)\n },\n withLayers: (\n ...extras: ReadonlyArray<Layer.Layer<any, never, any>>\n ): ModuleImpl<Id, ModuleShape<SSchema, Schema.Schema<ActionsFromMap<AMap>>, AMap>, any> =>\n extras.reduce<ModuleImpl<Id, ModuleShape<SSchema, Schema.Schema<ActionsFromMap<AMap>>, AMap>, any>>(\n (implAcc, extra) => implAcc.withLayer(extra),\n makeImplWithLayer(\n layer as Layer.Layer<\n import('./core/module.js').ModuleRuntime<StateOf<typeof shape>, ActionOf<typeof shape>>,\n never,\n any\n >,\n ),\n ),\n })\n\n // Start from baseLayer and layer-in imports (Layer or other ModuleImpl.layer) sequentially.\n const initialImpl = makeImplWithLayer(\n baseLayer as Layer.Layer<\n import('./core/module.js').ModuleRuntime<StateOf<typeof shape>, ActionOf<typeof shape>>,\n never,\n any\n >,\n )\n\n const imports = config.imports ?? []\n\n const finalImpl = imports.reduce<\n ModuleImpl<Id, ModuleShape<SSchema, Schema.Schema<ActionsFromMap<AMap>>, AMap>, any>\n >((implAcc, item) => {\n const layer =\n (item as ModuleImpl<any, AnyModuleShape, any>)._tag === 'ModuleImpl'\n ? (item as ModuleImpl<any, AnyModuleShape, any>).layer\n : (item as Layer.Layer<any, any, any>)\n\n return implAcc.withLayer(layer as Layer.Layer<any, never, any>)\n }, initialImpl)\n\n return finalImpl\n },\n })\n\n return moduleTag as LogixModuleTag<Id, ModuleShape<SSchema, Schema.Schema<ActionsFromMap<AMap>>, AMap>>\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 { Cause, Context, Effect, Ref } from 'effect'\nimport { toSerializableErrorSummary } from './errorSummary.js'\nimport * as Debug from './DebugSink.js'\n\nexport type Phase = 'init' | 'run' | 'destroy' | 'platform'\n\nexport type Hook = 'initRequired' | 'start' | 'destroy' | 'suspend' | 'resume' | 'reset' | 'unknown'\n\nexport type TaskKind = 'initRequired' | 'start' | 'destroy' | 'platformSuspend' | 'platformResume' | 'platformReset'\n\nexport interface ErrorContext {\n readonly phase: Phase\n readonly hook: Hook\n readonly moduleId: string\n readonly instanceId: string\n readonly taskId?: string\n readonly txnSeq?: number\n readonly opSeq?: number\n /**\n * For diagnostics only: an implementation-side marker indicating where the error originated,\n * e.g. \"logic.fork\" / \"initRequired\" / \"start\".\n *\n * Note: this field must be serializable and must not become a protocol anchor.\n */\n readonly origin?: string\n}\n\nexport interface ModuleRuntimeIdentity {\n readonly moduleId: string\n readonly instanceId: string\n readonly runtimeLabel?: string\n}\n\nexport type InstanceStatus = 'creating' | 'initializing' | 'ready' | 'failed' | 'terminating' | 'terminated'\n\nexport interface InitProgress {\n readonly total: number\n readonly completed: number\n readonly current?: number\n readonly startedAt?: number\n}\n\nexport type LifecycleOutcome =\n | { readonly status: 'success' }\n | {\n readonly status: 'failure'\n readonly error: import('./errorSummary.js').SerializableErrorSummary\n }\n\nexport interface LifecycleStatus {\n readonly identity: ModuleRuntimeIdentity\n readonly status: InstanceStatus\n readonly initOutcome?: LifecycleOutcome\n readonly initProgress?: InitProgress\n}\n\nexport interface TaskRef {\n readonly taskId: string\n readonly kind: TaskKind\n readonly order: number\n readonly name?: string\n readonly fatalOnFailure?: boolean\n}\n\nexport interface LifecycleTask extends TaskRef {\n readonly effect: Effect.Effect<void, never, any>\n}\n\nexport interface Budgets {\n /** Per-instance lifecycle event budget (aligned with specs/011 data-model; default ≤ 20). */\n readonly maxEventsPerInstance: number\n /** Per-event size budget (aligned with specs/011 data-model; default ≤ 4KB). */\n readonly maxEventBytes: number\n}\n\nexport interface LifecycleManager {\n readonly identity: ModuleRuntimeIdentity\n readonly budgets: Budgets\n\n readonly registerPlatformSuspend: (\n effect: Effect.Effect<void, never, any>,\n options?: { readonly name?: string },\n ) => void\n readonly registerPlatformResume: (\n effect: Effect.Effect<void, never, any>,\n options?: { readonly name?: string },\n ) => void\n readonly registerPlatformReset: (\n effect: Effect.Effect<void, never, any>,\n options?: { readonly name?: string },\n ) => void\n\n readonly registerInitRequired: (effect: Effect.Effect<void, never, any>, options?: { readonly name?: string }) => void\n readonly registerStart: (\n effect: Effect.Effect<void, never, any>,\n options?: { readonly name?: string; readonly fatalOnFailure?: boolean },\n ) => void\n readonly registerDestroy: (effect: Effect.Effect<void, never, any>, options?: { readonly name?: string }) => void\n readonly registerOnError: (\n handler: (cause: Cause.Cause<unknown>, context: ErrorContext) => Effect.Effect<void, never, any>,\n ) => void\n\n readonly getStatus: Effect.Effect<LifecycleStatus>\n readonly setStatus: (\n status: InstanceStatus,\n patch?: {\n readonly initOutcome?: LifecycleOutcome | undefined\n readonly initProgress?: InitProgress | undefined\n readonly runtimeLabel?: string | undefined\n },\n ) => Effect.Effect<void>\n\n readonly notifyError: (cause: Cause.Cause<unknown>, context: ErrorContext) => Effect.Effect<void, never, any>\n\n readonly runPlatformSuspend: Effect.Effect<void, never, any>\n readonly runPlatformResume: Effect.Effect<void, never, any>\n readonly runPlatformReset: Effect.Effect<void, never, any>\n\n readonly runInitRequired: Effect.Effect<void, unknown, any>\n readonly runStart: Effect.Effect<void, never, any>\n readonly runDestroy: Effect.Effect<void, never, any>\n\n /** Diagnostics only: whether any onError handler has been registered. */\n readonly hasOnErrorHandlers: Effect.Effect<boolean>\n\n /** Tests/diagnostics only: read a snapshot of registered tasks (immutable view). */\n readonly getTaskSnapshot: Effect.Effect<\n Readonly<{\n readonly initRequired: ReadonlyArray<TaskRef>\n readonly start: ReadonlyArray<TaskRef>\n readonly destroy: ReadonlyArray<TaskRef>\n readonly platformSuspend: ReadonlyArray<TaskRef>\n readonly platformResume: ReadonlyArray<TaskRef>\n readonly platformReset: ReadonlyArray<TaskRef>\n }>,\n never,\n never\n >\n}\n\nexport const LifecycleContext = Context.GenericTag<LifecycleManager>('@logixjs/LifecycleManager')\n\nconst safeRun = (label: string, eff: Effect.Effect<void, any, any>) =>\n eff.pipe(\n Effect.matchCauseEffect({\n onSuccess: () => Effect.void,\n onFailure: (cause) => Effect.logError(`[${label}] failed: ${Cause.pretty(cause)}`),\n }),\n )\n\nconst makeTaskId = (kind: TaskKind, order: number): string => `${kind}:${order}`\n\nexport const makeLifecycleManager = (identity: ModuleRuntimeIdentity): Effect.Effect<LifecycleManager> =>\n Effect.gen(function* () {\n const budgets: Budgets = {\n maxEventsPerInstance: 20,\n maxEventBytes: 4 * 1024,\n }\n\n const statusRef = yield* Ref.make<LifecycleStatus>({\n identity,\n status: 'creating',\n })\n\n const initRequired: LifecycleTask[] = []\n const start: LifecycleTask[] = []\n const destroy: LifecycleTask[] = []\n const platformSuspend: LifecycleTask[] = []\n const platformResume: LifecycleTask[] = []\n const platformReset: LifecycleTask[] = []\n const onErrorHandlers: Array<\n (cause: Cause.Cause<unknown>, context: ErrorContext) => Effect.Effect<void, never, any>\n > = []\n\n const getStatus: Effect.Effect<LifecycleStatus> = Ref.get(statusRef)\n\n const recordPhase = (phase: Phase, name: string, payload?: unknown): Effect.Effect<void, never, any> =>\n Debug.record({\n type: 'lifecycle:phase',\n moduleId: identity.moduleId,\n instanceId: identity.instanceId,\n phase,\n name,\n payload,\n })\n\n const setStatus = (\n status: InstanceStatus,\n patch?: {\n readonly initOutcome?: LifecycleOutcome | undefined\n readonly initProgress?: InitProgress | undefined\n readonly runtimeLabel?: string | undefined\n },\n ) =>\n Ref.update(statusRef, (prev) => ({\n ...prev,\n identity: {\n ...prev.identity,\n ...(patch?.runtimeLabel ? { runtimeLabel: patch.runtimeLabel } : null),\n },\n status,\n ...(patch?.initOutcome !== undefined ? { initOutcome: patch.initOutcome } : null),\n ...(patch?.initProgress !== undefined ? { initProgress: patch.initProgress } : null),\n }))\n\n const registerInitRequired = (effect: Effect.Effect<void, never, any>, options?: { readonly name?: string }) => {\n const order = initRequired.length\n initRequired.push({\n taskId: makeTaskId('initRequired', order),\n kind: 'initRequired',\n order,\n name: options?.name,\n effect,\n })\n }\n\n const registerStart = (\n effect: Effect.Effect<void, never, any>,\n options?: { readonly name?: string; readonly fatalOnFailure?: boolean },\n ) => {\n const order = start.length\n start.push({\n taskId: makeTaskId('start', order),\n kind: 'start',\n order,\n name: options?.name,\n fatalOnFailure: options?.fatalOnFailure,\n effect,\n })\n }\n\n const registerDestroy = (effect: Effect.Effect<void, never, any>, options?: { readonly name?: string }) => {\n const order = destroy.length\n destroy.push({\n taskId: makeTaskId('destroy', order),\n kind: 'destroy',\n order,\n name: options?.name,\n effect,\n })\n }\n\n const registerOnError = (\n handler: (cause: Cause.Cause<unknown>, context: ErrorContext) => Effect.Effect<void, never, any>,\n ) => {\n onErrorHandlers.push(handler)\n }\n\n const registerPlatformSuspend = (effect: Effect.Effect<void, never, any>, options?: { readonly name?: string }) => {\n const order = platformSuspend.length\n platformSuspend.push({\n taskId: makeTaskId('platformSuspend', order),\n kind: 'platformSuspend',\n order,\n name: options?.name,\n effect,\n })\n }\n\n const registerPlatformResume = (effect: Effect.Effect<void, never, any>, options?: { readonly name?: string }) => {\n const order = platformResume.length\n platformResume.push({\n taskId: makeTaskId('platformResume', order),\n kind: 'platformResume',\n order,\n name: options?.name,\n effect,\n })\n }\n\n const registerPlatformReset = (effect: Effect.Effect<void, never, any>, options?: { readonly name?: string }) => {\n const order = platformReset.length\n platformReset.push({\n taskId: makeTaskId('platformReset', order),\n kind: 'platformReset',\n order,\n name: options?.name,\n effect,\n })\n }\n\n const notifyError = (cause: Cause.Cause<unknown>, context: ErrorContext) => {\n // Interrupt/cancel should not be reported as an error.\n if (Cause.isInterrupted(cause)) {\n return Effect.void\n }\n\n return Debug.record({\n type: 'lifecycle:error',\n moduleId: context.moduleId,\n instanceId: context.instanceId,\n cause,\n phase: context.phase,\n hook: context.hook,\n taskId: context.taskId,\n txnSeq: context.txnSeq,\n opSeq: context.opSeq,\n origin: context.origin,\n }).pipe(\n Effect.zipRight(\n Effect.forEach(\n onErrorHandlers,\n (handler) =>\n handler(cause, context).pipe(\n Effect.catchAllCause((inner) => Effect.logError(`[lifecycle.onError] failed: ${Cause.pretty(inner)}`)),\n ),\n { discard: true },\n ),\n ),\n )\n }\n\n const runInitRequired: Effect.Effect<void, unknown, any> = Effect.gen(function* () {\n const total = initRequired.length\n if (total === 0) {\n yield* setStatus('ready', {\n initProgress: { total: 0, completed: 0 },\n initOutcome: { status: 'success' },\n })\n return\n }\n\n const startedAt = Date.now()\n yield* recordPhase('init', 'initRequired:start', { total })\n yield* setStatus('initializing', {\n initProgress: { total, completed: 0, current: 0, startedAt },\n })\n\n let completed = 0\n for (let i = 0; i < initRequired.length; i++) {\n yield* setStatus('initializing', {\n initProgress: { total, completed, current: i, startedAt },\n })\n\n const task = initRequired[i]\n const exit = yield* Effect.exit(task.effect)\n\n if (exit._tag === 'Success') {\n completed += 1\n yield* setStatus('initializing', {\n initProgress: { total, completed, current: i + 1, startedAt },\n })\n continue\n }\n\n const summary = toSerializableErrorSummary(exit.cause)\n yield* notifyError(exit.cause, {\n phase: 'init',\n hook: 'initRequired',\n moduleId: identity.moduleId,\n instanceId: identity.instanceId,\n taskId: task.taskId,\n origin: 'initRequired',\n })\n\n yield* setStatus('failed', {\n initProgress: { total, completed, current: i, startedAt },\n initOutcome: { status: 'failure', error: summary.errorSummary },\n })\n\n return yield* Effect.failCause(exit.cause)\n }\n\n yield* recordPhase('init', 'initRequired:success', { total })\n yield* setStatus('ready', {\n initProgress: { total, completed, current: total, startedAt },\n initOutcome: { status: 'success' },\n })\n })\n\n const runStart: Effect.Effect<void, never, any> = recordPhase('run', 'start:schedule', {\n total: start.length,\n }).pipe(\n Effect.zipRight(\n Effect.forEach(\n start,\n (task) =>\n Effect.forkScoped(\n task.effect.pipe(\n Effect.catchAllCause((cause) =>\n notifyError(cause, {\n phase: 'run',\n hook: 'start',\n moduleId: identity.moduleId,\n instanceId: identity.instanceId,\n taskId: task.taskId,\n origin: 'start',\n }),\n ),\n ),\n ).pipe(Effect.asVoid),\n { discard: true, concurrency: 'unbounded' },\n ),\n ),\n )\n\n const runDestroy: Effect.Effect<void, never, any> = Effect.gen(function* () {\n yield* recordPhase('destroy', 'destroy:start', { total: destroy.length })\n yield* setStatus('terminating')\n\n // destroy: run in reverse registration order (LIFO), best-effort (one failure does not block others).\n for (let i = destroy.length - 1; i >= 0; i--) {\n const task = destroy[i]\n yield* safeRun(\n 'lifecycle.onDestroy',\n task.effect.pipe(\n Effect.catchAllCause((cause) =>\n notifyError(cause, {\n phase: 'destroy',\n hook: 'destroy',\n moduleId: identity.moduleId,\n instanceId: identity.instanceId,\n taskId: task.taskId,\n origin: 'destroy',\n }),\n ),\n ),\n )\n }\n\n yield* setStatus('terminated')\n yield* recordPhase('destroy', 'destroy:done', { total: destroy.length })\n })\n\n const runPlatformSuspend: Effect.Effect<void, never, any> = Effect.gen(function* () {\n if (platformSuspend.length === 0) return\n\n yield* recordPhase('platform', 'signal:suspend', { total: platformSuspend.length })\n for (const task of platformSuspend) {\n yield* safeRun(\n 'lifecycle.onSuspend',\n task.effect.pipe(\n Effect.catchAllCause((cause) =>\n notifyError(cause, {\n phase: 'platform',\n hook: 'suspend',\n moduleId: identity.moduleId,\n instanceId: identity.instanceId,\n taskId: task.taskId,\n origin: 'platform.suspend',\n }),\n ),\n ),\n )\n }\n })\n\n const runPlatformResume: Effect.Effect<void, never, any> = Effect.gen(function* () {\n if (platformResume.length === 0) return\n\n yield* recordPhase('platform', 'signal:resume', { total: platformResume.length })\n for (const task of platformResume) {\n yield* safeRun(\n 'lifecycle.onResume',\n task.effect.pipe(\n Effect.catchAllCause((cause) =>\n notifyError(cause, {\n phase: 'platform',\n hook: 'resume',\n moduleId: identity.moduleId,\n instanceId: identity.instanceId,\n taskId: task.taskId,\n origin: 'platform.resume',\n }),\n ),\n ),\n )\n }\n })\n\n const runPlatformReset: Effect.Effect<void, never, any> = Effect.gen(function* () {\n if (platformReset.length === 0) return\n\n yield* recordPhase('platform', 'signal:reset', { total: platformReset.length })\n for (const task of platformReset) {\n yield* safeRun(\n 'lifecycle.onReset',\n task.effect.pipe(\n Effect.catchAllCause((cause) =>\n notifyError(cause, {\n phase: 'platform',\n hook: 'reset',\n moduleId: identity.moduleId,\n instanceId: identity.instanceId,\n taskId: task.taskId,\n origin: 'platform.reset',\n }),\n ),\n ),\n )\n }\n })\n\n const getTaskSnapshot: LifecycleManager['getTaskSnapshot'] = Effect.sync(() => ({\n initRequired: initRequired.map(({ effect: _eff, ...rest }) => rest),\n start: start.map(({ effect: _eff, ...rest }) => rest),\n destroy: destroy.map(({ effect: _eff, ...rest }) => rest),\n platformSuspend: platformSuspend.map(({ effect: _eff, ...rest }) => rest),\n platformResume: platformResume.map(({ effect: _eff, ...rest }) => rest),\n platformReset: platformReset.map(({ effect: _eff, ...rest }) => rest),\n }))\n\n const hasOnErrorHandlers: LifecycleManager['hasOnErrorHandlers'] = Effect.sync(() => onErrorHandlers.length > 0)\n\n return {\n identity,\n budgets,\n registerPlatformSuspend,\n registerPlatformResume,\n registerPlatformReset,\n registerInitRequired,\n registerStart,\n registerDestroy,\n registerOnError,\n getStatus,\n setStatus,\n notifyError,\n runPlatformSuspend,\n runPlatformResume,\n runPlatformReset,\n runInitRequired,\n runStart,\n runDestroy,\n hasOnErrorHandlers,\n getTaskSnapshot,\n }\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","import { Context, Effect, Option } from 'effect'\nimport { isDevEnv } from './env.js'\n\nexport type OverrideScope = 'builtin' | 'runtime_default' | 'runtime_module' | 'provider' | 'instance'\n\nexport type RuntimeServiceOverride = {\n readonly implId?: string\n readonly notes?: string\n}\n\n/**\n * RuntimeServicesOverrides: a serializable override for runtime service implementation selection.\n *\n * - The key is a stable serviceId.\n * - The value may only contain serializable fields (no functions/closures) so evidence can be produced and explained.\n */\nexport type RuntimeServicesOverrides = Readonly<Record<string, RuntimeServiceOverride>>\n\nexport interface RuntimeServicesRuntimeConfig {\n /** Runtime-level default overrides (runtime_default). */\n readonly services?: RuntimeServicesOverrides\n /** Per-module delta overrides by moduleId (runtime_module). */\n readonly servicesByModuleId?: Readonly<Record<string, RuntimeServicesOverrides>>\n}\n\nclass RuntimeServicesRuntimeConfigTagImpl extends Context.Tag('@logixjs/core/RuntimeServicesRuntimeConfig')<\n RuntimeServicesRuntimeConfigTagImpl,\n RuntimeServicesRuntimeConfig\n>() {}\n\nexport const RuntimeServicesRuntimeConfigTag = RuntimeServicesRuntimeConfigTagImpl\n\nexport interface RuntimeServicesProviderOverrides {\n /** Provider-scoped default overrides (provider). */\n readonly services?: RuntimeServicesOverrides\n /** Provider-scoped per-module delta overrides by moduleId (provider). */\n readonly servicesByModuleId?: Readonly<Record<string, RuntimeServicesOverrides>>\n}\n\nclass RuntimeServicesProviderOverridesTagImpl extends Context.Tag('@logixjs/core/RuntimeServicesProviderOverrides')<\n RuntimeServicesProviderOverridesTagImpl,\n RuntimeServicesProviderOverrides\n>() {}\n\nexport const RuntimeServicesProviderOverridesTag = RuntimeServicesProviderOverridesTagImpl\n\nclass RuntimeServicesInstanceOverridesTagImpl extends Context.Tag('@logixjs/core/RuntimeServicesInstanceOverrides')<\n RuntimeServicesInstanceOverridesTagImpl,\n RuntimeServicesOverrides\n>() {}\n\nexport const RuntimeServicesInstanceOverridesTag = RuntimeServicesInstanceOverridesTagImpl\n\n/**\n * FullCutoverGateMode: controls whether fallbacks are allowed during assembly.\n *\n * - trial: allows fallbacks (for trial-run / comparison / diagnostics).\n * - fullCutover: forbids fallbacks (any fallback or missing binding fails).\n *\n * Default: trial. If you need a strict gate, set it to fullCutover explicitly in the public Runtime defaults.\n */\nexport type FullCutoverGateMode = 'trial' | 'fullCutover'\n\nclass FullCutoverGateModeTagImpl extends Context.Tag('@logixjs/core/FullCutoverGateMode')<\n FullCutoverGateModeTagImpl,\n FullCutoverGateMode\n>() {}\n\nexport const FullCutoverGateModeTag = FullCutoverGateModeTagImpl\n\nexport interface RuntimeServiceBinding {\n readonly serviceId: string\n readonly implId?: string\n readonly implVersion?: string\n readonly scope: OverrideScope\n readonly overridden: boolean\n readonly notes?: string\n}\n\nexport interface RuntimeServicesEvidence {\n readonly moduleId?: string\n readonly instanceId: string\n readonly scope: OverrideScope\n readonly bindings: ReadonlyArray<RuntimeServiceBinding>\n readonly overridesApplied: ReadonlyArray<string>\n}\n\nconst ORDERED_SCOPES: ReadonlyArray<OverrideScope> = [\n 'builtin',\n 'runtime_default',\n 'runtime_module',\n 'provider',\n 'instance',\n]\n\nconst maxScope = (a: OverrideScope, b: OverrideScope): OverrideScope => {\n const ai = ORDERED_SCOPES.indexOf(a)\n const bi = ORDERED_SCOPES.indexOf(b)\n return (ai >= bi ? a : b) as OverrideScope\n}\n\nconst isPlainRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst normalizeOverride = (value: unknown): RuntimeServiceOverride | undefined => {\n if (!isPlainRecord(value)) return undefined\n\n const implIdRaw = value.implId\n const notesRaw = value.notes\n\n return {\n implId: typeof implIdRaw === 'string' && implIdRaw.length > 0 ? implIdRaw : undefined,\n notes: typeof notesRaw === 'string' && notesRaw.length > 0 ? notesRaw : undefined,\n }\n}\n\nexport const resolveRuntimeServicesOverrides = (args: {\n readonly moduleId: string | undefined\n}): Effect.Effect<\n {\n readonly runtimeDefault?: RuntimeServicesOverrides\n readonly runtimeModule?: RuntimeServicesOverrides\n readonly provider?: RuntimeServicesOverrides\n readonly providerModule?: RuntimeServicesOverrides\n readonly instance?: RuntimeServicesOverrides\n },\n never,\n any\n> =>\n Effect.gen(function* () {\n const runtimeConfigOpt = yield* Effect.serviceOption(RuntimeServicesRuntimeConfigTag)\n const providerOverridesOpt = yield* Effect.serviceOption(RuntimeServicesProviderOverridesTag)\n const instanceOverridesOpt = yield* Effect.serviceOption(RuntimeServicesInstanceOverridesTag)\n\n const runtimeConfig = Option.isSome(runtimeConfigOpt) ? runtimeConfigOpt.value : undefined\n const providerOverrides = Option.isSome(providerOverridesOpt) ? providerOverridesOpt.value : undefined\n const instanceOverrides = Option.isSome(instanceOverridesOpt) ? instanceOverridesOpt.value : undefined\n\n const moduleId = args.moduleId\n\n const runtimeModule =\n moduleId && runtimeConfig?.servicesByModuleId ? runtimeConfig.servicesByModuleId[moduleId] : undefined\n\n const providerModule =\n moduleId && providerOverrides?.servicesByModuleId ? providerOverrides.servicesByModuleId[moduleId] : undefined\n\n return {\n runtimeDefault: runtimeConfig?.services,\n runtimeModule,\n provider: providerOverrides?.services,\n providerModule,\n instance: instanceOverrides,\n }\n })\n\nexport interface RuntimeServiceImpl<Service> {\n readonly implId: string\n readonly implVersion: string\n readonly make: Effect.Effect<Service, never, any>\n readonly notes?: string\n}\n\n/**\n * RuntimeServicesRegistry:\n * - Used to inject additional serviceId → impls (e.g. implementations provided by core-ng).\n * - A non-serializable contract used only during assembly; selection evidence is still carried by\n * RuntimeServicesOverrides + RuntimeServicesEvidence.\n */\nexport interface RuntimeServicesRegistry {\n readonly implsByServiceId: Readonly<Record<string, ReadonlyArray<RuntimeServiceImpl<any>>>>\n}\n\nclass RuntimeServicesRegistryTagImpl extends Context.Tag('@logixjs/core/RuntimeServicesRegistry')<\n RuntimeServicesRegistryTagImpl,\n RuntimeServicesRegistry\n>() {}\n\nexport const RuntimeServicesRegistryTag = RuntimeServicesRegistryTagImpl\n\nexport interface RuntimeServiceSelection<Service> {\n readonly binding: RuntimeServiceBinding\n readonly impl: RuntimeServiceImpl<Service>\n readonly overridesApplied: ReadonlyArray<string>\n}\n\nexport const selectRuntimeService = <Service>(\n serviceId: string,\n impls: ReadonlyArray<RuntimeServiceImpl<Service>>,\n overrides: {\n readonly runtimeDefault?: RuntimeServicesOverrides\n readonly runtimeModule?: RuntimeServicesOverrides\n readonly provider?: RuntimeServicesOverrides\n readonly providerModule?: RuntimeServicesOverrides\n readonly instance?: RuntimeServicesOverrides\n },\n): RuntimeServiceSelection<Service> => {\n const builtin = impls[0]\n if (!builtin) {\n throw new Error(`[Logix] RuntimeKernel registry missing builtin impl for: ${serviceId}`)\n }\n\n let desired: { readonly scope: OverrideScope; readonly override: RuntimeServiceOverride } | undefined\n const consider = (scope: OverrideScope, patch: RuntimeServicesOverrides | undefined): void => {\n const next = patch ? normalizeOverride(patch[serviceId]) : undefined\n if (!next || !next.implId) return\n desired = { scope, override: next }\n }\n\n // priority: builtin < runtime_default < runtime_module < provider < instance\n consider('runtime_default', overrides.runtimeDefault)\n consider('runtime_module', overrides.runtimeModule)\n consider('provider', overrides.provider)\n consider('provider', overrides.providerModule)\n consider('instance', overrides.instance)\n\n if (!desired) {\n return {\n impl: builtin,\n binding: {\n serviceId,\n implId: builtin.implId,\n implVersion: builtin.implVersion,\n scope: 'builtin',\n overridden: false,\n notes: builtin.notes,\n },\n overridesApplied: [],\n }\n }\n\n const desiredImplId = desired.override.implId!\n const selected = impls.find((i) => i.implId === desiredImplId)\n const impl = selected ?? builtin\n\n const didFallback = selected == null\n const fallbackNote = didFallback\n ? `Unknown implId \"${desiredImplId}\", falling back to builtin \"${builtin.implId}\"`\n : undefined\n\n const notes = [desired.override.notes, impl.notes, fallbackNote]\n .filter((s): s is string => typeof s === 'string' && s.length > 0)\n .join('; ')\n\n return {\n impl,\n binding: {\n serviceId,\n implId: impl.implId,\n implVersion: impl.implVersion,\n scope: desired.scope,\n overridden: true,\n notes: notes.length > 0 ? notes : undefined,\n },\n overridesApplied: [\n didFallback\n ? `${desired.scope}:${serviceId}=${desiredImplId} (fallback=${builtin.implId})`\n : `${desired.scope}:${serviceId}=${desiredImplId}`,\n ],\n }\n}\n\nexport const makeRuntimeServicesEvidence = (args: {\n readonly moduleId: string | undefined\n readonly instanceId: string\n readonly bindings: ReadonlyArray<RuntimeServiceBinding>\n readonly overridesApplied: ReadonlyArray<string>\n}): RuntimeServicesEvidence => {\n let scope: OverrideScope = 'builtin'\n for (const b of args.bindings) {\n scope = maxScope(scope, b.scope)\n }\n\n return {\n moduleId: args.moduleId,\n instanceId: args.instanceId,\n scope,\n bindings: args.bindings,\n overridesApplied: args.overridesApplied,\n }\n}\n\nconst RUNTIME_SERVICES_EVIDENCE = Symbol.for('@logixjs/core/runtimeServicesEvidence')\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\nconst formatScope = (moduleId: unknown, instanceId: unknown): string => {\n const m = typeof moduleId === 'string' && moduleId.length > 0 ? moduleId : 'unknown'\n const i = typeof instanceId === 'string' && instanceId.length > 0 ? instanceId : 'unknown'\n return `moduleId=${m}, instanceId=${i}`\n}\n\nexport const setRuntimeServicesEvidence = (runtime: object, evidence: RuntimeServicesEvidence): void => {\n defineHidden(runtime, RUNTIME_SERVICES_EVIDENCE, evidence)\n}\n\nexport const getRuntimeServicesEvidence = (runtime: object): RuntimeServicesEvidence => {\n const scope = runtime as { readonly moduleId?: unknown; readonly instanceId?: unknown }\n const evidence = (runtime as any)[RUNTIME_SERVICES_EVIDENCE] as RuntimeServicesEvidence | undefined\n if (!evidence) {\n const msg = isDevEnv()\n ? [\n '[MissingRuntimeServicesEvidence] Runtime services evidence not installed on ModuleRuntime instance.',\n `scope: ${formatScope(scope.moduleId, scope.instanceId)}`,\n 'fix:',\n '- Ensure ModuleRuntime.make assembles RuntimeKernel and attaches evidence (020 US2).',\n '- If you created a mock runtime for tests, attach evidence or avoid calling evidence-only APIs.',\n ].join('\\n')\n : 'Runtime services evidence not installed'\n throw new Error(msg)\n }\n\n const runtimeInstanceId = scope.instanceId\n if (\n typeof runtimeInstanceId === 'string' &&\n runtimeInstanceId.length > 0 &&\n runtimeInstanceId !== evidence.instanceId\n ) {\n throw new Error(\n isDevEnv()\n ? [\n '[InconsistentRuntimeServicesEvidence] Runtime services evidence instanceId mismatch.',\n `runtime: ${formatScope(scope.moduleId, runtimeInstanceId)}`,\n `evidence: ${formatScope(evidence.moduleId, evidence.instanceId)}`,\n ].join('\\n')\n : 'Runtime services evidence mismatch',\n )\n }\n\n return evidence\n}\n","import type { KernelId } from './KernelRef.js'\nimport type { RuntimeServiceBinding, RuntimeServicesEvidence } from './RuntimeKernel.js'\n\nexport interface CutoverCoverageMatrix {\n readonly version: 'v1'\n readonly requiredServiceIds: ReadonlyArray<string>\n}\n\nexport const CutoverCoverageMatrix = {\n version: 'v1',\n requiredServiceIds: ['txnQueue', 'operationRunner', 'transaction', 'dispatch'],\n} as const satisfies CutoverCoverageMatrix\n\nexport type FullCutoverGateMode = 'trial' | 'fullCutover'\n\nexport interface FullCutoverGateAnchor {\n readonly moduleId: string\n readonly instanceId: string\n /**\n * Convention: txnSeq=0 denotes assembly (a wiring-time failure anchor).\n * Full Cutover Gate is evaluated during assembly by default, so it does not depend on a real txn.\n */\n readonly txnSeq: number\n}\n\nexport type FullCutoverGateVerdict = 'PASS' | 'FAIL'\n\nexport interface FullCutoverGateResult {\n readonly version: 'v1'\n readonly mode: FullCutoverGateMode\n readonly requestedKernelId: KernelId\n readonly verdict: FullCutoverGateVerdict\n /**\n * fullyActivated: a stricter \"full cutover\" truth value.\n * - Requires every serviceId in the coverage matrix to be bound to the expected implId.\n * - Requires no fallback (any `fallback=` in overridesApplied means not fully activated).\n *\n * Note: in trial mode the verdict may be PASS while fullyActivated can still be false.\n */\n readonly fullyActivated: boolean\n readonly missingServiceIds: ReadonlyArray<string>\n readonly fallbackServiceIds: ReadonlyArray<string>\n readonly anchor: FullCutoverGateAnchor\n /**\n * When diagnostics=off, it must stay slim (avoid permanent overhead).\n * In light/full, additional explainable info is allowed (still must be serializable).\n */\n readonly details?: {\n readonly expectedImplId: string\n readonly bindings: ReadonlyArray<RuntimeServiceBinding>\n readonly overridesApplied: ReadonlyArray<string>\n }\n}\n\nconst expectedImplIdForKernel = (kernelId: KernelId): string => (kernelId === 'core' ? 'builtin' : kernelId)\n\nconst parseFallbackServiceIds = (overridesApplied: ReadonlyArray<string>): ReadonlyArray<string> => {\n const out = new Set<string>()\n for (const entry of overridesApplied) {\n if (!entry.includes('(fallback=')) continue\n const colon = entry.indexOf(':')\n if (colon < 0) continue\n const eq = entry.indexOf('=', colon + 1)\n if (eq < 0) continue\n const serviceId = entry.slice(colon + 1, eq)\n if (serviceId.length > 0) out.add(serviceId)\n }\n return Array.from(out).sort((a, b) => a.localeCompare(b))\n}\n\nconst collectMissingServiceIds = (args: {\n readonly expectedImplId: string\n readonly requiredServiceIds: ReadonlyArray<string>\n readonly bindings: ReadonlyArray<RuntimeServiceBinding>\n}): ReadonlyArray<string> => {\n const bindingByServiceId = new Map<string, RuntimeServiceBinding>()\n for (const b of args.bindings) {\n bindingByServiceId.set(b.serviceId, b)\n }\n\n const missing: string[] = []\n for (const serviceId of args.requiredServiceIds) {\n const binding = bindingByServiceId.get(serviceId)\n const implId = binding?.implId\n if (!implId || implId !== args.expectedImplId) {\n missing.push(serviceId)\n }\n }\n\n return missing\n}\n\nexport const evaluateFullCutoverGate = (args: {\n readonly mode: FullCutoverGateMode\n readonly requestedKernelId: KernelId\n readonly runtimeServicesEvidence: RuntimeServicesEvidence\n readonly coverageMatrix?: CutoverCoverageMatrix\n readonly diagnosticsLevel?: 'off' | 'light' | 'full' | 'sampled'\n}): FullCutoverGateResult => {\n const expectedImplId = expectedImplIdForKernel(args.requestedKernelId)\n const matrix = args.coverageMatrix ?? CutoverCoverageMatrix\n\n const fallbackServiceIds = parseFallbackServiceIds(args.runtimeServicesEvidence.overridesApplied)\n const missingServiceIds = collectMissingServiceIds({\n expectedImplId,\n requiredServiceIds: matrix.requiredServiceIds,\n bindings: args.runtimeServicesEvidence.bindings,\n })\n\n const fullyActivated = missingServiceIds.length === 0 && fallbackServiceIds.length === 0\n\n const verdict: FullCutoverGateVerdict = args.mode === 'fullCutover' ? (fullyActivated ? 'PASS' : 'FAIL') : 'PASS'\n\n const moduleIdRaw = args.runtimeServicesEvidence.moduleId\n const moduleId = typeof moduleIdRaw === 'string' && moduleIdRaw.length > 0 ? moduleIdRaw : 'unknown'\n\n const anchor: FullCutoverGateAnchor = {\n moduleId,\n instanceId: args.runtimeServicesEvidence.instanceId,\n txnSeq: 0,\n }\n\n const level = args.diagnosticsLevel ?? 'off'\n\n return {\n version: 'v1',\n mode: args.mode,\n requestedKernelId: args.requestedKernelId,\n verdict,\n fullyActivated,\n missingServiceIds,\n fallbackServiceIds,\n anchor,\n ...(level === 'off'\n ? {}\n : {\n details: {\n expectedImplId,\n bindings: args.runtimeServicesEvidence.bindings,\n overridesApplied: args.runtimeServicesEvidence.overridesApplied,\n },\n }),\n }\n}\n","import { Context, Effect, Option } from 'effect'\nimport { isDevEnv } from './env.js'\n\n/**\n * Stable identifier for a kernel variant (requested kernel family).\n *\n * - Recommended: `[a-z0-9-]+` (lower-kebab).\n * - Recommended reserved names: `core` (builtin semantics), `core-ng` (history/comparison).\n */\nexport type KernelId = 'core' | 'core-ng' | (string & {})\n\nconst isKernelId = (value: unknown): value is KernelId =>\n typeof value === 'string' && value.length > 0 && /^[a-z0-9-]+$/.test(value)\n\nexport interface KernelImplementationRef {\n /**\n * Requested kernel family id (not a version number).\n * Actual activation / fallback must be interpreted via RuntimeServicesEvidence.\n */\n readonly kernelId: KernelId\n /** The npm package that provides the kernel implementation. */\n readonly packageName: string\n /** Optional semver for explainability (not used as a semantic anchor). */\n readonly packageVersion?: string\n /** Optional build hash/id for evidence diff explainability. */\n readonly buildId?: string\n /** Explainability-only labels; must not become semantic switches. */\n readonly capabilities?: ReadonlyArray<string>\n}\n\nexport const defaultKernelImplementationRef = {\n kernelId: 'core',\n packageName: '@logixjs/core',\n} as const satisfies KernelImplementationRef\n\nexport const isKernelImplementationRef = (value: unknown): value is KernelImplementationRef => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return false\n\n const keys = Object.keys(value)\n for (const k of keys) {\n if (k !== 'kernelId' && k !== 'packageName' && k !== 'packageVersion' && k !== 'buildId' && k !== 'capabilities') {\n return false\n }\n }\n\n const v: any = value\n if (!isKernelId(v.kernelId)) return false\n if (typeof v.packageName !== 'string' || v.packageName.length === 0) return false\n\n if (v.packageVersion !== undefined && (typeof v.packageVersion !== 'string' || v.packageVersion.length === 0)) {\n return false\n }\n if (v.buildId !== undefined && (typeof v.buildId !== 'string' || v.buildId.length === 0)) {\n return false\n }\n if (v.capabilities !== undefined) {\n if (!Array.isArray(v.capabilities)) return false\n if (!v.capabilities.every((c: unknown) => typeof c === 'string')) return false\n }\n\n return true\n}\n\nexport const normalizeKernelImplementationRef = (\n value: unknown,\n fallback: KernelImplementationRef = defaultKernelImplementationRef,\n): KernelImplementationRef => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return fallback\n\n const v: any = value\n if (!isKernelId(v.kernelId)) return fallback\n if (typeof v.packageName !== 'string' || v.packageName.length === 0) return fallback\n\n return {\n kernelId: v.kernelId,\n packageName: v.packageName,\n ...(typeof v.packageVersion === 'string' && v.packageVersion.length > 0\n ? { packageVersion: v.packageVersion }\n : {}),\n ...(typeof v.buildId === 'string' && v.buildId.length > 0 ? { buildId: v.buildId } : {}),\n ...(Array.isArray(v.capabilities) && v.capabilities.every((c: unknown) => typeof c === 'string')\n ? { capabilities: v.capabilities as ReadonlyArray<string> }\n : {}),\n }\n}\n\nclass KernelImplementationRefTagImpl extends Context.Tag('@logixjs/core/KernelImplementationRef')<\n KernelImplementationRefTagImpl,\n KernelImplementationRef\n>() {}\n\nexport const KernelImplementationRefTag = KernelImplementationRefTagImpl\n\nexport const resolveKernelImplementationRef = (): Effect.Effect<KernelImplementationRef, never, any> =>\n Effect.gen(function* () {\n const opt = yield* Effect.serviceOption(KernelImplementationRefTag)\n return normalizeKernelImplementationRef(Option.isSome(opt) ? opt.value : undefined)\n })\n\nconst KERNEL_IMPLEMENTATION_REF = Symbol.for('@logixjs/core/kernelImplementationRef')\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\nconst formatScope = (moduleId: unknown, instanceId: unknown): string => {\n const m = typeof moduleId === 'string' && moduleId.length > 0 ? moduleId : 'unknown'\n const i = typeof instanceId === 'string' && instanceId.length > 0 ? instanceId : 'unknown'\n return `moduleId=${m}, instanceId=${i}`\n}\n\nexport const setKernelImplementationRef = (runtime: object, ref: KernelImplementationRef): void => {\n defineHidden(runtime, KERNEL_IMPLEMENTATION_REF, ref)\n}\n\nexport const getKernelImplementationRef = (runtime: object): KernelImplementationRef => {\n const scope = runtime as { readonly moduleId?: unknown; readonly instanceId?: unknown }\n const ref = (runtime as any)[KERNEL_IMPLEMENTATION_REF] as KernelImplementationRef | undefined\n if (!ref) {\n const msg = isDevEnv()\n ? [\n '[MissingKernelImplementationRef] KernelImplementationRef not installed on ModuleRuntime instance.',\n `scope: ${formatScope(scope.moduleId, scope.instanceId)}`,\n 'fix:',\n '- Ensure ModuleRuntime.make installs KernelImplementationRef (045 kernel contract).',\n '- If you created a mock runtime for tests, attach KernelImplementationRef or avoid calling kernel-only APIs.',\n ].join('\\n')\n : 'KernelImplementationRef not installed'\n throw new Error(msg)\n }\n return ref\n}\n","import { Context, Effect } from 'effect'\n\nexport interface RuntimeServiceBuiltins {\n /**\n * Returns the make Effect of a builtin implementation (provided by ModuleRuntime during assembly, avoiding external code\n * capturing internal closures/state).\n * - For kernel implementors only (e.g. core-ng) to implement behavior-equivalent replacements or thin wrappers.\n * - Not an app-facing contract; must not be depended on from business Flow/Logic.\n */\n readonly getBuiltinMake: (serviceId: string) => Effect.Effect<unknown, never, any>\n}\n\nexport class RuntimeServiceBuiltinsTag extends Context.Tag('@logixjs/core/RuntimeServiceBuiltins')<\n RuntimeServiceBuiltinsTag,\n RuntimeServiceBuiltins\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 { Context, Effect, FiberRef, Layer } from 'effect'\nimport type { JsonValue } from './jsonValue.js'\nimport { projectJsonValue } from './jsonValue.js'\nimport type { EvidencePackage } from './evidence.js'\nimport type { RunSession } from './runSession.js'\nimport { makeEvidenceSink } from './runSession.js'\nimport {\n currentDiagnosticsLevel,\n toRuntimeDebugEventRef,\n type Event as DebugEvent,\n type Sink as DebugSink,\n} from '../runtime/core/DebugSink.js'\n\nexport interface EvidenceCollector {\n readonly session: RunSession\n readonly debugSink: DebugSink\n readonly registerConvergeStaticIr: (staticIr: unknown) => void\n readonly setKernelImplementationRef: (ref: unknown) => void\n readonly setRuntimeServicesEvidence: (evidence: unknown) => void\n readonly exportEvidencePackage: (options?: { readonly maxEvents?: number }) => EvidencePackage\n readonly clear: () => void\n}\n\nclass EvidenceCollectorTagImpl extends Context.Tag('@logixjs/core/EvidenceCollector')<\n EvidenceCollectorTagImpl,\n EvidenceCollector\n>() {}\n\nexport const EvidenceCollectorTag = EvidenceCollectorTagImpl\n\nexport const evidenceCollectorLayer = (\n collector: EvidenceCollector,\n): Layer.Layer<EvidenceCollectorTagImpl, never, never> =>\n Layer.succeed(EvidenceCollectorTag, collector) as Layer.Layer<EvidenceCollectorTagImpl, never, never>\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nexport const makeEvidenceCollector = (session: RunSession): EvidenceCollector => {\n const sink = makeEvidenceSink(session)\n\n const convergeStaticIrByDigest = new Map<string, JsonValue>()\n let kernelImplementationRef: JsonValue | undefined\n let runtimeServicesEvidence: JsonValue | undefined\n\n const exportBudget = {\n dropped: 0,\n oversized: 0,\n nonSerializable: 0,\n }\n\n const debugSink: DebugSink = {\n record: (event: DebugEvent) =>\n Effect.gen(function* () {\n const level = yield* FiberRef.get(currentDiagnosticsLevel)\n const instanceIdRaw = (event as any).instanceId\n const instanceId = typeof instanceIdRaw === 'string' && instanceIdRaw.length > 0 ? instanceIdRaw : 'unknown'\n const eventSeq = level === 'off' ? undefined : session.local.nextSeq('eventSeq', instanceId)\n const ref = toRuntimeDebugEventRef(event, {\n diagnosticsLevel: level,\n eventSeq,\n onMetaProjection: ({ stats }) => {\n exportBudget.dropped += stats.dropped\n exportBudget.oversized += stats.oversized\n },\n })\n if (!ref) return\n\n const projected = projectJsonValue(ref)\n exportBudget.dropped += projected.stats.dropped\n exportBudget.oversized += projected.stats.oversized\n exportBudget.nonSerializable += projected.stats.nonSerializable\n\n sink.record('debug:event', projected.value, {\n timestamp: ref.timestamp,\n })\n }),\n }\n\n const registerConvergeStaticIr = (staticIr: unknown): void => {\n if (!isRecord(staticIr)) return\n const digest = staticIr.staticIrDigest\n if (typeof digest !== 'string' || digest.length === 0) return\n const projected = projectJsonValue(staticIr)\n exportBudget.dropped += projected.stats.dropped\n exportBudget.oversized += projected.stats.oversized\n exportBudget.nonSerializable += projected.stats.nonSerializable\n convergeStaticIrByDigest.set(digest, projected.value)\n }\n\n const setKernelImplementationRef = (ref: unknown): void => {\n const projected = projectJsonValue(ref)\n exportBudget.dropped += projected.stats.dropped\n exportBudget.oversized += projected.stats.oversized\n exportBudget.nonSerializable += projected.stats.nonSerializable\n kernelImplementationRef = projected.value\n }\n\n const setRuntimeServicesEvidence = (evidence: unknown): void => {\n const projected = projectJsonValue(evidence)\n exportBudget.dropped += projected.stats.dropped\n exportBudget.oversized += projected.stats.oversized\n exportBudget.nonSerializable += projected.stats.nonSerializable\n runtimeServicesEvidence = projected.value\n }\n\n const exportEvidencePackage = (options?: { readonly maxEvents?: number }): EvidencePackage => {\n const convergeSummary =\n convergeStaticIrByDigest.size > 0\n ? ({\n staticIrByDigest: Object.fromEntries(convergeStaticIrByDigest),\n } as unknown as JsonValue)\n : undefined\n\n const runtimeSummary =\n kernelImplementationRef != null || runtimeServicesEvidence != null\n ? ({\n ...(kernelImplementationRef != null ? { kernelImplementationRef } : {}),\n ...(runtimeServicesEvidence != null ? { services: runtimeServicesEvidence } : {}),\n } as unknown as JsonValue)\n : undefined\n\n const summary =\n convergeSummary != null || runtimeSummary != null\n ? ({\n ...(convergeSummary != null ? { converge: convergeSummary } : {}),\n ...(runtimeSummary != null ? { runtime: runtimeSummary } : {}),\n } as unknown as JsonValue)\n : undefined\n\n return sink.export({\n maxEvents: options?.maxEvents,\n summary,\n })\n }\n\n const clear = (): void => {\n sink.clear()\n convergeStaticIrByDigest.clear()\n kernelImplementationRef = undefined\n runtimeServicesEvidence = undefined\n exportBudget.dropped = 0\n exportBudget.oversized = 0\n exportBudget.nonSerializable = 0\n }\n\n return {\n session,\n debugSink,\n registerConvergeStaticIr,\n setKernelImplementationRef,\n setRuntimeServicesEvidence,\n exportEvidencePackage,\n clear,\n }\n}\n","import { Context, Layer } from 'effect'\nimport type { JsonValue } from './jsonValue.js'\nimport type { EvidencePackage, EvidencePackageSource, ObservationEnvelope } from './evidence.js'\nimport { exportEvidencePackage, OBSERVABILITY_PROTOCOL_VERSION } from './evidence.js'\n\nexport type RunId = string\n\nexport interface RunSessionLocalState {\n /**\n * once: a de-dup key set for \"emit only once\" behavior (must be isolated per session to avoid cross-session pollution).\n * Returns true if it's the first occurrence, false if the key has been seen before.\n */\n readonly once: (key: string) => boolean\n\n /**\n * seq: allocate monotonic sequences by key (e.g. opSeq/eventSeq), must be isolated per session.\n */\n readonly nextSeq: (namespace: string, key: string) => number\n\n /** Tests/reset only: clear this session's local state. */\n readonly clear: () => void\n}\n\nexport interface RunSession {\n readonly runId: RunId\n readonly source: EvidencePackageSource\n readonly startedAt: number\n readonly local: RunSessionLocalState\n}\n\nclass RunSessionTagImpl extends Context.Tag('@logixjs/core/RunSession')<RunSessionTagImpl, RunSession>() {}\n\nexport const RunSessionTag = RunSessionTagImpl\n\nexport interface EvidenceSink {\n readonly record: (type: string, payload: JsonValue, options?: { readonly timestamp?: number }) => void\n readonly export: (options?: {\n readonly protocolVersion?: string\n readonly createdAt?: number\n readonly summary?: JsonValue\n readonly maxEvents?: number\n }) => EvidencePackage\n readonly clear: () => void\n}\n\nconst NEXT_RUN_SEQ_KEY = Symbol.for('@logixjs/core/runSession/nextRunSeq')\nlet fallbackNextRunSeq = 0\n\nconst nextRunSeq = (): number => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const g: any = globalThis as any\n const prev = typeof g[NEXT_RUN_SEQ_KEY] === 'number' ? (g[NEXT_RUN_SEQ_KEY] as number) : 0\n const next = prev + 1\n g[NEXT_RUN_SEQ_KEY] = next\n return next\n } catch {\n fallbackNextRunSeq += 1\n return fallbackNextRunSeq\n }\n}\n\nconst makeRunId = (startedAt: number): RunId => `run-${startedAt}.${nextRunSeq()}`\n\nexport const makeRunSessionLocalState = (): RunSessionLocalState => {\n const onceKeys = new Set<string>()\n const seqByNamespace = new Map<string, Map<string, number>>()\n\n return {\n once: (key) => {\n if (onceKeys.has(key)) return false\n onceKeys.add(key)\n return true\n },\n nextSeq: (namespace, key) => {\n const byKey = seqByNamespace.get(namespace) ?? new Map<string, number>()\n if (!seqByNamespace.has(namespace)) seqByNamespace.set(namespace, byKey)\n const prev = byKey.get(key) ?? 0\n const next = prev + 1\n byKey.set(key, next)\n return next\n },\n clear: () => {\n onceKeys.clear()\n seqByNamespace.clear()\n },\n }\n}\n\nexport const makeRunSession = (options?: {\n readonly runId?: RunId\n readonly source?: EvidencePackageSource\n readonly startedAt?: number\n readonly local?: RunSessionLocalState\n}): RunSession => {\n const startedAt = options?.startedAt ?? Date.now()\n return {\n runId: options?.runId ?? makeRunId(startedAt),\n source: options?.source ?? { host: 'unknown' },\n startedAt,\n local: options?.local ?? makeRunSessionLocalState(),\n }\n}\n\nexport const makeEvidenceSink = (session: RunSession): EvidenceSink => {\n const events: ObservationEnvelope[] = []\n let nextSeq = 1\n\n return {\n record: (type, payload, options) => {\n events.push({\n protocolVersion: OBSERVABILITY_PROTOCOL_VERSION,\n runId: session.runId,\n seq: nextSeq++,\n timestamp: options?.timestamp ?? Date.now(),\n type,\n payload,\n })\n },\n export: (options) => {\n const protocolVersion = options?.protocolVersion ?? OBSERVABILITY_PROTOCOL_VERSION\n const maxEvents = options?.maxEvents\n\n const selected =\n typeof maxEvents === 'number' && Number.isFinite(maxEvents) && maxEvents > 0\n ? events.slice(Math.max(0, events.length - Math.floor(maxEvents)))\n : events.slice()\n\n return exportEvidencePackage({\n protocolVersion,\n runId: session.runId,\n source: session.source,\n createdAt: options?.createdAt,\n events: selected,\n summary: options?.summary,\n })\n },\n clear: () => {\n events.length = 0\n nextSeq = 1\n },\n }\n}\n\nexport const runSessionLayer = (session?: RunSession): Layer.Layer<RunSessionTagImpl, never, never> =>\n Layer.succeed(RunSessionTag, session ?? makeRunSession()) as Layer.Layer<RunSessionTagImpl, never, never>\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","// Internal EffectOp API (for internal implementation code).\n//\n// Goal:\n// - Internal modules must never import root public submodules (e.g. `../EffectOp`).\n// - This file hosts the shared implementation; public `src/EffectOp.ts` delegates to it.\n\nimport { Effect, Option } from 'effect'\nimport * as Core from './runtime/core/EffectOpCore.js'\nimport { RunSessionTag } from './observability/runSession.js'\n\nexport type EffectOp<Out = unknown, Err = unknown, Env = unknown> = Core.EffectOp<Out, Err, Env>\n\nexport type OperationPolicy = Core.OperationPolicy\n\nexport type OperationRejected = Core.OperationRejected\n\nexport type OperationError<E> = Core.OperationError<E>\n\nexport type Middleware = Core.Middleware\n\nexport type MiddlewareStack = Core.MiddlewareStack\n\nexport const composeMiddleware = Core.composeMiddleware\n\nexport const makeOperationRejected = Core.makeOperationRejected\n\n/**\n * Generate a stable id for identifying an EffectOp.\n * - Uses a monotonic sequence by default to avoid non-replayability from randomness/time.\n * - If meta.instanceId is available, prefer deriving `${instanceId}::o${opSeq}`.\n */\nlet nextGlobalOpSeq = 0\n\nconst nextOpSeq = (): number => {\n nextGlobalOpSeq += 1\n return nextGlobalOpSeq\n}\n\nconst makeId = (instanceId: string | undefined, opSeq: number): string =>\n instanceId ? `${instanceId}::o${opSeq}` : `o${opSeq}`\n\n/**\n * EffectOp.make:\n * - Create an EffectOp with basic meta.\n * - Generates a stable id by default (based on `instanceId` + monotonic `opSeq`); callers may override externally.\n */\nexport const make = <A, E, R>(params: {\n readonly kind: EffectOp['kind']\n readonly name: string\n readonly effect: Effect.Effect<A, E, R>\n readonly payload?: unknown\n readonly meta?: EffectOp['meta']\n readonly id?: string\n}): EffectOp<A, E, R> => ({\n ...(params.id\n ? { id: params.id, meta: params.meta }\n : (() => {\n const meta: any = params.meta ?? {}\n const instanceId: string | undefined = meta.instanceId\n const opSeq: number =\n typeof meta.opSeq === 'number' && Number.isFinite(meta.opSeq) ? Math.floor(meta.opSeq) : nextOpSeq()\n return {\n id: makeId(instanceId, opSeq),\n meta: meta.opSeq === opSeq ? meta : { ...meta, opSeq },\n }\n })()),\n kind: params.kind,\n name: params.name,\n payload: params.payload,\n effect: params.effect,\n})\n\n/**\n * EffectOp.makeInRunSession:\n * - Allocate a stable `opSeq` within a RunSession scope (per-session + per-instance).\n * - If RunSession is missing from Env, fall back to a process-wide monotonic sequence (no process-wide Map).\n */\nexport const makeInRunSession = <A, E, R>(params: {\n readonly kind: EffectOp['kind']\n readonly name: string\n readonly effect: Effect.Effect<A, E, R>\n readonly payload?: unknown\n readonly meta?: EffectOp['meta']\n readonly id?: string\n}): Effect.Effect<EffectOp<A, E, R>, never, any> =>\n Effect.gen(function* () {\n if (params.id) {\n return {\n id: params.id,\n kind: params.kind,\n name: params.name,\n payload: params.payload,\n meta: params.meta,\n effect: params.effect,\n } satisfies EffectOp<A, E, R>\n }\n\n const meta: any = params.meta ?? {}\n const instanceId: string | undefined = meta.instanceId\n\n let opSeq: number\n if (typeof meta.opSeq === 'number' && Number.isFinite(meta.opSeq)) {\n opSeq = Math.floor(meta.opSeq)\n } else {\n const sessionOpt = yield* Effect.serviceOption(RunSessionTag)\n if (Option.isSome(sessionOpt)) {\n const key = instanceId ?? 'global'\n opSeq = sessionOpt.value.local.nextSeq('opSeq', key)\n } else {\n opSeq = nextOpSeq()\n }\n }\n\n return {\n id: makeId(instanceId, opSeq),\n kind: params.kind,\n name: params.name,\n payload: params.payload,\n meta: meta.opSeq === opSeq ? meta : { ...meta, opSeq },\n effect: params.effect,\n } satisfies EffectOp<A, E, R>\n })\n\n/**\n * EffectOp.withMeta:\n * - Append or override meta fields on an existing EffectOp.\n * - Does not change the effect itself.\n */\nexport const withMeta = <A, E, R>(\n op: EffectOp<A, E, R>,\n meta: Partial<NonNullable<EffectOp['meta']>>,\n): EffectOp<A, E, R> => ({\n ...op,\n meta: { ...(op.meta ?? {}), ...meta },\n})\n\n/**\n * EffectOp.run:\n * - Execute an EffectOp using the given MiddlewareStack.\n * - If the stack is empty, return op.effect directly.\n */\nexport const run = <A, E, R>(op: EffectOp<A, E, R>, stack: MiddlewareStack): Effect.Effect<A, E, R> =>\n Core.runWithMiddleware(op, stack)\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 { Cause, Effect, Fiber, FiberRef, Ref, Stream } from 'effect'\nimport * as Debug from './DebugSink.js'\nimport { isDevEnv } from './env.js'\nimport type * as Logic from './LogicMiddleware.js'\nimport type { AnyModuleShape } from './module.js'\nimport type { RuntimeInternalsResolvedConcurrencyPolicy } from './RuntimeInternals.js'\nimport type { StateTxnOrigin } from './StateTransaction.js'\n\n/**\n * Prevents calling run*Task inside a \"synchronous transaction execution fiber\" (it would deadlock the txnQueue).\n *\n * - ModuleRuntime locally marks it as true while executing each transaction (dispatch/source-refresh/devtools/...).\n * - run*Task checks the flag on start: when true, it emits diagnostics only in dev/test and then no-ops.\n */\nexport const inSyncTransactionFiber = FiberRef.unsafeMake(false)\n\n/**\n * Force source.refresh:\n * - Default: when snapshot keyHash is unchanged and a non-idle snapshot already exists, refresh SHOULD be a no-op\n * (avoid redundant IO/writeback).\n * - Exception: explicit refresh (manual refresh) / invalidation-driven refresh needs to \"re-fetch even with the same keyHash\".\n *\n * Note: use a FiberRef to locally pass \"whether this refresh is forced\", avoiding expanding the source refresh handler signature.\n */\nexport const forceSourceRefresh = FiberRef.unsafeMake(false)\n\n/**\n * Synchronous transaction window (process-level) marker:\n * - Used as a hard guard in \"non-Effect API\" entry points (e.g. Promise/async functions).\n * - FiberRef cannot reliably read the \"current fiber\" in such entry points, so we need a synchronous callstack-level marker.\n *\n * Note: if a transaction body incorrectly crosses async boundaries, this marker will be held longer; that is a severe violation.\n */\nlet inSyncTransactionGlobalDepth = 0\n\nexport const enterSyncTransaction = (): void => {\n inSyncTransactionGlobalDepth += 1\n}\n\nexport const exitSyncTransaction = (): void => {\n inSyncTransactionGlobalDepth = Math.max(0, inSyncTransactionGlobalDepth - 1)\n}\n\nexport const isInSyncTransaction = (): boolean => inSyncTransactionGlobalDepth > 0\n\nexport type TaskRunnerMode =\n | 'task' // sequential\n | 'parallel'\n | 'latest'\n | 'exhaust'\n\nexport type TaskStatus = 'idle' | 'pending' | 'running' | 'success' | 'failure' | 'interrupted'\n\nexport interface TaskExecution {\n readonly taskId: number\n readonly status: TaskStatus\n readonly acceptedAt: number\n readonly startedAt?: number\n readonly endedAt?: number\n}\n\nexport interface TaskRunnerOrigins {\n readonly pending?: StateTxnOrigin\n readonly success?: StateTxnOrigin\n readonly failure?: StateTxnOrigin\n}\n\ntype TaskHandler<Payload, Sh extends AnyModuleShape, R> =\n | Logic.Of<Sh, R, void, never>\n | ((payload: Payload) => Logic.Of<Sh, R, void, never>)\n\ntype TaskEffect<Payload, Sh extends AnyModuleShape, R, A, E> =\n | Logic.Of<Sh, R, A, E>\n | ((payload: Payload) => Logic.Of<Sh, R, A, E>)\n\nexport interface TaskRunnerConfig<Payload, Sh extends AnyModuleShape, R, A = void, E = never> {\n /**\n * Optional: trigger source name (e.g. actionTag / fieldPath), used as the default pending origin.name.\n * - BoundApiRuntime may fill this in for onAction(\"xxx\") / traits.source.refresh(\"field\"), etc.\n * - Other callers are not required to provide it.\n */\n readonly triggerName?: string\n\n /**\n * pending: synchronous state writes (loading=true / clearing errors, etc.), always a separate transaction entry.\n * - Only executed for tasks that are accepted and actually started (ignored triggers in runExhaustTask do not run pending).\n */\n readonly pending?: TaskHandler<Payload, Sh, R>\n\n /**\n * effect: real IO / async work (must run outside the transaction window).\n */\n readonly effect: TaskEffect<Payload, Sh, R, A, E>\n\n /**\n * success: success writeback (separate transaction entry).\n */\n readonly success?: (result: A, payload: Payload) => Logic.Of<Sh, R, void, never>\n\n /**\n * failure: failure writeback (separate transaction entry).\n *\n * Note: takes a Cause to preserve defect/interrupt semantics; interrupts do not trigger failure writeback by default.\n */\n readonly failure?: (cause: Cause.Cause<E>, payload: Payload) => Logic.Of<Sh, R, void, never>\n\n /**\n * origin: optional override for the three transaction origins.\n * - Default: pending.kind=\"task:pending\"; success/failure.kind=\"service-callback\".\n */\n readonly origin?: TaskRunnerOrigins\n\n /**\n * priority: reserved for future debugging/sorting; does not change transaction boundaries or concurrency semantics.\n */\n readonly priority?: number\n}\n\nexport interface TaskRunnerRuntime {\n readonly moduleId?: string\n readonly instanceId?: string\n readonly runWithStateTransaction: (\n origin: StateTxnOrigin,\n body: () => Effect.Effect<void, never, any>,\n ) => Effect.Effect<void, never, any>\n readonly resolveConcurrencyPolicy?: () => Effect.Effect<RuntimeInternalsResolvedConcurrencyPolicy, never, any>\n}\n\nconst resolve = <Payload, Sh extends AnyModuleShape, R, A, E>(\n eff: TaskEffect<Payload, Sh, R, A, E> | TaskHandler<Payload, Sh, R>,\n payload: Payload,\n): any => (typeof eff === 'function' ? (eff as any)(payload) : eff)\n\nconst defaultOrigins = (triggerName: string | undefined): Required<TaskRunnerOrigins> => ({\n pending: {\n kind: 'task:pending',\n name: triggerName,\n },\n success: {\n kind: 'service-callback',\n name: 'task:success',\n },\n failure: {\n kind: 'service-callback',\n name: 'task:failure',\n },\n})\n\nexport const shouldNoopInSyncTransactionFiber = (options: {\n readonly moduleId?: string\n readonly instanceId?: string\n readonly code: string\n readonly severity: 'error' | 'warning' | 'info'\n readonly message: string\n readonly hint?: string\n readonly actionTag?: string\n readonly kind?: string\n}): Effect.Effect<boolean> =>\n Effect.gen(function* () {\n const inTxn = yield* FiberRef.get(inSyncTransactionFiber)\n if (!inTxn) {\n return false\n }\n // Always no-op regardless of env (otherwise we may deadlock); diagnostics are emitted only in dev/test.\n if (isDevEnv()) {\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: options.moduleId,\n instanceId: options.instanceId,\n code: options.code,\n severity: options.severity,\n message: options.message,\n hint: options.hint,\n actionTag: options.actionTag,\n kind: options.kind,\n })\n }\n return true\n })\n\nconst resolveConcurrencyLimit = (runtime: TaskRunnerRuntime): Effect.Effect<number | 'unbounded', never, any> =>\n runtime.resolveConcurrencyPolicy\n ? runtime.resolveConcurrencyPolicy().pipe(Effect.map((p) => p.concurrencyLimit))\n : Effect.succeed(16)\n\nconst runTaskLifecycle = <Payload, Sh extends AnyModuleShape, R, A, E>(\n payload: Payload,\n runtime: TaskRunnerRuntime,\n config: TaskRunnerConfig<Payload, Sh, R, A, E>,\n getCanWriteBack?: Effect.Effect<boolean>,\n): Effect.Effect<void, never, Logic.Env<Sh, R>> =>\n Effect.gen(function* () {\n const noop = yield* shouldNoopInSyncTransactionFiber({\n moduleId: runtime.moduleId,\n instanceId: runtime.instanceId,\n code: 'logic::invalid_usage',\n severity: 'error',\n message: 'run*Task is not allowed inside a synchronous StateTransaction body (it may deadlock the txnQueue).',\n hint:\n 'Call run*Task from the run section of a watcher (e.g. $.onAction/$.onState/$.on); ' +\n 'do not call it directly inside a reducer / trait.run / synchronous transaction body. For long-lived flows, use a multi-entry pattern (pending → IO → writeback).',\n kind: 'run_task_in_transaction',\n })\n if (noop) {\n return\n }\n\n const defaults = defaultOrigins(config.triggerName)\n const origins: Required<TaskRunnerOrigins> = {\n pending: config.origin?.pending ?? defaults.pending,\n success: config.origin?.success ?? defaults.success,\n failure: config.origin?.failure ?? defaults.failure,\n }\n\n // 1) pending: separate transaction entry; once started it should not be interrupted by runLatest.\n const pending = config.pending\n if (pending) {\n yield* Effect.uninterruptible(\n runtime.runWithStateTransaction(origins.pending, () => Effect.asVoid(resolve(pending, payload))),\n )\n }\n\n // 2) IO: runs outside the transaction window.\n const io = resolve(config.effect, payload) as Effect.Effect<A, E, Logic.Env<Sh, R>>\n const exit = yield* Effect.exit(io)\n\n // 3) writeback: use the guard to confirm it's still the current task (runLatestTask).\n if (getCanWriteBack) {\n const ok = yield* getCanWriteBack\n if (!ok) {\n return\n }\n }\n\n if (exit._tag === 'Success') {\n const success = config.success\n if (success) {\n yield* runtime.runWithStateTransaction(origins.success, () => Effect.asVoid(success(exit.value, payload)))\n }\n return\n }\n\n // Failure: interruptions do not trigger failure writeback (e.g. runLatestTask cancellation, Scope ending).\n const cause = exit.cause as Cause.Cause<E>\n if (Cause.isInterrupted(cause)) {\n return\n }\n\n const failure = config.failure\n if (failure) {\n yield* runtime.runWithStateTransaction(origins.failure, () => Effect.asVoid(failure(cause, payload)))\n }\n }).pipe(\n // Watchers must not crash as a whole due to a single task failure: swallow errors, but keep them diagnosable.\n Effect.catchAllCause((cause) =>\n Debug.record({\n type: 'diagnostic',\n moduleId: runtime.moduleId,\n instanceId: runtime.instanceId,\n code: 'task_runner::unhandled_failure',\n severity: 'error',\n message: 'TaskRunner encountered an unhandled failure (pending/IO/writeback).',\n hint: 'Add a failure writeback for this task or handle errors explicitly upstream; avoid fire-and-forget swallowing errors.',\n actionTag: config.triggerName,\n kind: 'task_runner_unhandled_failure',\n trigger: {\n kind: 'task',\n name: config.triggerName,\n },\n }).pipe(Effect.zipRight(Effect.logError('TaskRunner error', cause))),\n ),\n ) as Effect.Effect<void, never, Logic.Env<Sh, R>>\n\n/**\n * makeTaskRunner:\n * - Reuses FlowRuntime concurrency semantics (sequential/parallel/latest/exhaust).\n * - Splits a single trigger into: pending (separate txn) → IO → success/failure (separate txn).\n */\nexport const makeTaskRunner = <Payload, Sh extends AnyModuleShape, R, A = void, E = never>(\n stream: Stream.Stream<Payload>,\n mode: TaskRunnerMode,\n runtime: TaskRunnerRuntime,\n config: TaskRunnerConfig<Payload, Sh, R, A, E>,\n): Effect.Effect<void, never, Logic.Env<Sh, R>> => {\n if (mode === 'latest') {\n return Effect.gen(function* () {\n const taskIdRef = yield* Ref.make(0)\n const currentFiberRef = yield* Ref.make<Fiber.RuntimeFiber<void, never> | undefined>(undefined)\n\n const start = (payload: Payload) =>\n Effect.gen(function* () {\n const taskId = yield* Ref.updateAndGet(taskIdRef, (n) => n + 1)\n\n const prev = yield* Ref.get(currentFiberRef)\n if (prev) {\n // Do not wait for the old fiber to fully end (avoid blocking new triggers); writeback is guarded by taskId.\n yield* Fiber.interruptFork(prev)\n }\n\n const canWriteBack = Ref.get(taskIdRef).pipe(Effect.map((current) => current === taskId))\n\n const fiber = yield* Effect.fork(\n runTaskLifecycle<Payload, Sh, R, A, E>(payload, runtime, config, canWriteBack),\n )\n\n yield* Ref.set(currentFiberRef, fiber)\n })\n\n return yield* Stream.runForEach(stream, start)\n })\n }\n\n if (mode === 'exhaust') {\n return Effect.gen(function* () {\n const concurrency = yield* resolveConcurrencyLimit(runtime)\n const busyRef = yield* Ref.make(false)\n\n const mapper = (payload: Payload) =>\n Effect.gen(function* () {\n const acquired = yield* Ref.modify(busyRef, (busy) =>\n busy ? ([false, busy] as const) : ([true, true] as const),\n )\n if (!acquired) {\n // Ignore trigger: no pending transaction is produced.\n return\n }\n try {\n yield* runTaskLifecycle<Payload, Sh, R, A, E>(payload, runtime, config)\n } finally {\n yield* Ref.set(busyRef, false)\n }\n })\n\n return yield* Stream.runDrain(stream.pipe(Stream.mapEffect(mapper, { concurrency })))\n }) as Effect.Effect<void, never, Logic.Env<Sh, R>>\n }\n\n if (mode === 'parallel') {\n return Effect.gen(function* () {\n const concurrency = yield* resolveConcurrencyLimit(runtime)\n\n return yield* Stream.runDrain(\n stream.pipe(\n Stream.mapEffect((payload) => runTaskLifecycle<Payload, Sh, R, A, E>(payload, runtime, config), {\n concurrency,\n }),\n ),\n )\n }) as Effect.Effect<void, never, Logic.Env<Sh, R>>\n }\n\n // mode === \"task\"(sequential)\n return Stream.runForEach(stream, (payload) =>\n runTaskLifecycle<Payload, Sh, R, A, E>(payload, runtime, config),\n ) as Effect.Effect<void, never, Logic.Env<Sh, R>>\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","export interface DepsTraceResult<T> {\n readonly value: T\n readonly reads: ReadonlyArray<string>\n}\n\nexport interface DepsDiff {\n readonly reads: ReadonlyArray<string>\n readonly declared: ReadonlyArray<string>\n readonly missing: ReadonlyArray<string>\n readonly unused: ReadonlyArray<string>\n}\n\nconst isTraceableObject = (value: unknown): value is object => {\n if (!value || typeof value !== 'object') return false\n if (Array.isArray(value)) return true\n if (value instanceof Date) return false\n if (value instanceof RegExp) return false\n if (value instanceof Error) return false\n if (value instanceof Map) return false\n if (value instanceof Set) return false\n if (value instanceof WeakMap) return false\n if (value instanceof WeakSet) return false\n return true\n}\n\nconst shouldIgnoreKey = (key: string): boolean => key === '__proto__' || key === 'prototype' || key === 'constructor'\n\nconst normalizeReads = (reads: ReadonlySet<string>): ReadonlyArray<string> => {\n const all = Array.from(reads).filter((p) => typeof p === 'string' && p.length > 0)\n all.sort()\n\n // Drop strict prefix paths (e.g. if both profile and profile.id are read, keep only the more specific profile.id).\n const isPrefix = (prefix: string, full: string): boolean => full !== prefix && full.startsWith(prefix + '.')\n\n const pruned: Array<string> = []\n for (const p of all) {\n let hasMoreSpecific = false\n for (const other of all) {\n if (isPrefix(p, other)) {\n hasMoreSpecific = true\n break\n }\n }\n if (!hasMoreSpecific) {\n pruned.push(p)\n }\n }\n\n pruned.sort()\n return pruned\n}\n\nconst covers = (declared: string, read: string): boolean => declared === read || read.startsWith(declared + '.')\n\nexport const diffDeps = (declared: ReadonlyArray<string>, reads: ReadonlyArray<string>): DepsDiff | undefined => {\n const declaredList = Array.from(new Set(declared)).filter((p) => typeof p === 'string' && p.length > 0)\n declaredList.sort()\n const readList = Array.from(new Set(reads)).filter((p) => typeof p === 'string' && p.length > 0)\n readList.sort()\n\n const missing = readList.filter((r) => declaredList.every((d) => !covers(d, r)))\n const unused = declaredList.filter((d) => readList.every((r) => !covers(d, r)))\n\n if (missing.length === 0 && unused.length === 0) return undefined\n\n return {\n reads: readList,\n declared: declaredList,\n missing,\n unused,\n }\n}\n\nexport const trace = <T>(fn: (state: any) => T, state: unknown): DepsTraceResult<T> => {\n if (!isTraceableObject(state)) {\n return { value: fn(state as any), reads: [] }\n }\n\n const reads = new Set<string>()\n\n // per-trace caches to preserve reference identity within the traced call.\n const proxyCache = new WeakMap<object, Map<string, any>>()\n const proxyToTarget = new WeakMap<object, object>()\n\n const wrap = (value: unknown, path: string): unknown => {\n if (!isTraceableObject(value)) return value\n return getProxy(value as any, path)\n }\n\n const unwrap = <V>(value: V): V => {\n if (value && (typeof value === 'object' || typeof value === 'function')) {\n const target = proxyToTarget.get(value as any)\n if (target) return target as any as V\n }\n return value\n }\n\n const getProxy = (target: object, basePath: string): any => {\n let byPath = proxyCache.get(target)\n if (!byPath) {\n byPath = new Map()\n proxyCache.set(target, byPath)\n }\n\n const cached = byPath.get(basePath)\n if (cached) return cached\n\n const record = (path: string) => {\n if (path) reads.add(path)\n }\n\n const proxy = new Proxy(target as any, {\n get: (t, prop, receiver) => {\n if (typeof prop === 'symbol') {\n return Reflect.get(t, prop, receiver)\n }\n const key = String(prop)\n if (shouldIgnoreKey(key)) {\n return Reflect.get(t, prop, receiver)\n }\n\n const nextPath = basePath ? `${basePath}.${key}` : key\n record(nextPath)\n\n const value = Reflect.get(t, prop, receiver) as unknown\n return wrap(value, nextPath)\n },\n has: (t, prop) => {\n if (typeof prop === 'symbol') return Reflect.has(t, prop)\n const key = String(prop)\n if (!shouldIgnoreKey(key)) {\n const nextPath = basePath ? `${basePath}.${key}` : key\n record(nextPath)\n }\n return Reflect.has(t, prop)\n },\n ownKeys: (t) => {\n if (basePath) record(basePath)\n return Reflect.ownKeys(t)\n },\n getOwnPropertyDescriptor: (t, prop) => {\n if (typeof prop === 'symbol') {\n return Reflect.getOwnPropertyDescriptor(t, prop)\n }\n const key = String(prop)\n if (!shouldIgnoreKey(key)) {\n const nextPath = basePath ? `${basePath}.${key}` : key\n record(nextPath)\n }\n return Reflect.getOwnPropertyDescriptor(t, prop)\n },\n set: () => {\n throw new Error(\n '[deps-trace] Attempted to mutate state during deps tracing (state is readonly in dev-mode diagnostics).',\n )\n },\n defineProperty: () => {\n throw new Error(\n '[deps-trace] Attempted to define property on state during deps tracing (state is readonly in dev-mode diagnostics).',\n )\n },\n deleteProperty: () => {\n throw new Error(\n '[deps-trace] Attempted to delete property on state during deps tracing (state is readonly in dev-mode diagnostics).',\n )\n },\n })\n\n byPath.set(basePath, proxy)\n proxyToTarget.set(proxy, target)\n return proxy\n }\n\n const root = getProxy(state as any, '')\n const value = unwrap(fn(root))\n\n return {\n value,\n reads: normalizeReads(reads),\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, Fiber, FiberRef, Option } from 'effect'\nimport { create } from 'mutative'\nimport * as EffectOp from '../effect-op.js'\nimport { Snapshot, internal as ResourceInternal, keyHash as hashKey } from '../resource.js'\nimport * as EffectOpCore from '../runtime/core/EffectOpCore.js'\nimport * as Debug from '../runtime/core/DebugSink.js'\nimport * as TaskRunner from '../runtime/core/TaskRunner.js'\nimport { isDevEnv, ReplayModeConfigTag } from '../runtime/core/env.js'\nimport * as ReplayLog from '../runtime/core/ReplayLog.js'\nimport type { PatchReason } from '../runtime/core/StateTransaction.js'\nimport type { FieldPath, FieldPathId } from '../field-path.js'\nimport { normalizeFieldPath } from '../field-path.js'\nimport type { BoundApi } from '../runtime/core/module.js'\nimport { getBoundInternals } from '../runtime/core/runtimeInternalsAccessor.js'\nimport { RunSessionTag } from '../observability/runSession.js'\nimport * as DepsTrace from './deps-trace.js'\nimport * as RowId from './rowid.js'\nimport type { StateTraitEntry, StateTraitPlanStep, StateTraitProgram } from './model.js'\n\nexport interface SourceSyncContext<S> {\n readonly moduleId?: string\n readonly instanceId?: string\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\nconst onceInRunSession = (key: string): Effect.Effect<boolean, never, any> =>\n Effect.serviceOption(RunSessionTag).pipe(\n Effect.map((maybe) => (Option.isSome(maybe) ? maybe.value.local.once(key) : true)),\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\nconst 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, never, any> =>\n Effect.gen(function* () {\n const key = `${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\nconst getMiddlewareStack = (): Effect.Effect<EffectOp.MiddlewareStack, never, any> =>\n Effect.serviceOption(EffectOpCore.EffectOpMiddlewareTag).pipe(\n Effect.map((maybe) => (Option.isSome(maybe) ? maybe.value.stack : [])),\n )\n\nconst recordTraitPatch = (\n bound: BoundApi<any, any>,\n path: string,\n reason: PatchReason,\n from?: unknown,\n to?: unknown,\n traitNodeId?: string,\n): void => {\n const normalized = normalizeFieldPath(path) ?? []\n try {\n const internals = getBoundInternals(bound as any)\n internals.txn.recordStatePatch(normalized, reason, from, to, traitNodeId)\n } catch {\n // no-op for legacy/mocked bound\n }\n}\n\nconst recordReplayEvent = (bound: BoundApi<any, any>, event: ReplayLog.ReplayLogEvent): void => {\n try {\n const internals = getBoundInternals(bound as any)\n internals.txn.recordReplayEvent(event)\n } catch {\n // no-op for legacy/mocked bound\n }\n}\n\nconst getBoundScope = (bound: BoundApi<any, any>): { readonly moduleId?: string; readonly instanceId?: string } => {\n try {\n const internals = getBoundInternals(bound as any)\n return { moduleId: internals.moduleId, instanceId: internals.instanceId }\n } catch {\n return { moduleId: undefined, instanceId: undefined }\n }\n}\n\nconst setSnapshotInTxn = (\n bound: BoundApi<any, any>,\n fieldPath: string,\n next: unknown,\n reason: PatchReason,\n stepId: string,\n traitNodeId?: string,\n): Effect.Effect<boolean, never, any> =>\n Effect.gen(function* () {\n let wrote = false\n yield* bound.state.mutate((draft) => {\n const prev = RowId.getAtPath(draft, fieldPath)\n if (Object.is(prev, next)) return\n wrote = true\n RowId.setAtPathMutating(draft, fieldPath, next)\n recordTraitPatch(bound, fieldPath, reason, prev, next, traitNodeId)\n })\n return wrote\n })\n\nconst writebackIfCurrentKeyHash = (\n bound: BoundApi<any, any>,\n fieldPath: string,\n keyHash: string,\n next: unknown,\n reason: PatchReason,\n stepId: string,\n traitNodeId?: string,\n replayEvent?: ReplayLog.ReplayLogEvent,\n): Effect.Effect<boolean, never, any> =>\n Effect.gen(function* () {\n let wrote = false\n yield* bound.state.mutate((draft) => {\n const current = RowId.getAtPath(draft, fieldPath)\n const currentKeyHash = current && typeof current === 'object' ? (current as any).keyHash : undefined\n if (currentKeyHash !== keyHash) return\n\n const prev = current\n if (Object.is(prev, next)) return\n\n wrote = true\n RowId.setAtPathMutating(draft, fieldPath, next)\n if (replayEvent) {\n recordReplayEvent(bound, replayEvent)\n }\n recordTraitPatch(bound, fieldPath, reason, prev, next, traitNodeId)\n })\n return wrote\n })\n\n/**\n * syncIdleInTransaction:\n * - Synchronously evaluate all source.key(state) within the transaction window.\n * - If a key becomes empty (undefined), synchronously reset the field to an idle snapshot (avoid tearing).\n */\nexport const syncIdleInTransaction = <S extends object>(\n program: StateTraitProgram<S>,\n ctx: SourceSyncContext<S>,\n): Effect.Effect<void> =>\n Effect.sync(() => {\n const draft = ctx.getDraft() as any\n const updates: Array<{ readonly fieldPath: string; readonly prev: unknown }> = []\n\n for (const entry of program.entries) {\n if (entry.kind !== 'source') continue\n const fieldPath = entry.fieldPath\n const listItem = RowId.parseListItemFieldPath(fieldPath)\n\n if (listItem) {\n // list.item scope: evaluate key per row by index, and synchronously write back idle for inactive rows.\n const listValue = RowId.getAtPath(draft, listItem.listPath)\n const items: ReadonlyArray<unknown> = Array.isArray(listValue) ? listValue : []\n\n for (let index = 0; index < items.length; index++) {\n const item = items[index]\n\n let key: unknown\n try {\n key = (entry.meta as any).key(item)\n } catch {\n continue\n }\n\n if (key !== undefined) continue\n\n const concretePath = RowId.toListItemValuePath(listItem.listPath, index, listItem.itemPath)\n const prev = RowId.getAtPath(draft, concretePath)\n const prevStatus = prev && typeof prev === 'object' ? (prev as any).status : undefined\n if (prevStatus === 'idle') {\n const data = (prev as any)?.data\n const error = (prev as any)?.error\n if (data === undefined && error === undefined) {\n continue\n }\n }\n\n updates.push({ fieldPath: concretePath, prev })\n }\n\n continue\n }\n\n let key: unknown\n try {\n key = (entry.meta as any).key(draft)\n } catch {\n continue\n }\n\n if (key !== undefined) continue\n\n const prev = RowId.getAtPath(draft, fieldPath)\n const prevStatus = prev && typeof prev === 'object' ? (prev as any).status : undefined\n if (prevStatus === 'idle') {\n // Still ensure data/error are cleared.\n const data = (prev as any)?.data\n const error = (prev as any)?.error\n if (data === undefined && error === undefined) {\n continue\n }\n }\n\n updates.push({ fieldPath, prev })\n }\n\n if (updates.length === 0) return\n\n const reason: PatchReason = 'source-refresh'\n\n const nextDraft = create(draft, (next) => {\n for (const u of updates) {\n RowId.setAtPathMutating(next, u.fieldPath, Snapshot.idle())\n }\n })\n\n ctx.setDraft(nextDraft as S)\n\n for (const u of updates) {\n const normalized = normalizeFieldPath(u.fieldPath) ?? []\n ctx.recordPatch(normalized, reason, u.prev, Snapshot.idle(), `source:${u.fieldPath}:idle`)\n }\n })\n\n/**\n * installSourceRefresh:\n * - Register the refresh implementation for a single source field (ResourceSnapshot + keyHash gate + concurrency).\n */\nexport const installSourceRefresh = <S>(\n bound: BoundApi<any, any>,\n step: StateTraitPlanStep,\n entry: Extract<StateTraitEntry<S, string>, { readonly kind: 'source' }>,\n): Effect.Effect<void, never, any> => {\n if (!step.targetFieldPath) return Effect.void\n\n const fieldPath = step.targetFieldPath\n const resourceId = step.resourceId ?? entry.meta.resource\n const listItem = RowId.parseListItemFieldPath(fieldPath)\n\n let internals: ReturnType<typeof getBoundInternals> | undefined\n try {\n internals = getBoundInternals(bound as any)\n } catch {\n return Effect.void\n }\n\n const register = internals.traits.registerSourceRefresh\n\n const recordSnapshot = (\n replayMode: 'live' | 'replay',\n replayLog: ReplayLog.ReplayLogService | undefined,\n input:\n | ReplayLog.ReplayLogEvent\n | {\n readonly moduleId?: string\n readonly instanceId?: string\n readonly fieldPath: string\n readonly keyHash?: string\n readonly concurrency?: string\n readonly phase: ReplayLog.ResourceSnapshotPhase\n readonly snapshot: unknown\n },\n ): Effect.Effect<void, never, any> => {\n if (!replayLog) return Effect.void\n if (replayMode !== 'live') return Effect.void\n const event: ReplayLog.ReplayLogEvent =\n input && typeof input === 'object' && (input as any)._tag === 'ResourceSnapshot'\n ? (input as ReplayLog.ReplayLogEvent)\n : {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath: (input as any).fieldPath,\n keyHash: (input as any).keyHash,\n concurrency: (input as any).concurrency,\n phase: (input as any).phase,\n snapshot: (input as any).snapshot,\n timestamp: Date.now(),\n moduleId: (input as any).moduleId,\n instanceId: (input as any).instanceId,\n }\n return replayLog.record(event)\n }\n\n // list.item scope: in-flight gating by RowID (avoid writing to the wrong row under insert/remove/reorder).\n if (listItem) {\n const store = internals.traits.rowIdStore as RowId.RowIdStore | undefined\n if (!store) {\n return Effect.void\n }\n\n const listPath = listItem.listPath\n const itemPath = listItem.itemPath\n if (!itemPath) {\n // Never write the snapshot back to the whole item (it would overwrite business values).\n return Effect.void\n }\n\n const concurrency = (entry.meta as any).concurrency as 'switch' | 'exhaust-trailing' | undefined\n const mode = concurrency ?? 'switch'\n\n const inFlight = new Map<\n RowId.RowId,\n {\n readonly gen: number\n readonly fiber: Fiber.RuntimeFiber<void, never>\n readonly keyHash: string\n }\n >()\n const trailing = new Map<RowId.RowId, { readonly key: unknown; readonly keyHash: string }>()\n let gen = 0\n\n // When a row is removed: clear trailing/inFlight references to avoid wrong attribution or memory leaks.\n store.onRemoved(listPath, (rowId) => {\n trailing.delete(rowId)\n inFlight.delete(rowId)\n })\n\n const setSnapshotForRowInTxn = (\n rowId: RowId.RowId,\n next: unknown,\n reason: PatchReason,\n stepId: string,\n ): Effect.Effect<string | undefined, never, any> =>\n Effect.gen(function* () {\n let wrotePath: string | undefined\n yield* bound.state.mutate((draft) => {\n const index = store.getIndex(listPath, rowId)\n if (index === undefined) return\n const concretePath = RowId.toListItemValuePath(listPath, index, itemPath)\n const prev = RowId.getAtPath(draft, concretePath)\n if (Object.is(prev, next)) return\n wrotePath = concretePath\n RowId.setAtPathMutating(draft, concretePath, next)\n recordTraitPatch(bound, concretePath, reason, prev, next, step.debugInfo?.graphNodeId)\n })\n return wrotePath\n })\n\n const writebackIfCurrentKeyHashForRow = (\n rowId: RowId.RowId,\n keyHash: string,\n next: unknown,\n reason: PatchReason,\n stepId: string,\n phase?: ReplayLog.ResourceSnapshotPhase,\n ): Effect.Effect<string | undefined, never, any> =>\n Effect.gen(function* () {\n let wrotePath: string | undefined\n yield* bound.state.mutate((draft) => {\n const index = store.getIndex(listPath, rowId)\n if (index === undefined) return\n const concretePath = RowId.toListItemValuePath(listPath, index, itemPath)\n\n const current = RowId.getAtPath(draft, concretePath)\n const currentKeyHash = current && typeof current === 'object' ? (current as any).keyHash : undefined\n if (currentKeyHash !== keyHash) return\n\n const prev = current\n if (Object.is(prev, next)) return\n\n wrotePath = concretePath\n RowId.setAtPathMutating(draft, concretePath, next)\n if (phase) {\n const { moduleId, instanceId } = getBoundScope(bound)\n recordReplayEvent(bound, {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath: concretePath,\n keyHash,\n concurrency: mode,\n phase,\n snapshot: next,\n timestamp: Date.now(),\n moduleId,\n instanceId,\n })\n }\n recordTraitPatch(bound, concretePath, reason, prev, next, step.debugInfo?.graphNodeId)\n })\n return wrotePath\n })\n\n const startFetch = (\n rowId: RowId.RowId,\n key: unknown,\n keyHash: string,\n replayMode: 'live' | 'replay',\n replayLog: ReplayLog.ReplayLogService | undefined,\n ): Effect.Effect<void, never, any> =>\n Effect.gen(function* () {\n const { moduleId, instanceId } = getBoundScope(bound)\n\n const indexForLog = store.getIndex(listPath, rowId)\n const logFieldPath =\n indexForLog === undefined ? undefined : RowId.toListItemValuePath(listPath, indexForLog, itemPath)\n\n let loadingSnapshot: unknown = Snapshot.loading({ keyHash })\n if (replayMode === 'replay' && replayLog && logFieldPath) {\n const replayLoading = yield* replayLog.consumeNextResourceSnapshot({\n resourceId,\n fieldPath: logFieldPath,\n keyHash,\n phase: 'loading',\n })\n if (replayLoading) {\n loadingSnapshot = replayLoading.snapshot\n }\n }\n const wroteLoadingPath = yield* setSnapshotForRowInTxn(\n rowId,\n loadingSnapshot,\n 'source-refresh',\n `source:${fieldPath}:${rowId}:loading`,\n )\n if (wroteLoadingPath) {\n const event: ReplayLog.ReplayLogEvent = {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath: wroteLoadingPath,\n keyHash,\n concurrency: mode,\n phase: 'loading',\n snapshot: loadingSnapshot,\n timestamp: Date.now(),\n moduleId,\n instanceId,\n }\n recordReplayEvent(bound, event)\n yield* recordSnapshot(replayMode, replayLog, event)\n }\n\n const io = Effect.gen(function* () {\n if (replayMode === 'replay' && replayLog) {\n // Let loading commit become visible first, then replay the settled phase (preserve the async-resource timeline shape).\n yield* Effect.yieldNow()\n const consumePath = wroteLoadingPath ?? logFieldPath\n if (!consumePath) return yield* Effect.void\n\n const replayed = yield* replayLog.consumeNextResourceSnapshot({\n resourceId,\n fieldPath: consumePath,\n keyHash,\n })\n if (!replayed) return yield* Effect.void\n\n if (replayed.phase === 'success') {\n yield* writebackIfCurrentKeyHashForRow(\n rowId,\n keyHash,\n replayed.snapshot,\n 'source-refresh',\n `source:${fieldPath}:${rowId}:success`,\n 'success',\n )\n } else if (replayed.phase === 'error') {\n yield* writebackIfCurrentKeyHashForRow(\n rowId,\n keyHash,\n replayed.snapshot,\n 'source-refresh',\n `source:${fieldPath}:${rowId}:error`,\n 'error',\n )\n }\n\n return yield* Effect.void\n }\n\n const stack = yield* getMiddlewareStack()\n\n const registryOpt = yield* Effect.serviceOption(ResourceInternal.ResourceRegistryTag)\n const registry = Option.isSome(registryOpt) ? registryOpt.value : undefined\n const spec = registry?.specs.get(resourceId)\n\n if (!spec) {\n return yield* Effect.void\n }\n\n const loadEffect = (spec.load as any)(key) as Effect.Effect<any, any, any>\n\n const meta: any = {\n moduleId,\n instanceId,\n fieldPath,\n resourceId,\n key,\n keyHash,\n rowId,\n traitNodeId: step.debugInfo?.graphNodeId,\n stepId: step.id,\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 seqKey = instanceId ?? 'global'\n meta.opSeq = sessionOpt.value.local.nextSeq('opSeq', seqKey)\n }\n }\n\n const op = EffectOp.make<any, any, any>({\n kind: 'service',\n name: resourceId,\n effect: loadEffect,\n meta,\n })\n\n const exit = yield* Effect.exit(EffectOp.run(op, stack))\n\n if (exit._tag === 'Success') {\n const successSnapshot = Snapshot.success({ keyHash, data: exit.value })\n const wroteSuccessPath = yield* writebackIfCurrentKeyHashForRow(\n rowId,\n keyHash,\n successSnapshot,\n 'source-refresh',\n `source:${fieldPath}:${rowId}:success`,\n 'success',\n )\n if (wroteSuccessPath) {\n yield* recordSnapshot(replayMode, replayLog, {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath: wroteSuccessPath,\n keyHash,\n concurrency: mode,\n phase: 'success',\n snapshot: successSnapshot,\n timestamp: Date.now(),\n moduleId,\n instanceId,\n })\n }\n } else {\n const errorSnapshot = Snapshot.error({ keyHash, error: exit.cause })\n const wroteErrorPath = yield* writebackIfCurrentKeyHashForRow(\n rowId,\n keyHash,\n errorSnapshot,\n 'source-refresh',\n `source:${fieldPath}:${rowId}:error`,\n 'error',\n )\n if (wroteErrorPath) {\n yield* recordSnapshot(replayMode, replayLog, {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath: wroteErrorPath,\n keyHash,\n concurrency: mode,\n phase: 'error',\n snapshot: errorSnapshot,\n timestamp: Date.now(),\n moduleId,\n instanceId,\n })\n }\n }\n }).pipe(Effect.catchAllCause(() => Effect.void))\n\n // list.item: IO fibers must detach from the sync-transaction FiberRef; otherwise they'd be misclassified as \"in txn window\"\n // and block subsequent writeback entrypoints.\n const fiber = yield* Effect.forkScoped(Effect.locally(TaskRunner.inSyncTransactionFiber, false)(io))\n const myGen = (gen += 1)\n inFlight.set(rowId, { gen: myGen, fiber, keyHash })\n\n yield* Effect.forkScoped(\n Effect.locally(\n TaskRunner.inSyncTransactionFiber,\n false,\n )(\n Fiber.await(fiber).pipe(\n Effect.zipRight(\n Effect.sync(() => {\n const current = inFlight.get(rowId)\n if (current && current.gen === myGen) {\n inFlight.delete(rowId)\n }\n }),\n ),\n Effect.zipRight(\n mode === 'exhaust-trailing'\n ? Effect.gen(function* () {\n const next = trailing.get(rowId)\n trailing.delete(rowId)\n if (next) {\n yield* startFetch(rowId, next.key, next.keyHash, replayMode, replayLog)\n }\n })\n : Effect.void,\n ),\n Effect.catchAllCause(() => Effect.void),\n ),\n ),\n )\n })\n\n register(fieldPath, (state: any) =>\n Effect.gen(function* () {\n const { moduleId, instanceId } = getBoundScope(bound)\n const replayModeOpt = yield* Effect.serviceOption(ReplayModeConfigTag)\n const replayMode = Option.isSome(replayModeOpt) ? replayModeOpt.value.mode : 'live'\n const replayLogOpt = yield* Effect.serviceOption(ReplayLog.ReplayLog)\n const replayLog = Option.isSome(replayLogOpt) ? replayLogOpt.value : undefined\n const force = yield* FiberRef.get(TaskRunner.forceSourceRefresh)\n\n const listValue = RowId.getAtPath(state, listPath)\n const items: ReadonlyArray<unknown> = Array.isArray(listValue) ? listValue : []\n const ids = store.ensureList(listPath, items)\n\n // dev-mode: trace deps once for the first row (diagnostics only; does not affect execution semantics).\n const traceKey = `${instanceId ?? 'unknown'}::source::${fieldPath}`\n if (isDevEnv() && (yield* onceInRunSession(`deps_trace_settled:${traceKey}`))) {\n try {\n const sample = items[0]\n if (sample !== undefined) {\n const traced = DepsTrace.trace((s) => (entry.meta as any).key(s), sample as any)\n const prefixedReads = traced.reads.map((r) => (r ? `${listPath}[].${r}` : `${listPath}[]`))\n const diff = DepsTrace.diffDeps(((entry.meta as any).deps ?? []) as ReadonlyArray<string>, prefixedReads)\n if (diff) {\n yield* emitDepsMismatch({\n moduleId,\n instanceId,\n kind: 'source',\n fieldPath,\n diff,\n })\n }\n }\n } catch {\n // tracing failure should never break refresh flow\n }\n }\n\n for (let index = 0; index < items.length; index++) {\n const rowId = ids[index]\n if (!rowId) continue\n\n const concretePath = RowId.toListItemValuePath(listPath, index, itemPath)\n const prevSnapshot = RowId.getAtPath(state, concretePath) as any\n\n let key: unknown\n try {\n key = (entry.meta as any).key(items[index])\n } catch {\n key = undefined\n }\n\n const current = inFlight.get(rowId)\n\n if (key === undefined) {\n trailing.delete(rowId)\n inFlight.delete(rowId)\n\n // If it's already clean idle, avoid redundant writeback (prevents meaningless patches and UI jitter).\n if (\n prevSnapshot &&\n typeof prevSnapshot === 'object' &&\n prevSnapshot.status === 'idle' &&\n prevSnapshot.data === undefined &&\n prevSnapshot.error === undefined\n ) {\n continue\n }\n\n const idleSnapshot = Snapshot.idle()\n const wroteIdlePath = yield* setSnapshotForRowInTxn(\n rowId,\n idleSnapshot,\n 'source-refresh',\n `source:${fieldPath}:${rowId}:idle`,\n )\n if (wroteIdlePath) {\n const event: ReplayLog.ReplayLogEvent = {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath: wroteIdlePath,\n keyHash: undefined,\n concurrency: mode,\n phase: 'idle',\n snapshot: idleSnapshot,\n timestamp: Date.now(),\n moduleId,\n instanceId,\n }\n recordReplayEvent(bound, event)\n yield* recordSnapshot(replayMode, replayLog, event)\n }\n continue\n }\n\n const h = hashKey(key)\n\n // keyHash unchanged: avoid redundant refresh while keeping in-flight.\n if (!force && current && current.keyHash === h) {\n continue\n }\n\n // Not in-flight: if snapshot.keyHash already matches, treat it as already up-to-date (avoid full refresh and row jitter).\n const prevKeyHash =\n prevSnapshot && typeof prevSnapshot === 'object' ? (prevSnapshot as any).keyHash : undefined\n if (!force && !current && prevKeyHash === h) {\n continue\n }\n\n if (mode === 'exhaust-trailing' && current) {\n trailing.set(rowId, { key, keyHash: h })\n const loadingSnapshot = Snapshot.loading({ keyHash: h })\n const wroteLoadingPath = yield* setSnapshotForRowInTxn(\n rowId,\n loadingSnapshot,\n 'source-refresh',\n `source:${fieldPath}:${rowId}:loading`,\n )\n if (wroteLoadingPath) {\n const event: ReplayLog.ReplayLogEvent = {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath: wroteLoadingPath,\n keyHash: h,\n concurrency: mode,\n phase: 'loading',\n snapshot: loadingSnapshot,\n timestamp: Date.now(),\n moduleId,\n instanceId,\n }\n recordReplayEvent(bound, event)\n yield* recordSnapshot(replayMode, replayLog, event)\n }\n continue\n }\n\n if (mode === 'switch' && current) {\n // Do not rely on cancellation correctness: stale writebacks are dropped by the keyHash gate.\n trailing.delete(rowId)\n inFlight.delete(rowId)\n }\n\n yield* startFetch(rowId, key, h, replayMode, replayLog)\n }\n }),\n )\n\n return Effect.void\n }\n\n // in-flight state (per field)\n let inFlight:\n | {\n readonly gen: number\n readonly fiber: Fiber.RuntimeFiber<void, never>\n readonly keyHash: string\n }\n | undefined\n let gen = 0\n let trailing: { readonly key: unknown; readonly keyHash: string } | undefined\n\n const concurrency = (entry.meta as any).concurrency as 'switch' | 'exhaust-trailing' | undefined\n const mode = concurrency ?? 'switch'\n\n const startFetch = (\n key: unknown,\n keyHash: string,\n replayMode: 'live' | 'replay',\n replayLog: ReplayLog.ReplayLogService | undefined,\n ): Effect.Effect<void, never, any> =>\n Effect.gen(function* () {\n const { moduleId, instanceId } = getBoundScope(bound)\n\n // 1) pending: synchronously write a loading snapshot (within the current transaction window).\n let loadingSnapshot: unknown = Snapshot.loading({ keyHash })\n if (replayMode === 'replay' && replayLog) {\n const replayLoading = yield* replayLog.consumeNextResourceSnapshot({\n resourceId,\n fieldPath,\n keyHash,\n phase: 'loading',\n })\n if (replayLoading) {\n loadingSnapshot = replayLoading.snapshot\n }\n }\n const wroteLoading = yield* setSnapshotInTxn(\n bound,\n fieldPath,\n loadingSnapshot,\n 'source-refresh',\n `source:${fieldPath}:loading`,\n step.debugInfo?.graphNodeId,\n )\n if (wroteLoading) {\n const event: ReplayLog.ReplayLogEvent = {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath,\n keyHash,\n concurrency: mode,\n phase: 'loading',\n snapshot: loadingSnapshot,\n timestamp: Date.now(),\n moduleId,\n instanceId,\n }\n recordReplayEvent(bound, event)\n yield* recordSnapshot(replayMode, replayLog, event)\n }\n\n // 2) IO: run in a background fiber (avoid blocking the current transaction).\n const io = Effect.gen(function* () {\n if (replayMode === 'replay' && replayLog) {\n // Let loading commit become visible first, then replay the settled phase (preserve the async-resource timeline shape).\n yield* Effect.yieldNow()\n const replayed = yield* replayLog.consumeNextResourceSnapshot({\n resourceId,\n fieldPath,\n keyHash,\n })\n if (!replayed) return yield* Effect.void\n\n if (replayed.phase === 'success') {\n const event: ReplayLog.ReplayLogEvent = {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath,\n keyHash,\n concurrency: mode,\n phase: 'success',\n snapshot: replayed.snapshot,\n timestamp: Date.now(),\n moduleId,\n instanceId,\n }\n yield* writebackIfCurrentKeyHash(\n bound,\n fieldPath,\n keyHash,\n replayed.snapshot,\n 'source-refresh',\n `source:${fieldPath}:success`,\n step.debugInfo?.graphNodeId,\n event,\n )\n } else if (replayed.phase === 'error') {\n const event: ReplayLog.ReplayLogEvent = {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath,\n keyHash,\n concurrency: mode,\n phase: 'error',\n snapshot: replayed.snapshot,\n timestamp: Date.now(),\n moduleId,\n instanceId,\n }\n yield* writebackIfCurrentKeyHash(\n bound,\n fieldPath,\n keyHash,\n replayed.snapshot,\n 'source-refresh',\n `source:${fieldPath}:error`,\n step.debugInfo?.graphNodeId,\n event,\n )\n }\n\n return yield* Effect.void\n }\n\n const stack = yield* getMiddlewareStack()\n\n const registryOpt = yield* Effect.serviceOption(ResourceInternal.ResourceRegistryTag)\n const registry = Option.isSome(registryOpt) ? registryOpt.value : undefined\n const spec = registry?.specs.get(resourceId)\n\n if (!spec) {\n return yield* Effect.void\n }\n\n const loadEffect = (spec.load as any)(key) as Effect.Effect<any, any, any>\n\n const meta: any = {\n moduleId,\n instanceId,\n fieldPath,\n resourceId,\n key,\n keyHash,\n traitNodeId: step.debugInfo?.graphNodeId,\n stepId: step.id,\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 seqKey = instanceId ?? 'global'\n meta.opSeq = sessionOpt.value.local.nextSeq('opSeq', seqKey)\n }\n }\n\n const op = EffectOp.make<any, any, any>({\n kind: 'trait-source',\n name: resourceId,\n effect: loadEffect,\n meta,\n })\n\n const exit = yield* Effect.exit(EffectOp.run(op, stack))\n\n // 3) writeback: use a keyHash gate to prevent stale results from writing back onto a new key.\n if (exit._tag === 'Success') {\n const successSnapshot = Snapshot.success({ keyHash, data: exit.value })\n const event: ReplayLog.ReplayLogEvent = {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath,\n keyHash,\n concurrency: mode,\n phase: 'success',\n snapshot: successSnapshot,\n timestamp: Date.now(),\n moduleId,\n instanceId,\n }\n const wroteSuccess = yield* writebackIfCurrentKeyHash(\n bound,\n fieldPath,\n keyHash,\n successSnapshot,\n 'source-refresh',\n `source:${fieldPath}:success`,\n step.debugInfo?.graphNodeId,\n event,\n )\n if (wroteSuccess) {\n yield* recordSnapshot(replayMode, replayLog, event)\n }\n } else {\n const errorSnapshot = Snapshot.error({ keyHash, error: exit.cause })\n const event: ReplayLog.ReplayLogEvent = {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath,\n keyHash,\n concurrency: mode,\n phase: 'error',\n snapshot: errorSnapshot,\n timestamp: Date.now(),\n moduleId,\n instanceId,\n }\n const wroteError = yield* writebackIfCurrentKeyHash(\n bound,\n fieldPath,\n keyHash,\n errorSnapshot,\n 'source-refresh',\n `source:${fieldPath}:error`,\n step.debugInfo?.graphNodeId,\n event,\n )\n if (wroteError) {\n yield* recordSnapshot(replayMode, replayLog, event)\n }\n }\n }).pipe(Effect.catchAllCause(() => Effect.void))\n\n // Do not wait for IO completion: forkScoped into the runtime scope so unmount will interrupt automatically.\n const fiber = yield* Effect.forkScoped(Effect.locally(TaskRunner.inSyncTransactionFiber, false)(io))\n const myGen = (gen += 1)\n inFlight = { gen: myGen, fiber, keyHash }\n\n // After in-flight completes, clean up; in exhaust-trailing mode, run one trailing fetch if present.\n yield* Effect.forkScoped(\n Effect.locally(\n TaskRunner.inSyncTransactionFiber,\n false,\n )(\n Fiber.await(fiber).pipe(\n Effect.zipRight(\n Effect.sync(() => {\n if (inFlight && inFlight.gen === myGen) {\n inFlight = undefined\n }\n }),\n ),\n Effect.zipRight(\n mode === 'exhaust-trailing'\n ? Effect.gen(function* () {\n const next = trailing\n trailing = undefined\n if (next) {\n yield* startFetch(next.key, next.keyHash, replayMode, replayLog)\n }\n })\n : Effect.void,\n ),\n Effect.catchAllCause(() => Effect.void),\n ),\n ),\n )\n })\n\n register(fieldPath, (state: any) =>\n Effect.gen(function* () {\n const { moduleId, instanceId } = getBoundScope(bound)\n const replayModeOpt = yield* Effect.serviceOption(ReplayModeConfigTag)\n const replayMode = Option.isSome(replayModeOpt) ? replayModeOpt.value.mode : 'live'\n const replayLogOpt = yield* Effect.serviceOption(ReplayLog.ReplayLog)\n const replayLog = Option.isSome(replayLogOpt) ? replayLogOpt.value : undefined\n const force = yield* FiberRef.get(TaskRunner.forceSourceRefresh)\n\n let key: unknown\n try {\n key = (entry.meta as any).key(state)\n } catch {\n key = undefined\n }\n\n // dev-mode: detect mismatch between actual reads in keySelector and declared deps (diagnostics only; does not affect execution semantics).\n const traceKey = `${instanceId ?? 'unknown'}::source::${fieldPath}`\n if (isDevEnv() && (yield* onceInRunSession(`deps_trace_settled:${traceKey}`))) {\n try {\n const traced = DepsTrace.trace((s) => (entry.meta as any).key(s), state)\n const diff = DepsTrace.diffDeps(((entry.meta as any).deps ?? []) as ReadonlyArray<string>, traced.reads)\n if (diff) {\n yield* emitDepsMismatch({\n moduleId,\n instanceId,\n kind: 'source',\n fieldPath,\n diff,\n })\n }\n } catch {\n // tracing failure should never break refresh flow\n }\n }\n\n // Key becomes empty: synchronously clear to idle (and interrupt in-flight).\n if (key === undefined) {\n if (inFlight) {\n yield* Fiber.interruptFork(inFlight.fiber)\n inFlight = undefined\n }\n trailing = undefined\n\n const idleSnapshot = Snapshot.idle()\n const wroteIdle = yield* setSnapshotInTxn(\n bound,\n fieldPath,\n idleSnapshot,\n 'source-refresh',\n `source:${fieldPath}:idle`,\n step.debugInfo?.graphNodeId,\n )\n if (wroteIdle) {\n const event: ReplayLog.ReplayLogEvent = {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath,\n keyHash: undefined,\n concurrency: mode,\n phase: 'idle',\n snapshot: idleSnapshot,\n timestamp: Date.now(),\n moduleId,\n instanceId,\n }\n recordReplayEvent(bound, event)\n yield* recordSnapshot(replayMode, replayLog, event)\n }\n return\n }\n\n const h = hashKey(key)\n\n // Default semantics: when a non-idle snapshot already exists for the same keyHash, refresh should be a no-op when possible\n // (avoid duplicate IO/writeback). Explicit refresh/invalidate can bypass via force.\n if (!force) {\n if (inFlight && inFlight.keyHash === h) {\n return\n }\n\n const currentSnapshot = RowId.getAtPath(state, fieldPath) as any\n const currentKeyHash =\n currentSnapshot && typeof currentSnapshot === 'object' ? (currentSnapshot as any).keyHash : undefined\n const currentStatus =\n currentSnapshot && typeof currentSnapshot === 'object' ? (currentSnapshot as any).status : undefined\n if (currentStatus && currentStatus !== 'idle' && currentKeyHash === h) {\n return\n }\n }\n\n if (mode === 'exhaust-trailing' && inFlight) {\n // Busy: record trailing and update loading immediately; stale in-flight writebacks will be blocked by the keyHash gate.\n trailing = { key, keyHash: h }\n const loadingSnapshot = Snapshot.loading({ keyHash: h })\n const wroteLoading = yield* setSnapshotInTxn(\n bound,\n fieldPath,\n loadingSnapshot,\n 'source-refresh',\n `source:${fieldPath}:loading`,\n step.debugInfo?.graphNodeId,\n )\n if (wroteLoading) {\n const event: ReplayLog.ReplayLogEvent = {\n _tag: 'ResourceSnapshot',\n resourceId,\n fieldPath,\n keyHash: h,\n concurrency: mode,\n phase: 'loading',\n snapshot: loadingSnapshot,\n timestamp: Date.now(),\n moduleId,\n instanceId,\n }\n recordReplayEvent(bound, event)\n yield* recordSnapshot(replayMode, replayLog, event)\n }\n return\n }\n\n if (mode === 'switch' && inFlight) {\n yield* Fiber.interruptFork(inFlight.fiber)\n inFlight = undefined\n trailing = undefined\n }\n\n // start fetch (pending tx + fork IO)\n yield* startFetch(key, h, replayMode, replayLog)\n }),\n )\n\n return Effect.void\n}\n","import { Context, Layer } from 'effect'\nimport { isDevEnv } from './runtime/core/env.js'\n\nexport interface ResourceSpec<Key, Out, Err, Env> {\n readonly id: string\n readonly keySchema: import('effect').Schema.Schema<Key, any>\n readonly load: (key: Key) => import('effect').Effect.Effect<Out, Err, Env>\n readonly meta?: {\n readonly cacheGroup?: string\n readonly description?: string\n readonly [k: string]: unknown\n }\n}\n\nexport type AnyResourceSpec = ResourceSpec<any, any, any, any>\n\nexport type ResourceStatus = 'idle' | 'loading' | 'success' | 'error'\n\nexport interface ResourceSnapshot<Data = unknown, Err = unknown> {\n readonly status: ResourceStatus\n readonly keyHash?: string\n readonly data?: Data\n readonly error?: Err\n}\n\nconst stableStringify = (value: unknown): string => {\n const seen = new WeakSet<object>()\n const encode = (input: unknown): unknown => {\n if (input === null) return null\n if (typeof input === 'string' || typeof input === 'number' || typeof input === 'boolean') {\n return input\n }\n if (typeof input === 'bigint') return input.toString()\n if (typeof input === 'undefined') return '__undefined__'\n if (typeof input === 'symbol') return `__symbol__:${String(input)}`\n if (typeof input === 'function') return '__function__'\n\n if (Array.isArray(input)) {\n return input.map((v) => encode(v))\n }\n if (input instanceof Date) {\n return `__date__:${input.toISOString()}`\n }\n if (input instanceof Error) {\n return {\n _tag: 'Error',\n name: input.name,\n message: input.message,\n }\n }\n if (input && typeof input === 'object') {\n const obj = input as object\n if (seen.has(obj)) return '__cycle__'\n seen.add(obj)\n\n const record = input as Record<string, unknown>\n const keys = Object.keys(record).sort()\n const out: Record<string, unknown> = {}\n for (const k of keys) {\n out[k] = encode(record[k])\n }\n return out\n }\n return String(input)\n }\n\n try {\n return JSON.stringify(encode(value))\n } catch {\n return String(value)\n }\n}\n\nexport const keyHash = (key: unknown): string => stableStringify(key)\n\nexport const Snapshot = {\n idle: <Data = never, Err = never>(): ResourceSnapshot<Data, Err> => ({\n status: 'idle',\n keyHash: undefined,\n data: undefined,\n error: undefined,\n }),\n loading: <Data = never, Err = never>(params: { readonly keyHash: string }): ResourceSnapshot<Data, Err> => ({\n status: 'loading',\n keyHash: params.keyHash,\n data: undefined,\n error: undefined,\n }),\n success: <Data>(params: { readonly keyHash: string; readonly data: Data }): ResourceSnapshot<Data, never> => ({\n status: 'success',\n keyHash: params.keyHash,\n data: params.data,\n error: undefined,\n }),\n error: <Err>(params: { readonly keyHash: string; readonly error: Err }): ResourceSnapshot<never, Err> => ({\n status: 'error',\n keyHash: params.keyHash,\n data: undefined,\n error: params.error,\n }),\n} as const\n\nexport interface ResourceRegistry {\n readonly specs: ReadonlyMap<string, AnyResourceSpec>\n}\n\nexport class ResourceRegistryTag extends Context.Tag('@logixjs/core/ResourceRegistry')<\n ResourceRegistryTag,\n ResourceRegistry\n>() {}\n\nexport const internal = {\n ResourceRegistryTag,\n}\n\nexport type Spec<Key, Out, Err, Env> = ResourceSpec<Key, Out, Err, Env>\n\nexport const make = <Key, Out, Err, Env>(spec: ResourceSpec<Key, Out, Err, Env>): ResourceSpec<Key, Out, Err, Env> =>\n spec\n\nexport const layer = (specs: ReadonlyArray<AnyResourceSpec>): Layer.Layer<ResourceRegistryTag, never, never> =>\n Layer.succeed(\n ResourceRegistryTag,\n (() => {\n const map = new Map<string, AnyResourceSpec>()\n for (const spec of specs) {\n if (isDevEnv() && map.has(spec.id) && map.get(spec.id) !== spec) {\n throw new Error(`[Resource.layer] Duplicate resource id \"${spec.id}\" detected in the same runtime scope`)\n }\n map.set(spec.id, spec)\n }\n return { specs: map }\n })(),\n )\n","import { Context, Effect, Layer } from 'effect'\n\nexport type ResourceSnapshotPhase = 'idle' | 'loading' | 'success' | 'error'\n\nexport type ReplayLogEvent =\n | {\n readonly _tag: 'ResourceSnapshot'\n readonly resourceId: string\n readonly fieldPath: string\n readonly keyHash?: string\n /**\n * Optional: source concurrency policy (e.g. \"switch\" / \"exhaust-trailing\").\n * - Must remain slim & serializable.\n * - Used by Devtools/replay to explain why old results are dropped / why trailing happens.\n */\n readonly concurrency?: string\n readonly phase: ResourceSnapshotPhase\n readonly snapshot: unknown\n readonly timestamp: number\n readonly moduleId?: string\n readonly instanceId?: string\n }\n | {\n readonly _tag: 'InvalidateRequest'\n readonly timestamp: number\n readonly moduleId?: string\n readonly instanceId?: string\n readonly kind: 'resource' | 'query'\n readonly target: string\n readonly meta?: unknown\n }\n\nexport type ResourceSnapshotEvent = Extract<ReplayLogEvent, { readonly _tag: 'ResourceSnapshot' }>\n\nexport interface ReplayLogService {\n readonly record: (event: ReplayLogEvent) => Effect.Effect<void>\n readonly snapshot: Effect.Effect<ReadonlyArray<ReplayLogEvent>>\n readonly resetCursor: Effect.Effect<void>\n readonly consumeNext: (predicate: (event: ReplayLogEvent) => boolean) => Effect.Effect<ReplayLogEvent | undefined>\n readonly consumeNextResourceSnapshot: (params: {\n readonly resourceId: string\n readonly fieldPath: string\n readonly keyHash?: string\n readonly phase?: ResourceSnapshotPhase\n }) => Effect.Effect<ResourceSnapshotEvent | undefined>\n}\n\nexport class ReplayLog extends Context.Tag('@logixjs/core/ReplayLog')<ReplayLog, ReplayLogService>() {}\n\nexport const make = (initial?: ReadonlyArray<ReplayLogEvent>): ReplayLogService => {\n const events: Array<ReplayLogEvent> = initial ? Array.from(initial) : []\n let cursor = 0\n\n const consumeNext = (predicate: (event: ReplayLogEvent) => boolean): Effect.Effect<ReplayLogEvent | undefined> =>\n Effect.sync(() => {\n for (let i = cursor; i < events.length; i++) {\n const event = events[i]\n if (!predicate(event)) continue\n cursor = i + 1\n return event\n }\n return undefined\n })\n\n const consumeNextResourceSnapshot = (params: {\n readonly resourceId: string\n readonly fieldPath: string\n readonly keyHash?: string\n readonly phase?: ResourceSnapshotPhase\n }): Effect.Effect<ResourceSnapshotEvent | undefined> =>\n consumeNext((event): event is ResourceSnapshotEvent => {\n if (event._tag !== 'ResourceSnapshot') return false\n if (event.resourceId !== params.resourceId) return false\n if (event.fieldPath !== params.fieldPath) return false\n if (params.keyHash !== undefined && event.keyHash !== params.keyHash) {\n return false\n }\n if (params.phase !== undefined && event.phase !== params.phase) {\n return false\n }\n return true\n }).pipe(Effect.map((event) => event as ResourceSnapshotEvent | undefined))\n\n return {\n record: (event) => Effect.sync(() => events.push(event)),\n snapshot: Effect.sync(() => events.slice()),\n resetCursor: Effect.sync(() => {\n cursor = 0\n }),\n consumeNext,\n consumeNextResourceSnapshot,\n }\n}\n\nexport const layer = (initial?: ReadonlyArray<ReplayLogEvent>): Layer.Layer<ReplayLog, never, never> =>\n Layer.succeed(ReplayLog, make(initial))\n\nexport const record = (event: ReplayLogEvent): Effect.Effect<void, never, ReplayLog> =>\n Effect.gen(function* () {\n const log = yield* ReplayLog\n yield* log.record(event)\n })\n\nexport const snapshot: Effect.Effect<ReadonlyArray<ReplayLogEvent>, never, ReplayLog> = Effect.gen(function* () {\n const log = yield* ReplayLog\n return yield* log.snapshot\n})\n\nexport const resetCursor: Effect.Effect<void, never, ReplayLog> = Effect.gen(function* () {\n const log = yield* ReplayLog\n yield* log.resetCursor\n})\n\nexport const consumeNextResourceSnapshot = (params: {\n readonly resourceId: string\n readonly fieldPath: string\n readonly keyHash?: string\n readonly phase?: ResourceSnapshotPhase\n}): Effect.Effect<ResourceSnapshotEvent | undefined, never, ReplayLog> =>\n Effect.gen(function* () {\n const log = yield* ReplayLog\n return yield* log.consumeNextResourceSnapshot(params)\n })\n","export type RowId = string\n\nexport interface ListConfig {\n readonly path: string\n readonly trackBy?: string\n}\n\nexport type ListRemovalListener = (rowId: RowId) => void\n\ntype Segment = string | number\n\nconst parseSegments = (path: string): ReadonlyArray<Segment> => {\n if (!path) return []\n return path.split('.').map((seg) => (/^[0-9]+$/.test(seg) ? Number(seg) : seg))\n}\n\nexport const 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 if (typeof seg === 'number') {\n current = Array.isArray(current) ? current[seg] : current[String(seg)]\n continue\n }\n current = current[seg]\n }\n return current\n}\n\nexport const 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\nexport const 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\n if (current && typeof current === 'object') {\n delete current[last as any]\n }\n}\n\nexport const joinPath = (prefix: string, suffix: string): string => {\n if (!prefix) return suffix\n if (!suffix) return prefix\n return `${prefix}.${suffix}`\n}\n\nexport interface ListItemFieldPath {\n readonly listPath: string\n readonly itemPath: string\n}\n\n/**\n * parseListItemFieldPath:\n * - Recognize a list.item field path like \"items[].profileResource\".\n * - Supports nested arrays: returns listPath/itemPath for the innermost list.\n */\nexport const parseListItemFieldPath = (fieldPath: string): ListItemFieldPath | undefined => {\n const raw = typeof fieldPath === 'string' ? fieldPath.trim() : ''\n if (!raw) return undefined\n\n const segments = raw.split('.').filter(Boolean)\n let lastListSeg = -1\n for (let i = 0; i < segments.length; i++) {\n if (segments[i]!.endsWith('[]')) lastListSeg = i\n }\n if (lastListSeg < 0) return undefined\n\n const strip = (seg: string): string => (seg.endsWith('[]') ? seg.slice(0, -2) : seg)\n\n const listPath = segments\n .slice(0, lastListSeg + 1)\n .map(strip)\n .join('.')\n\n const itemPath = segments\n .slice(lastListSeg + 1)\n .map(strip)\n .join('.')\n\n return { listPath, itemPath }\n}\n\nexport const toListItemValuePath = (listPath: string, index: number, itemPath: string): string =>\n itemPath ? `${listPath}.${index}.${itemPath}` : `${listPath}.${index}`\n\ntype ListState = {\n readonly listPath: string\n readonly parentRowId?: RowId\n readonly itemsRef: ReadonlyArray<unknown>\n readonly ids: ReadonlyArray<RowId>\n readonly indexById: ReadonlyMap<RowId, number>\n readonly trackBy?: string\n}\n\nconst 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\nconst didReorderByReference = (prevItems: ReadonlyArray<unknown>, nextItems: ReadonlyArray<unknown>): boolean => {\n const buckets = new Map<unknown, Array<number>>()\n for (let i = 0; i < prevItems.length; i++) {\n const item = prevItems[i]\n const list = buckets.get(item) ?? []\n list.push(i)\n buckets.set(item, list)\n }\n\n for (let nextIndex = 0; nextIndex < nextItems.length; nextIndex++) {\n const item = nextItems[nextIndex]\n const q = buckets.get(item)\n if (!q || q.length === 0) continue\n const prevIndex = q.shift()!\n if (prevIndex !== nextIndex) {\n return true\n }\n }\n\n return false\n}\n\nconst hasStableTrackByKeys = (items: ReadonlyArray<unknown>, trackBy: string): boolean =>\n items.every((item) => readTrackBy(item, trackBy) !== undefined)\n\nconst isSameTrackBySequence = (\n prevItems: ReadonlyArray<unknown>,\n nextItems: ReadonlyArray<unknown>,\n trackBy: string,\n): boolean => {\n if (prevItems.length !== nextItems.length) return false\n for (let i = 0; i < prevItems.length; i++) {\n if (!Object.is(readTrackBy(prevItems[i], trackBy), readTrackBy(nextItems[i], trackBy))) {\n return false\n }\n }\n return true\n}\n\nconst reconcileIds = (\n prev: ListState | undefined,\n nextItems: ReadonlyArray<unknown>,\n trackBy?: string,\n makeRowId?: () => RowId,\n): { readonly ids: ReadonlyArray<RowId>; readonly removed: ReadonlyArray<RowId> } => {\n const nextRowId =\n makeRowId ??\n (() => {\n let rowSeq = 0\n return () => {\n rowSeq += 1\n return `r${rowSeq}`\n }\n })()\n\n if (!prev) {\n return {\n ids: nextItems.map(() => nextRowId()),\n removed: [],\n }\n }\n\n if (prev.itemsRef === nextItems) {\n return {\n ids: prev.ids,\n removed: [],\n }\n }\n\n // Important: keep RowId stable under \"non-structural changes\" (field updates / object clones only),\n // otherwise in-flight state and caches would be invalidated needlessly.\n const sameLength = prev.itemsRef.length === nextItems.length\n if (sameLength) {\n // trackBy case: if the key sequence is identical, we can reuse old ids;\n // otherwise we must reconcile by key (avoid misclassifying clone+reorder as \"no reorder\").\n if (trackBy) {\n const canUseKeys = hasStableTrackByKeys(prev.itemsRef, trackBy) && hasStableTrackByKeys(nextItems, trackBy)\n if (canUseKeys) {\n if (isSameTrackBySequence(prev.itemsRef, nextItems, trackBy)) {\n return {\n ids: prev.ids,\n removed: [],\n }\n }\n } else {\n // If trackBy keys are not available, fall back to reference-level detection (keep stability for \"cloned but not reordered\").\n if (!didReorderByReference(prev.itemsRef, nextItems)) {\n return {\n ids: prev.ids,\n removed: [],\n }\n }\n }\n } else if (!didReorderByReference(prev.itemsRef, nextItems)) {\n return {\n ids: prev.ids,\n removed: [],\n }\n }\n }\n\n const keyOf = (item: unknown): unknown => {\n if (!trackBy) return item\n const k = readTrackBy(item, trackBy)\n return k !== undefined ? k : item\n }\n\n const buckets = new Map<unknown, Array<RowId>>()\n for (let i = 0; i < prev.itemsRef.length; i++) {\n const key = keyOf(prev.itemsRef[i])\n const list = buckets.get(key) ?? []\n list.push(prev.ids[i]!)\n buckets.set(key, list)\n }\n\n const ids: Array<RowId> = []\n for (let i = 0; i < nextItems.length; i++) {\n const key = keyOf(nextItems[i])\n const list = buckets.get(key)\n if (list && list.length > 0) {\n ids.push(list.shift()!)\n } else {\n ids.push(nextRowId())\n }\n }\n\n const removed: Array<RowId> = []\n for (const list of buckets.values()) {\n removed.push(...list)\n }\n\n return { ids, removed }\n}\n\nconst buildIndexById = (ids: ReadonlyArray<RowId>): ReadonlyMap<RowId, number> => {\n const map = new Map<RowId, number>()\n for (let i = 0; i < ids.length; i++) {\n map.set(ids[i]!, i)\n }\n return map\n}\n\nexport class RowIdStore {\n private readonly lists = new Map<string, ListState>()\n private readonly removalListeners = new Map<string, Set<ListRemovalListener>>()\n private readonly rowIdIndex = new Map<\n RowId,\n { readonly key: string; readonly listPath: string; readonly index: number }\n >()\n private nextRowSeq = 0\n\n constructor(private readonly instanceId?: string) {}\n\n private listKey = (listPath: string, parentRowId?: RowId): string =>\n parentRowId ? `${listPath}@@${parentRowId}` : listPath\n\n private makeRowId = (): RowId => {\n this.nextRowSeq += 1\n return this.instanceId ? `${this.instanceId}::r${this.nextRowSeq}` : `r${this.nextRowSeq}`\n }\n\n private notifyRemoved(listPath: string, rowId: RowId): void {\n const listeners = this.removalListeners.get(listPath)\n if (!listeners || listeners.size === 0) return\n for (const fn of listeners) {\n try {\n fn(rowId)\n } catch {\n // listener failures should never break runtime behavior\n }\n }\n }\n\n private removeDescendants(parentRowId: RowId): void {\n const keys: Array<string> = []\n for (const [k, st] of this.lists.entries()) {\n if (st.parentRowId === parentRowId) keys.push(k)\n }\n\n for (const key of keys) {\n const st = this.lists.get(key)\n if (!st) continue\n this.lists.delete(key)\n for (let i = 0; i < st.ids.length; i++) {\n const rowId = st.ids[i]!\n this.rowIdIndex.delete(rowId)\n this.notifyRemoved(st.listPath, rowId)\n this.removeDescendants(rowId)\n }\n }\n }\n\n onRemoved(listPath: string, listener: ListRemovalListener): () => void {\n const set = this.removalListeners.get(listPath) ?? new Set<ListRemovalListener>()\n set.add(listener)\n this.removalListeners.set(listPath, set)\n return () => {\n const current = this.removalListeners.get(listPath)\n if (!current) return\n current.delete(listener)\n if (current.size === 0) this.removalListeners.delete(listPath)\n }\n }\n\n getRowId(listPath: string, index: number, parentRowId?: RowId): RowId | undefined {\n const state = this.lists.get(this.listKey(listPath, parentRowId))\n return state ? state.ids[index] : undefined\n }\n\n getIndex(listPath: string, rowId: RowId): number | undefined {\n const info = this.rowIdIndex.get(rowId)\n if (!info) return undefined\n if (info.listPath !== listPath) return undefined\n return info.index\n }\n\n /**\n * ensureList:\n * - Align RowID mapping for the given listPath with the current items.\n * - Returns the latest ids (index -> RowId).\n */\n ensureList(\n listPath: string,\n items: ReadonlyArray<unknown>,\n trackBy?: string,\n parentRowId?: RowId,\n ): ReadonlyArray<RowId> {\n const key = this.listKey(listPath, parentRowId)\n const prev = this.lists.get(key)\n const { ids, removed } = reconcileIds(prev, items, trackBy ?? prev?.trackBy, this.makeRowId)\n\n const next: ListState = {\n listPath,\n parentRowId,\n itemsRef: items,\n ids,\n indexById: buildIndexById(ids),\n trackBy: trackBy ?? prev?.trackBy,\n }\n this.lists.set(key, next)\n\n if (removed.length > 0) {\n for (const rowId of removed) {\n this.rowIdIndex.delete(rowId)\n this.notifyRemoved(listPath, rowId)\n this.removeDescendants(rowId)\n }\n }\n\n // Refresh the reverse rowId -> index mapping (index changes are allowed).\n for (let i = 0; i < ids.length; i++) {\n const rowId = ids[i]!\n this.rowIdIndex.set(rowId, { key, listPath, index: i })\n }\n\n return ids\n }\n\n /**\n * updateAll:\n * - After each commit, align RowID mappings for all known lists.\n * - configs come from list declarations in StateTraitProgram.spec (may include trackBy).\n */\n updateAll(state: unknown, configs: ReadonlyArray<ListConfig>): void {\n const cfgByPath = new Map<string, ListConfig>()\n const paths: Array<string> = []\n for (const cfg of configs) {\n if (!cfg || typeof cfg.path !== 'string') continue\n const p = cfg.path.trim()\n if (!p) continue\n cfgByPath.set(p, cfg)\n paths.push(p)\n }\n\n const pathSet = new Set(paths)\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 (pathSet.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 const childrenByParent = new Map<string | undefined, Array<string>>()\n\n for (const path of paths) {\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 const list = childrenByParent.get(parent) ?? []\n list.push(path)\n childrenByParent.set(parent, list)\n }\n\n // roots first (and deterministic traversal)\n const roots = (childrenByParent.get(undefined) ?? []).slice().sort((a, b) => a.localeCompare(b))\n\n const visit = (listPath: string, parentRowId: RowId | undefined, listValue: unknown): void => {\n const cfg = cfgByPath.get(listPath)\n const items = Array.isArray(listValue) ? (listValue as ReadonlyArray<unknown>) : []\n const ids = this.ensureList(listPath, items, cfg?.trackBy, parentRowId)\n\n const children = (childrenByParent.get(listPath) ?? []).slice().sort((a, b) => a.localeCompare(b))\n if (children.length === 0) return\n\n for (let i = 0; i < items.length; i++) {\n const row = items[i]\n const rowId = ids[i]\n if (!rowId) continue\n for (const childPath of children) {\n const suffix = suffixByPath.get(childPath) ?? ''\n const childValue = suffix ? getAtPath(row as any, suffix) : undefined\n visit(childPath, rowId, childValue)\n }\n }\n }\n\n for (const root of roots) {\n const value = getAtPath(state as any, root)\n visit(root, undefined, value)\n }\n }\n}\n\nexport const collectListConfigs = (spec: Record<string, unknown>): ReadonlyArray<ListConfig> => {\n const configs: Array<ListConfig> = []\n for (const key in spec) {\n if (!Object.prototype.hasOwnProperty.call(spec, key)) continue\n const raw = spec[key]\n if (!raw || typeof raw !== 'object') continue\n const tag = (raw as any)._tag\n if (tag !== 'StateTraitList') continue\n const trackBy = (raw as any).identityHint?.trackBy\n configs.push({\n path: key,\n trackBy: typeof trackBy === 'string' ? trackBy : undefined,\n })\n }\n return configs\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 type { Schema } from 'effect'\nimport * as SchemaAST from 'effect/SchemaAST'\nimport {\n type StateTraitProgram,\n type StateTraitSpec,\n type StateTraitEntry,\n type StateTraitGraph,\n type StateTraitGraphEdge,\n type StateTraitGraphNode,\n type StateTraitField,\n type StateTraitFieldTrait,\n type StateTraitPlan,\n type StateTraitPlanStep,\n type StateTraitResource,\n type StateTraitSchemaPathRef,\n collectNodeMeta,\n normalizeSpec,\n} from './model.js'\nimport * as Meta from './meta.js'\nimport {\n compareFieldPath,\n getFieldPathId,\n makeFieldPathIdRegistry,\n normalizeFieldPath,\n type FieldPath,\n type FieldPathId,\n} from '../field-path.js'\nimport { fnv1a32, stableStringify } from '../digest.js'\nimport type { ConvergeStaticIrRegistry } from './converge-ir.js'\n\nconst nowPerf = (): number =>\n typeof globalThis.performance !== 'undefined' && typeof globalThis.performance.now === 'function'\n ? globalThis.performance.now()\n : Date.now()\n\ntype ConvergeWriter = Extract<StateTraitEntry<any, string>, { readonly kind: 'computed' | 'link' }>\n\nconst getConvergeWriterDeps = (entry: ConvergeWriter): ReadonlyArray<string> => {\n if (entry.kind === 'computed') {\n return ((entry.meta as any)?.deps ?? []) as ReadonlyArray<string>\n }\n return [entry.meta.from as string]\n}\n\nconst computeConvergeTopoOrder = (\n writers: ReadonlyArray<ConvergeWriter>,\n): { readonly order: ReadonlyArray<string>; readonly configError?: ConvergeStaticIrRegistry['configError'] } => {\n const writerByPath = new Map<string, ConvergeWriter>()\n for (const entry of writers) {\n const existing = writerByPath.get(entry.fieldPath)\n if (existing) {\n return {\n order: [],\n configError: {\n code: 'MULTIPLE_WRITERS',\n message: `[StateTrait.converge] Multiple writers for field \"${entry.fieldPath}\" (${existing.kind} + ${entry.kind}).`,\n fields: [entry.fieldPath],\n },\n }\n }\n writerByPath.set(entry.fieldPath, entry)\n }\n\n const nodes = new Set<string>()\n for (const entry of writers) {\n nodes.add(entry.fieldPath)\n }\n\n const indegree = new Map<string, number>()\n const forward = new Map<string, Array<string>>()\n\n for (const node of nodes) {\n indegree.set(node, 0)\n forward.set(node, [])\n }\n\n for (const entry of writers) {\n const to = entry.fieldPath\n const deps = getConvergeWriterDeps(entry)\n for (const dep of deps) {\n if (!nodes.has(dep)) continue\n forward.get(dep)!.push(to)\n indegree.set(to, (indegree.get(to) ?? 0) + 1)\n }\n }\n\n const queue: Array<string> = []\n for (const [node, deg] of indegree.entries()) {\n if (deg === 0) queue.push(node)\n }\n\n const order: Array<string> = []\n while (queue.length) {\n const n = queue.shift()!\n order.push(n)\n const outs = forward.get(n)!\n for (const to of outs) {\n const next = (indegree.get(to) ?? 0) - 1\n indegree.set(to, next)\n if (next === 0) queue.push(to)\n }\n }\n\n if (order.length !== nodes.size) {\n const remaining = Array.from(nodes).filter((n) => !order.includes(n))\n return {\n order: [],\n configError: {\n code: 'CYCLE_DETECTED',\n message: `[StateTrait.converge] Cycle detected in computed/link graph: ${remaining.join(', ')}`,\n fields: remaining,\n },\n }\n }\n\n return { order }\n}\n\nconst collectSchemaFieldPaths = (schema: Schema.Schema<any, any>): ReadonlyArray<FieldPath> => {\n const byKey = new Map<string, FieldPath>()\n\n const add = (path: FieldPath): void => {\n const normalized = normalizeFieldPath(path)\n if (!normalized) return\n byKey.set(JSON.stringify(normalized), normalized)\n }\n\n const visit = (ast: SchemaAST.AST, prefix: ReadonlyArray<string>, seen: Set<SchemaAST.AST>): void => {\n let current: SchemaAST.AST = ast\n\n // Unwrap Suspend/Refinement (recursive schema / branded schema).\n while (true) {\n if (SchemaAST.isSuspend(current)) {\n if (seen.has(current)) return\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 if (SchemaAST.isTransformation(current)) {\n visit(current.to, prefix, seen)\n visit(current.from, prefix, seen)\n return\n }\n\n if (SchemaAST.isUnion(current)) {\n for (const t of current.types) {\n visit(t, prefix, seen)\n }\n return\n }\n\n // Array / Tuple: indices do not enter the FieldPathId space; recurse into element types to support `items[0].name -> items.name`.\n if (SchemaAST.isTupleType(current)) {\n for (const e of current.elements) {\n visit(e.type, prefix, seen)\n }\n for (const r of current.rest) {\n visit(r.type, prefix, seen)\n }\n return\n }\n\n if (SchemaAST.isTypeLiteral(current)) {\n for (const ps of current.propertySignatures) {\n const seg = String(ps.name)\n if (!seg) continue\n const next = [...prefix, seg]\n add(next)\n visit(ps.type, next, seen)\n }\n // Index signature (Record<string, T>) can't be enumerated statically: avoid generating misaligned dynamic key paths.\n return\n }\n\n // Any / Unknown / Object / Declaration (open types): cannot enumerate nested paths; stop conservatively.\n }\n\n visit(schema.ast as unknown as SchemaAST.AST, [], new Set())\n return Array.from(byKey.values()).sort(compareFieldPath)\n}\n\nconst buildConvergeIr = (\n stateSchema: Schema.Schema<any, any>,\n entries: ReadonlyArray<StateTraitEntry<any, string>>,\n): ConvergeStaticIrRegistry => {\n const startedAt = nowPerf()\n const generation = 0\n\n const writers = entries.filter((e): e is ConvergeWriter => e.kind === 'computed' || e.kind === 'link')\n\n const writersKey = writers\n .map((entry) => `${entry.kind}:${entry.fieldPath}`)\n .sort()\n .join('|')\n\n const depsKey = writers\n .map((entry) => {\n const deps = getConvergeWriterDeps(entry).slice().sort().join(',')\n const scheduling = (entry.meta as any)?.scheduling === 'deferred' ? 'd' : 'i'\n return `${entry.kind}:${entry.fieldPath}@${scheduling}=>${deps}`\n })\n .sort()\n .join('|')\n\n const writerByPath = new Map<string, ConvergeWriter>()\n for (const entry of writers) {\n writerByPath.set(entry.fieldPath, entry)\n }\n\n const topo = writers.length > 0 ? computeConvergeTopoOrder(writers) : { order: [] as ReadonlyArray<string> }\n const stepsById: Array<ConvergeWriter> = topo.configError ? [] : topo.order.map((path) => writerByPath.get(path)!)\n\n const fieldPathTable = new Map<string, FieldPath>()\n const addPath = (path: FieldPath): void => {\n for (let i = 1; i <= path.length; i++) {\n const prefix = path.slice(0, i)\n const key = JSON.stringify(prefix)\n if (!fieldPathTable.has(key)) fieldPathTable.set(key, prefix)\n }\n }\n\n // 065: FieldPathId semantics must cover all enumerable field paths of stateSchema; otherwise reducer patchPaths can't map and will fall back to dirtyAll.\n for (const schemaPath of collectSchemaFieldPaths(stateSchema)) {\n addPath(schemaPath)\n }\n\n for (const entry of writers) {\n const out = normalizeFieldPath(entry.fieldPath)\n if (out) addPath(out)\n for (const dep of getConvergeWriterDeps(entry)) {\n const depPath = normalizeFieldPath(dep)\n if (depPath) addPath(depPath)\n }\n }\n\n const fieldPaths = Array.from(fieldPathTable.values()).sort(compareFieldPath)\n const fieldPathIdRegistry = makeFieldPathIdRegistry(fieldPaths)\n const fieldPathsKey = fnv1a32(stableStringify(fieldPaths))\n\n const stepOutFieldPathIdByStepId: Array<FieldPathId> = []\n const stepDepsFieldPathIdsByStepId: Array<ReadonlyArray<FieldPathId>> = []\n const stepSchedulingByStepId: Array<'immediate' | 'deferred'> = []\n\n for (const entry of stepsById) {\n const out = normalizeFieldPath(entry.fieldPath)\n const outId = out != null ? getFieldPathId(fieldPathIdRegistry, out) : undefined\n if (outId == null) {\n throw new Error(`[StateTrait.build] Failed to map converge output fieldPath \"${entry.fieldPath}\" to FieldPathId.`)\n }\n\n const depIds: Array<FieldPathId> = []\n for (const dep of getConvergeWriterDeps(entry)) {\n const depPath = normalizeFieldPath(dep)\n if (!depPath) continue\n const depId = getFieldPathId(fieldPathIdRegistry, depPath)\n if (depId != null) depIds.push(depId)\n }\n\n stepOutFieldPathIdByStepId.push(outId)\n stepDepsFieldPathIdsByStepId.push(depIds)\n stepSchedulingByStepId.push((entry.meta as any)?.scheduling === 'deferred' ? 'deferred' : 'immediate')\n }\n\n const topoOrder = stepsById.map((_, i) => i)\n const buildDurationMs = Math.max(0, nowPerf() - startedAt)\n\n return {\n generation,\n writersKey,\n depsKey,\n fieldPathsKey,\n fieldPaths,\n fieldPathIdRegistry,\n ...(topo.configError ? { configError: topo.configError } : null),\n stepsById,\n stepOutFieldPathIdByStepId,\n stepDepsFieldPathIdsByStepId,\n stepSchedulingByStepId,\n topoOrder,\n buildDurationMs,\n }\n}\n\n/**\n * Builds a normalized FieldTrait from a StateTraitEntry.\n *\n * - Currently uses explicit deps for computed/source and link edges; deeper dependency analysis is intentionally not performed.\n * - If we evolve explicit dependency declarations further, extend here.\n */\nconst toFieldTrait = (entry: StateTraitEntry<any, string>): StateTraitFieldTrait => {\n const deps: Array<string> = []\n\n if (entry.kind === 'computed') {\n const meta = entry.meta as any\n const list = meta.deps as ReadonlyArray<string> | undefined\n if (list) deps.push(...list)\n } else if (entry.kind === 'source') {\n const meta = entry.meta as any\n const list = meta.deps as ReadonlyArray<string> | undefined\n if (list) deps.push(...list)\n } else if (entry.kind === 'link') {\n deps.push(entry.meta.from as string)\n } else if (entry.kind === 'check') {\n const meta = entry.meta as any\n const rules = (meta?.rules ?? {}) as Record<string, any>\n for (const name of Object.keys(rules)) {\n const rule = rules[name]\n if (rule && typeof rule === 'object') {\n const list = rule.deps as ReadonlyArray<string> | undefined\n if (list) deps.push(...list)\n }\n }\n }\n\n return {\n fieldId: entry.fieldPath,\n kind: entry.kind,\n // Keep meta identical to Entry.meta at runtime so install can reuse it directly.\n meta: entry.meta as any,\n deps,\n }\n}\n\n/**\n * Builds Field / Node / Edge / Resource sets from normalized entries.\n */\nconst buildGraph = (\n entries: ReadonlyArray<StateTraitEntry<any, string>>,\n nodeMetaByFieldPath: ReadonlyMap<string, Meta.TraitMeta>,\n): {\n readonly graph: StateTraitGraph\n readonly plan: StateTraitPlan\n} => {\n const fieldMap = new Map<string, StateTraitField>()\n const nodes: Array<StateTraitGraphNode> = []\n const edges: Array<StateTraitGraphEdge> = []\n const resourcesById = new Map<string, StateTraitResource>()\n const planSteps: Array<StateTraitPlanStep> = []\n\n const ensureField = (fieldPath: string): StateTraitField => {\n let field = fieldMap.get(fieldPath)\n if (!field) {\n field = {\n id: fieldPath,\n path: fieldPath,\n traits: [],\n }\n fieldMap.set(fieldPath, field)\n }\n return field\n }\n\n for (const entry of entries) {\n const fieldPath = entry.fieldPath\n const field = ensureField(fieldPath)\n const trait = toFieldTrait(entry)\n\n ;(field.traits as Array<StateTraitFieldTrait>).push(trait)\n\n // Build Graph edges and Plan steps by kind.\n if (entry.kind === 'computed') {\n const stepId = `computed:${fieldPath}`\n planSteps.push({\n id: stepId,\n kind: 'computed-update',\n targetFieldPath: fieldPath,\n // Note: the current version does not statically analyze computed dependencies; sourceFieldPaths remains empty.\n })\n // If deps is explicitly declared, add Graph edges (for diagnostics / reverse-closure computation).\n const deps = (entry.meta as any).deps as ReadonlyArray<string> | undefined\n if (deps) {\n for (const dep of deps) {\n ensureField(dep)\n edges.push({\n id: `computed:${dep}->${fieldPath}`,\n from: dep,\n to: fieldPath,\n kind: 'computed',\n })\n }\n }\n } else if (entry.kind === 'link') {\n const from = entry.meta.from as string\n ensureField(from)\n\n const edgeId = `link:${from}->${fieldPath}`\n edges.push({\n id: edgeId,\n from,\n to: fieldPath,\n kind: 'link',\n })\n\n planSteps.push({\n id: `link:${fieldPath}`,\n kind: 'link-propagate',\n targetFieldPath: fieldPath,\n sourceFieldPaths: [from],\n debugInfo: {\n graphEdgeId: edgeId,\n },\n })\n } else if (entry.kind === 'source') {\n const resourceId = entry.meta.resource\n const resourceMeta = Meta.sanitize((entry.meta as any).meta)\n\n const existing = resourcesById.get(resourceId)\n if (existing) {\n const ownerFields = [...existing.ownerFields, fieldPath]\n let meta = existing.meta\n let metaOrigin = existing.metaOrigin\n let metaConflicts = existing.metaConflicts\n\n if (resourceMeta) {\n const merged = Meta.mergeCanonical(\n { meta, origin: metaOrigin, conflicts: metaConflicts },\n { origin: fieldPath, meta: resourceMeta },\n )\n meta = merged.meta\n metaOrigin = merged.origin\n metaConflicts = merged.conflicts\n }\n\n resourcesById.set(resourceId, {\n ...existing,\n ownerFields,\n meta,\n metaOrigin,\n metaConflicts,\n })\n } else {\n resourcesById.set(resourceId, {\n resourceId,\n // Use a simple identifier string for now; may evolve into a structured form based on key rules.\n keySelector: `StateTrait.source@${fieldPath}`,\n ownerFields: [fieldPath],\n meta: resourceMeta,\n metaOrigin: resourceMeta ? fieldPath : undefined,\n })\n }\n\n planSteps.push({\n id: `source:${fieldPath}`,\n kind: 'source-refresh',\n targetFieldPath: fieldPath,\n resourceId,\n keySelectorId: `StateTrait.source@${fieldPath}`,\n })\n\n const deps = (entry.meta as any).deps as ReadonlyArray<string> | undefined\n if (deps) {\n for (const dep of deps) {\n ensureField(dep)\n edges.push({\n id: `source-dep:${dep}->${fieldPath}`,\n from: dep,\n to: fieldPath,\n kind: 'source-dep',\n })\n }\n }\n } else if (entry.kind === 'check') {\n planSteps.push({\n id: `check:${fieldPath}`,\n kind: 'check-validate',\n targetFieldPath: fieldPath,\n })\n\n // If the rule explicitly declares deps, add Graph edges (for ReverseClosure scoped validate).\n if (trait.deps.length > 0) {\n for (const dep of trait.deps) {\n ensureField(dep)\n edges.push({\n id: `check-dep:${dep}->${fieldPath}`,\n from: dep,\n to: fieldPath,\n kind: 'check-dep',\n })\n }\n }\n }\n }\n\n for (const field of fieldMap.values()) {\n nodes.push({\n id: field.id,\n field,\n traits: field.traits,\n meta: nodeMetaByFieldPath.get(field.id),\n })\n }\n\n const graph: StateTraitGraph = {\n _tag: 'StateTraitGraph',\n nodes,\n edges,\n resources: Array.from(resourcesById.values()),\n }\n\n const plan: StateTraitPlan = {\n _tag: 'StateTraitPlan',\n steps: planSteps,\n }\n\n return { graph, plan }\n}\n\n/**\n * Performs a simple cycle detection for link edges.\n *\n * - Only considers edges with kind = 'link'; computed/source do not participate in the first version.\n * - On cycle detection, throws an error with path context to avoid infinite updates at runtime.\n */\nconst assertNoLinkCycles = (edges: ReadonlyArray<StateTraitGraphEdge>): void => {\n const adjacency = new Map<string, string[]>()\n\n for (const edge of edges) {\n if (edge.kind !== 'link') continue\n const list = adjacency.get(edge.from) ?? []\n list.push(edge.to)\n adjacency.set(edge.from, list)\n }\n\n const visited = new Set<string>()\n const stack = new Set<string>()\n\n const dfs = (node: string): void => {\n if (stack.has(node)) {\n throw new Error(\n `[StateTrait.build] link cycle detected at field \"${node}\". ` +\n 'Please check link traits for circular dependencies.',\n )\n }\n if (visited.has(node)) return\n visited.add(node)\n stack.add(node)\n\n const nexts = adjacency.get(node)\n if (nexts) {\n for (const to of nexts) {\n dfs(to)\n }\n }\n\n stack.delete(node)\n }\n\n for (const node of adjacency.keys()) {\n if (!visited.has(node)) {\n dfs(node)\n }\n }\n}\n\nconst collectSchemaPaths = (\n entries: ReadonlyArray<StateTraitEntry<any, string>>,\n): ReadonlyArray<StateTraitSchemaPathRef> => {\n const byKey = new Map<string, StateTraitSchemaPathRef>()\n\n const add = (ref: StateTraitSchemaPathRef): void => {\n if (!ref.path) return\n const k = `${ref.kind}|${ref.entryKind}|${ref.entryFieldPath}|${ref.ruleName ?? ''}|${ref.path}`\n byKey.set(k, ref)\n }\n\n const getCheckWritebackPath = (entry: Extract<StateTraitEntry<any, string>, { readonly kind: 'check' }>): string => {\n const wb = (entry.meta as any)?.writeback\n const p = wb && typeof wb === 'object' ? (wb as any).path : undefined\n const writebackPath = typeof p === 'string' && p.startsWith('errors.') ? p : undefined\n\n if (writebackPath) return writebackPath\n\n const fieldPath = entry.fieldPath\n if (fieldPath.endsWith('[]')) {\n return `errors.${fieldPath.slice(0, -2)}`\n }\n return `errors.${fieldPath}`\n }\n\n for (const entry of entries) {\n add({\n kind: 'fieldPath',\n entryKind: entry.kind,\n entryFieldPath: entry.fieldPath,\n path: entry.fieldPath,\n })\n\n if (entry.kind === 'computed' || entry.kind === 'source') {\n const deps = ((entry.meta as any)?.deps ?? []) as ReadonlyArray<string>\n for (const dep of deps) {\n add({\n kind: 'dep',\n entryKind: entry.kind,\n entryFieldPath: entry.fieldPath,\n path: dep,\n })\n }\n }\n\n if (entry.kind === 'link') {\n add({\n kind: 'link_from',\n entryKind: 'link',\n entryFieldPath: entry.fieldPath,\n path: entry.meta.from as string,\n })\n }\n\n if (entry.kind === 'check') {\n add({\n kind: 'check_writeback',\n entryKind: 'check',\n entryFieldPath: entry.fieldPath,\n path: getCheckWritebackPath(entry),\n })\n\n const rules = ((entry.meta as any)?.rules ?? {}) as Record<string, any>\n for (const name of Object.keys(rules)) {\n const rule = rules[name]\n if (!rule || typeof rule !== 'object') continue\n const deps = (rule.deps ?? []) as ReadonlyArray<string>\n for (const dep of deps) {\n add({\n kind: 'dep',\n entryKind: 'check',\n entryFieldPath: entry.fieldPath,\n ruleName: name,\n path: dep,\n })\n }\n }\n }\n }\n\n return Array.from(byKey.entries())\n .sort((a, b) => a[0].localeCompare(b[0]))\n .map(([, v]) => v)\n}\n\n/**\n * Builds a StateTraitProgram from the given stateSchema and trait spec.\n *\n * - Pure function: does not depend on external Env / global state.\n * - Current implementation focuses on:\n * - Normalizing Spec into entries.\n * - Building a lightweight Graph / Plan from entries.\n * - Running basic cycle detection for link edges.\n *\n * If we later need finer-grained dependency analysis (e.g. static analysis for computed/key),\n * evolve it inside this module without changing the public API surface.\n */\nexport const build = <S extends object>(\n stateSchema: Schema.Schema<S, any>,\n spec: StateTraitSpec<S>,\n): StateTraitProgram<S> => {\n const entries = normalizeSpec(spec) as ReadonlyArray<StateTraitEntry<S, string>>\n const nodeMetaByFieldPath = collectNodeMeta(spec)\n\n // Phase 4 (US2): require explicit deps (Graph/diagnostics/replay treat deps as the single dependency source of truth).\n for (const entry of entries) {\n if (entry.kind === 'computed') {\n const deps = (entry.meta as any).deps as ReadonlyArray<string> | undefined\n if (deps === undefined) {\n throw new Error(\n `[StateTrait.build] Missing explicit deps for computed \"${entry.fieldPath}\". ` +\n 'Please use StateTrait.computed({ deps: [...], get: ... }).',\n )\n }\n }\n if (entry.kind === 'source') {\n const deps = (entry.meta as any).deps as ReadonlyArray<string> | undefined\n if (deps === undefined) {\n throw new Error(\n `[StateTrait.build] Missing explicit deps for source \"${entry.fieldPath}\". ` +\n 'Please provide meta.deps for StateTrait.source({ deps: [...], ... }).',\n )\n }\n }\n if (entry.kind === 'check') {\n const rules = ((entry.meta as any)?.rules ?? {}) as Record<string, any>\n for (const name of Object.keys(rules)) {\n const rule = rules[name]\n if (typeof rule === 'function' || !rule || typeof rule !== 'object') {\n throw new Error(\n `[StateTrait.build] Missing explicit deps for check \"${entry.fieldPath}\" rule \"${name}\". ` +\n 'Please use { deps: [...], validate: ... } form.',\n )\n }\n if ((rule as any).deps === undefined) {\n throw new Error(\n `[StateTrait.build] Missing explicit deps for check \"${entry.fieldPath}\" rule \"${name}\". ` +\n 'Please provide deps: [...].',\n )\n }\n }\n }\n }\n\n const { graph, plan } = buildGraph(entries, nodeMetaByFieldPath)\n\n // Run a cycle check for link edges to avoid obvious configuration errors.\n assertNoLinkCycles(graph.edges)\n\n return {\n stateSchema,\n spec,\n entries: entries as ReadonlyArray<StateTraitEntry<any, string>>,\n graph,\n plan,\n convergeIr: buildConvergeIr(stateSchema as any, entries as ReadonlyArray<StateTraitEntry<any, string>>),\n schemaPaths: collectSchemaPaths(entries as ReadonlyArray<StateTraitEntry<any, string>>),\n }\n}\n","export type TraitMeta = Readonly<{\n readonly label?: string\n readonly description?: string\n readonly tags?: ReadonlyArray<string>\n readonly group?: string\n readonly docsUrl?: string\n readonly cacheGroup?: string\n /**\n * Extension annotations: only accepts `x-*` keys (anchors for capabilities like Phantom Source / Drift Detection).\n *\n * Constraints:\n * - Must be serializable (JSON values).\n * - Must be slim (keep only a few key hints; don't stuff large objects).\n */\n readonly annotations?: Readonly<Record<string, JsonValue>>\n /**\n * Semantic hint: when the same entity (e.g. the same resourceId) has multiple inconsistent meta declarations,\n * the one with canonical=true becomes the \"display canonical\", and others are recorded as conflicts.\n */\n readonly canonical?: boolean\n}>\n\nexport type TraitMetaConflict = Readonly<{\n readonly origin: string\n readonly meta: TraitMeta\n}>\n\nexport type JsonPrimitive = string | number | boolean | null\nexport type JsonValue = JsonPrimitive | ReadonlyArray<JsonValue> | { readonly [key: string]: JsonValue }\n\nconst uniqSortedStrings = (input: ReadonlyArray<string>): ReadonlyArray<string> => {\n const set = new Set<string>()\n for (const item of input) {\n const v = item.trim()\n if (!v) continue\n set.add(v)\n }\n return Array.from(set).sort((a, b) => a.localeCompare(b))\n}\n\nconst isPlainRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst sanitizeJsonValue = (input: unknown, depth: number): JsonValue | undefined => {\n if (input === null) return null\n\n if (typeof input === 'string') return input\n if (typeof input === 'boolean') return input\n if (typeof input === 'number') {\n return Number.isFinite(input) ? input : undefined\n }\n\n if (depth >= 6) return undefined\n\n if (Array.isArray(input)) {\n const out: Array<JsonValue> = []\n for (const item of input) {\n const v = sanitizeJsonValue(item, depth + 1)\n if (v !== undefined) out.push(v)\n }\n return out\n }\n\n if (isPlainRecord(input)) {\n const keys = Object.keys(input).sort()\n const out: Record<string, JsonValue> = {}\n for (const key of keys) {\n const v = sanitizeJsonValue(input[key], depth + 1)\n if (v !== undefined) out[key] = v\n }\n return out\n }\n\n return undefined\n}\n\nexport const sanitize = (input: unknown): TraitMeta | undefined => {\n if (input === null || input === undefined) return undefined\n if (typeof input !== 'object' || Array.isArray(input)) return undefined\n\n const record = input as Record<string, unknown>\n const out: Record<string, unknown> = {}\n\n const pickString = (key: keyof TraitMeta): void => {\n const value = record[key as string]\n if (typeof value !== 'string') return\n const trimmed = value.trim()\n if (!trimmed) return\n out[key] = trimmed\n }\n\n pickString('label')\n pickString('description')\n pickString('group')\n pickString('docsUrl')\n pickString('cacheGroup')\n\n const canonical = record.canonical\n if (typeof canonical === 'boolean') {\n out.canonical = canonical\n }\n\n const tagsRaw = record.tags\n if (typeof tagsRaw === 'string') {\n const tags = uniqSortedStrings([tagsRaw])\n if (tags.length > 0) out.tags = tags\n } else if (Array.isArray(tagsRaw)) {\n const tags = uniqSortedStrings(tagsRaw.filter((x): x is string => typeof x === 'string'))\n if (tags.length > 0) out.tags = tags\n }\n\n const annotations: Record<string, JsonValue> = {}\n\n // legacy: allow passing `x-*` keys at the top-level (untyped input), then normalize into `annotations`.\n const annotationKeys = Object.keys(record)\n .filter((k) => k.startsWith('x-'))\n .sort((a, b) => a.localeCompare(b))\n for (const key of annotationKeys) {\n const v = sanitizeJsonValue(record[key], 0)\n if (v !== undefined) annotations[key] = v\n }\n\n // preferred: typed `annotations` field (only accepts `x-*` keys).\n const annotationsRaw = record.annotations\n if (isPlainRecord(annotationsRaw)) {\n const keys = Object.keys(annotationsRaw)\n .filter((k) => k.startsWith('x-'))\n .sort((a, b) => a.localeCompare(b))\n for (const key of keys) {\n const v = sanitizeJsonValue(annotationsRaw[key], 0)\n if (v !== undefined) annotations[key] = v\n }\n }\n\n if (Object.keys(annotations).length > 0) out.annotations = annotations\n\n return Object.keys(out).length > 0 ? (out as TraitMeta) : undefined\n}\n\nconst stableStringify = (meta: TraitMeta): string => {\n const out: Record<string, unknown> = {}\n const keys = Object.keys(meta).sort()\n for (const k of keys) {\n out[k] = (meta as any)[k]\n }\n return JSON.stringify(out)\n}\n\nexport const equals = (a: TraitMeta | undefined, b: TraitMeta | undefined): boolean => {\n if (a === b) return true\n if (!a || !b) return false\n return stableStringify(a) === stableStringify(b)\n}\n\nexport type CanonicalMergeInput = Readonly<{\n readonly meta?: TraitMeta\n readonly origin?: string\n readonly conflicts?: ReadonlyArray<TraitMetaConflict>\n}>\n\nexport type CanonicalMergeResult = Readonly<{\n readonly meta?: TraitMeta\n readonly origin?: string\n readonly conflicts?: ReadonlyArray<TraitMetaConflict>\n}>\n\nexport const mergeCanonical = (\n current: CanonicalMergeInput,\n incoming: Readonly<{ readonly origin: string; readonly meta: TraitMeta }>,\n): CanonicalMergeResult => {\n const existing = current.meta\n if (!existing) {\n return {\n meta: incoming.meta,\n origin: incoming.origin,\n conflicts: current.conflicts,\n }\n }\n\n if (equals(existing, incoming.meta)) {\n return current\n }\n\n const conflicts: Array<TraitMetaConflict> = [...((current.conflicts ?? []) as ReadonlyArray<TraitMetaConflict>)]\n\n const push = (conflict: TraitMetaConflict): void => {\n const exists = conflicts.some((c) => c.origin === conflict.origin && equals(c.meta, conflict.meta))\n if (!exists) conflicts.push(conflict)\n }\n\n const existingCanonical = existing.canonical === true\n const incomingCanonical = incoming.meta.canonical === true\n\n if (!existingCanonical && incomingCanonical) {\n push({\n origin: current.origin ?? 'unknown',\n meta: existing,\n })\n return {\n meta: incoming.meta,\n origin: incoming.origin,\n conflicts,\n }\n }\n\n push({\n origin: incoming.origin,\n meta: incoming.meta,\n })\n\n return {\n meta: existing,\n origin: current.origin ?? incoming.origin,\n conflicts,\n }\n}\n","import type { Schema } from 'effect'\nimport type { StateAtPath, StateFieldPath } from './field-path.js'\nimport type { DirtyAllReason } from '../field-path.js'\nimport * as Meta from './meta.js'\nimport type { ConvergeStaticIrRegistry } from './converge-ir.js'\nimport type { ConvergeExecIr } from './converge-exec-ir.js'\n\n// StateTrait core model.\n// Keep the field semantics aligned with data-model.md / references/state-trait-core.md.\n\n/**\n * StateTraitSpec<S>:\n * - The standard shape for the `traits` slot in a Module blueprint.\n * - Keys are constrained by StateFieldPath<S>; values are declarations for the corresponding scope (Entry / Node / List).\n */\nexport type StateTraitSpec<S> = S extends object\n ? {\n [Path in StateFieldPath<S> | '$root']?: StateTraitSpecValue<S, Path>\n }\n : never\n\nexport type StateTraitKind = 'computed' | 'source' | 'link' | 'check'\n\n/**\n * TraitConvergeScheduling:\n * - Scheduling semantics for converge/dirty-check (043): decides whether a step must converge within each transaction window.\n * - Default `immediate` (keeps legacy behavior); `deferred` takes effect only with explicit declaration + time-slicing enabled.\n */\nexport type TraitConvergeScheduling = 'immediate' | 'deferred'\n\nexport interface ComputedMeta<S, P> {\n /**\n * Explicit dependency field paths (required):\n *\n * - deps is the single source of truth for dependencies: Graph/ReverseClosure/incremental scheduling/perf optimizations rely on deps only.\n * - In the DSL, `StateTrait.computed({ deps, get })` uses deps-as-args; it does not expose `(state) => ...`.\n * - During build, `get(...depsValues)` is lowered into `derive(state)` for runtime execution, but the dependency read-set remains deps-based.\n * - In dev-mode, if actual reads in `derive(state)` disagree with deps, a `deps_mismatch` diagnostic warning is emitted.\n *\n * - For root scope: deps are StateFieldPath<State>.\n * - For list.item scope: deps are StateFieldPath<Item> (relative paths; build will prefix them).\n */\n readonly deps: ReadonlyArray<StateFieldPath<S>>\n readonly derive: (state: Readonly<S>) => StateAtPath<S, P>\n /**\n * Optional: equality predicate (used to skip no-op writebacks).\n */\n readonly equals?: (prev: StateAtPath<S, P>, next: StateAtPath<S, P>) => boolean\n /**\n * Converge scheduling (043): defaults to immediate.\n */\n readonly scheduling?: TraitConvergeScheduling\n}\n\nexport interface SourceMeta<S, P> {\n readonly deps: ReadonlyArray<StateFieldPath<S>>\n /**\n * Logical resource identifier (e.g. \"user/profile\").\n *\n * - In the StateTrait.source DSL, `resource` is stored here during build.\n * - data-model.md calls it resourceId; we keep the DSL naming here to avoid confusion.\n */\n readonly resource: string\n /**\n * Rule for computing the key required to access the resource.\n *\n * - deps is the single source of truth for dependencies: Graph/ReverseClosure/incremental scheduling/perf optimizations rely on deps only.\n * - In the DSL, `StateTrait.source({ deps, key })` uses deps-as-args; it does not expose `(state) => ...`.\n * - During build, `key(...depsValues)` is lowered into `key(state)` for runtime execution, but the dependency read-set remains deps-based.\n *\n * - Returning undefined means the resource is inactive under the current state (should be recycled to idle).\n */\n readonly key: (state: Readonly<S>) => unknown\n readonly triggers?: ReadonlyArray<'onMount' | 'onKeyChange' | 'manual'>\n readonly debounceMs?: number\n readonly concurrency?: 'switch' | 'exhaust-trailing'\n /**\n * Serializable metadata for devtools/docs (whitelisted fields).\n */\n readonly meta?: Meta.TraitMeta\n /**\n * Reserved: build may populate the field path this trait is attached to, for easier debugging.\n */\n readonly _fieldPath?: P\n}\n\nexport interface LinkMeta<S> {\n /**\n * Source field path (also constrained by StateFieldPath<S>).\n */\n readonly from: StateFieldPath<S>\n /**\n * Converge scheduling (043): defaults to immediate.\n */\n readonly scheduling?: TraitConvergeScheduling\n}\n\nexport type CheckRule<Input = unknown, Ctx = unknown> = {\n readonly deps: ReadonlyArray<string>\n /**\n * validateOn:\n * - Affects only auto validation phases (onChange/onBlur); submit/manual always run.\n * - Empty array disables auto validation (only submit/manual run).\n */\n readonly validateOn?: ReadonlyArray<'onChange' | 'onBlur'>\n readonly validate: (input: Input, ctx: Ctx) => unknown\n readonly meta?: Meta.TraitMeta\n}\n\nexport interface CheckMeta<Input = unknown, Ctx = unknown> {\n /**\n * Named rule set (used for deterministic merge and diagnostics display).\n */\n readonly rules: Readonly<Record<string, CheckRule<Input, Ctx>>>\n /**\n * Error-tree writeback (Phase 2: structure only; concrete writeback semantics land in later phases).\n */\n readonly writeback?: {\n readonly kind: 'errors'\n readonly path?: string\n }\n}\n\n/**\n * StateTraitEntry<S, P>:\n * - A single Trait configuration attached to a field path P.\n * - kind and meta always come together and are used to dispatch behavior during build/install.\n */\nexport type StateTraitEntry<S = unknown, P extends string = StateFieldPath<S>> =\n | {\n readonly fieldPath: P\n readonly kind: 'computed'\n readonly meta: ComputedMeta<S, P>\n }\n | {\n readonly fieldPath: P\n readonly kind: 'source'\n readonly meta: SourceMeta<S, P>\n }\n | {\n readonly fieldPath: P\n readonly kind: 'link'\n readonly meta: LinkMeta<S>\n }\n | {\n readonly fieldPath: P\n readonly kind: 'check'\n readonly meta: CheckMeta<unknown, unknown>\n }\n\nexport interface StateTraitNode<Input = unknown, Ctx = unknown> {\n readonly _tag: 'StateTraitNode'\n readonly computed?: StateTraitEntry<Input, any> | Readonly<Record<string, StateTraitEntry<Input, any>>>\n readonly source?: StateTraitEntry<Input, any> | Readonly<Record<string, StateTraitEntry<Input, any>>>\n readonly link?: StateTraitEntry<Input, any> | Readonly<Record<string, StateTraitEntry<Input, any>>>\n readonly check?: Readonly<Record<string, CheckRule<Input, Ctx>>>\n readonly meta?: Meta.TraitMeta\n}\n\nexport interface StateTraitList<Item = unknown> {\n readonly _tag: 'StateTraitList'\n readonly item?: StateTraitNode<Item, any>\n readonly list?: StateTraitNode<ReadonlyArray<Item>, any>\n readonly identityHint?: {\n readonly trackBy?: string\n }\n}\n\nexport type StateTraitSpecValue<S, P extends string> =\n | StateTraitEntry<S, P>\n | StateTraitNode<any, any>\n | StateTraitList<any>\n\n/**\n * StateTraitField:\n * - Represents a field node in State (whether or not traits are attached).\n * - Normalized from StateTraitSpec during build.\n */\nexport interface StateTraitField {\n readonly id: string\n readonly path: string\n readonly displayName?: string\n readonly valueType?: string\n readonly traits: ReadonlyArray<StateTraitFieldTrait>\n}\n\n/**\n * StateTraitFieldTrait:\n * - A structured description of a field trait (computed / source / link).\n * - meta matches StateTraitEntry.meta; deps is the set of field paths this trait depends on.\n */\nexport interface StateTraitFieldTrait {\n readonly fieldId: string\n readonly kind: StateTraitKind\n readonly meta:\n | ComputedMeta<unknown, string>\n | SourceMeta<unknown, string>\n | LinkMeta<unknown>\n | CheckMeta<unknown, unknown>\n readonly deps: ReadonlyArray<string>\n}\n\n/**\n * StateTraitResource:\n * - Describes the logical resource metadata that a source trait depends on.\n * - Concrete ResourceSpec implementation lives in the Resource namespace; this keeps only trait-perspective dependency info.\n */\nexport interface StateTraitResource {\n readonly resourceId: string\n readonly keySelector: string\n readonly keyExample?: unknown\n readonly ownerFields: ReadonlyArray<string>\n readonly meta?: Meta.TraitMeta\n readonly metaOrigin?: string\n readonly metaConflicts?: ReadonlyArray<Meta.TraitMetaConflict>\n}\n\n/**\n * Graph Node / Edge:\n * - Nodes typically correspond to fields.\n * - Edges represent dependencies between fields, or between fields and resources.\n */\nexport interface StateTraitGraphNode {\n readonly id: string\n readonly field: StateTraitField\n readonly traits: ReadonlyArray<StateTraitFieldTrait>\n readonly meta?: Meta.TraitMeta\n}\n\nexport interface StateTraitGraphEdge {\n readonly id: string\n readonly from: string\n readonly to: string\n readonly kind: 'computed' | 'link' | 'source-dep' | 'check-dep'\n}\n\n/**\n * StateTraitGraph:\n * - Structural view of the StateTrait engine: a graph of nodes and dependency edges.\n * - Used by Devtools / Studio / Runtime for structural analysis and visualization.\n */\nexport interface StateTraitGraph {\n readonly _tag: 'StateTraitGraph'\n readonly nodes: ReadonlyArray<StateTraitGraphNode>\n readonly edges: ReadonlyArray<StateTraitGraphEdge>\n readonly resources: ReadonlyArray<StateTraitResource>\n readonly meta?: {\n readonly moduleId?: string\n readonly version?: string\n }\n}\n\n/**\n * StateTraitPlanStep:\n * - The smallest instruction unit used by StateTrait.install / Runtime execution.\n * - Derived from the graph; used at runtime to install watchers or trigger external calls.\n */\nexport interface StateTraitPlanStep {\n readonly id: string\n readonly kind: 'computed-update' | 'link-propagate' | 'source-refresh' | 'check-validate'\n readonly targetFieldPath?: string\n readonly sourceFieldPaths?: ReadonlyArray<string>\n readonly resourceId?: string\n readonly keySelectorId?: string\n readonly debugInfo?: {\n readonly graphNodeId?: string\n readonly graphEdgeId?: string\n }\n}\n\n/**\n * StateTraitPlan:\n * - Execution plan summarizing all trait behaviors for a module.\n * - install mounts behaviors onto Bound API / EffectOp pipelines according to the plan.\n */\nexport interface StateTraitPlan {\n readonly _tag: 'StateTraitPlan'\n readonly moduleId?: string\n readonly steps: ReadonlyArray<StateTraitPlanStep>\n readonly meta?: Record<string, unknown>\n}\n\nexport type StateTraitSchemaPathKind = 'fieldPath' | 'dep' | 'link_from' | 'check_writeback'\n\nexport interface StateTraitSchemaPathRef {\n readonly kind: StateTraitSchemaPathKind\n readonly entryKind: StateTraitKind\n readonly entryFieldPath: string\n readonly path: string\n readonly ruleName?: string\n}\n\n/**\n * StateTraitProgram<S>:\n * - Program output of the StateTrait engine; the unified entrypoint for Runtime / Devtools.\n * - stateSchema and spec preserve original inputs; graph/plan are internal IR.\n */\nexport interface StateTraitProgram<S> {\n readonly stateSchema: Schema.Schema<S, any>\n readonly spec: StateTraitSpec<S>\n /**\n * Program.entries:\n * - Minimal rule set normalized from spec (including node/list/$root) during build.\n * - Phase 2 focuses on a readable/diagnosable structure; later phases add execution and converge semantics.\n */\n readonly entries: ReadonlyArray<StateTraitEntry<any, string>>\n readonly graph: StateTraitGraph\n readonly plan: StateTraitPlan\n readonly convergeIr?: ConvergeStaticIrRegistry\n readonly convergeExecIr?: ConvergeExecIr\n /**\n * schemaPaths:\n * - Path references that must exist in stateSchema, collected from entries during build; dev-only diagnostics (e.g. schema_mismatch).\n * - When diagnostics=off, validation can be skipped entirely to keep near-zero cost.\n */\n readonly schemaPaths?: ReadonlyArray<StateTraitSchemaPathRef>\n}\n\n/**\n * Build a normalized entry list from StateTraitSpec.\n *\n * - Phase 2: supports structural expansion of node/list/$root and fills/prefixes fieldPath/deps when necessary.\n * - Later phases may extend validation here (e.g. detecting duplicates, override rules, etc.).\n */\nexport const normalizeSpec = <S>(spec: StateTraitSpec<S>): ReadonlyArray<StateTraitEntry<any, string>> => {\n const entries: Array<StateTraitEntry<any, string>> = []\n\n const isNode = (value: unknown): value is StateTraitNode<any, any> =>\n typeof value === 'object' && value !== null && (value as any)._tag === 'StateTraitNode'\n\n const isList = (value: unknown): value is StateTraitList<any> =>\n typeof value === 'object' && value !== null && (value as any)._tag === 'StateTraitList'\n\n const joinPath = (prefix: string, suffix: string): string => {\n if (!prefix) return suffix\n if (!suffix) return prefix\n return `${prefix}.${suffix}`\n }\n\n const prefixDeps = (deps: ReadonlyArray<string> | undefined, prefix: string): ReadonlyArray<string> => {\n if (!deps || deps.length === 0) return []\n return deps.map((d) => (prefix ? joinPath(prefix, d) : d))\n }\n\n const normalizeEntry = (\n entry: StateTraitEntry<any, string>,\n fieldPath: string,\n depPrefix: string,\n ): StateTraitEntry<any, string> => {\n if (entry.kind === 'computed') {\n const meta = entry.meta as any\n const rawDeps = meta.deps as ReadonlyArray<string> | undefined\n const deps = rawDeps !== undefined ? prefixDeps(rawDeps, depPrefix) : undefined\n return {\n ...(entry as any),\n fieldPath,\n meta: { ...meta, deps },\n }\n }\n if (entry.kind === 'source') {\n const meta = entry.meta as any\n const rawDeps = meta.deps as ReadonlyArray<string> | undefined\n const deps = rawDeps !== undefined ? prefixDeps(rawDeps, depPrefix) : undefined\n return {\n ...(entry as any),\n fieldPath,\n meta: { ...meta, deps, _fieldPath: fieldPath },\n }\n }\n if (entry.kind === 'link') {\n const meta = entry.meta as any\n const from = prefixDeps([meta.from as string], depPrefix)[0] ?? meta.from\n return {\n ...(entry as any),\n fieldPath,\n meta: { ...meta, from },\n }\n }\n // check: Phase 2 adjusts fieldPath only; deps are still collected from meta.rules during build.\n return {\n ...(entry as any),\n fieldPath,\n }\n }\n\n const expandNode = (\n scopeId: string,\n joinPrefix: string,\n node: StateTraitNode<any, any>,\n options?: {\n /**\n * Prefix for check deps: default semantics for list-scope checks (deps are relative to a row item rather than the list root).\n *\n * - item scope: depsPrefix = `${listPath}[]` (matches joinPrefix).\n * - list scope: fieldPath = `${listPath}`, but depsPrefix should be `${listPath}[]`.\n */\n readonly checkDepsPrefix?: string\n },\n ): void => {\n const addEntry = (relativeTarget: string, raw: StateTraitEntry<any, string>): void => {\n const rel = (raw as any).fieldPath ?? relativeTarget\n const fieldPath = joinPrefix ? joinPath(joinPrefix, String(rel)) : String(rel)\n entries.push(normalizeEntry(raw, fieldPath, joinPrefix))\n }\n\n const expandMaybeRecord = (\n value: StateTraitEntry<any, any> | Readonly<Record<string, StateTraitEntry<any, any>>> | undefined,\n ): void => {\n if (!value) return\n if (typeof (value as any).kind === 'string') {\n addEntry('', value as any)\n return\n }\n const record = value as Readonly<Record<string, StateTraitEntry<any, any>>>\n for (const key in record) {\n if (!Object.prototype.hasOwnProperty.call(record, key)) continue\n const entry = record[key]\n if (!entry) continue\n addEntry(key, entry as any)\n }\n }\n\n expandMaybeRecord(node.computed)\n expandMaybeRecord(node.source)\n expandMaybeRecord(node.link)\n\n if (node.check) {\n const rules: Record<string, CheckRule<any, any>> = {}\n const checkDepsPrefix = options?.checkDepsPrefix ?? (joinPrefix.endsWith('[]') ? joinPrefix : '')\n\n const prefixCheckDeps = (deps: ReadonlyArray<string> | undefined): ReadonlyArray<string> => {\n if (!deps || deps.length === 0) return []\n return deps.map((d) => (d === '' ? scopeId : checkDepsPrefix ? joinPath(checkDepsPrefix, d) : d))\n }\n for (const name of Object.keys(node.check)) {\n const rule = (node.check as any)[name] as CheckRule<any, any>\n if (typeof rule === 'function') {\n rules[name] = rule\n continue\n }\n if (rule && typeof rule === 'object') {\n const meta = Meta.sanitize((rule as any).meta)\n rules[name] = {\n ...rule,\n deps: prefixCheckDeps(rule.deps),\n meta,\n }\n continue\n }\n // Invalid input: ignore (later phases may promote this into a build-time config error).\n }\n\n entries.push({\n fieldPath: scopeId,\n kind: 'check',\n meta: {\n rules,\n writeback: { kind: 'errors' },\n },\n } as StateTraitEntry<any, any>)\n }\n }\n\n for (const key in spec) {\n if (!Object.prototype.hasOwnProperty.call(spec, key)) continue\n const raw = spec[key as keyof typeof spec] as StateTraitSpecValue<S, any> | undefined\n if (!raw) continue\n\n if (isList(raw)) {\n const listPath = key\n if (raw.item) {\n expandNode(`${listPath}[]`, `${listPath}[]`, raw.item)\n }\n if (raw.list) {\n expandNode(listPath, listPath, raw.list, {\n checkDepsPrefix: `${listPath}[]`,\n })\n }\n continue\n }\n\n if (isNode(raw)) {\n if (key === '$root') {\n expandNode('$root', '', raw)\n } else {\n expandNode(key, key, raw)\n }\n continue\n }\n\n const entry = raw as any as StateTraitEntry<any, string>\n const fieldPath = (entry as any).fieldPath ?? key\n entries.push(normalizeEntry(entry, String(fieldPath), ''))\n }\n\n return entries\n}\n\n/**\n * collectNodeMeta:\n * - Extract StateTraitNode.meta (whitelisted fields) from StateTraitSpec for devtools structural display.\n * - meta is for diagnostics/display only and does not participate in runtime semantics.\n */\nexport const collectNodeMeta = <S>(spec: StateTraitSpec<S>): ReadonlyMap<string, Meta.TraitMeta> => {\n const out = new Map<string, Meta.TraitMeta>()\n\n const isNode = (value: unknown): value is StateTraitNode<any, any> =>\n typeof value === 'object' && value !== null && (value as any)._tag === 'StateTraitNode'\n\n const isList = (value: unknown): value is StateTraitList<any> =>\n typeof value === 'object' && value !== null && (value as any)._tag === 'StateTraitList'\n\n const add = (scopeId: string, node: StateTraitNode<any, any>): void => {\n const meta = Meta.sanitize(node.meta)\n if (meta) out.set(scopeId, meta)\n }\n\n for (const key in spec) {\n if (!Object.prototype.hasOwnProperty.call(spec, key)) continue\n const raw = spec[key as keyof typeof spec] as StateTraitSpecValue<S, any> | undefined\n if (!raw) continue\n\n if (isList(raw)) {\n const listPath = key\n if (raw.item) add(`${listPath}[]`, raw.item)\n if (raw.list) add(listPath, raw.list)\n continue\n }\n\n if (isNode(raw)) {\n if (key === '$root') add('$root', raw)\n else add(key, raw)\n continue\n }\n }\n\n return out\n}\n\n// ---- Converge (013) evidence model ----\n\nexport type TraitConvergeRequestedMode = 'auto' | 'full' | 'dirty'\nexport type TraitConvergeExecutedMode = 'full' | 'dirty'\nexport type TraitConvergeOutcome = 'Converged' | 'Noop' | 'Degraded'\n\nexport type TraitConvergeConfigScope = 'provider' | 'runtime_module' | 'runtime_default' | 'builtin'\n\nexport type TraitConvergeReason =\n | 'cold_start'\n | 'cache_hit'\n | 'cache_miss'\n | 'budget_cutoff'\n | 'near_full'\n | 'unknown_write'\n | 'dirty_all'\n | 'generation_bumped'\n | 'low_hit_rate_protection'\n | 'module_override'\n | 'time_slicing_immediate'\n | 'time_slicing_deferred'\n\nexport interface TraitConvergeStepStats {\n readonly totalSteps: number\n readonly executedSteps: number\n readonly skippedSteps: number\n readonly changedSteps: number\n readonly affectedSteps?: number\n}\n\nexport interface TraitConvergeDirtySummary {\n readonly dirtyAll: boolean\n readonly reason?: DirtyAllReason\n readonly rootCount?: number\n readonly rootIds?: ReadonlyArray<number>\n readonly rootIdsTruncated?: boolean\n}\n\nexport interface TraitConvergePlanCacheEvidence {\n readonly capacity: number\n readonly size: number\n readonly hits: number\n readonly misses: number\n readonly evicts: number\n readonly hit: boolean\n readonly keySize?: number\n readonly missReason?: 'cold_start' | 'generation_bumped' | 'not_cached' | 'unknown'\n readonly disabled?: boolean\n readonly disableReason?: 'low_hit_rate' | 'generation_thrash' | 'manual_override' | 'unknown'\n}\n\nexport type TraitConvergeGenerationBumpReason =\n | 'writers_changed'\n | 'deps_changed'\n | 'logic_installed'\n | 'logic_uninstalled'\n | 'imports_changed'\n | 'unknown'\n\nexport interface TraitConvergeGenerationEvidence {\n readonly generation: number\n readonly generationBumpCount?: number\n readonly lastBumpReason?: TraitConvergeGenerationBumpReason\n}\n\nexport interface TraitConvergeStaticIrEvidence {\n readonly fieldPathCount: number\n readonly stepCount: number\n readonly buildDurationMs?: number\n}\n\nexport interface TraitConvergeHotspot {\n readonly kind?: string\n readonly stepId: number\n readonly outFieldPathId?: number\n readonly durationMs: number\n readonly changed: boolean\n}\n\nexport interface TraitConvergeTimeSlicingSummary {\n readonly scope: 'all' | 'immediate' | 'deferred'\n readonly immediateStepCount: number\n readonly deferredStepCount: number\n}\n\nexport interface TraitConvergeDiagnosticsSamplingSummary {\n /**\n * Deterministic sampling: use stable txnSeq as an anchor and sample every N transactions.\n * - sampled=true means this invocation captured per-step timings and produced hotspots.\n */\n readonly strategy: 'txnSeq_interval'\n readonly sampleEveryN: number\n readonly topK: number\n readonly sampled: boolean\n}\n\nexport interface TraitConvergeDecisionSummary {\n readonly requestedMode: TraitConvergeRequestedMode\n readonly executedMode: TraitConvergeExecutedMode\n readonly outcome: TraitConvergeOutcome\n readonly configScope: TraitConvergeConfigScope\n readonly staticIrDigest: string\n readonly executionBudgetMs: number\n readonly executionDurationMs: number\n readonly decisionBudgetMs?: number\n readonly decisionDurationMs?: number\n readonly reasons: ReadonlyArray<TraitConvergeReason>\n readonly stepStats: TraitConvergeStepStats\n readonly dirty?: TraitConvergeDirtySummary\n readonly cache?: TraitConvergePlanCacheEvidence\n readonly generation?: TraitConvergeGenerationEvidence\n readonly staticIr?: TraitConvergeStaticIrEvidence\n readonly timeSlicing?: TraitConvergeTimeSlicingSummary\n readonly thresholds?: { readonly floorRatio?: number }\n readonly diagnosticsSampling?: TraitConvergeDiagnosticsSamplingSummary\n readonly top3?: ReadonlyArray<TraitConvergeHotspot>\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 { Context, Deferred } from 'effect'\n\nexport interface RootContext {\n context: Context.Context<any> | undefined\n readonly ready: Deferred.Deferred<Context.Context<any>, never>\n readonly appId?: string\n readonly appModuleIds?: ReadonlyArray<string>\n}\n\nclass RootContextTagImpl extends Context.Tag('@logixjs/core/RootContext')<RootContextTagImpl, RootContext>() {}\n\nexport const RootContextTag = RootContextTagImpl\n","import {\n Cause,\n Context,\n Deferred,\n Duration,\n Effect,\n Fiber,\n FiberRef,\n Layer,\n Option,\n PubSub,\n Queue,\n Ref,\n Scope,\n Stream,\n} from 'effect'\nimport * as Debug from '../DebugSink.js'\nimport { toSerializableErrorSummary } from '../errorSummary.js'\nimport * as TaskRunner from '../TaskRunner.js'\nimport { isDevEnv } from '../env.js'\nimport { getRuntimeInternals } from '../runtimeInternalsAccessor.js'\nimport * as Identity from './identity.js'\nimport * as ProcessConcurrency from './concurrency.js'\nimport * as ProcessEvents from './events.js'\nimport * as Meta from './meta.js'\nimport { makeSchemaSelector, resolveSchemaAst } from './selectorSchema.js'\nimport type {\n ProcessControlRequest,\n ProcessDefinition,\n ProcessEvent,\n ProcessInstallation,\n ProcessInstanceIdentity,\n ProcessInstanceStatus,\n ProcessPlatformEvent,\n ProcessScope,\n ProcessTrigger,\n ProcessTriggerSpec,\n SerializableErrorSummary,\n} from './protocol.js'\nimport * as Supervision from './supervision.js'\n\ntype InstallationKey = string\ntype ProcessInstanceId = string\n\ntype ProcessInstallMode = 'switch' | 'exhaust'\n\ntype InstallationState = {\n readonly identity: {\n readonly processId: string\n readonly scope: ProcessScope\n }\n readonly scopeKey: string\n readonly definition: ProcessDefinition\n env: Context.Context<any>\n forkScope: Scope.Scope\n readonly process: Effect.Effect<void, any, unknown>\n readonly kind: Meta.ProcessMeta['kind']\n enabled: boolean\n installedAt?: string\n nextRunSeq: number\n supervision: Supervision.SupervisionState\n currentInstanceId?: ProcessInstanceId\n pendingStart?: { readonly forkScope: Scope.Scope }\n}\n\ntype InstanceState = {\n readonly installationKey: InstallationKey\n readonly processInstanceId: ProcessInstanceId\n readonly identity: ProcessInstanceIdentity\n readonly processId: string\n readonly scope: ProcessScope\n readonly forkScope: Scope.Scope\n readonly platformTriggersQueue: Queue.Queue<ProcessTrigger>\n status: ProcessInstanceStatus\n nextEventSeq: number\n nextTriggerSeq: number\n fiber?: Fiber.RuntimeFiber<unknown, unknown>\n}\n\nexport interface ProcessRuntime {\n readonly install: <E, R>(\n process: Effect.Effect<void, E, R>,\n options: {\n readonly scope: ProcessScope\n readonly enabled?: boolean\n readonly installedAt?: string\n readonly mode?: ProcessInstallMode\n },\n ) => Effect.Effect<ProcessInstallation | undefined, never, R>\n readonly listInstallations: (filter?: {\n readonly scopeType?: ProcessScope['type']\n readonly scopeKey?: string\n }) => Effect.Effect<ReadonlyArray<ProcessInstallation>>\n readonly getInstanceStatus: (processInstanceId: string) => Effect.Effect<ProcessInstanceStatus | undefined>\n readonly controlInstance: (processInstanceId: string, request: ProcessControlRequest) => Effect.Effect<void>\n readonly deliverPlatformEvent: (event: ProcessPlatformEvent) => Effect.Effect<void>\n readonly events: Stream.Stream<ProcessEvent>\n readonly getEventsSnapshot: () => Effect.Effect<ReadonlyArray<ProcessEvent>>\n}\n\nexport class ProcessRuntimeTag extends Context.Tag('@logixjs/core/ProcessRuntime')<ProcessRuntimeTag, ProcessRuntime>() {}\n\nconst currentProcessTrigger = FiberRef.unsafeMake<ProcessTrigger | undefined>(undefined)\nconst currentProcessEventBudget = FiberRef.unsafeMake<Ref.Ref<ProcessEvents.ProcessRunEventBudgetState> | undefined>(\n undefined,\n)\nconst RUNTIME_BOOT_EVENT = 'runtime:boot' as const\n\nconst deriveDebugModuleId = (processId: string): string => `process:${processId}`\n\ntype NonPlatformTriggerSpec = Exclude<ProcessTriggerSpec, { readonly kind: 'platformEvent' }>\n\nconst deriveTxnAnchor = (event: ProcessEvent): { readonly txnSeq?: number; readonly txnId?: string } => {\n const trigger: any = event.trigger\n if (!trigger) return {}\n if (\n (trigger.kind === 'moduleAction' || trigger.kind === 'moduleStateChange') &&\n typeof trigger.instanceId === 'string' &&\n typeof trigger.txnSeq === 'number' &&\n Number.isFinite(trigger.txnSeq) &&\n trigger.txnSeq >= 1\n ) {\n const txnSeq = Math.floor(trigger.txnSeq)\n return {\n txnSeq,\n txnId: `${trigger.instanceId}::t${txnSeq}`,\n }\n }\n return {}\n}\n\nconst shouldNoopDueToSyncTxn = (scope: ProcessScope, kind: string): Effect.Effect<boolean> => {\n const moduleId = scope.type === 'moduleInstance' ? scope.moduleId : undefined\n const instanceId = scope.type === 'moduleInstance' ? scope.instanceId : undefined\n return TaskRunner.shouldNoopInSyncTransactionFiber({\n moduleId,\n instanceId,\n code: 'process::invalid_usage',\n severity: 'error',\n message:\n 'ProcessRuntime scheduling is not allowed inside a synchronous StateTransaction body (it may deadlock the txnQueue).',\n hint:\n \"Trigger/schedule Process outside the transaction window (e.g. in a watcher's run section or a separate fiber); \" +\n 'do not trigger Process directly inside a reducer / synchronous transaction body.',\n kind,\n })\n}\n\nconst resolveRuntimeStateSchemaAst = (runtime: unknown): ReturnType<typeof resolveSchemaAst> => {\n try {\n const internals = getRuntimeInternals(runtime as any)\n return resolveSchemaAst(internals.stateSchema)\n } catch {\n return undefined\n }\n}\n\nconst withModuleHint = (error: Error, moduleId: string): Error => {\n const hint = (error as any).hint\n if (typeof hint === 'string' && hint.length > 0) {\n if (!hint.includes('moduleId=')) {\n ;(error as any).hint = `moduleId=${moduleId}\\n${hint}`\n }\n return error\n }\n ;(error as any).hint = `moduleId=${moduleId}`\n return error\n}\n\nconst actionIdFromUnknown = (action: unknown): string | undefined => {\n if (!action || typeof action !== 'object') return undefined\n const anyAction = action as any\n if (typeof anyAction._tag === 'string' && anyAction._tag.length > 0) return anyAction._tag\n if (typeof anyAction.type === 'string' && anyAction.type.length > 0) return anyAction.type\n return undefined\n}\n\nexport const make = (options?: {\n readonly maxEventHistory?: number\n}): Effect.Effect<ProcessRuntime, never, Scope.Scope> =>\n Effect.gen(function* () {\n const runtimeScope = yield* Effect.scope\n const maxEventHistory =\n typeof options?.maxEventHistory === 'number' &&\n Number.isFinite(options.maxEventHistory) &&\n options.maxEventHistory >= 0\n ? Math.floor(options.maxEventHistory)\n : 500\n\n const installations = new Map<InstallationKey, InstallationState>()\n const instances = new Map<ProcessInstanceId, InstanceState>()\n\n const eventsBuffer: ProcessEvent[] = []\n const eventsHub = yield* PubSub.sliding<ProcessEvent>(Math.max(1, Math.min(2048, maxEventHistory)))\n\n const trimEvents = () => {\n if (maxEventHistory <= 0) {\n eventsBuffer.length = 0\n return\n }\n if (eventsBuffer.length <= maxEventHistory) return\n const excess = eventsBuffer.length - maxEventHistory\n eventsBuffer.splice(0, excess)\n }\n\n const recordDebugEvent = (event: ProcessEvent): Effect.Effect<void> =>\n Effect.gen(function* () {\n const diagnosticsLevel = yield* FiberRef.get(Debug.currentDiagnosticsLevel)\n\n // diagnostics=off: avoid entering Debug sinks (near-zero cost); error cases are exposed via diagnostic events.\n if (diagnosticsLevel === 'off') {\n return\n }\n\n const processId = event.identity.identity.processId\n const processInstanceId = Identity.processInstanceIdFromIdentity(event.identity)\n const moduleId = deriveDebugModuleId(processId)\n const { txnSeq, txnId } = deriveTxnAnchor(event)\n\n yield* Debug.record({\n type: event.type,\n moduleId,\n instanceId: processInstanceId,\n identity: event.identity,\n severity: event.severity,\n eventSeq: event.eventSeq,\n timestampMs: event.timestampMs,\n trigger: event.trigger,\n dispatch: event.dispatch,\n error: event.error,\n txnSeq,\n txnId,\n } as any)\n })\n\n const publishEvent = (event: ProcessEvent): Effect.Effect<void> =>\n Effect.gen(function* () {\n eventsBuffer.push(event)\n trimEvents()\n yield* PubSub.publish(eventsHub, event)\n yield* recordDebugEvent(event)\n })\n\n const emit = (event: ProcessEvent): Effect.Effect<void> =>\n Effect.gen(function* () {\n const budgetRef = yield* FiberRef.get(currentProcessEventBudget)\n if (budgetRef) {\n const decision = yield* Ref.modify(budgetRef, (state) => {\n const [nextDecision, nextState] = ProcessEvents.applyProcessRunEventBudget(state, event)\n return [nextDecision, nextState] as const\n })\n\n if (decision._tag === 'emit' || decision._tag === 'emitSummary') {\n yield* publishEvent(decision.event)\n }\n return\n }\n\n const enforced = ProcessEvents.enforceProcessEventMaxBytes(event)\n yield* publishEvent(enforced.event)\n })\n\n const emitErrorDiagnostic = (\n scope: ProcessScope,\n processId: string,\n code: string,\n message: string,\n hint?: string,\n ): Effect.Effect<void> => {\n if (!isDevEnv()) {\n return Effect.void\n }\n const moduleId = scope.type === 'moduleInstance' ? scope.moduleId : undefined\n const instanceId = scope.type === 'moduleInstance' ? scope.instanceId : undefined\n return Debug.record({\n type: 'diagnostic',\n moduleId,\n instanceId,\n code,\n severity: 'error',\n message,\n hint,\n actionTag: processId,\n kind: 'process_runtime',\n })\n }\n\n const resolveMissingDependencies = (installation: InstallationState): ReadonlyArray<string> => {\n const declared = installation.definition.requires ?? []\n const implicitFromTriggers: string[] = []\n for (const trigger of installation.definition.triggers) {\n if (trigger.kind === 'moduleAction' || trigger.kind === 'moduleStateChange') {\n implicitFromTriggers.push(trigger.moduleId)\n }\n }\n\n const requires = Array.from(new Set([...declared, ...implicitFromTriggers]))\n if (requires.length === 0) return []\n\n const missing: string[] = []\n for (const dep of requires) {\n if (typeof dep !== 'string' || dep.length === 0) continue\n\n // ModuleTag key convention: `@logixjs/Module/${id}`; Tag identity is derived from the key, so we can construct it on demand.\n const tag = Context.Tag(`@logixjs/Module/${dep}`)() as Context.Tag<any, any>\n const found = Context.getOption(installation.env, tag)\n if (Option.isNone(found)) {\n missing.push(dep)\n }\n }\n return missing\n }\n\n const stopInstance = (\n instance: InstanceState,\n reason: ProcessInstanceStatus['stoppedReason'],\n ): Effect.Effect<void> =>\n Effect.gen(function* () {\n if (\n instance.status.status === 'stopped' ||\n instance.status.status === 'failed' ||\n instance.status.status === 'stopping'\n ) {\n return\n }\n\n const fiber = instance.fiber\n instance.status = {\n ...instance.status,\n status: 'stopping',\n stoppedReason: reason,\n }\n\n if (fiber) {\n yield* Fiber.interrupt(fiber)\n }\n\n yield* Queue.shutdown(instance.platformTriggersQueue)\n\n instance.status = {\n ...instance.status,\n status: 'stopped',\n stoppedReason: reason,\n }\n instance.fiber = undefined\n\n const evt: ProcessEvent = {\n type: 'process:stop',\n identity: instance.identity,\n severity: 'info',\n eventSeq: instance.nextEventSeq++,\n timestampMs: Date.now(),\n }\n yield* emit(evt)\n\n const installation = installations.get(instance.installationKey)\n if (installation?.pendingStart) {\n installation.pendingStart = undefined\n yield* startInstallation(instance.installationKey)\n }\n })\n\n const startInstallation: (installationKey: InstallationKey) => Effect.Effect<void> = (installationKey) =>\n Effect.gen(function* () {\n const installation = installations.get(installationKey)\n if (!installation) return\n installation.pendingStart = undefined\n\n const noop = yield* shouldNoopDueToSyncTxn(installation.identity.scope, 'process_start_in_transaction')\n if (noop) return\n\n // Do not start again if an active instance already exists.\n const currentId = installation.currentInstanceId\n if (currentId) {\n const current = instances.get(currentId)\n if (current && (current.status.status === 'running' || current.status.status === 'starting')) {\n return\n }\n }\n\n const runSeq = installation.nextRunSeq++\n const identity: ProcessInstanceIdentity = {\n identity: installation.identity,\n runSeq,\n }\n const processInstanceId = Identity.processInstanceIdFromIdentity(identity)\n\n const platformTriggersQueue = yield* Queue.sliding<ProcessTrigger>(64)\n\n const instanceState: InstanceState = {\n installationKey,\n processInstanceId,\n identity,\n processId: installation.identity.processId,\n scope: installation.identity.scope,\n forkScope: installation.forkScope,\n platformTriggersQueue,\n status: {\n identity,\n status: 'starting',\n },\n nextEventSeq: 1,\n nextTriggerSeq: 1,\n }\n\n instances.set(processInstanceId, instanceState)\n installation.currentInstanceId = processInstanceId\n\n // When forkScope is disposed (e.g. uiSubtree unmount), ensure the instance transitions to stopped and emits a stop event.\n // - Do not rely on unstable \"whether interruption reaches catchAllCause\" behavior.\n // - Do not double-register on runtimeScope; the runtime finalizer already stops all instances.\n if (installation.forkScope !== runtimeScope) {\n yield* Scope.addFinalizer(\n installation.forkScope as Scope.CloseableScope,\n Effect.suspend(() => {\n const status = instanceState.status.status\n if (status === 'stopped' || status === 'failed' || status === 'stopping') {\n return Effect.void\n }\n return stopInstance(instanceState, 'scopeDisposed')\n }).pipe(Effect.catchAllCause(() => Effect.void)),\n )\n }\n\n // start event: indicates the instance has entered the start flow (fiber has been forked).\n yield* emit({\n type: 'process:start',\n identity,\n severity: 'info',\n eventSeq: instanceState.nextEventSeq++,\n timestampMs: Date.now(),\n })\n\n const missing = resolveMissingDependencies(installation)\n if (missing.length > 0) {\n const hint = isDevEnv()\n ? [\n 'Strict scope dependency resolution: missing required modules in the current scope.',\n `missing: ${missing.join(', ')}`,\n '',\n 'fix:',\n '- Provide the missing module implementation(s) in the same scope via imports.',\n ` Example: RootModule.implement({ imports: [${missing[0]}.implement(...).impl], processes: [...] })`,\n '- Do not rely on cross-scope fallbacks / guessing instances.',\n ].join('\\n')\n : undefined\n\n const error: SerializableErrorSummary = {\n message: `Missing dependencies in scope: ${missing.join(', ')}`,\n code: 'process::missing_dependency',\n hint,\n }\n\n instanceState.status = {\n ...instanceState.status,\n status: 'failed',\n stoppedReason: 'failed',\n lastError: error,\n }\n\n yield* emit({\n type: 'process:error',\n identity,\n severity: 'error',\n eventSeq: instanceState.nextEventSeq++,\n timestampMs: Date.now(),\n error,\n })\n\n yield* emitErrorDiagnostic(\n installation.identity.scope,\n installation.identity.processId,\n 'process::missing_dependency',\n error.message,\n hint,\n )\n return\n }\n\n const shouldRecordChainEvents = installation.definition.diagnosticsLevel !== 'off'\n\n const baseEnv = installation.env\n\n const makeWrappedEnv = (): Context.Context<any> => {\n if (!shouldRecordChainEvents) {\n return baseEnv\n }\n\n const requires = installation.definition.requires ?? []\n if (requires.length === 0) {\n return baseEnv\n }\n\n const ids = Array.from(new Set(requires))\n let nextEnv = baseEnv\n\n for (const moduleId of ids) {\n if (typeof moduleId !== 'string' || moduleId.length === 0) continue\n const tag = Context.Tag(`@logixjs/Module/${moduleId}`)() as Context.Tag<any, any>\n const found = Context.getOption(baseEnv, tag)\n if (Option.isNone(found)) continue\n const runtime = found.value as any\n\n const recordDispatch = (action: unknown) =>\n Effect.gen(function* () {\n const trigger = yield* FiberRef.get(currentProcessTrigger)\n if (!trigger) return\n\n const actionId = actionIdFromUnknown(action) ?? 'unknown'\n const dispatchModuleId = typeof runtime.moduleId === 'string' ? runtime.moduleId : moduleId\n const dispatchInstanceId = typeof runtime.instanceId === 'string' ? runtime.instanceId : 'unknown'\n\n const evt: ProcessEvent = {\n type: 'process:dispatch',\n identity,\n trigger,\n dispatch: {\n moduleId: dispatchModuleId,\n instanceId: dispatchInstanceId,\n actionId,\n },\n severity: 'info',\n eventSeq: instanceState.nextEventSeq++,\n timestampMs: Date.now(),\n }\n\n yield* emit(evt)\n })\n\n const wrapped = {\n ...runtime,\n dispatch: (action: unknown) => runtime.dispatch(action).pipe(Effect.tap(() => recordDispatch(action))),\n dispatchLowPriority: (action: unknown) =>\n runtime.dispatchLowPriority(action).pipe(Effect.tap(() => recordDispatch(action))),\n dispatchBatch: (actions: ReadonlyArray<unknown>) =>\n runtime\n .dispatchBatch(actions)\n .pipe(Effect.tap(() => Effect.forEach(actions, recordDispatch, { discard: true }))),\n }\n\n nextEnv = Context.add(tag, wrapped)(nextEnv)\n }\n\n return nextEnv\n }\n\n const wrappedEnv = makeWrappedEnv()\n const providedProcess = Effect.provide(installation.process, wrappedEnv)\n\n const makeTriggerStream = (spec: NonPlatformTriggerSpec): Effect.Effect<Stream.Stream<ProcessTrigger>, Error> =>\n Effect.gen(function* () {\n if (spec.kind === 'timer') {\n const interval = Duration.decodeUnknown(spec.timerId)\n if (Option.isNone(interval)) {\n const err = new Error(`[ProcessRuntime] invalid timerId (expected DurationInput): ${spec.timerId}`)\n ;(err as any).code = 'process::invalid_timer_id'\n ;(err as any).hint =\n \"timerId must be a valid DurationInput string, e.g. '10 millis', '1 seconds', '5 minutes'.\"\n return yield* Effect.fail(err)\n }\n\n return Stream.tick(interval.value).pipe(\n Stream.map(\n () =>\n ({\n kind: 'timer',\n name: spec.name,\n timerId: spec.timerId,\n }) satisfies ProcessTrigger,\n ),\n )\n }\n\n if (spec.kind === 'moduleAction') {\n const tag = Context.Tag(`@logixjs/Module/${spec.moduleId}`)() as Context.Tag<any, any>\n const found = Context.getOption(baseEnv, tag)\n if (Option.isNone(found)) {\n return yield* Effect.fail(new Error(`Missing module runtime in scope: ${spec.moduleId}`))\n }\n\n const runtime = found.value as any\n\n // perf: when diagnostics=off, avoid subscribing to actionsWithMeta$ (published inside txns; more subscribers hurt hot paths).\n // diagnostics=light/full needs txnSeq/txnId anchors, so only use actionsWithMeta$ when chain events are enabled.\n if (!shouldRecordChainEvents) {\n const stream = runtime.actions$ as Stream.Stream<any> | undefined\n if (!stream) {\n const err = new Error('ModuleRuntime does not provide actions$ (required for moduleAction trigger).')\n ;(err as any).code = 'process::missing_action_stream'\n ;(err as any).hint = `moduleId=${spec.moduleId}`\n return yield* Effect.fail(err)\n }\n\n return stream.pipe(\n Stream.filter((action: any) => actionIdFromUnknown(action) === spec.actionId),\n Stream.map(\n () =>\n ({\n kind: 'moduleAction',\n name: spec.name,\n moduleId: spec.moduleId,\n instanceId: runtime.instanceId as string,\n actionId: spec.actionId,\n txnSeq: 1,\n }) satisfies ProcessTrigger,\n ),\n )\n }\n\n const stream = runtime.actionsWithMeta$ as Stream.Stream<any> | undefined\n if (!stream) {\n const err = new Error(\n 'ModuleRuntime does not provide actionsWithMeta$ (required for moduleAction trigger).',\n )\n ;(err as any).code = 'process::missing_action_meta_stream'\n ;(err as any).hint = `moduleId=${spec.moduleId}`\n return yield* Effect.fail(err)\n }\n\n return stream.pipe(\n Stream.filter((evt: any) => actionIdFromUnknown(evt.value) === spec.actionId),\n Stream.map((evt: any) => {\n const txnSeq = evt?.meta?.txnSeq\n return {\n kind: 'moduleAction',\n name: spec.name,\n moduleId: spec.moduleId,\n instanceId: runtime.instanceId as string,\n actionId: spec.actionId,\n txnSeq: typeof txnSeq === 'number' ? txnSeq : 1,\n } satisfies ProcessTrigger\n }),\n )\n }\n\n // moduleStateChange\n const tag = Context.Tag(`@logixjs/Module/${spec.moduleId}`)() as Context.Tag<any, any>\n const found = Context.getOption(baseEnv, tag)\n if (Option.isNone(found)) {\n return yield* Effect.fail(new Error(`Missing module runtime in scope: ${spec.moduleId}`))\n }\n\n const runtime = found.value as any\n const schemaAst = resolveRuntimeStateSchemaAst(runtime)\n const selectorResult = makeSchemaSelector(spec.path, schemaAst)\n if (!selectorResult.ok) {\n return yield* Effect.fail(withModuleHint(selectorResult.error, spec.moduleId))\n }\n const selectorBase = selectorResult.selector\n const prevRef = yield* Ref.make<Option.Option<unknown>>(Option.none())\n\n const enableSelectorDiagnostics = shouldRecordChainEvents\n\n const selectorDiagnosticsRef = enableSelectorDiagnostics\n ? yield* Ref.make({\n windowStartedMs: Date.now(),\n triggersInWindow: 0,\n lastWarningAtMs: 0,\n })\n : undefined\n\n const sampleEveryMask = 0x7f // sample every 128 calls\n const slowSampleThresholdMs = 4\n const triggerWindowMs = 1000\n const triggerWarningThreshold = isDevEnv() ? 20 : 200\n const warningCooldownMs = 30_000\n\n let selectorCalls = 0\n let selectorSamples = 0\n let selectorSlowSamples = 0\n let selectorMaxSampleMs = 0\n\n const nowMs = (): number => {\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n return performance.now()\n }\n return Date.now()\n }\n\n const selector = enableSelectorDiagnostics\n ? (state: unknown): unknown => {\n selectorCalls += 1\n if ((selectorCalls & sampleEveryMask) !== 0) {\n return selectorBase(state)\n }\n\n const t0 = nowMs()\n const value = selectorBase(state)\n const dt = nowMs() - t0\n\n selectorSamples += 1\n if (dt >= slowSampleThresholdMs) {\n selectorSlowSamples += 1\n }\n if (dt > selectorMaxSampleMs) {\n selectorMaxSampleMs = dt\n }\n\n return value\n }\n : selectorBase\n\n const maybeWarnSelector = (trigger: ProcessTrigger): Effect.Effect<void> => {\n if (!selectorDiagnosticsRef) {\n return Effect.void\n }\n\n return Effect.gen(function* () {\n const now = Date.now()\n\n const decision = yield* Ref.modify(selectorDiagnosticsRef, (s) => {\n const windowExpired = now - s.windowStartedMs >= triggerWindowMs\n const windowStartedMs = windowExpired ? now : s.windowStartedMs\n const triggersInWindow = windowExpired ? 1 : s.triggersInWindow + 1\n\n const shouldCooldown = now - s.lastWarningAtMs < warningCooldownMs\n const tooFrequent = triggersInWindow >= triggerWarningThreshold\n const tooSlow = selectorMaxSampleMs >= slowSampleThresholdMs && selectorSamples > 0\n const shouldWarn = !shouldCooldown && (tooFrequent || tooSlow)\n\n const next = shouldWarn\n ? {\n windowStartedMs: now,\n triggersInWindow: 0,\n lastWarningAtMs: now,\n }\n : {\n ...s,\n windowStartedMs,\n triggersInWindow,\n }\n\n return [\n {\n shouldWarn,\n tooFrequent,\n tooSlow,\n triggersInWindow,\n },\n next,\n ] as const\n })\n\n if (!decision.shouldWarn) {\n return\n }\n\n const code = decision.tooFrequent ? 'process::selector_high_frequency' : 'process::selector_slow'\n\n const hint = [\n `moduleId=${spec.moduleId}`,\n `path=${spec.path}`,\n `windowMs=${triggerWindowMs}`,\n `triggersInWindow=${decision.triggersInWindow}`,\n `threshold=${triggerWarningThreshold}`,\n `cooldownMs=${warningCooldownMs}`,\n '',\n 'selector sampling:',\n `calls=${selectorCalls}`,\n `sampled=${selectorSamples}`,\n `slowSamples(>=${slowSampleThresholdMs}ms)=${selectorSlowSamples}`,\n `maxSampleMs=${selectorMaxSampleMs.toFixed(2)}`,\n '',\n 'notes:',\n '- Ensure the selected value is stable (prefer primitive/tuple; avoid returning fresh objects).',\n '- Narrow the path to reduce change frequency; avoid selecting large objects.',\n ].join('\\n')\n\n selectorSamples = 0\n selectorSlowSamples = 0\n selectorMaxSampleMs = 0\n\n yield* emit({\n type: 'process:trigger',\n identity,\n trigger,\n severity: 'warning',\n eventSeq: instanceState.nextEventSeq++,\n timestampMs: Date.now(),\n error: {\n message: 'moduleStateChange selector diagnostics warning',\n code,\n hint,\n },\n } satisfies ProcessEvent)\n })\n }\n\n const baseStream = (runtime.changesWithMeta(selector) as Stream.Stream<any>).pipe(\n Stream.mapEffect((evt: any) =>\n Ref.get(prevRef).pipe(\n Effect.flatMap((prev) => {\n if (Option.isSome(prev) && Object.is(prev.value, evt.value)) {\n return Effect.succeed(Option.none())\n }\n return Ref.set(prevRef, Option.some(evt.value)).pipe(Effect.as(Option.some(evt)))\n }),\n ),\n ),\n Stream.filterMap((opt) => opt),\n Stream.map((evt: any) => {\n const txnSeq = evt?.meta?.txnSeq\n return {\n kind: 'moduleStateChange',\n name: spec.name,\n moduleId: spec.moduleId,\n instanceId: runtime.instanceId as string,\n path: spec.path,\n txnSeq: typeof txnSeq === 'number' ? txnSeq : 1,\n } satisfies ProcessTrigger\n }),\n )\n\n return enableSelectorDiagnostics ? baseStream.pipe(Stream.tap(maybeWarnSelector)) : baseStream\n })\n\n const makeRun = (trigger: ProcessTrigger, fatal: Deferred.Deferred<Cause.Cause<any>>): Effect.Effect<void> =>\n Effect.locally(\n currentProcessTrigger,\n trigger,\n )(\n providedProcess.pipe(\n Effect.catchAllCause((cause) => {\n if (Cause.isInterruptedOnly(cause)) {\n return Effect.void\n }\n return Deferred.succeed(fatal, cause).pipe(\n Effect.asVoid,\n Effect.catchAll(() => Effect.void),\n )\n }),\n ),\n )\n\n const makeChainRun = (\n trigger: ProcessTrigger,\n fatal: Deferred.Deferred<Cause.Cause<any>>,\n ): Effect.Effect<void> => {\n if (!shouldRecordChainEvents) {\n return makeRun(trigger, fatal)\n }\n\n return Effect.gen(function* () {\n const budgetRef = yield* Ref.make(ProcessEvents.makeProcessRunEventBudgetState())\n return yield* Effect.locally(\n currentProcessEventBudget,\n budgetRef,\n )(emitTriggerEvent(trigger, 'info').pipe(Effect.zipRight(makeRun(trigger, fatal))))\n })\n }\n\n const assignTriggerSeq = (trigger: ProcessTrigger): ProcessTrigger => {\n if (!shouldRecordChainEvents) {\n return trigger\n }\n\n return {\n ...trigger,\n triggerSeq: instanceState.nextTriggerSeq++,\n }\n }\n\n const emitTriggerEvent = (trigger: ProcessTrigger, severity: ProcessEvent['severity']): Effect.Effect<void> => {\n if (!shouldRecordChainEvents) {\n return Effect.void\n }\n\n const evt: ProcessEvent = {\n type: 'process:trigger',\n identity,\n trigger,\n severity,\n eventSeq: instanceState.nextEventSeq++,\n timestampMs: Date.now(),\n }\n return emit(evt)\n }\n\n const policy = installation.definition.concurrency\n const autoStart = installation.definition.triggers.some(\n (t) => t.kind === 'platformEvent' && t.platformEvent === RUNTIME_BOOT_EVENT,\n )\n const bootTriggerSpec = installation.definition.triggers.find(\n (t): t is Extract<ProcessTriggerSpec, { readonly kind: 'platformEvent' }> =>\n t.kind === 'platformEvent' && t.platformEvent === RUNTIME_BOOT_EVENT,\n )\n\n const instanceProgram = Effect.gen(function* () {\n const fatal = yield* Deferred.make<Cause.Cause<any>>()\n\n const platformEventStream: Stream.Stream<ProcessTrigger> = Stream.fromQueue(\n instanceState.platformTriggersQueue,\n )\n\n const nonPlatformTriggers = installation.definition.triggers.filter(\n (t): t is NonPlatformTriggerSpec => t.kind !== 'platformEvent',\n )\n\n const streams = yield* Effect.forEach(nonPlatformTriggers, makeTriggerStream)\n\n const triggerStream = Stream.mergeAll([platformEventStream, ...streams], {\n concurrency: 'unbounded',\n })\n\n const reportQueueOverflow = (\n info: ProcessConcurrency.ProcessTriggerQueueOverflowInfo,\n ): Effect.Effect<void> => {\n const err = new Error('Process trigger queue overflow (serial maxQueue guard).')\n ;(err as any).code = 'process::serial_queue_overflow'\n ;(err as any).hint = [\n `mode=${info.mode}`,\n `queue: current=${info.currentLength} peak=${info.peak}`,\n `maxQueue: configured=${info.limit.configured} guard=${info.limit.guard}`,\n `policy: ${JSON.stringify(info.policy)}`,\n '',\n 'fix:',\n '- Configure concurrency.maxQueue (serial) to a finite value, or switch to mode=latest/drop to avoid unbounded backlog.',\n ].join('\\n')\n return Deferred.succeed(fatal, Cause.fail(err)).pipe(\n Effect.asVoid,\n Effect.catchAll(() => Effect.void),\n )\n }\n\n const runnerFiber = yield* Effect.forkScoped(\n ProcessConcurrency.runProcessTriggerStream({\n stream: triggerStream,\n policy,\n assignTriggerSeq,\n run: (trigger) => makeChainRun(trigger, fatal),\n onDrop: (trigger) => emitTriggerEvent(trigger, 'warning'),\n onQueueOverflow: reportQueueOverflow,\n }),\n )\n\n if (autoStart) {\n yield* Queue.offer(instanceState.platformTriggersQueue, {\n kind: 'platformEvent',\n name: bootTriggerSpec?.name,\n platformEvent: RUNTIME_BOOT_EVENT,\n })\n }\n\n const cause = yield* Deferred.await(fatal)\n yield* Fiber.interrupt(runnerFiber)\n return yield* Effect.failCause(cause)\n })\n\n const fiber = yield* Effect.forkIn(installation.forkScope)(\n Effect.scoped(instanceProgram).pipe(\n Effect.catchAllCause((cause) =>\n Effect.gen(function* () {\n // Interruptions (typically from scope dispose / manual stop) should not be treated as process failures.\n // Otherwise we emit process:error/diagnostic during scope shutdown and may deadlock disposal.\n if (Cause.isInterruptedOnly(cause)) {\n // If stopInstance already advanced the status to stopping, stopInstance owns the stop event and final state.\n if (instanceState.status.status === 'stopping') {\n return\n }\n\n // Otherwise treat as a natural stop due to scope disposal (e.g. moduleInstance scope closing).\n instanceState.status = {\n ...instanceState.status,\n status: 'stopped',\n stoppedReason: 'scopeDisposed',\n }\n instanceState.fiber = undefined\n\n yield* Effect.uninterruptible(\n emit({\n type: 'process:stop',\n identity,\n severity: 'info',\n eventSeq: instanceState.nextEventSeq++,\n timestampMs: Date.now(),\n }),\n )\n\n const installation = installations.get(installationKey)\n if (installation?.pendingStart) {\n installation.pendingStart = undefined\n yield* startInstallation(installationKey)\n }\n return\n }\n\n const primary = Option.getOrElse(Cause.failureOption(cause), () =>\n Option.getOrElse(Cause.dieOption(cause), () => cause),\n )\n const summary = toSerializableErrorSummary(primary)\n const error: SerializableErrorSummary = summary.errorSummary as any\n\n instanceState.status = {\n ...instanceState.status,\n status: 'failed',\n stoppedReason: 'failed',\n lastError: error,\n }\n\n yield* emit({\n type: 'process:error',\n identity,\n severity: 'error',\n eventSeq: instanceState.nextEventSeq++,\n timestampMs: Date.now(),\n error,\n })\n\n const decision = Supervision.onFailure(\n installation.definition.errorPolicy,\n installation.supervision,\n Date.now(),\n )\n installation.supervision = decision.nextState\n\n if (decision.decision === 'restart') {\n // supervise: controlled restart (runSeq increments) and emit a restart event.\n yield* emit({\n type: 'process:restart',\n identity,\n severity: 'warning',\n eventSeq: instanceState.nextEventSeq++,\n timestampMs: Date.now(),\n error,\n })\n yield* startInstallation(installationKey)\n } else {\n yield* emitErrorDiagnostic(\n installation.identity.scope,\n installation.identity.processId,\n 'process::failed_stop',\n 'Process failed and stopped (failStop / restart limit reached).',\n `processId=${installation.identity.processId} scopeKey=${installation.scopeKey} failures=${decision.withinWindowFailures} maxRestarts=${decision.maxRestarts}`,\n )\n }\n }),\n ),\n ),\n )\n\n instanceState.fiber = fiber as Fiber.RuntimeFiber<unknown, unknown>\n instanceState.status = {\n ...instanceState.status,\n status: 'running',\n }\n\n // Best-effort: ensure the instance fiber starts subscribing to trigger streams before install/start returns,\n // avoiding lost moduleAction/moduleStateChange triggers right after env is built and dispatch happens.\n yield* Effect.yieldNow()\n })\n\n const install = <E, R>(\n process: Effect.Effect<void, E, R>,\n options: {\n readonly scope: ProcessScope\n readonly enabled?: boolean\n readonly installedAt?: string\n readonly mode?: ProcessInstallMode\n },\n ): Effect.Effect<ProcessInstallation | undefined, never, R> =>\n Effect.gen(function* () {\n const meta = Meta.getMeta(process)\n if (!meta) {\n return undefined\n }\n\n const env = yield* Effect.context<R>()\n const forkScopeOpt = yield* Effect.serviceOption(Scope.Scope)\n const forkScope = Option.isSome(forkScopeOpt) ? forkScopeOpt.value : runtimeScope\n\n const scopeKey = Identity.scopeKeyFromScope(options.scope)\n const identity = {\n processId: meta.definition.processId,\n scope: options.scope,\n } as const\n\n const installationKey = Identity.installationKeyFromIdentity(identity)\n const existing = installations.get(installationKey)\n if (existing) {\n existing.env = env as Context.Context<any>\n existing.forkScope = forkScope\n existing.enabled = options.enabled ?? true\n existing.installedAt = options.installedAt ?? existing.installedAt\n if (!existing.enabled) {\n existing.pendingStart = undefined\n return {\n identity,\n enabled: existing.enabled,\n installedAt: existing.installedAt,\n } satisfies ProcessInstallation\n }\n\n const currentId = existing.currentInstanceId\n const current = currentId ? instances.get(currentId) : undefined\n const status = current?.status.status\n\n if (status === 'running' || status === 'starting') {\n const mode: ProcessInstallMode = options.mode ?? 'switch'\n if (mode === 'switch' && current && current.forkScope !== forkScope) {\n existing.pendingStart = { forkScope }\n yield* Scope.addFinalizer(\n forkScope,\n Effect.sync(() => {\n const installation = installations.get(installationKey)\n if (!installation) return\n if (installation.pendingStart?.forkScope === forkScope) {\n installation.pendingStart = undefined\n }\n }),\n )\n } else {\n existing.pendingStart = undefined\n }\n return {\n identity,\n enabled: existing.enabled,\n installedAt: existing.installedAt,\n } satisfies ProcessInstallation\n }\n\n if (status === 'stopping') {\n const mode: ProcessInstallMode = options.mode ?? 'switch'\n if (mode === 'switch') {\n existing.pendingStart = { forkScope }\n yield* Scope.addFinalizer(\n forkScope,\n Effect.sync(() => {\n const installation = installations.get(installationKey)\n if (!installation) return\n if (installation.pendingStart?.forkScope === forkScope) {\n installation.pendingStart = undefined\n }\n }),\n )\n } else {\n existing.pendingStart = undefined\n }\n return {\n identity,\n enabled: existing.enabled,\n installedAt: existing.installedAt,\n } satisfies ProcessInstallation\n }\n\n existing.pendingStart = undefined\n yield* startInstallation(installationKey)\n return {\n identity,\n enabled: existing.enabled,\n installedAt: existing.installedAt,\n } satisfies ProcessInstallation\n }\n\n // Derive an effect for this installation to avoid overwriting meta on the original Effect (reused across scopes).\n // Note: do not provide env eagerly; we may need to layer additional context per-trigger execution (e.g. dispatch chain diagnostics).\n const derived = Effect.suspend(() => process)\n Meta.attachMeta(derived, {\n ...meta,\n installationScope: options.scope,\n })\n\n const installation: InstallationState = {\n identity,\n scopeKey,\n definition: meta.definition,\n env: env as Context.Context<any>,\n forkScope,\n process: derived as unknown as Effect.Effect<void, any, unknown>,\n kind: meta.kind ?? 'process',\n enabled: options.enabled ?? true,\n installedAt: options.installedAt,\n nextRunSeq: 1,\n supervision: Supervision.initialState(),\n pendingStart: undefined,\n }\n\n installations.set(installationKey, installation)\n\n if (installation.enabled) {\n yield* startInstallation(installationKey)\n }\n\n return {\n identity,\n enabled: installation.enabled,\n installedAt: installation.installedAt,\n } satisfies ProcessInstallation\n })\n\n const listInstallations: ProcessRuntime['listInstallations'] = (filter) =>\n Effect.sync(() => {\n const scopeType = filter?.scopeType\n const scopeKey = filter?.scopeKey\n const out: ProcessInstallation[] = []\n for (const installation of installations.values()) {\n if (scopeType && installation.identity.scope.type !== scopeType) continue\n if (scopeKey && installation.scopeKey !== scopeKey) continue\n out.push({\n identity: installation.identity,\n enabled: installation.enabled,\n installedAt: installation.installedAt,\n })\n }\n return out\n })\n\n const getInstanceStatus: ProcessRuntime['getInstanceStatus'] = (processInstanceId) =>\n Effect.sync(() => instances.get(processInstanceId)?.status)\n\n const controlInstance: ProcessRuntime['controlInstance'] = (processInstanceId, request) =>\n Effect.suspend(() => {\n const instance = instances.get(processInstanceId)\n if (!instance) {\n return Effect.void\n }\n\n return shouldNoopDueToSyncTxn(instance.scope, 'process_control_in_transaction').pipe(\n Effect.flatMap((noop) => {\n if (noop) {\n return Effect.void\n }\n\n if (request.action === 'stop') {\n return stopInstance(instance, 'manualStop')\n }\n\n if (request.action === 'restart') {\n return stopInstance(instance, 'manualStop').pipe(\n Effect.flatMap(() => {\n const installation = installations.get(instance.installationKey)\n if (!installation) {\n return Effect.void\n }\n installation.currentInstanceId = undefined\n return startInstallation(instance.installationKey)\n }),\n )\n }\n\n // start: only applies to stopped instances; reuses current runSeq without incrementing.\n if (request.action === 'start') {\n if (instance.status.status === 'running' || instance.status.status === 'starting') {\n return Effect.void\n }\n\n const installation = installations.get(instance.installationKey)\n if (!installation) {\n return Effect.void\n }\n installation.currentInstanceId = undefined\n return startInstallation(instance.installationKey)\n }\n\n return Effect.void\n }),\n )\n })\n\n const deliverPlatformEvent: ProcessRuntime['deliverPlatformEvent'] = (event) =>\n Effect.gen(function* () {\n const noop = yield* TaskRunner.shouldNoopInSyncTransactionFiber({\n code: 'process::invalid_usage',\n severity: 'error',\n message:\n 'ProcessRuntime platform events are not allowed inside a synchronous StateTransaction body (it may deadlock the txnQueue).',\n hint: 'Deliver platformEvent outside the transaction window.',\n kind: 'process_platform_event_in_transaction',\n })\n if (noop) return\n\n const targets = Array.from(instances.values())\n const eventName = event.eventName\n\n yield* Effect.forEach(\n targets,\n (instance) =>\n Effect.suspend(() => {\n if (instance.status.status !== 'starting' && instance.status.status !== 'running') {\n return Effect.void\n }\n\n const installation = installations.get(instance.installationKey)\n if (!installation) {\n return Effect.void\n }\n\n const specs = installation.definition.triggers.filter(\n (t): t is Extract<ProcessTriggerSpec, { readonly kind: 'platformEvent' }> =>\n t.kind === 'platformEvent' && t.platformEvent === eventName,\n )\n if (specs.length === 0) {\n return Effect.void\n }\n\n return Effect.forEach(\n specs,\n (spec) =>\n Queue.offer(instance.platformTriggersQueue, {\n kind: 'platformEvent',\n name: spec.name,\n platformEvent: spec.platformEvent,\n } satisfies ProcessTrigger),\n { discard: true },\n )\n }),\n { discard: true },\n )\n })\n\n const eventsStream: ProcessRuntime['events'] = Stream.fromPubSub(eventsHub)\n\n const getEventsSnapshot: ProcessRuntime['getEventsSnapshot'] = () => Effect.sync(() => eventsBuffer.slice())\n\n yield* Effect.addFinalizer(() =>\n Effect.gen(function* () {\n for (const installation of installations.values()) {\n installation.pendingStart = undefined\n }\n for (const instance of instances.values()) {\n if (instance.fiber) {\n yield* stopInstance(instance, 'scopeDisposed')\n }\n }\n }).pipe(\n Effect.catchAllCause((cause) =>\n Effect.sync(() => {\n // Finalizers must not throw; best-effort logging only.\n if (isDevEnv()) {\n // eslint-disable-next-line no-console\n console.warn('[ProcessRuntime] finalizer failed', Cause.pretty(cause))\n }\n }),\n ),\n ),\n )\n\n return {\n install,\n listInstallations,\n getInstanceStatus,\n controlInstance,\n deliverPlatformEvent,\n events: eventsStream,\n getEventsSnapshot,\n } satisfies ProcessRuntime\n })\n\nexport const layer = (options?: { readonly maxEventHistory?: number }): Layer.Layer<ProcessRuntimeTag, never, never> =>\n Layer.scoped(ProcessRuntimeTag, make(options))\n","import type { ProcessIdentity, ProcessInstanceIdentity, ProcessScope } from './protocol.js'\n\nexport type ProcessScopeKey = string\n\nexport const scopeKeyFromScope = (scope: ProcessScope): ProcessScopeKey => {\n switch (scope.type) {\n case 'app':\n return `app:${scope.appId}`\n case 'moduleInstance':\n return `moduleInstance:${scope.moduleId}::${scope.instanceId}`\n case 'uiSubtree':\n return `uiSubtree:${scope.subtreeId}`\n }\n}\n\nexport const installationKeyFromIdentity = (identity: ProcessIdentity): string =>\n `${identity.processId}@@${scopeKeyFromScope(identity.scope)}`\n\nexport const processInstanceIdFromIdentity = (identity: ProcessInstanceIdentity): string => {\n const scopeKey = scopeKeyFromScope(identity.identity.scope)\n return `process:${identity.identity.processId}::${scopeKey}::r${identity.runSeq}`\n}\n","import { Effect, Fiber, Option, Ref, Scope, Stream } from 'effect'\nimport type { TaskRunnerMode } from '../TaskRunner.js'\nimport type { ProcessConcurrencyPolicy, ProcessTrigger } from './protocol.js'\n\nexport const DEFAULT_SERIAL_QUEUE_GUARD_LIMIT = 4096\nexport const DEFAULT_PARALLEL_LIMIT = 16\n\nexport const toTaskRunnerMode = (policy: ProcessConcurrencyPolicy): TaskRunnerMode => {\n switch (policy.mode) {\n case 'latest':\n return 'latest'\n case 'serial':\n return 'task'\n case 'drop':\n return 'exhaust'\n case 'parallel':\n return 'parallel'\n }\n}\n\nexport type ResolvedQueueLimit = {\n /** User-configured limit; treated as unlimited when omitted (still bounded by the guard). */\n readonly configured: number | 'unbounded'\n /** Runtime-enforced guard limit (prevents unbounded memory growth). */\n readonly guard: number\n}\n\nexport const resolveQueueLimit = (\n maxQueue: unknown,\n options?: {\n readonly defaultGuard?: number\n },\n): ResolvedQueueLimit => {\n const defaultGuard = options?.defaultGuard ?? DEFAULT_SERIAL_QUEUE_GUARD_LIMIT\n\n const configured =\n typeof maxQueue === 'number' && Number.isFinite(maxQueue) && maxQueue >= 0 ? Math.floor(maxQueue) : 'unbounded'\n\n return {\n configured,\n guard: configured === 'unbounded' ? defaultGuard : configured,\n }\n}\n\nexport type ProcessTriggerQueueOverflowInfo = {\n readonly mode: 'serial' | 'parallel'\n readonly currentLength: number\n readonly peak: number\n readonly limit: ResolvedQueueLimit\n readonly policy: ProcessConcurrencyPolicy\n}\n\nexport const runProcessTriggerStream = (args: {\n readonly stream: Stream.Stream<ProcessTrigger>\n readonly policy: ProcessConcurrencyPolicy\n readonly assignTriggerSeq: (trigger: ProcessTrigger) => ProcessTrigger\n /** run a trigger to completion (the caller decides what a \\\"run\\\" means). */\n readonly run: (trigger: ProcessTrigger) => Effect.Effect<void, never, Scope.Scope>\n /** invoked when a trigger is dropped (only for mode=drop). */\n readonly onDrop: (trigger: ProcessTrigger) => Effect.Effect<void>\n /** invoked when internal queue guard is exceeded (fail-stop by default). */\n readonly onQueueOverflow: (info: ProcessTriggerQueueOverflowInfo) => Effect.Effect<void>\n readonly defaultParallelLimit?: number\n readonly defaultQueueGuard?: number\n}): Effect.Effect<void, never, Scope.Scope> =>\n Effect.gen(function* () {\n const policy = args.policy\n const defaultQueueGuard = args.defaultQueueGuard ?? DEFAULT_SERIAL_QUEUE_GUARD_LIMIT\n\n if (policy.mode === 'latest') {\n const stateRef = yield* Ref.make<{\n readonly fiber?: Fiber.RuntimeFiber<void, never>\n readonly runningId: number\n readonly nextId: number\n }>({ fiber: undefined, runningId: 0, nextId: 0 })\n\n const onTrigger = (trigger0: ProcessTrigger): Effect.Effect<void, never, Scope.Scope> =>\n Effect.gen(function* () {\n const trigger = args.assignTriggerSeq(trigger0)\n\n const [prevFiber, prevRunningId, runId] = yield* Ref.modify(stateRef, (s) => {\n const nextId = s.nextId + 1\n return [[s.fiber, s.runningId, nextId] as const, { ...s, nextId, runningId: nextId }] as const\n })\n\n if (prevFiber && prevRunningId !== 0) {\n const done = yield* Fiber.poll(prevFiber)\n if (Option.isNone(done)) {\n yield* Fiber.interruptFork(prevFiber)\n }\n }\n\n const fiber = yield* Effect.forkScoped(\n args\n .run(trigger)\n .pipe(Effect.ensuring(Ref.update(stateRef, (s) => (s.runningId === runId ? { ...s, runningId: 0 } : s)))),\n )\n\n yield* Ref.update(stateRef, (s) => ({ ...s, fiber }))\n })\n\n return yield* Stream.runForEach(args.stream, onTrigger)\n }\n\n const busyRef = yield* Ref.make(false)\n const serialStateRef = yield* Ref.make({\n running: false,\n queue: [] as ProcessTrigger[],\n peak: 0,\n })\n const parallelStateRef = yield* Ref.make({\n active: 0,\n queue: [] as ProcessTrigger[],\n peak: 0,\n })\n\n const serialQueueLimit = resolveQueueLimit(policy.maxQueue, { defaultGuard: defaultQueueGuard })\n const parallelQueueLimit = resolveQueueLimit(undefined, { defaultGuard: defaultQueueGuard })\n const parallelLimit =\n typeof policy.maxParallel === 'number' && Number.isFinite(policy.maxParallel) && policy.maxParallel >= 1\n ? Math.floor(policy.maxParallel)\n : (args.defaultParallelLimit ?? DEFAULT_PARALLEL_LIMIT)\n\n const drainSerial = (): Effect.Effect<void, never, Scope.Scope> =>\n Effect.suspend(() =>\n Ref.modify(serialStateRef, (state) => {\n if (state.running || state.queue.length === 0) {\n return [Option.none(), state] as const\n }\n const [next, ...rest] = state.queue\n return [Option.some(next), { ...state, running: true, queue: rest }] as const\n }).pipe(\n Effect.flatMap((next) =>\n Option.match(next, {\n onNone: () => Effect.void,\n onSome: (trigger) =>\n Effect.forkScoped(\n args\n .run(trigger)\n .pipe(\n Effect.ensuring(Ref.update(serialStateRef, (s) => ({ ...s, running: false }))),\n Effect.zipRight(drainSerial()),\n ),\n ).pipe(Effect.asVoid),\n }),\n ),\n ),\n )\n\n const drainParallel = (): Effect.Effect<void, never, Scope.Scope> =>\n Effect.suspend(() =>\n Ref.modify(parallelStateRef, (state) => {\n if (state.active >= parallelLimit || state.queue.length === 0) {\n return [Option.none(), state] as const\n }\n const [next, ...rest] = state.queue\n return [Option.some(next), { ...state, active: state.active + 1, queue: rest }] as const\n }).pipe(\n Effect.flatMap((next) =>\n Option.match(next, {\n onNone: () => Effect.void,\n onSome: (trigger) =>\n Effect.forkScoped(\n args.run(trigger).pipe(\n Effect.ensuring(\n Ref.update(parallelStateRef, (s) => ({\n ...s,\n active: Math.max(0, s.active - 1),\n })),\n ),\n Effect.zipRight(drainParallel()),\n ),\n ).pipe(Effect.asVoid, Effect.zipRight(drainParallel())),\n }),\n ),\n ),\n )\n\n const onTrigger = (trigger0: ProcessTrigger): Effect.Effect<void, never, Scope.Scope> =>\n Effect.gen(function* () {\n const trigger = args.assignTriggerSeq(trigger0)\n\n if (policy.mode === 'drop') {\n const acquired = yield* Ref.modify(busyRef, (busy) =>\n busy ? ([false, busy] as const) : ([true, true] as const),\n )\n if (!acquired) {\n yield* args.onDrop(trigger)\n return\n }\n\n yield* Effect.forkScoped(args.run(trigger).pipe(Effect.ensuring(Ref.set(busyRef, false))))\n return\n }\n\n if (policy.mode === 'parallel') {\n const nextSize = yield* Ref.modify(parallelStateRef, (state) => {\n const queue = [...state.queue, trigger]\n return [queue.length, { ...state, queue, peak: Math.max(state.peak, queue.length) }] as const\n })\n\n if (nextSize > parallelQueueLimit.guard) {\n const state = yield* Ref.get(parallelStateRef)\n yield* args.onQueueOverflow({\n mode: 'parallel',\n currentLength: nextSize,\n peak: state.peak,\n limit: parallelQueueLimit,\n policy,\n })\n return\n }\n\n yield* drainParallel()\n return\n }\n\n // serial\n const nextSize = yield* Ref.modify(serialStateRef, (state) => {\n const queue = [...state.queue, trigger]\n return [queue.length, { ...state, queue, peak: Math.max(state.peak, queue.length) }] as const\n })\n\n if (nextSize > serialQueueLimit.guard) {\n const state = yield* Ref.get(serialStateRef)\n yield* args.onQueueOverflow({\n mode: 'serial',\n currentLength: nextSize,\n peak: state.peak,\n limit: serialQueueLimit,\n policy,\n })\n return\n }\n\n yield* drainSerial()\n })\n\n return yield* Stream.runForEach(args.stream, onTrigger)\n })\n","import type { ProcessEvent } from './protocol.js'\n\nexport const PROCESS_EVENT_MAX_BYTES = 4 * 1024\nexport const PROCESS_EVENT_MAX_EVENTS_PER_RUN = 50\nexport const PROCESS_EVENT_RESERVED_EVENTS_FOR_SUMMARY = 1\n\nexport type ProcessRunEventBudgetState = {\n readonly maxEvents: number\n readonly maxBytes: number\n readonly emitted: number\n readonly dropped: number\n readonly downgraded: number\n readonly summaryEmitted: boolean\n}\n\nexport const makeProcessRunEventBudgetState = (options?: {\n readonly maxEvents?: number\n readonly maxBytes?: number\n}): ProcessRunEventBudgetState => ({\n maxEvents:\n typeof options?.maxEvents === 'number' && Number.isFinite(options.maxEvents) && options.maxEvents >= 0\n ? Math.floor(options.maxEvents)\n : PROCESS_EVENT_MAX_EVENTS_PER_RUN,\n maxBytes:\n typeof options?.maxBytes === 'number' && Number.isFinite(options.maxBytes) && options.maxBytes >= 0\n ? Math.floor(options.maxBytes)\n : PROCESS_EVENT_MAX_BYTES,\n emitted: 0,\n dropped: 0,\n downgraded: 0,\n summaryEmitted: false,\n})\n\nexport type ProcessRunEventBudgetDecision =\n | {\n readonly _tag: 'emit'\n readonly event: ProcessEvent\n }\n | {\n readonly _tag: 'emitSummary'\n readonly event: ProcessEvent\n }\n | {\n readonly _tag: 'drop'\n }\n\nconst makeBudgetSummaryEvent = (args: {\n readonly sourceEvent: ProcessEvent\n readonly maxEvents: number\n readonly maxBytes: number\n readonly emitted: number\n readonly dropped: number\n readonly downgraded: number\n}): ProcessEvent => ({\n type: 'process:trigger',\n identity: args.sourceEvent.identity,\n trigger: args.sourceEvent.trigger,\n severity: 'warning',\n eventSeq: args.sourceEvent.eventSeq,\n timestampMs: args.sourceEvent.timestampMs,\n error: {\n message: 'Process run event budget exceeded; further trigger/dispatch events are suppressed.',\n code: 'process::event_budget_exceeded',\n hint: `maxEvents=${args.maxEvents} maxBytes=${args.maxBytes} emitted=${args.emitted} dropped=${args.dropped} downgraded=${args.downgraded}`,\n },\n})\n\nexport const applyProcessRunEventBudget = (\n state: ProcessRunEventBudgetState,\n event: ProcessEvent,\n): readonly [ProcessRunEventBudgetDecision, ProcessRunEventBudgetState] => {\n const maxEvents = Math.max(0, state.maxEvents)\n const maxBytes = Math.max(0, state.maxBytes)\n\n if (state.summaryEmitted) {\n return [\n { _tag: 'drop' },\n {\n ...state,\n dropped: state.dropped + 1,\n },\n ]\n }\n\n const reserve = PROCESS_EVENT_RESERVED_EVENTS_FOR_SUMMARY\n const allowedRegular = Math.max(0, maxEvents - reserve)\n\n if (state.emitted < allowedRegular) {\n const enforced = enforceProcessEventMaxBytes(event, { maxBytes })\n return [\n { _tag: 'emit', event: enforced.event },\n {\n ...state,\n emitted: state.emitted + 1,\n downgraded: state.downgraded + (enforced.downgraded ? 1 : 0),\n },\n ]\n }\n\n const dropped = state.dropped + 1\n const summary = makeBudgetSummaryEvent({\n sourceEvent: event,\n maxEvents,\n maxBytes,\n emitted: state.emitted,\n dropped,\n downgraded: state.downgraded,\n })\n const enforcedSummary = enforceProcessEventMaxBytes(summary, { maxBytes })\n\n return [\n { _tag: 'emitSummary', event: enforcedSummary.event },\n {\n ...state,\n emitted: Math.min(maxEvents, state.emitted + 1),\n dropped,\n downgraded: state.downgraded + (enforcedSummary.downgraded ? 1 : 0),\n summaryEmitted: true,\n },\n ]\n}\n\nexport const estimateEventBytes = (event: ProcessEvent): number => {\n const json = JSON.stringify(event)\n return typeof Buffer !== 'undefined' ? Buffer.byteLength(json, 'utf8') : new TextEncoder().encode(json).length\n}\n\nconst truncateChars = (value: string, maxLen: number): string =>\n value.length <= maxLen ? value : value.slice(0, maxLen)\n\nconst normalizeErrorSummary = (error: NonNullable<ProcessEvent['error']>): NonNullable<ProcessEvent['error']> => {\n const message = typeof error.message === 'string' && error.message.length > 0 ? error.message : 'Error'\n\n const hint = typeof error.hint === 'string' && error.hint.length > 0 ? truncateChars(error.hint, 1024) : undefined\n\n return {\n name: typeof error.name === 'string' && error.name.length > 0 ? error.name : undefined,\n message: truncateChars(message, 256),\n code: typeof error.code === 'string' && error.code.length > 0 ? error.code : undefined,\n hint,\n }\n}\n\nexport const enforceProcessEventMaxBytes = (\n event: ProcessEvent,\n options?: {\n readonly maxBytes?: number\n },\n): { readonly event: ProcessEvent; readonly downgraded: boolean } => {\n const maxBytes = options?.maxBytes ?? PROCESS_EVENT_MAX_BYTES\n\n let downgraded = false\n let next: ProcessEvent = event\n\n if (event.error) {\n const normalized = normalizeErrorSummary(event.error)\n if (\n normalized.message !== event.error.message ||\n normalized.hint !== event.error.hint ||\n normalized.code !== event.error.code ||\n normalized.name !== event.error.name\n ) {\n downgraded = true\n next = { ...event, error: normalized }\n }\n }\n\n if (estimateEventBytes(next) <= maxBytes) {\n return { event: next, downgraded }\n }\n\n // Further trimming is applied to error.hint only (common trigger: multi-line hints).\n if (!next.error?.hint) {\n // Nothing left to trim; best-effort return.\n return { event: next, downgraded: true }\n }\n\n const hint = next.error.hint\n const steps = [512, 256, 128, 64, 32, 0]\n\n for (const maxLen of steps) {\n const trimmed = maxLen === 0 ? undefined : truncateChars(hint, maxLen)\n const candidate: ProcessEvent = {\n ...next,\n error: {\n ...next.error,\n hint: trimmed,\n },\n }\n if (estimateEventBytes(candidate) <= maxBytes) {\n return { event: candidate, downgraded: true }\n }\n }\n\n // Fallback: remove hint and shorten message (process:error must still have a message).\n const fallback: ProcessEvent = next.error\n ? ({\n ...next,\n error: {\n ...next.error,\n message: truncateChars(next.error.message, 96),\n hint: undefined,\n },\n } satisfies ProcessEvent)\n : next\n\n return { event: fallback, downgraded: true }\n}\n","import type { Effect } from 'effect'\nimport type { ProcessDefinition, ProcessScope } from './protocol.js'\n\nexport type ProcessMeta = {\n readonly definition: ProcessDefinition\n /**\n * installationScope: part of Static IR.\n * - For instance-scope / subtree-scope scenarios, the runtime overwrites this field during installation with a derived effect.\n * - This field is for export/diagnostics only; it does not participate in stable identity derivation (see identity.ts).\n */\n readonly installationScope?: ProcessScope\n readonly kind?: 'process' | 'link'\n}\n\nexport const PROCESS_META = Symbol.for('@logixjs/core/processMeta')\n\nexport type ProcessEffect<E = never, R = never> = Effect.Effect<void, E, R> & {\n readonly [PROCESS_META]?: ProcessMeta\n}\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 getMeta = (effect: Effect.Effect<void, any, any>): ProcessMeta | undefined =>\n (effect as ProcessEffect)[PROCESS_META]\n\nexport const getDefinition = (effect: Effect.Effect<void, any, any>): ProcessDefinition | undefined =>\n getMeta(effect)?.definition\n\nexport const attachMeta = <E, R>(effect: Effect.Effect<void, E, R>, meta: ProcessMeta): ProcessEffect<E, R> => {\n defineHidden(effect as any, PROCESS_META, meta)\n return effect as ProcessEffect<E, R>\n}\n","import * as SchemaAST from 'effect/SchemaAST'\n\nexport type DotPathSegment = string | number\n\ntype DotPathParseResult =\n | { readonly ok: true; readonly segments: ReadonlyArray<DotPathSegment> }\n | { readonly ok: false; readonly error: Error }\n\nexport type DotPathSelectorResult =\n | {\n readonly ok: true\n readonly selector: (state: unknown) => unknown\n readonly segments: ReadonlyArray<DotPathSegment>\n }\n | { readonly ok: false; readonly error: Error }\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => typeof value === 'object' && value !== null\n\nexport const resolveSchemaAst = (schema: unknown): SchemaAST.AST | undefined => {\n if (!isRecord(schema)) return undefined\n const ast = (schema as any).ast as SchemaAST.AST | undefined\n if (!ast) return undefined\n if (typeof ast !== 'object' && typeof ast !== 'function') return undefined\n return ast\n}\n\nconst makeDotPathError = (path: string, message: string, hint?: string): Error => {\n const err = new Error(message)\n ;(err as any).code = 'process::invalid_dot_path'\n ;(err as any).hint =\n hint ??\n [\n \"Expected dot-path syntax: segments separated by '.', numeric segments represent array indices.\",\n `path: ${path}`,\n '',\n 'examples:',\n '- count',\n '- user.name',\n '- items.0.id',\n ].join('\\n')\n return err\n}\n\nconst makeSchemaMismatchError = (path: string): Error =>\n makeDotPathError(\n path,\n 'Invalid dot-path: path does not match the state schema.',\n [\n 'The module state schema does not contain the requested dot-path.',\n `path: ${path}`,\n '',\n 'fix:',\n '- Ensure the path exists in the state schema.',\n '- Use numeric segments for array indices (e.g. items.0.id).',\n ].join('\\n'),\n )\n\nconst parseDotPath = (path: string): DotPathParseResult => {\n if (typeof path !== 'string' || path.length === 0) {\n return { ok: false, error: makeDotPathError(String(path), 'dot-path must be a non-empty string') }\n }\n\n const raw = path.split('.')\n if (raw.length === 0) {\n return { ok: false, error: makeDotPathError(path, 'dot-path must contain at least one segment') }\n }\n\n const segments: DotPathSegment[] = []\n for (let i = 0; i < raw.length; i++) {\n const seg = raw[i]!\n if (seg.length === 0) {\n return {\n ok: false,\n error: makeDotPathError(\n path,\n `Invalid dot-path: empty segment at index ${i}.`,\n [\n \"Expected dot-path syntax: segments separated by '.', numeric segments represent array indices.\",\n `path: ${path}`,\n '',\n 'examples:',\n '- count',\n '- user.name',\n '- items.0.id',\n '',\n 'fix:',\n '- Remove consecutive dots or trailing dots.',\n ].join('\\n'),\n ),\n }\n }\n\n if (/^[0-9]+$/.test(seg)) {\n const n = Number(seg)\n if (!Number.isFinite(n) || n < 0) {\n return {\n ok: false,\n error: makeDotPathError(path, `Invalid array index segment \"${seg}\" at index ${i}.`),\n }\n }\n segments.push(Math.floor(n))\n continue\n }\n\n segments.push(seg)\n }\n\n return { ok: true, segments }\n}\n\nconst resolveAstForPath = (\n ast: SchemaAST.AST,\n segments: ReadonlyArray<DotPathSegment>,\n seen: Set<SchemaAST.AST>,\n): SchemaAST.AST | undefined => {\n if (segments.length === 0) return ast\n\n let current = ast\n while (true) {\n if (SchemaAST.isSuspend(current)) {\n if (seen.has(current)) return undefined\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 if (SchemaAST.isTransformation(current)) {\n const from = resolveAstForPath(current.from, segments, seen)\n if (from) return from\n return resolveAstForPath(current.to, segments, seen)\n }\n\n if (SchemaAST.isUnion(current)) {\n for (const node of current.types) {\n const resolved = resolveAstForPath(node, segments, seen)\n if (resolved) return resolved\n }\n return undefined\n }\n\n if (SchemaAST.isTupleType(current)) {\n const [head, ...tail] = segments\n if (typeof head !== 'number') return undefined\n const element =\n head < current.elements.length ? current.elements[head] : current.rest.length > 0 ? current.rest[0] : undefined\n return element ? resolveAstForPath(element.type, tail, seen) : undefined\n }\n\n if (SchemaAST.isTypeLiteral(current)) {\n const [head, ...tail] = segments\n if (head === undefined) return undefined\n\n if (typeof head === 'string') {\n for (const ps of current.propertySignatures) {\n if (String(ps.name) !== head) continue\n return resolveAstForPath(ps.type, tail, seen)\n }\n }\n\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 const acceptsString = tag === 'StringKeyword' || tag === 'TemplateLiteral'\n const acceptsNumber = tag === 'NumberKeyword'\n if (typeof head === 'string' && acceptsString) {\n return resolveAstForPath(sig.type, tail, seen)\n }\n if (typeof head === 'number' && acceptsNumber) {\n return resolveAstForPath(sig.type, tail, seen)\n }\n }\n }\n\n const tag = (current as any)?._tag\n if (tag === 'AnyKeyword' || tag === 'UnknownKeyword' || tag === 'ObjectKeyword' || tag === 'Declaration') {\n return current\n }\n\n return undefined\n}\n\nconst selectBySegments =\n (segments: ReadonlyArray<DotPathSegment>) =>\n (state: unknown): unknown => {\n let current: unknown = state\n for (const seg of segments) {\n if (current == null) return undefined\n if (typeof seg === 'number') {\n if (Array.isArray(current)) {\n current = current[seg]\n continue\n }\n if (isRecord(current)) {\n current = current[String(seg)]\n continue\n }\n return undefined\n }\n if (isRecord(current)) {\n current = current[seg]\n continue\n }\n return undefined\n }\n return current\n }\n\nexport const makeSchemaSelector = (path: string, schemaAst?: SchemaAST.AST): DotPathSelectorResult => {\n const parsed = parseDotPath(path)\n if (!parsed.ok) return { ok: false, error: parsed.error }\n\n if (schemaAst) {\n const resolved = resolveAstForPath(schemaAst, parsed.segments, new Set())\n if (!resolved) {\n return { ok: false, error: makeSchemaMismatchError(path) }\n }\n }\n\n return {\n ok: true,\n selector: selectBySegments(parsed.segments),\n segments: parsed.segments,\n }\n}\n","import type { ProcessErrorPolicy } from './protocol.js'\n\nexport type SupervisionDecision = 'stop' | 'restart'\n\nexport type SupervisionState = {\n readonly failureTimes: ReadonlyArray<number>\n}\n\nexport const initialState = (): SupervisionState => ({ failureTimes: [] })\n\nexport type FailureDecision = {\n readonly decision: SupervisionDecision\n readonly nextState: SupervisionState\n readonly withinWindowFailures: number\n readonly maxRestarts: number\n readonly windowMs?: number\n}\n\nexport const onFailure = (policy: ProcessErrorPolicy, state: SupervisionState, nowMs: number): FailureDecision => {\n if (policy.mode === 'failStop') {\n return {\n decision: 'stop',\n nextState: state,\n withinWindowFailures: state.failureTimes.length,\n maxRestarts: 0,\n windowMs: policy.windowMs,\n }\n }\n\n const maxRestartsRaw = policy.maxRestarts\n const maxRestarts =\n typeof maxRestartsRaw === 'number' && Number.isFinite(maxRestartsRaw) && maxRestartsRaw >= 0\n ? Math.floor(maxRestartsRaw)\n : 0\n\n if (maxRestarts <= 0) {\n return {\n decision: 'stop',\n nextState: state,\n withinWindowFailures: state.failureTimes.length,\n maxRestarts,\n windowMs: policy.windowMs,\n }\n }\n\n const windowMsRaw = policy.windowMs\n const windowMs =\n typeof windowMsRaw === 'number' && Number.isFinite(windowMsRaw) && windowMsRaw > 0\n ? Math.floor(windowMsRaw)\n : undefined\n\n const failureTimesRaw = [...state.failureTimes, nowMs]\n const failureTimes = windowMs ? failureTimesRaw.filter((t) => t >= nowMs - windowMs) : failureTimesRaw\n\n // Keep at most maxRestarts+1 timestamps to avoid unbounded growth.\n const cap = maxRestarts + 1\n const capped = failureTimes.length > cap ? failureTimes.slice(failureTimes.length - cap) : failureTimes\n\n const withinWindowFailures = capped.length\n const decision: SupervisionDecision = withinWindowFailures <= maxRestarts ? 'restart' : 'stop'\n\n return {\n decision,\n nextState: { failureTimes: capped },\n withinWindowFailures,\n maxRestarts,\n windowMs,\n }\n}\n","import { fnv1a32, stableStringify } from '../../digest.js'\nimport type * as DebugSink from './DebugSink.js'\n\nexport type ReadLane = 'static' | 'dynamic'\n\nexport type ReadProducer = 'aot' | 'jit' | 'manual' | 'dynamic'\n\nexport type ReadQueryFallbackReason = 'missingDeps' | 'unsupportedSyntax' | 'unstableSelectorId'\n\nexport type EqualsKind = 'objectIs' | 'shallowStruct' | 'custom'\n\nexport interface ReadsDigest {\n readonly count: number\n readonly hash: number\n}\n\nexport interface ReadQueryStaticIr {\n readonly selectorId: string\n readonly debugKey?: string\n readonly lane: ReadLane\n readonly producer: ReadProducer\n readonly reads?: ReadonlyArray<string | number>\n readonly readsDigest?: ReadsDigest\n readonly fallbackReason?: ReadQueryFallbackReason\n readonly equalsKind: EqualsKind\n}\n\nexport interface ReadQuery<S, V> {\n readonly selectorId: string\n readonly debugKey?: string\n readonly reads: ReadonlyArray<string | number>\n readonly select: (state: S) => V\n readonly equalsKind: EqualsKind\n readonly equals?: (previous: V, next: V) => boolean\n}\n\nexport interface ReadQueryCompiled<S, V> extends ReadQuery<S, V> {\n readonly lane: ReadLane\n readonly producer: ReadProducer\n readonly readsDigest?: ReadsDigest\n readonly fallbackReason?: ReadQueryFallbackReason\n readonly staticIr: ReadQueryStaticIr\n}\n\nexport type ReadQueryInput<S, V> = ((state: S) => V) | ReadQuery<S, V>\n\nexport function isReadQuery<S, V>(input: ReadQueryInput<S, V>): input is ReadQuery<S, V>\nexport function isReadQuery(input: unknown): input is ReadQuery<any, any>\nexport function isReadQuery(input: unknown): input is ReadQuery<any, any> {\n if (!input || (typeof input !== 'object' && typeof input !== 'function')) return false\n const maybe = input as any\n return typeof maybe.selectorId === 'string' && typeof maybe.select === 'function' && Array.isArray(maybe.reads)\n}\n\nconst normalizeReads = (reads: ReadonlyArray<string | number>): ReadonlyArray<string | number> => {\n const unique: Array<string | number> = []\n const seen = new Set<string>()\n for (const r of reads) {\n const key = typeof r === 'number' ? `n:${r}` : `s:${r}`\n if (seen.has(key)) continue\n seen.add(key)\n unique.push(r)\n }\n return unique.slice().sort((a, b) => String(a).localeCompare(String(b)))\n}\n\nconst toHash32Number = (hex: string): number => Number.parseInt(hex, 16)\n\nconst makeReadsDigest = (reads: ReadonlyArray<string | number>): ReadsDigest => {\n const normalized = normalizeReads(reads)\n return {\n count: normalized.length,\n hash: toHash32Number(fnv1a32(stableStringify(normalized))),\n }\n}\n\nconst computeSelectorId = (value: unknown): string => `rq_${fnv1a32(stableStringify(value))}`\n\nlet nextUnstableSelectorSeq = 0\nconst unstableSelectorIdByFn = new WeakMap<Function, string>()\n\nconst computeUnstableSelectorId = (selector: Function): string => {\n const existing = unstableSelectorIdByFn.get(selector)\n if (existing) return existing\n nextUnstableSelectorSeq += 1\n const selectorId = `rq_u${nextUnstableSelectorSeq}`\n unstableSelectorIdByFn.set(selector, selectorId)\n return selectorId\n}\n\nconst unwrapParens = (input: string): string => {\n const trimmed = input.trim()\n if (trimmed.startsWith('(') && trimmed.endsWith(')')) {\n const inner = trimmed.slice(1, -1).trim()\n // Only unwrap the outermost pair of parentheses to avoid accidentally breaking syntax.\n if (!inner.startsWith('(') || !inner.endsWith(')')) {\n return inner\n }\n }\n return trimmed\n}\n\nconst extractArrow = (source: string): { readonly param: string; readonly body: string } | undefined => {\n const idx = source.indexOf('=>')\n if (idx < 0) return undefined\n const left = source.slice(0, idx).trim()\n const right = source.slice(idx + 2).trim()\n\n const paramRaw = unwrapParens(left)\n if (!/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(paramRaw)) return undefined\n\n // block body: { return expr }\n if (right.startsWith('{')) {\n const m = right.match(/^\\{\\s*return\\s+(.+?);?\\s*\\}\\s*$/s)\n if (!m) return undefined\n return { param: paramRaw, body: m[1]?.trim() ?? '' }\n }\n\n return { param: paramRaw, body: right }\n}\n\nconst extractFunctionReturn = (source: string): { readonly param: string; readonly body: string } | undefined => {\n const trimmed = source.trim()\n const m = trimmed.match(\n /^function\\s*(?:[A-Za-z_$][A-Za-z0-9_$]*\\s*)?\\(\\s*([A-Za-z_$][A-Za-z0-9_$]*)\\s*\\)\\s*\\{\\s*return\\s+(.+?);?\\s*\\}\\s*$/s,\n )\n if (!m) return undefined\n\n const param = m[1]?.trim() ?? ''\n if (!/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(param)) return undefined\n\n const body = m[2]?.trim() ?? ''\n if (body.length === 0) return undefined\n\n return { param, body }\n}\n\ntype ParsedSelector =\n | { readonly kind: 'path'; readonly path: string }\n | { readonly kind: 'struct'; readonly entries: ReadonlyArray<readonly [string, string]> }\n\nconst tryParseSelectorSource = (source: string): ParsedSelector | undefined => {\n const arrowOrFn = extractArrow(source) ?? extractFunctionReturn(source)\n if (!arrowOrFn) return undefined\n\n const expr = unwrapParens(arrowOrFn.body).trim().replace(/;$/, '').trim()\n\n // path: s.a.b\n {\n const re = new RegExp(`^${arrowOrFn.param}\\\\.([A-Za-z0-9_$]+(?:\\\\.[A-Za-z0-9_$]+)*)$`)\n const m = expr.match(re)\n if (m) {\n return { kind: 'path', path: m[1] }\n }\n }\n\n // struct: ({ a: s.a, b: s.b })\n if (expr.startsWith('{') && expr.endsWith('}')) {\n const inner = expr.slice(1, -1).trim()\n if (inner.length === 0) return { kind: 'struct', entries: [] }\n\n const parts = inner\n .split(',')\n .map((p) => p.trim())\n .filter((p) => p.length > 0)\n\n const entries: Array<readonly [string, string]> = []\n\n for (const part of parts) {\n const idx = part.indexOf(':')\n if (idx < 0) return undefined\n const key = part.slice(0, idx).trim()\n const value = part.slice(idx + 1).trim()\n\n if (!/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(key)) return undefined\n\n const re = new RegExp(`^${arrowOrFn.param}\\\\.([A-Za-z0-9_$]+(?:\\\\.[A-Za-z0-9_$]+)*)$`)\n const m = value.match(re)\n if (!m) return undefined\n entries.push([key, m[1]] as const)\n }\n\n // Sort entries to ensure a stable selectorId.\n entries.sort((a, b) => a[0].localeCompare(b[0]))\n return { kind: 'struct', entries }\n }\n\n return undefined\n}\n\ntype ReadQueryStaticTemplate = {\n readonly selectorId: string\n readonly reads: ReadonlyArray<string | number>\n readonly readsDigest: ReadsDigest\n readonly equalsKind: EqualsKind\n}\n\nconst READ_QUERY_TEMPLATE_CACHE_MAX = 2048\nconst readQueryTemplateByFn = new WeakMap<Function, ReadQueryStaticTemplate>()\nconst readQueryTemplateBySource = new Map<string, ReadQueryStaticTemplate>()\n\nconst lruGet = <K, V>(map: Map<K, V>, key: K): V | undefined => {\n const value = map.get(key)\n if (value === undefined) return undefined\n map.delete(key)\n map.set(key, value)\n return value\n}\n\nconst lruSet = <K, V>(map: Map<K, V>, key: K, value: V, maxSize: number) => {\n if (map.has(key)) map.delete(key)\n map.set(key, value)\n if (map.size <= maxSize) return\n const oldestKey = map.keys().next().value as K | undefined\n if (oldestKey !== undefined) {\n map.delete(oldestKey)\n }\n}\n\nconst safeToString = (fn: Function): string => {\n try {\n return fn.toString()\n } catch {\n return ''\n }\n}\n\nexport const make = <S, V>(spec: ReadQuery<S, V>): ReadQuery<S, V> => spec\n\nexport const compile = <S, V>(input: ReadQueryInput<S, V>): ReadQueryCompiled<S, V> => {\n if (isReadQuery(input)) {\n const reads = normalizeReads(input.reads)\n const readsDigest = reads.length > 0 ? makeReadsDigest(reads) : undefined\n\n const equalsKind = input.equalsKind\n const staticIr: ReadQueryStaticIr = {\n selectorId: input.selectorId,\n debugKey: input.debugKey,\n lane: 'static',\n producer: 'manual',\n reads,\n readsDigest,\n equalsKind,\n }\n\n return {\n ...input,\n reads,\n lane: 'static',\n producer: 'manual',\n readsDigest,\n staticIr,\n }\n }\n\n const selector = input\n const debugKey =\n (typeof (selector as any)?.debugKey === 'string' && (selector as any).debugKey.length > 0\n ? (selector as any).debugKey\n : undefined) ??\n (typeof (selector as any).name === 'string' && (selector as any).name.length > 0\n ? (selector as any).name\n : undefined)\n\n const declaredReads: ReadonlyArray<string> | undefined = Array.isArray((selector as any)?.fieldPaths)\n ? ((selector as any).fieldPaths as ReadonlyArray<unknown>).filter((x): x is string => typeof x === 'string')\n : undefined\n\n if (declaredReads && declaredReads.length > 0) {\n const reads = normalizeReads(declaredReads)\n const readsDigest = makeReadsDigest(reads)\n const selectorId = computeSelectorId({ kind: 'reads', reads })\n\n const staticIr: ReadQueryStaticIr = {\n selectorId,\n debugKey,\n lane: 'static',\n producer: 'jit',\n reads,\n readsDigest,\n equalsKind: 'objectIs',\n }\n\n return {\n selectorId,\n debugKey,\n reads,\n select: selector as any,\n equalsKind: 'objectIs',\n lane: 'static',\n producer: 'jit',\n readsDigest,\n staticIr,\n }\n }\n\n const cachedByFn = readQueryTemplateByFn.get(selector as unknown as Function)\n if (cachedByFn) {\n const staticIr: ReadQueryStaticIr = {\n selectorId: cachedByFn.selectorId,\n debugKey,\n lane: 'static',\n producer: 'jit',\n reads: cachedByFn.reads,\n readsDigest: cachedByFn.readsDigest,\n equalsKind: cachedByFn.equalsKind,\n }\n\n return {\n selectorId: cachedByFn.selectorId,\n debugKey,\n reads: cachedByFn.reads,\n select: selector as any,\n equalsKind: cachedByFn.equalsKind,\n lane: 'static',\n producer: 'jit',\n readsDigest: cachedByFn.readsDigest,\n staticIr,\n }\n }\n\n const srcTrimmed = safeToString(selector as unknown as Function).trim()\n const cachedBySource = srcTrimmed.length > 0 ? lruGet(readQueryTemplateBySource, srcTrimmed) : undefined\n if (cachedBySource) {\n readQueryTemplateByFn.set(selector as unknown as Function, cachedBySource)\n const staticIr: ReadQueryStaticIr = {\n selectorId: cachedBySource.selectorId,\n debugKey,\n lane: 'static',\n producer: 'jit',\n reads: cachedBySource.reads,\n readsDigest: cachedBySource.readsDigest,\n equalsKind: cachedBySource.equalsKind,\n }\n\n return {\n selectorId: cachedBySource.selectorId,\n debugKey,\n reads: cachedBySource.reads,\n select: selector as any,\n equalsKind: cachedBySource.equalsKind,\n lane: 'static',\n producer: 'jit',\n readsDigest: cachedBySource.readsDigest,\n staticIr,\n }\n }\n\n const parsed = srcTrimmed.length > 0 ? tryParseSelectorSource(srcTrimmed) : undefined\n\n if (parsed?.kind === 'path') {\n const reads = [parsed.path]\n const readsDigest = makeReadsDigest(reads)\n const selectorId = computeSelectorId({ kind: 'path', path: parsed.path })\n const template: ReadQueryStaticTemplate = { selectorId, reads, readsDigest, equalsKind: 'objectIs' }\n readQueryTemplateByFn.set(selector as unknown as Function, template)\n lruSet(readQueryTemplateBySource, srcTrimmed, template, READ_QUERY_TEMPLATE_CACHE_MAX)\n\n const staticIr: ReadQueryStaticIr = {\n selectorId,\n debugKey,\n lane: 'static',\n producer: 'jit',\n reads,\n readsDigest,\n equalsKind: 'objectIs',\n }\n\n return {\n selectorId,\n debugKey,\n reads,\n select: selector as any,\n equalsKind: 'objectIs',\n lane: 'static',\n producer: 'jit',\n readsDigest,\n staticIr,\n }\n }\n\n if (parsed?.kind === 'struct') {\n const reads = normalizeReads(parsed.entries.map(([, path]) => path))\n const readsDigest = makeReadsDigest(reads)\n const selectorId = computeSelectorId({ kind: 'struct', entries: parsed.entries })\n const template: ReadQueryStaticTemplate = { selectorId, reads, readsDigest, equalsKind: 'shallowStruct' }\n readQueryTemplateByFn.set(selector as unknown as Function, template)\n lruSet(readQueryTemplateBySource, srcTrimmed, template, READ_QUERY_TEMPLATE_CACHE_MAX)\n\n const staticIr: ReadQueryStaticIr = {\n selectorId,\n debugKey,\n lane: 'static',\n producer: 'jit',\n reads,\n readsDigest,\n equalsKind: 'shallowStruct',\n }\n\n return {\n selectorId,\n debugKey,\n reads,\n select: selector as any,\n equalsKind: 'shallowStruct',\n lane: 'static',\n producer: 'jit',\n readsDigest,\n staticIr,\n }\n }\n\n // Dynamic lane fallback (no stable reads / unsupported subset)\n const baseFallbackReason: ReadQueryFallbackReason =\n srcTrimmed.includes('=>') || srcTrimmed.startsWith('function') ? 'unsupportedSyntax' : 'missingDeps'\n\n const lowDiscriminabilitySource = srcTrimmed.length === 0 || srcTrimmed.includes('[native code]')\n const fallbackReason: ReadQueryFallbackReason =\n !debugKey || lowDiscriminabilitySource ? 'unstableSelectorId' : baseFallbackReason\n\n const selectorId =\n fallbackReason === 'unstableSelectorId'\n ? computeUnstableSelectorId(selector as unknown as Function)\n : computeSelectorId({ kind: 'dynamic', debugKey, src: srcTrimmed })\n const staticIr: ReadQueryStaticIr = {\n selectorId,\n debugKey,\n lane: 'dynamic',\n producer: 'dynamic',\n fallbackReason,\n equalsKind: 'objectIs',\n }\n\n return {\n selectorId,\n debugKey,\n reads: [],\n select: selector as any,\n equalsKind: 'objectIs',\n lane: 'dynamic',\n producer: 'dynamic',\n fallbackReason,\n staticIr,\n }\n}\n\nexport interface ReadQueryStrictGateConfig {\n readonly mode: 'off' | 'warn' | 'error'\n readonly requireStatic?: {\n readonly selectorIds?: ReadonlyArray<string>\n readonly modules?: ReadonlyArray<string>\n }\n readonly denyFallbackReasons?: ReadonlyArray<ReadQueryFallbackReason>\n}\n\nexport interface ReadQueryStrictGateViolationDetails {\n readonly moduleId: string\n readonly instanceId: string\n readonly txnSeq: number\n readonly selectorId: string\n readonly debugKey?: string\n readonly fallbackReason: ReadQueryFallbackReason\n readonly rule: 'denyFallbackReason' | 'requireStatic:global' | 'requireStatic:selectorId' | 'requireStatic:module'\n}\n\nexport interface ReadQueryStrictGateError extends Error {\n readonly _tag: 'ReadQueryStrictGateError'\n readonly details: ReadQueryStrictGateViolationDetails\n}\n\nexport type ReadQueryStrictGateDiagnosticEvent = Extract<DebugSink.Event, { readonly type: 'diagnostic' }>\n\nexport type ReadQueryStrictGateDecision =\n | { readonly verdict: 'PASS' }\n | {\n readonly verdict: 'WARN'\n readonly diagnostic: ReadQueryStrictGateDiagnosticEvent\n readonly details: ReadQueryStrictGateViolationDetails\n }\n | {\n readonly verdict: 'FAIL'\n readonly diagnostic: ReadQueryStrictGateDiagnosticEvent\n readonly error: ReadQueryStrictGateError\n readonly details: ReadQueryStrictGateViolationDetails\n }\n\nconst filterNonEmpty = (values: ReadonlyArray<string> | undefined): ReadonlyArray<string> | undefined => {\n if (!values || values.length === 0) return undefined\n const next = values.map((v) => v.trim()).filter((v) => v.length > 0)\n return next.length > 0 ? next : undefined\n}\n\nconst makeStrictGateDiagnostic = (args: {\n readonly config: ReadQueryStrictGateConfig\n readonly details: ReadQueryStrictGateViolationDetails\n}): ReadQueryStrictGateDiagnosticEvent => {\n const severity = args.config.mode === 'warn' ? ('warning' as const) : ('error' as const)\n\n return {\n type: 'diagnostic',\n moduleId: args.details.moduleId,\n instanceId: args.details.instanceId,\n txnSeq: args.details.txnSeq,\n code: 'read_query::strict_gate',\n severity,\n message: `ReadQuery strict gate violated: selector entered dynamic lane (selectorId=${args.details.selectorId}, reason=${args.details.fallbackReason}).`,\n hint:\n 'Fix: make the selector statically compilable (AOT/JIT) or pass an explicit ReadQuery; ' +\n 'or disable/narrow the gate via RuntimeOptions.readQuery.strictGate.requireStatic / denyFallbackReasons.',\n kind: 'read_query:strict_gate',\n trigger: {\n kind: 'read_query',\n name: 'strict_gate',\n details: args.details,\n },\n }\n}\n\nconst makeStrictGateError = (args: {\n readonly details: ReadQueryStrictGateViolationDetails\n}): ReadQueryStrictGateError =>\n Object.assign(\n new Error(\n `[ReadQueryStrictGateError] selector entered dynamic lane (selectorId=${args.details.selectorId}, reason=${args.details.fallbackReason}).`,\n ),\n {\n _tag: 'ReadQueryStrictGateError' as const,\n details: args.details,\n },\n ) as ReadQueryStrictGateError\n\nexport const evaluateStrictGate = (args: {\n readonly config: ReadQueryStrictGateConfig\n readonly moduleId: string\n readonly instanceId: string\n readonly txnSeq: number\n readonly compiled: ReadQueryCompiled<any, any>\n}): ReadQueryStrictGateDecision => {\n if (args.config.mode === 'off') {\n return { verdict: 'PASS' }\n }\n\n if (args.compiled.lane !== 'dynamic') {\n return { verdict: 'PASS' }\n }\n\n const fallbackReason = (args.compiled.fallbackReason ?? 'missingDeps') as ReadQueryFallbackReason\n\n const denyFallbackReasons = args.config.denyFallbackReasons\n const denied = !!denyFallbackReasons?.includes(fallbackReason)\n\n const selectorIds = filterNonEmpty(args.config.requireStatic?.selectorIds)\n const modules = filterNonEmpty(args.config.requireStatic?.modules)\n const hasCoverageFilter = !!selectorIds || !!modules\n\n const matchedSelectorId = !!selectorIds?.includes(args.compiled.selectorId)\n const matchedModule = !!modules?.includes(args.moduleId)\n const coveredByRequireStatic = !hasCoverageFilter || matchedSelectorId || matchedModule\n\n if (!denied && !coveredByRequireStatic) {\n return { verdict: 'PASS' }\n }\n\n const rule: ReadQueryStrictGateViolationDetails['rule'] = denied\n ? 'denyFallbackReason'\n : !hasCoverageFilter\n ? 'requireStatic:global'\n : matchedSelectorId\n ? 'requireStatic:selectorId'\n : 'requireStatic:module'\n\n const details: ReadQueryStrictGateViolationDetails = {\n moduleId: args.moduleId,\n instanceId: args.instanceId,\n txnSeq: args.txnSeq,\n selectorId: args.compiled.selectorId,\n debugKey: args.compiled.debugKey,\n fallbackReason,\n rule,\n }\n\n const diagnostic = makeStrictGateDiagnostic({ config: args.config, details })\n\n if (args.config.mode === 'warn') {\n return { verdict: 'WARN', diagnostic, details }\n }\n\n const error = makeStrictGateError({ details })\n return { verdict: 'FAIL', diagnostic, error, details }\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 { 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","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","import { Cause, Context, Effect } from 'effect'\nimport * as Debug from './DebugSink.js'\nimport { isDevEnv } from './env.js'\n\nconst phaseDiagnosticsEnabled = (): boolean => isDevEnv()\n\n/**\n * Logic diagnostics:\n * - Currently focuses on initialization noise caused by missing Env services (\"Service not found\").\n *\n * Design intent:\n * - In recommended usage, Runtime / React layers provide Env correctly.\n * - In some startup timing windows, Logic may try to read services before Env is fully provided.\n * - Such errors often occur once, do not change final semantics, but pollute logs.\n *\n * Therefore we emit a warning diagnostic via Debug, explaining likely causes and investigation paths.\n * The real error semantics are still handled by lifecycle.onError / AppRuntime.onError.\n */\n\nconst SERVICE_NOT_FOUND_PREFIX = 'Service not found:'\n\n/**\n * If the Cause contains a `Service not found: ...` error, emit a warning diagnostic:\n * - code: logic::env_service_not_found\n * - message: the original error message\n * - hint: explains this is known startup timing noise and suggests what to check\n */\nexport const emitEnvServiceNotFoundDiagnosticIfNeeded = (\n cause: Cause.Cause<unknown>,\n moduleId?: string,\n): Effect.Effect<void> =>\n Effect.gen(function* () {\n let pretty: string\n try {\n pretty = Cause.pretty(cause, { renderErrorCause: true })\n } catch {\n return\n }\n\n if (!pretty.includes(SERVICE_NOT_FOUND_PREFIX)) {\n return\n }\n\n // 1) Warning diagnostic for the missing Env service itself\n yield* Debug.record({\n type: 'diagnostic',\n moduleId,\n code: 'logic::env_service_not_found',\n severity: 'warning',\n message: pretty,\n hint:\n 'Logic attempted to access an Env service before it was provided. This is a known initialization timing noise in Runtime/React integration. ' +\n \"If it happens once during early startup and everything works afterward, it's likely harmless; \" +\n 'if it persists or correlates with app issues, verify Runtime.make / RuntimeProvider.layer provides the service.',\n })\n\n // 2) In some cases (e.g. accessing Env too early during Logic setup), we also want to surface\n // logic::invalid_phase to suggest moving Env access to the run section.\n //\n // Because we cannot reliably determine the phase at this point, this is only a supplemental signal.\n // The real phase guard is still handled by LogicPhaseError + emitInvalidPhaseDiagnosticIfNeeded.\n yield* Debug.record({\n type: 'diagnostic',\n moduleId,\n code: 'logic::invalid_phase',\n severity: 'error',\n message: '$.use is not allowed before Env is fully ready.',\n hint:\n 'Avoid reading services during setup or before Env is ready; ' +\n 'move Env access to the Logic run section, or wrap init via $.lifecycle.onInitRequired.',\n kind: 'env_service_not_ready',\n })\n })\n\nexport interface LogicPhaseError extends Error {\n readonly _tag: 'LogicPhaseError'\n readonly kind: string\n readonly api?: string\n readonly phase: 'setup' | 'run'\n readonly moduleId?: string\n}\n\nexport interface LogicPhaseService {\n readonly current: 'setup' | 'run'\n}\n\nexport const LogicPhaseServiceTag = Context.GenericTag<LogicPhaseService>('@logixjs/LogicPhaseService')\n\n/**\n * LogicUnitService:\n * - Injected while executing each mounted logic unit (scope = the logic unit's setup/run fiber).\n * - Used for trait provenance and other \"bound to the current logic unit\" information (aligned with 022-module logicUnitId).\n *\n * Constraints:\n * - Read-only (must not mutate runtime state); only a provenance/diagnostics anchor.\n */\nexport interface LogicUnitService {\n readonly logicUnitId: string\n readonly logicUnitIdKind: 'explicit' | 'derived'\n readonly logicUnitLabel: string\n readonly path?: string\n}\n\nexport class LogicUnitServiceTag extends Context.Tag('@logixjs/LogicUnitService')<\n LogicUnitServiceTag,\n LogicUnitService\n>() {}\n\nexport const makeLogicPhaseError = (\n kind: string,\n api: string,\n phase: 'setup' | 'run',\n moduleId?: string,\n): LogicPhaseError =>\n Object.assign(new Error(`[LogicPhaseError] ${api} is not allowed in ${phase} phase (kind=${kind}).`), {\n _tag: 'LogicPhaseError',\n kind,\n api,\n phase,\n moduleId,\n }) as LogicPhaseError\n\n/**\n * Extracts LogicPhaseError from a Cause and emits it as a diagnostic:\n * - code: logic::invalid_phase\n * - kind: concrete violation kind (e.g. use_in_setup)\n */\nexport const emitInvalidPhaseDiagnosticIfNeeded = (\n cause: Cause.Cause<unknown>,\n moduleId?: string,\n): Effect.Effect<void> =>\n Effect.gen(function* () {\n if (!phaseDiagnosticsEnabled()) {\n return\n }\n\n const allErrors = [...Cause.failures(cause), ...Cause.defects(cause)]\n\n for (const err of allErrors) {\n const logicErr = err as any\n if (logicErr && logicErr._tag === 'LogicPhaseError') {\n const phaseErr = logicErr as LogicPhaseError\n const hint =\n phaseErr.kind === 'use_in_setup' || phaseErr.kind === 'lifecycle_in_setup'\n ? 'The setup phase must not read Env/services or run long-lived logic; move the relevant calls to the run phase.'\n : phaseErr.kind === 'lifecycle_in_run'\n ? 'Do not register $.lifecycle.* in the run phase (setup-only). Move lifecycle registrations to the synchronous part of Module.logic builder (before return).'\n : phaseErr.kind === 'traits_in_run' || phaseErr.kind === 'traits_declare_in_run'\n ? 'Traits are frozen after setup; move $.traits.declare to LogicPlan.setup or the setup registration phase of Module.logic builder.'\n : 'Move logic to the run phase; keep setup for registrations only.'\n\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: phaseErr.moduleId ?? moduleId,\n code: 'logic::invalid_phase',\n severity: 'error',\n message: `${phaseErr.api ?? phaseErr.kind} is not allowed in ${phaseErr.phase} phase.`,\n hint,\n kind: phaseErr.kind,\n })\n\n // Return after the first LogicPhaseError match.\n return\n }\n }\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 { Context, Effect } from 'effect'\n\nexport interface Service {\n readonly lifecycle: {\n readonly onSuspend: (eff: Effect.Effect<void, never, any>) => Effect.Effect<void, never, any>\n readonly onResume: (eff: Effect.Effect<void, never, any>) => Effect.Effect<void, never, any>\n readonly onReset?: (eff: Effect.Effect<void, never, any>) => Effect.Effect<void, never, any>\n }\n\n /**\n * Platform signal broadcaster (for host integration and tests): triggers registered lifecycle handlers.\n *\n * Notes:\n * - The default implementation should be a safe no-op.\n * - Failure policy is decided by the platform implementation; the runtime should ensure \"do not terminate the instance by default\".\n */\n readonly emitSuspend: () => Effect.Effect<void, never, any>\n readonly emitResume: () => Effect.Effect<void, never, any>\n readonly emitReset: () => Effect.Effect<void, never, any>\n}\n\nexport const Tag = Context.GenericTag<Service>('@logixjs/Platform')\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","import { Context, Effect, FiberRef, Option, Schema, Stream, SubscriptionRef } from 'effect'\nimport { create } from 'mutative'\nimport type * as Logix from './module.js'\nimport * as Logic from './LogicMiddleware.js'\nimport * as Action from '../../action.js'\nimport * as TaskRunner from './TaskRunner.js'\nimport { mutateWithPatchPaths } from './mutativePatches.js'\nimport * as FlowRuntime from './FlowRuntime.js'\nimport * as MatchBuilder from './MatchBuilder.js'\nimport * as Platform from './Platform.js'\nimport * as Lifecycle from './Lifecycle.js'\nimport * as Debug from './DebugSink.js'\nimport * as LogicDiagnostics from './LogicDiagnostics.js'\nimport { isDevEnv } from './env.js'\nimport { RunSessionTag } from '../../observability/runSession.js'\nimport * as Root from '../../root.js'\nimport type { RuntimeInternals } from './RuntimeInternals.js'\nimport type * as ModuleTraits from './ModuleTraits.js'\nimport { getRuntimeInternals, setBoundInternals } from './runtimeInternalsAccessor.js'\nimport type { AnyModuleShape, ModuleRuntime, StateOf, ActionOf } from './module.js'\n\n// Local IntentBuilder factory; equivalent to the old internal/dsl/LogicBuilder.makeIntentBuilderFactory.\nconst LogicBuilderFactory = <Sh extends AnyModuleShape, R = never>(\n runtime: ModuleRuntime<StateOf<Sh>, ActionOf<Sh>>,\n runtimeInternals: RuntimeInternals,\n) => {\n const flowApi = FlowRuntime.make<Sh, R>(runtime, runtimeInternals)\n\n return <T>(stream: Stream.Stream<T>, triggerName?: string): Logic.IntentBuilder<T, Sh, R> => {\n const runWithStateTransaction: TaskRunner.TaskRunnerRuntime['runWithStateTransaction'] = (origin, body) =>\n runtimeInternals.txn.runWithStateTransaction(origin as any, body)\n\n const taskRunnerRuntime: TaskRunner.TaskRunnerRuntime = {\n moduleId: runtime.moduleId,\n instanceId: runtimeInternals.instanceId,\n runWithStateTransaction,\n resolveConcurrencyPolicy: runtimeInternals.concurrency.resolveConcurrencyPolicy,\n }\n\n const builder = {\n debounce: (ms: number) =>\n LogicBuilderFactory<Sh, R>(runtime, runtimeInternals)(flowApi.debounce<T>(ms)(stream), triggerName),\n throttle: (ms: number) =>\n LogicBuilderFactory<Sh, R>(runtime, runtimeInternals)(flowApi.throttle<T>(ms)(stream), triggerName),\n filter: (predicate: (value: T) => boolean) =>\n LogicBuilderFactory<Sh, R>(runtime, runtimeInternals)(flowApi.filter(predicate)(stream), triggerName),\n map: <U>(f: (value: T) => U) =>\n LogicBuilderFactory<Sh, R>(runtime, runtimeInternals)(stream.pipe(Stream.map(f)), triggerName),\n run<A = void, E = never, R2 = unknown>(\n eff: Logic.Of<Sh, R & R2, A, E> | ((p: T) => Logic.Of<Sh, R & R2, A, E>),\n options?: Logic.OperationOptions,\n ): Logic.Of<Sh, R & R2, void, E> {\n return flowApi.run<T, A, E, R2>(eff, options)(stream)\n },\n runLatest<A = void, E = never, R2 = unknown>(\n eff: Logic.Of<Sh, R & R2, A, E> | ((p: T) => Logic.Of<Sh, R & R2, A, E>),\n options?: Logic.OperationOptions,\n ): Logic.Of<Sh, R & R2, void, E> {\n return flowApi.runLatest<T, A, E, R2>(eff, options)(stream)\n },\n runExhaust<A = void, E = never, R2 = unknown>(\n eff: Logic.Of<Sh, R & R2, A, E> | ((p: T) => Logic.Of<Sh, R & R2, A, E>),\n options?: Logic.OperationOptions,\n ): Logic.Of<Sh, R & R2, void, E> {\n return flowApi.runExhaust<T, A, E, R2>(eff, options)(stream)\n },\n runParallel<A = void, E = never, R2 = unknown>(\n eff: Logic.Of<Sh, R & R2, A, E> | ((p: T) => Logic.Of<Sh, R & R2, A, E>),\n options?: Logic.OperationOptions,\n ): Logic.Of<Sh, R & R2, void, E> {\n return flowApi.runParallel<T, A, E, R2>(eff, options)(stream)\n },\n runFork: <A = void, E = never, R2 = unknown>(\n eff: Logic.Of<Sh, R & R2, A, E> | ((p: T) => Logic.Of<Sh, R & R2, A, E>),\n ): Logic.Of<Sh, R & R2, void, E> =>\n Effect.forkScoped(flowApi.run<T, A, E, R2>(eff)(stream)).pipe(Effect.asVoid) as Logic.Of<Sh, R & R2, void, E>,\n runParallelFork: <A = void, E = never, R2 = unknown>(\n eff: Logic.Of<Sh, R & R2, A, E> | ((p: T) => Logic.Of<Sh, R & R2, A, E>),\n ): Logic.Of<Sh, R & R2, void, E> =>\n Effect.forkScoped(flowApi.runParallel<T, A, E, R2>(eff)(stream)).pipe(Effect.asVoid) as Logic.Of<\n Sh,\n R & R2,\n void,\n E\n >,\n runTask: <A = void, E = never, R2 = unknown>(\n config: TaskRunner.TaskRunnerConfig<T, Sh, R & R2, A, E>,\n ): Logic.Of<Sh, R & R2, void, never> =>\n TaskRunner.makeTaskRunner<T, Sh, R & R2, A, E>(stream, 'task', taskRunnerRuntime, {\n ...config,\n triggerName: config.triggerName ?? triggerName,\n }) as Logic.Of<Sh, R & R2, void, never>,\n runParallelTask: <A = void, E = never, R2 = unknown>(\n config: TaskRunner.TaskRunnerConfig<T, Sh, R & R2, A, E>,\n ): Logic.Of<Sh, R & R2, void, never> =>\n TaskRunner.makeTaskRunner<T, Sh, R & R2, A, E>(stream, 'parallel', taskRunnerRuntime, {\n ...config,\n triggerName: config.triggerName ?? triggerName,\n }) as Logic.Of<Sh, R & R2, void, never>,\n runLatestTask: <A = void, E = never, R2 = unknown>(\n config: TaskRunner.TaskRunnerConfig<T, Sh, R & R2, A, E>,\n ): Logic.Of<Sh, R & R2, void, never> =>\n TaskRunner.makeTaskRunner<T, Sh, R & R2, A, E>(stream, 'latest', taskRunnerRuntime, {\n ...config,\n triggerName: config.triggerName ?? triggerName,\n }) as Logic.Of<Sh, R & R2, void, never>,\n runExhaustTask: <A = void, E = never, R2 = unknown>(\n config: TaskRunner.TaskRunnerConfig<T, Sh, R & R2, A, E>,\n ): Logic.Of<Sh, R & R2, void, never> =>\n TaskRunner.makeTaskRunner<T, Sh, R & R2, A, E>(stream, 'exhaust', taskRunnerRuntime, {\n ...config,\n triggerName: config.triggerName ?? triggerName,\n }) as Logic.Of<Sh, R & R2, void, never>,\n toStream: () => stream,\n update: (\n reducer: (prev: StateOf<Sh>, payload: T) => StateOf<Sh> | Effect.Effect<StateOf<Sh>, any, any>,\n ): Logic.Of<Sh, R, void, never> =>\n Stream.runForEach(stream, (payload) =>\n taskRunnerRuntime.runWithStateTransaction(\n {\n kind: 'watcher:update',\n name: triggerName,\n },\n () =>\n Effect.gen(function* () {\n const prev = (yield* runtime.getState) as StateOf<Sh>\n const next = reducer(prev, payload)\n if (Effect.isEffect(next)) {\n const exit = yield* Effect.exit(next as Effect.Effect<StateOf<Sh>, any, any>)\n if (exit._tag === 'Failure') {\n yield* Effect.logError('Flow error', exit.cause)\n return\n }\n yield* runtime.setState(exit.value as StateOf<Sh>)\n return\n }\n yield* runtime.setState(next as StateOf<Sh>)\n }),\n ),\n ).pipe(Effect.catchAllCause((cause) => Effect.logError('Flow error', cause))) as Logic.Of<Sh, R, void, never>,\n mutate: (reducer: (draft: Logic.Draft<StateOf<Sh>>, payload: T) => void): Logic.Of<Sh, R, void, never> =>\n Stream.runForEach(stream, (payload) =>\n taskRunnerRuntime.runWithStateTransaction(\n {\n kind: 'watcher:mutate',\n name: triggerName,\n },\n () =>\n Effect.gen(function* () {\n const prev = (yield* runtime.getState) as StateOf<Sh>\n const recordPatch = runtimeInternals.txn.recordStatePatch\n const updateDraft = runtimeInternals.txn.updateDraft\n\n const { nextState, patchPaths } = mutateWithPatchPaths(prev as StateOf<Sh>, (draft) => {\n reducer(draft as Logic.Draft<StateOf<Sh>>, payload)\n })\n\n for (const path of patchPaths) {\n recordPatch(path, 'unknown')\n }\n\n updateDraft(nextState)\n }),\n ),\n ).pipe(Effect.catchAllCause((cause) => Effect.logError('Flow error', cause))) as Logic.Of<Sh, R, void, never>,\n } as Omit<Logic.IntentBuilder<T, Sh, R>, 'pipe'>\n\n const pipe: Logic.IntentBuilder<T, Sh, R>['pipe'] = function (this: unknown) {\n // eslint-disable-next-line prefer-rest-params\n const fns = arguments as unknown as ReadonlyArray<\n (self: Logic.IntentBuilder<T, Sh, R>) => Logic.IntentBuilder<T, Sh, R>\n >\n let acc: Logic.IntentBuilder<T, Sh, R> = builder as Logic.IntentBuilder<T, Sh, R>\n for (let i = 0; i < fns.length; i++) {\n acc = fns[i](acc)\n }\n return acc\n }\n\n return Object.assign(builder, { pipe }) as Logic.IntentBuilder<T, Sh, R>\n }\n}\nimport type { BoundApi } from './module.js'\n\n/**\n * BoundApi implementation: creates a pre-bound `$` for a given Store shape + runtime.\n *\n * Note: public types and entrypoint signatures live in api/BoundApi.ts; this file only hosts the implementation.\n */\nexport function make<Sh extends Logix.AnyModuleShape, R = never>(\n shape: Sh,\n runtime: Logix.ModuleRuntime<Logix.StateOf<Sh>, Logix.ActionOf<Sh>>,\n options?: {\n readonly getPhase?: () => 'setup' | 'run'\n readonly phaseService?: LogicDiagnostics.LogicPhaseService\n readonly moduleId?: string\n readonly logicUnit?: LogicDiagnostics.LogicUnitService\n },\n): BoundApi<Sh, R> {\n const runtimeInternals = getRuntimeInternals(runtime as any)\n\n const getPhase = options?.getPhase ?? (() => 'run')\n const getCurrentPhase = (): 'setup' | 'run' => {\n const phaseService = options?.phaseService\n const phase = phaseService?.current ?? getPhase()\n return phase === 'setup' ? 'setup' : 'run'\n }\n const guardRunOnly = (kind: string, api: string) => {\n const phaseService = options?.phaseService\n const phase = phaseService?.current ?? getPhase()\n if (phase === 'setup') {\n throw LogicDiagnostics.makeLogicPhaseError(kind, api, 'setup', options?.moduleId)\n }\n }\n const flowApi = FlowRuntime.make<Sh, R>(runtime, runtimeInternals)\n\n const makeIntentBuilder = (runtime_: Logix.ModuleRuntime<any, any>) =>\n LogicBuilderFactory<Sh, R>(runtime_, runtimeInternals)\n const withLifecycle = <A>(\n available: (manager: Lifecycle.LifecycleManager) => Effect.Effect<A, never, any>,\n missing: () => Effect.Effect<A, never, any>,\n ) =>\n Effect.serviceOption(Lifecycle.LifecycleContext).pipe(\n Effect.flatMap((maybe) =>\n Option.match(maybe, {\n onSome: available,\n onNone: missing,\n }),\n ),\n )\n const withPlatform = (invoke: (platform: Platform.Service) => Effect.Effect<void, never, any>) =>\n Effect.serviceOption(Platform.Tag).pipe(\n Effect.flatMap((maybe) =>\n Option.match(maybe, {\n onSome: invoke,\n onNone: () => Effect.void,\n }),\n ),\n )\n\n const emitSetupOnlyViolation = (api: string): Effect.Effect<void> =>\n Debug.record({\n type: 'diagnostic',\n moduleId: runtime.moduleId,\n instanceId: runtime.instanceId,\n code: 'logic::invalid_phase',\n severity: 'error',\n message: `${api} is setup-only and is not allowed in run phase.`,\n hint:\n 'Move $.lifecycle.* calls to the synchronous part of Module.logic builder (before return) for registration; ' +\n 'for dynamic resource cleanup in the run phase, use Effect.acquireRelease / Scope finalizer instead of registering onDestroy late.',\n kind: 'lifecycle_in_run',\n })\n\n const createIntentBuilder = <T>(stream: Stream.Stream<T>, triggerName?: string) =>\n makeIntentBuilder(runtime)(stream, triggerName)\n\n const onceInRunSession = (key: string): Effect.Effect<boolean, never, any> =>\n Effect.serviceOption(RunSessionTag).pipe(\n Effect.map((maybe) => (Option.isSome(maybe) ? maybe.value.local.once(key) : true)),\n )\n\n let cachedDiagnosticsLevel: Debug.DiagnosticsLevel | undefined\n\n const isModuleLike = (\n value: unknown,\n ): value is {\n readonly _kind: 'ModuleDef' | 'Module'\n readonly id: string\n readonly tag: Context.Tag<any, Logix.ModuleRuntime<any, any>>\n readonly schemas?: Record<string, unknown>\n readonly meta?: Record<string, unknown>\n readonly dev?: { readonly source?: { readonly file: string; readonly line: number; readonly column: number } }\n } =>\n Boolean(\n value &&\n typeof value === 'object' &&\n ((value as any)._kind === 'ModuleDef' || (value as any)._kind === 'Module') &&\n 'tag' in (value as object) &&\n Context.isTag((value as any).tag),\n )\n\n const buildModuleHandle = (\n tag: Context.Tag<any, Logix.ModuleRuntime<any, any>>,\n rt: Logix.ModuleRuntime<any, any>,\n ): unknown => {\n const actionsProxy: Logix.ModuleHandle<any>['actions'] = new Proxy(\n {},\n {\n get: (_target, prop) => (payload: unknown) =>\n rt.dispatch({\n _tag: prop as string,\n payload,\n }),\n },\n ) as Logix.ModuleHandle<any>['actions']\n\n const handle: Logix.ModuleHandle<any> = {\n read: (selector) => Effect.map(rt.getState, selector),\n changes: rt.changes,\n dispatch: rt.dispatch,\n actions$: rt.actions$,\n actions: actionsProxy,\n }\n\n const EXTEND_HANDLE = Symbol.for('logix.module.handle.extend')\n const extend = (tag as any)?.[EXTEND_HANDLE] as\n | ((runtime: Logix.ModuleRuntime<any, any>, base: Logix.ModuleHandle<any>) => unknown)\n | undefined\n\n return typeof extend === 'function' ? (extend(rt, handle) ?? handle) : handle\n }\n\n const emitModuleDescriptorOnce = (\n module: {\n readonly id: string\n readonly tag: any\n readonly schemas?: Record<string, unknown>\n readonly meta?: Record<string, unknown>\n readonly dev?: { readonly source?: { readonly file: string; readonly line: number; readonly column: number } }\n },\n rt: Logix.ModuleRuntime<any, any>,\n ): Effect.Effect<void, never, any> =>\n Effect.gen(function* () {\n // Hot-path guard: never emit events when diagnostics are off.\n if (cachedDiagnosticsLevel === 'off') return\n\n const key = `module_descriptor:${String(rt.instanceId ?? 'unknown')}`\n const shouldEmit = yield* onceInRunSession(key)\n if (!shouldEmit) return\n\n const actionKeys = Object.keys((module.tag as any)?.shape?.actionMap ?? {})\n\n const internalSymbol = Symbol.for('logix.module.internal')\n const internal = (module as any)[internalSymbol] as { readonly mounted?: ReadonlyArray<any> } | undefined\n\n const logicUnits = (internal?.mounted ?? []).map((u: any) => ({\n kind: String(u?.kind ?? 'user'),\n id: String(u?.id ?? ''),\n derived: u?.derived ? true : undefined,\n name: typeof u?.name === 'string' ? u.name : undefined,\n }))\n\n const schemaKeys = module.schemas && typeof module.schemas === 'object' ? Object.keys(module.schemas) : undefined\n\n const meta = module.meta && typeof module.meta === 'object' ? module.meta : undefined\n\n const source = module.dev?.source\n\n const traitsSnapshot = runtimeInternals.traits.getModuleTraitsSnapshot()\n const traits = traitsSnapshot\n ? {\n digest: traitsSnapshot.digest,\n count: traitsSnapshot.traits.length,\n }\n : undefined\n\n const data = {\n id: module.id,\n moduleId: String(rt.moduleId),\n instanceId: String(rt.instanceId),\n actionKeys,\n logicUnits,\n schemaKeys,\n meta,\n source,\n traits,\n }\n\n yield* Debug.record({\n type: 'trace:module:descriptor',\n moduleId: rt.moduleId,\n instanceId: rt.instanceId,\n data,\n } as any)\n })\n\n /**\n * strict: resolve a Module runtime only from the current Effect environment.\n *\n * Notes:\n * - With multiple roots / instances, any process-wide registry cannot express the correct semantics.\n * - A missing provider is a wiring error: fail deterministically and provide actionable hints (more details in dev/test).\n */\n const resolveModuleRuntime = (\n tag: Context.Tag<any, Logix.ModuleRuntime<any, any>>,\n ): Effect.Effect<Logix.ModuleRuntime<any, any>, never, any> =>\n Effect.gen(function* () {\n const requestedModuleId = typeof (tag as any)?.id === 'string' ? ((tag as any).id as string) : undefined\n const fromModuleId = typeof options?.moduleId === 'string' ? options.moduleId : runtime.moduleId\n\n // self: always allow resolving the current ModuleRuntime (both Bound.make and runtime injection paths).\n if (requestedModuleId && requestedModuleId === runtime.moduleId) {\n return runtime as unknown as Logix.ModuleRuntime<any, any>\n }\n\n const fromImports = runtimeInternals.imports.get(tag as unknown as Context.Tag<any, any>)\n if (fromImports) {\n return fromImports as unknown as Logix.ModuleRuntime<any, any>\n }\n\n // Bound.make (no moduleId context): allow resolving from the current Effect env (useful for tests/scaffolding).\n if (typeof options?.moduleId !== 'string') {\n const fromEnv = yield* Effect.serviceOption(tag as any)\n if (Option.isSome(fromEnv)) {\n return fromEnv.value as unknown as Logix.ModuleRuntime<any, any>\n }\n }\n\n // 2) Not found: die immediately — this is a wiring error; guide the caller to fix the composition.\n const tokenId = requestedModuleId ?? '<unknown module id>'\n const fix: string[] = isDevEnv()\n ? [\n '- Provide the child implementation in the same scope (imports).',\n ` Example: ${fromModuleId ?? 'ParentModule'}.implement({ imports: [${requestedModuleId ?? 'ChildModule'}.impl], ... })`,\n '- If you intentionally want a root singleton, provide it at app root (Runtime.make(...,{ layer }) / root imports),',\n ' and use Root.resolve(ModuleTag) (instead of $.use) at the callsite.',\n ]\n : []\n\n const err = new Error(\n isDevEnv()\n ? [\n '[MissingModuleRuntimeError] Cannot resolve ModuleRuntime for ModuleTag.',\n '',\n `tokenId: ${tokenId}`,\n 'entrypoint: logic.$.use',\n 'mode: strict',\n `from: ${fromModuleId ?? '<unknown module id>'}`,\n `startScope: moduleId=${fromModuleId ?? '<unknown>'}, instanceId=${String(runtime.instanceId ?? '<unknown>')}`,\n '',\n 'fix:',\n ...fix,\n ].join('\\n')\n : '[MissingModuleRuntimeError] module runtime not found',\n )\n\n ;(err as any).tokenId = tokenId\n ;(err as any).entrypoint = 'logic.$.use'\n ;(err as any).mode = 'strict'\n ;(err as any).from = fromModuleId\n ;(err as any).startScope = {\n moduleId: fromModuleId,\n instanceId: String(runtime.instanceId ?? '<unknown>'),\n }\n ;(err as any).fix = fix\n\n err.name = 'MissingModuleRuntimeError'\n return yield* Effect.die(err)\n })\n\n const stateApi: BoundApi<Sh, R>['state'] = {\n read: runtime.getState,\n update: (f) =>\n Effect.gen(function* () {\n const inTxn = yield* FiberRef.get(TaskRunner.inSyncTransactionFiber)\n if (inTxn) {\n const prev = yield* runtime.getState\n return yield* runtime.setState(f(prev))\n }\n\n const body = () => Effect.flatMap(runtime.getState, (prev) => runtime.setState(f(prev)))\n\n return yield* runtimeInternals\n ? runtimeInternals.txn.runWithStateTransaction({ kind: 'state', name: 'update' } as any, body)\n : body()\n }),\n mutate: (f) =>\n Effect.gen(function* () {\n const recordPatch = runtimeInternals?.txn.recordStatePatch\n const updateDraft = runtimeInternals?.txn.updateDraft\n\n const inTxn = yield* FiberRef.get(TaskRunner.inSyncTransactionFiber)\n if (inTxn) {\n const prev = yield* runtime.getState\n const { nextState, patchPaths } = mutateWithPatchPaths(prev as Logix.StateOf<Sh>, (draft) => {\n f(draft as Logic.Draft<Logix.StateOf<Sh>>)\n })\n\n for (const path of patchPaths) {\n recordPatch?.(path, 'unknown')\n }\n\n updateDraft?.(nextState)\n return\n }\n\n const body = () =>\n Effect.gen(function* () {\n const prev = yield* runtime.getState\n const { nextState, patchPaths } = mutateWithPatchPaths(prev as Logix.StateOf<Sh>, (draft) => {\n f(draft as Logic.Draft<Logix.StateOf<Sh>>)\n })\n\n for (const path of patchPaths) {\n recordPatch?.(path, 'unknown')\n }\n\n updateDraft?.(nextState)\n })\n\n return yield* runtimeInternals\n ? runtimeInternals.txn.runWithStateTransaction({ kind: 'state', name: 'mutate' } as any, body)\n : body()\n }),\n ref: runtime.ref,\n }\n\n const actions = shape.actionMap as BoundApi<Sh, R>['actions']\n\n const dispatcherCache = new Map<string, (...args: any[]) => Effect.Effect<void, any, any>>()\n\n const hasAction = (key: string): boolean => Object.prototype.hasOwnProperty.call(actions as any, key)\n\n const dispatchers: BoundApi<Sh, R>['dispatchers'] = new Proxy({} as any, {\n get: (_target, prop) => {\n if (typeof prop !== 'string') return undefined\n if (!hasAction(prop)) return undefined\n\n const cached = dispatcherCache.get(prop)\n if (cached) return cached\n\n const token = (actions as any)[prop] as Action.AnyActionToken\n const fn = (...args: any[]) => runtime.dispatch((token as any)(...args))\n\n dispatcherCache.set(prop, fn)\n return fn\n },\n has: (_target, prop) => typeof prop === 'string' && hasAction(prop),\n ownKeys: () => Object.keys(actions as any),\n getOwnPropertyDescriptor: (_target, prop) => {\n if (typeof prop !== 'string') return undefined\n if (!hasAction(prop)) return undefined\n return { enumerable: true, configurable: true }\n },\n }) as unknown as BoundApi<Sh, R>['dispatchers']\n\n const dispatch: BoundApi<Sh, R>['dispatch'] = (...args: any[]) => {\n const [first, second] = args\n\n if (typeof first === 'string') {\n return runtime.dispatch({ _tag: first, payload: second } as Logix.ActionOf<Sh>)\n }\n\n if (Action.isActionToken(first)) {\n return runtime.dispatch((first as any)(second))\n }\n\n return runtime.dispatch(first as Logix.ActionOf<Sh>)\n }\n\n const matchApi = <V>(value: V): Logic.FluentMatch<V> => MatchBuilder.makeMatch(value)\n\n const matchTagApi = <V extends { _tag: string }>(value: V): Logic.FluentMatchTag<V> =>\n MatchBuilder.makeMatchTag(value)\n\n // Primary reducer registration: write into the reducer map via the runtime's internal registrar.\n const reducer: BoundApi<Sh, R>['reducer'] = (tag, fn) => {\n return Effect.sync(() => {\n runtimeInternals.txn.registerReducer(String(tag), fn as any)\n }) as any\n }\n\n const effect: BoundApi<Sh, R>['effect'] = (token, handler) =>\n Effect.gen(function* () {\n if (!Action.isActionToken(token)) {\n return yield* Effect.dieMessage('[BoundApi.effect] token must be an ActionToken')\n }\n\n const phase = getCurrentPhase()\n const logicUnit = options?.logicUnit\n\n yield* runtimeInternals.effects.registerEffect({\n actionTag: token.tag,\n handler: handler as any,\n phase,\n ...(logicUnit\n ? {\n logicUnit: {\n logicUnitId: logicUnit.logicUnitId,\n logicUnitLabel: logicUnit.logicUnitLabel,\n path: logicUnit.path,\n },\n }\n : {}),\n })\n }) as any\n\n const api: BoundApi<Sh, R> = {\n root: {\n resolve: (tag: any) => {\n guardRunOnly('root_resolve_in_setup', '$.root.resolve')\n return Root.resolve(tag, {\n entrypoint: 'logic.$.root.resolve',\n waitForReady: true,\n }) as any\n },\n },\n state: stateApi,\n actions,\n dispatchers,\n dispatch,\n flow: flowApi,\n match: matchApi,\n matchTag: matchTagApi,\n lifecycle: {\n onInitRequired: (eff: Logic.Of<Sh, R, void, never>) => {\n if (getCurrentPhase() === 'run') {\n return emitSetupOnlyViolation('$.lifecycle.onInitRequired') as any\n }\n runtimeInternals.lifecycle.registerInitRequired(eff as any)\n return Effect.void as any\n },\n onStart: (eff: Logic.Of<Sh, R, void, never>) => {\n if (getCurrentPhase() === 'run') {\n return emitSetupOnlyViolation('$.lifecycle.onStart') as any\n }\n runtimeInternals.lifecycle.registerStart(eff as any)\n return Effect.void as any\n },\n onInit: (eff: Logic.Of<Sh, R, void, never>) => {\n // Legacy alias: same semantics as onInitRequired (to reduce migration friction).\n if (getCurrentPhase() === 'run') {\n return emitSetupOnlyViolation('$.lifecycle.onInit') as any\n }\n runtimeInternals.lifecycle.registerInitRequired(eff as any)\n return Effect.void as any\n },\n onDestroy: (eff: Logic.Of<Sh, R, void, never>) => {\n if (getCurrentPhase() === 'run') {\n return emitSetupOnlyViolation('$.lifecycle.onDestroy') as any\n }\n runtimeInternals.lifecycle.registerDestroy(eff as any)\n return Effect.void as any\n },\n onError: (\n handler: (\n cause: import('effect').Cause.Cause<unknown>,\n context: Lifecycle.ErrorContext,\n ) => Effect.Effect<void, never, R>,\n ) => {\n if (getCurrentPhase() === 'run') {\n return emitSetupOnlyViolation('$.lifecycle.onError') as any\n }\n runtimeInternals.lifecycle.registerOnError(handler as any)\n return Effect.void as any\n },\n onSuspend: (eff: Logic.Of<Sh, R, void, never>) => {\n if (getCurrentPhase() === 'run') {\n return emitSetupOnlyViolation('$.lifecycle.onSuspend') as any\n }\n runtimeInternals.lifecycle.registerPlatformSuspend(Effect.asVoid(eff as Effect.Effect<void, never, any>))\n return Effect.void as any\n },\n onResume: (eff: Logic.Of<Sh, R, void, never>) => {\n if (getCurrentPhase() === 'run') {\n return emitSetupOnlyViolation('$.lifecycle.onResume') as any\n }\n runtimeInternals.lifecycle.registerPlatformResume(Effect.asVoid(eff as Effect.Effect<void, never, any>))\n return Effect.void as any\n },\n onReset: (eff: Logic.Of<Sh, R, void, never>) => {\n if (getCurrentPhase() === 'run') {\n return emitSetupOnlyViolation('$.lifecycle.onReset') as any\n }\n runtimeInternals.lifecycle.registerPlatformReset(Effect.asVoid(eff as Effect.Effect<void, never, any>))\n return Effect.void as any\n },\n },\n traits: {\n declare: (traits: ModuleTraits.TraitSpec) => {\n if (getCurrentPhase() === 'run') {\n throw LogicDiagnostics.makeLogicPhaseError(\n 'traits_declare_in_run',\n '$.traits.declare',\n 'run',\n options?.moduleId,\n )\n }\n\n if (!traits || typeof traits !== 'object') {\n throw new Error('[InvalidTraitsDeclaration] $.traits.declare expects an object.')\n }\n\n const logicUnit = options?.logicUnit ?? {\n logicUnitId: 'unknown',\n logicUnitIdKind: 'derived' as const,\n logicUnitLabel: 'logicUnit:unknown',\n path: undefined as string | undefined,\n }\n\n runtimeInternals.traits.registerModuleTraitsContribution({\n traits,\n provenance: {\n originType: 'logicUnit',\n originId: logicUnit.logicUnitId,\n originIdKind: logicUnit.logicUnitIdKind,\n originLabel: logicUnit.logicUnitLabel,\n path: logicUnit.path,\n },\n })\n },\n source: {\n refresh: (fieldPath: string, options?: { readonly force?: boolean }) =>\n Effect.gen(function* () {\n const handler = runtimeInternals.traits.getSourceRefreshHandler(fieldPath) as\n | ((state: Logix.StateOf<Sh>) => Effect.Effect<void, never, any>)\n | undefined\n if (!handler) {\n // If no refresh handler is registered, treat it as a no-op to avoid throwing when StateTraitProgram is not installed.\n return yield* Effect.void\n }\n\n const force = options?.force === true\n const runHandler = (state: Logix.StateOf<Sh>) =>\n force ? Effect.locally(TaskRunner.forceSourceRefresh, true)(handler(state)) : handler(state)\n\n // Never call enqueueTransaction inside the transaction window (it can deadlock):\n // - Run the handler inside the current transaction so it writes to the draft via bound.state.mutate.\n // - The outer transaction window is responsible for commit + debug aggregation.\n const inTxn = yield* FiberRef.get(TaskRunner.inSyncTransactionFiber)\n if (inTxn) {\n const state = (yield* runtime.getState) as Logix.StateOf<Sh>\n return yield* runHandler(state)\n }\n\n // Treat one source-refresh as a dedicated transaction entry.\n return yield* runtimeInternals.txn.runWithStateTransaction(\n {\n kind: 'source-refresh',\n name: fieldPath,\n } as any,\n () =>\n Effect.gen(function* () {\n const state = (yield* runtime.getState) as Logix.StateOf<Sh>\n return yield* runHandler(state)\n }),\n )\n }),\n },\n },\n reducer,\n effect,\n use: new Proxy(() => {}, {\n apply: (_target, _thisArg, [arg]) => {\n guardRunOnly('use_in_setup', '$.use')\n if (isModuleLike(arg)) {\n const domain = arg\n const tag = domain.tag as unknown as Context.Tag<any, Logix.ModuleRuntime<any, any>>\n\n const resolveAndBuild = resolveModuleRuntime(tag).pipe(Effect.map((rt) => buildModuleHandle(tag, rt)))\n\n const resolveWithDescriptor = resolveModuleRuntime(tag).pipe(\n Effect.tap((rt) => emitModuleDescriptorOnce(domain, rt)),\n Effect.map((rt) => buildModuleHandle(tag, rt)),\n )\n\n const detectAndSelect = FiberRef.get(Debug.currentDiagnosticsLevel).pipe(\n Effect.tap((level) => {\n cachedDiagnosticsLevel = level\n }),\n Effect.flatMap((level) => (level === 'off' ? resolveAndBuild : resolveWithDescriptor)),\n )\n\n // 022 perf gate: when diagnostics are off, $.use(module) and $.use(module.tag) must be equivalent with zero extra overhead.\n // Constraint: Effect is a value (reusable), so we must one-time cache at execution time instead of branching at construction time.\n return Effect.suspend(() => {\n if (cachedDiagnosticsLevel === 'off') {\n return resolveAndBuild\n }\n\n if (cachedDiagnosticsLevel !== undefined) {\n return resolveWithDescriptor\n }\n\n return detectAndSelect\n }) as unknown as Logic.Of<Sh, R, any, never>\n }\n if (Context.isTag(arg)) {\n const candidate = arg as { _kind?: unknown }\n\n // Module: return a read-only ModuleHandle view.\n if (candidate._kind === 'ModuleTag') {\n return resolveModuleRuntime(arg as any).pipe(\n Effect.map((rt: Logix.ModuleRuntime<any, any>) => buildModuleHandle(arg as any, rt)),\n ) as unknown as Logic.Of<Sh, R, any, never>\n }\n\n // Regular service tag: read the service from Env.\n return arg as unknown as Logic.Of<Sh, R, any, never>\n }\n return Effect.die('BoundApi.use: unsupported argument') as unknown as Logic.Of<Sh, R, any, never>\n },\n }) as unknown as BoundApi<Sh, R>['use'],\n onAction: new Proxy(() => {}, {\n apply: (_target, _thisArg, args) => {\n guardRunOnly('use_in_setup', '$.onAction')\n const arg = args[0]\n if (Action.isActionToken(arg)) {\n const tag = arg.tag\n return createIntentBuilder(\n runtime.actions$.pipe(\n Stream.filter((a: any) => a._tag === tag || a.type === tag),\n Stream.map((a: any) => a.payload),\n ),\n tag,\n )\n }\n if (typeof arg === 'function') {\n return createIntentBuilder(runtime.actions$.pipe(Stream.filter(arg)))\n }\n if (typeof arg === 'string') {\n return createIntentBuilder(\n runtime.actions$.pipe(Stream.filter((a: any) => a._tag === arg || a.type === arg)),\n arg,\n )\n }\n if (typeof arg === 'object' && arg !== null) {\n if ('_tag' in arg) {\n return createIntentBuilder(\n runtime.actions$.pipe(Stream.filter((a: any) => a._tag === (arg as any)._tag)),\n String((arg as any)._tag),\n )\n }\n if (Schema.isSchema(arg)) {\n return createIntentBuilder(\n runtime.actions$.pipe(\n Stream.filter((a: any) => {\n const result = Schema.decodeUnknownSync(arg as Schema.Schema<any, any, never>)(a)\n return !!result\n }),\n ),\n )\n }\n }\n return createIntentBuilder(runtime.actions$)\n },\n get: (_target, prop) => {\n guardRunOnly('use_in_setup', '$.onAction')\n if (typeof prop === 'string') {\n return createIntentBuilder(\n runtime.actions$.pipe(Stream.filter((a: any) => a._tag === prop || a.type === prop)),\n prop,\n )\n }\n return undefined\n },\n }) as unknown as BoundApi<Sh, R>['onAction'],\n onState: (selector: (s: Logix.StateOf<Sh>) => any) => {\n guardRunOnly('use_in_setup', '$.onState')\n return createIntentBuilder(runtime.changes(selector))\n },\n on: (stream: Stream.Stream<any>) => {\n guardRunOnly('use_in_setup', '$.on')\n return createIntentBuilder(stream)\n },\n } as any\n\n setBoundInternals(api as any, runtimeInternals)\n\n return api\n}\n","import { create, type Patches } from 'mutative'\nimport type { FieldPath } from '../../field-path.js'\nimport { isFieldPathSegment } from '../../field-path.js'\n\nexport type PatchPath = FieldPath\n\nexport const mutateWithoutPatches = <S>(base: S, mutator: (draft: S) => void): S => {\n return create(base, mutator as any) as unknown as S\n}\n\nconst toPatchFieldPath = (path: unknown): PatchPath | '*' | undefined => {\n if (typeof path === 'string') {\n const trimmed = path.trim()\n return trimmed.length > 0 ? '*' : undefined\n }\n\n if (!Array.isArray(path)) return undefined\n\n const parts: Array<string> = []\n for (const seg of path) {\n if (typeof seg === 'string') {\n if (isFieldPathSegment(seg)) parts.push(seg)\n continue\n }\n }\n\n if (parts.length === 0) return '*'\n return parts\n}\n\nexport const mutateWithPatchPaths = <S>(\n base: S,\n mutator: (draft: S) => void,\n): { readonly nextState: S; readonly patchPaths: ReadonlyArray<PatchPath | '*'> } => {\n const out = create(base, mutator as any, {\n enablePatches: {\n pathAsArray: true,\n arrayLengthAssignment: false,\n },\n }) as unknown\n\n if (!Array.isArray(out)) {\n return { nextState: out as S, patchPaths: [] }\n }\n\n const nextState = out[0] as S\n const patches = (out[1] ?? []) as Patches<{ pathAsArray: true; arrayLengthAssignment: false }>\n\n const dedup = new Map<string, PatchPath | '*'>()\n for (const patch of patches) {\n const p = toPatchFieldPath((patch as any)?.path)\n if (!p) continue\n const key = p === '*' ? '*' : JSON.stringify(p)\n if (!dedup.has(key)) dedup.set(key, p)\n }\n\n return {\n nextState,\n patchPaths: Array.from(dedup.values()),\n }\n}\n","import { Effect, Stream, Ref, Option } from 'effect'\nimport type { AnyModuleShape, ModuleRuntime, StateOf, ActionOf, ModuleShape } from './module.js'\nimport type * as Logic from './LogicMiddleware.js'\nimport * as EffectOp from '../../effect-op.js'\nimport * as EffectOpCore from './EffectOpCore.js'\nimport { RunSessionTag } from '../../observability/runSession.js'\nimport type { RuntimeInternals } from './RuntimeInternals.js'\nimport * as Debug from './DebugSink.js'\nimport * as ReadQuery from './ReadQuery.js'\n\nconst getMiddlewareStack = (): Effect.Effect<EffectOp.MiddlewareStack, never, any> =>\n Effect.serviceOption(EffectOpCore.EffectOpMiddlewareTag).pipe(\n Effect.map((maybe) => (Option.isSome(maybe) ? maybe.value.stack : [])),\n )\n\nconst getRuntimeScope = (runtime: unknown): { readonly moduleId?: string; readonly instanceId?: string } => {\n if (!runtime) return {}\n if (typeof runtime !== 'object' && typeof runtime !== 'function') return {}\n const scope = runtime as { readonly moduleId?: unknown; readonly instanceId?: unknown }\n return {\n moduleId: typeof scope.moduleId === 'string' ? scope.moduleId : undefined,\n instanceId: typeof scope.instanceId === 'string' ? scope.instanceId : undefined,\n }\n}\n\nexport interface Api<Sh extends ModuleShape<any, any>, R = never> {\n readonly fromAction: <T extends ActionOf<Sh>>(predicate: (a: ActionOf<Sh>) => a is T) => Stream.Stream<T>\n\n readonly fromState: {\n <V>(selector: (s: StateOf<Sh>) => V): Stream.Stream<V>\n <V>(query: ReadQuery.ReadQuery<StateOf<Sh>, V>): Stream.Stream<V>\n }\n\n readonly debounce: <V>(ms: number) => (stream: Stream.Stream<V>) => Stream.Stream<V>\n\n readonly throttle: <V>(ms: number) => (stream: Stream.Stream<V>) => Stream.Stream<V>\n\n readonly filter: <V>(predicate: (value: V) => boolean) => (stream: Stream.Stream<V>) => Stream.Stream<V>\n\n readonly run: <V, A = void, E = never, R2 = unknown>(\n eff: Logic.Of<Sh, R & R2, A, E> | ((payload: V) => Logic.Of<Sh, R & R2, A, E>),\n options?: Logic.OperationOptions,\n ) => (stream: Stream.Stream<V>) => Effect.Effect<void, E, Logic.Env<Sh, R & R2>>\n\n readonly runParallel: <V, A = void, E = never, R2 = unknown>(\n eff: Logic.Of<Sh, R & R2, A, E> | ((payload: V) => Logic.Of<Sh, R & R2, A, E>),\n options?: Logic.OperationOptions,\n ) => (stream: Stream.Stream<V>) => Effect.Effect<void, E, Logic.Env<Sh, R & R2>>\n\n readonly runLatest: <V, A = void, E = never, R2 = unknown>(\n eff: Logic.Of<Sh, R & R2, A, E> | ((payload: V) => Logic.Of<Sh, R & R2, A, E>),\n options?: Logic.OperationOptions,\n ) => (stream: Stream.Stream<V>) => Effect.Effect<void, E, Logic.Env<Sh, R & R2>>\n\n readonly runExhaust: <V, A = void, E = never, R2 = unknown>(\n eff: Logic.Of<Sh, R & R2, A, E> | ((payload: V) => Logic.Of<Sh, R & R2, A, E>),\n options?: Logic.OperationOptions,\n ) => (stream: Stream.Stream<V>) => Effect.Effect<void, E, Logic.Env<Sh, R & R2>>\n}\n\nconst resolveEffect = <T, Sh extends AnyModuleShape, R, A, E>(\n eff: Logic.Of<Sh, R, A, E> | ((payload: T) => Logic.Of<Sh, R, A, E>),\n payload: T,\n): Logic.Of<Sh, R, A, E> => (typeof eff === 'function' ? (eff as (p: T) => Logic.Of<Sh, R, A, E>)(payload) : eff)\n\nexport const make = <Sh extends AnyModuleShape, R = never>(\n runtime: ModuleRuntime<StateOf<Sh>, ActionOf<Sh>>,\n runtimeInternals?: RuntimeInternals,\n): Api<Sh, R> => {\n const scope = getRuntimeScope(runtime)\n const resolveConcurrencyLimit = (): Effect.Effect<number | 'unbounded', never, any> =>\n runtimeInternals\n ? runtimeInternals.concurrency.resolveConcurrencyPolicy().pipe(Effect.map((p) => p.concurrencyLimit))\n : Effect.succeed(16)\n\n const runAsFlowOp = <A, E, R2, V>(\n name: string,\n payload: V,\n eff: Effect.Effect<A, E, Logic.Env<Sh, R & R2>>,\n options?: Logic.OperationOptions,\n ): Effect.Effect<A, E, Logic.Env<Sh, R & R2>> =>\n Effect.gen(function* () {\n const stack = yield* getMiddlewareStack()\n const meta: any = {\n ...(options?.meta ?? {}),\n policy: options?.policy,\n tags: options?.tags,\n trace: options?.trace,\n moduleId: scope.moduleId,\n instanceId: scope.instanceId,\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 = meta.instanceId ?? 'global'\n meta.opSeq = sessionOpt.value.local.nextSeq('opSeq', key)\n }\n }\n\n const op = EffectOp.make<A, E, any>({\n kind: 'flow',\n name,\n payload,\n effect: eff as any,\n meta,\n })\n return yield* EffectOp.run(op, stack)\n }) as any\n\n const runEffect =\n <T, A, E, R2>(eff: Logic.Of<Sh, R & R2, A, E> | ((payload: T) => Logic.Of<Sh, R & R2, A, E>)) =>\n (payload: T) =>\n resolveEffect<T, Sh, R & R2, A, E>(eff, payload)\n\n const runStreamSequential =\n <T, A, E, R2>(\n eff: Logic.Of<Sh, R & R2, A, E> | ((payload: T) => Logic.Of<Sh, R & R2, A, E>),\n options?: Logic.OperationOptions,\n ) =>\n (stream: Stream.Stream<T>): Effect.Effect<void, E, Logic.Env<Sh, R & R2>> =>\n Stream.runForEach(stream, (payload) =>\n runAsFlowOp<A, E, R2, T>('flow.run', payload, runEffect<T, A, E, R2>(eff)(payload), options),\n )\n\n const runStreamParallel =\n <T, A, E, R2>(\n eff: Logic.Of<Sh, R & R2, A, E> | ((payload: T) => Logic.Of<Sh, R & R2, A, E>),\n options?: Logic.OperationOptions,\n ) =>\n (stream: Stream.Stream<T>): Effect.Effect<void, E, Logic.Env<Sh, R & R2>> =>\n Effect.gen(function* () {\n const concurrency = yield* resolveConcurrencyLimit()\n\n return yield* Stream.runDrain(\n stream.pipe(\n Stream.mapEffect(\n (payload) =>\n runAsFlowOp<A, E, R2, T>('flow.runParallel', payload, runEffect<T, A, E, R2>(eff)(payload), options),\n { concurrency },\n ),\n ),\n ).pipe(\n Effect.catchAllCause((cause) =>\n Debug.record({\n type: 'diagnostic',\n moduleId: scope.moduleId,\n instanceId: scope.instanceId,\n code: 'flow::unhandled_failure',\n severity: 'error',\n message: 'Flow watcher (runParallel) failed with an unhandled error.',\n hint: 'Handle errors explicitly inside the watcher (catch/catchAll) or write back via TaskRunner failure; avoid silent failures.',\n kind: 'flow_unhandled_failure',\n trigger: {\n kind: 'flow',\n name: 'runParallel',\n },\n }).pipe(Effect.zipRight(Effect.failCause(cause))),\n ),\n )\n }) as any\n\n return {\n fromAction: <T extends ActionOf<Sh>>(predicate: (a: ActionOf<Sh>) => a is T) =>\n runtime.actions$.pipe(Stream.filter(predicate)),\n\n fromState: <V>(selectorOrQuery: ((s: StateOf<Sh>) => V) | ReadQuery.ReadQuery<StateOf<Sh>, V>) =>\n runtime.changes(ReadQuery.isReadQuery(selectorOrQuery) ? selectorOrQuery.select : selectorOrQuery),\n\n debounce: (ms: number) => (stream) => Stream.debounce(stream, ms),\n\n throttle: (ms: number) => (stream) =>\n Stream.throttle(stream, {\n cost: () => 1,\n units: 1,\n duration: ms,\n strategy: 'enforce',\n }),\n\n filter: (predicate: (value: any) => boolean) => (stream) => Stream.filter(stream, predicate),\n\n run: (eff, options) => (stream) => runStreamSequential<any, any, any, any>(eff, options)(stream),\n\n runParallel: (eff, options) => (stream) => runStreamParallel<any, any, any, any>(eff, options)(stream),\n\n runLatest: (eff, options) => (stream) =>\n Stream.runDrain(\n Stream.map(stream, (payload) =>\n runAsFlowOp<any, any, any, any>(\n 'flow.runLatest',\n payload,\n runEffect<any, any, any, any>(eff)(payload),\n options,\n ),\n ).pipe(\n Stream.flatMap((effect) => Stream.fromEffect(effect), {\n switch: true,\n }),\n ),\n ),\n\n runExhaust: (eff, options) => (stream) =>\n Effect.gen(function* () {\n const concurrency = yield* resolveConcurrencyLimit()\n const busyRef = yield* Ref.make(false)\n const mapper = (payload: any) =>\n Effect.gen(function* () {\n const acquired = yield* Ref.modify(busyRef, (busy) =>\n busy ? ([false, busy] as const) : ([true, true] as const),\n )\n if (!acquired) {\n return\n }\n try {\n yield* runAsFlowOp<any, any, any, any>(\n 'flow.runExhaust',\n payload,\n runEffect<any, any, any, any>(eff)(payload),\n options,\n )\n } finally {\n yield* Ref.set(busyRef, false)\n }\n })\n\n return yield* Stream.runDrain(stream.pipe(Stream.mapEffect(mapper, { concurrency })))\n }),\n }\n}\n","import { Effect } from 'effect'\n\nexport const makeMatch = <V>(value: V) => {\n let result: Effect.Effect<any, any, any> | undefined\n\n const chain = {\n with: <A>(predicate: (value: V) => boolean, handler: (value: V) => A) => {\n if (result) return chain\n if (predicate(value)) {\n result = handler(value) as any\n }\n return chain\n },\n otherwise: <A>(handler: (value: V) => A): A => {\n if (result) return result as A\n return handler(value)\n },\n exhaustive: () => {\n if (result) {\n return result\n }\n return Effect.dieMessage('[FluentMatch] Non-exhaustive match: no pattern matched value')\n },\n }\n\n return chain\n}\n\nexport const makeMatchTag = <V extends { _tag: string }>(value: V) => {\n let result: Effect.Effect<any, any, any> | undefined\n\n const chain = {\n with: <K extends V['_tag'], A>(t: K, handler: (value: Extract<V, { _tag: K }>) => A) => {\n if (result) return chain\n if (value._tag === t) {\n result = handler(value as Extract<V, { _tag: K }>) as any\n }\n return chain\n },\n otherwise: <A>(handler: (value: V) => A): A => {\n if (result) return result as A\n return handler(value)\n },\n exhaustive: () => {\n if (result) {\n return result\n }\n return Effect.dieMessage('[FluentMatchTag] Non-exhaustive match: no tag handler matched value')\n },\n }\n\n return chain\n}\n","import { Context, Deferred, Effect, Layer } from 'effect'\nimport { isDevEnv } from './runtime/core/env.js'\nimport { RootContextTag, type RootContext } from './runtime/core/RootContext.js'\n\nexport type RootResolveEntrypoint = 'logic.root.resolve' | 'logic.$.root.resolve'\n\nexport interface RootResolveOptions {\n readonly entrypoint?: RootResolveEntrypoint\n /**\n * Whether to wait when RootContext is not ready yet:\n * - Default false: avoid misuse during layer/setup which can deadlock.\n * - `$.root.resolve` passes true in the run phase (run-only), allowing Env assembly to complete.\n */\n readonly waitForReady?: boolean\n}\n\nconst tagIdOf = (tag: Context.Tag<any, any>): string =>\n typeof (tag as any)?.id === 'string'\n ? String((tag as any).id)\n : typeof (tag as any)?.key === 'string'\n ? String((tag as any).key)\n : '<unknown tag>'\n\nconst makeMissingRootProviderError = (\n tag: Context.Tag<any, any>,\n entrypoint: RootResolveEntrypoint,\n extra?: string,\n): Error => {\n const dev = isDevEnv()\n const tokenId = tagIdOf(tag)\n const fix: string[] = dev\n ? [\n '- Provide it when creating the runtime tree (Logix.Runtime.make(...,{ layer }) / ManagedRuntime.make(Layer.mergeAll(...))).',\n \"- If you're in React and want the current runtime environment singleton, use useModule(ModuleTag).\",\n '- Do not rely on nested RuntimeProvider.layer to mock Root.resolve.',\n ]\n : []\n\n const message = dev\n ? [\n '[MissingRootProviderError] Cannot resolve Tag from root provider.',\n extra ? `\\n${extra}` : '',\n `tokenId: ${tokenId}`,\n `entrypoint: ${entrypoint}`,\n 'mode: global',\n 'startScope: root',\n '',\n 'fix:',\n ...fix,\n ]\n .filter((s) => s.length > 0)\n .join('\\n')\n : '[MissingRootProviderError] tag not found in root provider'\n\n const err = new Error(message)\n err.name = 'MissingRootProviderError'\n ;(err as any).tokenId = tokenId\n ;(err as any).entrypoint = entrypoint\n ;(err as any).mode = 'global'\n ;(err as any).startScope = { kind: 'root' }\n ;(err as any).fix = fix\n return err\n}\n\n/**\n * resolve\n *\n * Resolve a Tag explicitly from the root provider of the current Runtime tree (ServiceTag / ModuleTag).\n *\n * Semantics:\n * - Always reads rootContext; unaffected by nearer-scope Layer/Context overrides.\n * - For ModuleTag: expresses root singleton semantics only (not used for multi-instance selection).\n */\nexport const resolve = <Id, Svc>(\n tag: Context.Tag<Id, Svc>,\n options?: RootResolveOptions,\n): Effect.Effect<Svc, never, any> =>\n Effect.gen(function* () {\n const entrypoint: RootResolveEntrypoint = options?.entrypoint ?? 'logic.root.resolve'\n\n const root = yield* RootContextTag\n\n const rootContext = root.context ?? (options?.waitForReady ? yield* root.ready : undefined)\n\n if (!rootContext) {\n return yield* Effect.die(\n makeMissingRootProviderError(tag as Context.Tag<any, any>, entrypoint, 'reason: rootContextNotReady'),\n )\n }\n\n try {\n return Context.get(rootContext, tag as Context.Tag<any, any>) as Svc\n } catch {\n return yield* Effect.die(makeMissingRootProviderError(tag as Context.Tag<any, any>, entrypoint))\n }\n })\n\n/**\n * layerFromContext(tests/perf only)\n *\n * Provide a \"ready immediately\" RootContext for Root.resolve.\n * - `ready` is fulfilled immediately to avoid extra waits when waitForReady=true.\n */\nexport const layerFromContext = (context: Context.Context<any>): Layer.Layer<any, never, any> =>\n Layer.scoped(\n RootContextTag,\n Effect.gen(function* () {\n const ready = yield* Deferred.make<Context.Context<any>>()\n yield* Deferred.succeed(ready, context)\n const root: RootContext = { context, ready }\n return root\n }),\n )\n","// StateTrait namespace module (@logixjs/core/StateTrait):\n// - Provides a DSL for trait specs (from/node/list/computed/source/link).\n// - build: normalizes the spec and produces Program/Graph/Plan.\n// - install: installs a Program into the runtime (registers source.refresh, runs converge/validate in txn windows).\n\nimport type { Schema } from 'effect'\nimport { Effect } from 'effect'\nimport type { BoundApi } from './Bound.js'\nimport * as Model from './internal/state-trait/model.js'\nimport * as FieldPath from './internal/state-trait/field-path.js'\nimport * as RowId from './internal/state-trait/rowid.js'\nimport * as InternalBuild from './internal/state-trait/build.js'\nimport * as InternalInstall from './internal/state-trait/install.js'\nimport * as InternalIr from './internal/state-trait/ir.js'\n\n// Public type aliases.\nexport type StateTraitSpec<S> = Model.StateTraitSpec<S>\nexport type StateTraitEntry<S = unknown, P extends string = string> = Model.StateTraitEntry<S, P>\nexport type StateTraitProgram<S> = Model.StateTraitProgram<S>\nexport type StateTraitGraph = Model.StateTraitGraph\nexport type StateTraitPlan = Model.StateTraitPlan\nexport type StateTraitNode<Input = unknown, Ctx = unknown> = Model.StateTraitNode<Input, Ctx>\nexport type StateTraitList<Item = unknown> = Model.StateTraitList<Item>\nexport type CheckRule<Input = unknown, Ctx = unknown> = Model.CheckRule<Input, Ctx>\n\nexport type StateFieldPath<S> = FieldPath.StateFieldPath<S>\nexport type StateAtPath<S, P> = FieldPath.StateAtPath<S, P>\n\nexport const $root = '$root' as const\n\ntype DepsArgs<S extends object, Deps extends ReadonlyArray<StateFieldPath<S>>> = {\n readonly [K in keyof Deps]: StateAtPath<S, Deps[K]>\n}\n\n/**\n * StateTrait.from:\n * - Narrows available field paths based on the state Schema, adding type constraints to trait specs.\n * - At runtime this returns the raw spec object; normalization is handled by internal layers.\n */\nexport const from =\n <S extends object, I>(_schema: Schema.Schema<S, I>) =>\n (spec: StateTraitSpec<S>): StateTraitSpec<S> =>\n spec\n\nexport const node = <Input = unknown, Ctx = unknown>(\n spec: Omit<Model.StateTraitNode<Input, Ctx>, '_tag'>,\n): Model.StateTraitNode<Input, Ctx> => ({\n _tag: 'StateTraitNode',\n ...spec,\n})\n\nexport const list = <Item = unknown>(spec: Omit<Model.StateTraitList<Item>, '_tag'>): Model.StateTraitList<Item> => ({\n _tag: 'StateTraitList',\n ...spec,\n})\n\n/**\n * StateTrait.computed:\n * - Declares computed semantics for a field.\n * - Uses explicit deps as the single source of truth for dependencies (diagnostics / reverse-closure / incremental sched).\n */\nexport const computed = <\n S extends object,\n P extends StateFieldPath<S>,\n const Deps extends ReadonlyArray<StateFieldPath<S>>,\n>(input: {\n readonly deps: Deps\n readonly get: (...depsValues: DepsArgs<S, Deps>) => StateAtPath<S, P>\n readonly equals?: (prev: StateAtPath<S, P>, next: StateAtPath<S, P>) => boolean\n /**\n * 043: explicit converge time-slicing scheduling.\n * - unset: immediate (default behavior unchanged)\n * - deferred: can be postponed and merged into later windows (requires runtime time-slicing enabled)\n */\n readonly scheduling?: Model.TraitConvergeScheduling\n}): StateTraitEntry<S, P> => {\n const derive = (state: Readonly<S>): StateAtPath<S, P> => {\n const args = (input.deps as ReadonlyArray<string>).map((dep) => RowId.getAtPath(state as any, dep))\n return (input.get as any)(...args)\n }\n return {\n fieldPath: undefined as unknown as P,\n kind: 'computed',\n meta: {\n deps: input.deps,\n derive,\n equals: input.equals,\n ...(input.scheduling ? { scheduling: input.scheduling } : {}),\n },\n } as StateTraitEntry<S, P>\n}\n\n/**\n * StateTrait.source:\n * - Declares an external resource source for a field (Resource / Query integration is implemented in later phases).\n * - The kernel owns keyHash gating / concurrency / ReplayMode behavior.\n */\nexport const source = <\n S extends object,\n P extends StateFieldPath<S>,\n const Deps extends ReadonlyArray<StateFieldPath<S>>,\n>(input: {\n readonly resource: string\n readonly deps: Deps\n readonly key: (...depsValues: DepsArgs<S, Deps>) => unknown\n readonly triggers?: ReadonlyArray<'onMount' | 'onKeyChange' | 'manual'>\n readonly debounceMs?: number\n readonly concurrency?: 'switch' | 'exhaust-trailing'\n /**\n * Serializable metadata for Devtools/docs (whitelisted fields are extracted during build).\n */\n readonly meta?: Record<string, unknown>\n}): StateTraitEntry<S, P> => {\n const key = (state: Readonly<S>): unknown => {\n const args = (input.deps as ReadonlyArray<string>).map((dep) => RowId.getAtPath(state as any, dep))\n return (input.key as any)(...args)\n }\n return {\n fieldPath: undefined as unknown as P,\n kind: 'source',\n meta: { ...input, key },\n } as StateTraitEntry<S, P>\n}\n\n/**\n * StateTrait.link:\n * - Declares a linkage from another field into the target field.\n * - `meta.from` is also constrained by `StateFieldPath<S>`.\n */\nexport const link = <S extends object, P extends StateFieldPath<S>>(meta: {\n from: StateFieldPath<S>\n /**\n * 043: explicit converge time-slicing scheduling.\n * - unset: immediate (default behavior unchanged)\n * - deferred: can be postponed and merged into later windows (requires runtime time-slicing enabled)\n */\n scheduling?: Model.TraitConvergeScheduling\n}): StateTraitEntry<S, P> =>\n ({\n fieldPath: undefined as unknown as P,\n kind: 'link',\n meta: { ...meta, ...(meta.scheduling ? { scheduling: meta.scheduling } : {}) },\n }) as StateTraitEntry<S, P>\n\n/**\n * StateTrait.build:\n * - Normalizes the spec into an executable Program (including Graph/Plan).\n * - When DSL and build constraints differ, build is the final authority (e.g. requiring explicit deps).\n */\nexport const build = <S extends object>(\n stateSchema: Schema.Schema<S, any>,\n spec: StateTraitSpec<S>,\n): StateTraitProgram<S> => InternalBuild.build(stateSchema, spec)\n\n/**\n * StateTrait.install:\n * - Installs Program-defined behavior (computed/link/source/check, etc.) on top of a Bound API.\n * - Each PlanStep corresponds to a long-lived Effect mounted into the runtime Scope.\n */\nexport const install = <S extends object>(\n bound: BoundApi<any, any>,\n program: StateTraitProgram<S>,\n): Effect.Effect<void, never, any> => InternalInstall.install(bound, program)\n\n/**\n * StateTrait.exportStaticIr:\n * - Exports minimal Static IR (aligned with 009 canonical FieldPath constraints) for Devtools / Alignment Lab.\n * - The return value must be JSON-stringifiable (evidence packages / replay pipeline).\n */\nexport type StaticIr = InternalIr.StaticIr\n\nexport const exportStaticIr = (\n program: StateTraitProgram<any>,\n moduleId: string,\n options?: {\n readonly version?: string\n },\n): StaticIr =>\n InternalIr.exportStaticIr({\n program,\n moduleId,\n version: options?.version,\n })\n","import { Effect } from 'effect'\nimport type { BoundApi } from '../runtime/core/module.js'\nimport { getBoundInternals } from '../runtime/core/runtimeInternalsAccessor.js'\nimport * as SourceRuntime from './source.js'\nimport type {\n StateTraitProgram,\n StateTraitPlanStep,\n StateTraitEntry,\n TraitConvergeGenerationBumpReason,\n} from './model.js'\n\nconst buildEntryIndex = <S>(\n entries: ReadonlyArray<StateTraitEntry<S, string>>,\n): Map<string, Array<StateTraitEntry<S, string>>> => {\n const index = new Map<string, Array<StateTraitEntry<S, string>>>()\n for (const entry of entries) {\n const list = index.get(entry.fieldPath) ?? []\n list.push(entry)\n index.set(entry.fieldPath, list)\n }\n return index\n}\n\n/**\n * Install behaviors described by StateTraitProgram onto the given Bound API.\n *\n * - Phase 2 minimal implementation:\n * - Register watchers for computed fields: recompute target fields when State changes.\n * - Register watchers for link fields: sync target fields when source fields change.\n * - Reserve refresh entrypoints for source fields (no external calls yet).\n *\n * Notes:\n * - All watchers are installed via Bound API `$`, without directly depending on ModuleRuntime.\n * - Each PlanStep corresponds to a long-lived Effect and is mounted into the Runtime Scope via forkScoped.\n */\nexport const install = <S>(\n bound: BoundApi<any, any>,\n program: StateTraitProgram<S>,\n): Effect.Effect<void, never, any> => {\n // Register the program to Runtime first (the converge engine runs computed/link/check before txn commit).\n try {\n const internals = getBoundInternals(bound as any)\n ;(internals.traits.registerStateTraitProgram as any)(program, {\n bumpReason: 'logic_installed' as TraitConvergeGenerationBumpReason,\n })\n } catch {\n // no-op for legacy/mocked bound\n }\n\n const entryIndex = buildEntryIndex(program.entries as any)\n\n const installStep = (step: StateTraitPlanStep): Effect.Effect<void, never, any> => {\n if (!step.targetFieldPath) {\n return Effect.void\n }\n\n if (step.kind !== 'source-refresh') {\n // computed/link/check are handled by the runtime core within the transaction window; install keeps only source.refresh entrypoints.\n return Effect.void\n }\n\n const candidates = entryIndex.get(step.targetFieldPath)\n if (!candidates || candidates.length === 0) {\n // The plan references a missing spec: treat it as a build-time bug and ignore the step here.\n return Effect.void\n }\n\n const entry = candidates.find((e) => e.kind === 'source')\n\n if (!entry) {\n return Effect.void\n }\n\n return SourceRuntime.installSourceRefresh(bound, step, entry as any)\n }\n\n return Effect.forEach(program.plan.steps, (step) => installStep(step)).pipe(Effect.asVoid)\n}\n","import { fnv1a32, stableStringify } from '../../digest.js'\n\nexport type TraitId = string\n\nexport type TraitOriginType = 'module' | 'logicUnit'\nexport type TraitOriginIdKind = 'explicit' | 'derived'\n\nexport interface TraitProvenance {\n readonly originType: TraitOriginType\n readonly originId: string\n readonly originIdKind: TraitOriginIdKind\n /**\n * Human-readable label for Devtools/error messages (e.g. \"logicUnit:Profile#1\").\n */\n readonly originLabel: string\n /**\n * Optional location summary (e.g. file path / callsite); for navigation only and not used for semantic decisions.\n */\n readonly path?: string\n}\n\n/**\n * TraitSpec:\n * - Minimal representation of \"trait declarations\": a record keyed by traitId.\n * - The concrete value shape is defined by the specific trait system (e.g. StateTraitSpec).\n * - Value serializability is not constrained here (runtime install may depend on functions), but snapshots/evidence exports\n * must only include serializable subsets.\n */\nexport type TraitSpec = object\n\nexport interface TraitContribution {\n readonly traits: TraitSpec\n readonly provenance: TraitProvenance\n}\n\nexport interface ModuleTraitItem {\n readonly traitId: TraitId\n readonly name: string\n readonly description?: string\n}\n\nexport type TraitConflictKind = 'duplicate_traitId' | 'missing_requires' | 'excludes_violation'\n\nexport interface TraitConflict {\n readonly kind: TraitConflictKind\n readonly traitId: TraitId\n readonly sources: ReadonlyArray<TraitProvenance>\n readonly missing?: ReadonlyArray<TraitId>\n readonly present?: ReadonlyArray<TraitId>\n}\n\nexport class ModuleTraitsConflictError extends Error {\n readonly _tag = 'ModuleTraitsConflictError'\n\n constructor(\n readonly moduleId: string,\n readonly conflicts: ReadonlyArray<TraitConflict>,\n ) {\n super(\n [\n `[ModuleTraitsConflictError] Conflicting traitIds found (moduleId=${moduleId}).`,\n ...conflicts.map((c) =>\n c.kind === 'duplicate_traitId'\n ? `- duplicate ${c.traitId}: ${c.sources.map((s) => `${s.originType}:${s.originId}`).join(', ')}`\n : c.kind === 'missing_requires'\n ? `- missing requires for ${c.traitId}: ${(c.missing ?? []).join(', ')}; sources=${c.sources\n .map((s) => `${s.originType}:${s.originId}`)\n .join(', ')}`\n : `- excludes violation for ${c.traitId}: present=${(c.present ?? []).join(', ')}; sources=${c.sources\n .map((s) => `${s.originType}:${s.originId}`)\n .join(', ')}`,\n ),\n ].join('\\n'),\n )\n }\n}\n\nexport interface ModuleTraitsSnapshot {\n readonly moduleId: string\n readonly digest: string\n readonly traits: ReadonlyArray<ModuleTraitItem>\n readonly provenanceIndex: Record<TraitId, TraitProvenance>\n}\n\nconst toProvenanceKey = (p: TraitProvenance): string =>\n `${p.originType}:${p.originId}:${p.originIdKind}:${p.originLabel}:${p.path ?? ''}`\n\nconst compareProvenance = (a: TraitProvenance, b: TraitProvenance): number => {\n const type = a.originType.localeCompare(b.originType)\n if (type !== 0) return type\n const id = a.originId.localeCompare(b.originId)\n if (id !== 0) return id\n const kind = a.originIdKind.localeCompare(b.originIdKind)\n if (kind !== 0) return kind\n const label = a.originLabel.localeCompare(b.originLabel)\n if (label !== 0) return label\n return String(a.path ?? '').localeCompare(String(b.path ?? ''))\n}\n\nconst originTypeOrder = (t: TraitOriginType): number => (t === 'module' ? 0 : 1)\n\nconst compareTraitIdByProvenance = (\n a: { readonly traitId: TraitId; readonly provenance: TraitProvenance },\n b: { readonly traitId: TraitId; readonly provenance: TraitProvenance },\n): number => {\n const ta = originTypeOrder(a.provenance.originType) - originTypeOrder(b.provenance.originType)\n if (ta !== 0) return ta\n const oa = a.provenance.originId.localeCompare(b.provenance.originId)\n if (oa !== 0) return oa\n return a.traitId.localeCompare(b.traitId)\n}\n\nconst extractStringArray = (value: unknown): ReadonlyArray<string> => {\n if (!Array.isArray(value)) return []\n const out: Array<string> = []\n for (const v of value) {\n if (typeof v !== 'string') continue\n const s = v.trim()\n if (!s) continue\n out.push(s)\n }\n return out\n}\n\nconst getTraitRequires = (value: unknown): ReadonlyArray<TraitId> => {\n if (!value || typeof value !== 'object') return []\n const direct = extractStringArray((value as any).requires)\n return direct\n}\n\nconst getTraitExcludes = (value: unknown): ReadonlyArray<TraitId> => {\n if (!value || typeof value !== 'object') return []\n const direct = extractStringArray((value as any).excludes)\n return direct\n}\n\nconst getTraitName = (traitId: TraitId, value: unknown): string => {\n if (value && typeof value === 'object') {\n const n = (value as any).name\n if (typeof n === 'string' && n.trim().length > 0) return n.trim()\n }\n return traitId\n}\n\nconst getTraitDescription = (value: unknown): string | undefined => {\n if (value && typeof value === 'object') {\n const d = (value as any).description\n if (typeof d === 'string' && d.trim().length > 0) return d.trim()\n }\n return undefined\n}\n\nexport const finalizeTraitContributions = (args: {\n readonly moduleId: string\n readonly contributions: ReadonlyArray<TraitContribution>\n}): { readonly merged: TraitSpec; readonly snapshot: ModuleTraitsSnapshot } => {\n const traitById = new Map<TraitId, { readonly value: unknown; readonly provenance: TraitProvenance }>()\n\n const duplicateSources = new Map<TraitId, Array<TraitProvenance>>()\n\n const contributions = [...args.contributions].sort((a, b) => compareProvenance(a.provenance, b.provenance))\n\n for (const c of contributions) {\n const traits = c.traits\n if (!traits || typeof traits !== 'object') continue\n for (const traitId of Object.keys(traits).sort((a, b) => a.localeCompare(b))) {\n const value = (traits as Record<string, unknown>)[traitId]\n if (value === undefined) continue\n\n const prev = traitById.get(traitId)\n if (!prev) {\n traitById.set(traitId, { value, provenance: c.provenance })\n continue\n }\n\n const sources = duplicateSources.get(traitId) ?? [prev.provenance]\n sources.push(c.provenance)\n duplicateSources.set(traitId, sources)\n }\n }\n\n const conflicts: Array<TraitConflict> = []\n const registerConflict = (conflict: TraitConflict) => {\n const unique = new Map<string, TraitProvenance>()\n for (const s of conflict.sources) {\n unique.set(toProvenanceKey(s), s)\n }\n conflicts.push({\n ...conflict,\n sources: Array.from(unique.values()).sort(compareProvenance),\n })\n }\n\n // 1) duplicate traitId conflicts\n for (const traitId of Array.from(duplicateSources.keys()).sort((a, b) => a.localeCompare(b))) {\n registerConflict({\n kind: 'duplicate_traitId',\n traitId,\n sources: duplicateSources.get(traitId) ?? [],\n })\n }\n\n const merged: Record<string, unknown> = {}\n const provenanceIndex: Record<string, TraitProvenance> = {}\n const traits: Array<ModuleTraitItem> = []\n\n const entries: Array<{ readonly traitId: TraitId; readonly value: unknown; readonly provenance: TraitProvenance }> =\n []\n for (const traitId of traitById.keys()) {\n const entry = traitById.get(traitId)\n if (!entry) continue\n entries.push({ traitId, value: entry.value, provenance: entry.provenance })\n }\n\n const ids = entries\n .slice()\n .sort(compareTraitIdByProvenance)\n .map((e) => e.traitId)\n\n for (const traitId of ids) {\n const entry = traitById.get(traitId)\n if (!entry) continue\n merged[traitId] = entry.value\n provenanceIndex[traitId] = entry.provenance\n traits.push({\n traitId,\n name: getTraitName(traitId, entry.value),\n description: getTraitDescription(entry.value),\n })\n }\n\n // 2) consistency checks (FR-007): requires / excludes\n const present = new Set(ids)\n\n for (const traitId of ids) {\n const entry = traitById.get(traitId)\n if (!entry) continue\n\n const requires = getTraitRequires(entry.value)\n if (requires.length > 0) {\n const missing = requires.filter((r) => !present.has(r))\n if (missing.length > 0) {\n registerConflict({\n kind: 'missing_requires',\n traitId,\n missing: Array.from(new Set(missing)).sort((a, b) => a.localeCompare(b)),\n sources: [entry.provenance],\n })\n }\n }\n\n const excludes = getTraitExcludes(entry.value)\n if (excludes.length > 0) {\n const presentExcluded = excludes.filter((e) => present.has(e))\n if (presentExcluded.length > 0) {\n const otherSources: Array<TraitProvenance> = []\n for (const otherId of presentExcluded) {\n const other = traitById.get(otherId)\n if (other) otherSources.push(other.provenance)\n }\n registerConflict({\n kind: 'excludes_violation',\n traitId,\n present: Array.from(new Set(presentExcluded)).sort((a, b) => a.localeCompare(b)),\n sources: [entry.provenance, ...otherSources],\n })\n }\n }\n }\n\n if (conflicts.length > 0) {\n const kindOrder: Record<TraitConflictKind, number> = {\n duplicate_traitId: 0,\n missing_requires: 1,\n excludes_violation: 2,\n }\n conflicts.sort((a, b) => {\n const k = kindOrder[a.kind] - kindOrder[b.kind]\n if (k !== 0) return k\n return a.traitId.localeCompare(b.traitId)\n })\n throw new ModuleTraitsConflictError(args.moduleId, conflicts)\n }\n\n const digestBase = {\n moduleId: args.moduleId,\n traits,\n provenanceIndex,\n } as const\n\n const digest = `mtraits:023:${fnv1a32(stableStringify(digestBase))}`\n\n return {\n merged,\n snapshot: {\n moduleId: args.moduleId,\n digest,\n traits,\n provenanceIndex,\n },\n }\n}\n","import type { Context, Layer as EffectLayer } from 'effect'\n\n/**\n * State namespace (module-level):\n * - Provides State.Tag<S>: marks a state type in Env.\n * - Provides State.Layer<S>: builds a Layer that only carries State.Tag<S>.\n *\n * Type-level only; no additional runtime dependency.\n */\nexport type Tag<S> = Context.Tag<any, S>\nexport type Layer<S> = EffectLayer.Layer<Tag<S>, never, never>\n","import type { Context, Layer as EffectLayer, Stream, Effect } from 'effect'\n\n/**\n * Actions namespace (module-level):\n * - Provides Actions.Tag<A>: the action channel in Env (dispatch + actions$).\n * - Provides Actions.Layer<A>: a Layer shape that only carries that action channel.\n *\n * Type-level only; no additional runtime dependency.\n */\nexport type Tag<A> = Context.Tag<\n any,\n {\n dispatch: (a: A) => Effect.Effect<void>\n actions$: Stream.Stream<A>\n }\n>\n\nexport type Layer<A> = EffectLayer.Layer<Tag<A>, never, never>\n","export type { ActionCreator, ActionToken } from './internal/action.js'\nexport { makeActions } from './internal/action.js'\n\n","import { Context, Effect } from 'effect'\nimport type * as Logix from './internal/module.js'\nimport * as Internal from './internal/LogicMiddleware.js'\nimport * as PlatformInternal from './internal/platform/Platform.js'\n\nexport * from './internal/LogicMiddleware.js'\n\n// Logic: a long-running Effect program scoped to a module shape.\n\n/**\n * Core Tag for retrieving the current ModuleRuntime within a Logic scope.\n */\nexport const RuntimeTag: Context.Tag<any, Logix.ModuleRuntime<any, any>> = Context.GenericTag<\n any,\n Logix.ModuleRuntime<any, any>\n>('@logixjs/Runtime')\n\n// Public Platform alias (equivalent to internal/platform/Platform.Service).\nexport type Platform = PlatformInternal.Service\n\n// Logic Env / Of aliases: point to internal versions to avoid multiple definitions.\nexport type Env<Sh extends Logix.AnyModuleShape, R> = Internal.Env<Sh, R>\n\nexport type Of<Sh extends Logix.AnyModuleShape, R = never, A = void, E = never> = Internal.Of<Sh, R, A, E>\n\nexport function of<Sh extends Logix.AnyModuleShape, R = never, A = void, E = never>(\n eff: Effect.Effect<A, E, Env<Sh, R>>,\n): Of<Sh, R, A, E> {\n return eff as Of<Sh, R, A, E>\n}\n\n// DSL type aliases: reuse internal definitions directly.\nexport type Draft<T> = Internal.Draft<T>\nexport type IntentBuilder<Payload, Sh extends Logix.AnyModuleShape, R = never> = Internal.IntentBuilder<Payload, Sh, R>\nexport type FluentMatch<V> = Internal.FluentMatch<V>\nexport type FluentMatchTag<V extends { _tag: string }> = Internal.FluentMatchTag<V>\n\n// Remaining implementation details (IntentBuilder factories, etc.) are composed in internal/runtime.\n// Application code should use this module via Module.logic and Bound API, without depending on internal construction.\n","import type * as Logix from './internal/module.js'\nimport * as BoundApiRuntime from './internal/runtime/BoundApiRuntime.js'\n\n// ---------------------------------------------------------------------------\n// BoundApi: pre-bound accessors for a module shape + environment.\n// ---------------------------------------------------------------------------\n\n/**\n * Bound API factory: creates pre-bound accessors for a module shape + environment.\n *\n * - By default, resolves the current Logix.ModuleRuntime from `Logic.RuntimeTag`.\n * - Optionally accepts a `Logix.ModuleTag<Sh>` to explicitly choose the runtime (e.g. cross-module collaboration).\n *\n * Note: this is a type-only surface; the concrete implementation is injected by the runtime.\n * In this PoC, the runtime provides a placeholder value at compile-time boundaries.\n */\nexport type BoundApi<Sh extends Logix.AnyModuleShape, R = never> = Logix.BoundApi<Sh, R>\nexport type BoundApiPublic<Sh extends Logix.AnyModuleShape, R = never> = Logix.BoundApi<Sh, R>\n\nexport function make<Sh extends Logix.AnyModuleShape, R = never>(\n shape: Sh,\n runtime: Logix.ModuleRuntime<Logix.StateOf<Sh>, Logix.ActionOf<Sh>>,\n): BoundApiPublic<Sh, R> {\n return BoundApiRuntime.make(shape, runtime) as BoundApiPublic<Sh, R>\n}\n","import type { Effect } from 'effect'\nimport * as Process from './Process.js'\nimport type { AnyModuleShape, ModuleLike, ModuleHandle, ModuleTag } from './internal/module.js'\n\ntype LinkModuleToken<Id extends string, Sh extends AnyModuleShape> = ModuleTag<Id, Sh> | ModuleLike<Id, Sh, object>\n\ntype LinkModuleIdOf<M> = M extends { readonly id: infer Id } ? Id : never\ntype LinkModuleShapeOf<M> =\n M extends ModuleLike<string, infer Sh, object> ? Sh : M extends ModuleTag<string, infer Sh> ? Sh : never\n\n/**\n * Link.make config:\n * - modules: modules participating in this Link.\n * - Keys come from module ids (e.g. the `\"User\"` in `Logix.Module.make(\"User\", ...)`).\n */\nexport interface LinkConfig<Ms extends readonly LinkModuleToken<string, AnyModuleShape>[]> {\n /**\n * Link identifier.\n * - Optional; defaults to a stable string derived from participating `modules.id`.\n * - Intended for Universe / DevTools display and navigation.\n */\n readonly id?: string\n readonly modules: Ms\n}\n\n/**\n * Handle view exposed to Link logic, derived from the module list:\n * - key: module id.\n * - value: read-only handle of that module.\n */\nexport type LinkHandles<Ms extends readonly LinkModuleToken<string, AnyModuleShape>[]> = {\n [M in Ms[number] as LinkModuleIdOf<M>]: ModuleHandle<LinkModuleShapeOf<M>>\n}\n\n/**\n * Link.make:\n * - Creates a Link (cross-module glue logic) from a module list and a logic program.\n * - Returns a \"cold\" Effect, typically attached via `ModuleImpl.implement({ processes/links })` and forked by the runtime.\n */\nexport function make<Ms extends readonly LinkModuleToken<string, AnyModuleShape>[], E = never, R = never>(\n config: LinkConfig<Ms>,\n logic: ($: LinkHandles<Ms>) => Effect.Effect<void, E, R>,\n): Effect.Effect<void, E, R> {\n // Link.make is an alias; it delegates to Process.link (unifying the static surface and runtime recognition).\n return Process.link(config as any, logic as any) as Effect.Effect<void, E, R>\n}\n","import { Effect } from 'effect'\nimport * as ModuleFactory from './internal/runtime/ModuleFactory.js'\nimport type * as Protocol from './internal/runtime/core/process/protocol.js'\nimport * as Meta from './internal/runtime/core/process/meta.js'\nimport type { AnyModuleShape, ModuleHandle, ModuleLike, ModuleTag } from './internal/module.js'\n\nexport type DiagnosticsLevel = Protocol.DiagnosticsLevel\nexport type ProcessScope = Protocol.ProcessScope\nexport type ProcessIdentity = Protocol.ProcessIdentity\nexport type ProcessInstanceIdentity = Protocol.ProcessInstanceIdentity\nexport type ProcessTriggerSpec = Protocol.ProcessTriggerSpec\nexport type ProcessTrigger = Protocol.ProcessTrigger\nexport type ProcessConcurrencyPolicy = Protocol.ProcessConcurrencyPolicy\nexport type ProcessErrorPolicy = Protocol.ProcessErrorPolicy\nexport type ProcessDefinition = Protocol.ProcessDefinition\nexport type ProcessInstallation = Protocol.ProcessInstallation\nexport type SerializableErrorSummary = Protocol.SerializableErrorSummary\nexport type ProcessInstanceStatus = Protocol.ProcessInstanceStatus\nexport type ProcessEvent = Protocol.ProcessEvent\nexport type ProcessControlRequest = Protocol.ProcessControlRequest\nexport type ProcessPlatformEvent = Protocol.ProcessPlatformEvent\n\nexport type ProcessEffect<E = never, R = never> = Meta.ProcessEffect<E, R>\n\nexport type ProcessMakeDefinition =\n | string\n | {\n readonly processId: string\n readonly name?: string\n readonly description?: string\n readonly requires?: ReadonlyArray<string>\n readonly triggers?: ReadonlyArray<ProcessTriggerSpec>\n readonly concurrency?: ProcessConcurrencyPolicy\n readonly errorPolicy?: ProcessErrorPolicy\n readonly diagnosticsLevel?: DiagnosticsLevel\n }\n\nconst DEFAULT_TRIGGERS: ReadonlyArray<ProcessTriggerSpec> = [{ kind: 'platformEvent', platformEvent: 'runtime:boot' }]\n\nconst normalizeDefinition = (input: ProcessMakeDefinition): ProcessDefinition => {\n const base = typeof input === 'string' ? ({ processId: input } satisfies { readonly processId: string }) : input\n\n const processId = base.processId\n if (typeof processId !== 'string' || processId.length === 0) {\n throw new Error('[Process.make] processId must be a non-empty string')\n }\n\n const triggers = Array.isArray(base.triggers) && base.triggers.length > 0 ? base.triggers : DEFAULT_TRIGGERS\n\n const concurrency = base.concurrency ?? ({ mode: 'latest' } satisfies ProcessConcurrencyPolicy)\n const errorPolicy = base.errorPolicy ?? ({ mode: 'failStop' } satisfies ProcessErrorPolicy)\n const diagnosticsLevel = base.diagnosticsLevel ?? 'off'\n\n return {\n processId,\n name: base.name,\n description: base.description,\n requires: base.requires,\n triggers,\n concurrency,\n errorPolicy,\n diagnosticsLevel,\n }\n}\n\nexport const make = <E, R>(definition: ProcessMakeDefinition, effect: Effect.Effect<void, E, R>): ProcessEffect<E, R> =>\n Meta.attachMeta(effect, {\n definition: normalizeDefinition(definition),\n kind: 'process',\n })\n\nexport const getDefinition = (effect: Effect.Effect<void, any, any>): ProcessDefinition | undefined =>\n Meta.getDefinition(effect)\n\nexport const getMeta = (effect: Effect.Effect<void, any, any>): Meta.ProcessMeta | undefined => Meta.getMeta(effect)\n\nexport const attachMeta = <E, R>(effect: Effect.Effect<void, E, R>, meta: Meta.ProcessMeta): ProcessEffect<E, R> =>\n Meta.attachMeta(effect, meta)\n\ntype LinkModuleToken<Id extends string, Sh extends AnyModuleShape> = ModuleTag<Id, Sh> | ModuleLike<Id, Sh, object>\n\ntype LinkModuleIdOf<M> = M extends { readonly id: infer Id } ? Id : never\ntype LinkModuleShapeOf<M> =\n M extends ModuleLike<string, infer Sh, object> ? Sh : M extends ModuleTag<string, infer Sh> ? Sh : never\ntype LinkModuleTagOf<M> =\n M extends ModuleLike<string, infer Sh, object>\n ? ModuleTag<string, Sh>\n : M extends ModuleTag<string, AnyModuleShape>\n ? M\n : never\n\nconst isModuleLike = (value: unknown): value is ModuleLike<string, AnyModuleShape, object> =>\n Boolean(value) &&\n typeof value === 'object' &&\n ((value as { readonly _kind?: unknown })._kind === 'ModuleDef' ||\n (value as { readonly _kind?: unknown })._kind === 'Module') &&\n 'tag' in (value as object)\n\nconst unwrapModuleTag = <Id extends string, Sh extends AnyModuleShape>(\n module: LinkModuleToken<Id, Sh>,\n): ModuleTag<Id, Sh> => {\n if (isModuleLike(module)) {\n return module.tag\n }\n return module as ModuleTag<Id, Sh>\n}\n\nexport interface LinkConfig<Ms extends readonly LinkModuleToken<string, AnyModuleShape>[]> {\n readonly id?: string\n readonly modules: Ms\n}\n\nexport type LinkHandles<Ms extends readonly LinkModuleToken<string, AnyModuleShape>[]> = {\n [M in Ms[number] as LinkModuleIdOf<M>]: ModuleHandle<LinkModuleShapeOf<M>>\n}\n\ntype ModulesRecord<Ms extends readonly LinkModuleToken<string, AnyModuleShape>[]> = {\n [M in Ms[number] as LinkModuleIdOf<M>]: LinkModuleTagOf<M>\n}\n\nexport function link<Ms extends readonly LinkModuleToken<string, AnyModuleShape>[], E = never, R = never>(\n config: LinkConfig<Ms>,\n logic: ($: LinkHandles<Ms>) => Effect.Effect<void, E, R>,\n): ProcessEffect<E, R> {\n const linkId =\n config.id ??\n [...config.modules]\n .map((m) => m.id)\n .sort()\n .join('~')\n\n const modulesRecord = Object.create(null) as ModulesRecord<Ms>\n const requires = new Set<string>()\n\n for (const module of config.modules) {\n const tag = unwrapModuleTag(module)\n requires.add(String(tag.id))\n ;(modulesRecord as Record<string, ModuleTag<string, AnyModuleShape>>)[tag.id] = tag as unknown as ModuleTag<\n string,\n AnyModuleShape\n >\n }\n\n const effect = ModuleFactory.Link(\n modulesRecord as unknown as Record<string, ModuleTag<string, AnyModuleShape>>,\n logic as unknown as ($: Record<string, ModuleHandle<AnyModuleShape>>) => Effect.Effect<void, E, R>,\n )\n\n const definition: ProcessDefinition = {\n processId: linkId,\n requires: Array.from(requires),\n triggers: [...DEFAULT_TRIGGERS, { kind: 'platformEvent', platformEvent: `link:${linkId}` }],\n concurrency: { mode: 'latest' },\n errorPolicy: { mode: 'failStop' },\n diagnosticsLevel: 'off',\n }\n\n return Meta.attachMeta(effect, {\n definition,\n kind: 'link',\n }) as ProcessEffect<E, R>\n}\n","import type { AnyModuleShape, ModuleHandle } from './internal/module.js'\n\n/**\n * Handle(消费面): 在 `.logic()` 内消费依赖的“可用视图”。\n *\n * - `ModuleHandle`: `yield* $.use(SomeModule)` 返回的只读句柄(read/changes/dispatch/actions)。\n * - `ServiceHandle`: `yield* $.use(ServiceTag)` 返回的 Service 实例(推荐同样提供 `.controller` 作为命令面)。\n *\n * 设计目标:\n * - 为“做成自定义 Module” vs “做成可注入 Service(Tag + Layer)”提供统一语言与判断依据;\n * - 让业务逻辑消费方式趋同:拿到 handle → read/observe → 通过 controller 发命令(若存在)。\n */\n\nexport interface WithController<C extends object = object> {\n readonly controller: C\n}\n\nexport type ControllerOf<T> = T extends WithController<infer C> ? C : never\n\nexport type ServiceHandle<Svc extends object> = Svc\n\nexport const isModuleHandle = (value: unknown): value is ModuleHandle<AnyModuleShape> => {\n if (typeof value !== 'object' || value === null) return false\n const v = value as any\n return (\n typeof v.read === 'function' &&\n typeof v.changes === 'function' &&\n typeof v.dispatch === 'function' &&\n typeof v.actions === 'object' &&\n v.actions !== null &&\n typeof v.actions$ === 'object' &&\n v.actions$ !== null\n )\n}\n\nexport const hasController = (value: unknown): value is WithController => {\n if (typeof value !== 'object' || value === null) return false\n const v = value as any\n return typeof v.controller === 'object' && v.controller !== null\n}\n\n","import type { AnyModuleShape, ModuleShape } from './internal/module.js'\nimport type * as Logic from './Logic.js'\nimport * as FlowRuntime from './internal/runtime/FlowRuntime.js'\n\n// Flow: public API for business flow orchestration (wraps internal/runtime/FlowRuntime kernel).\n\nexport type Env<Sh extends AnyModuleShape, R = unknown> = Logic.Env<Sh, R>\n\nexport type Api<Sh extends ModuleShape<any, any>, R = never> = FlowRuntime.Api<Sh, R>\n\nexport const make = FlowRuntime.make\n","import type { FluentMatch, FluentMatchTag } from './Logic.js'\nimport * as Internal from './internal/MatchBuilder.js'\n\n// MatchBuilder: public Fluent Match DSL; implementation delegates to internal/MatchBuilder.\n\nexport const makeMatch: <V>(value: V) => FluentMatch<V> = Internal.makeMatch\n\nexport const makeMatchTag: <V extends { _tag: string }>(value: V) => FluentMatchTag<V> = Internal.makeMatchTag\n","import * as ReadQueryCore from './internal/runtime/core/ReadQuery.js'\n\nexport type ReadLane = ReadQueryCore.ReadLane\nexport type ReadProducer = ReadQueryCore.ReadProducer\nexport type EqualsKind = ReadQueryCore.EqualsKind\nexport type ReadsDigest = ReadQueryCore.ReadsDigest\n\nexport type ReadQueryStaticIr = ReadQueryCore.ReadQueryStaticIr\n\nexport type ReadQuery<S, V> = ReadQueryCore.ReadQuery<S, V>\nexport type ReadQueryCompiled<S, V> = ReadQueryCore.ReadQueryCompiled<S, V>\nexport type ReadQueryInput<S, V> = ReadQueryCore.ReadQueryInput<S, V>\n\nexport const isReadQuery = ReadQueryCore.isReadQuery\n\nexport const make = ReadQueryCore.make\n\nexport const compile = ReadQueryCore.compile\n","// TraitLifecycle: shared lower-level interface for Form/Query (@logixjs/core/TraitLifecycle, Phase 2 placeholder).\n//\n// - Exposes serializable FieldRef and unified request protocols.\n// - Concrete implementation lives in internal/trait-lifecycle/*; this module provides public API + type exports.\n\nimport type { BoundApi } from './Bound.js'\nimport { Effect } from 'effect'\nimport * as Internal from './internal/trait-lifecycle/index.js'\n\nexport type FieldRef = Internal.FieldRef\nexport type ValidateMode = Internal.ValidateRequest['mode']\nexport type ValidateRequest = Internal.ValidateRequest\nexport type ExecuteRequest = Internal.ExecuteRequest\nexport type CleanupRequest = Internal.CleanupRequest\nexport type SourceWiring = ReturnType<typeof Internal.makeSourceWiring>\n\nexport const Ref = Internal.Ref\n\nexport const scopedValidate = (bound: BoundApi<any, any>, request: ValidateRequest): Effect.Effect<void, never, any> =>\n Internal.scopedValidate(bound as any, request)\n\nexport const scopedExecute = (bound: BoundApi<any, any>, request: ExecuteRequest): Effect.Effect<void, never, any> =>\n Internal.scopedExecute(bound as any, request)\n\nexport const cleanup = (bound: BoundApi<any, any>, request: CleanupRequest): Effect.Effect<void, never, any> =>\n Internal.cleanup(bound as any, request)\n\nexport const makeSourceWiring = (bound: BoundApi<any, any>, module: unknown): SourceWiring =>\n Internal.makeSourceWiring(bound as any, module)\n\nexport const install = (bound: BoundApi<any, any>): Effect.Effect<void, never, any> => Internal.install(bound as any)\n","import { Effect, FiberRef, Option } from 'effect'\nimport type { BoundApi } from '../runtime/core/module.js'\nimport * as TaskRunner from '../runtime/core/TaskRunner.js'\nimport * as ReplayLog from '../runtime/core/ReplayLog.js'\nimport type { CleanupRequest, ExecuteRequest, FieldRef, ValidateRequest } from './model.js'\nimport type * as StateTraitValidate from '../state-trait/validate.js'\nimport * as RowId from '../state-trait/rowid.js'\nimport { getBoundInternals, getModuleTraitsProgram } from '../runtime/core/runtimeInternalsAccessor.js'\n\nexport type { CleanupRequest, ExecuteRequest, FieldRef, ValidateRequest }\n\n/**\n * Ref: builders for FieldRef (serializable and comparable).\n *\n * Notes:\n * - Phase 2 provides only minimal constructors.\n * - Array optimizations (RowID/trackBy) and richer ref semantics will land in later phases.\n */\nexport const Ref = {\n field: (path: string): FieldRef => ({ kind: 'field', path }),\n list: (path: string, listIndexPath?: ReadonlyArray<number>): FieldRef => ({\n kind: 'list',\n path,\n listIndexPath,\n }),\n item: (\n path: string,\n index: number,\n options?: { readonly listIndexPath?: ReadonlyArray<number>; readonly field?: string },\n ): FieldRef => ({\n kind: 'item',\n path,\n index,\n listIndexPath: options?.listIndexPath,\n field: options?.field,\n }),\n /**\n * fromValuePath:\n * - Parse a valuePath (e.g. \"items.0.warehouseId\") into a FieldRef.\n * - Supports a single index (required) and multi-level indices via listIndexPath (optional but recommended).\n *\n * Conventions:\n * - If numeric segments are present, return an item ref (the last index becomes item.index; preceding indices go into listIndexPath).\n * - If no numeric segments are present:\n * - \"items[]\" (pattern list root) returns a list ref.\n * - Otherwise return a field ref (including pattern fields like \"items[].x\").\n * - \"$root\" / empty string returns the root ref.\n */\n fromValuePath: (valuePath: string): FieldRef => {\n const raw = typeof valuePath === 'string' ? valuePath.trim() : ''\n if (!raw || raw === '$root') return Ref.root()\n\n const segments = raw.split('.').filter(Boolean)\n if (segments.length === 0) return Ref.root()\n\n const isIndex = (seg: string): boolean => /^[0-9]+$/.test(seg)\n const stripPattern = (seg: string): string => (seg.endsWith('[]') ? seg.slice(0, -2) : seg)\n\n const indexPositions: Array<{ readonly pos: number; readonly index: number }> = []\n for (let i = 0; i < segments.length; i++) {\n const seg = segments[i]!\n if (!isIndex(seg)) continue\n const index = Number(seg)\n if (!Number.isFinite(index) || index < 0) return Ref.field(raw)\n indexPositions.push({ pos: i, index })\n }\n\n // valuePath with indices => item ref\n if (indexPositions.length > 0) {\n const last = indexPositions[indexPositions.length - 1]!\n const listIndexPath = indexPositions.slice(0, -1).map((p) => p.index)\n\n const listPath = segments\n .slice(0, last.pos)\n .filter((seg) => !isIndex(seg))\n .map(stripPattern)\n .join('.')\n\n if (!listPath) return Ref.field(raw)\n\n const fieldRest = segments\n .slice(last.pos + 1)\n .map(stripPattern)\n .join('.')\n\n return Ref.item(listPath, last.index, {\n listIndexPath: listIndexPath.length > 0 ? listIndexPath : undefined,\n field: fieldRest ? fieldRest : undefined,\n })\n }\n\n // pattern list root => list ref\n if (segments.some((s) => s.includes('[]'))) {\n const last = segments[segments.length - 1]!\n if (last.endsWith('[]')) {\n return Ref.list(segments.map(stripPattern).join('.'))\n }\n }\n\n return Ref.field(raw)\n },\n root: (): FieldRef => ({ kind: 'root' }),\n} as const\n\n/**\n * scopedValidate (placeholder): in later phases this will compute the minimal set via ReverseClosure and write back into the error tree.\n */\nexport const scopedValidate = (bound: BoundApi<any, any>, request: ValidateRequest): Effect.Effect<void, never, any> =>\n Effect.gen(function* () {\n let internals: ReturnType<typeof getBoundInternals> | undefined\n try {\n internals = getBoundInternals(bound as any)\n } catch {\n return\n }\n\n const enqueue = internals.traits.enqueueStateTraitValidateRequest as unknown as\n | ((r: StateTraitValidate.ScopedValidateRequest) => void)\n | undefined\n\n if (!enqueue) return\n\n const toTarget = (ref: FieldRef): StateTraitValidate.ValidateTarget => {\n if (ref.kind === 'root') return { kind: 'root' }\n if (ref.kind === 'field') return { kind: 'field', path: ref.path }\n if (ref.kind === 'list') {\n return {\n kind: 'list',\n path: ref.path,\n ...(ref.listIndexPath ? { listIndexPath: ref.listIndexPath } : {}),\n }\n }\n return {\n kind: 'item',\n path: ref.path,\n index: ref.index,\n ...(ref.listIndexPath ? { listIndexPath: ref.listIndexPath } : {}),\n field: ref.field,\n }\n }\n\n const internal: StateTraitValidate.ScopedValidateRequest = {\n mode: request.mode as any,\n target: toTarget(request.target),\n }\n\n const inTxn = yield* FiberRef.get(TaskRunner.inSyncTransactionFiber)\n if (inTxn) {\n enqueue(internal)\n return\n }\n\n yield* internals.txn.runWithStateTransaction({ kind: 'trait', name: 'scopedValidate', details: request }, () =>\n Effect.sync(() => {\n enqueue(internal)\n }),\n )\n })\n\n/**\n * scopedExecute (placeholder): a unified execution entrypoint for query/resource actions (refresh/invalidate, etc.).\n */\nexport const scopedExecute = (bound: BoundApi<any, any>, request: ExecuteRequest): Effect.Effect<void, never, any> =>\n Effect.gen(function* () {\n if (request.kind === 'source:refresh') {\n const toFieldPath = (ref: FieldRef): string | undefined => {\n if (ref.kind === 'root') return undefined\n if (ref.kind === 'field' || ref.kind === 'list') return ref.path\n const base = `${ref.path}[]`\n return ref.field ? `${base}.${ref.field}` : base\n }\n\n const fieldPath = toFieldPath(request.target)\n if (!fieldPath) {\n return\n }\n\n yield* bound.traits.source.refresh(fieldPath) as Effect.Effect<void, never, any>\n return\n }\n\n if (request.kind !== 'query:invalidate') {\n return\n }\n\n const replayLogOpt = yield* Effect.serviceOption(ReplayLog.ReplayLog)\n if (Option.isNone(replayLogOpt)) {\n return\n }\n\n let moduleId: string | undefined\n let instanceId: string | undefined\n try {\n const internals = getBoundInternals(bound as any)\n moduleId = internals.moduleId\n instanceId = internals.instanceId\n } catch {\n moduleId = undefined\n instanceId = undefined\n }\n\n yield* replayLogOpt.value.record({\n _tag: 'InvalidateRequest',\n timestamp: Date.now(),\n moduleId,\n instanceId,\n kind: 'query',\n target: 'query',\n meta: request.request,\n })\n })\n\n/**\n * cleanup (placeholder): deterministic cleanup under structural changes (errors/ui/resources).\n */\nexport const cleanup = (bound: BoundApi<any, any>, request: CleanupRequest): Effect.Effect<void, never, any> =>\n Effect.gen(function* () {\n const apply = () =>\n bound.state.mutate((draft) => {\n const clearAt = (root: 'errors' | 'ui', path: string): void => {\n if (!path) return\n RowId.unsetAtPathMutating(draft, `${root}.${path}`)\n }\n\n if (request.kind === 'field:unregister') {\n const target = request.target\n if (target.kind !== 'field') return\n clearAt('errors', target.path)\n clearAt('ui', target.path)\n return\n }\n\n if (request.kind === 'list:item:remove') {\n const target = request.target\n if (target.kind !== 'item') return\n const base = `${target.path}.${target.index}`\n const path = target.field ? `${base}.${target.field}` : base\n clearAt('errors', path)\n clearAt('ui', path)\n return\n }\n\n if (request.kind === 'list:reorder') {\n // Reorder does not change the external index semantics by itself.\n // Alignment of errors/ui should be handled by domain reducers or higher-level logic; keep it a no-op here.\n return\n }\n })\n\n const inTxn = yield* FiberRef.get(TaskRunner.inSyncTransactionFiber)\n if (inTxn) {\n return yield* apply()\n }\n\n let runWithTxn:\n | ((\n origin: { readonly kind: string; readonly name?: string; readonly details?: unknown },\n body: () => Effect.Effect<void, never, any>,\n ) => Effect.Effect<void, never, any>)\n | undefined\n\n try {\n const internals = getBoundInternals(bound as any)\n runWithTxn = (origin, body) => internals.txn.runWithStateTransaction(origin as any, body)\n } catch {\n runWithTxn = undefined\n }\n\n if (!runWithTxn) {\n return yield* apply()\n }\n\n return yield* runWithTxn({ kind: 'trait', name: 'cleanup', details: request }, apply)\n })\n\ntype SourceWiring = {\n readonly setup: Effect.Effect<void, never, any>\n readonly refreshOnKeyChange: (changedPath: string) => Effect.Effect<void, never, any>\n}\n\nconst isAuxRootPath = (path: string): boolean =>\n path === 'errors' || path === 'ui' || path.startsWith('errors.') || path.startsWith('ui.')\n\nconst toPatternPath = (path: string): string => {\n if (!path) return path\n const segments = path.split('.').filter(Boolean)\n return segments\n .map((seg) => (/^[0-9]+$/.test(seg) ? '[]' : seg))\n .join('.')\n .replace(/\\.\\[\\]/g, '[]')\n}\n\nconst isDepAffectedByChange = (dep: string, changed: string): boolean => {\n if (!dep || !changed) return false\n if (dep === changed) return true\n if (changed.startsWith(`${dep}.`)) return true\n if (changed.startsWith(`${dep}[]`)) return true\n // list root structural change (e.g. changed=\"items\") should affect any list-item deps (e.g. dep=\"items[].x\").\n if (dep.startsWith(`${changed}[]`)) return true\n return false\n}\n\nexport const makeSourceWiring = (bound: BoundApi<any, any>, module: unknown): SourceWiring => {\n const program = getModuleTraitsProgram(module as any) as { readonly entries?: ReadonlyArray<any> } | undefined\n\n const sources = program?.entries?.filter((e) => e && e.kind === 'source') ?? []\n\n const sourceOnMount = sources.filter((e: any) =>\n Array.isArray(e?.meta?.triggers) ? e.meta.triggers.includes('onMount') : false,\n )\n\n const sourceOnKeyChange = sources.filter((e: any) =>\n Array.isArray(e?.meta?.triggers) ? e.meta.triggers.includes('onKeyChange') : false,\n )\n\n const setup = Effect.sync(() => {\n if (sourceOnMount.length === 0) return\n bound.lifecycle.onStart(\n Effect.forEach(sourceOnMount, (entry: any) => bound.traits.source.refresh(entry.fieldPath), {\n concurrency: 'unbounded',\n }).pipe(Effect.asVoid),\n )\n })\n\n const refreshOnKeyChange = (changedPath: string): Effect.Effect<void, never, any> =>\n Effect.gen(function* () {\n if (!changedPath || isAuxRootPath(changedPath)) return\n if (sourceOnKeyChange.length === 0) return\n\n const changedPattern = toPatternPath(changedPath)\n\n yield* Effect.forEach(\n sourceOnKeyChange,\n (entry: any) => {\n const deps = (entry?.meta?.deps ?? []) as ReadonlyArray<string>\n const affected = deps.some((dep) => isDepAffectedByChange(dep, changedPattern))\n if (!affected) return Effect.void\n return bound.traits.source.refresh(entry.fieldPath)\n },\n { concurrency: 'unbounded' },\n )\n }).pipe(Effect.asVoid)\n\n return { setup, refreshOnKeyChange }\n}\n\n/**\n * install (placeholder): the default wiring entrypoint for TraitLifecycle.\n *\n * Notes:\n * - Phase 2 only provides an entrypoint that feature packages can depend on.\n * - Concrete wiring for \"domain event → request → in-transaction execution\" will be composed by Form/Query default logics in later phases.\n */\nexport const install = (_bound: BoundApi<any, any>): Effect.Effect<void, never, any> => Effect.void\n","// Resource module: public facade (@logixjs/core/Resource).\n// Note: implementation lives in `src/internal/resource.ts` to avoid internal importing root submodules.\n\nimport type * as Internal from './internal/resource.js'\nimport * as Impl from './internal/resource.js'\n\nexport type ResourceSpec<Key, Out, Err, Env> = Internal.ResourceSpec<Key, Out, Err, Env>\nexport type AnyResourceSpec = Internal.AnyResourceSpec\nexport type ResourceStatus = Internal.ResourceStatus\nexport type ResourceSnapshot<Data = unknown, Err = unknown> = Internal.ResourceSnapshot<Data, Err>\nexport type ResourceRegistry = Internal.ResourceRegistry\nexport type Spec<Key, Out, Err, Env> = Internal.Spec<Key, Out, Err, Env>\n\nexport const keyHash = Impl.keyHash\nexport const Snapshot = Impl.Snapshot\nexport const internal = Impl.internal\nexport const make = Impl.make\nexport const layer = Impl.layer\n\nexport { ResourceRegistryTag } from './internal/resource.js'\n","import { Effect, Layer, ManagedRuntime, Option, Scope } from 'effect'\nimport type { AnyModuleShape, ModuleImpl } from './internal/module.js'\nimport type { AnyModule } from './Module.js'\nimport * as AppRuntimeImpl from './internal/runtime/AppRuntime.js'\nimport * as ModuleRuntime from './internal/runtime/ModuleRuntime.js'\nimport * as Debug from './Debug.js'\nimport type * as EffectOp from './EffectOp.js'\nimport * as EffectOpCore from './internal/runtime/core/EffectOpCore.js'\nimport * as RunSession from './internal/observability/runSession.js'\nimport type { ReadQueryFallbackReason as ReadQueryFallbackReasonCore } from './internal/runtime/core/ReadQuery.js'\nimport {\n ConcurrencyPolicyTag,\n ConcurrencyPolicyOverridesTag,\n type ReadQueryStrictGateRuntimeConfig,\n StateTransactionConfigTag,\n StateTransactionOverridesTag,\n type ConcurrencyPolicy,\n type ConcurrencyPolicyOverrides,\n type ConcurrencyPolicyPatch,\n type StateTransactionOverrides,\n type StateTransactionInstrumentation,\n type StateTransactionTraitConvergeOverrides,\n type TraitConvergeTimeSlicingPatch,\n type TxnLanesPatch,\n} from './internal/runtime/core/env.js'\nimport * as Middleware from './Middleware.js'\nimport { getRuntimeInternals } from './internal/runtime/core/runtimeInternalsAccessor.js'\nimport * as ScopeRegistry from './ScopeRegistry.js'\nimport {\n warnInvalidConcurrencyPolicyDevOnly,\n warnInvalidConcurrencyPolicyPatchDevOnly,\n warnInvalidStateTransactionOverridesDevOnly,\n warnInvalidStateTransactionRuntimeConfigDevOnly,\n warnInvalidStateTransactionTraitConvergeOverridesDevOnly,\n} from './internal/runtime/core/configValidation.js'\nimport * as ProgramRunner from './internal/runtime/ProgramRunner.js'\nimport type { ProgramRunContext } from './internal/runtime/ProgramRunner.context.js'\n\nexport type { ProgramRunContext } from './internal/runtime/ProgramRunner.context.js'\nexport {\n BootError,\n DisposeError,\n DisposeTimeoutError,\n MainError,\n type ProgramIdentity,\n type ProgramRunnerErrorTag,\n} from './internal/runtime/ProgramRunner.errors.js'\n\nexport interface OpenProgramOptions extends RuntimeOptions {\n readonly closeScopeTimeout?: number\n readonly handleSignals?: boolean\n}\n\nexport interface RunProgramOptions<Args = unknown> extends OpenProgramOptions {\n readonly args?: Args\n readonly exitCode?: boolean\n readonly reportError?: boolean\n}\n\nconst resolveRootImpl = <Sh extends AnyModuleShape>(\n root: ModuleImpl<any, Sh, any> | AnyModule,\n): ModuleImpl<any, Sh, any> =>\n ((root as any)?._tag === 'ModuleImpl'\n ? (root as ModuleImpl<any, Sh, any>)\n : ((root as any)?.impl as ModuleImpl<any, Sh, any>)) satisfies ModuleImpl<any, Sh, any>\n\n/**\n * Runtime-level StateTransaction defaults.\n *\n * Applied as the `runtime_default` baseline; modules and providers may override.\n */\nexport interface RuntimeStateTransactionOptions {\n readonly instrumentation?: StateTransactionInstrumentation\n readonly traitConvergeBudgetMs?: number\n readonly traitConvergeDecisionBudgetMs?: number\n readonly traitConvergeMode?: 'auto' | 'full' | 'dirty'\n readonly traitConvergeTimeSlicing?: TraitConvergeTimeSlicingPatch\n /** Txn lanes configuration at the `runtime_default` baseline (enabled by default). */\n readonly txnLanes?: TxnLanesPatch\n readonly traitConvergeOverridesByModuleId?: Readonly<Record<string, StateTransactionTraitConvergeOverrides>>\n /** Txn lanes overrides at the `runtime_module` layer. */\n readonly txnLanesOverridesByModuleId?: Readonly<Record<string, TxnLanesPatch>>\n}\n\nexport type ReadQueryFallbackReason = ReadQueryFallbackReasonCore\n\nexport interface RuntimeReadQueryStrictGateOptions {\n /**\n * Strict gate mode for ReadQuery fallbacks.\n *\n * - `off`: disabled (default).\n * - `warn`: allow but emit structured diagnostics.\n * - `error`: fail on forbidden fallbacks (CI/perf gate).\n */\n readonly mode?: 'off' | 'warn' | 'error'\n /**\n * Selectors that must stay on the static lane (keyed by selectorId).\n *\n * When undefined, the implementation decides the gate coverage (typically `all`).\n */\n readonly requireStatic?: {\n readonly selectorIds?: ReadonlyArray<string>\n readonly modules?: ReadonlyArray<string>\n }\n /**\n * Fine-grained kill switch: deny specific fallback reasons (e.g. `unstableSelectorId`).\n */\n readonly denyFallbackReasons?: ReadonlyArray<ReadQueryFallbackReason>\n}\n\nexport interface RuntimeReadQueryOptions {\n readonly strictGate?: RuntimeReadQueryStrictGateOptions\n}\n\nexport interface RuntimeOptions {\n readonly layer?: Layer.Layer<any, never, never>\n readonly onError?: (cause: import('effect').Cause.Cause<unknown>) => Effect.Effect<void>\n /**\n * Optional runtime label (e.g. `AppDemoRuntime`) for Debug / DevTools grouping.\n */\n readonly label?: string\n /**\n * Optional Debug console output configuration.\n *\n * - `true`: enable `Debug.layer()` (auto mode).\n * - `Debug.DebugLayerOptions`: forwarded to `Debug.layer(options)`.\n *\n * Advanced: for full control, omit this option and provide your own Debug layers via `options.layer`.\n */\n readonly debug?: true | Debug.DebugLayerOptions\n readonly middleware?: EffectOp.MiddlewareStack\n /**\n * Enable Devtools (explicit override).\n *\n * - `true`: use default `DevtoolsRuntimeOptions`.\n * - `DevtoolsRuntimeOptions`: customize hub buffer size, DebugObserver filters, etc.\n */\n readonly devtools?: true | DevtoolsRuntimeOptions\n /**\n * Runtime-level StateTransaction defaults.\n *\n * When not provided, modules fall back to NODE_ENV-based defaults; modules may override via\n * `ModuleDef.implement({ stateTransaction })`.\n */\n readonly stateTransaction?: RuntimeStateTransactionOptions\n /**\n * Runtime-level concurrency control plane.\n *\n * Converges unbounded concurrency into bounded (default 16), with module/provider overrides.\n */\n readonly concurrencyPolicy?: ConcurrencyPolicy\n /**\n * ReadQuery governance (e.g. strict gate policies).\n */\n readonly readQuery?: RuntimeReadQueryOptions\n}\n\nexport interface DevtoolsRuntimeOptions {\n /** Hub ring buffer capacity (events). Default: 500. */\n readonly bufferSize?: number\n /**\n * Diagnostics level for exportable Devtools events.\n *\n * Forwarded to `Debug.devtoolsHubLayer({ diagnosticsLevel })`.\n * Default: `\"light\"`.\n */\n readonly diagnosticsLevel?: Debug.DiagnosticsLevel\n /**\n * Trait converge diagnostics sampling config.\n *\n * Forwarded to `Debug.devtoolsHubLayer({ traitConvergeDiagnosticsSampling })`.\n */\n readonly traitConvergeDiagnosticsSampling?: Debug.TraitConvergeDiagnosticsSamplingConfig\n /** DebugObserver config for `trace:effectop`; undefined means full observation. */\n readonly observer?: Middleware.DebugObserverConfig | false\n /** Reserved: React render sampling / throttling config (consumed by `@logixjs/react`). */\n readonly sampling?: {\n readonly reactRenderSampleRate?: number\n }\n}\n\n/**\n * Construct an application runtime from a root module.\n *\n * - Uses the root module + layer as the composition root.\n * - Forks root processes within the runtime Scope.\n * - Exposes a ManagedRuntime; the full Env is provided by `root.layer + options.layer`.\n */\nexport const make = (\n root: ModuleImpl<any, AnyModuleShape, any> | AnyModule,\n options?: RuntimeOptions,\n): ManagedRuntime.ManagedRuntime<any, never> => {\n const rootImpl = resolveRootImpl(root)\n\n warnInvalidConcurrencyPolicyDevOnly(options?.concurrencyPolicy, 'Runtime.make options.concurrencyPolicy')\n warnInvalidStateTransactionRuntimeConfigDevOnly(options?.stateTransaction, 'Runtime.make options.stateTransaction')\n\n const debugLayer =\n options?.debug === true\n ? (Debug.layer() as Layer.Layer<any, never, never>)\n : options?.debug\n ? (Debug.layer(options.debug) as Layer.Layer<any, never, never>)\n : (Layer.empty as Layer.Layer<any, never, never>)\n\n // Base Env: fully defined by caller-provided Layers (e.g. Config / platform services).\n // Debug sinks can be enabled via options.debug, or manually composed via options.layer.\n const userLayer = (options?.layer ?? Layer.empty) as Layer.Layer<any, never, never>\n const userWithDebug = options?.debug ? (Layer.mergeAll(userLayer, debugLayer) as Layer.Layer<any, never, never>) : userLayer\n\n let middlewareStack: EffectOp.MiddlewareStack = options?.middleware ?? []\n\n // When devtools is explicitly enabled:\n // 1) Append DebugObserver (`trace:effectop`).\n // 2) Mount the DevtoolsHub sink in appLayer (process-level event aggregation).\n const devtoolsOptions: DevtoolsRuntimeOptions | undefined = options?.devtools === true ? {} : options?.devtools\n\n if (options?.devtools) {\n const observerConfig = devtoolsOptions?.observer === false ? false : devtoolsOptions?.observer\n middlewareStack = Middleware.withDebug(middlewareStack, {\n logger: false,\n observer: observerConfig,\n })\n }\n\n // Optional: inject the EffectOp MiddlewareStack service for this Runtime,\n // so runtime code (e.g. StateTrait.install) can resolve the unified EffectOp bus configuration from Env.\n const effectOpLayer: Layer.Layer<any, never, never> =\n middlewareStack.length > 0\n ? (Layer.succeed(EffectOpCore.EffectOpMiddlewareTag, {\n stack: middlewareStack,\n }) as Layer.Layer<any, never, never>)\n : (Layer.empty as Layer.Layer<any, never, never>)\n\n const baseLayer =\n options?.label != null\n ? (Layer.mergeAll(Debug.runtimeLabel(options.label), userWithDebug) as Layer.Layer<any, never, never>)\n : userWithDebug\n\n const baseWithDevtools = options?.devtools\n ? (Debug.devtoolsHubLayer(baseLayer, {\n bufferSize: devtoolsOptions?.bufferSize,\n diagnosticsLevel: devtoolsOptions?.diagnosticsLevel,\n traitConvergeDiagnosticsSampling: devtoolsOptions?.traitConvergeDiagnosticsSampling,\n }) as Layer.Layer<any, never, never>)\n : baseLayer\n\n // NOTE: runSession should be overrideable by callers (e.g. CI/trial-run injecting a stable runId).\n // In Layer.mergeAll, later layers override earlier ones; keep the default layer first.\n const appLayer = Layer.mergeAll(\n RunSession.runSessionLayer(),\n ScopeRegistry.layer(),\n baseWithDevtools,\n effectOpLayer,\n ) as Layer.Layer<any, never, never>\n\n const readQueryStrictGate: ReadQueryStrictGateRuntimeConfig | undefined = (() => {\n const strictGate = options?.readQuery?.strictGate\n if (!strictGate) return undefined\n\n const mode = strictGate.mode ?? 'off'\n if (mode === 'off') return undefined\n\n return {\n mode,\n requireStatic: strictGate.requireStatic,\n denyFallbackReasons: strictGate.denyFallbackReasons,\n }\n })()\n\n const appConfig: AppRuntimeImpl.LogixAppConfig<any> = {\n layer: appLayer,\n modules: [AppRuntimeImpl.provide(rootImpl.module, rootImpl.layer as Layer.Layer<any, any, any>)],\n processes: rootImpl.processes ?? [],\n onError: options?.onError,\n stateTransaction: options?.stateTransaction,\n concurrencyPolicy: options?.concurrencyPolicy,\n readQueryStrictGate,\n }\n\n const app = AppRuntimeImpl.makeApp(appConfig)\n return app.makeRuntime() as ManagedRuntime.ManagedRuntime<any, never>\n}\n\n/**\n * Resourceful entry: returns a scope-bound ProgramRunContext (booted and ready).\n */\nexport const openProgram = <Sh extends AnyModuleShape>(\n root: ModuleImpl<any, Sh, any> | AnyModule,\n options?: OpenProgramOptions,\n): Effect.Effect<ProgramRunContext<Sh>, unknown, Scope.Scope> =>\n ProgramRunner.openProgram(\n (rootImpl, runtimeOptions) => make(rootImpl, runtimeOptions as RuntimeOptions),\n resolveRootImpl(root),\n options,\n )\n\n/**\n * One-shot entry: boot → main(ctx,args) → dispose.\n */\nexport const runProgram = async <Sh extends AnyModuleShape, Args, A, E, R>(\n root: ModuleImpl<any, Sh, any> | AnyModule,\n main: (ctx: ProgramRunContext<Sh>, args: Args) => Effect.Effect<A, E, R>,\n options?: RunProgramOptions<Args>,\n): Promise<A> =>\n ProgramRunner.runProgram(\n (rootImpl, runtimeOptions) => make(rootImpl, runtimeOptions as RuntimeOptions),\n resolveRootImpl(root),\n main,\n options,\n )\n\n/**\n * Provider-scoped StateTransactionOverrides layer.\n *\n * Use it to apply local overrides on top of the `runtime_default` baseline.\n */\nexport const stateTransactionOverridesLayer = (\n overrides: StateTransactionOverrides,\n): Layer.Layer<any, never, never> => {\n warnInvalidStateTransactionOverridesDevOnly(overrides, 'Runtime.stateTransactionOverridesLayer')\n return Layer.succeed(StateTransactionOverridesTag, overrides) as Layer.Layer<any, never, never>\n}\n\n/**\n * Provider-scoped ConcurrencyPolicyOverrides layer.\n *\n * Use it to apply local overrides on top of the `runtime_default` baseline.\n */\nexport const concurrencyPolicyOverridesLayer = (\n overrides: ConcurrencyPolicyOverrides,\n): Layer.Layer<any, never, never> => {\n warnInvalidConcurrencyPolicyDevOnly(overrides, 'Runtime.concurrencyPolicyOverridesLayer')\n return Layer.succeed(ConcurrencyPolicyOverridesTag, overrides) as Layer.Layer<any, never, never>\n}\n\n/**\n * Hot-switch Trait converge overrides for a moduleId.\n *\n * This mutates the `runtime_module` patch map only; provider overrides still take precedence.\n */\nexport const setTraitConvergeOverride = (\n runtime: ManagedRuntime.ManagedRuntime<any, never>,\n moduleId: string,\n overrides: StateTransactionTraitConvergeOverrides | undefined,\n): void => {\n warnInvalidStateTransactionTraitConvergeOverridesDevOnly(overrides, `Runtime.setTraitConvergeOverride(${moduleId})`)\n\n runtime.runSync(\n Effect.gen(function* () {\n const runtimeConfigOpt = yield* Effect.serviceOption(StateTransactionConfigTag)\n\n if (Option.isNone(runtimeConfigOpt)) {\n return\n }\n\n // NOTE: runtime config lives in Env as a Service; hot-switch by replacing the per-module patch map.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const runtimeConfig: any = runtimeConfigOpt.value\n const next = {\n ...(runtimeConfig.traitConvergeOverridesByModuleId ?? {}),\n }\n\n if (overrides) {\n next[moduleId] = overrides\n } else {\n delete next[moduleId]\n }\n\n runtimeConfig.traitConvergeOverridesByModuleId = next\n }),\n )\n}\n\n/**\n * Hot-switch ConcurrencyPolicy patch for a moduleId.\n *\n * This mutates the `runtime_module` patch map only; provider overrides still take precedence.\n */\nexport const setConcurrencyPolicyOverride = (\n runtime: ManagedRuntime.ManagedRuntime<any, never>,\n moduleId: string,\n patch: ConcurrencyPolicyPatch | undefined,\n): void => {\n warnInvalidConcurrencyPolicyPatchDevOnly(patch, `Runtime.setConcurrencyPolicyOverride(${moduleId})`)\n\n runtime.runSync(\n Effect.gen(function* () {\n const runtimeConfigOpt = yield* Effect.serviceOption(ConcurrencyPolicyTag)\n\n if (Option.isNone(runtimeConfigOpt)) {\n return\n }\n\n // NOTE: runtime config lives in Env as a Service; hot-switch by replacing the per-module patch map.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const runtimeConfig: any = runtimeConfigOpt.value\n const next = {\n ...(runtimeConfig.overridesByModuleId ?? {}),\n }\n\n if (patch) {\n next[moduleId] = patch\n } else {\n delete next[moduleId]\n }\n\n runtimeConfig.overridesByModuleId = next\n }),\n )\n}\n\n/**\n * Apply a transaction snapshot for time-travel replay (dev/test).\n *\n * - `moduleId` / `instanceId` match Debug events.\n * - `mode`: `before` replays pre-transaction; `after` replays post-commit.\n *\n * No-op if the runtime/instance cannot be resolved.\n */\nexport const applyTransactionSnapshot = (\n moduleId: string,\n instanceId: string,\n txnId: string,\n mode: 'before' | 'after',\n): Effect.Effect<void, never, any> =>\n Effect.gen(function* () {\n const runtime = ModuleRuntime.getRuntimeByModuleAndInstance<any, any>(moduleId, instanceId)\n\n if (!runtime) {\n return\n }\n\n try {\n yield* getRuntimeInternals(runtime as any).txn.applyTransactionSnapshot(txnId, mode)\n } catch {\n return\n }\n })\n","import { Context, Deferred, Effect, Layer, ManagedRuntime } from 'effect'\nimport {\n ConcurrencyPolicyTag,\n ReadQueryStrictGateConfigTag,\n StateTransactionConfigTag,\n type ConcurrencyPolicy,\n type ReadQueryStrictGateRuntimeConfig,\n type StateTransactionRuntimeConfig,\n} from './core/env.js'\nimport { RootContextTag, type RootContext } from './core/RootContext.js'\nimport * as ProcessRuntime from './core/process/ProcessRuntime.js'\nimport type { AnyModuleShape, ModuleTag, ModuleRuntime, StateOf, ActionOf } from './core/module.js'\n\n/**\n * AppModuleEntry: a module entry produced by Logix.provide.\n *\n * - module: the Module definition object (both a Tag and a carrier of shape info + factory capability).\n * - layer: the runtime Layer for the Module.\n */\nexport interface AppModuleEntry {\n readonly module: ModuleTag<any, any>\n readonly layer: Layer.Layer<any, any, any>\n /**\n * Optional: list of Service Tags provided by this module's layer.\n *\n * - Used only during app assembly for tag collision detection and Env topology analysis.\n * - Internally, AppRuntime assembly can declare this explicitly via provideWithTags.\n * - Does not affect runtime behavior; if omitted, the module layer is treated as \"no explicit service tags declared\".\n */\n readonly serviceTags?: ReadonlyArray<Context.Tag<any, any>>\n}\n\nexport interface LogixAppConfig<R> {\n readonly layer: Layer.Layer<R, never, never>\n readonly modules: ReadonlyArray<AppModuleEntry>\n readonly processes: ReadonlyArray<Effect.Effect<void, any, any>>\n readonly onError?: (cause: import('effect').Cause.Cause<unknown>) => Effect.Effect<void>\n /**\n * Runtime-level default StateTransaction config:\n * - If not provided, each ModuleRuntime falls back to NODE_ENV-based default instrumentation.\n * - If instrumentation is provided, it becomes the default instrumentation for modules under this Runtime;\n * individual modules may still override it via ModuleImpl.stateTransaction.\n */\n readonly stateTransaction?: StateTransactionRuntimeConfig\n /**\n * Runtime-level concurrency policy:\n * - If not provided, each entrypoint falls back to builtin defaults (e.g. concurrencyLimit=16).\n * - If provided, it becomes the default policy for modules under this Runtime;\n * individual modules may still override via runtime_module/provider (merged by ModuleRuntime resolver).\n */\n readonly concurrencyPolicy?: ConcurrencyPolicy\n /**\n * ReadQuery strict gate (057):\n * - Used in CI/perf gates to upgrade dynamic fallbacks into failures or warnings.\n * - Not provided by default (preserve usability).\n */\n readonly readQueryStrictGate?: ReadQueryStrictGateRuntimeConfig\n}\n\nexport interface AppDefinition<R> {\n readonly definition: LogixAppConfig<R>\n readonly layer: Layer.Layer<R, never, never>\n readonly makeRuntime: () => ManagedRuntime.ManagedRuntime<R, never>\n}\n\ninterface TagInfo {\n readonly key: string\n readonly tag: Context.Tag<any, any>\n readonly ownerModuleId: string\n readonly source: 'module' | 'service'\n}\n\ninterface TagCollision {\n readonly key: string\n readonly conflicts: ReadonlyArray<TagInfo>\n}\n\ninterface TagCollisionError extends Error {\n readonly _tag: 'TagCollisionError'\n readonly collisions: ReadonlyArray<TagCollision>\n}\n\nconst getTagKey = (tag: Context.Tag<any, any>): string => {\n const anyTag = tag as any\n if (typeof anyTag.key === 'string') {\n return anyTag.key\n }\n if (typeof anyTag._id === 'string') {\n return anyTag._id\n }\n if (typeof anyTag.toString === 'function') {\n return anyTag.toString()\n }\n return '[unknown-tag]'\n}\n\nconst buildTagIndex = (entries: ReadonlyArray<AppModuleEntry>): Map<string, TagInfo[]> => {\n const index = new Map<string, TagInfo[]>()\n\n for (const entry of entries) {\n const ownerId = String(entry.module.id)\n\n // Record the Module tag itself.\n const moduleTag = entry.module as unknown as Context.Tag<any, any>\n const moduleKey = getTagKey(moduleTag)\n const moduleInfo: TagInfo = {\n key: moduleKey,\n tag: moduleTag,\n ownerModuleId: ownerId,\n source: 'module',\n }\n const existingModuleInfos = index.get(moduleKey)\n if (existingModuleInfos) {\n existingModuleInfos.push(moduleInfo)\n } else {\n index.set(moduleKey, [moduleInfo])\n }\n\n // Record explicitly declared service tags (if any).\n if (entry.serviceTags && entry.serviceTags.length > 0) {\n for (const tag of entry.serviceTags) {\n const key = getTagKey(tag)\n const info: TagInfo = {\n key,\n tag,\n ownerModuleId: ownerId,\n source: 'service',\n }\n const existingInfos = index.get(key)\n if (existingInfos) {\n existingInfos.push(info)\n } else {\n index.set(key, [info])\n }\n }\n }\n }\n\n return index\n}\n\nconst validateTags = (entries: ReadonlyArray<AppModuleEntry>): void => {\n const index = buildTagIndex(entries)\n const collisions: TagCollision[] = []\n\n for (const [key, infos] of index) {\n if (infos.length <= 1) {\n continue\n }\n const owners = new Set<string>()\n for (const info of infos) {\n owners.add(info.ownerModuleId)\n }\n // Treat it as a collision only when the same key appears under multiple different modules.\n // Duplicates within a single module are not considered an error (may come from multi-layer composition).\n if (owners.size > 1) {\n collisions.push({ key, conflicts: infos })\n }\n }\n\n if (collisions.length === 0) {\n return\n }\n\n const message =\n '[Logix] Tag collision detected:\\n' +\n collisions\n .map((c) => {\n const header = `- key: ${c.key}`\n const lines = c.conflicts.map((i) => ` - owner: ${i.ownerModuleId}, source: ${i.source}`)\n return [header, ...lines].join('\\n')\n })\n .join('\\n')\n\n const error: TagCollisionError = Object.assign(new Error(message), {\n _tag: 'TagCollisionError' as const,\n collisions,\n })\n\n throw error\n}\n\nexport const makeApp = <R>(config: LogixAppConfig<R>): AppDefinition<R> => {\n const seenIds = new Set<string>()\n for (const entry of config.modules) {\n const id = String(entry.module.id)\n\n if (seenIds.has(id)) {\n throw new Error(\n `[Logix] Duplicate Module ID/Tag detected: \"${id}\". \\nEnsure all modules in the application Runtime have unique IDs.`,\n )\n }\n seenIds.add(id)\n }\n\n // Validate tag collisions before merging layers.\n // This exposes \"the same ServiceTag implemented by multiple modules\" early, avoiding silent Env overrides.\n validateTags(config.modules)\n\n // If the Runtime provides a unified StateTransaction config, attach the corresponding service to the app Env.\n const stateTxnLayer: Layer.Layer<R, never, never> = config.stateTransaction\n ? (Layer.succeed(StateTransactionConfigTag, config.stateTransaction) as Layer.Layer<R, never, never>)\n : (Layer.empty as Layer.Layer<R, never, never>)\n\n // If the Runtime provides a unified ConcurrencyPolicy, attach the corresponding service to the app Env.\n const concurrencyPolicyLayer: Layer.Layer<R, never, never> = config.concurrencyPolicy\n ? (Layer.succeed(ConcurrencyPolicyTag, config.concurrencyPolicy) as Layer.Layer<R, never, never>)\n : (Layer.empty as Layer.Layer<R, never, never>)\n\n // If the Runtime provides a ReadQuery strict gate, attach the corresponding service to the app Env.\n const readQueryStrictGateLayer: Layer.Layer<R, never, never> = config.readQueryStrictGate\n ? (Layer.succeed(ReadQueryStrictGateConfigTag, config.readQueryStrictGate) as Layer.Layer<R, never, never>)\n : (Layer.empty as Layer.Layer<R, never, never>)\n\n const appModuleIds = config.modules.map((entry) => String(entry.module.id))\n const appId = appModuleIds.length === 1 ? appModuleIds[0]! : appModuleIds.slice().sort().join('~')\n\n const baseLayer = Layer.mergeAll(\n config.layer,\n stateTxnLayer,\n concurrencyPolicyLayer,\n readQueryStrictGateLayer,\n ProcessRuntime.layer(),\n Layer.effect(\n RootContextTag,\n Effect.gen(function* () {\n const ready = yield* Deferred.make<Context.Context<any>>()\n return { context: undefined, ready, appId, appModuleIds } satisfies RootContext\n }),\n ),\n ) as Layer.Layer<R, never, never>\n\n const moduleLayers = config.modules.map((entry) =>\n // Ensure each module layer can see the app Env (baseLayer) to avoid missing root env during initialization.\n Layer.provide(entry.layer, baseLayer),\n )\n const envLayer = moduleLayers.length > 0 ? Layer.mergeAll(baseLayer, ...moduleLayers) : baseLayer\n\n const finalLayer = Layer.unwrapScoped(\n Effect.gen(function* () {\n const scope = yield* Effect.scope\n\n // buildWithScope builds envLayer within the current scope and patches FiberRefs (e.g. Debug sinks).\n // We wrap it with diffFiberRefs to capture FiberRef patch changes, then feed the patch back as a Layer,\n // so FiberRef modifications are not \"washed out\" during assembly.\n const [patch, env] = yield* Effect.diffFiberRefs(Layer.buildWithScope(envLayer, scope))\n\n // After envLayer is built, complete RootContext (single source of truth for the root provider).\n // Note: module logics may already be forked and waiting for RootContext in the run phase; completing it here unblocks them.\n // RootContextTag is an internal service injected by AppRuntime (should not leak into external R types);\n // keep types minimal to avoid incorrect generic inference in Context.get.\n const rootContext = Context.get(env as Context.Context<any>, RootContextTag as any) as RootContext\n\n rootContext.context = env as Context.Context<any>\n yield* Deferred.succeed(rootContext.ready, env as Context.Context<any>)\n\n const processRuntime = Context.get(\n env as Context.Context<any>,\n ProcessRuntime.ProcessRuntimeTag as any,\n ) as ProcessRuntime.ProcessRuntime\n\n // After Env is fully ready, start app-level long-lived processes (Process / Link / watchers / host bridges, etc.).\n yield* Effect.forEach(\n config.processes,\n (process) =>\n Effect.gen(function* () {\n const installation = yield* Effect.provide(\n processRuntime.install(process as any, {\n scope: { type: 'app', appId },\n enabled: true,\n installedAt: 'appRuntime',\n }),\n env,\n )\n\n // Legacy fallback: a raw Effect is still allowed as a process host, but it has no Process static surface/diagnostics.\n if (installation === undefined) {\n yield* Effect.forkScoped(\n Effect.provide(config.onError ? Effect.catchAllCause(process, config.onError) : process, env),\n )\n }\n }),\n { discard: true },\n )\n\n const fiberRefsLayer = Layer.scopedDiscard(Effect.patchFiberRefs(patch))\n\n return Layer.mergeAll(Layer.succeedContext(env), fiberRefsLayer)\n }),\n ) as Layer.Layer<R, never, never>\n\n return {\n definition: config,\n layer: finalLayer,\n makeRuntime: () => ManagedRuntime.make(finalLayer),\n }\n}\n\n/**\n * Sugar: pair a Module with a runtime instance or layer for AppRuntime's modules config.\n */\nexport const provide = <Sh extends AnyModuleShape, R, E>(\n module: ModuleTag<any, Sh>,\n resource: Layer.Layer<ModuleRuntime<StateOf<Sh>, ActionOf<Sh>>, E, R> | ModuleRuntime<StateOf<Sh>, ActionOf<Sh>>,\n): AppModuleEntry => {\n const layer = isLayer(resource)\n ? resource\n : Layer.succeed(module, resource as ModuleRuntime<StateOf<Sh>, ActionOf<Sh>>)\n\n return { module, layer }\n}\n\n/**\n * Sugar: attach explicit ServiceTag metadata to an app module entry for tag collision detection.\n *\n * - serviceTags should include only services implemented by this module's layer.\n * - Internal-only helper: `@logixjs/core` blocks `./internal/*` in package exports, so this is not a public API surface.\n */\nexport const provideWithTags = <Sh extends AnyModuleShape, R, E>(\n module: ModuleTag<any, Sh>,\n resource: Layer.Layer<ModuleRuntime<StateOf<Sh>, ActionOf<Sh>>, E, R> | ModuleRuntime<StateOf<Sh>, ActionOf<Sh>>,\n serviceTags: ReadonlyArray<Context.Tag<any, any>>,\n): AppModuleEntry => {\n const base = provide(module, resource)\n return {\n ...base,\n serviceTags,\n }\n}\n\nconst isLayer = (value: unknown): value is Layer.Layer<any, any, any> =>\n typeof value === 'object' && value !== null && Layer.LayerTypeId in value\n","// Middleware namespace entry (@logixjs/core/Middleware).\n// - Helpers for EffectOp-based debugging/observation middleware.\n// - Query / DebugObserver capabilities extend from this namespace.\n\nimport { Effect } from 'effect'\nimport * as EffectOp from './EffectOp.js'\nimport * as Debug from './Debug.js'\n\nexport type Middleware = EffectOp.Middleware\nexport type MiddlewareStack = EffectOp.MiddlewareStack\n\nexport interface DebugLoggerConfig {\n /**\n * Optional: custom logger function (useful for capturing calls in tests).\n *\n * - When omitted, defaults to Effect.logDebug.\n */\n readonly logger?: (op: EffectOp.EffectOp<any, any, any>) => void\n}\n\n/**\n * Creates a simple debug logger middleware.\n *\n * - Logs once before executing the Effect.\n * - Does not change success/error semantics.\n */\nexport const makeDebugLogger =\n (config?: DebugLoggerConfig): Middleware =>\n <A, E, R>(op: EffectOp.EffectOp<A, E, R>): Effect.Effect<A, E, R> =>\n Effect.gen(function* () {\n // Observation-only capability: can be locally disabled by policy.\n if (op.meta?.policy?.disableObservers) {\n return yield* op.effect\n }\n if (config?.logger) {\n config.logger(op)\n } else {\n yield* Effect.logDebug(`[EffectOp] kind=${op.kind} name=${op.name}`)\n }\n return yield* op.effect\n })\n\n/**\n * applyDebug:\n * - Appends a DebugLogger middleware to the end of an existing MiddlewareStack.\n * - Returns a new stack; does not mutate the input array.\n */\nexport const applyDebug = (stack: MiddlewareStack, config?: DebugLoggerConfig): MiddlewareStack => [\n ...stack,\n makeDebugLogger(config),\n]\n\n/**\n * DebugObserverConfig:\n * - Optional filter: select which EffectOps to observe (by module / kind / name, etc.).\n */\nexport interface DebugObserverConfig {\n readonly filter?: (op: EffectOp.EffectOp<any, any, any>) => boolean\n}\n\n/**\n * makeDebugObserver:\n * - Funnels EffectOp events into DebugSink (EffectOp → Debug.Event).\n * - Uses `trace:*` events to forward a slim view of EffectOp into the Debug stream (must not carry effect closures):\n * - type: 'trace:effectop'\n * - moduleId: from op.meta?.moduleId (when present)\n * - data: { id, kind, name, payload, meta }\n *\n * Notes:\n * - Does not change the underlying Effect behavior; only adds Debug-side observation.\n * - Devtools / Timeline UIs can rebuild an EffectOp timeline from `trace:effectop` events.\n */\nexport const makeDebugObserver =\n (config?: DebugObserverConfig): Middleware =>\n <A, E, R>(op: EffectOp.EffectOp<A, E, R>): Effect.Effect<A, E, R> =>\n Effect.gen(function* () {\n // Observation-only capability: can be locally disabled by policy.\n if (op.meta?.policy?.disableObservers) {\n return yield* op.effect\n }\n if (!config?.filter || config.filter(op)) {\n const meta: any = op.meta ?? {}\n const slimOp = {\n id: op.id,\n kind: op.kind,\n name: op.name,\n payload: op.payload,\n meta: op.meta,\n }\n yield* Debug.record({\n type: 'trace:effectop',\n moduleId: typeof meta.moduleId === 'string' ? meta.moduleId : undefined,\n instanceId: typeof meta.instanceId === 'string' ? meta.instanceId : undefined,\n runtimeLabel: typeof meta.runtimeLabel === 'string' ? meta.runtimeLabel : undefined,\n txnSeq: typeof meta.txnSeq === 'number' && Number.isFinite(meta.txnSeq) ? Math.floor(meta.txnSeq) : undefined,\n data: slimOp,\n })\n }\n return yield* op.effect\n })\n\n/**\n * applyDebugObserver:\n * - Appends a DebugObserver middleware to the end of an existing MiddlewareStack.\n * - Returns a new stack; does not mutate the input array.\n */\nexport const applyDebugObserver = (stack: MiddlewareStack, config?: DebugObserverConfig): MiddlewareStack => [\n ...stack,\n makeDebugObserver(config),\n]\n\n/**\n * WithDebugOptions:\n * - High-level composition options for adding Debug capabilities onto an existing MiddlewareStack.\n *\n * Conventions:\n * - logger:\n * - undefined: enable the default DebugLogger (Effect.logDebug).\n * - function: use a custom logger(op) instead of the default.\n * - false: do not add DebugLogger middleware.\n * - observer:\n * - undefined: enable DebugObserver with default config.\n * - DebugObserverConfig: enable DebugObserver with the given config.\n * - false: do not add DebugObserver middleware.\n */\nexport interface WithDebugOptions {\n readonly logger?: DebugLoggerConfig['logger'] | false\n readonly observer?: DebugObserverConfig | false\n}\n\n/**\n * withDebug:\n * - Appends DebugLogger + DebugObserver presets onto an existing MiddlewareStack.\n * - Allows enabling/disabling logger/observer and configuring them via options.\n * - Returns a new stack; does not mutate the input array.\n *\n * @example\n *\n * let stack: MiddlewareStack = [metrics, timing]\n * stack = Middleware.withDebug(stack, {\n * logger: (op) => console.log(op.kind, op.name),\n * observer: { filter: (op) => op.kind !== 'service' },\n * })\n */\nexport const withDebug = (stack: MiddlewareStack, options?: WithDebugOptions): MiddlewareStack => {\n let next = stack\n\n // DebugLogger: enabled by default unless logger === false.\n if (options?.logger !== false) {\n const loggerConfig: DebugLoggerConfig | undefined =\n typeof options?.logger === 'function' ? { logger: options.logger } : undefined\n next = applyDebug(next, loggerConfig)\n }\n\n // DebugObserver: enabled by default unless observer === false.\n if (options?.observer !== false) {\n // observer === false has been filtered out; pass through the config object when provided.\n // undefined means using DebugObserver default behavior.\n const observerOption = options?.observer\n const observerConfig: DebugObserverConfig | undefined = observerOption === undefined ? undefined : observerOption\n next = applyDebugObserver(next, observerConfig)\n }\n\n return next\n}\n","import { Context, Layer, ManagedRuntime } from 'effect'\nimport { isDevEnv } from './Env.js'\n\nexport type ScopeId = string\n\ntype AnyTag = Context.Tag<any, any>\n\ntype LeaseId = number\n\ntype Entry = {\n readonly leaseId: LeaseId\n readonly value: unknown\n}\n\nexport interface ScopeRegistry {\n /**\n * Registers a scope-bound value (multi-party registration supported; the last registration wins for get()).\n *\n * Returns a release function that revokes this registration.\n */\n readonly register: <A>(scopeId: ScopeId, token: Context.Tag<any, A>, value: A) => { readonly release: () => void }\n\n /**\n * Reads the current value for a token under a scope (the last registered value).\n */\n readonly get: <A>(scopeId: ScopeId, token: Context.Tag<any, A>) => A | undefined\n\n /**\n * Deletes all registrations of a token under a scope (regardless of who registered them).\n */\n readonly clearToken: (scopeId: ScopeId, token: AnyTag) => void\n\n /**\n * Clears all tokens under a scope.\n */\n readonly clearScope: (scopeId: ScopeId) => void\n\n /**\n * Clears the entire registry.\n */\n readonly clearAll: () => void\n}\n\nexport class ScopeRegistryTag extends Context.Tag('@logixjs/core/ScopeRegistry')<ScopeRegistryTag, ScopeRegistry>() {}\n\n/**\n * Stores a \"ManagedRuntime handle for a scope\" in ScopeRegistry.\n *\n * Typical use case: reusing the same runtime scope (Env/Scope/FiberRef) across React subtrees / independent roots\n * by registering the runtime under a scopeId and retrieving it elsewhere.\n */\nexport class ScopedRuntimeTag extends Context.Tag('@logixjs/core/ScopeRegistry/ScopedRuntime')<\n ScopedRuntimeTag,\n ManagedRuntime.ManagedRuntime<any, any>\n>() {}\n\nexport const internal = {\n ScopeRegistryTag,\n ScopedRuntimeTag,\n}\n\nconst makeRegistry = (): ScopeRegistry => {\n let nextLeaseId: LeaseId = 0\n\n // scopeId -> (token -> stack(entries))\n const scopes = new Map<ScopeId, Map<AnyTag, Array<Entry>>>()\n\n const getStack = (scopeId: ScopeId, token: AnyTag): Array<Entry> => {\n const byToken = scopes.get(scopeId)\n if (byToken) {\n const stack = byToken.get(token)\n if (stack) return stack\n const created: Array<Entry> = []\n byToken.set(token, created)\n return created\n }\n const created: Array<Entry> = []\n const createdByToken = new Map<AnyTag, Array<Entry>>()\n createdByToken.set(token, created)\n scopes.set(scopeId, createdByToken)\n return created\n }\n\n const tryDeleteEmpty = (scopeId: ScopeId, token: AnyTag): void => {\n const byToken = scopes.get(scopeId)\n if (!byToken) return\n const stack = byToken.get(token)\n if (stack && stack.length === 0) {\n byToken.delete(token)\n }\n if (byToken.size === 0) {\n scopes.delete(scopeId)\n }\n }\n\n const register: ScopeRegistry['register'] = (scopeId, token, value) => {\n nextLeaseId += 1\n const leaseId = nextLeaseId\n const stack = getStack(scopeId, token as AnyTag)\n\n // dev: multiple registrations for the same scopeId+token often indicate scopeId collisions or lifecycle leaks.\n // React / concurrent rendering / Provider rebuilds may cause short re-entrancy, so this is a soft warning.\n if (isDevEnv() && stack.length > 0) {\n // eslint-disable-next-line no-console\n console.debug(\n `[ScopeRegistry] Multiple registrations detected for scopeId=\"${scopeId}\". ` +\n `This is allowed (LIFO), but usually indicates scopeId collisions or missing cleanup.`,\n )\n }\n\n stack.push({ leaseId, value })\n\n const release = () => {\n const stack2 = scopes.get(scopeId)?.get(token as AnyTag)\n if (!stack2 || stack2.length === 0) return\n\n // Common case: LIFO release\n const last = stack2[stack2.length - 1]\n if (last && last.leaseId === leaseId) {\n stack2.pop()\n tryDeleteEmpty(scopeId, token as AnyTag)\n return\n }\n\n // Fallback: releasing from the middle (linear scan)\n const idx = stack2.findIndex((e) => e.leaseId === leaseId)\n if (idx >= 0) {\n stack2.splice(idx, 1)\n tryDeleteEmpty(scopeId, token as AnyTag)\n }\n }\n\n return { release }\n }\n\n const get: ScopeRegistry['get'] = (scopeId, token) => {\n const stack = scopes.get(scopeId)?.get(token as AnyTag)\n if (!stack || stack.length === 0) return undefined\n return stack[stack.length - 1]!.value as any\n }\n\n const clearToken: ScopeRegistry['clearToken'] = (scopeId, token) => {\n const byToken = scopes.get(scopeId)\n if (!byToken) return\n byToken.delete(token)\n if (byToken.size === 0) {\n scopes.delete(scopeId)\n }\n }\n\n const clearScope: ScopeRegistry['clearScope'] = (scopeId) => {\n scopes.delete(scopeId)\n }\n\n const clearAll: ScopeRegistry['clearAll'] = () => {\n scopes.clear()\n }\n\n return { register, get, clearToken, clearScope, clearAll }\n}\n\nexport const layer = (): Layer.Layer<ScopeRegistryTag, never, never> => Layer.succeed(ScopeRegistryTag, makeRegistry())\n","// Shared env helpers (@logixjs/core/Env):\n// - getNodeEnv: reads the caller environment from globalThis.process.env.NODE_ENV.\n// - isDevEnv: treats NODE_ENV !== \"production\" as a dev environment.\n// The implementation lives in internal/runtime/core/env.ts to avoid duplication across packages.\n\nimport * as Internal from './internal/runtime/core/env.js'\n\nexport const getNodeEnv = (): string | undefined => Internal.getNodeEnv()\n\nexport const isDevEnv = (): boolean => Internal.isDevEnv()\n","import { Schema } from 'effect'\nimport { isDevEnv } from './env.js'\nimport {\n normalizeBoolean,\n normalizeNonNegativeNumber,\n normalizePositiveInt,\n normalizePositiveNumber,\n} from './normalize.js'\n\nconst PositiveIntSchema = Schema.Int.pipe(Schema.positive())\nconst PositiveNumberSchema = Schema.Number.pipe(Schema.positive())\nconst ConvergeModeSchema = Schema.Union(Schema.Literal('auto'), Schema.Literal('full'), Schema.Literal('dirty'))\nconst InstrumentationSchema = Schema.Union(Schema.Literal('full'), Schema.Literal('light'))\nconst ConcurrencyLimitSchema = Schema.Union(Schema.Literal('unbounded'), PositiveIntSchema)\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst warnDevOnly = (label: string, issues: ReadonlyArray<string>): void => {\n if (!isDevEnv()) return\n if (issues.length === 0) return\n // eslint-disable-next-line no-console\n console.warn(\n ['[Logix] Invalid runtime config detected.', `context: ${label}`, 'issues:']\n .concat(issues.map((i) => `- ${i}`))\n .join('\\n'),\n )\n}\n\nconst collectUnknownKeys = (\n obj: Record<string, unknown>,\n allowed: ReadonlySet<string>,\n prefix: string,\n): ReadonlyArray<string> => {\n const issues: string[] = []\n for (const key of Object.keys(obj)) {\n if (!allowed.has(key)) {\n issues.push(`${prefix}${key}: unknown key`)\n }\n }\n return issues\n}\n\nconst validateConcurrencyPolicyPatch = (obj: Record<string, unknown>, prefix: string): ReadonlyArray<string> => {\n const issues: string[] = []\n\n if ('concurrencyLimit' in obj && obj.concurrencyLimit != null) {\n if (!Schema.is(ConcurrencyLimitSchema)(obj.concurrencyLimit)) {\n issues.push(`${prefix}concurrencyLimit: expected positive int | \"unbounded\"`)\n }\n }\n\n if ('losslessBackpressureCapacity' in obj && obj.losslessBackpressureCapacity != null) {\n if (normalizePositiveInt(obj.losslessBackpressureCapacity) == null) {\n issues.push(`${prefix}losslessBackpressureCapacity: expected positive int`)\n }\n }\n\n if ('allowUnbounded' in obj && obj.allowUnbounded != null) {\n if (normalizeBoolean(obj.allowUnbounded) == null) {\n issues.push(`${prefix}allowUnbounded: expected boolean`)\n }\n }\n\n if ('pressureWarningThreshold' in obj && obj.pressureWarningThreshold != null) {\n const threshold = obj.pressureWarningThreshold\n if (!isRecord(threshold)) {\n issues.push(`${prefix}pressureWarningThreshold: expected object`)\n } else {\n const backlogCount = threshold['backlogCount']\n if (backlogCount != null) {\n if (normalizePositiveInt(backlogCount) == null) {\n issues.push(`${prefix}pressureWarningThreshold.backlogCount: expected positive int`)\n }\n }\n const backlogDurationMs = threshold['backlogDurationMs']\n if (backlogDurationMs != null) {\n if (normalizePositiveNumber(backlogDurationMs) == null) {\n issues.push(`${prefix}pressureWarningThreshold.backlogDurationMs: expected positive number`)\n }\n }\n }\n }\n\n if ('warningCooldownMs' in obj && obj.warningCooldownMs != null) {\n if (normalizePositiveNumber(obj.warningCooldownMs) == null) {\n issues.push(`${prefix}warningCooldownMs: expected positive number`)\n }\n }\n\n return issues\n}\n\nexport const warnInvalidConcurrencyPolicyDevOnly = (value: unknown, label: string): void => {\n if (!isDevEnv()) return\n if (value == null) return\n\n if (!isRecord(value)) {\n warnDevOnly(label, ['expected object'])\n return\n }\n\n const policy = value\n const issues: string[] = []\n\n issues.push(\n ...collectUnknownKeys(\n policy,\n new Set([\n 'concurrencyLimit',\n 'losslessBackpressureCapacity',\n 'allowUnbounded',\n 'pressureWarningThreshold',\n 'warningCooldownMs',\n 'overridesByModuleId',\n ]),\n '',\n ),\n )\n\n issues.push(...validateConcurrencyPolicyPatch(policy, ''))\n\n const overridesByModuleId = policy.overridesByModuleId\n if (overridesByModuleId != null) {\n if (!isRecord(overridesByModuleId)) {\n issues.push(`overridesByModuleId: expected record`)\n } else {\n for (const [moduleId, patch] of Object.entries(overridesByModuleId)) {\n const prefix = `overridesByModuleId.${moduleId}.`\n if (patch == null) continue\n if (!isRecord(patch)) {\n issues.push(`${prefix}<value>: expected object`)\n continue\n }\n issues.push(\n ...collectUnknownKeys(\n patch,\n new Set([\n 'concurrencyLimit',\n 'losslessBackpressureCapacity',\n 'allowUnbounded',\n 'pressureWarningThreshold',\n 'warningCooldownMs',\n ]),\n prefix,\n ),\n )\n issues.push(...validateConcurrencyPolicyPatch(patch, prefix))\n }\n }\n }\n\n warnDevOnly(label, issues)\n}\n\nexport const warnInvalidConcurrencyPolicyPatchDevOnly = (value: unknown, label: string): void => {\n if (!isDevEnv()) return\n if (value == null) return\n if (!isRecord(value)) {\n warnDevOnly(label, ['expected object'])\n return\n }\n\n const issues: string[] = []\n issues.push(\n ...collectUnknownKeys(\n value,\n new Set([\n 'concurrencyLimit',\n 'losslessBackpressureCapacity',\n 'allowUnbounded',\n 'pressureWarningThreshold',\n 'warningCooldownMs',\n ]),\n '',\n ),\n )\n issues.push(...validateConcurrencyPolicyPatch(value, ''))\n\n warnDevOnly(label, issues)\n}\n\nconst validateStateTransactionTraitOverrides = (\n obj: Record<string, unknown>,\n prefix: string,\n): ReadonlyArray<string> => {\n const issues: string[] = []\n\n if ('traitConvergeMode' in obj && obj.traitConvergeMode != null) {\n if (!Schema.is(ConvergeModeSchema)(obj.traitConvergeMode)) {\n issues.push(`${prefix}traitConvergeMode: expected \"auto\" | \"full\" | \"dirty\"`)\n }\n }\n if ('traitConvergeBudgetMs' in obj && obj.traitConvergeBudgetMs != null) {\n if (normalizePositiveNumber(obj.traitConvergeBudgetMs) == null) {\n issues.push(`${prefix}traitConvergeBudgetMs: expected positive number`)\n }\n }\n if ('traitConvergeDecisionBudgetMs' in obj && obj.traitConvergeDecisionBudgetMs != null) {\n if (normalizePositiveNumber(obj.traitConvergeDecisionBudgetMs) == null) {\n issues.push(`${prefix}traitConvergeDecisionBudgetMs: expected positive number`)\n }\n }\n if ('traitConvergeTimeSlicing' in obj && obj.traitConvergeTimeSlicing != null) {\n const timeSlicing = obj.traitConvergeTimeSlicing\n if (!isRecord(timeSlicing)) {\n issues.push(`${prefix}traitConvergeTimeSlicing: expected object`)\n } else {\n const tsPrefix = `${prefix}traitConvergeTimeSlicing.`\n issues.push(...collectUnknownKeys(timeSlicing, new Set(['enabled', 'debounceMs', 'maxLagMs']), tsPrefix))\n\n if ('enabled' in timeSlicing && timeSlicing.enabled != null) {\n if (typeof timeSlicing.enabled !== 'boolean') {\n issues.push(`${tsPrefix}enabled: expected boolean`)\n }\n }\n if ('debounceMs' in timeSlicing && timeSlicing.debounceMs != null) {\n if (normalizePositiveNumber(timeSlicing.debounceMs) == null) {\n issues.push(`${tsPrefix}debounceMs: expected positive number`)\n }\n }\n if ('maxLagMs' in timeSlicing && timeSlicing.maxLagMs != null) {\n if (normalizePositiveNumber(timeSlicing.maxLagMs) == null) {\n issues.push(`${tsPrefix}maxLagMs: expected positive number`)\n }\n }\n }\n }\n\n return issues\n}\n\nconst validateTxnLanesPatch = (obj: Record<string, unknown>, prefix: string): ReadonlyArray<string> => {\n const issues: string[] = []\n\n if ('enabled' in obj && obj.enabled != null) {\n if (normalizeBoolean(obj.enabled) == null) {\n issues.push(`${prefix}enabled: expected boolean`)\n }\n }\n\n if ('overrideMode' in obj && obj.overrideMode != null) {\n const raw = obj.overrideMode\n if (typeof raw !== 'string' || (raw !== 'forced_off' && raw !== 'forced_sync')) {\n issues.push(`${prefix}overrideMode: expected \"forced_off\" | \"forced_sync\"`)\n }\n }\n\n if ('budgetMs' in obj && obj.budgetMs != null) {\n if (normalizeNonNegativeNumber(obj.budgetMs) == null) {\n issues.push(`${prefix}budgetMs: expected non-negative number`)\n }\n }\n\n if ('debounceMs' in obj && obj.debounceMs != null) {\n if (normalizeNonNegativeNumber(obj.debounceMs) == null) {\n issues.push(`${prefix}debounceMs: expected non-negative number`)\n }\n }\n\n if ('maxLagMs' in obj && obj.maxLagMs != null) {\n if (normalizeNonNegativeNumber(obj.maxLagMs) == null) {\n issues.push(`${prefix}maxLagMs: expected non-negative number`)\n }\n }\n\n if ('allowCoalesce' in obj && obj.allowCoalesce != null) {\n if (normalizeBoolean(obj.allowCoalesce) == null) {\n issues.push(`${prefix}allowCoalesce: expected boolean`)\n }\n }\n\n if ('yieldStrategy' in obj && obj.yieldStrategy != null) {\n const raw = obj.yieldStrategy\n if (typeof raw !== 'string' || (raw !== 'baseline' && raw !== 'inputPending')) {\n issues.push(`${prefix}yieldStrategy: expected \"baseline\" | \"inputPending\"`)\n }\n }\n\n return issues\n}\n\nexport const warnInvalidStateTransactionTraitConvergeOverridesDevOnly = (value: unknown, label: string): void => {\n if (!isDevEnv()) return\n if (value == null) return\n if (!isRecord(value)) {\n warnDevOnly(label, ['expected object'])\n return\n }\n\n const issues: string[] = []\n issues.push(\n ...collectUnknownKeys(\n value,\n new Set([\n 'traitConvergeBudgetMs',\n 'traitConvergeDecisionBudgetMs',\n 'traitConvergeMode',\n 'traitConvergeTimeSlicing',\n ]),\n '',\n ),\n )\n issues.push(...validateStateTransactionTraitOverrides(value, ''))\n\n warnDevOnly(label, issues)\n}\n\nexport const warnInvalidStateTransactionRuntimeConfigDevOnly = (value: unknown, label: string): void => {\n if (!isDevEnv()) return\n if (value == null) return\n if (!isRecord(value)) {\n warnDevOnly(label, ['expected object'])\n return\n }\n\n const issues: string[] = []\n issues.push(\n ...collectUnknownKeys(\n value,\n new Set([\n 'instrumentation',\n 'traitConvergeBudgetMs',\n 'traitConvergeDecisionBudgetMs',\n 'traitConvergeMode',\n 'traitConvergeTimeSlicing',\n 'traitConvergeOverridesByModuleId',\n 'txnLanes',\n 'txnLanesOverridesByModuleId',\n ]),\n '',\n ),\n )\n\n if ('instrumentation' in value && value.instrumentation != null) {\n if (!Schema.is(InstrumentationSchema)(value.instrumentation)) {\n issues.push(`instrumentation: expected \"full\" | \"light\"`)\n }\n }\n\n issues.push(...validateStateTransactionTraitOverrides(value, ''))\n\n const txnLanes = (value as any).txnLanes\n if (txnLanes != null) {\n if (!isRecord(txnLanes)) {\n issues.push(`txnLanes: expected object`)\n } else {\n const prefix = 'txnLanes.'\n issues.push(\n ...collectUnknownKeys(\n txnLanes,\n new Set(['enabled', 'overrideMode', 'budgetMs', 'debounceMs', 'maxLagMs', 'allowCoalesce', 'yieldStrategy']),\n prefix,\n ),\n )\n issues.push(...validateTxnLanesPatch(txnLanes, prefix))\n }\n }\n\n const overridesByModuleId = value.traitConvergeOverridesByModuleId\n if (overridesByModuleId != null) {\n if (!isRecord(overridesByModuleId)) {\n issues.push(`traitConvergeOverridesByModuleId: expected record`)\n } else {\n for (const [moduleId, patch] of Object.entries(overridesByModuleId)) {\n const prefix = `traitConvergeOverridesByModuleId.${moduleId}.`\n if (patch == null) continue\n if (!isRecord(patch)) {\n issues.push(`${prefix}<value>: expected object`)\n continue\n }\n issues.push(\n ...collectUnknownKeys(\n patch,\n new Set([\n 'traitConvergeMode',\n 'traitConvergeBudgetMs',\n 'traitConvergeDecisionBudgetMs',\n 'traitConvergeTimeSlicing',\n ]),\n prefix,\n ),\n )\n issues.push(...validateStateTransactionTraitOverrides(patch, prefix))\n }\n }\n }\n\n const lanesOverridesByModuleId = (value as any).txnLanesOverridesByModuleId\n if (lanesOverridesByModuleId != null) {\n if (!isRecord(lanesOverridesByModuleId)) {\n issues.push(`txnLanesOverridesByModuleId: expected record`)\n } else {\n for (const [moduleId, patch] of Object.entries(lanesOverridesByModuleId)) {\n const prefix = `txnLanesOverridesByModuleId.${moduleId}.`\n if (patch == null) continue\n if (!isRecord(patch)) {\n issues.push(`${prefix}<value>: expected object`)\n continue\n }\n issues.push(\n ...collectUnknownKeys(\n patch,\n new Set([\n 'enabled',\n 'overrideMode',\n 'budgetMs',\n 'debounceMs',\n 'maxLagMs',\n 'allowCoalesce',\n 'yieldStrategy',\n ]),\n prefix,\n ),\n )\n issues.push(...validateTxnLanesPatch(patch, prefix))\n }\n }\n }\n\n warnDevOnly(label, issues)\n}\n\nexport const warnInvalidStateTransactionOverridesDevOnly = (value: unknown, label: string): void => {\n if (!isDevEnv()) return\n if (value == null) return\n if (!isRecord(value)) {\n warnDevOnly(label, ['expected object'])\n return\n }\n\n const issues: string[] = []\n issues.push(\n ...collectUnknownKeys(\n value,\n new Set([\n 'traitConvergeBudgetMs',\n 'traitConvergeDecisionBudgetMs',\n 'traitConvergeMode',\n 'traitConvergeTimeSlicing',\n 'traitConvergeOverridesByModuleId',\n 'txnLanes',\n 'txnLanesOverridesByModuleId',\n ]),\n '',\n ),\n )\n\n issues.push(...validateStateTransactionTraitOverrides(value, ''))\n\n const txnLanes = (value as any).txnLanes\n if (txnLanes != null) {\n if (!isRecord(txnLanes)) {\n issues.push(`txnLanes: expected object`)\n } else {\n const prefix = 'txnLanes.'\n issues.push(\n ...collectUnknownKeys(\n txnLanes,\n new Set(['enabled', 'overrideMode', 'budgetMs', 'debounceMs', 'maxLagMs', 'allowCoalesce']),\n prefix,\n ),\n )\n issues.push(...validateTxnLanesPatch(txnLanes, prefix))\n }\n }\n\n const overridesByModuleId = value.traitConvergeOverridesByModuleId\n if (overridesByModuleId != null) {\n if (!isRecord(overridesByModuleId)) {\n issues.push(`traitConvergeOverridesByModuleId: expected record`)\n } else {\n for (const [moduleId, patch] of Object.entries(overridesByModuleId)) {\n const prefix = `traitConvergeOverridesByModuleId.${moduleId}.`\n if (patch == null) continue\n if (!isRecord(patch)) {\n issues.push(`${prefix}<value>: expected object`)\n continue\n }\n issues.push(\n ...collectUnknownKeys(\n patch,\n new Set([\n 'traitConvergeMode',\n 'traitConvergeBudgetMs',\n 'traitConvergeDecisionBudgetMs',\n 'traitConvergeTimeSlicing',\n ]),\n prefix,\n ),\n )\n issues.push(...validateStateTransactionTraitOverrides(patch, prefix))\n }\n }\n }\n\n const lanesOverridesByModuleId = (value as any).txnLanesOverridesByModuleId\n if (lanesOverridesByModuleId != null) {\n if (!isRecord(lanesOverridesByModuleId)) {\n issues.push(`txnLanesOverridesByModuleId: expected record`)\n } else {\n for (const [moduleId, patch] of Object.entries(lanesOverridesByModuleId)) {\n const prefix = `txnLanesOverridesByModuleId.${moduleId}.`\n if (patch == null) continue\n if (!isRecord(patch)) {\n issues.push(`${prefix}<value>: expected object`)\n continue\n }\n issues.push(\n ...collectUnknownKeys(\n patch,\n new Set(['enabled', 'overrideMode', 'budgetMs', 'debounceMs', 'maxLagMs', 'allowCoalesce']),\n prefix,\n ),\n )\n issues.push(...validateTxnLanesPatch(patch, prefix))\n }\n }\n }\n\n warnDevOnly(label, issues)\n}\n","import { Cause, Effect, FiberRef, Option, Scope } from 'effect'\nimport type { ManagedRuntime } from 'effect'\nimport type { AnyModuleShape, ModuleImpl } from '../module.js'\nimport { make as makeBoundApi } from '../BoundApiRuntime.js'\nimport * as TaskRunner from '../TaskRunner.js'\nimport { closeProgramScope } from './ProgramRunner.closeScope.js'\nimport { BootError, MainError, type ProgramIdentity } from './ProgramRunner.errors.js'\nimport { reportErrorIfEnabled, setExitCodeIfEnabled, setFailureExitCodeIfEnabled } from './ProgramRunner.exitCode.js'\nimport { installGracefulShutdownHandlers } from './ProgramRunner.signals.js'\nimport type { ProgramRunContext } from './ProgramRunner.context.js'\nimport { makeProgramRunnerKernel } from './ProgramRunner.kernel.js'\nimport { resolveProgramRunnerOptions } from './ProgramRunner.options.js'\n\nexport type RuntimeFactory = (\n rootImpl: ModuleImpl<any, AnyModuleShape, any>,\n options?: unknown,\n) => ManagedRuntime.ManagedRuntime<any, never>\n\nexport const openProgram = <Sh extends AnyModuleShape>(\n makeRuntime: RuntimeFactory,\n rootImpl: ModuleImpl<any, Sh, any>,\n options?: unknown,\n): Effect.Effect<ProgramRunContext<Sh>, unknown, Scope.Scope> =>\n Effect.gen(function* () {\n const inTxn = yield* FiberRef.get(TaskRunner.inSyncTransactionFiber)\n if (inTxn) {\n return yield* Effect.dieMessage(\n '[Logix] Runtime.openProgram/runProgram is not allowed inside a synchronous StateTransaction body',\n )\n }\n\n const runnerOptions = resolveProgramRunnerOptions(options)\n const kernel = yield* makeProgramRunnerKernel(makeRuntime, rootImpl, options)\n\n // Bind ctx.scope disposal to the outer scope (openProgram is scope-bound).\n yield* Effect.addFinalizer(() =>\n kernel.close({\n timeoutMs: runnerOptions.closeScopeTimeout,\n onError: (options as any)?.onError,\n }),\n )\n\n // Node-only: signals trigger graceful shutdown (closing ctx.scope).\n yield* kernel.installSignals(runnerOptions.handleSignals)\n\n // boot: touch the program module tag to ensure instantiation and logics/processes start.\n const moduleRuntime = yield* Effect.tryPromise({\n try: () => kernel.runtime.runPromise(rootImpl.module as any),\n catch: (error) => new BootError(kernel.identity, error),\n })\n\n kernel.setInstanceId((moduleRuntime as any).instanceId)\n return kernel.toContext(moduleRuntime)\n })\n\nexport const runProgram = async <Sh extends AnyModuleShape, Args, A, E, R>(\n makeRuntime: RuntimeFactory,\n rootImpl: ModuleImpl<any, Sh, any>,\n main: (ctx: ProgramRunContext<Sh>, args: Args) => Effect.Effect<A, E, R>,\n options?: unknown,\n): Promise<A> => {\n if (TaskRunner.isInSyncTransaction()) {\n throw new Error('[Logix] Runtime.openProgram/runProgram is not allowed inside a synchronous StateTransaction body')\n }\n\n const runnerOptions = resolveProgramRunnerOptions<Args>(options)\n const identity: ProgramIdentity = {\n moduleId: String(rootImpl.module.id),\n instanceId: 'unknown',\n }\n\n const scope = Effect.runSync(Scope.make())\n const runtime = makeRuntime(rootImpl as unknown as ModuleImpl<any, AnyModuleShape, any>, options)\n\n let ctx:\n | (ProgramRunContext<Sh> & {\n readonly module: { readonly instanceId: string }\n })\n | undefined\n let mainError: unknown | undefined\n let closeError: unknown | undefined\n let result:\n | { readonly _tag: 'success'; readonly value: A }\n | { readonly _tag: 'failure'; readonly error: unknown }\n | undefined\n\n try {\n // Runtime resource disposal: bind runtime.dispose to ctx.scope.\n Effect.runSync(Scope.addFinalizer(scope, Effect.promise(() => runtime.dispose()).pipe(Effect.asVoid)))\n\n // Node-only: signals trigger graceful shutdown (closing ctx.scope).\n if (runnerOptions.handleSignals) {\n Effect.runSync(\n installGracefulShutdownHandlers({\n scope,\n enabled: true,\n }),\n )\n }\n\n // boot: touch the program module tag to ensure instantiation and logics/processes start.\n let moduleRuntime: any\n try {\n moduleRuntime = await runtime.runPromise(rootImpl.module as any)\n } catch (error) {\n setFailureExitCodeIfEnabled(runnerOptions.exitCode)\n reportErrorIfEnabled(runnerOptions.exitCode && runnerOptions.reportError, error)\n result = {\n _tag: 'failure',\n error: new BootError(identity, error),\n }\n }\n\n if (result?._tag !== 'failure') {\n identity.instanceId = String(moduleRuntime.instanceId ?? 'unknown')\n\n ctx = {\n scope,\n runtime,\n module: moduleRuntime,\n $: makeBoundApi(rootImpl.module.shape as any, moduleRuntime as any) as any,\n } satisfies ProgramRunContext<Sh> as any\n }\n\n if (ctx) {\n try {\n const value = (await ctx.runtime.runPromise(main(ctx, runnerOptions.args as Args) as any)) as A\n setExitCodeIfEnabled(runnerOptions.exitCode, value)\n result = { _tag: 'success', value }\n } catch (error) {\n mainError = error\n setFailureExitCodeIfEnabled(runnerOptions.exitCode)\n reportErrorIfEnabled(runnerOptions.exitCode && runnerOptions.reportError, error)\n result = { _tag: 'failure', error: new MainError(identity, error) }\n }\n }\n } finally {\n const exit = await Effect.runPromiseExit(\n closeProgramScope({\n scope,\n timeoutMs: runnerOptions.closeScopeTimeout,\n identity,\n onError: (options as any)?.onError,\n }),\n )\n\n if (exit._tag === 'Failure') {\n const failureOpt = Cause.failureOption(exit.cause)\n if (Option.isSome(failureOpt)) {\n const error: any = failureOpt.value\n if (mainError !== undefined && error && typeof error === 'object') {\n error.mainError = mainError\n }\n closeError = error\n } else {\n const defectOpt = Cause.dieOption(exit.cause)\n if (Option.isSome(defectOpt) && defectOpt.value instanceof Error) {\n const error: any = defectOpt.value\n if (mainError !== undefined && error && typeof error === 'object') {\n error.mainError = mainError\n }\n closeError = error\n } else {\n closeError = new Error(String(exit.cause))\n }\n }\n }\n }\n\n if (closeError !== undefined) {\n setFailureExitCodeIfEnabled(runnerOptions.exitCode)\n reportErrorIfEnabled(runnerOptions.exitCode && runnerOptions.reportError, closeError)\n throw closeError\n }\n\n if (!result) {\n setFailureExitCodeIfEnabled(runnerOptions.exitCode)\n throw new Error('[Logix] ProgramRunner.runProgram: missing result')\n }\n\n if (result._tag === 'failure') {\n throw result.error\n }\n\n return result.value\n}\n","import { Cause, Effect, Exit, Fiber, Option, Scope } from 'effect'\nimport { DisposeError, DisposeTimeoutError, type ProgramIdentity } from './ProgramRunner.errors.js'\n\nexport const closeProgramScope = (params: {\n readonly scope: Scope.CloseableScope\n readonly timeoutMs: number\n readonly identity: ProgramIdentity\n readonly onError?: (cause: Cause.Cause<unknown>) => Effect.Effect<void, never, never>\n}): Effect.Effect<void, never, never> => {\n return Effect.gen(function* () {\n const start = Date.now()\n\n const fiber = yield* Effect.forkDaemon(Scope.close(params.scope, Exit.void))\n\n while (true) {\n const exitOpt = yield* Fiber.poll(fiber)\n if (Option.isSome(exitOpt)) {\n const exit = exitOpt.value\n if (exit._tag === 'Success') {\n return\n }\n return yield* Effect.die(new DisposeError(params.identity, exit.cause))\n }\n\n const elapsedMs = Date.now() - start\n if (elapsedMs >= params.timeoutMs) {\n const error = new DisposeTimeoutError(params.identity, {\n timeoutMs: params.timeoutMs,\n elapsedMs,\n })\n\n if (typeof params.onError === 'function') {\n yield* params.onError(Cause.die(error)).pipe(Effect.catchAllCause(() => Effect.void))\n }\n\n yield* Fiber.interruptFork(fiber)\n return yield* Effect.die(error)\n }\n\n // NOTE: Use a microtask yield (not TestClock-based) to avoid being blocked by TestClock,\n // while keeping the \"successful close\" fast path cheap (perf-critical for tight loops).\n yield* Effect.promise(() => new Promise<void>((r) => queueMicrotask(r)))\n }\n })\n}\n","export type ProgramRunnerErrorTag = 'BootError' | 'MainError' | 'DisposeError' | 'DisposeTimeout'\n\nexport interface ProgramIdentity {\n moduleId: string\n instanceId: string\n}\n\nconst summarizeCause = (cause: unknown): { name?: string; message?: string } => {\n if (cause instanceof Error) {\n return { name: cause.name, message: cause.message }\n }\n return { message: typeof cause === 'string' ? cause : undefined }\n}\n\nabstract class ProgramRunnerErrorBase extends Error {\n abstract readonly _tag: ProgramRunnerErrorTag\n readonly moduleId: string\n readonly instanceId: string\n readonly entrypoint: 'boot' | 'main' | 'dispose'\n readonly hint?: string\n\n protected constructor(params: {\n readonly message: string\n readonly identity: ProgramIdentity\n readonly entrypoint: 'boot' | 'main' | 'dispose'\n readonly hint?: string\n }) {\n super(params.message)\n this.moduleId = params.identity.moduleId\n this.instanceId = params.identity.instanceId\n this.entrypoint = params.entrypoint\n this.hint = params.hint\n }\n\n toJSON(): Record<string, unknown> {\n return {\n _tag: this._tag,\n name: this.name,\n message: this.message,\n moduleId: this.moduleId,\n instanceId: this.instanceId,\n entrypoint: this.entrypoint,\n hint: this.hint,\n }\n }\n}\n\nexport class BootError extends ProgramRunnerErrorBase {\n readonly _tag = 'BootError' as const\n readonly cause?: { name?: string; message?: string }\n\n constructor(identity: ProgramIdentity, cause: unknown) {\n super({\n message: '[Logix] Program boot failed',\n identity,\n entrypoint: 'boot',\n hint: 'Check that options.layer / imports / providers are complete, and that no dependencies are missing during assembly.',\n })\n this.name = 'BootError'\n this.cause = summarizeCause(cause)\n }\n\n override toJSON(): Record<string, unknown> {\n return { ...super.toJSON(), cause: this.cause }\n }\n}\n\nexport class MainError extends ProgramRunnerErrorBase {\n readonly _tag = 'MainError' as const\n readonly cause?: { name?: string; message?: string }\n\n constructor(identity: ProgramIdentity, cause: unknown) {\n super({\n message: '[Logix] Program main failed',\n identity,\n entrypoint: 'main',\n hint: 'Main failed: ensure main handles domain errors explicitly, and check for interruption or missing dependencies.',\n })\n this.name = 'MainError'\n this.cause = summarizeCause(cause)\n }\n\n override toJSON(): Record<string, unknown> {\n return { ...super.toJSON(), cause: this.cause }\n }\n}\n\nexport class DisposeError extends ProgramRunnerErrorBase {\n readonly _tag = 'DisposeError' as const\n readonly cause?: { name?: string; message?: string }\n\n constructor(identity: ProgramIdentity, cause: unknown) {\n super({\n message: '[Logix] Program dispose failed',\n identity,\n entrypoint: 'dispose',\n hint: 'Dispose failed: a finalizer may have thrown, or scope/resource handles may be invalid; check onError/logs.',\n })\n this.name = 'DisposeError'\n this.cause = summarizeCause(cause)\n }\n\n override toJSON(): Record<string, unknown> {\n return { ...super.toJSON(), cause: this.cause }\n }\n}\n\nexport class DisposeTimeoutError extends ProgramRunnerErrorBase {\n readonly _tag = 'DisposeTimeout' as const\n readonly timeoutMs: number\n readonly elapsedMs: number\n readonly suggestions: ReadonlyArray<string>\n\n constructor(identity: ProgramIdentity, params: { readonly timeoutMs: number; readonly elapsedMs: number }) {\n super({\n message: '[Logix] Program dispose timed out',\n identity,\n entrypoint: 'dispose',\n hint: 'Dispose timed out: if the program cannot exit naturally, resources may not be released or background fibers are still running.',\n })\n this.name = 'DisposeTimeoutError'\n this.timeoutMs = params.timeoutMs\n this.elapsedMs = params.elapsedMs\n this.suggestions = [\n 'Check for event listeners that were not unregistered (e.g. process.on / emitter.on).',\n 'Check for fibers that were not joined/interrupt (long-lived watchers / Stream.run*).',\n 'Check for resource handles that were not closed (timer / socket / file handle).',\n ]\n }\n\n override toJSON(): Record<string, unknown> {\n return {\n ...super.toJSON(),\n timeoutMs: this.timeoutMs,\n elapsedMs: this.elapsedMs,\n suggestions: this.suggestions,\n }\n }\n}\n","const isRecord = (value: unknown): value is Record<string, unknown> => typeof value === 'object' && value !== null\n\nconst getProcess = (): any => (globalThis as any).process\n\nexport const setExitCodeIfEnabled = (enabled: boolean, value: unknown): void => {\n if (!enabled) return\n\n const proc = getProcess()\n if (!isRecord(proc)) return\n\n const next = typeof value === 'number' && Number.isInteger(value) ? value : 0\n\n proc.exitCode = next\n}\n\nexport const setFailureExitCodeIfEnabled = (enabled: boolean): void => {\n if (!enabled) return\n\n const proc = getProcess()\n if (!isRecord(proc)) return\n\n proc.exitCode = 1\n}\n\nexport const reportErrorIfEnabled = (enabled: boolean, error: unknown): void => {\n if (!enabled) return\n\n // eslint-disable-next-line no-console\n console.error(error)\n}\n","import { Effect, Exit, Scope } from 'effect'\n\nconst getProcess = (): any => (globalThis as any).process\n\nconst isNodeProcess = (\n value: unknown,\n): value is {\n on: (event: string, handler: () => void) => void\n off?: (event: string, handler: () => void) => void\n removeListener?: (event: string, handler: () => void) => void\n} => typeof value === 'object' && value !== null && typeof (value as any).on === 'function'\n\nconst removeListener = (proc: any, event: string, handler: () => void): void => {\n if (typeof proc.off === 'function') {\n proc.off(event, handler)\n return\n }\n if (typeof proc.removeListener === 'function') {\n proc.removeListener(event, handler)\n }\n}\n\nexport const installGracefulShutdownHandlers = (params: {\n readonly scope: Scope.CloseableScope\n readonly enabled: boolean\n}): Effect.Effect<void> => {\n if (!params.enabled) {\n return Effect.void\n }\n\n const proc = getProcess()\n if (!isNodeProcess(proc)) {\n return Effect.void\n }\n\n const handler = (): void => {\n void Effect.runPromise(Scope.close(params.scope, Exit.void))\n }\n\n return Effect.gen(function* () {\n yield* Scope.addFinalizer(\n params.scope,\n Effect.sync(() => {\n removeListener(proc, 'SIGINT', handler)\n removeListener(proc, 'SIGTERM', handler)\n }),\n )\n\n yield* Effect.sync(() => {\n proc.on('SIGINT', handler)\n proc.on('SIGTERM', handler)\n })\n })\n}\n","import { Effect, Scope } from 'effect'\nimport type { ManagedRuntime } from 'effect'\nimport type { AnyModuleShape, ModuleImpl } from '../module.js'\nimport { make as makeBoundApi } from '../BoundApiRuntime.js'\nimport { closeProgramScope } from './ProgramRunner.closeScope.js'\nimport type { ProgramIdentity } from './ProgramRunner.errors.js'\nimport { installGracefulShutdownHandlers } from './ProgramRunner.signals.js'\nimport type { ProgramRunContext } from './ProgramRunner.context.js'\n\nexport type RuntimeFactory = (\n rootImpl: ModuleImpl<any, AnyModuleShape, any>,\n options?: unknown,\n) => ManagedRuntime.ManagedRuntime<any, never>\n\nexport interface ProgramRunnerKernel<Sh extends AnyModuleShape> {\n readonly scope: Scope.CloseableScope\n readonly runtime: ManagedRuntime.ManagedRuntime<any, never>\n readonly identity: ProgramIdentity\n readonly installSignals: (enabled: boolean) => Effect.Effect<void>\n readonly close: (params: {\n readonly timeoutMs: number\n readonly onError?: (cause: import('effect').Cause.Cause<unknown>) => Effect.Effect<void, never, never>\n }) => Effect.Effect<void, never, never>\n readonly setInstanceId: (value: unknown) => void\n readonly toContext: (moduleRuntime: unknown) => ProgramRunContext<Sh>\n}\n\nexport const makeProgramRunnerKernel = <Sh extends AnyModuleShape>(\n makeRuntime: RuntimeFactory,\n rootImpl: ModuleImpl<any, Sh, any>,\n options?: unknown,\n): Effect.Effect<ProgramRunnerKernel<Sh>> =>\n Effect.gen(function* () {\n const identity: ProgramIdentity = {\n moduleId: String(rootImpl.module.id),\n instanceId: 'unknown',\n }\n\n const scope = yield* Scope.make()\n const runtime = makeRuntime(rootImpl as unknown as ModuleImpl<any, AnyModuleShape, any>, options)\n\n yield* Scope.addFinalizer(scope, Effect.promise(() => runtime.dispose()).pipe(Effect.asVoid))\n\n const setInstanceId = (value: unknown) => {\n identity.instanceId = typeof value === 'string' && value.length > 0 ? value : String(value ?? 'unknown')\n }\n\n const close = (params: {\n readonly timeoutMs: number\n readonly onError?: (cause: import('effect').Cause.Cause<unknown>) => Effect.Effect<void, never, never>\n }) =>\n closeProgramScope({\n scope,\n timeoutMs: params.timeoutMs,\n identity,\n onError: params.onError,\n })\n\n const installSignals = (enabled: boolean) => installGracefulShutdownHandlers({ scope, enabled })\n\n const toContext = (moduleRuntime: unknown) =>\n ({\n scope,\n runtime,\n module: moduleRuntime as any,\n $: makeBoundApi(rootImpl.module.shape as any, moduleRuntime as any) as any,\n }) satisfies ProgramRunContext<Sh>\n\n return {\n scope,\n runtime,\n identity,\n installSignals,\n close,\n setInstanceId,\n toContext,\n }\n })\n","export interface ProgramRunnerOptions<Args = unknown> {\n readonly closeScopeTimeout: number\n readonly handleSignals: boolean\n readonly args: Args | undefined\n readonly exitCode: boolean\n readonly reportError: boolean\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => typeof value === 'object' && value !== null\n\nexport const resolveProgramRunnerOptions = <Args = unknown>(options: unknown): ProgramRunnerOptions<Args> => {\n const record = isRecord(options) ? options : undefined\n\n const closeScopeTimeout = typeof record?.closeScopeTimeout === 'number' ? record.closeScopeTimeout : 1000\n\n const handleSignals = typeof record?.handleSignals === 'boolean' ? record.handleSignals : true\n\n const exitCode = typeof record?.exitCode === 'boolean' ? record.exitCode : false\n\n const reportError = typeof record?.reportError === 'boolean' ? record.reportError : true\n\n const args = (record?.args as Args | undefined) ?? undefined\n\n return {\n closeScopeTimeout,\n handleSignals,\n args,\n exitCode,\n reportError,\n }\n}\n","import { Layer } from 'effect'\nimport type { Layer as LayerType } from 'effect'\nimport type * as Debug from './Debug.js'\nimport * as FullCutoverGate from './internal/runtime/core/FullCutoverGate.js'\nimport * as RuntimeKernel from './internal/runtime/core/RuntimeKernel.js'\nimport * as KernelRef from './internal/runtime/core/KernelRef.js'\nexport type { RuntimeServiceBuiltins } from './internal/runtime/core/RuntimeServiceBuiltins.js'\nexport { RuntimeServiceBuiltinsTag } from './internal/runtime/core/RuntimeServiceBuiltins.js'\n\nexport type KernelId = KernelRef.KernelId\n\nexport interface KernelImplementationRef extends KernelRef.KernelImplementationRef {}\n\nexport const defaultKernelImplementationRef = KernelRef.defaultKernelImplementationRef\n\nexport const isKernelImplementationRef = KernelRef.isKernelImplementationRef\n\nexport type RuntimeServiceOverride = RuntimeKernel.RuntimeServiceOverride\nexport type RuntimeServicesOverrides = RuntimeKernel.RuntimeServicesOverrides\nexport type RuntimeServiceBinding = RuntimeKernel.RuntimeServiceBinding\nexport type RuntimeServicesEvidence = RuntimeKernel.RuntimeServicesEvidence\n\nexport type RuntimeServiceImpl<Service> = RuntimeKernel.RuntimeServiceImpl<Service>\nexport type RuntimeServicesRegistry = RuntimeKernel.RuntimeServicesRegistry\n\nexport type CutoverCoverageMatrix = FullCutoverGate.CutoverCoverageMatrix\n\nexport const CutoverCoverageMatrix = FullCutoverGate.CutoverCoverageMatrix\n\nexport type FullCutoverGateMode = FullCutoverGate.FullCutoverGateMode\n\nexport type FullCutoverGateAnchor = FullCutoverGate.FullCutoverGateAnchor\n\nexport type FullCutoverGateVerdict = FullCutoverGate.FullCutoverGateVerdict\n\nexport type FullCutoverGateResult = FullCutoverGate.FullCutoverGateResult\n\nexport const evaluateFullCutoverGate = (args: {\n readonly mode: FullCutoverGateMode\n readonly requestedKernelId: KernelId\n readonly runtimeServicesEvidence: RuntimeServicesEvidence\n readonly coverageMatrix?: CutoverCoverageMatrix\n readonly diagnosticsLevel?: Debug.DiagnosticsLevel\n}): FullCutoverGateResult => {\n return FullCutoverGate.evaluateFullCutoverGate({\n mode: args.mode,\n requestedKernelId: args.requestedKernelId,\n runtimeServicesEvidence: args.runtimeServicesEvidence,\n coverageMatrix: args.coverageMatrix,\n diagnosticsLevel: args.diagnosticsLevel,\n })\n}\n\nexport interface KernelContractMetaAllowlistItem {\n readonly metaKey: string\n readonly reason?: string\n}\n\nexport const KernelContractMetaAllowlist = [] as const satisfies ReadonlyArray<KernelContractMetaAllowlistItem>\n\n/**\n * kernelLayer:\n * - Declares the requested kernel family in the current runtime tree.\n * - This does not prove full activation; fallback/mix is decided by RuntimeServicesEvidence.\n */\nexport const kernelLayer = (ref: KernelImplementationRef): LayerType.Layer<any, never, never> =>\n Layer.succeed(KernelRef.KernelImplementationRefTag, ref) as LayerType.Layer<any, never, never>\n\n/**\n * runtimeDefaultServicesOverridesLayer:\n * - Provides `runtime_default` scope `serviceId -> implId` overrides during ManagedRuntime assembly.\n * - Does not set servicesByModuleId by default (do not use moduleId as the default kernel selection granularity).\n */\nexport const runtimeDefaultServicesOverridesLayer = (\n services: RuntimeServicesOverrides,\n): LayerType.Layer<any, never, never> =>\n Layer.succeed(RuntimeKernel.RuntimeServicesRuntimeConfigTag, {\n services,\n }) as LayerType.Layer<any, never, never>\n\n/**\n * getRuntimeServicesEvidence:\n * - Reads RuntimeServicesEvidence installed on a ModuleRuntime (serviceId -> implId evidence).\n * - Public entry to avoid importing from `src/internal`.\n */\nexport const getRuntimeServicesEvidence = RuntimeKernel.getRuntimeServicesEvidence\n\n/**\n * getKernelImplementationRef:\n * - Reads KernelImplementationRef installed on a ModuleRuntime (requested kernel family).\n */\nexport const getKernelImplementationRef = KernelRef.getKernelImplementationRef\n\n/**\n * runtimeServicesRegistryLayer:\n * - Injects additional `serviceId -> impls` during runtime assembly (e.g. implementations provided by core-ng).\n */\nexport const runtimeServicesRegistryLayer = (registry: RuntimeServicesRegistry): LayerType.Layer<any, never, never> =>\n Layer.succeed(RuntimeKernel.RuntimeServicesRegistryTag, registry) as LayerType.Layer<any, never, never>\n\n/**\n * fullCutoverGateModeLayer:\n * - Controls cutover gate evaluation mode during runtime assembly (trial/fullCutover).\n * - The default path (048) should explicitly set fullCutover; trial-run/comparison may override to trial.\n */\nexport const fullCutoverGateModeLayer = (mode: FullCutoverGateMode): LayerType.Layer<any, never, never> =>\n Layer.succeed(RuntimeKernel.FullCutoverGateModeTag, mode) as LayerType.Layer<any, never, never>\n\n/**\n * isKernelFullyActivated:\n * - Minimal verdict for \"full cutover\": no fallbacks are allowed.\n */\nexport const isKernelFullyActivated = (evidence: RuntimeServicesEvidence): boolean =>\n !evidence.overridesApplied.some((s) => s.includes('fallback='))\n","import type * as Internal from './internal/root.js'\nimport * as Impl from './internal/root.js'\n\nexport type RootResolveEntrypoint = Internal.RootResolveEntrypoint\nexport type RootResolveOptions = Internal.RootResolveOptions\n\nexport const resolve = Impl.resolve\nexport const layerFromContext = Impl.layerFromContext\n","import { Effect, Layer } from 'effect'\nimport * as Internal from './internal/platform/Platform.js'\n\n/**\n * Platform.Service: platform service interface.\n */\nexport type Service = Internal.Service\n\n/**\n * Platform.tag: platform service Tag.\n */\nexport const tag = Internal.Tag\n\n/**\n * NoopPlatform:\n * - The core engine ships with a single no-op platform implementation by default.\n * - Real implementations are provided by platform adapters (React / Native, etc.).\n */\nexport class NoopPlatform implements Service {\n readonly lifecycle = {\n onSuspend: (_eff: Effect.Effect<void, never, any>) => Effect.void,\n onResume: (_eff: Effect.Effect<void, never, any>) => Effect.void,\n onReset: (_eff: Effect.Effect<void, never, any>) => Effect.void,\n }\n\n readonly emitSuspend = (): Effect.Effect<void, never, any> => Effect.void\n readonly emitResume = (): Effect.Effect<void, never, any> => Effect.void\n readonly emitReset = (): Effect.Effect<void, never, any> => Effect.void\n}\n\n/**\n * NoopPlatformLayer:\n * - Mounts NoopPlatform on Platform.tag.\n * - The default `@logixjs/core` layer; apps typically override it with a real platform implementation.\n */\nexport const NoopPlatformLayer = Layer.succeed(tag, new NoopPlatform())\n\n/**\n * defaultLayer:\n * - Currently equivalent to NoopPlatformLayer.\n * - Reserved for future upgrades; callers should depend on defaultLayer.\n */\nexport const defaultLayer = NoopPlatformLayer\n","// Observability Protocol (@logixjs/core/Observability).\n\nimport * as Evidence from './internal/observability/evidence.js'\nexport * from './internal/observability/trialRun.js'\n\nexport type { JsonValue } from './internal/observability/jsonValue.js'\nexport type { ArtifactEnvelope, ArtifactKey, TrialRunArtifacts } from './internal/observability/artifacts/model.js'\nexport type {\n TrialRunArtifactExporter,\n TrialRunArtifactInspectionContext,\n} from './internal/observability/artifacts/exporter.js'\nexport { registerTrialRunArtifactExporter } from './internal/observability/artifacts/registry.js'\n\nexport const protocolVersion = Evidence.OBSERVABILITY_PROTOCOL_VERSION\n\nexport interface ObservationEnvelope extends Evidence.ObservationEnvelope {}\nexport interface EvidencePackageSource extends Evidence.EvidencePackageSource {}\nexport interface EvidencePackage extends Evidence.EvidencePackage {}\n\nexport const exportEvidencePackage = Evidence.exportEvidencePackage\nexport const importEvidencePackage = Evidence.importEvidencePackage\n","import { Effect, Exit, Layer, Scope } from 'effect'\nimport type { EvidencePackage, EvidencePackageSource } from './evidence.js'\nimport { makeEvidenceCollector, evidenceCollectorLayer } from './evidenceCollector.js'\nimport { makeRunSession, runSessionLayer, type RunSession, type RunId } from './runSession.js'\nimport {\n appendSinks,\n diagnosticsLevel,\n type DiagnosticsLevel,\n type Sink as DebugSink,\n} from '../runtime/core/DebugSink.js'\nimport * as RuntimeKernel from '../runtime/core/RuntimeKernel.js'\nimport type { ConvergeStaticIrCollector } from '../runtime/core/ConvergeStaticIrCollector.js'\nimport { appendConvergeStaticIrCollectors } from '../runtime/core/ConvergeStaticIrCollector.js'\nexport * from './trialRunModule.js'\n\nexport interface TrialRunOptions {\n readonly runId?: RunId\n readonly source?: EvidencePackageSource\n readonly startedAt?: number\n readonly diagnosticsLevel?: DiagnosticsLevel\n readonly maxEvents?: number\n readonly layer?: Layer.Layer<any, any, any>\n readonly runtimeServicesInstanceOverrides?: RuntimeKernel.RuntimeServicesOverrides\n}\n\nexport interface TrialRunResult<A, E> {\n readonly session: RunSession\n readonly exit: Exit.Exit<A, E>\n readonly evidence: EvidencePackage\n}\n\nconst defaultHost = (): string => {\n if (typeof window !== 'undefined' && typeof document !== 'undefined') return 'browser'\n return 'node'\n}\n\nexport const trialRun = <A, E, R>(\n program: Effect.Effect<A, E, R>,\n options?: TrialRunOptions,\n): Effect.Effect<TrialRunResult<A, E>, never, R> =>\n Effect.gen(function* () {\n const session = makeRunSession({\n runId: options?.runId,\n source: options?.source ?? { host: defaultHost(), label: 'trial-run' },\n startedAt: options?.startedAt,\n })\n\n const collector = makeEvidenceCollector(session)\n\n const convergeCollector: ConvergeStaticIrCollector = {\n register: (ir) => {\n collector.registerConvergeStaticIr(ir)\n },\n }\n\n const sinksLayer = appendSinks([collector.debugSink as unknown as DebugSink])\n const diagnosticsLayer = diagnosticsLevel(options?.diagnosticsLevel ?? 'light')\n const convergeLayer = appendConvergeStaticIrCollectors([convergeCollector])\n const collectorLayer = evidenceCollectorLayer(collector)\n const sessionLayer = runSessionLayer(session)\n\n const overridesLayer =\n options?.runtimeServicesInstanceOverrides != null\n ? (Layer.succeed(\n RuntimeKernel.RuntimeServicesInstanceOverridesTag,\n options.runtimeServicesInstanceOverrides,\n ) as Layer.Layer<any, never, never>)\n : (Layer.empty as Layer.Layer<any, never, never>)\n\n const trialLayer = Layer.mergeAll(\n options?.layer ?? (Layer.empty as unknown as Layer.Layer<any, any, any>),\n sessionLayer,\n collectorLayer,\n overridesLayer,\n diagnosticsLayer,\n sinksLayer,\n convergeLayer,\n ) as Layer.Layer<any, never, any>\n\n const scope = yield* Scope.make()\n\n const exit = yield* Effect.exit(program).pipe(Effect.provideService(Scope.Scope, scope), Effect.provide(trialLayer))\n\n yield* Scope.close(scope, exit)\n\n const evidence = collector.exportEvidencePackage({\n maxEvents: options?.maxEvents,\n })\n\n return { session, exit, evidence } satisfies TrialRunResult<A, E>\n })\n","import { Cause, Effect, Exit, Fiber, Layer, Option } from 'effect'\nimport type { AnyModuleShape, ModuleImpl } from '../runtime/core/module.js'\nimport * as BuildEnv from '../platform/BuildEnv.js'\nimport type { EvidencePackage, EvidencePackageSource } from './evidence.js'\nimport { makeEvidenceCollector, evidenceCollectorLayer } from './evidenceCollector.js'\nimport { makeRunSession, runSessionLayer, type RunId } from './runSession.js'\nimport {\n appendSinks,\n diagnosticsLevel,\n type DiagnosticsLevel,\n type Sink as DebugSink,\n} from '../runtime/core/DebugSink.js'\nimport type { KernelImplementationRef } from '../runtime/core/KernelRef.js'\nimport * as KernelRef from '../runtime/core/KernelRef.js'\nimport * as RuntimeKernel from '../runtime/core/RuntimeKernel.js'\nimport type { ConvergeStaticIrCollector } from '../runtime/core/ConvergeStaticIrCollector.js'\nimport { appendConvergeStaticIrCollectors } from '../runtime/core/ConvergeStaticIrCollector.js'\nimport type { SerializableErrorSummary } from '../runtime/core/errorSummary.js'\nimport { toSerializableErrorSummary } from '../runtime/core/errorSummary.js'\nimport { makeProgramRunnerKernel } from '../runtime/ProgramRunner.kernel.js'\nimport { extractManifest, type ModuleManifest } from '../reflection/manifest.js'\nimport { exportStaticIr } from '../reflection/staticIr.js'\nimport * as Runtime from '../runtime/Runtime.js'\nimport { collectTrialRunArtifacts } from './artifacts/collect.js'\nimport type { TrialRunArtifacts } from './artifacts/model.js'\nimport { getTrialRunArtifactExporters } from './artifacts/registry.js'\n\ntype RootLike<Sh extends AnyModuleShape> = ModuleImpl<any, Sh, any> | { readonly impl: ModuleImpl<any, Sh, any> }\n\nexport interface TrialRunReportBudgets {\n readonly maxBytes?: number\n}\n\nexport interface TrialRunReport {\n readonly runId: string\n readonly ok: boolean\n readonly manifest?: ModuleManifest\n readonly staticIr?: ReturnType<typeof exportStaticIr>\n readonly artifacts?: TrialRunArtifacts\n readonly environment?: EnvironmentIr\n readonly evidence?: EvidencePackage\n readonly summary?: unknown\n readonly error?: SerializableErrorSummary\n}\n\nexport interface EnvironmentIr {\n readonly tagIds: ReadonlyArray<string>\n readonly configKeys: ReadonlyArray<string>\n readonly missingServices: ReadonlyArray<string>\n readonly missingConfigKeys: ReadonlyArray<string>\n readonly kernelImplementationRef?: KernelImplementationRef\n readonly runtimeServicesEvidence?: RuntimeKernel.RuntimeServicesEvidence\n readonly notes?: unknown\n}\n\nexport interface TrialRunModuleOptions {\n readonly runId?: RunId\n readonly source?: EvidencePackageSource\n readonly startedAt?: number\n readonly diagnosticsLevel?: DiagnosticsLevel\n readonly maxEvents?: number\n readonly layer?: Layer.Layer<any, any, any>\n readonly buildEnv?: {\n readonly config?: Record<string, BuildEnv.BuildEnvConfigValue | undefined>\n readonly hostKind?: BuildEnv.BuildEnvOptions['runtimeHostKind']\n readonly configProvider?: BuildEnv.BuildEnvOptions['configProvider']\n }\n readonly trialRunTimeoutMs?: number\n readonly closeScopeTimeout?: number\n readonly budgets?: TrialRunReportBudgets\n}\n\nconst defaultHost = (): string => {\n if (typeof window !== 'undefined' && typeof document !== 'undefined') return 'browser'\n return 'node'\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst resolveRootImpl = <Sh extends AnyModuleShape>(root: RootLike<Sh>): ModuleImpl<any, Sh, any> =>\n ((root as any)?._tag === 'ModuleImpl'\n ? (root as ModuleImpl<any, Sh, any>)\n : ((root as any)?.impl as ModuleImpl<any, Sh, any>)) satisfies ModuleImpl<any, Sh, any>\n\nconst utf8ByteLength = (value: unknown): number => {\n const json = JSON.stringify(value)\n if (typeof TextEncoder !== 'undefined') {\n return new TextEncoder().encode(json).length\n }\n return json.length\n}\n\nconst parseMissingConfigKeys = (message: string): ReadonlyArray<string> => {\n const out: string[] = []\n\n // Effect Config error messages vary; keep parsing conservative and deterministic.\n const patterns: ReadonlyArray<RegExp> = [\n /\\bMissing (?:data|value) for (?:key|path) \"?([A-Z0-9_./:-]+)\"?/g,\n /\\bMissing (?:data|value) at ([A-Z0-9_./:-]+)\\b/g,\n /\\bMissing configuration:? \"?([A-Z0-9_./:-]+)\"?/g,\n /\\bConfig\\b.*\\bmissing\\b.*\"?([A-Z0-9_./:-]+)\"?/gi,\n ]\n\n for (const re of patterns) {\n let match: RegExpExecArray | null\n while ((match = re.exec(message))) {\n const key = match[1]\n if (typeof key === 'string' && key.length > 0) out.push(key)\n }\n }\n\n return Array.from(new Set(out)).sort((a, b) => a.localeCompare(b))\n}\n\nconst parseMissingServiceIds = (message: string): ReadonlyArray<string> => {\n const out: string[] = []\n const re = /Service not found: ([^\\s(]+)/g\n let match: RegExpExecArray | null\n while ((match = re.exec(message))) {\n const id = match[1]?.replace(/[,:.;]+$/, '')\n if (typeof id === 'string' && id.length > 0) out.push(id)\n }\n return Array.from(new Set(out)).sort((a, b) => a.localeCompare(b))\n}\n\nconst parseMissingDependencyFromCause = (\n cause: Cause.Cause<unknown>,\n): {\n readonly missingServices: ReadonlyArray<string>\n readonly missingConfigKeys: ReadonlyArray<string>\n} => {\n const missingServices: string[] = []\n const missingConfigKeys: string[] = []\n\n const candidates = [...Array.from(Cause.failures(cause)), ...Array.from(Cause.defects(cause))]\n\n for (const candidate of candidates) {\n if (isRecord(candidate) && (candidate as any)._tag === 'ConstructionGuardError') {\n const missingService = (candidate as any).missingService\n if (typeof missingService === 'string' && missingService.length > 0) {\n missingServices.push(missingService)\n }\n }\n\n if (\n isRecord(candidate) &&\n (candidate as any)._tag === 'ConfigError' &&\n (candidate as any)._op === 'MissingData' &&\n Array.isArray((candidate as any).path) &&\n (candidate as any).path.every((k: unknown) => typeof k === 'string' && k.length > 0)\n ) {\n const key = (candidate as any).path.join('.')\n if (key.length > 0) missingConfigKeys.push(key)\n }\n }\n\n const messages: string[] = []\n for (const candidate of candidates) {\n if (candidate instanceof Error) {\n messages.push(candidate.message)\n continue\n }\n if (typeof candidate === 'string') {\n messages.push(candidate)\n continue\n }\n if (isRecord(candidate) && typeof (candidate as any).message === 'string') {\n messages.push(String((candidate as any).message))\n }\n }\n\n try {\n messages.push(Cause.pretty(cause, { renderErrorCause: true }))\n } catch {\n // ignore\n }\n\n const merged = messages.filter((s) => s.length > 0).join('\\n')\n\n if (merged) {\n missingServices.push(...parseMissingServiceIds(merged))\n missingConfigKeys.push(...parseMissingConfigKeys(merged))\n }\n\n return {\n missingServices: Array.from(new Set(missingServices)).sort((a, b) => a.localeCompare(b)),\n missingConfigKeys: Array.from(new Set(missingConfigKeys)).sort((a, b) => a.localeCompare(b)),\n }\n}\n\nconst buildEnvironmentIr = (params: {\n readonly kernelImplementationRef?: KernelImplementationRef\n readonly runtimeServicesEvidence?: RuntimeKernel.RuntimeServicesEvidence\n readonly buildEnvConfig?: Record<string, BuildEnv.BuildEnvConfigValue | undefined>\n readonly missingServices?: ReadonlyArray<string>\n readonly missingConfigKeys?: ReadonlyArray<string>\n}): EnvironmentIr => {\n const providedConfigKeys = Object.keys(params.buildEnvConfig ?? {})\n .filter((k) => k.length > 0 && (params.buildEnvConfig as any)[k] !== undefined)\n .sort((a, b) => a.localeCompare(b))\n\n const missingServices = Array.from(new Set(params.missingServices ?? [])).sort((a, b) => a.localeCompare(b))\n const missingConfigKeys = Array.from(new Set(params.missingConfigKeys ?? [])).sort((a, b) => a.localeCompare(b))\n\n const runtimeServiceIds =\n params.runtimeServicesEvidence?.bindings?.map((b) => b.serviceId).filter((s) => typeof s === 'string') ?? []\n\n const tagIds = Array.from(new Set([...runtimeServiceIds, ...missingServices])).sort((a, b) => a.localeCompare(b))\n\n const configKeys = Array.from(new Set([...providedConfigKeys, ...missingConfigKeys])).sort((a, b) =>\n a.localeCompare(b),\n )\n\n return {\n tagIds,\n configKeys,\n missingServices,\n missingConfigKeys,\n kernelImplementationRef: params.kernelImplementationRef,\n runtimeServicesEvidence: params.runtimeServicesEvidence,\n }\n}\n\nconst toErrorSummaryWithCode = (cause: unknown, code: string, hint?: string): SerializableErrorSummary => {\n const base = toSerializableErrorSummary(cause).errorSummary\n return {\n name: base.name,\n message: base.message,\n code,\n hint: hint ?? base.hint,\n }\n}\n\nconst makeTrialRunTimeoutError = (): Error =>\n Object.assign(new Error('[Logix] trialRunModule timed out'), {\n name: 'TrialRunTimeoutError',\n })\n\nconst awaitFiberExitWithTimeout = <A, E>(\n fiber: Fiber.Fiber<A, E>,\n timeoutMs: number | undefined,\n): Effect.Effect<Exit.Exit<A, E | Error>, never, never> =>\n Effect.gen(function* () {\n const hasTimeout = typeof timeoutMs === 'number' && Number.isFinite(timeoutMs) && timeoutMs > 0\n const start = hasTimeout ? Date.now() : 0\n\n while (true) {\n const exitOpt = yield* Fiber.poll(fiber)\n if (Option.isSome(exitOpt)) {\n return exitOpt.value as Exit.Exit<A, E | Error>\n }\n\n if (hasTimeout) {\n const elapsedMs = Date.now() - start\n if (elapsedMs >= timeoutMs) {\n yield* Fiber.interruptFork(fiber)\n return Exit.fail(makeTrialRunTimeoutError())\n }\n }\n\n // NOTE: timer yield (not TestClock-based)\n yield* Effect.promise(() => new Promise<void>((r) => setTimeout(r, 1)))\n }\n })\n\nexport const trialRunModule = <Sh extends AnyModuleShape>(\n root: RootLike<Sh>,\n options?: TrialRunModuleOptions,\n): Effect.Effect<TrialRunReport, never, never> =>\n Effect.gen(function* () {\n const rootImpl = resolveRootImpl(root)\n\n const session = makeRunSession({\n runId: options?.runId,\n source: options?.source ?? { host: defaultHost(), label: 'trial-run-module' },\n startedAt: options?.startedAt,\n })\n\n const collector = makeEvidenceCollector(session)\n\n const convergeCollector: ConvergeStaticIrCollector = {\n register: (ir) => {\n collector.registerConvergeStaticIr(ir)\n },\n }\n\n const sinksLayer = appendSinks([collector.debugSink as unknown as DebugSink])\n const resolvedDiagnosticsLevel = options?.diagnosticsLevel ?? 'light'\n const diagnosticsLayer = diagnosticsLevel(resolvedDiagnosticsLevel)\n const convergeLayer = appendConvergeStaticIrCollectors([convergeCollector])\n const collectorLayer = evidenceCollectorLayer(collector)\n const sessionLayer = runSessionLayer(session)\n\n const buildEnvConfig = options?.buildEnv?.config\n const buildEnvLayer = BuildEnv.layer({\n runtimeHostKind: options?.buildEnv?.hostKind,\n config: buildEnvConfig,\n configProvider: options?.buildEnv?.configProvider,\n })\n\n const trialLayer = Layer.mergeAll(\n buildEnvLayer,\n options?.layer ?? (Layer.empty as unknown as Layer.Layer<any, any, any>),\n sessionLayer,\n collectorLayer,\n diagnosticsLayer,\n sinksLayer,\n convergeLayer,\n ) as Layer.Layer<any, never, never>\n\n const kernel = yield* makeProgramRunnerKernel(\n (impl) =>\n Runtime.make(impl, {\n layer: trialLayer as any,\n // trial-run does not enable devtools by default; diagnostics is controlled by diagnosticsLevel.\n } as any),\n rootImpl,\n )\n\n const identity = kernel.identity\n\n const bootFiber = kernel.runtime.runFork(rootImpl.module as any)\n const bootExit = yield* awaitFiberExitWithTimeout(bootFiber, options?.trialRunTimeoutMs)\n\n let kernelImplementationRef: KernelImplementationRef | undefined\n let runtimeServicesEvidence: RuntimeKernel.RuntimeServicesEvidence | undefined\n let instanceId: string | undefined\n\n if (Exit.isSuccess(bootExit)) {\n const moduleRuntime = bootExit.value as any\n instanceId =\n typeof moduleRuntime?.instanceId === 'string' && moduleRuntime.instanceId.length > 0\n ? moduleRuntime.instanceId\n : undefined\n kernel.setInstanceId(instanceId)\n\n try {\n kernelImplementationRef = KernelRef.getKernelImplementationRef(moduleRuntime)\n } catch {\n kernelImplementationRef = undefined\n }\n\n if (resolvedDiagnosticsLevel !== 'off') {\n try {\n runtimeServicesEvidence = RuntimeKernel.getRuntimeServicesEvidence(moduleRuntime)\n } catch {\n runtimeServicesEvidence = undefined\n }\n }\n } else {\n const failure = Cause.failureOption(bootExit.cause)\n if (Option.isSome(failure)) {\n const err: any = failure.value\n const instanceIdFromErr = typeof err?.instanceId === 'string' ? err.instanceId : undefined\n if (instanceIdFromErr && instanceIdFromErr.length > 0) {\n kernel.setInstanceId(instanceIdFromErr)\n }\n }\n }\n\n const closeExit = yield* Effect.exit(\n kernel.close({\n timeoutMs:\n typeof options?.closeScopeTimeout === 'number' &&\n Number.isFinite(options.closeScopeTimeout) &&\n options.closeScopeTimeout > 0\n ? options.closeScopeTimeout\n : 1000,\n }),\n )\n\n const evidence = collector.exportEvidencePackage({\n maxEvents: options?.maxEvents ?? 1000,\n })\n\n const manifest = (() => {\n try {\n return extractManifest(root as any, {\n includeStaticIr: true,\n budgets: { maxBytes: 200_000 },\n })\n } catch {\n return undefined\n }\n })()\n\n const staticIr = (() => {\n try {\n return exportStaticIr(root as any)\n } catch {\n return undefined\n }\n })()\n\n let ok = Exit.isSuccess(bootExit) && Exit.isSuccess(closeExit)\n let error: SerializableErrorSummary | undefined\n let summary: unknown | undefined\n\n const depsFromBootFailure = Exit.isFailure(bootExit)\n ? parseMissingDependencyFromCause(bootExit.cause as Cause.Cause<unknown>)\n : { missingServices: [], missingConfigKeys: [] }\n\n const missingServices = depsFromBootFailure.missingServices\n const missingConfigKeys = depsFromBootFailure.missingConfigKeys\n\n const closeError = Exit.isFailure(closeExit) ? Option.getOrUndefined(Cause.dieOption(closeExit.cause)) : undefined\n\n if (!Exit.isSuccess(bootExit)) {\n const failure = Option.getOrUndefined(Cause.failureOption(bootExit.cause))\n const defect = Option.getOrUndefined(Cause.dieOption(bootExit.cause))\n const base = failure ?? defect ?? bootExit.cause\n\n if (missingServices.length > 0 || missingConfigKeys.length > 0) {\n ok = false\n error = toErrorSummaryWithCode(\n base,\n 'MissingDependency',\n missingServices.length > 0\n ? 'Build-time missing service: provide a Layer mock/implementation via options.layer, or move the dependency access to runtime.'\n : 'Build-time missing config: provide the missing key(s) in buildEnv.config, or add a default value to Config.',\n )\n } else if (\n isRecord(base) &&\n ((base as any).name === 'TrialRunTimeoutError' || (base as any)._tag === 'TrialRunTimeout')\n ) {\n ok = false\n error = toErrorSummaryWithCode(\n base,\n 'TrialRunTimeout',\n 'Trial run timed out: check for Layer/assembly phase blocking (Effect.never / unfinished acquire).',\n )\n } else {\n ok = false\n error = toErrorSummaryWithCode(base, 'RuntimeFailure')\n }\n }\n\n if (Exit.isFailure(closeExit)) {\n const died = Option.getOrUndefined(Cause.dieOption(closeExit.cause))\n const failure = Option.getOrUndefined(Cause.failureOption(closeExit.cause))\n const base = died ?? failure ?? closeExit.cause\n\n const closeErrorSummary = (() => {\n const tag = isRecord(base) ? (base as any)._tag : undefined\n if (tag === 'DisposeTimeout') {\n return toErrorSummaryWithCode(\n base,\n 'DisposeTimeout',\n 'Dispose timed out: check for unclosed resource handles, fibers not interrupted, or event listeners not unregistered.',\n )\n }\n return toErrorSummaryWithCode(base, 'RuntimeFailure')\n })()\n\n ok = false\n if (!error) {\n // If boot succeeded but dispose failed, the close error is the primary failure.\n error = closeErrorSummary\n } else {\n // Preserve the primary boot failure (e.g. TrialRunTimeout) but keep dispose failure evidence.\n summary = { __logix: { closeError: closeErrorSummary } }\n }\n }\n\n const environment = buildEnvironmentIr({\n kernelImplementationRef,\n runtimeServicesEvidence,\n buildEnvConfig,\n missingServices,\n missingConfigKeys,\n })\n\n const moduleId =\n typeof (rootImpl.module as any)?.id === 'string' && (rootImpl.module as any).id.length > 0\n ? String((rootImpl.module as any).id)\n : (manifest?.moduleId ?? 'unknown')\n\n const artifacts = collectTrialRunArtifacts({\n exporters: getTrialRunArtifactExporters(rootImpl.module as any),\n ctx: {\n moduleId,\n manifest,\n staticIr: staticIr as any,\n environment,\n },\n })\n\n let report: TrialRunReport = {\n runId: session.runId,\n ok,\n manifest,\n staticIr: staticIr as any,\n artifacts,\n environment,\n evidence,\n summary,\n error,\n }\n\n const maxBytes = options?.budgets?.maxBytes\n if (typeof maxBytes === 'number' && Number.isFinite(maxBytes) && maxBytes > 0) {\n const originalBytes = utf8ByteLength(report)\n if (originalBytes > maxBytes) {\n report = {\n runId: session.runId,\n ok: false,\n environment,\n error: {\n message: `[Logix] TrialRunReport exceeded maxBytes (${originalBytes} > ${maxBytes})`,\n code: 'Oversized',\n hint: 'Reduce maxEvents or budgets.maxBytes, or split manifest/evidence artifacts in CI.',\n },\n summary: {\n __logix: {\n truncated: true,\n maxBytes,\n originalBytes,\n dropped: ['manifest', 'staticIr', 'artifacts', 'evidence'],\n },\n },\n }\n }\n }\n\n return report\n })\n","import { ConfigProvider, Effect, Layer } from 'effect'\nimport * as ConstructionGuard from './ConstructionGuard.js'\nimport {\n RuntimeHost,\n type RuntimeHostKind,\n type RuntimeHostService,\n defaultLayer as defaultRuntimeHostLayer,\n make as makeRuntimeHost,\n layer as runtimeHostLayer,\n} from './RuntimeHost.js'\n\nexport type BuildEnvConfigValue = string | number | boolean\n\nexport interface BuildEnvOptions {\n readonly runtimeHost?: RuntimeHostService\n readonly runtimeHostKind?: RuntimeHostKind\n /**\n * Flat key/value config for mocking feature flags / env variables (values are coerced to string).\n */\n readonly config?: Record<string, BuildEnvConfigValue | undefined>\n /**\n * Advanced: inject a ConfigProvider directly (higher priority than config).\n */\n readonly configProvider?: ConfigProvider.ConfigProvider\n}\n\nconst toConfigProviderFromRecord = (\n record: Record<string, BuildEnvConfigValue | undefined> | undefined,\n): ConfigProvider.ConfigProvider => {\n const map = new Map<string, string>()\n for (const [k, v] of Object.entries(record ?? {})) {\n if (!k) continue\n if (v === undefined) continue\n map.set(k, String(v))\n }\n return ConfigProvider.fromMap(map)\n}\n\nexport const layer = (options: BuildEnvOptions = {}): Layer.Layer<RuntimeHost, never, never> => {\n const runtimeHost = options.runtimeHost\n ? runtimeHostLayer(options.runtimeHost)\n : options.runtimeHostKind\n ? runtimeHostLayer(makeRuntimeHost(options.runtimeHostKind))\n : defaultRuntimeHostLayer\n\n const configProvider = options.configProvider ? options.configProvider : toConfigProviderFromRecord(options.config)\n\n const config = Layer.setConfigProvider(configProvider)\n\n return Layer.mergeAll(runtimeHost, config) as Layer.Layer<RuntimeHost, never, never>\n}\n\nexport const run = <A, E>(\n builder: Effect.Effect<A, E, RuntimeHost>,\n options: BuildEnvOptions = {},\n): Effect.Effect<A, E | ConstructionGuard.ConstructionGuardError, never> =>\n builder.pipe(Effect.provide(layer(options)), ConstructionGuard.guardBuildTime)\n","import { Cause, Effect } from 'effect'\n\nexport interface ConstructionGuardError extends Error {\n readonly _tag: 'ConstructionGuardError'\n readonly kind: 'missing_service' | 'unknown_defect'\n readonly missingService?: string\n readonly hint?: string\n}\n\nexport const makeConstructionGuardError = (options: {\n readonly kind: ConstructionGuardError['kind']\n readonly message: string\n readonly missingService?: string\n readonly hint?: string\n}): ConstructionGuardError =>\n Object.assign(new Error(options.message), {\n _tag: 'ConstructionGuardError',\n kind: options.kind,\n missingService: options.missingService,\n hint: options.hint,\n }) as ConstructionGuardError\n\nconst extractMissingService = (cause: Cause.Cause<unknown>): string | undefined => {\n const candidates = [...Array.from(Cause.defects(cause)), ...Array.from(Cause.failures(cause))]\n\n for (const candidate of candidates) {\n const message =\n candidate instanceof Error ? candidate.message : typeof candidate === 'string' ? candidate : undefined\n\n if (!message) continue\n\n const match = /Service not found: ([^\\s(]+)/.exec(message)\n if (match?.[1]) return match[1]\n }\n\n return undefined\n}\n\n/**\n * guardBuildTime:\n * - During Build Env/Reflection, catch \"missing service\" defects and convert them into actionable errors.\n * - Preserve other failures/defects as-is (do not swallow business error semantics).\n */\nexport const guardBuildTime = <A, E, R>(\n self: Effect.Effect<A, E, R>,\n): Effect.Effect<A, E | ConstructionGuardError, R> =>\n self.pipe(\n Effect.catchAllCause((cause): Effect.Effect<never, ConstructionGuardError | E, never> => {\n const missing = extractMissingService(cause)\n if (missing) {\n return Effect.fail(\n makeConstructionGuardError({\n kind: 'missing_service',\n missingService: missing,\n message: `[ConstructionGuardError] Build-time dependency violation: service \"${missing}\" is not available in Build Env.`,\n hint:\n 'Build-time (Reflection) can only depend on a small set of mockable primitives (e.g. Config/RuntimeHost). ' +\n 'Move business service access to runtime (e.g. Trait handler / Logic run section) or isolate it via explicit injection.',\n }),\n )\n }\n return Effect.failCause(cause) as Effect.Effect<never, ConstructionGuardError | E>\n }),\n )\n","import { Context, Layer } from 'effect'\n\nexport type RuntimeHostKind = 'node' | 'browser' | 'unknown'\n\nexport interface RuntimeHostService {\n readonly kind: RuntimeHostKind\n readonly isNode: boolean\n readonly isBrowser: boolean\n}\n\nconst detectKind = (): RuntimeHostKind => {\n const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined'\n\n if (isBrowser) return 'browser'\n\n const isNode = typeof process !== 'undefined' && typeof (process as any)?.versions?.node === 'string'\n\n if (isNode) return 'node'\n\n return 'unknown'\n}\n\nexport const make = (kind: RuntimeHostKind): RuntimeHostService => ({\n kind,\n isNode: kind === 'node',\n isBrowser: kind === 'browser',\n})\n\nexport class RuntimeHost extends Context.Tag('@logixjs/RuntimeHost')<RuntimeHost, RuntimeHostService>() {}\n\nexport const layer = (service: RuntimeHostService): Layer.Layer<RuntimeHost, never, never> =>\n Layer.succeed(RuntimeHost, service)\n\nexport const mock = (kind: RuntimeHostKind): Layer.Layer<RuntimeHost, never, never> => layer(make(kind))\n\nexport const defaultLayer: Layer.Layer<RuntimeHost, never, never> = layer(make(detectKind()))\n","import { Schema } from 'effect'\nimport type { AnyModuleShape, ModuleImpl } from '../runtime/core/module.js'\nimport * as Action from '../action.js'\nimport { stableStringify, fnv1a32 } from '../digest.js'\nimport { isJsonValue, type JsonValue } from '../observability/jsonValue.js'\nimport { exportStaticIr } from './staticIr.js'\n\nexport interface ManifestBudgets {\n readonly maxBytes?: number\n}\n\nexport interface ExtractManifestOptions {\n readonly includeStaticIr?: boolean\n readonly budgets?: ManifestBudgets\n}\n\nexport interface ModuleManifestLogicUnit {\n readonly kind: string\n readonly id: string\n readonly derived?: boolean\n readonly name?: string\n}\n\nexport interface ModuleManifestAction {\n readonly actionTag: string\n readonly payload: {\n readonly kind: 'void' | 'nonVoid' | 'unknown'\n }\n readonly primaryReducer?: {\n readonly kind: 'declared' | 'registered'\n }\n readonly source?: {\n readonly file: string\n readonly line: number\n readonly column: number\n }\n}\n\nexport interface ModuleManifestEffect {\n readonly actionTag: string\n readonly sourceKey: string\n readonly kind: 'declared' | 'registered'\n readonly source?: {\n readonly file: string\n readonly line: number\n readonly column: number\n }\n}\n\nexport interface ModuleManifest {\n readonly manifestVersion: string\n readonly moduleId: string\n readonly actionKeys: ReadonlyArray<string>\n readonly actions: ReadonlyArray<ModuleManifestAction>\n readonly effects?: ReadonlyArray<ModuleManifestEffect>\n readonly schemaKeys?: ReadonlyArray<string>\n readonly logicUnits?: ReadonlyArray<ModuleManifestLogicUnit>\n readonly source?: {\n readonly file: string\n readonly line: number\n readonly column: number\n }\n readonly meta?: Record<string, JsonValue>\n readonly staticIr?: ReturnType<typeof exportStaticIr>\n readonly digest: string\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst isModuleImpl = (value: unknown): value is ModuleImpl<any, AnyModuleShape, any> =>\n isRecord(value) && value._tag === 'ModuleImpl' && isRecord(value.module)\n\nconst resolveModuleId = (input: unknown): string => {\n if (isModuleImpl(input)) {\n const id = (input.module as any).id\n return typeof id === 'string' && id.length > 0 ? id : 'unknown'\n }\n\n if (isRecord(input)) {\n const id = input.id\n if (typeof id === 'string' && id.length > 0) return id\n const tag = (input as any).tag\n if (tag && (typeof tag === 'object' || typeof tag === 'function')) {\n const tagId = (tag as any).id\n if (typeof tagId === 'string' && tagId.length > 0) return tagId\n }\n }\n\n return 'unknown'\n}\n\nconst resolveActionKeys = (input: unknown): ReadonlyArray<string> => {\n const tag = isModuleImpl(input) ? (input.module as any) : (input as any)?.tag\n const actionMap = tag?.shape?.actionMap\n if (!isRecord(actionMap)) return []\n return Object.keys(actionMap).sort()\n}\n\ntype DevSource = ModuleManifest['source']\n\nconst resolveDevSource = (input: unknown): DevSource | undefined => {\n if (!isRecord(input)) return undefined\n const file = (input as any).file\n const line = (input as any).line\n const column = (input as any).column\n if (typeof file !== 'string' || file.length === 0) return undefined\n if (typeof line !== 'number' || !Number.isInteger(line) || line < 1) return undefined\n if (typeof column !== 'number' || !Number.isInteger(column) || column < 1) return undefined\n return { file, line, column }\n}\n\nconst resolveTokenSource = (token: unknown): DevSource | undefined => {\n if (!token || (typeof token !== 'object' && typeof token !== 'function')) return undefined\n return resolveDevSource((token as any).source)\n}\n\nconst resolveActions = (input: unknown): ReadonlyArray<ModuleManifestAction> => {\n const tag = isModuleImpl(input) ? (input.module as any) : (input as any)?.tag\n const actionMap = tag?.shape?.actionMap\n if (!isRecord(actionMap)) return []\n\n const moduleSource = resolveSource(input)\n const reducers = isRecord(tag?.reducers) ? (tag.reducers as Record<string, unknown>) : undefined\n\n const actionTags = Object.keys(actionMap).sort()\n\n const out: Array<ModuleManifestAction> = []\n for (const actionTag of actionTags) {\n const token = actionMap[actionTag]\n const source = resolveTokenSource(token) ?? moduleSource\n const payloadKind =\n Action.isActionToken(token) && Schema.isSchema((token as Action.AnyActionToken).schema)\n ? (token as Action.AnyActionToken).schema === Schema.Void\n ? 'void'\n : 'nonVoid'\n : 'unknown'\n\n const primaryReducer =\n reducers && typeof reducers[actionTag] === 'function' ? ({ kind: 'declared' } as const) : undefined\n\n out.push({\n actionTag,\n payload: { kind: payloadKind },\n ...(primaryReducer ? { primaryReducer } : {}),\n ...(source ? { source } : {}),\n })\n }\n\n return out\n}\n\nconst MODULE_DECLARED_EFFECTS = Symbol.for('logix.module.effects.declared')\n\nconst resolveEffects = (input: unknown): ReadonlyArray<ModuleManifestEffect> | undefined => {\n const tag = isModuleImpl(input) ? (input.module as any) : (input as any)?.tag\n const actionMap = tag?.shape?.actionMap\n if (!isRecord(actionMap)) return undefined\n\n const effectsRaw = (tag as any)?.[MODULE_DECLARED_EFFECTS]\n if (!isRecord(effectsRaw)) return undefined\n\n const source = resolveSource(input)\n\n const logicUnitId = '__logix_internal:effects:declared'\n const handlerIds = new WeakMap<(...args: any[]) => any, string>()\n let nextHandlerSeq = 0\n\n const out: Array<ModuleManifestEffect> = []\n\n for (const actionTag of Object.keys(effectsRaw).sort()) {\n if (!(actionTag in actionMap)) continue\n\n const handlers = (effectsRaw as any)[actionTag]\n if (!Array.isArray(handlers)) continue\n\n for (const handler of handlers) {\n if (typeof handler !== 'function') continue\n\n let handlerId = handlerIds.get(handler)\n if (!handlerId) {\n nextHandlerSeq += 1\n handlerId = `h${nextHandlerSeq}`\n handlerIds.set(handler, handlerId)\n }\n\n const sourceKey = `${logicUnitId}::${handlerId}`\n\n out.push({\n actionTag,\n sourceKey,\n kind: 'declared',\n ...(source ? { source } : {}),\n })\n }\n }\n\n const seen = new Set<string>()\n const deduped: Array<ModuleManifestEffect> = []\n for (const item of out) {\n const key = `${item.actionTag}\\u0000${item.sourceKey}`\n if (seen.has(key)) continue\n seen.add(key)\n deduped.push(item)\n }\n\n deduped.sort((a, b) =>\n a.actionTag < b.actionTag ? -1 : a.actionTag > b.actionTag ? 1 : a.sourceKey.localeCompare(b.sourceKey),\n )\n return deduped.length > 0 ? deduped : undefined\n}\n\nconst resolveSchemaKeys = (input: unknown): ReadonlyArray<string> | undefined => {\n if (!isRecord(input)) return undefined\n const schemas = (input as any).schemas\n if (!isRecord(schemas)) return undefined\n return Object.keys(schemas).sort()\n}\n\nconst resolveSource = (input: unknown): ModuleManifest['source'] | undefined => {\n if (!isRecord(input)) return undefined\n const dev = (input as any).dev\n return resolveDevSource(dev?.source)\n}\n\nconst resolveMeta = (input: unknown): Record<string, JsonValue> | undefined => {\n if (!isRecord(input)) return undefined\n const meta = (input as any).meta\n if (!isRecord(meta)) return undefined\n\n const out: Record<string, JsonValue> = {}\n for (const key of Object.keys(meta).sort()) {\n const value = meta[key]\n if (isJsonValue(value)) {\n out[key] = value\n }\n }\n return Object.keys(out).length > 0 ? out : undefined\n}\n\nconst MODULE_INTERNAL = Symbol.for('logix.module.internal')\n\nconst resolveLogicUnits = (input: unknown): ReadonlyArray<ModuleManifestLogicUnit> | undefined => {\n if (!isRecord(input)) return undefined\n const internal = (input as any)[MODULE_INTERNAL]\n const mounted = internal?.mounted\n if (!Array.isArray(mounted)) return undefined\n\n const out: Array<ModuleManifestLogicUnit> = []\n for (const unit of mounted) {\n if (!isRecord(unit)) continue\n const kind = unit.kind\n const id = unit.id\n if (typeof kind !== 'string' || kind.length === 0) continue\n if (typeof id !== 'string' || id.length === 0) continue\n\n const derived = unit.derived === true ? true : undefined\n const name = typeof unit.name === 'string' ? unit.name : undefined\n out.push({ kind, id, derived, name })\n }\n\n out.sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : a.kind.localeCompare(b.kind)))\n return out.length > 0 ? out : undefined\n}\n\ntype DigestBase = {\n readonly manifestVersion: string\n readonly moduleId: string\n readonly actionKeys: ReadonlyArray<string>\n readonly actions: ReadonlyArray<ModuleManifestAction>\n readonly effects?: ReadonlyArray<ModuleManifestEffect>\n readonly schemaKeys?: ReadonlyArray<string>\n readonly logicUnits?: ReadonlyArray<ModuleManifestLogicUnit>\n readonly staticIrDigest?: string\n}\n\nconst digestOf = (base: DigestBase): string => `manifest:067:${fnv1a32(stableStringify(base))}`\n\nconst utf8ByteLength = (value: unknown): number => {\n const json = JSON.stringify(value)\n if (typeof TextEncoder !== 'undefined') {\n return new TextEncoder().encode(json).length\n }\n return json.length\n}\n\nconst applyMaxBytes = (manifest: ModuleManifest, maxBytes: number): ModuleManifest => {\n const originalBytes = utf8ByteLength(manifest)\n if (originalBytes <= maxBytes) return manifest\n\n const dropped: Array<string> = []\n const truncatedArrays: Array<string> = []\n\n const baseMarker = (): JsonValue => ({\n truncated: true,\n maxBytes,\n originalBytes,\n dropped,\n truncatedArrays,\n })\n\n const withMarker = (next: ModuleManifest): ModuleManifest => {\n const meta: Record<string, JsonValue> = {\n __logix: baseMarker(),\n }\n return { ...next, meta }\n }\n\n let next: ModuleManifest = withMarker(manifest)\n\n const markTruncatedArray = (name: string): void => {\n if (!truncatedArrays.includes(name)) {\n truncatedArrays.push(name)\n }\n }\n\n const dropField = (field: keyof ModuleManifest): void => {\n if ((next as any)[field] !== undefined) {\n dropped.push(String(field))\n next = withMarker({ ...(next as any), [field]: undefined })\n }\n }\n\n // Deterministic trimming order (least valuable first).\n dropField('meta')\n if (utf8ByteLength(next) <= maxBytes) return next\n\n dropField('source')\n if (utf8ByteLength(next) <= maxBytes) return next\n\n dropField('staticIr')\n if (utf8ByteLength(next) <= maxBytes) return next\n\n dropField('logicUnits')\n if (utf8ByteLength(next) <= maxBytes) return next\n\n dropField('schemaKeys')\n if (utf8ByteLength(next) <= maxBytes) return next\n\n dropField('effects')\n if (utf8ByteLength(next) <= maxBytes) return next\n\n // Last resort: deterministically truncate tail items (stable order: actions[] sorted by actionTag).\n const truncateActionsToFit = (): void => {\n const total = next.actions.length\n if (total <= 1) return\n\n // Find the largest prefix that fits.\n let lo = 1\n let hi = total\n let best = 1\n\n while (lo <= hi) {\n const mid = Math.floor((lo + hi) / 2)\n const candidate = withMarker({\n ...next,\n actions: next.actions.slice(0, mid),\n actionKeys: next.actionKeys.slice(0, mid),\n })\n if (utf8ByteLength(candidate) <= maxBytes) {\n best = mid\n lo = mid + 1\n } else {\n hi = mid - 1\n }\n }\n\n if (best < total) {\n markTruncatedArray('actions')\n markTruncatedArray('actionKeys')\n next = withMarker({\n ...next,\n actions: next.actions.slice(0, best),\n actionKeys: next.actionKeys.slice(0, best),\n })\n }\n }\n\n while (utf8ByteLength(next) > maxBytes) {\n const beforeLen = next.actions.length\n truncateActionsToFit()\n if (next.actions.length === beforeLen) {\n break\n }\n }\n\n return next\n}\n\nexport const extractManifest = (module: unknown, options?: ExtractManifestOptions): ModuleManifest => {\n const manifestVersion = '067'\n const moduleId = resolveModuleId(module)\n const actionKeys = resolveActionKeys(module)\n const actions = resolveActions(module)\n const effects = resolveEffects(module)\n\n const schemaKeys = resolveSchemaKeys(module)\n const logicUnits = resolveLogicUnits(module)\n const source = resolveSource(module)\n const meta = resolveMeta(module)\n\n const staticIr = options?.includeStaticIr ? exportStaticIr(module) : undefined\n\n const digestBase: DigestBase = {\n manifestVersion,\n moduleId,\n actionKeys,\n actions,\n effects,\n schemaKeys,\n logicUnits,\n staticIrDigest: staticIr?.digest,\n }\n\n const digest = digestOf(digestBase)\n\n const manifest: ModuleManifest = {\n manifestVersion,\n moduleId,\n actionKeys,\n actions,\n effects,\n schemaKeys,\n logicUnits,\n source,\n meta,\n staticIr,\n digest,\n }\n\n const maxBytes = options?.budgets?.maxBytes\n if (typeof maxBytes === 'number' && Number.isFinite(maxBytes) && maxBytes > 0) {\n return applyMaxBytes(manifest, maxBytes)\n }\n\n return manifest\n}\n","import type { AnyModuleShape, ModuleImpl } from '../runtime/core/module.js'\nimport { getModuleTraitsProgram } from '../runtime/core/runtimeInternalsAccessor.js'\nimport type { StaticIr } from '../state-trait/ir.js'\nimport type { StateTraitProgram } from '../state-trait/model.js'\nimport { exportStaticIr as exportStateTraitStaticIr } from '../state-trait/ir.js'\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst isModuleImpl = (value: unknown): value is ModuleImpl<any, AnyModuleShape, any> =>\n isRecord(value) && value._tag === 'ModuleImpl' && isRecord(value.module)\n\nconst resolveModuleId = (input: unknown): string => {\n if (isModuleImpl(input)) {\n const id = (input.module as any).id\n return typeof id === 'string' && id.length > 0 ? id : 'unknown'\n }\n\n if (isRecord(input)) {\n const id = input.id\n if (typeof id === 'string' && id.length > 0) return id\n const tag = (input as any).tag\n if (tag && (typeof tag === 'object' || typeof tag === 'function')) {\n const tagId = (tag as any).id\n if (typeof tagId === 'string' && tagId.length > 0) return tagId\n }\n }\n\n return 'unknown'\n}\n\nconst resolveModuleTag = (input: unknown): unknown => {\n if (isModuleImpl(input)) return input.module\n if (isRecord(input) && (input as any).tag) return (input as any).tag\n return undefined\n}\n\nexport const exportStaticIr = (module: unknown): StaticIr | undefined => {\n const tag = resolveModuleTag(module)\n if (!tag) return undefined\n\n const program = getModuleTraitsProgram(tag) as StateTraitProgram<any> | undefined\n if (!program) return undefined\n\n return exportStateTraitStaticIr({\n program,\n moduleId: resolveModuleId(module),\n })\n}\n","import { Effect, Layer, ManagedRuntime } from 'effect'\nimport type { AnyModuleShape, ModuleImpl } from './core/module.js'\nimport * as AppRuntimeImpl from './AppRuntime.js'\n\n/**\n * Runtime options:\n * - layer: extra top-level Env (e.g. Config / platform services) merged with Root ModuleImpl.layer.\n * - onError: app-level error handler entrypoint used to report uncaught errors at the Runtime level.\n */\nexport interface RuntimeOptions {\n readonly layer?: Layer.Layer<any, never, never>\n readonly onError?: (cause: import('effect').Cause.Cause<unknown>) => Effect.Effect<void>\n}\n\n/**\n * Runtime.make\n *\n * Build an application-level Runtime given a root ModuleImpl:\n *\n * - Use RootImpl.module + RootImpl.layer as the single global module.\n * - Fork RootImpl.processes as long-lived processes within the Runtime scope.\n * - Reuse the existing AppRuntime implementation as the underlying container and expose only ManagedRuntime.\n *\n * Notes:\n * - Uses broad any/never at the type level to avoid complex Env inference here.\n * - Business code only needs to ensure RootImpl.layer and options.layer together can provide the full Env.\n */\nexport const make = (\n rootImpl: ModuleImpl<any, AnyModuleShape, any>,\n options?: RuntimeOptions,\n): ManagedRuntime.ManagedRuntime<any, never> => {\n const appConfig: AppRuntimeImpl.LogixAppConfig<any> = {\n layer: (options?.layer ?? Layer.empty) as Layer.Layer<any, never, never>,\n modules: [AppRuntimeImpl.provide(rootImpl.module, rootImpl.layer as Layer.Layer<any, any, any>)],\n processes: rootImpl.processes ?? [],\n onError: options?.onError,\n }\n\n const app = AppRuntimeImpl.makeApp(appConfig)\n return app.makeRuntime() as ManagedRuntime.ManagedRuntime<any, never>\n}\n","import type { JsonValue } from '../jsonValue.js'\nimport type { SerializableErrorSummary } from '../../runtime/core/errorSummary.js'\n\nexport type ArtifactKey = string\n\nexport const artifactKeySchemaPattern = '^@[^\\\\s/]+\\\\/[^\\\\s@]+@v\\\\d+$' as const\n\nexport const isArtifactKey = (input: unknown): input is ArtifactKey =>\n typeof input === 'string' && /^@[^\\s/]+\\/[^\\s@]+@v\\d+$/.test(input)\n\ntype EnvelopeBase = {\n readonly artifactKey: ArtifactKey\n readonly truncated?: boolean\n readonly budgetBytes?: number\n readonly actualBytes?: number\n readonly digest?: string\n readonly notes?: JsonValue\n}\n\nexport type ArtifactEnvelope =\n | (EnvelopeBase & {\n readonly ok: true\n readonly value: JsonValue\n readonly error?: never\n })\n | (EnvelopeBase & {\n readonly ok: false\n readonly error: SerializableErrorSummary\n readonly value?: never\n })\n\nexport type TrialRunArtifacts = Readonly<Record<ArtifactKey, ArtifactEnvelope>>\n","import { fnv1a32, stableStringify } from '../../digest.js'\nimport type { JsonValue } from '../jsonValue.js'\n\nexport interface JsonValueDigest {\n readonly stableJson: string\n readonly bytes: number\n readonly digest: string\n}\n\nconst utf8ByteLengthString = (text: string): number => {\n if (typeof TextEncoder !== 'undefined') {\n return new TextEncoder().encode(text).length\n }\n return text.length\n}\n\nexport const digestJsonValue = (value: JsonValue): JsonValueDigest => {\n const stableJson = stableStringify(value)\n const bytes = utf8ByteLengthString(stableJson)\n return {\n stableJson,\n bytes,\n digest: `artifact:031:${fnv1a32(stableJson)}`,\n }\n}\n","import type { SerializableErrorSummary } from '../../runtime/core/errorSummary.js'\nimport { toSerializableErrorSummary } from '../../runtime/core/errorSummary.js'\nimport { isJsonValue, type JsonValue } from '../jsonValue.js'\nimport type { ArtifactEnvelope, ArtifactKey, TrialRunArtifacts } from './model.js'\nimport { isArtifactKey } from './model.js'\nimport type { TrialRunArtifactExporter, TrialRunArtifactInspectionContext } from './exporter.js'\nimport { digestJsonValue } from './digest.js'\n\nexport interface TrialRunArtifactsBudgets {\n /**\n * Per-artifact maximum serialized bytes (UTF-8).\n * Default: 50KB.\n */\n readonly maxBytes?: number\n}\n\nexport interface CollectTrialRunArtifactsOptions {\n readonly exporters: ReadonlyArray<TrialRunArtifactExporter>\n readonly ctx: TrialRunArtifactInspectionContext\n readonly budgets?: TrialRunArtifactsBudgets\n}\n\nconst toErrorSummaryWithCode = (cause: unknown, code: string, hint?: string): SerializableErrorSummary => {\n const base = toSerializableErrorSummary(cause).errorSummary\n return {\n name: base.name,\n message: base.message,\n code,\n hint: hint ?? base.hint,\n }\n}\n\nconst defaultArtifactBudgetBytes = 50 * 1024\n\nconst budgetOf = (budgets: TrialRunArtifactsBudgets | undefined): number =>\n typeof budgets?.maxBytes === 'number' && Number.isFinite(budgets.maxBytes) && budgets.maxBytes > 0\n ? budgets.maxBytes\n : defaultArtifactBudgetBytes\n\ntype Collected = {\n readonly artifactKey: ArtifactKey\n readonly envelope: ArtifactEnvelope\n}\n\nconst makeConflictEnvelope = (artifactKey: ArtifactKey, exporterIds: ReadonlyArray<string>): Collected => {\n const ids = Array.from(new Set(exporterIds.map((s) => String(s)).filter((s) => s.length > 0))).sort((a, b) =>\n a.localeCompare(b),\n )\n return {\n artifactKey,\n envelope: {\n artifactKey,\n ok: false,\n error: {\n name: 'ArtifactKeyConflictError',\n message: `[Logix] TrialRun artifact key conflict: ${artifactKey}`,\n code: 'ArtifactKeyConflict',\n hint: ids.length > 0 ? `conflictingExporters=${ids.join(',')}` : undefined,\n },\n },\n }\n}\n\nconst truncateJsonValue = (\n value: JsonValue,\n maxBytes: number,\n): { readonly value: JsonValue; readonly actualBytes: number; readonly digest: string } => {\n const analyzed = digestJsonValue(value)\n const json = analyzed.stableJson\n const bytes = analyzed.bytes\n if (bytes <= maxBytes) {\n return { value, actualBytes: bytes, digest: analyzed.digest }\n }\n\n const previewChars = Math.min(json.length, Math.max(0, Math.min(256, maxBytes)))\n const preview = json.slice(0, previewChars)\n return {\n value: {\n _tag: 'oversized',\n bytes,\n preview,\n },\n actualBytes: bytes,\n digest: analyzed.digest,\n }\n}\n\nexport const collectTrialRunArtifacts = (options: CollectTrialRunArtifactsOptions): TrialRunArtifacts | undefined => {\n const exportersSorted = Array.from(options.exporters).sort((a, b) => {\n const ka = String(a?.artifactKey ?? '')\n const kb = String(b?.artifactKey ?? '')\n if (ka < kb) return -1\n if (ka > kb) return 1\n const ia = String(a?.exporterId ?? '')\n const ib = String(b?.exporterId ?? '')\n return ia.localeCompare(ib)\n })\n\n const conflicts = new Map<ArtifactKey, Array<string>>()\n for (const ex of exportersSorted) {\n const key = ex?.artifactKey\n const id = String(ex?.exporterId ?? '')\n if (!isArtifactKey(key)) {\n continue\n }\n const current = conflicts.get(key)\n if (current) current.push(id)\n else conflicts.set(key, [id])\n }\n\n const conflictKeys = new Set<ArtifactKey>()\n for (const [k, ids] of conflicts) {\n const unique = Array.from(new Set(ids))\n if (unique.length > 1) {\n conflictKeys.add(k)\n }\n }\n\n const maxBytes = budgetOf(options.budgets)\n const collected: Array<Collected> = []\n\n for (const exporter of exportersSorted) {\n const artifactKey = exporter?.artifactKey\n if (!isArtifactKey(artifactKey)) {\n continue\n }\n if (conflictKeys.has(artifactKey)) {\n continue\n }\n\n try {\n const value = exporter.export(options.ctx)\n if (value === undefined) continue\n if (!isJsonValue(value)) {\n collected.push({\n artifactKey,\n envelope: {\n artifactKey,\n ok: false,\n error: toErrorSummaryWithCode(\n new Error(`[Logix] Artifact exporter returned non-JsonValue: ${exporter.exporterId}`),\n 'ArtifactNonSerializable',\n `artifactKey=${artifactKey} exporterId=${exporter.exporterId}`,\n ),\n },\n })\n continue\n }\n\n const truncated = truncateJsonValue(value, maxBytes)\n const envelope: ArtifactEnvelope = {\n artifactKey,\n ok: true,\n value: truncated.value,\n digest: truncated.digest,\n ...(truncated.actualBytes > maxBytes\n ? {\n truncated: true,\n budgetBytes: maxBytes,\n actualBytes: truncated.actualBytes,\n }\n : {\n budgetBytes: maxBytes,\n actualBytes: truncated.actualBytes,\n }),\n }\n\n collected.push({ artifactKey, envelope })\n } catch (e) {\n collected.push({\n artifactKey,\n envelope: {\n artifactKey,\n ok: false,\n error: toErrorSummaryWithCode(\n e,\n 'ArtifactExportFailed',\n `artifactKey=${artifactKey} exporterId=${exporter.exporterId}`,\n ),\n },\n })\n }\n }\n\n for (const conflictKey of Array.from(conflictKeys).sort((a, b) => a.localeCompare(b))) {\n collected.push(makeConflictEnvelope(conflictKey, conflicts.get(conflictKey) ?? []))\n }\n\n if (collected.length === 0) return undefined\n\n collected.sort((a, b) => a.artifactKey.localeCompare(b.artifactKey))\n\n return Object.fromEntries(collected.map((c) => [c.artifactKey, c.envelope])) satisfies TrialRunArtifacts\n}\n","import type { TrialRunArtifactExporter } from './exporter.js'\n\nconst ARTIFACT_EXPORTERS = Symbol.for('logix.module.trialRunArtifactExporters')\n\nexport const registerTrialRunArtifactExporter = (tag: unknown, exporter: TrialRunArtifactExporter): void => {\n if (!tag || (typeof tag !== 'object' && typeof tag !== 'function')) {\n throw new Error('[Logix] registerTrialRunArtifactExporter: invalid module tag')\n }\n\n const current = ((tag as any)[ARTIFACT_EXPORTERS] ?? []) as unknown\n const next = Array.isArray(current) ? [...current, exporter] : [exporter]\n ;(tag as any)[ARTIFACT_EXPORTERS] = next\n}\n\nexport const getTrialRunArtifactExporters = (tag: unknown): ReadonlyArray<TrialRunArtifactExporter> => {\n if (!tag || (typeof tag !== 'object' && typeof tag !== 'function')) {\n return []\n }\n\n const current = (tag as any)[ARTIFACT_EXPORTERS] as unknown\n if (!Array.isArray(current)) return []\n return current.filter((x): x is TrialRunArtifactExporter => x && typeof x === 'object')\n}\n","import { Context, Effect, Exit, Layer } from 'effect'\nimport type { AnyModuleShape, ModuleImpl } from './internal/module.js'\nimport type { AnyModule } from './Module.js'\nimport type { StaticIr } from './internal/state-trait/ir.js'\nimport type { ExtractManifestOptions, ModuleManifest } from './internal/reflection/manifest.js'\nimport * as Manifest from './internal/reflection/manifest.js'\nimport * as StaticIrExport from './internal/reflection/staticIr.js'\nimport type { DiffManifestOptions, ModuleManifestDiff } from './internal/reflection/diff.js'\nimport * as ManifestDiff from './internal/reflection/diff.js'\nimport type {\n KernelContractVerificationResult,\n VerifyKernelContractOptions,\n} from './internal/reflection/kernelContract.js'\nimport { verifyKernelContract as verifyKernelContractInternal } from './internal/reflection/kernelContract.js'\nimport { trialRun } from './internal/observability/trialRun.js'\nimport type { RuntimeServicesOverrides } from './Kernel.js'\nimport * as Kernel from './Kernel.js'\nimport type * as Debug from './internal/runtime/core/DebugSink.js'\n\nexport type {\n ModuleManifest,\n ExtractManifestOptions,\n ModuleManifestDiff,\n DiffManifestOptions,\n KernelContractVerificationResult,\n VerifyKernelContractOptions,\n}\n\ntype AnyModuleLike = { readonly impl: ModuleImpl<any, AnyModuleShape, any> }\ntype RootLike<Sh extends AnyModuleShape> = ModuleImpl<any, Sh, any> | AnyModuleLike\n\nconst resolveRootImpl = <Sh extends AnyModuleShape>(root: RootLike<Sh>): ModuleImpl<any, Sh, any> =>\n ((root as any)?._tag === 'ModuleImpl'\n ? (root as ModuleImpl<any, Sh, any>)\n : ((root as any)?.impl as ModuleImpl<any, Sh, any>)) satisfies ModuleImpl<any, Sh, any>\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst stableJson = (value: unknown): string => JSON.stringify(value) ?? ''\n\nconst diffMetaKeys = (before: unknown, after: unknown): ReadonlyArray<string> => {\n const b = isRecord(before) ? before : {}\n const a = isRecord(after) ? after : {}\n const keys = Array.from(new Set([...Object.keys(b), ...Object.keys(a)])).sort((x, y) => x.localeCompare(y))\n const changed: string[] = []\n for (const k of keys) {\n if (stableJson((b as any)[k]) !== stableJson((a as any)[k])) {\n changed.push(k)\n }\n }\n return changed\n}\n\nexport interface KernelContractAllowedDiff {\n readonly metaKey: string\n readonly count: number\n readonly reason?: string\n}\n\nconst tryAllowlistKernelContractDiff = (args: {\n readonly result: KernelContractVerificationResult\n readonly allowlist: ReadonlyArray<Kernel.KernelContractMetaAllowlistItem>\n}): { readonly verdict: 'PASS' | 'FAIL'; readonly allowedDiffs: ReadonlyArray<KernelContractAllowedDiff> } => {\n if (args.allowlist.length === 0) {\n return { verdict: args.result.verdict, allowedDiffs: [] }\n }\n\n const allow = new Map<string, string | undefined>()\n for (const item of args.allowlist) {\n allow.set(item.metaKey, item.reason)\n }\n\n const allowedCounts = new Map<string, number>()\n\n for (const change of args.result.changes) {\n if (change.code !== 'op.changed') {\n return { verdict: 'FAIL', allowedDiffs: [] }\n }\n\n const before = change.before as any\n const after = change.after as any\n if (!isRecord(before) || !isRecord(after)) {\n return { verdict: 'FAIL', allowedDiffs: [] }\n }\n\n const anchorBefore = before.anchor\n const anchorAfter = after.anchor\n if (stableJson(anchorBefore) !== stableJson(anchorAfter)) {\n return { verdict: 'FAIL', allowedDiffs: [] }\n }\n if (stableJson(before.moduleId) !== stableJson(after.moduleId)) {\n return { verdict: 'FAIL', allowedDiffs: [] }\n }\n if (stableJson(before.kind) !== stableJson(after.kind)) {\n return { verdict: 'FAIL', allowedDiffs: [] }\n }\n if (stableJson(before.name) !== stableJson(after.name)) {\n return { verdict: 'FAIL', allowedDiffs: [] }\n }\n\n const changed = diffMetaKeys(before.meta, after.meta)\n for (const metaKey of changed) {\n if (!allow.has(metaKey)) {\n return { verdict: 'FAIL', allowedDiffs: [] }\n }\n allowedCounts.set(metaKey, (allowedCounts.get(metaKey) ?? 0) + 1)\n }\n }\n\n const allowedDiffs = Array.from(allowedCounts.entries())\n .map(([metaKey, count]) => ({\n metaKey,\n count,\n ...(allow.get(metaKey) ? { reason: allow.get(metaKey) } : {}),\n }))\n .sort((a, b) => a.metaKey.localeCompare(b.metaKey))\n\n return { verdict: 'PASS', allowedDiffs }\n}\n\nexport interface FullCutoverGateTrialRunOptions<Sh extends AnyModuleShape> {\n readonly runId?: string\n readonly layer?: Layer.Layer<any, any, any>\n readonly runtimeServicesInstanceOverrides?: RuntimeServicesOverrides\n readonly interaction?: (runtime: any) => Effect.Effect<void, any, any>\n}\n\nexport interface VerifyFullCutoverGateOptions<Sh extends AnyModuleShape> extends VerifyKernelContractOptions<Sh> {\n readonly mode?: Kernel.FullCutoverGateMode\n /**\n * Evidence trimming level for gate evaluation:\n * - `off`: minimal summary (must still be runnable)\n * - `light` / `full`: add explainable details\n */\n readonly gateDiagnosticsLevel?: Debug.DiagnosticsLevel\n /**\n * Contract diff allowlist (disabled by default).\n * - Only allows specific op meta keys (by metaKey); the SSoT is code (KernelContractMetaAllowlist).\n */\n readonly enableContractMetaAllowlist?: boolean\n /**\n * After-run options used for gate evaluation; defaults to `options.after`.\n *\n * Only used to read runtimeServicesEvidence/kernelRef; does not rely on debug logs.\n */\n readonly gateAfter?: FullCutoverGateTrialRunOptions<Sh>\n}\n\nexport interface FullCutoverGateVerificationResult {\n readonly version: 'v1'\n readonly verdict: 'PASS' | 'FAIL'\n readonly gate: Kernel.FullCutoverGateResult\n readonly contract: KernelContractVerificationResult\n readonly contractVerdict: 'PASS' | 'FAIL'\n readonly allowedDiffs?: ReadonlyArray<KernelContractAllowedDiff>\n}\n\n/**\n * Reflection.extractManifest\n *\n * Extracts a platform-consumable Manifest IR (JSON, diffable) from the final module object (`AnyModule` / `ModuleImpl`).\n */\nexport const extractManifest = (\n module: ModuleImpl<any, AnyModuleShape, any> | AnyModule,\n options?: ExtractManifestOptions,\n): ModuleManifest => Manifest.extractManifest(module, options)\n\n/**\n * Reflection.diffManifest\n *\n * Diffs two Manifests and produces a stable, machine-readable summary (CI contract guard / UI reuse).\n */\nexport const diffManifest = (\n before: ModuleManifest,\n after: ModuleManifest,\n options?: DiffManifestOptions,\n): ModuleManifestDiff => ManifestDiff.diffManifest(before, after, options)\n\n/**\n * Reflection.exportStaticIr\n *\n * If the module contains a StateTrait program, exports canonical StaticIR (same shape and digest as StateTrait.exportStaticIr).\n */\nexport const exportStaticIr = (module: ModuleImpl<any, AnyModuleShape, any> | AnyModule): StaticIr | undefined =>\n StaticIrExport.exportStaticIr(module)\n\n/**\n * Reflection.verifyKernelContract\n *\n * Runs two trial-runs (with optional different Layers/overrides) and exports a stable, machine-readable kernel contract diff report.\n */\nexport const verifyKernelContract = <Sh extends AnyModuleShape>(\n module: ModuleImpl<any, Sh, any> | AnyModule,\n options?: VerifyKernelContractOptions<Sh>,\n): import('effect').Effect.Effect<KernelContractVerificationResult, never, any> =>\n verifyKernelContractInternal(module as any, options as any)\n\nexport const verifyFullCutoverGate = <Sh extends AnyModuleShape>(\n module: ModuleImpl<any, Sh, any> | AnyModule,\n options?: VerifyFullCutoverGateOptions<Sh>,\n): Effect.Effect<FullCutoverGateVerificationResult, never, any> =>\n Effect.gen(function* () {\n const rootImpl = resolveRootImpl(module as any)\n\n const contractDiagnosticsLevel: Debug.DiagnosticsLevel =\n (options?.diagnosticsLevel as any) === 'off' ? 'light' : ((options?.diagnosticsLevel as any) ?? 'light')\n\n const contract = yield* verifyKernelContractInternal(module as any, {\n ...(options as any),\n diagnosticsLevel: contractDiagnosticsLevel,\n })\n\n const allowlistEnabled = options?.enableContractMetaAllowlist === true\n const allowlist = allowlistEnabled ? Kernel.KernelContractMetaAllowlist : []\n const contractAllowed = tryAllowlistKernelContractDiff({ result: contract, allowlist })\n const contractVerdict: 'PASS' | 'FAIL' = allowlistEnabled ? contractAllowed.verdict : contract.verdict\n\n const gateRun = (options?.gateAfter ?? options?.after) as FullCutoverGateTrialRunOptions<Sh> | undefined\n\n const gateProgram = Effect.gen(function* () {\n const ctx = yield* rootImpl.layer.pipe(Layer.build)\n const runtime: any = Context.get(ctx, rootImpl.module as any)\n if (gateRun?.interaction) {\n yield* gateRun.interaction(runtime)\n }\n return {\n kernelImplementationRef: Kernel.getKernelImplementationRef(runtime),\n runtimeServicesEvidence: Kernel.getRuntimeServicesEvidence(runtime),\n } as const\n })\n\n const gateResult = yield* trialRun(gateProgram, {\n runId: gateRun?.runId,\n diagnosticsLevel: options?.gateDiagnosticsLevel ?? 'off',\n layer: gateRun?.layer,\n runtimeServicesInstanceOverrides: gateRun?.runtimeServicesInstanceOverrides,\n })\n\n const gateValue = Exit.isSuccess(gateResult.exit)\n ? gateResult.exit.value\n : (() => {\n const msg = Exit.isFailure(gateResult.exit)\n ? String((gateResult.exit as any).cause ?? 'trial-run failed')\n : 'trial-run failed'\n throw new Error(msg)\n })()\n\n const gate = Kernel.evaluateFullCutoverGate({\n mode: options?.mode ?? 'fullCutover',\n requestedKernelId: gateValue.kernelImplementationRef.kernelId,\n runtimeServicesEvidence: gateValue.runtimeServicesEvidence,\n diagnosticsLevel: options?.gateDiagnosticsLevel ?? 'off',\n })\n\n const verdict: 'PASS' | 'FAIL' = gate.verdict === 'PASS' && contractVerdict === 'PASS' ? 'PASS' : 'FAIL'\n\n return {\n version: 'v1',\n verdict,\n gate,\n contract,\n contractVerdict,\n ...(allowlistEnabled ? { allowedDiffs: contractAllowed.allowedDiffs } : {}),\n }\n })\n","import { stableStringify } from '../digest.js'\nimport type { JsonValue } from '../observability/jsonValue.js'\nimport type { ModuleManifest, ModuleManifestLogicUnit } from './manifest.js'\n\nexport type ManifestDiffSeverity = 'BREAKING' | 'RISKY' | 'INFO'\nexport type ManifestDiffVerdict = 'PASS' | 'WARN' | 'FAIL'\n\nexport interface ModuleManifestDiffChange {\n readonly severity: ManifestDiffSeverity\n readonly code: string\n readonly message?: string\n readonly pointer?: string\n readonly details?: JsonValue\n}\n\nexport interface ModuleManifestDiffSummary {\n readonly breaking: number\n readonly risky: number\n readonly info: number\n}\n\nexport interface ModuleManifestDiff {\n readonly version: string\n readonly moduleId: string\n readonly before: {\n readonly digest: string\n readonly manifestVersion?: string\n }\n readonly after: {\n readonly digest: string\n readonly manifestVersion?: string\n }\n readonly verdict: ManifestDiffVerdict\n readonly changes: ReadonlyArray<ModuleManifestDiffChange>\n readonly summary: ModuleManifestDiffSummary\n}\n\nexport interface DiffManifestOptions {\n /**\n * metaAllowlist:\n * - When omitted: diff all meta keys (defaults to treating all changes as RISKY).\n * - When provided: only diff allowlisted keys (others are ignored).\n */\n readonly metaAllowlist?: ReadonlyArray<string>\n}\n\nconst SEVERITY_RANK: Record<ManifestDiffSeverity, number> = {\n BREAKING: 0,\n RISKY: 1,\n INFO: 2,\n}\n\nconst uniqSorted = (input: ReadonlyArray<string>): ReadonlyArray<string> => {\n const out = Array.from(new Set(input.filter((x) => typeof x === 'string' && x.length > 0)))\n out.sort((a, b) => a.localeCompare(b))\n return out\n}\n\nconst diffStringKeys = (\n before: ReadonlyArray<string> | undefined,\n after: ReadonlyArray<string> | undefined,\n): { readonly removed: ReadonlyArray<string>; readonly added: ReadonlyArray<string> } => {\n const beforeSet = new Set(uniqSorted(before ?? []))\n const afterSet = new Set(uniqSorted(after ?? []))\n\n const removed: string[] = []\n for (const k of beforeSet) {\n if (!afterSet.has(k)) removed.push(k)\n }\n removed.sort((a, b) => a.localeCompare(b))\n\n const added: string[] = []\n for (const k of afterSet) {\n if (!beforeSet.has(k)) added.push(k)\n }\n added.sort((a, b) => a.localeCompare(b))\n\n return { removed, added }\n}\n\nconst eqJsonValue = (a: unknown, b: unknown): boolean => stableStringify(a) === stableStringify(b)\n\nconst indexLogicUnits = (\n input: ReadonlyArray<ModuleManifestLogicUnit> | undefined,\n): ReadonlyMap<string, ModuleManifestLogicUnit> => {\n const map = new Map<string, ModuleManifestLogicUnit>()\n for (const unit of input ?? []) {\n if (!unit || typeof unit !== 'object') continue\n const id = (unit as any).id\n if (typeof id !== 'string' || id.length === 0) continue\n map.set(id, unit)\n }\n return map\n}\n\nexport const diffManifest = (\n before: ModuleManifest,\n after: ModuleManifest,\n options?: DiffManifestOptions,\n): ModuleManifestDiff => {\n const changes: ModuleManifestDiffChange[] = []\n\n // Identity / protocol\n if (before.moduleId !== after.moduleId) {\n changes.push({\n severity: 'BREAKING',\n code: 'moduleId.changed',\n message: `moduleId changed (${before.moduleId} -> ${after.moduleId})`,\n pointer: '/moduleId',\n details: {\n before: before.moduleId,\n after: after.moduleId,\n },\n })\n }\n\n if (before.manifestVersion !== after.manifestVersion) {\n changes.push({\n severity: 'INFO',\n code: 'manifestVersion.changed',\n message: `manifestVersion changed (${before.manifestVersion} -> ${after.manifestVersion})`,\n pointer: '/manifestVersion',\n details: {\n before: before.manifestVersion,\n after: after.manifestVersion,\n },\n })\n }\n\n // actionKeys\n {\n const { removed, added } = diffStringKeys(before.actionKeys, after.actionKeys)\n if (removed.length > 0 || added.length > 0) {\n changes.push({\n severity: removed.length > 0 ? 'BREAKING' : 'INFO',\n code: 'actionKeys.changed',\n message:\n removed.length > 0 ? `actionKeys removed: ${removed.join(', ')}` : `actionKeys added: ${added.join(', ')}`,\n pointer: '/actionKeys',\n details: { removed, added },\n })\n }\n }\n\n // schemaKeys\n {\n const { removed, added } = diffStringKeys(before.schemaKeys, after.schemaKeys)\n if (removed.length > 0 || added.length > 0) {\n changes.push({\n severity: removed.length > 0 ? 'BREAKING' : 'INFO',\n code: 'schemaKeys.changed',\n message:\n removed.length > 0 ? `schemaKeys removed: ${removed.join(', ')}` : `schemaKeys added: ${added.join(', ')}`,\n pointer: '/schemaKeys',\n details: { removed, added },\n })\n }\n }\n\n // logicUnits (slots)\n {\n const beforeById = indexLogicUnits(before.logicUnits)\n const afterById = indexLogicUnits(after.logicUnits)\n\n const removed: string[] = []\n const added: string[] = []\n const kindChanged: Array<{ readonly id: string; readonly before: string; readonly after: string }> = []\n const riskyChanged: Array<{ readonly id: string; readonly fields: ReadonlyArray<string> }> = []\n\n for (const id of beforeById.keys()) {\n if (!afterById.has(id)) removed.push(id)\n }\n for (const id of afterById.keys()) {\n if (!beforeById.has(id)) added.push(id)\n }\n\n removed.sort((a, b) => a.localeCompare(b))\n added.sort((a, b) => a.localeCompare(b))\n\n for (const id of beforeById.keys()) {\n const b = beforeById.get(id)\n const a = afterById.get(id)\n if (!b || !a) continue\n\n const fields: string[] = []\n if (b.kind !== a.kind) {\n kindChanged.push({ id, before: b.kind, after: a.kind })\n continue\n }\n if (b.name !== a.name) fields.push('name')\n if (b.derived !== a.derived) fields.push('derived')\n if (fields.length > 0) riskyChanged.push({ id, fields })\n }\n\n kindChanged.sort((x, y) => x.id.localeCompare(y.id))\n riskyChanged.sort((x, y) => x.id.localeCompare(y.id))\n\n if (removed.length > 0) {\n changes.push({\n severity: 'BREAKING',\n code: 'logicUnits.removed',\n message: `logicUnits removed: ${removed.join(', ')}`,\n pointer: '/logicUnits',\n details: { removed },\n })\n }\n\n if (kindChanged.length > 0) {\n changes.push({\n severity: 'BREAKING',\n code: 'logicUnits.kindChanged',\n message: `logicUnits kind changed: ${kindChanged.map((x) => x.id).join(', ')}`,\n pointer: '/logicUnits',\n details: { kindChanged },\n })\n }\n\n if (added.length > 0) {\n changes.push({\n severity: 'INFO',\n code: 'logicUnits.added',\n message: `logicUnits added: ${added.join(', ')}`,\n pointer: '/logicUnits',\n details: { added },\n })\n }\n\n if (riskyChanged.length > 0) {\n changes.push({\n severity: 'RISKY',\n code: 'logicUnits.changed',\n message: `logicUnits changed: ${riskyChanged.map((x) => x.id).join(', ')}`,\n pointer: '/logicUnits',\n details: { changed: riskyChanged },\n })\n }\n }\n\n // staticIr.digest\n {\n const beforeDigest = before.staticIr?.digest\n const afterDigest = after.staticIr?.digest\n if (beforeDigest !== afterDigest) {\n changes.push({\n severity: 'RISKY',\n code: 'staticIr.digestChanged',\n message: 'staticIr.digest changed',\n pointer: '/staticIr/digest',\n details: {\n before: beforeDigest ?? null,\n after: afterDigest ?? null,\n },\n })\n }\n }\n\n // meta (default: RISKY, allowlist supported)\n {\n const metaBefore = before.meta ?? {}\n const metaAfter = after.meta ?? {}\n\n const allowlist = options?.metaAllowlist\n const keys =\n allowlist != null ? uniqSorted(allowlist) : uniqSorted([...Object.keys(metaBefore), ...Object.keys(metaAfter)])\n\n const changed: Array<{\n readonly key: string\n readonly before: JsonValue | null\n readonly after: JsonValue | null\n }> = []\n\n for (const key of keys) {\n const b = key in metaBefore ? (metaBefore as any)[key] : undefined\n const a = key in metaAfter ? (metaAfter as any)[key] : undefined\n if (!eqJsonValue(b, a)) {\n changed.push({\n key,\n before: (b ?? null) as JsonValue | null,\n after: (a ?? null) as JsonValue | null,\n })\n }\n }\n\n if (changed.length > 0) {\n changes.push({\n severity: 'RISKY',\n code: 'meta.changed',\n message: 'meta changed',\n pointer: '/meta',\n details: {\n keys: changed.map((x) => x.key),\n changed,\n },\n })\n }\n }\n\n // source (default: INFO)\n {\n const b = before.source\n const a = after.source\n if (!eqJsonValue(b ?? null, a ?? null)) {\n changes.push({\n severity: 'INFO',\n code: 'source.changed',\n message: 'source changed',\n pointer: '/source',\n details: {\n before: b ?? null,\n after: a ?? null,\n },\n })\n }\n }\n\n changes.sort((a, b) => {\n const ra = SEVERITY_RANK[a.severity]\n const rb = SEVERITY_RANK[b.severity]\n if (ra !== rb) return ra - rb\n const ca = a.code.localeCompare(b.code)\n if (ca !== 0) return ca\n const pa = a.pointer ?? ''\n const pb = b.pointer ?? ''\n return pa.localeCompare(pb)\n })\n\n const summary: ModuleManifestDiffSummary = {\n breaking: changes.filter((c) => c.severity === 'BREAKING').length,\n risky: changes.filter((c) => c.severity === 'RISKY').length,\n info: changes.filter((c) => c.severity === 'INFO').length,\n }\n\n const verdict: ManifestDiffVerdict = summary.breaking > 0 ? 'FAIL' : summary.risky > 0 ? 'WARN' : 'PASS'\n\n return {\n version: '025',\n moduleId: after.moduleId,\n before: {\n digest: before.digest,\n manifestVersion: before.manifestVersion,\n },\n after: {\n digest: after.digest,\n manifestVersion: after.manifestVersion,\n },\n verdict,\n changes,\n summary,\n }\n}\n","import { Context, Effect, Exit, Layer } from 'effect'\nimport type { ModuleImpl, AnyModuleShape } from '../runtime/core/module.js'\nimport type { ModuleRuntime } from '../runtime/core/module.js'\nimport { trialRun } from '../observability/trialRun.js'\nimport type { EvidencePackage } from '../observability/evidence.js'\nimport type { JsonValue } from '../observability/jsonValue.js'\nimport { fnv1a32, stableStringify } from '../digest.js'\nimport type { Middleware } from '../effect-op.js'\nimport * as Debug from '../runtime/core/DebugSink.js'\nimport * as EffectOpCore from '../runtime/core/EffectOpCore.js'\nimport * as KernelRef from '../runtime/core/KernelRef.js'\nimport type * as RuntimeKernel from '../runtime/core/RuntimeKernel.js'\n\ntype AnyModuleLike = { readonly impl: ModuleImpl<any, AnyModuleShape, any> }\n\ntype RootLike<Sh extends AnyModuleShape> = ModuleImpl<any, Sh, any> | AnyModuleLike\n\nconst resolveRootImpl = <Sh extends AnyModuleShape>(root: RootLike<Sh>): ModuleImpl<any, Sh, any> =>\n ((root as any)?._tag === 'ModuleImpl'\n ? (root as ModuleImpl<any, Sh, any>)\n : ((root as any)?.impl as ModuleImpl<any, Sh, any>)) satisfies ModuleImpl<any, Sh, any>\n\nexport type KernelContractVerdict = 'PASS' | 'FAIL'\n\nexport interface KernelContractAnchor {\n readonly instanceId: string\n readonly txnSeq: number\n readonly opSeq: number\n}\n\nexport interface KernelContractTraceOp {\n readonly anchor: KernelContractAnchor\n readonly moduleId: string\n readonly kind: string\n readonly name: string\n readonly meta?: JsonValue\n}\n\nexport interface KernelContractRunSummary {\n readonly ok: boolean\n readonly kernelImplementationRef: KernelRef.KernelImplementationRef\n readonly runtimeServicesEvidence?: JsonValue\n readonly trace: {\n readonly digest: string\n readonly opCount: number\n }\n readonly error?: {\n readonly name: string\n readonly message: string\n }\n}\n\nexport type KernelContractDiffChangeCode = 'op.added' | 'op.removed' | 'op.changed' | 'run.failure'\n\nexport interface KernelContractDiffChange {\n readonly code: KernelContractDiffChangeCode\n readonly anchor?: KernelContractAnchor\n readonly before?: JsonValue\n readonly after?: JsonValue\n}\n\nexport interface KernelContractVerificationResult {\n readonly version: string\n readonly verdict: KernelContractVerdict\n readonly before: KernelContractRunSummary\n readonly after: KernelContractRunSummary\n readonly changes: ReadonlyArray<KernelContractDiffChange>\n readonly summary: {\n readonly added: number\n readonly removed: number\n readonly changed: number\n }\n}\n\nexport interface KernelContractRunOptions<Sh extends AnyModuleShape> {\n readonly runId?: string\n readonly layer?: Layer.Layer<any, any, any>\n readonly runtimeServicesInstanceOverrides?: RuntimeKernel.RuntimeServicesOverrides\n readonly interaction?: (runtime: ModuleRuntime<any, any>) => Effect.Effect<void, any, any>\n}\n\nexport interface VerifyKernelContractOptions<Sh extends AnyModuleShape> {\n readonly before?: KernelContractRunOptions<Sh>\n readonly after?: KernelContractRunOptions<Sh>\n readonly diagnosticsLevel?: Debug.DiagnosticsLevel\n readonly maxEvents?: number\n}\n\nconst asNonEmptyString = (value: unknown): string | undefined =>\n typeof value === 'string' && value.length > 0 ? value : undefined\n\nconst asNonNegInt = (value: unknown, fallback = 0): number => {\n if (typeof value !== 'number' || !Number.isFinite(value)) return fallback\n const n = Math.floor(value)\n return n >= 0 ? n : fallback\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst makeTraceEffectOpObserver = (): Middleware => {\n return <A, E, R>(op: import('../effect-op.js').EffectOp<A, E, R>): Effect.Effect<A, E, R> =>\n Effect.gen(function* () {\n // Observation-only capability: can be locally disabled by policy.\n if ((op.meta as any)?.policy?.disableObservers) {\n return yield* op.effect\n }\n\n const meta: any = op.meta ?? {}\n const slimOp = {\n id: op.id,\n kind: op.kind,\n name: op.name,\n payload: op.payload,\n meta: op.meta,\n }\n\n yield* Debug.record({\n type: 'trace:effectop',\n moduleId: typeof meta.moduleId === 'string' ? meta.moduleId : undefined,\n instanceId: typeof meta.instanceId === 'string' ? meta.instanceId : undefined,\n runtimeLabel: typeof meta.runtimeLabel === 'string' ? meta.runtimeLabel : undefined,\n txnSeq: typeof meta.txnSeq === 'number' && Number.isFinite(meta.txnSeq) ? Math.floor(meta.txnSeq) : undefined,\n data: slimOp,\n } as any)\n\n return yield* op.effect\n })\n}\n\nconst extractRuntimeSummary = (\n evidence: EvidencePackage,\n): {\n readonly kernelImplementationRef: KernelRef.KernelImplementationRef\n readonly runtimeServicesEvidence?: JsonValue\n} => {\n const summary: any = evidence.summary\n const runtime: any = summary?.runtime\n const kernelImplementationRefRaw = runtime?.kernelImplementationRef\n const kernelImplementationRef = KernelRef.normalizeKernelImplementationRef(kernelImplementationRefRaw)\n const services = runtime?.services as JsonValue | undefined\n return {\n kernelImplementationRef,\n runtimeServicesEvidence: services,\n }\n}\n\nconst canonicalizeOpMeta = (opMetaRaw: unknown): JsonValue | undefined => {\n if (!isRecord(opMetaRaw)) return undefined\n\n const out: Record<string, JsonValue> = {}\n for (const [k, v] of Object.entries(opMetaRaw)) {\n // volatile / non-contract anchors\n if (k === 'instanceId' || k === 'txnId' || k === 'runtimeLabel' || k === 'linkId') continue\n\n if ((k === 'deps' || k === 'trace' || k === 'tags') && Array.isArray(v) && v.every((x) => typeof x === 'string')) {\n out[k] = (v as ReadonlyArray<string>).slice().sort((a, b) => a.localeCompare(b)) as unknown as JsonValue\n continue\n }\n\n out[k] = v as JsonValue\n }\n\n return out as JsonValue\n}\n\nconst extractKernelContractTraceOps = (evidence: EvidencePackage): ReadonlyArray<KernelContractTraceOp> => {\n const instanceMap = new Map<string, string>()\n let nextInstanceIndex = 0\n\n const mapInstanceId = (raw: string): string => {\n if (raw === 'unknown') return 'unknown'\n const existing = instanceMap.get(raw)\n if (existing) return existing\n nextInstanceIndex += 1\n const next = `i${nextInstanceIndex}`\n instanceMap.set(raw, next)\n return next\n }\n\n const ops: KernelContractTraceOp[] = []\n\n for (const e of evidence.events) {\n if (e.type !== 'debug:event') continue\n const payload: any = e.payload\n if (!isRecord(payload)) continue\n\n const meta: any = payload.meta\n const opMeta: any = meta?.meta\n const opSeq = asNonNegInt(opMeta?.opSeq, -1)\n if (opSeq < 0) continue\n\n const instanceIdRaw = asNonEmptyString(payload.instanceId) ?? 'unknown'\n const instanceId = mapInstanceId(instanceIdRaw)\n const txnSeq = asNonNegInt(payload.txnSeq, 0)\n\n const moduleId = asNonEmptyString(payload.moduleId) ?? 'unknown'\n const kind = asNonEmptyString(meta?.kind) ?? asNonEmptyString(payload.kind) ?? 'unknown'\n const name = asNonEmptyString(meta?.name) ?? asNonEmptyString(payload.label) ?? 'effectop'\n\n ops.push({\n anchor: { instanceId, txnSeq, opSeq },\n moduleId,\n kind,\n name,\n meta: canonicalizeOpMeta(opMeta),\n })\n }\n\n ops.sort((a, b) => {\n if (a.anchor.instanceId !== b.anchor.instanceId) return a.anchor.instanceId.localeCompare(b.anchor.instanceId)\n if (a.anchor.txnSeq !== b.anchor.txnSeq) return a.anchor.txnSeq - b.anchor.txnSeq\n return a.anchor.opSeq - b.anchor.opSeq\n })\n\n return ops\n}\n\nconst anchorKey = (a: KernelContractAnchor): string => `${a.instanceId}::t${a.txnSeq}::o${a.opSeq}`\n\nconst diffKernelContractTraceOps = (\n before: ReadonlyArray<KernelContractTraceOp>,\n after: ReadonlyArray<KernelContractTraceOp>,\n): {\n readonly changes: ReadonlyArray<KernelContractDiffChange>\n readonly summary: KernelContractVerificationResult['summary']\n} => {\n const changes: KernelContractDiffChange[] = []\n\n const beforeByKey = new Map<string, KernelContractTraceOp>()\n const afterByKey = new Map<string, KernelContractTraceOp>()\n\n for (const op of before) {\n beforeByKey.set(anchorKey(op.anchor), op)\n }\n for (const op of after) {\n afterByKey.set(anchorKey(op.anchor), op)\n }\n\n const allKeys = Array.from(new Set([...beforeByKey.keys(), ...afterByKey.keys()])).sort((a, b) => a.localeCompare(b))\n\n for (const key of allKeys) {\n const b = beforeByKey.get(key)\n const a = afterByKey.get(key)\n\n if (!b && a) {\n changes.push({\n code: 'op.added',\n anchor: a.anchor,\n after: a as unknown as JsonValue,\n })\n continue\n }\n if (b && !a) {\n changes.push({\n code: 'op.removed',\n anchor: b.anchor,\n before: b as unknown as JsonValue,\n })\n continue\n }\n if (!b || !a) continue\n\n const bJson = stableStringify(b)\n const aJson = stableStringify(a)\n if (bJson !== aJson) {\n changes.push({\n code: 'op.changed',\n anchor: b.anchor,\n before: b as unknown as JsonValue,\n after: a as unknown as JsonValue,\n })\n }\n }\n\n const summary = {\n added: changes.filter((c) => c.code === 'op.added').length,\n removed: changes.filter((c) => c.code === 'op.removed').length,\n changed: changes.filter((c) => c.code === 'op.changed').length,\n } as const satisfies KernelContractVerificationResult['summary']\n\n return { changes, summary }\n}\n\nconst VERSION = 'v1'\n\nconst runOnce = <Sh extends AnyModuleShape>(\n rootImpl: ModuleImpl<any, Sh, any>,\n run: KernelContractRunOptions<Sh> | undefined,\n options: Pick<VerifyKernelContractOptions<Sh>, 'diagnosticsLevel' | 'maxEvents'>,\n): Effect.Effect<\n {\n readonly summary: KernelContractRunSummary\n readonly traceOps: ReadonlyArray<KernelContractTraceOp>\n },\n never,\n any\n> =>\n Effect.gen(function* () {\n const interaction = run?.interaction\n const program = Effect.gen(function* () {\n const ctx = yield* rootImpl.layer.pipe(Layer.build)\n const runtime = Context.get(ctx, rootImpl.module)\n if (interaction) {\n yield* interaction(runtime)\n }\n return runtime.instanceId\n }) as Effect.Effect<string, any, any>\n\n const traceLayer = Layer.succeed(EffectOpCore.EffectOpMiddlewareTag, {\n stack: [makeTraceEffectOpObserver()],\n }) as unknown as Layer.Layer<any, never, never>\n\n const extraLayer = run?.layer ? (Layer.mergeAll(traceLayer, run.layer) as Layer.Layer<any, any, any>) : traceLayer\n\n const result = yield* trialRun(program as any, {\n runId: run?.runId,\n diagnosticsLevel: options.diagnosticsLevel ?? 'light',\n maxEvents: options.maxEvents,\n layer: extraLayer,\n runtimeServicesInstanceOverrides: run?.runtimeServicesInstanceOverrides,\n })\n\n const ok = Exit.isSuccess(result.exit)\n const error =\n Exit.isFailure(result.exit) && result.exit.cause != null\n ? (() => {\n const failure = Exit.isFailure(result.exit) ? result.exit.cause : undefined\n const err = (failure as any)?._tag === 'Die' ? (failure as any).defect : (failure as any)\n if (err instanceof Error) {\n return { name: err.name, message: err.message }\n }\n return { name: 'UnknownError', message: String(err ?? 'unknown') }\n })()\n : undefined\n\n const runtimeSummary = extractRuntimeSummary(result.evidence)\n const traceOps = extractKernelContractTraceOps(result.evidence)\n const traceDigest = fnv1a32(stableStringify(traceOps))\n\n return {\n summary: {\n ok,\n kernelImplementationRef: runtimeSummary.kernelImplementationRef,\n runtimeServicesEvidence: runtimeSummary.runtimeServicesEvidence,\n trace: { digest: traceDigest, opCount: traceOps.length },\n ...(error ? { error } : {}),\n },\n traceOps,\n }\n })\n\nexport const verifyKernelContract = <Sh extends AnyModuleShape>(\n root: RootLike<Sh>,\n options?: VerifyKernelContractOptions<Sh>,\n): Effect.Effect<KernelContractVerificationResult, never, any> =>\n Effect.gen(function* () {\n const rootImpl = resolveRootImpl(root)\n\n const beforeRun = yield* runOnce(rootImpl, options?.before, {\n diagnosticsLevel: options?.diagnosticsLevel,\n maxEvents: options?.maxEvents,\n })\n\n const afterRun = yield* runOnce(rootImpl, options?.after, {\n diagnosticsLevel: options?.diagnosticsLevel,\n maxEvents: options?.maxEvents,\n })\n\n const hasRunFailure = !beforeRun.summary.ok || !afterRun.summary.ok\n const diff = hasRunFailure\n ? { changes: [{ code: 'run.failure' as const }], summary: { added: 0, removed: 0, changed: 0 } }\n : diffKernelContractTraceOps(beforeRun.traceOps, afterRun.traceOps)\n\n const verdict: KernelContractVerdict = hasRunFailure || diff.changes.length > 0 ? 'FAIL' : 'PASS'\n\n return {\n version: VERSION,\n verdict,\n before: beforeRun.summary,\n after: afterRun.summary,\n changes: diff.changes,\n summary: diff.summary,\n }\n })\n","import { Effect, Layer } from 'effect'\nimport type { ImportsScope } from './runtime/core/RuntimeInternals.js'\nimport type { StateTransactionInstrumentation } from './runtime/core/env.js'\nimport type { StatePatchPath } from './runtime/core/StateTransaction.js'\nimport * as EffectOpCore from './runtime/core/EffectOpCore.js'\nimport { getRuntimeInternals } from './runtime/core/runtimeInternalsAccessor.js'\nimport * as ProcessRuntime from './runtime/core/process/ProcessRuntime.js'\nimport type * as ProcessProtocol from './runtime/core/process/protocol.js'\nimport { currentExecVmMode, execVmModeLayer as execVmModeLayerInternal } from './state-trait/exec-vm-mode.js'\nimport type { PatchReason } from './field-path.js'\n\nexport * as BuildEnv from './platform/BuildEnv.js'\nexport * as RuntimeHost from './platform/RuntimeHost.js'\nexport * as ConstructionGuard from './platform/ConstructionGuard.js'\nexport { normalizeFieldPath } from './field-path.js'\nexport type { DirtyAllReason, DirtySet, FieldPath, FieldPathId } from './field-path.js'\nexport { makeEnqueueTransaction } from './runtime/ModuleRuntime.txnQueue.js'\nexport * as ReplayLog from './runtime/core/ReplayLog.js'\n\n/**\n * InternalContracts: the internal contract access entrypoint for in-repo integrators.\n *\n * Notes:\n * - This module replaces direct reads of `runtime.__*` magic fields.\n * - Public API/behavior remains unchanged, and business code is not required to use this by default.\n * - Exposes only minimal capabilities (ISP) to avoid leaking RuntimeInternals as a public dependency.\n */\nexport const getImportsScope = (runtime: object): ImportsScope => {\n return getRuntimeInternals(runtime).imports\n}\n\nexport const getStateTransactionInstrumentation = (runtime: object): StateTransactionInstrumentation =>\n getRuntimeInternals(runtime).txn.instrumentation\n\nexport const getRowIdStore = (runtime: object): unknown => getRuntimeInternals(runtime).traits.rowIdStore\n\nexport const getStateTraitListConfigs = (runtime: object): ReadonlyArray<unknown> =>\n getRuntimeInternals(runtime).traits.getListConfigs()\n\nexport const registerStateTraitProgram = (\n runtime: object,\n program: unknown,\n registerOptions?: { readonly bumpReason?: unknown },\n): void => {\n getRuntimeInternals(runtime).traits.registerStateTraitProgram(program, registerOptions as any)\n}\n\nexport const recordStatePatch = (\n runtime: object,\n path: StatePatchPath,\n reason: PatchReason,\n from?: unknown,\n to?: unknown,\n traitNodeId?: string,\n stepId?: number,\n): void => {\n getRuntimeInternals(runtime).txn.recordStatePatch(path, reason, from, to, traitNodeId, stepId)\n}\n\nexport const runWithStateTransaction = <E, R>(\n runtime: object,\n origin: { readonly kind: string; readonly name?: string; readonly details?: unknown },\n body: () => Effect.Effect<void, E, R>,\n): Effect.Effect<void, E, R> =>\n getRuntimeInternals(runtime).txn.runWithStateTransaction(origin as any, body as any) as any\n\nexport const applyTransactionSnapshot = (\n runtime: object,\n txnId: string,\n mode: 'before' | 'after',\n): Effect.Effect<void, never, any> => getRuntimeInternals(runtime).txn.applyTransactionSnapshot(txnId, mode)\n\nexport const withCurrentLinkId = (linkId: string) => Effect.locally(EffectOpCore.currentLinkId, linkId)\n\n/** 049: Exec VM (core-ng) switch: enable the Exec VM hot path within the current Effect scope. */\nexport const withExecVmMode = <A, E, R>(effect: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>\n Effect.locally(currentExecVmMode, true)(effect)\n\n/** 049: Exec VM (core-ng) switch: enable/disable the Exec VM hot path within the current runtime scope. */\nexport const execVmModeLayer = (enabled: boolean): Layer.Layer<any, never, never> =>\n execVmModeLayerInternal(enabled) as Layer.Layer<any, never, never>\n\nexport const getProcessInstallations = (options?: {\n readonly scopeType?: import('./runtime/core/process/protocol.js').ProcessScope['type']\n readonly scopeKey?: string\n}): Effect.Effect<\n ReadonlyArray<import('./runtime/core/process/protocol.js').ProcessInstallation>,\n never,\n ProcessRuntime.ProcessRuntimeTag\n> =>\n Effect.gen(function* () {\n const rt = yield* ProcessRuntime.ProcessRuntimeTag\n return yield* rt.listInstallations(options)\n })\n\nexport const getProcessInstanceStatus = (\n processInstanceId: string,\n): Effect.Effect<\n import('./runtime/core/process/protocol.js').ProcessInstanceStatus | undefined,\n never,\n ProcessRuntime.ProcessRuntimeTag\n> =>\n Effect.gen(function* () {\n const rt = yield* ProcessRuntime.ProcessRuntimeTag\n return yield* rt.getInstanceStatus(processInstanceId)\n })\n\nexport const controlProcessInstance = (\n processInstanceId: string,\n request: import('./runtime/core/process/protocol.js').ProcessControlRequest,\n): Effect.Effect<void, never, ProcessRuntime.ProcessRuntimeTag> =>\n Effect.gen(function* () {\n const rt = yield* ProcessRuntime.ProcessRuntimeTag\n yield* rt.controlInstance(processInstanceId, request)\n })\n\nexport const deliverProcessPlatformEvent = (\n event: import('./runtime/core/process/protocol.js').ProcessPlatformEvent,\n): Effect.Effect<void, never, ProcessRuntime.ProcessRuntimeTag> =>\n Effect.gen(function* () {\n const rt = yield* ProcessRuntime.ProcessRuntimeTag\n yield* rt.deliverPlatformEvent(event)\n })\n\nexport const getProcessEvents = (): Effect.Effect<\n ReadonlyArray<import('./runtime/core/process/protocol.js').ProcessEvent>,\n never,\n ProcessRuntime.ProcessRuntimeTag\n> =>\n Effect.gen(function* () {\n const rt = yield* ProcessRuntime.ProcessRuntimeTag\n return yield* rt.getEventsSnapshot()\n })\n\nexport const installProcess = <E, R>(\n process: Effect.Effect<void, E, R>,\n options: {\n readonly scope: ProcessProtocol.ProcessScope\n readonly enabled?: boolean\n readonly installedAt?: string\n readonly mode?: 'switch' | 'exhaust'\n },\n): Effect.Effect<ProcessProtocol.ProcessInstallation | undefined, never, ProcessRuntime.ProcessRuntimeTag | R> =>\n Effect.gen(function* () {\n const rt = yield* ProcessRuntime.ProcessRuntimeTag\n return yield* rt.install(process, options)\n })\n"],"mappings":"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","names":["MatchBuilder_exports","Platform_exports","ReadQuery_exports","appendSinks","clearDevtoolsEvents","diagnosticsLevel","exportEvidencePackage","getDevtoolsRunId","getDevtoolsSnapshot","getDevtoolsSnapshotToken","getInstanceLabel","isDevtoolsEnabled","noopLayer","record","setDevtoolsRunId","setInstanceLabel","startDevtoolsRun","subscribeDevtoolsSnapshot","toRuntimeDebugEventRef","traitConvergeDiagnosticsSampling","Reducer","make","import_effect","appendSinks","clearDevtoolsEvents","diagnosticsLevel","exportEvidencePackage","getDevtoolsRunId","getDevtoolsSnapshot","getDevtoolsSnapshotToken","getInstanceLabel","isDevtoolsEnabled","noopLayer","record","setDevtoolsRunId","setInstanceLabel","startDevtoolsRun","subscribeDevtoolsSnapshot","toRuntimeDebugEventRef","traitConvergeDiagnosticsSampling","import_effect","import_effect","out","limit","import_effect","mergeDowngrade","list","diagnosticsLevel","runtimeLabel","mergeDowngrade","tag","resolve","metaProjection","import_effect","protocolVersion","source","protocolVersion","source","isRecord","runtimeLabel","import_effect","import_effect","normalized","node","id","keyHash","record","normalizeFieldPath","from","node","base","module","toRuntimeDebugEventRef","getDevtoolsSnapshot","getDevtoolsSnapshotToken","subscribeDevtoolsSnapshot","clearDevtoolsEvents","getDevtoolsRunId","setDevtoolsRunId","startDevtoolsRun","setInstanceLabel","getInstanceLabel","exportEvidencePackage","diagnosticsLevel","traitConvergeDiagnosticsSampling","isDevtoolsEnabled","runtimeLabel","record","noopLayer","appendSinks","module","snapshot","make","import_effect","import_effect","tag","source","import_effect","import_effect","import_effect","import_effect","from","initialState","import_effect","isPlainRecord","defineHidden","formatScope","import_effect","defineHidden","formatScope","import_effect","import_effect","import_effect","nextSeq","protocolVersion","isRecord","convergeStaticIrByDigest","exportBudget","registerConvergeStaticIr","setKernelImplementationRef","setRuntimeServicesEvidence","exportEvidencePackage","import_effect","import_effect","make","currentTxnId","runtimeLabel","make","import_effect","import_effect","tag","recordStatePatch","runWithStateTransaction","isDevEnv","resolveActionTag","tag","import_effect","tag","import_effect","import_effect","entry","import_effect","import_effect","tag","import_effect","node","import_effect","value","record","getMiddlewareStack","equals","from","diagnosticsLevel","make","normalizePositiveInt","getMiddlewareStack","diagnosticsLevel","decision","planLen","checks","plan","computed","base","totalDurationMs","exit","import_effect","list","tag","v","instances","resolveMode","diagnosticsLevel","node","readTrackBy","listValue","items","rowIds","out","list","prevRow","input","import_effect","import_mutative","import_effect","stableStringify","record","internal","make","layer","layer","make","record","import_effect","consumeNextResourceSnapshot","parseSegments","getAtPath","setAtPathMutating","unsetAtPathMutating","list","keyOf","listeners","getAtPath","tag","onceInRunSession","formatList","emitDepsMismatch","getMiddlewareStack","from","getAtPath","setAtPathMutating","keyHash","key","prev","prevStatus","concurrency","mode","inFlight","trailing","gen","startFetch","internal","make","currentSnapshot","recordStatePatch","isDevEnv","runWithStateTransaction","from","nowMs","runtimeLabel","diagnosticsLevel","import_effect","import_effect","import_effect","normalizeBool","SchemaAST","isPlainRecord","record","stableStringify","from","node","record","node","list","from","import_effect","import_effect","import_effect","import_effect","onTrigger","nextSize","defineHidden","SchemaAST","isRecord","from","node","tag","nowMs","make","instances","diagnosticsLevel","tag","found","runtime","stream","nowMs","installation","install","process","options","layer","normalizeReads","source","make","staticIr","selectorId","import_effect","nowMs","make","diagnosticsLevel","tag","import_effect","diagnosticsLevel","runtimeLabel","exit","import_effect","import_effect","import_effect","import_effect","defineHidden","tag","formatSource","source","plan","runPhase","value","snapshot","import_effect","nowMs","make","shouldEmit","details","make","initialState","runtimeLabel","recordStatePatch","from","updateDraft","diagnosticsLevel","runWithStateTransaction","firstPendingAtMs","captured","txnLanePolicy","program","anchor","sliceDurationMs","registerConvergeStaticIr","module","registerStateTraitProgram","stateSchema","list","recordReplayEvent","applyTransactionSnapshot","options","snapshot","process","import_effect","import_mutative","import_effect","getMiddlewareStack","make","resolveConcurrencyLimit","import_effect","import_effect","tag","resolve","make","runWithStateTransaction","recordPatch","updateDraft","api","onceInRunSession","isModuleLike","tag","module","internal","source","resolve","options","module","tag","build","make","layer","build","exportStaticIr","install","import_effect","list","getAtPath","build","install","exportStaticIr","traits","make","build","diagnosticsLevel","snapshot","install","attachLogicUnitMeta","module","internal","source","tag","diagnosticsLevel","record","build","Reducer","make","layer","import_effect","make","make","make","attachMeta","getDefinition","getMeta","link","make","diagnosticsLevel","make","getDefinition","getMeta","attachMeta","module","link","tag","make","link","make","make","MatchBuilder_exports","makeMatch","makeMatchTag","makeMatch","makeMatchTag","ReadQuery_exports","compile","isReadQuery","make","isReadQuery","make","compile","Ref","cleanup","install","makeSourceWiring","scopedExecute","scopedValidate","import_effect","Ref","internal","unsetAtPathMutating","toPatternPath","module","install","Ref","scopedValidate","scopedExecute","cleanup","makeSourceWiring","module","install","Snapshot","internal","keyHash","layer","make","keyHash","Snapshot","internal","make","layer","make","openProgram","runProgram","import_effect","import_effect","tag","layer","process","module","isLayer","isLayer","import_effect","record","internal","layer","import_effect","getNodeEnv","isDevEnv","getNodeEnv","isDevEnv","internal","created","isDevEnv","layer","import_effect","isRecord","import_effect","import_effect","isRecord","import_effect","getProcess","import_effect","make","isRecord","record","make","make","layer","openProgram","runProgram","CutoverCoverageMatrix","defaultKernelImplementationRef","evaluateFullCutoverGate","getKernelImplementationRef","getRuntimeServicesEvidence","isKernelImplementationRef","import_effect","defaultKernelImplementationRef","isKernelImplementationRef","CutoverCoverageMatrix","evaluateFullCutoverGate","getRuntimeServicesEvidence","getKernelImplementationRef","layerFromContext","resolve","resolve","layerFromContext","Platform_exports","import_effect","exportEvidencePackage","importEvidencePackage","import_effect","import_effect","layer","run","import_effect","import_effect","defaultLayer","layer","make","import_effect","isBrowser","record","layer","make","defaultLayer","run","import_effect","isRecord","tag","exportStaticIr","module","isRecord","isModuleImpl","resolveModuleId","tag","source","MODULE_DECLARED_EFFECTS","MODULE_INTERNAL","internal","next","module","exportStaticIr","import_effect","make","stableJson","tag","isRecord","resolveRootImpl","utf8ByteLength","toErrorSummaryWithCode","layer","make","exportStaticIr","tag","defaultHost","exportEvidencePackage","importEvidencePackage","diffManifest","exportStaticIr","extractManifest","verifyKernelContract","import_effect","import_effect","resolveRootImpl","asNonEmptyString","isRecord","run","traceLayer","resolveRootImpl","isRecord","extractManifest","module","diffManifest","exportStaticIr","verifyKernelContract","getKernelImplementationRef","getRuntimeServicesEvidence","evaluateFullCutoverGate","applyTransactionSnapshot","execVmModeLayer","import_effect","from","applyTransactionSnapshot","execVmModeLayer","process"]}