@logixjs/core 0.0.1 → 1.0.0
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.
- package/LICENSE +201 -0
- package/dist/{Action-mqVvtEHt.d.ts → Action-DYl88bwj.d.ts} +1 -1
- package/dist/{Action-BkRHy2vg.d.cts → Action-DkxsI_DK.d.cts} +1 -1
- package/dist/Action.cjs.map +1 -1
- package/dist/Action.d.cts +1 -1
- package/dist/Action.d.ts +1 -1
- package/dist/Action.js +2 -2
- package/dist/{Actions-AsQ07yTP.d.cts → Actions-Dicm7jdc.d.cts} +2 -2
- package/dist/{Actions-AsQ07yTP.d.ts → Actions-Dicm7jdc.d.ts} +2 -2
- package/dist/Actions.cjs.map +1 -1
- package/dist/Actions.d.cts +1 -1
- package/dist/Actions.d.ts +1 -1
- package/dist/Actions.js +1 -1
- package/dist/{Bound-BN1DQ_lM.d.ts → Bound-1OJLzVIS.d.ts} +2 -2
- package/dist/{Bound-BPIfH9SS.d.cts → Bound-BMLrtQ1V.d.cts} +2 -2
- package/dist/Bound.cjs +1737 -399
- package/dist/Bound.cjs.map +1 -1
- package/dist/Bound.d.cts +5 -5
- package/dist/Bound.d.ts +5 -5
- package/dist/Bound.js +19 -17
- package/dist/{Debug-B5q5Bkzx.d.ts → Debug-DKrWP5H1.d.ts} +40 -22
- package/dist/{Debug-Bq8Sqjcr.d.cts → Debug-hIT44XsY.d.cts} +40 -22
- package/dist/Debug.cjs +1348 -318
- package/dist/Debug.cjs.map +1 -1
- package/dist/Debug.d.cts +12 -11
- package/dist/Debug.d.ts +12 -11
- package/dist/Debug.js +20 -11
- package/dist/EffectOp.cjs +15 -6
- package/dist/EffectOp.cjs.map +1 -1
- package/dist/EffectOp.js +3 -3
- package/dist/Env.cjs +772 -6
- package/dist/Env.cjs.map +1 -1
- package/dist/Env.js +5 -2
- package/dist/ExternalStore-DqJKKRJ4.d.ts +61 -0
- package/dist/ExternalStore-JC-gAgEI.d.cts +61 -0
- package/dist/ExternalStore.cjs +774 -0
- package/dist/ExternalStore.cjs.map +1 -0
- package/dist/ExternalStore.d.cts +8 -0
- package/dist/ExternalStore.d.ts +8 -0
- package/dist/ExternalStore.js +19 -0
- package/dist/ExternalStore.js.map +1 -0
- package/dist/{Flow-BhpjE22E.d.ts → Flow-CZmXRDqp.d.cts} +13 -4
- package/dist/{Flow-1fZT8MpX.d.cts → Flow-DIVDxz7R.d.ts} +13 -4
- package/dist/Flow.cjs +765 -148
- package/dist/Flow.cjs.map +1 -1
- package/dist/Flow.d.cts +6 -6
- package/dist/Flow.d.ts +6 -6
- package/dist/Flow.js +9 -8
- package/dist/{Handle-D_cLW1Z3.d.ts → Handle-Bo6cAFut.d.ts} +1 -1
- package/dist/{Handle-D8D1zPb_.d.cts → Handle-CfDvSqN7.d.cts} +1 -1
- package/dist/Handle.d.cts +5 -5
- package/dist/Handle.d.ts +5 -5
- package/dist/{Kernel-8kC-jOda.d.cts → Kernel-CuXBF9S_.d.cts} +16 -7
- package/dist/{Kernel-CnGE1Fyk.d.ts → Kernel-D9guNwRL.d.ts} +16 -7
- package/dist/Kernel.cjs +814 -26
- package/dist/Kernel.cjs.map +1 -1
- package/dist/Kernel.d.cts +13 -12
- package/dist/Kernel.d.ts +13 -12
- package/dist/Kernel.js +7 -4
- package/dist/{Link-Db7975nU.d.ts → Link-CUM0yUCH.d.ts} +10 -3
- package/dist/{Link-fX8x1eCK.d.cts → Link-NAfR6uGD.d.cts} +10 -3
- package/dist/Link.cjs +1294 -121
- package/dist/Link.cjs.map +1 -1
- package/dist/Link.d.cts +5 -5
- package/dist/Link.d.ts +5 -5
- package/dist/Link.js +37 -29
- package/dist/{Logic-DRh4sDZj.d.cts → Logic-09VQpIj3.d.cts} +7 -4
- package/dist/{Logic-BRjEMr-W.d.ts → Logic-DKg7ghGy.d.ts} +7 -4
- package/dist/Logic.cjs +2 -1
- package/dist/Logic.cjs.map +1 -1
- package/dist/Logic.d.cts +5 -5
- package/dist/Logic.d.ts +5 -5
- package/dist/Logic.js +1 -1
- package/dist/{MatchBuilder-CJk5oCkR.d.cts → MatchBuilder-CsW5jgrL.d.ts} +1 -1
- package/dist/{MatchBuilder-0QOc-nlU.d.ts → MatchBuilder-Dksk07F4.d.cts} +1 -1
- package/dist/MatchBuilder.cjs +2 -2
- package/dist/MatchBuilder.cjs.map +1 -1
- package/dist/MatchBuilder.d.cts +6 -6
- package/dist/MatchBuilder.d.ts +6 -6
- package/dist/MatchBuilder.js +2 -2
- package/dist/Middleware-D8tUDLv_.d.cts +100 -0
- package/dist/Middleware-DS7CbTTN.d.ts +100 -0
- package/dist/Middleware.cjs +678 -58
- package/dist/Middleware.cjs.map +1 -1
- package/dist/Middleware.d.cts +2 -86
- package/dist/Middleware.d.ts +2 -86
- package/dist/Middleware.js +15 -12
- package/dist/{Module-DnzluX2J.d.ts → Module-B_Cntyms.d.ts} +54 -25
- package/dist/{Module-B_0xRDMR.d.cts → Module-CmNOVXzf.d.cts} +54 -25
- package/dist/Module.cjs +9331 -3317
- package/dist/Module.cjs.map +1 -1
- package/dist/Module.d.cts +7 -6
- package/dist/Module.d.ts +7 -6
- package/dist/Module.js +39 -31
- package/dist/ModuleTag-CGho_InD.d.ts +113 -0
- package/dist/ModuleTag-CITb8L_G.d.cts +113 -0
- package/dist/ModuleTag.cjs +7248 -2847
- package/dist/ModuleTag.cjs.map +1 -1
- package/dist/ModuleTag.d.cts +6 -6
- package/dist/ModuleTag.d.ts +6 -6
- package/dist/ModuleTag.js +35 -29
- package/dist/Observability-Bdhnx2Dv.d.ts +385 -0
- package/dist/Observability-DXGAFBIT.d.cts +385 -0
- package/dist/Observability.cjs +5093 -1556
- package/dist/Observability.cjs.map +1 -1
- package/dist/Observability.d.cts +6 -7
- package/dist/Observability.d.ts +6 -7
- package/dist/Observability.js +28 -23
- package/dist/{Platform-CHX8o-U4.d.ts → Platform-B4s8tg6C.d.cts} +4 -5
- package/dist/{Platform-C49Pv956.d.cts → Platform-BV_0MW7g.d.cts} +5 -2
- package/dist/{Platform-C49Pv956.d.ts → Platform-BV_0MW7g.d.ts} +5 -2
- package/dist/{Platform-CVlv0xLQ.d.cts → Platform-W0Mefy_e.d.ts} +4 -5
- package/dist/Platform.cjs +2 -1
- package/dist/Platform.cjs.map +1 -1
- package/dist/Platform.d.cts +2 -3
- package/dist/Platform.d.ts +2 -3
- package/dist/Platform.js +2 -2
- package/dist/{Process-CM9xbMdP.d.ts → Process-CO8G7HO9.d.cts} +30 -5
- package/dist/{Process-mL8fHDSB.d.cts → Process-Cyf6VNDR.d.ts} +30 -5
- package/dist/Process.cjs +1288 -120
- package/dist/Process.cjs.map +1 -1
- package/dist/Process.d.cts +6 -6
- package/dist/Process.d.ts +6 -6
- package/dist/Process.js +34 -26
- package/dist/ReadQuery-C_or5nLC.d.ts +128 -0
- package/dist/ReadQuery-DXLzCE0E.d.cts +614 -0
- package/dist/ReadQuery-DXLzCE0E.d.ts +614 -0
- package/dist/ReadQuery-Yve1lmUo.d.cts +128 -0
- package/dist/ReadQuery.cjs +290 -5
- package/dist/ReadQuery.cjs.map +1 -1
- package/dist/ReadQuery.d.cts +3 -2
- package/dist/ReadQuery.d.ts +3 -2
- package/dist/ReadQuery.js +23 -5
- package/dist/{Reflection-CQnKwPXj.d.ts → Reflection-B2Xi1e4Q.d.ts} +89 -7
- package/dist/{Reflection-Kabo1mlU.d.cts → Reflection-DNB4V4_e.d.cts} +89 -7
- package/dist/Reflection.cjs +3227 -1617
- package/dist/Reflection.cjs.map +1 -1
- package/dist/Reflection.d.cts +17 -15
- package/dist/Reflection.d.ts +17 -15
- package/dist/Reflection.js +33 -25
- package/dist/{Resource-Dy1xD_DG.d.cts → Resource-pKvQQ4x5.d.cts} +3 -3
- package/dist/{Resource-Dy1xD_DG.d.ts → Resource-pKvQQ4x5.d.ts} +3 -3
- package/dist/Resource.cjs +781 -15
- package/dist/Resource.cjs.map +1 -1
- package/dist/Resource.d.cts +1 -1
- package/dist/Resource.d.ts +1 -1
- package/dist/Resource.js +6 -3
- package/dist/{Root-7ADUMk4t.d.cts → Root-CCVuFHB6.d.cts} +3 -3
- package/dist/{Root-7ADUMk4t.d.ts → Root-CCVuFHB6.d.ts} +3 -3
- package/dist/Root.cjs +786 -20
- package/dist/Root.cjs.map +1 -1
- package/dist/Root.d.cts +2 -2
- package/dist/Root.d.ts +2 -2
- package/dist/Root.js +7 -3
- package/dist/{Runtime-CtyzZG4i.d.ts → Runtime-CRmvwK4I.d.ts} +70 -14
- package/dist/{Runtime-B-aL-f29.d.cts → Runtime-C_wJM9mN.d.cts} +70 -14
- package/dist/Runtime.cjs +4942 -1601
- package/dist/Runtime.cjs.map +1 -1
- package/dist/Runtime.d.cts +17 -15
- package/dist/Runtime.d.ts +17 -15
- package/dist/Runtime.js +44 -32
- package/dist/{ScopeRegistry-D1owDNSm.d.cts → ScopeRegistry-BhYzqWri.d.cts} +6 -6
- package/dist/{ScopeRegistry-D1owDNSm.d.ts → ScopeRegistry-BhYzqWri.d.ts} +6 -6
- package/dist/ScopeRegistry.cjs +776 -10
- package/dist/ScopeRegistry.cjs.map +1 -1
- package/dist/ScopeRegistry.d.cts +1 -1
- package/dist/ScopeRegistry.d.ts +1 -1
- package/dist/ScopeRegistry.js +6 -3
- package/dist/{State-CU50R26M.d.cts → State-rNFsFPTl.d.cts} +2 -2
- package/dist/{State-CU50R26M.d.ts → State-rNFsFPTl.d.ts} +2 -2
- package/dist/State.cjs.map +1 -1
- package/dist/State.d.cts +1 -1
- package/dist/State.d.ts +1 -1
- package/dist/State.js +1 -1
- package/dist/{StateTrait-BGsZghTz.d.ts → StateTrait-CijdwNb6.d.ts} +25 -8
- package/dist/{StateTrait-OWhbj12c.d.cts → StateTrait-Dltto6PU.d.cts} +25 -8
- package/dist/StateTrait.cjs +1890 -528
- package/dist/StateTrait.cjs.map +1 -1
- package/dist/StateTrait.d.cts +9 -7
- package/dist/StateTrait.d.ts +9 -7
- package/dist/StateTrait.js +18 -14
- package/dist/{TraitLifecycle-CwV5WPFX.d.cts → TraitLifecycle-BKzDqzLu.d.cts} +2 -2
- package/dist/{TraitLifecycle-LdIWmKlg.d.ts → TraitLifecycle-Cvo94uDB.d.ts} +2 -2
- package/dist/TraitLifecycle.cjs +630 -67
- package/dist/TraitLifecycle.cjs.map +1 -1
- package/dist/TraitLifecycle.d.cts +6 -6
- package/dist/TraitLifecycle.d.ts +6 -6
- package/dist/TraitLifecycle.js +8 -7
- package/dist/Workflow-C_OWr4dV.d.ts +415 -0
- package/dist/Workflow-DmydkHO8.d.cts +415 -0
- package/dist/Workflow.cjs +3150 -0
- package/dist/Workflow.cjs.map +1 -0
- package/dist/Workflow.d.cts +7 -0
- package/dist/Workflow.d.ts +7 -0
- package/dist/Workflow.js +58 -0
- package/dist/Workflow.js.map +1 -0
- package/dist/{action-DiMDD_0v.d.cts → action-BQxjPFEw.d.cts} +5 -5
- package/dist/{action-DiMDD_0v.d.ts → action-BQxjPFEw.d.ts} +5 -5
- package/dist/chunk-2XRLXDWR.js +276 -0
- package/dist/chunk-2XRLXDWR.js.map +1 -0
- package/dist/chunk-3L6QGFMM.js +701 -0
- package/dist/chunk-3L6QGFMM.js.map +1 -0
- package/dist/{chunk-GMPEOUP2.js → chunk-4MZ7BT3R.js} +2 -2
- package/dist/chunk-4MZ7BT3R.js.map +1 -0
- package/dist/{chunk-3IYZ5IGG.js → chunk-5WKUGEBY.js} +2 -2
- package/dist/{chunk-3RMKLXHX.js → chunk-63ZQ5RIN.js} +2 -2
- package/dist/{chunk-M3WTHJHJ.js → chunk-67DIEA53.js} +385 -148
- package/dist/chunk-67DIEA53.js.map +1 -0
- package/dist/{chunk-YS3AZQ2G.js → chunk-6HFAW2MH.js} +1 -1
- package/dist/chunk-6HFAW2MH.js.map +1 -0
- package/dist/{chunk-EY4NZKDR.js → chunk-6Y2TKCNY.js} +2 -2
- package/dist/{chunk-76WT3HOR.js → chunk-6YZOXFPQ.js} +25 -24
- package/dist/chunk-6YZOXFPQ.js.map +1 -0
- package/dist/{chunk-G5ZBFPNU.js → chunk-A2RQOJC7.js} +2 -2
- package/dist/{chunk-AUIR5O6W.js → chunk-AFSB6NKM.js} +13 -19
- package/dist/chunk-AFSB6NKM.js.map +1 -0
- package/dist/{chunk-JCXGZRMU.js → chunk-AO4JEOKD.js} +22 -23
- package/dist/chunk-AO4JEOKD.js.map +1 -0
- package/dist/{chunk-TAAPQVZN.js → chunk-AYELIQXR.js} +2 -2
- package/dist/{chunk-QMM6O4CD.js → chunk-BLHZW7DG.js} +15 -3
- package/dist/{chunk-QMM6O4CD.js.map → chunk-BLHZW7DG.js.map} +1 -1
- package/dist/{chunk-TQOBJYDP.js → chunk-CD4N74YC.js} +1 -1
- package/dist/chunk-CD4N74YC.js.map +1 -0
- package/dist/{chunk-ANLBCBDC.js → chunk-CGE2HBTH.js} +11 -11
- package/dist/chunk-CGE2HBTH.js.map +1 -0
- package/dist/{chunk-OFADUJWJ.js → chunk-CYYSQMLO.js} +5 -5
- package/dist/chunk-CYYSQMLO.js.map +1 -0
- package/dist/{chunk-66ALHVEX.js → chunk-EB46EYI7.js} +3 -3
- package/dist/{chunk-NZJKFF45.js → chunk-EKCDHWRK.js} +4 -4
- package/dist/chunk-EKCDHWRK.js.map +1 -0
- package/dist/{chunk-BABLDP24.js → chunk-EPQFNJU3.js} +152 -7
- package/dist/chunk-EPQFNJU3.js.map +1 -0
- package/dist/{chunk-OGWBVHB3.js → chunk-ESR6HGOY.js} +73 -14
- package/dist/chunk-ESR6HGOY.js.map +1 -0
- package/dist/{chunk-NBD3KUOZ.js → chunk-F6RP62H3.js} +150 -98
- package/dist/chunk-F6RP62H3.js.map +1 -0
- package/dist/chunk-FBYW3QDI.js +252 -0
- package/dist/chunk-FBYW3QDI.js.map +1 -0
- package/dist/{chunk-IPF7E66P.js → chunk-FYAODKVP.js} +2 -2
- package/dist/chunk-GNEN7NKO.js +908 -0
- package/dist/chunk-GNEN7NKO.js.map +1 -0
- package/dist/chunk-GWSM4KLB.js +763 -0
- package/dist/chunk-GWSM4KLB.js.map +1 -0
- package/dist/{chunk-4SO6JMZL.js → chunk-HDMXCUZL.js} +1 -1
- package/dist/chunk-HDMXCUZL.js.map +1 -0
- package/dist/{chunk-ZFY7U2FR.js → chunk-HJM5Y5NU.js} +43 -3
- package/dist/chunk-HJM5Y5NU.js.map +1 -0
- package/dist/{chunk-ZGDVUPTM.js → chunk-IOZ3VKPK.js} +129 -68
- package/dist/chunk-IOZ3VKPK.js.map +1 -0
- package/dist/{chunk-PYOE4VSI.js → chunk-IVXSVHO4.js} +303 -247
- package/dist/chunk-IVXSVHO4.js.map +1 -0
- package/dist/chunk-J3CWXIPV.js +242 -0
- package/dist/chunk-J3CWXIPV.js.map +1 -0
- package/dist/chunk-K6JQW266.js +42 -0
- package/dist/chunk-K6JQW266.js.map +1 -0
- package/dist/chunk-KMZYQF6Q.js +202 -0
- package/dist/chunk-KMZYQF6Q.js.map +1 -0
- package/dist/{chunk-JWOYLO27.js → chunk-LPPZDFTD.js} +22 -12
- package/dist/chunk-LPPZDFTD.js.map +1 -0
- package/dist/{chunk-PAYXCY6A.js → chunk-MYB2B5WX.js} +997 -576
- package/dist/chunk-MYB2B5WX.js.map +1 -0
- package/dist/chunk-MYKNINNN.js +228 -0
- package/dist/chunk-MYKNINNN.js.map +1 -0
- package/dist/chunk-NSQIRMVF.js +27 -0
- package/dist/{chunk-QCHIQWAJ.js.map → chunk-NSQIRMVF.js.map} +1 -1
- package/dist/chunk-NUDBM4MM.js +30 -0
- package/dist/chunk-NUDBM4MM.js.map +1 -0
- package/dist/chunk-NZMWWDAY.js +23 -0
- package/dist/chunk-NZMWWDAY.js.map +1 -0
- package/dist/{chunk-RNFE3ML2.js → chunk-OCUV2Y25.js} +4 -3
- package/dist/chunk-OCUV2Y25.js.map +1 -0
- package/dist/chunk-P4ZJOQA7.js +271 -0
- package/dist/chunk-P4ZJOQA7.js.map +1 -0
- package/dist/chunk-P6C5EZ3D.js +342 -0
- package/dist/chunk-P6C5EZ3D.js.map +1 -0
- package/dist/{chunk-CW6T36TN.js → chunk-PBD7BJUN.js} +62 -4
- package/dist/chunk-PBD7BJUN.js.map +1 -0
- package/dist/chunk-PBIUCQY3.js +696 -0
- package/dist/chunk-PBIUCQY3.js.map +1 -0
- package/dist/chunk-PD6YECQH.js +845 -0
- package/dist/chunk-PD6YECQH.js.map +1 -0
- package/dist/{chunk-M7IYCTJV.js → chunk-R4LFQGP3.js} +2 -2
- package/dist/chunk-RHJIGDUE.js +21 -0
- package/dist/chunk-RHJIGDUE.js.map +1 -0
- package/dist/{chunk-KP7MUZNX.js → chunk-RLXO27MW.js} +30 -8
- package/dist/chunk-RLXO27MW.js.map +1 -0
- package/dist/{chunk-DFNM3WX2.js → chunk-S44BEV4B.js} +168 -45
- package/dist/chunk-S44BEV4B.js.map +1 -0
- package/dist/chunk-S4S5N4BJ.js +1461 -0
- package/dist/chunk-S4S5N4BJ.js.map +1 -0
- package/dist/{chunk-BZ2SHDN2.js → chunk-SGTRAXXX.js} +3 -3
- package/dist/chunk-SGTRAXXX.js.map +1 -0
- package/dist/{chunk-M2RGJPXX.js → chunk-SJAE5PB5.js} +3 -3
- package/dist/{chunk-JGIWG6SR.js → chunk-SNPNHU3H.js} +3937 -1776
- package/dist/chunk-SNPNHU3H.js.map +1 -0
- package/dist/{chunk-IHVBV5C2.js → chunk-SOOBFXRR.js} +94 -71
- package/dist/chunk-SOOBFXRR.js.map +1 -0
- package/dist/{chunk-ZDTRWK5F.js → chunk-TAHFWKS6.js} +2 -2
- package/dist/chunk-UEFFTVPY.js +9 -0
- package/dist/chunk-UEFFTVPY.js.map +1 -0
- package/dist/{chunk-24VULZ7A.js → chunk-UR5BXLBP.js} +3 -3
- package/dist/chunk-UR5BXLBP.js.map +1 -0
- package/dist/{chunk-DMBALCE2.js → chunk-V2SBGVDO.js} +471 -186
- package/dist/chunk-V2SBGVDO.js.map +1 -0
- package/dist/chunk-VJLWD47W.js +23 -0
- package/dist/chunk-VJLWD47W.js.map +1 -0
- package/dist/{chunk-4CQAV7YB.js → chunk-W647DX5Z.js} +2 -2
- package/dist/{chunk-THATMZXD.js → chunk-WFIIU3YZ.js} +2 -2
- package/dist/{chunk-THATMZXD.js.map → chunk-WFIIU3YZ.js.map} +1 -1
- package/dist/chunk-YZDJMAKL.js +82 -0
- package/dist/chunk-YZDJMAKL.js.map +1 -0
- package/dist/{chunk-3TMODYZV.js → chunk-Z5XH6VHY.js} +5 -5
- package/dist/chunk-Z5XH6VHY.js.map +1 -0
- package/dist/{chunk-BE3HW4FY.js → chunk-ZBBMZMA6.js} +377 -170
- package/dist/chunk-ZBBMZMA6.js.map +1 -0
- package/dist/index.cjs +21224 -11714
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +195 -49
- package/dist/index.d.ts +195 -49
- package/dist/index.js +150 -74
- package/dist/index.js.map +1 -1
- package/dist/{ir-BMP7yxJJ.d.cts → ir-BSosEwc8.d.cts} +1 -1
- package/dist/{ir-DUOz6H-5.d.ts → ir-D-uqwL_4.d.ts} +1 -1
- package/dist/{module-B8CBqIZ_.d.cts → module-Ds4tarcI.d.cts} +230 -140
- package/dist/{module-k7m3txak.d.ts → module-Zd1Gn-Nj.d.ts} +230 -140
- package/package.json +20 -4
- package/dist/ModuleTag-C8FHY_sY.d.ts +0 -93
- package/dist/ModuleTag-EGbgBMpZ.d.cts +0 -93
- package/dist/Observability-COqEvp2C.d.cts +0 -713
- package/dist/Observability-cY4kLn0S.d.ts +0 -713
- package/dist/ReadQuery-BlMwhe-F.d.ts +0 -30
- package/dist/ReadQuery-CL5XlXts.d.cts +0 -30
- package/dist/ReadQuery-SinbStGF.d.cts +0 -38
- package/dist/ReadQuery-SinbStGF.d.ts +0 -38
- package/dist/chunk-24VULZ7A.js.map +0 -1
- package/dist/chunk-3QMIVH35.js +0 -43
- package/dist/chunk-3QMIVH35.js.map +0 -1
- package/dist/chunk-3TMODYZV.js.map +0 -1
- package/dist/chunk-4SO6JMZL.js.map +0 -1
- package/dist/chunk-76WT3HOR.js.map +0 -1
- package/dist/chunk-ANLBCBDC.js.map +0 -1
- package/dist/chunk-AUIR5O6W.js.map +0 -1
- package/dist/chunk-BABLDP24.js.map +0 -1
- package/dist/chunk-BE3HW4FY.js.map +0 -1
- package/dist/chunk-BZ2SHDN2.js.map +0 -1
- package/dist/chunk-CW6T36TN.js.map +0 -1
- package/dist/chunk-DFNM3WX2.js.map +0 -1
- package/dist/chunk-DMBALCE2.js.map +0 -1
- package/dist/chunk-EGK3KN7B.js +0 -406
- package/dist/chunk-EGK3KN7B.js.map +0 -1
- package/dist/chunk-GMPEOUP2.js.map +0 -1
- package/dist/chunk-IHVBV5C2.js.map +0 -1
- package/dist/chunk-JCXGZRMU.js.map +0 -1
- package/dist/chunk-JGIWG6SR.js.map +0 -1
- package/dist/chunk-JWOYLO27.js.map +0 -1
- package/dist/chunk-KIXAU3GM.js +0 -137
- package/dist/chunk-KIXAU3GM.js.map +0 -1
- package/dist/chunk-KL5ACTCT.js +0 -8
- package/dist/chunk-KL5ACTCT.js.map +0 -1
- package/dist/chunk-KP7MUZNX.js.map +0 -1
- package/dist/chunk-M3BFQ7HK.js +0 -13
- package/dist/chunk-M3BFQ7HK.js.map +0 -1
- package/dist/chunk-M3WTHJHJ.js.map +0 -1
- package/dist/chunk-NBD3KUOZ.js.map +0 -1
- package/dist/chunk-NQZ2OSGR.js +0 -151
- package/dist/chunk-NQZ2OSGR.js.map +0 -1
- package/dist/chunk-NZJKFF45.js.map +0 -1
- package/dist/chunk-OFADUJWJ.js.map +0 -1
- package/dist/chunk-OGWBVHB3.js.map +0 -1
- package/dist/chunk-PAYXCY6A.js.map +0 -1
- package/dist/chunk-PYOE4VSI.js.map +0 -1
- package/dist/chunk-QCHIQWAJ.js +0 -21
- package/dist/chunk-RNFE3ML2.js.map +0 -1
- package/dist/chunk-TKZ7MEIA.js +0 -27
- package/dist/chunk-TKZ7MEIA.js.map +0 -1
- package/dist/chunk-TQOBJYDP.js.map +0 -1
- package/dist/chunk-VZB726PE.js +0 -93
- package/dist/chunk-VZB726PE.js.map +0 -1
- package/dist/chunk-W3TEWHLO.js +0 -568
- package/dist/chunk-W3TEWHLO.js.map +0 -1
- package/dist/chunk-YS3AZQ2G.js.map +0 -1
- package/dist/chunk-ZFLHVFUC.js +0 -192
- package/dist/chunk-ZFLHVFUC.js.map +0 -1
- package/dist/chunk-ZFY7U2FR.js.map +0 -1
- package/dist/chunk-ZGDVUPTM.js.map +0 -1
- package/dist/protocol-g_1897M2.d.cts +0 -127
- package/dist/protocol-g_1897M2.d.ts +0 -127
- /package/dist/{chunk-3IYZ5IGG.js.map → chunk-5WKUGEBY.js.map} +0 -0
- /package/dist/{chunk-3RMKLXHX.js.map → chunk-63ZQ5RIN.js.map} +0 -0
- /package/dist/{chunk-EY4NZKDR.js.map → chunk-6Y2TKCNY.js.map} +0 -0
- /package/dist/{chunk-G5ZBFPNU.js.map → chunk-A2RQOJC7.js.map} +0 -0
- /package/dist/{chunk-TAAPQVZN.js.map → chunk-AYELIQXR.js.map} +0 -0
- /package/dist/{chunk-66ALHVEX.js.map → chunk-EB46EYI7.js.map} +0 -0
- /package/dist/{chunk-IPF7E66P.js.map → chunk-FYAODKVP.js.map} +0 -0
- /package/dist/{chunk-M7IYCTJV.js.map → chunk-R4LFQGP3.js.map} +0 -0
- /package/dist/{chunk-M2RGJPXX.js.map → chunk-SJAE5PB5.js.map} +0 -0
- /package/dist/{chunk-ZDTRWK5F.js.map → chunk-TAHFWKS6.js.map} +0 -0
- /package/dist/{chunk-4CQAV7YB.js.map → chunk-W647DX5Z.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Observability.ts","../src/internal/observability/jsonValue.ts","../src/internal/observability/evidence.ts","../src/internal/observability/trialRun.ts","../src/internal/observability/evidenceCollector.ts","../src/internal/observability/runSession.ts","../src/internal/runtime/core/DebugSink.ts","../src/internal/runtime/core/errorSummary.ts","../src/internal/runtime/core/EffectOpCore.ts","../src/internal/runtime/core/RuntimeKernel.ts","../src/internal/runtime/core/env.ts","../src/internal/runtime/core/ConvergeStaticIrCollector.ts","../src/internal/observability/trialRunModule.ts","../src/internal/platform/BuildEnv.ts","../src/internal/platform/ConstructionGuard.ts","../src/internal/platform/RuntimeHost.ts","../src/internal/runtime/core/KernelRef.ts","../src/internal/runtime/core/runner/ProgramRunner.kernel.ts","../src/internal/runtime/core/BoundApiRuntime.ts","../src/internal/action.ts","../src/internal/runtime/core/TaskRunner.ts","../src/internal/runtime/core/mutativePatches.ts","../src/internal/field-path.ts","../src/internal/runtime/core/FlowRuntime.ts","../src/internal/effect-op.ts","../src/internal/digest.ts","../src/internal/runtime/core/ReadQuery.ts","../src/internal/runtime/core/MatchBuilder.ts","../src/internal/runtime/core/Platform.ts","../src/internal/runtime/core/Lifecycle.ts","../src/internal/runtime/core/LogicDiagnostics.ts","../src/internal/root.ts","../src/internal/runtime/core/RootContext.ts","../src/internal/runtime/core/runtimeInternalsAccessor.ts","../src/internal/runtime/core/runner/ProgramRunner.closeScope.ts","../src/internal/runtime/core/runner/ProgramRunner.errors.ts","../src/internal/runtime/core/runner/ProgramRunner.signals.ts","../src/internal/reflection/manifest.ts","../src/internal/state-trait/ir.ts","../src/internal/reflection/staticIr.ts","../src/internal/runtime/Runtime.ts","../src/internal/runtime/AppRuntime.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/observability/artifacts/model.ts","../src/internal/observability/artifacts/digest.ts","../src/internal/observability/artifacts/collect.ts","../src/internal/observability/artifacts/registry.ts"],"sourcesContent":["// 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","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 { 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 { 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 { 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 { 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","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 { 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 { 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","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 { 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 { 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 { 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","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 { 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 { 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 { 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","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","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","// 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","/**\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 { 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 } 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, 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","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 { 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","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","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 { 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 { 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","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 { 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 { 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 { 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 { 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","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 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"],"mappings":"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","names":["exportEvidencePackage","importEvidencePackage","out","limit","protocolVersion","import_effect","import_effect","protocolVersion","import_effect","import_effect","import_effect","mergeDowngrade","diagnosticsLevel","mergeDowngrade","resolve","metaProjection","isRecord","exportEvidencePackage","import_effect","import_effect","import_effect","import_effect","import_effect","import_effect","import_effect","isBrowser","record","layer","import_effect","formatScope","formatScope","import_effect","import_effect","import_effect","import_effect","normalized","import_effect","import_effect","make","record","make","resolveConcurrencyLimit","import_effect","import_effect","import_effect","import_effect","import_effect","import_effect","resolve","module","formatScope","make","api","module","resolve","options","import_effect","import_effect","make","import_effect","normalizeFieldPath","base","isRecord","exportStaticIr","module","isRecord","isModuleImpl","resolveModuleId","next","module","exportStaticIr","import_effect","import_effect","import_effect","import_effect","onTrigger","nextSize","defineHidden","defineHidden","isRecord","tag","make","diagnosticsLevel","tag","found","runtime","stream","installation","process","options","layer","layer","process","module","make","isRecord","utf8ByteLength","toErrorSummaryWithCode","layer","make","exportStaticIr","defaultHost","exportEvidencePackage","importEvidencePackage"]}
|
|
1
|
+
{"version":3,"sources":["../src/Observability.ts","../src/internal/observability/jsonValue.ts","../src/internal/observability/evidence.ts","../src/internal/observability/trialRun.ts","../src/internal/observability/evidenceCollector.ts","../src/internal/observability/evidenceExportPipeline.ts","../src/internal/observability/runSession.ts","../src/internal/runtime/core/DebugSink.record.ts","../src/internal/runtime/core/errorSummary.ts","../src/internal/runtime/core/EffectOpCore.ts","../src/internal/runtime/core/RuntimeKernel.ts","../src/internal/runtime/core/env.ts","../src/internal/runtime/core/HostScheduler.ts","../src/internal/runtime/core/RuntimeStore.ts","../src/internal/runtime/core/TickScheduler.ts","../src/internal/runtime/core/JobQueue.ts","../src/internal/runtime/core/TaskRunner.ts","../src/internal/runtime/core/ModeRunner.ts","../src/internal/runtime/core/LatestFiberSlot.ts","../src/internal/runtime/core/DeclarativeLinkRuntime.ts","../src/internal/runtime/core/ConvergeStaticIrCollector.ts","../src/internal/observability/trialRunModule.ts","../src/internal/platform/BuildEnv.ts","../src/internal/platform/ConstructionGuard.ts","../src/internal/platform/RuntimeHost.ts","../src/internal/runtime/core/KernelRef.ts","../src/internal/runtime/core/runner/ProgramRunner.kernel.ts","../src/internal/runtime/core/BoundApiRuntime.ts","../src/internal/action.ts","../src/internal/runtime/core/mutativePatches.ts","../src/internal/field-path.ts","../src/internal/runtime/core/FlowRuntime.ts","../src/internal/effect-op.ts","../src/internal/digest.ts","../src/internal/runtime/core/ReadQuery.ts","../src/internal/runtime/core/diagnosticsBudget.ts","../src/internal/runtime/core/MatchBuilder.ts","../src/internal/runtime/core/Platform.ts","../src/internal/runtime/core/Lifecycle.ts","../src/internal/runtime/core/LogicDiagnostics.ts","../src/internal/root.ts","../src/internal/runtime/core/RootContext.ts","../src/internal/runtime/core/runtimeInternalsAccessor.ts","../src/internal/runtime/core/runner/ProgramRunner.closeScope.ts","../src/internal/runtime/core/runner/ProgramRunner.errors.ts","../src/internal/runtime/core/runner/ProgramRunner.signals.ts","../src/internal/reflection/manifest.ts","../src/internal/external-store-descriptor.ts","../src/internal/state-trait/meta.ts","../src/internal/state-trait/ir.ts","../src/internal/reflection/staticIr.ts","../src/internal/runtime/Runtime.ts","../src/internal/runtime/AppRuntime.ts","../src/internal/runtime/core/AppAssemblyGraph.ts","../src/internal/runtime/core/process/ProcessRuntime.make.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/triggerStartPlan.ts","../src/internal/runtime/core/process/triggerStreams.ts","../src/internal/runtime/core/process/selectorDiagnostics.ts","../src/internal/serviceId.ts","../src/internal/runtime/core/process/supervision.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/internal/observability/trialRunReportPipeline.ts"],"sourcesContent":["// 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","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 keys = Object.keys(input).sort()\n const limit = Math.min(keys.length, options.maxObjectKeys)\n const out: Record<string, JsonValue> = {}\n\n for (let i = 0; i < limit; i++) {\n const rawKey = keys[i]!\n const rawValue = (input as any)[rawKey]\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 (keys.length > limit) {\n stats.oversized += 1\n out.__truncatedKeys = keys.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 { 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 { 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 { Effect, Layer, ServiceMap } from 'effect'\nimport type { JsonValue } from './jsonValue.js'\nimport { projectJsonValue } from './jsonValue.js'\nimport type { EvidencePackage } from './evidence.js'\nimport { collectEvidenceExport, reExportEvidencePackage, summarizeEvidenceExport } from './evidenceExportPipeline.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 ServiceMap.Service<\n EvidenceCollectorTagImpl,\n EvidenceCollector\n>()('@logixjs/core/EvidenceCollector') {}\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* Effect.service(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 collection = collectEvidenceExport({\n convergeStaticIrByDigest,\n kernelImplementationRef,\n runtimeServicesEvidence,\n })\n const summary = summarizeEvidenceExport(collection)\n\n return reExportEvidencePackage({\n sink,\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 type { EvidencePackage } from './evidence.js'\nimport type { JsonValue } from './jsonValue.js'\nimport type { EvidenceSink } from './runSession.js'\n\nexport interface EvidenceExportCollection {\n readonly convergeSummary?: JsonValue\n readonly runtimeSummary?: JsonValue\n}\n\nexport interface EvidenceExportSummary {\n readonly summary?: JsonValue\n}\n\nexport const collectEvidenceExport = (args: {\n readonly convergeStaticIrByDigest: ReadonlyMap<string, JsonValue>\n readonly kernelImplementationRef?: JsonValue\n readonly runtimeServicesEvidence?: JsonValue\n}): EvidenceExportCollection => {\n const convergeSummary =\n args.convergeStaticIrByDigest.size > 0\n ? ({\n staticIrByDigest: Object.fromEntries(\n Array.from(args.convergeStaticIrByDigest.entries()).sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0)),\n ),\n } as unknown as JsonValue)\n : undefined\n\n const runtimeSummary =\n args.kernelImplementationRef != null || args.runtimeServicesEvidence != null\n ? ({\n ...(args.kernelImplementationRef != null ? { kernelImplementationRef: args.kernelImplementationRef } : {}),\n ...(args.runtimeServicesEvidence != null ? { services: args.runtimeServicesEvidence } : {}),\n } as unknown as JsonValue)\n : undefined\n\n return {\n convergeSummary,\n runtimeSummary,\n }\n}\n\nexport const summarizeEvidenceExport = (collection: EvidenceExportCollection): EvidenceExportSummary => {\n const summary =\n collection.convergeSummary != null || collection.runtimeSummary != null\n ? ({\n ...(collection.convergeSummary != null ? { converge: collection.convergeSummary } : {}),\n ...(collection.runtimeSummary != null ? { runtime: collection.runtimeSummary } : {}),\n } as unknown as JsonValue)\n : undefined\n\n return { summary }\n}\n\nexport const reExportEvidencePackage = (args: {\n readonly sink: EvidenceSink\n readonly maxEvents?: number\n readonly summary: EvidenceExportSummary\n}): EvidencePackage =>\n args.sink.export({\n maxEvents: args.maxEvents,\n summary: args.summary.summary,\n })\n","import { Layer, ServiceMap } 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 ServiceMap.Service<RunSessionTagImpl, RunSession>()('@logixjs/core/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 { Cause, Effect, Layer, Logger, Option, ServiceMap } 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'\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 budgetEnvelope?: ProcessProtocol.ProcessEvent['budgetEnvelope']\n readonly degrade?: ProcessProtocol.ProcessEvent['degrade']\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 opSeq?: number\n readonly trigger?: TriggerRef\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n | {\n readonly type: 'warn:priority-inversion'\n readonly moduleId?: string\n readonly instanceId?: string\n readonly tickSeq: number\n readonly reason: 'deferredBacklog' | 'subscribedNonUrgent'\n readonly selectorId?: string\n readonly runtimeLabel?: string\n readonly timestamp?: number\n }\n | {\n readonly type: 'warn:microtask-starvation'\n readonly moduleId?: string\n readonly instanceId?: string\n readonly tickSeq: number\n readonly microtaskChainDepth?: number\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 = ServiceMap.Reference<ReadonlyArray<Sink>>('@logixjs/core/Debug.currentDebugSinks', {\n defaultValue: () => [],\n})\nexport const currentRuntimeLabel = ServiceMap.Reference<string | undefined>('@logixjs/core/Debug.currentRuntimeLabel', {\n defaultValue: () => undefined,\n})\nexport const currentTxnId = ServiceMap.Reference<string | undefined>('@logixjs/core/Debug.currentTxnId', {\n defaultValue: () => undefined,\n})\nexport const currentOpSeq = ServiceMap.Reference<number | undefined>('@logixjs/core/Debug.currentOpSeq', {\n defaultValue: () => undefined,\n})\nexport type DiagnosticsLevel = 'off' | 'light' | 'sampled' | 'full'\nexport const currentDiagnosticsLevel = ServiceMap.Reference<DiagnosticsLevel>('@logixjs/core/Debug.currentDiagnosticsLevel', {\n defaultValue: () => 'off',\n})\n\nexport const diagnosticsLevel = (level: DiagnosticsLevel): Layer.Layer<any, never, never> =>\n Layer.succeed(currentDiagnosticsLevel, level) as Layer.Layer<any, never, never>\n\nexport type DiagnosticsMaterialization = 'eager' | 'lazy'\nexport const currentDiagnosticsMaterialization = ServiceMap.Reference<DiagnosticsMaterialization>(\n '@logixjs/core/Debug.currentDiagnosticsMaterialization',\n {\n defaultValue: () => 'eager',\n },\n)\n\nexport const diagnosticsMaterialization = (mode: DiagnosticsMaterialization): Layer.Layer<any, never, never> =>\n Layer.succeed(currentDiagnosticsMaterialization, mode) as Layer.Layer<any, never, never>\n\nexport type TraceMode = 'off' | 'on'\nexport const currentTraceMode = ServiceMap.Reference<TraceMode>('@logixjs/core/Debug.currentTraceMode', {\n defaultValue: () => 'on',\n})\n\nexport const traceMode = (mode: TraceMode): Layer.Layer<any, never, never> =>\n Layer.succeed(currentTraceMode, mode) 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 = ServiceMap.Reference<TraitConvergeDiagnosticsSamplingConfig>(\n '@logixjs/core/Debug.currentTraitConvergeDiagnosticsSampling',\n {\n defaultValue: () => ({\n sampleEveryN: 32,\n topK: 3,\n }),\n },\n)\n\nexport const traitConvergeDiagnosticsSampling = (\n config: TraitConvergeDiagnosticsSamplingConfig,\n): Layer.Layer<any, never, never> =>\n Layer.succeed(currentTraitConvergeDiagnosticsSampling, config) as Layer.Layer<any, never, never>\n\nexport const appendSinks = (sinks: ReadonlyArray<Sink>): Layer.Layer<any, never, never> =>\n Layer.effect(\n currentDebugSinks,\n Effect.gen(function* () {\n const current = yield* Effect.service(currentDebugSinks)\n return [...current, ...sinks]\n }),\n ) as Layer.Layer<any, never, never>\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' | 'budget_exceeded' | '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 | 'budget_exceeded'\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 if (current === 'budget_exceeded' || next === 'budget_exceeded') return 'budget_exceeded'\n return 'unknown'\n}\n\nconst stripDirtyRootPaths = (value: unknown): unknown => {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return value\n const { rootPaths, ...rest } = value as Record<string, unknown> & { readonly rootPaths?: unknown }\n return rest\n}\n\nconst stripTraitConvergeLegacyFields = (value: JsonValue): JsonValue => {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return value\n\n const anyValue = value as any\n const { dirtyRoots, ...rest } = anyValue\n const dirty = (rest as any).dirty\n if (!dirty || typeof dirty !== 'object' || Array.isArray(dirty)) {\n return rest as JsonValue\n }\n\n return {\n ...rest,\n dirty: stripDirtyRootPaths(dirty),\n } as JsonValue\n}\n\nconst stripTraitConvergeLight = (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 ...(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 }\n : undefined\n\n const { top3, dirtyRoots, ...rest } = anyValue\n return (dirtySlim ? { ...rest, dirty: dirtySlim } : rest) as JsonValue\n}\n\nconst stripTraitConvergeSampled = (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\nconst stripTraitCheckLight = (value: JsonValue): JsonValue => {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return value\n\n const anyValue = value as any\n const degraded = anyValue.degraded\n const degradedSlim =\n degraded && typeof degraded === 'object' && !Array.isArray(degraded) ? { kind: (degraded as any).kind } : undefined\n const summary = anyValue.summary\n let summarySlim: Record<string, number> | undefined\n if (summary && typeof summary === 'object' && !Array.isArray(summary)) {\n const candidate: Record<string, number> = {}\n let hasSummaryField = false\n if (typeof (summary as any).scannedRows === 'number') {\n candidate.scannedRows = (summary as any).scannedRows\n hasSummaryField = true\n }\n if (typeof (summary as any).affectedRows === 'number') {\n candidate.affectedRows = (summary as any).affectedRows\n hasSummaryField = true\n }\n if (typeof (summary as any).changedRows === 'number') {\n candidate.changedRows = (summary as any).changedRows\n hasSummaryField = true\n }\n if (hasSummaryField) {\n summarySlim = candidate\n }\n }\n\n const slim: Record<string, unknown> = {}\n if (typeof anyValue.ruleId === 'string') slim.ruleId = anyValue.ruleId\n if (Array.isArray(anyValue.scopeFieldPath)) slim.scopeFieldPath = anyValue.scopeFieldPath\n if (typeof anyValue.mode === 'string') slim.mode = anyValue.mode\n if (anyValue.trigger && typeof anyValue.trigger === 'object' && !Array.isArray(anyValue.trigger)) {\n slim.trigger = anyValue.trigger\n }\n if (typeof anyValue.rowIdMode === 'string') slim.rowIdMode = anyValue.rowIdMode\n if (summarySlim) slim.summary = summarySlim\n if (degradedSlim) slim.degraded = degradedSlim\n\n return slim as JsonValue\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 } 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.succeed(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.succeed(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.succeed(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>)\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.succeed(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.succeed(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 = Layer.effect(\n Logger.CurrentLoggers,\n Effect.gen(function* () {\n const current = yield* Effect.service(Logger.CurrentLoggers)\n return new Set(\n [...current].filter((logger) => logger !== Logger.defaultLogger).concat(Logger.consolePretty({ mode: 'browser', colors: true })),\n )\n }),\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* Effect.service(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' && event.severity !== 'info') {\n yield* diagnosticLog(event)\n }\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 }\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 }\n return\n }\n\n // Trace events are performance-sensitive and should be explicitly enabled.\n // Keep the check scoped to trace:* only so non-trace events stay on the fast path.\n if (typeof event.type === 'string' && event.type.startsWith('trace:')) {\n const mode = yield* Effect.service(currentTraceMode)\n if (mode === 'off') return\n }\n\n const enriched = event as Event\n\n const diagnosticsLevel = yield* Effect.service(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* Effect.service(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* Effect.service(currentTxnId)\n if (txnId) {\n ;(enriched as any).txnId = txnId\n }\n }\n\n if (\n diagnosticsLevel !== 'off' &&\n (enriched as any).type === 'trace:effectop' &&\n (enriched as any).linkId === undefined\n ) {\n const maybeLinkId = yield* Effect.serviceOption(EffectOpCore.currentLinkId)\n if (Option.isSome(maybeLinkId) && maybeLinkId.value) {\n ;(enriched as any).linkId = maybeLinkId.value\n }\n }\n\n if (sinks.length === 1) {\n yield* sinks[0]!.record(enriched)\n return\n }\n\n yield* Effect.forEach(sinks as ReadonlyArray<Sink>, (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 materialization?: DiagnosticsMaterialization\n readonly eventSeq?: number\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 const materialization = options?.materialization ?? 'eager'\n const isLazyMaterialization = materialization === 'lazy'\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 const dirtySetCanonical = stripDirtyRootPaths(e.dirtySet)\n const slimMetaInput: Record<string, unknown> = {}\n if (dirtySetCanonical !== undefined) slimMetaInput.dirtySet = dirtySetCanonical\n if (e.patchCount !== undefined) slimMetaInput.patchCount = e.patchCount\n if (e.patchesTruncated !== undefined) slimMetaInput.patchesTruncated = e.patchesTruncated\n if (e.patchesTruncatedReason !== undefined) slimMetaInput.patchesTruncatedReason = e.patchesTruncatedReason\n if (e.staticIrDigest !== undefined) slimMetaInput.staticIrDigest = e.staticIrDigest\n if (e.commitMode !== undefined) slimMetaInput.commitMode = e.commitMode\n if (e.priority !== undefined) slimMetaInput.priority = e.priority\n if (e.originKind !== undefined) slimMetaInput.originKind = e.originKind\n if (e.originName !== undefined) slimMetaInput.originName = e.originName\n\n const metaInput = isLightLike\n ? isLazyMaterialization\n ? slimMetaInput\n : { state: e.state, ...slimMetaInput }\n : isLazyMaterialization\n ? slimMetaInput\n : { state: e.state, ...slimMetaInput, traitSummary: e.traitSummary, replayEvent: e.replayEvent }\n\n const metaProjection = isLazyMaterialization\n ? {\n value: metaInput as unknown as JsonValue,\n stats: { dropped: 0, oversized: 0, nonSerializable: 0 } satisfies JsonValueProjectionStats,\n downgrade: undefined,\n }\n : 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 budgetEnvelope: (e as any).budgetEnvelope,\n degrade: (e as any).degrade,\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 processDegradeReason = (() => {\n const marker = (e as any).degrade\n if (!marker || typeof marker !== 'object' || Array.isArray(marker)) return undefined\n if ((marker as any).degraded !== true) return undefined\n const reason = (marker as any).reason\n if (reason === 'budget_exceeded') return 'budget_exceeded' as const\n if (reason === 'payload_oversized') return 'oversized' as const\n if (reason === 'payload_non_serializable') return 'non_serializable' as const\n return 'unknown' as const\n })()\n downgrade = mergeDowngrade(downgrade, processDegradeReason)\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 opSeq: e.opSeq,\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 case 'warn:priority-inversion': {\n const e = event as Extract<Event, { readonly type: 'warn:priority-inversion' }>\n const metaInput = isLightLike\n ? {\n tickSeq: e.tickSeq,\n reason: e.reason,\n selectorId: e.selectorId,\n }\n : {\n tickSeq: e.tickSeq,\n reason: e.reason,\n selectorId: e.selectorId,\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: 'diagnostic',\n label: e.type,\n meta: metaProjection.value,\n })\n }\n case 'warn:microtask-starvation': {\n const e = event as Extract<Event, { readonly type: 'warn:microtask-starvation' }>\n const metaInput = isLightLike\n ? {\n tickSeq: e.tickSeq,\n microtaskChainDepth: e.microtaskChainDepth,\n }\n : {\n tickSeq: e.tickSeq,\n microtaskChainDepth: e.microtaskChainDepth,\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: 'diagnostic',\n label: e.type,\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:devtools:ring-trim-policy: emit a stable slim payload for ring trim policy changes.\n if (event.type === 'trace:devtools:ring-trim-policy') {\n const data = (event as {\n readonly data?: {\n readonly mode?: unknown\n readonly threshold?: unknown\n readonly bufferSize?: unknown\n }\n }).data\n const metaInput = {\n mode: data?.mode,\n threshold: data?.threshold,\n bufferSize: data?.bufferSize,\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:tick: runtime tick evidence; keep Slim payload even in light tier.\n if (event.type === 'trace:tick') {\n const data: any = (event as any).data\n const metaInput = isLightLike\n ? {\n tickSeq: data?.tickSeq,\n phase: data?.phase,\n schedule: data?.schedule,\n triggerSummary: data?.triggerSummary,\n anchors: data?.anchors,\n budget: data?.budget,\n backlog: data?.backlog,\n result: data?.result,\n }\n : {\n data,\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: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 if (event.type === 'trace:txn-phase') {\n const data: any = (event as any).data\n const metaInput = isLightLike\n ? {\n kind: data?.kind,\n originKind: data?.originKind,\n originName: data?.originName,\n commitMode: data?.commitMode,\n priority: data?.priority,\n txnPreludeMs: data?.txnPreludeMs,\n queue: data?.queue\n ? {\n lane: data.queue.lane,\n contextLookupMs: data.queue.contextLookupMs,\n resolvePolicyMs: data.queue.resolvePolicyMs,\n backpressureMs: data.queue.backpressureMs,\n enqueueBookkeepingMs: data.queue.enqueueBookkeepingMs,\n queueWaitMs: data.queue.queueWaitMs,\n startHandoffMs: data.queue.startHandoffMs,\n startMode: data.queue.startMode,\n }\n : undefined,\n dispatchActionRecordMs: data?.dispatchActionRecordMs,\n dispatchActionCommitHubMs: data?.dispatchActionCommitHubMs,\n dispatchActionCount: data?.dispatchActionCount,\n bodyShellMs: data?.bodyShellMs,\n asyncEscapeGuardMs: data?.asyncEscapeGuardMs,\n traitConvergeMs: data?.traitConvergeMs,\n scopedValidateMs: data?.scopedValidateMs,\n sourceSyncMs: data?.sourceSyncMs,\n commit: data?.commit\n ? {\n totalMs: data.commit.totalMs,\n rowIdSyncMs: data.commit.rowIdSyncMs,\n publishCommitMs: data.commit.publishCommitMs,\n stateUpdateDebugRecordMs: data.commit.stateUpdateDebugRecordMs,\n onCommitBeforeStateUpdateMs: data.commit.onCommitBeforeStateUpdateMs,\n onCommitAfterStateUpdateMs: data.commit.onCommitAfterStateUpdateMs,\n }\n : undefined,\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: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 data = (event as Extract<Event, { readonly type: 'trace:trait:converge' }>).data\n const metaInput =\n diagnosticsLevel === 'light'\n ? stripTraitConvergeLight(data)\n : diagnosticsLevel === 'sampled'\n ? stripTraitConvergeSampled(data)\n : stripTraitConvergeLegacyFields(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 data = (event as Extract<Event, { readonly type: 'trace:trait:check' }>).data\n const metaInput = isLightLike ? stripTraitCheckLight(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","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>)\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 { Effect, ServiceMap } from 'effect'\n\nexport const currentLinkId = ServiceMap.Reference<string | undefined>('@logixjs/core/CurrentLinkId', {\n defaultValue: () => undefined,\n})\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\nconst composeMiddlewareCache = new WeakMap<MiddlewareStack, 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 ServiceMap.Service<\n EffectOpMiddlewareTag,\n EffectOpMiddlewareEnv\n>()('Logix/EffectOpMiddleware') {}\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 const cached = composeMiddlewareCache.get(stack)\n if (cached) {\n return cached\n }\n\n const composed: Middleware = <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 composeMiddlewareCache.set(stack, composed)\n return composed\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* Effect.service(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.provideService(program as any, currentLinkId, linkId)\n }) as Effect.Effect<A, E, R>\n}\n","import { Effect, Option, ServiceMap } from 'effect'\nimport { isDevEnv } from './env.js'\nimport {\n makeRuntimeServicesEvidence as makeRuntimeServicesEvidenceImpl,\n selectRuntimeService as selectRuntimeServiceImpl,\n type RuntimeServicesOverrideLayers,\n} from './RuntimeKernel.selection.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 ServiceMap.Service<\n RuntimeServicesRuntimeConfigTagImpl,\n RuntimeServicesRuntimeConfig\n>()('@logixjs/core/RuntimeServicesRuntimeConfig') {}\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 ServiceMap.Service<\n RuntimeServicesProviderOverridesTagImpl,\n RuntimeServicesProviderOverrides\n>()('@logixjs/core/RuntimeServicesProviderOverrides') {}\n\nexport const RuntimeServicesProviderOverridesTag = RuntimeServicesProviderOverridesTagImpl\n\nclass RuntimeServicesInstanceOverridesTagImpl extends ServiceMap.Service<\n RuntimeServicesInstanceOverridesTagImpl,\n RuntimeServicesOverrides\n>()('@logixjs/core/RuntimeServicesInstanceOverrides') {}\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: fullCutover. trial must be opted in explicitly.\n */\nexport type FullCutoverGateMode = 'trial' | 'fullCutover'\n\nclass FullCutoverGateModeTagImpl extends ServiceMap.Service<\n FullCutoverGateModeTagImpl,\n FullCutoverGateMode\n>()('@logixjs/core/FullCutoverGateMode') {}\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 isPlainRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst normalizeRuntimeServiceOverride = (value: unknown): RuntimeServiceOverride | undefined => {\n if (!isPlainRecord(value)) return undefined\n\n const implIdRaw = value.implId\n const notesRaw = value.notes\n\n const implId = typeof implIdRaw === 'string' && implIdRaw.length > 0 ? implIdRaw : undefined\n const notes = typeof notesRaw === 'string' && notesRaw.length > 0 ? notesRaw : undefined\n if (!implId && !notes) return undefined\n\n return Object.freeze({\n ...(implId ? { implId } : {}),\n ...(notes ? { notes } : {}),\n }) as RuntimeServiceOverride\n}\n\nconst freezeRuntimeServicesOverrides = (\n value: RuntimeServicesOverrides | undefined,\n): RuntimeServicesOverrides | undefined => {\n if (!isPlainRecord(value)) return undefined\n\n const out: Record<string, RuntimeServiceOverride> = {}\n for (const [serviceId, rawOverride] of Object.entries(value)) {\n if (serviceId.length === 0) continue\n const normalized = normalizeRuntimeServiceOverride(rawOverride)\n if (!normalized) continue\n out[serviceId] = normalized\n }\n\n if (Object.keys(out).length === 0) return undefined\n return Object.freeze(out) as RuntimeServicesOverrides\n}\n\nconst freezeRuntimeServicesOverridesAtModule = (args: {\n readonly moduleId: string | undefined\n readonly byModuleId: Readonly<Record<string, RuntimeServicesOverrides>> | undefined\n}): RuntimeServicesOverrides | undefined => {\n if (!args.moduleId || args.moduleId.length === 0) return undefined\n if (!isPlainRecord(args.byModuleId)) return undefined\n return freezeRuntimeServicesOverrides(args.byModuleId[args.moduleId])\n}\n\nexport const resolveRuntimeServicesOverrides = (args: {\n readonly moduleId: string | undefined\n}): Effect.Effect<RuntimeServicesOverrideLayers, never, any> =>\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 const runtimeDefaults = freezeRuntimeServicesOverrides(runtimeConfig?.services)\n const runtimeModule = freezeRuntimeServicesOverridesAtModule({\n moduleId,\n byModuleId: runtimeConfig?.servicesByModuleId,\n })\n const providerDefaults = freezeRuntimeServicesOverrides(providerOverrides?.services)\n const providerModule = freezeRuntimeServicesOverridesAtModule({\n moduleId,\n byModuleId: providerOverrides?.servicesByModuleId,\n })\n const instance = freezeRuntimeServicesOverrides(instanceOverrides)\n\n return Object.freeze({\n runtimeDefault: runtimeDefaults,\n runtimeModule,\n provider: providerDefaults,\n providerModule,\n instance,\n }) as RuntimeServicesOverrideLayers\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 ServiceMap.Service<\n RuntimeServicesRegistryTagImpl,\n RuntimeServicesRegistry\n>()('@logixjs/core/RuntimeServicesRegistry') {}\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 = selectRuntimeServiceImpl\n\nexport const makeRuntimeServicesEvidence = makeRuntimeServicesEvidenceImpl\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 { Effect, Layer, ServiceMap } from 'effect'\nimport type { TraitConvergeRequestedMode } from '../../state-trait/model.js'\nimport type { ReadQueryStrictGateConfig } from './ReadQuery.js'\nimport { getGlobalHostScheduler, type HostScheduler } from './HostScheduler.js'\nimport { makeRuntimeStore, type RuntimeStore } from './RuntimeStore.js'\nimport { makeTickScheduler, type TickScheduler, type TickSchedulerConfig } from './TickScheduler.js'\nimport { makeDeclarativeLinkRuntime, type DeclarativeLinkRuntime } from './DeclarativeLinkRuntime.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 ServiceMap.Service<\n StateTransactionConfigTagImpl,\n StateTransactionRuntimeConfig\n>()('@logixjs/core/StateTransactionRuntimeConfig') {}\n\nexport const StateTransactionConfigTag = StateTransactionConfigTagImpl\n\nexport type ReadQueryStrictGateRuntimeConfig = ReadQueryStrictGateConfig\n\nclass ReadQueryStrictGateConfigTagImpl extends ServiceMap.Service<\n ReadQueryStrictGateConfigTagImpl,\n ReadQueryStrictGateRuntimeConfig\n>()('@logixjs/core/ReadQueryStrictGateRuntimeConfig') {}\n\nexport const ReadQueryStrictGateConfigTag = ReadQueryStrictGateConfigTagImpl\n\nexport type ReplayMode = 'live' | 'replay'\n\nexport interface ReplayModeConfig {\n readonly mode: ReplayMode\n}\n\nclass ReplayModeConfigTagImpl extends ServiceMap.Service<\n ReplayModeConfigTagImpl,\n ReplayModeConfig\n>()('@logixjs/core/ReplayModeConfig') {}\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 ServiceMap.Service<\n StateTransactionOverridesTagImpl,\n StateTransactionOverrides\n>()('@logixjs/core/StateTransactionOverrides') {}\n\nexport const StateTransactionOverridesTag = StateTransactionOverridesTagImpl\n\nexport type SchedulingPolicyLimit = number | 'unbounded'\nexport type ConcurrencyLimit = SchedulingPolicyLimit\n\nexport interface SchedulingPolicySurfacePatch {\n readonly concurrencyLimit?: SchedulingPolicyLimit\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 unified scheduling policy surface:\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 SchedulingPolicySurface extends SchedulingPolicySurfacePatch {\n readonly overridesByModuleId?: Readonly<Record<string, SchedulingPolicySurfacePatch>>\n}\n\nclass SchedulingPolicySurfaceTagImpl extends ServiceMap.Service<\n SchedulingPolicySurfaceTagImpl,\n SchedulingPolicySurface\n>()('@logixjs/core/SchedulingPolicySurface') {}\n\nexport const SchedulingPolicySurfaceTag = SchedulingPolicySurfaceTagImpl\n\n/**\n * Provider-scoped SchedulingPolicySurfaceOverrides (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 SchedulingPolicySurfaceOverrides extends SchedulingPolicySurfacePatch {\n readonly overridesByModuleId?: Readonly<Record<string, SchedulingPolicySurfacePatch>>\n}\n\nclass SchedulingPolicySurfaceOverridesTagImpl extends ServiceMap.Service<\n SchedulingPolicySurfaceOverridesTagImpl,\n SchedulingPolicySurfaceOverrides\n>()('@logixjs/core/SchedulingPolicySurfaceOverrides') {}\n\nexport const SchedulingPolicySurfaceOverridesTag = SchedulingPolicySurfaceOverridesTagImpl\n\n/**\n * Legacy aliases:\n * - Keep old names as pure aliases to support migration without behavior drift.\n * - Canonical naming for new code should use SchedulingPolicySurface*.\n */\nexport type ConcurrencyPolicyPatch = SchedulingPolicySurfacePatch\nexport type ConcurrencyPolicy = SchedulingPolicySurface\nexport type ConcurrencyPolicyOverrides = SchedulingPolicySurfaceOverrides\n\nexport const ConcurrencyPolicyTag = SchedulingPolicySurfaceTag\nexport const ConcurrencyPolicyOverridesTag = SchedulingPolicySurfaceOverridesTag\n\n// ---- 073: TickScheduler + RuntimeStore (injectable runtime services) ----\n\nexport interface RuntimeStoreService extends RuntimeStore {}\n\nexport class RuntimeStoreTag extends ServiceMap.Service<RuntimeStoreTag, RuntimeStoreService>()('@logixjs/core/RuntimeStore') {}\n\nexport const runtimeStoreLayer: Layer.Layer<any, never, never> = Layer.effect(\n RuntimeStoreTag,\n Effect.acquireRelease(\n Effect.sync(() => makeRuntimeStore() as RuntimeStoreService),\n (store) => Effect.sync(() => store.dispose()),\n ),\n) as Layer.Layer<any, never, never>\n\nexport const runtimeStoreTestStubLayer = (store: RuntimeStoreService): Layer.Layer<any, never, never> =>\n Layer.succeed(RuntimeStoreTag, store) as Layer.Layer<any, never, never>\n\nexport interface HostSchedulerService extends HostScheduler {}\n\nexport class HostSchedulerTag extends ServiceMap.Service<\n HostSchedulerTag,\n HostSchedulerService\n>()('@logixjs/core/HostScheduler') {}\n\nexport const hostSchedulerLayer: Layer.Layer<any, never, never> = Layer.succeed(\n HostSchedulerTag,\n getGlobalHostScheduler() as HostSchedulerService,\n) as Layer.Layer<any, never, never>\n\nexport const hostSchedulerTestStubLayer = (scheduler: HostSchedulerService): Layer.Layer<any, never, never> =>\n Layer.succeed(HostSchedulerTag, scheduler) as Layer.Layer<any, never, never>\n\nexport interface DeclarativeLinkRuntimeService extends DeclarativeLinkRuntime {}\n\nexport class DeclarativeLinkRuntimeTag extends ServiceMap.Service<\n DeclarativeLinkRuntimeTag,\n DeclarativeLinkRuntimeService\n>()('@logixjs/core/DeclarativeLinkRuntime') {}\n\nexport const declarativeLinkRuntimeLayer: Layer.Layer<any, never, never> = Layer.succeed(\n DeclarativeLinkRuntimeTag,\n makeDeclarativeLinkRuntime() as DeclarativeLinkRuntimeService,\n) as Layer.Layer<any, never, never>\n\nexport const declarativeLinkRuntimeTestStubLayer = (\n runtime: DeclarativeLinkRuntimeService,\n): Layer.Layer<any, never, never> => Layer.succeed(DeclarativeLinkRuntimeTag, runtime) as Layer.Layer<any, never, never>\n\nexport interface TickSchedulerService extends TickScheduler {}\n\nexport class TickSchedulerTag extends ServiceMap.Service<TickSchedulerTag, TickSchedulerService>()('@logixjs/core/TickScheduler') {}\n\nexport const tickSchedulerLayer = (config?: TickSchedulerConfig): Layer.Layer<any, never, never> =>\n Layer.effect(\n TickSchedulerTag,\n Effect.gen(function* () {\n const store = yield* Effect.service(RuntimeStoreTag).pipe(Effect.orDie)\n const declarativeLinkRuntime = yield* Effect.service(DeclarativeLinkRuntimeTag).pipe(Effect.orDie)\n const hostScheduler = yield* Effect.service(HostSchedulerTag).pipe(Effect.orDie)\n return makeTickScheduler({ runtimeStore: store, declarativeLinkRuntime, hostScheduler, config }) as TickSchedulerService\n }),\n ) as Layer.Layer<any, never, never>\n\nexport const tickSchedulerTestStubLayer = (scheduler: TickSchedulerService): Layer.Layer<any, never, never> =>\n Layer.succeed(TickSchedulerTag, scheduler) as Layer.Layer<any, never, never>\n","export type Cancel = () => void\n\nexport type HostScheduler = {\n readonly nowMs: () => number\n readonly scheduleMicrotask: (cb: () => void) => void\n readonly scheduleMacrotask: (cb: () => void) => Cancel\n readonly scheduleAnimationFrame: (cb: () => void) => Cancel\n readonly scheduleTimeout: (ms: number, cb: () => void) => Cancel\n}\n\nconst noopCancel: Cancel = () => {}\n\nconst safeNowMs = (): number => {\n const perf = (globalThis as any).performance as { now?: () => number } | undefined\n if (perf && typeof perf.now === 'function') {\n try {\n const v = perf.now()\n if (typeof v === 'number' && Number.isFinite(v)) return v\n } catch {\n // fallthrough\n }\n }\n\n return Date.now()\n}\n\nconst safeQueueMicrotask = (cb: () => void): void => {\n const qm = (globalThis as any).queueMicrotask as ((run: () => void) => void) | undefined\n if (typeof qm === 'function') {\n try {\n qm(cb)\n return\n } catch {\n // fallthrough\n }\n }\n\n // Promise job fallback (still a microtask boundary).\n try {\n Promise.resolve().then(cb)\n } catch {\n // last resort\n setTimeout(cb, 0)\n }\n}\n\nconst safeSetTimeout = (ms: number, cb: () => void): Cancel => {\n const id = setTimeout(cb, ms)\n return () => {\n try {\n clearTimeout(id)\n } catch {\n // best-effort\n }\n }\n}\n\nconst makeMessageChannelMacrotask = (): ((cb: () => void) => Cancel) | undefined => {\n const MC = (globalThis as any).MessageChannel as { new (): MessageChannel } | undefined\n if (typeof MC !== 'function') return undefined\n\n let channel: MessageChannel\n try {\n channel = new MC()\n } catch {\n return undefined\n }\n\n type Task = { canceled: boolean; cb: () => void }\n const queue: Array<Task> = []\n let scheduled = false\n\n const flush = (): void => {\n scheduled = false\n const tasks = queue.splice(0, queue.length)\n for (const t of tasks) {\n if (t.canceled) continue\n try {\n t.cb()\n } catch {\n // best-effort\n }\n }\n }\n\n try {\n channel.port1.onmessage = flush\n } catch {\n return undefined\n }\n\n const schedule = (cb: () => void): Cancel => {\n const task: Task = { canceled: false, cb }\n queue.push(task)\n if (!scheduled) {\n scheduled = true\n try {\n channel.port2.postMessage(undefined)\n } catch {\n scheduled = false\n // fallback to timeout if postMessage fails\n return safeSetTimeout(0, cb)\n }\n }\n return () => {\n task.canceled = true\n }\n }\n\n return schedule\n}\n\nconst makeSetImmediateMacrotask = (): ((cb: () => void) => Cancel) | undefined => {\n const si = (globalThis as any).setImmediate as ((run: () => void) => any) | undefined\n const ci = (globalThis as any).clearImmediate as ((id: any) => void) | undefined\n if (typeof si !== 'function') return undefined\n\n return (cb) => {\n let id: any\n try {\n id = si(cb)\n } catch {\n return safeSetTimeout(0, cb)\n }\n\n return () => {\n if (typeof ci !== 'function') return\n try {\n ci(id)\n } catch {\n // best-effort\n }\n }\n }\n}\n\nconst makeRaf = (): ((cb: () => void) => Cancel) | undefined => {\n const raf = (globalThis as any).requestAnimationFrame as ((run: () => void) => number) | undefined\n const cancel = (globalThis as any).cancelAnimationFrame as ((id: number) => void) | undefined\n if (typeof raf !== 'function') return undefined\n\n return (cb) => {\n let id: number\n try {\n id = raf(cb)\n } catch {\n return noopCancel\n }\n\n return () => {\n if (typeof cancel !== 'function') return\n try {\n cancel(id)\n } catch {\n // best-effort\n }\n }\n }\n}\n\nexport const makeDefaultHostScheduler = (): HostScheduler => {\n const macrotask =\n makeSetImmediateMacrotask() ??\n makeMessageChannelMacrotask() ??\n ((cb: () => void) => safeSetTimeout(0, cb))\n\n const raf = makeRaf()\n\n return {\n nowMs: safeNowMs,\n scheduleMicrotask: safeQueueMicrotask,\n scheduleMacrotask: macrotask,\n scheduleAnimationFrame: (cb) => raf?.(cb) ?? macrotask(cb),\n scheduleTimeout: safeSetTimeout,\n }\n}\n\nlet globalHostScheduler: HostScheduler | undefined\n\nexport const getGlobalHostScheduler = (): HostScheduler => {\n globalHostScheduler ??= makeDefaultHostScheduler()\n return globalHostScheduler\n}\n\nexport const __unsafeSetGlobalHostSchedulerForTests = (next: HostScheduler | undefined): void => {\n globalHostScheduler = next\n}\n\nexport type DeterministicHostScheduler = HostScheduler & {\n readonly flushMicrotasks: (options?: { readonly max?: number }) => number\n readonly flushOneMacrotask: () => boolean\n readonly flushAll: (options?: { readonly maxTurns?: number }) => { readonly turns: number; readonly ran: number }\n readonly getQueueSize: () => { readonly microtasks: number; readonly macrotasks: number }\n}\n\nexport const makeDeterministicHostScheduler = (): DeterministicHostScheduler => {\n const microtasks: Array<() => void> = []\n const macrotasks: Array<{ canceled: boolean; cb: () => void }> = []\n\n const flushMicrotasks = (options?: { readonly max?: number }): number => {\n const max = options?.max ?? 10_000\n let ran = 0\n while (microtasks.length > 0 && ran < max) {\n const cb = microtasks.shift()!\n ran += 1\n try {\n cb()\n } catch {\n // best-effort\n }\n }\n return ran\n }\n\n const flushOneMacrotask = (): boolean => {\n const t = macrotasks.shift()\n if (!t) return false\n if (t.canceled) return true\n try {\n t.cb()\n } catch {\n // best-effort\n }\n return true\n }\n\n const flushAll = (options?: { readonly maxTurns?: number }): { turns: number; ran: number } => {\n const maxTurns = options?.maxTurns ?? 10_000\n let turns = 0\n let ran = 0\n\n while (turns < maxTurns) {\n const before = microtasks.length + macrotasks.length\n ran += flushMicrotasks()\n if (microtasks.length > 0) {\n turns += 1\n continue\n }\n if (flushOneMacrotask()) {\n turns += 1\n continue\n }\n const after = microtasks.length + macrotasks.length\n if (after === 0 || after === before) break\n turns += 1\n }\n\n return { turns, ran }\n }\n\n return {\n nowMs: safeNowMs,\n scheduleMicrotask: (cb) => {\n microtasks.push(cb)\n },\n scheduleMacrotask: (cb) => {\n const task = { canceled: false, cb }\n macrotasks.push(task)\n return () => {\n task.canceled = true\n }\n },\n scheduleAnimationFrame: (cb) => {\n const task = { canceled: false, cb }\n macrotasks.push(task)\n return () => {\n task.canceled = true\n }\n },\n scheduleTimeout: (_ms, cb) => {\n const task = { canceled: false, cb }\n macrotasks.push(task)\n return () => {\n task.canceled = true\n }\n },\n flushMicrotasks,\n flushOneMacrotask,\n flushAll,\n getQueueSize: () => ({ microtasks: microtasks.length, macrotasks: macrotasks.length }),\n }\n}\n","import type { StateCommitMeta, StateCommitPriority } from './module.js'\n\nexport type ModuleInstanceKey = `${string}::${string}`\nexport type TopicKey = string\n\nexport type TopicKind = 'module' | 'readQuery'\n\nexport type TopicInfo =\n | { readonly kind: 'module'; readonly moduleInstanceKey: ModuleInstanceKey }\n | { readonly kind: 'readQuery'; readonly moduleInstanceKey: ModuleInstanceKey; readonly selectorId: string }\n\nexport const makeModuleInstanceKey = (moduleId: string, instanceId: string): ModuleInstanceKey =>\n `${moduleId}::${instanceId}`\n\nexport const makeReadQueryTopicKey = (moduleInstanceKey: ModuleInstanceKey, selectorId: string): TopicKey =>\n `${moduleInstanceKey}::rq:${selectorId}`\n\nexport const parseTopicKey = (topicKey: string): TopicInfo | undefined => {\n const idx = topicKey.indexOf('::')\n if (idx <= 0) return undefined\n\n const moduleId = topicKey.slice(0, idx)\n const rest = topicKey.slice(idx + 2)\n if (rest.length === 0) return undefined\n\n const idx2 = rest.indexOf('::')\n if (idx2 < 0) {\n return { kind: 'module', moduleInstanceKey: `${moduleId}::${rest}` }\n }\n\n const instanceId = rest.slice(0, idx2)\n const suffix = rest.slice(idx2 + 2)\n if (suffix.startsWith('rq:')) {\n const selectorId = suffix.slice('rq:'.length)\n if (selectorId.length === 0) return undefined\n return {\n kind: 'readQuery',\n moduleInstanceKey: `${moduleId}::${instanceId}`,\n selectorId,\n }\n }\n\n return { kind: 'module', moduleInstanceKey: `${moduleId}::${instanceId}` }\n}\n\nexport interface RuntimeStoreModuleCommit {\n readonly moduleId: string\n readonly instanceId: string\n readonly moduleInstanceKey: ModuleInstanceKey\n readonly state: unknown\n readonly meta: StateCommitMeta\n readonly opSeq?: number\n readonly schedulingPolicy?: {\n readonly configScope: 'builtin' | 'runtime_default' | 'runtime_module' | 'provider'\n readonly concurrencyLimit: number | 'unbounded'\n readonly allowUnbounded: boolean\n readonly losslessBackpressureCapacity: number\n readonly pressureWarningThreshold: {\n readonly backlogCount: number\n readonly backlogDurationMs: number\n }\n readonly warningCooldownMs: number\n readonly resolvedAtTxnSeq: number\n }\n}\n\nexport interface RuntimeStorePendingDrain {\n readonly modules: ReadonlyMap<ModuleInstanceKey, RuntimeStoreModuleCommit>\n readonly dirtyTopics: ReadonlyMap<TopicKey, StateCommitPriority>\n}\n\nexport interface RuntimeStoreCommitResult {\n readonly changedTopicListeners: ReadonlyArray<() => void>\n}\n\nexport type RuntimeStoreListenerCallback = (listener: () => void) => void\n\ninterface TopicListenersState {\n readonly listeners: Set<() => void>\n snapshot: ReadonlyArray<() => void>\n}\n\nconst EMPTY_LISTENER_SNAPSHOT: ReadonlyArray<() => void> = []\n\nexport interface RuntimeStore {\n // ---- React-facing sync snapshot APIs ----\n readonly getTickSeq: () => number\n readonly getModuleState: (moduleInstanceKey: ModuleInstanceKey) => unknown\n readonly getTopicVersion: (topicKey: TopicKey) => number\n readonly getTopicPriority: (topicKey: TopicKey) => StateCommitPriority\n readonly subscribeTopic: (topicKey: TopicKey, listener: () => void) => () => void\n readonly getTopicSubscriberCount: (topicKey: TopicKey) => number\n readonly getModuleSubscriberCount: (moduleInstanceKey: ModuleInstanceKey) => number\n\n // ---- Runtime integration ----\n readonly registerModuleInstance: (args: {\n readonly moduleId: string\n readonly instanceId: string\n readonly moduleInstanceKey: ModuleInstanceKey\n readonly initialState: unknown\n }) => void\n readonly unregisterModuleInstance: (moduleInstanceKey: ModuleInstanceKey) => void\n\n // ---- TickScheduler integration (internal) ----\n readonly commitTick: (args: {\n readonly tickSeq: number\n readonly accepted: RuntimeStorePendingDrain\n readonly onListener?: RuntimeStoreListenerCallback\n }) => RuntimeStoreCommitResult\n\n readonly dispose: () => void\n}\n\nconst NO_CHANGED_TOPIC_LISTENERS: ReadonlyArray<() => void> = []\n\nexport const makeRuntimeStore = (): RuntimeStore => {\n let tickSeq = 0\n\n // ---- Committed snapshot (read by React) ----\n const moduleStates = new Map<ModuleInstanceKey, unknown>()\n const topicVersions = new Map<TopicKey, number>()\n const topicPriorities = new Map<TopicKey, StateCommitPriority>()\n\n // ---- Subscriptions ----\n const listenersByTopic = new Map<TopicKey, TopicListenersState>()\n const subscriberCountByModule = new Map<ModuleInstanceKey, number>()\n\n const getTopicVersion = (topicKey: TopicKey): number => topicVersions.get(topicKey) ?? 0\n const getTopicPriority = (topicKey: TopicKey): StateCommitPriority => topicPriorities.get(topicKey) ?? 'normal'\n\n const commitTopicBump = (topicKey: TopicKey, priority: StateCommitPriority): void => {\n const prev = topicVersions.get(topicKey) ?? 0\n topicVersions.set(topicKey, prev + 1)\n topicPriorities.set(topicKey, priority)\n }\n\n const refreshTopicSnapshot = (state: TopicListenersState): void => {\n state.snapshot = Array.from(state.listeners)\n }\n\n const subscribeTopic = (topicKey: TopicKey, listener: () => void): (() => void) => {\n const info = parseTopicKey(topicKey)\n const existing = listenersByTopic.get(topicKey)\n const state = existing ?? { listeners: new Set<() => void>(), snapshot: EMPTY_LISTENER_SNAPSHOT }\n const alreadyHas = state.listeners.has(listener)\n if (!alreadyHas) {\n state.listeners.add(listener)\n refreshTopicSnapshot(state)\n }\n if (!existing) {\n listenersByTopic.set(topicKey, state)\n }\n\n if (!alreadyHas && info) {\n const prev = subscriberCountByModule.get(info.moduleInstanceKey) ?? 0\n subscriberCountByModule.set(info.moduleInstanceKey, prev + 1)\n }\n\n return () => {\n const currentState = listenersByTopic.get(topicKey)\n if (!currentState) return\n const deleted = currentState.listeners.delete(listener)\n if (deleted && info) {\n const prev = subscriberCountByModule.get(info.moduleInstanceKey) ?? 0\n const next = prev - 1\n if (next <= 0) {\n subscriberCountByModule.delete(info.moduleInstanceKey)\n } else {\n subscriberCountByModule.set(info.moduleInstanceKey, next)\n }\n }\n if (currentState.listeners.size === 0) {\n listenersByTopic.delete(topicKey)\n } else if (deleted) {\n refreshTopicSnapshot(currentState)\n }\n }\n }\n\n const getTopicSubscriberCount = (topicKey: TopicKey): number => listenersByTopic.get(topicKey)?.listeners.size ?? 0\n const getModuleSubscriberCount = (moduleInstanceKey: ModuleInstanceKey): number => subscriberCountByModule.get(moduleInstanceKey) ?? 0\n\n const registerModuleInstance = (args: {\n readonly moduleId: string\n readonly instanceId: string\n readonly moduleInstanceKey: ModuleInstanceKey\n readonly initialState: unknown\n }): void => {\n moduleStates.set(args.moduleInstanceKey, args.initialState)\n // Ensure the module topic exists with a stable baseline version/priority.\n if (!topicVersions.has(args.moduleInstanceKey)) {\n topicVersions.set(args.moduleInstanceKey, 0)\n topicPriorities.set(args.moduleInstanceKey, 'normal')\n }\n }\n\n const unregisterModuleInstance = (moduleInstanceKey: ModuleInstanceKey): void => {\n moduleStates.delete(moduleInstanceKey)\n // Keep topic versions by default (helps debugging). Subscribers are expected to detach on module destroy.\n }\n\n const commitTick = (args: {\n readonly tickSeq: number\n readonly accepted: RuntimeStorePendingDrain\n readonly onListener?: RuntimeStoreListenerCallback\n }): RuntimeStoreCommitResult => {\n tickSeq = args.tickSeq\n\n for (const [key, commit] of args.accepted.modules) {\n moduleStates.set(key, commit.state)\n }\n\n if (args.accepted.dirtyTopics.size === 0) {\n return {\n changedTopicListeners: NO_CHANGED_TOPIC_LISTENERS,\n }\n }\n\n if (args.onListener) {\n let firstTopicListeners: ReadonlyArray<() => void> | undefined\n let secondTopicListeners: ReadonlyArray<() => void> | undefined\n let restTopicListeners: Array<ReadonlyArray<() => void>> | undefined\n\n for (const [topicKey, priority] of args.accepted.dirtyTopics) {\n commitTopicBump(topicKey, priority)\n const listeners = listenersByTopic.get(topicKey)?.snapshot ?? EMPTY_LISTENER_SNAPSHOT\n if (listeners.length === 0) {\n continue\n }\n if (!firstTopicListeners) {\n firstTopicListeners = listeners\n continue\n }\n if (!secondTopicListeners) {\n secondTopicListeners = listeners\n continue\n }\n if (!restTopicListeners) {\n restTopicListeners = []\n }\n restTopicListeners.push(listeners)\n }\n\n if (firstTopicListeners) {\n for (const listener of firstTopicListeners) {\n try {\n args.onListener(listener)\n } catch {\n // best-effort: never let listener callback break commit tick\n }\n }\n }\n\n if (secondTopicListeners) {\n for (const listener of secondTopicListeners) {\n try {\n args.onListener(listener)\n } catch {\n // best-effort: never let listener callback break commit tick\n }\n }\n }\n\n if (restTopicListeners) {\n for (const listeners of restTopicListeners) {\n for (const listener of listeners) {\n try {\n args.onListener(listener)\n } catch {\n // best-effort: never let listener callback break commit tick\n }\n }\n }\n }\n\n return {\n changedTopicListeners: NO_CHANGED_TOPIC_LISTENERS,\n }\n }\n\n let singleTopicListeners: ReadonlyArray<() => void> | undefined\n let flattenedTopicListeners: Array<() => void> | undefined\n\n for (const [topicKey, priority] of args.accepted.dirtyTopics) {\n commitTopicBump(topicKey, priority)\n const listeners = listenersByTopic.get(topicKey)?.snapshot ?? EMPTY_LISTENER_SNAPSHOT\n if (listeners.length === 0) {\n continue\n }\n if (flattenedTopicListeners) {\n for (const listener of listeners) {\n flattenedTopicListeners.push(listener)\n }\n continue\n }\n if (!singleTopicListeners) {\n singleTopicListeners = listeners\n continue\n }\n flattenedTopicListeners = Array.from(singleTopicListeners)\n for (const listener of listeners) {\n flattenedTopicListeners.push(listener)\n }\n }\n\n return {\n changedTopicListeners: flattenedTopicListeners ?? singleTopicListeners ?? NO_CHANGED_TOPIC_LISTENERS,\n }\n }\n\n const getModuleState = (moduleInstanceKey: ModuleInstanceKey): unknown => moduleStates.get(moduleInstanceKey)\n\n const dispose = (): void => {\n moduleStates.clear()\n topicVersions.clear()\n topicPriorities.clear()\n listenersByTopic.clear()\n subscriberCountByModule.clear()\n }\n\n return {\n getTickSeq: () => tickSeq,\n getModuleState,\n getTopicVersion,\n getTopicPriority,\n subscribeTopic,\n getTopicSubscriberCount,\n getModuleSubscriberCount,\n registerModuleInstance,\n unregisterModuleInstance,\n commitTick,\n dispose,\n }\n}\n","import { Effect } from 'effect'\nimport * as Debug from './DebugSink.js'\nimport type { DeclarativeLinkRuntime } from './DeclarativeLinkRuntime.js'\nimport type { HostScheduler } from './HostScheduler.js'\nimport { makeJobQueue, type JobQueue } from './JobQueue.js'\nimport * as TaskRunner from './TaskRunner.js'\nimport {\n makeReadQueryTopicKey,\n type ModuleInstanceKey,\n type RuntimeStore,\n type RuntimeStoreModuleCommit,\n type RuntimeStorePendingDrain,\n} from './RuntimeStore.js'\nimport type { StateCommitPriority } from './module.js'\n\nexport type TickLane = 'urgent' | 'nonUrgent'\n\nexport type TickDegradeReason = 'budget_steps' | 'cycle_detected' | 'unknown'\n\nexport interface TickSchedulerConfig {\n /**\n * Fixpoint step cap:\n * - Steps count \"work acceptance units\" within a single tick, not time.\n * - Exceeding the budget triggers a soft degrade (stable=false), deferring nonUrgent backlog to the next tick.\n */\n readonly maxSteps?: number\n /**\n * Urgent safety cap:\n * - Even urgent work may be cut when the system appears to be in a cycle (avoid freezing).\n */\n readonly urgentStepCap?: number\n /**\n * Drain-round cap:\n * - Bounds the number of drain rounds while capturing concurrent commits before committing the tick snapshot.\n * - Exceeding the cap is treated as a cycle (stable=false, degradeReason=cycle_detected).\n */\n readonly maxDrainRounds?: number\n /**\n * Microtask starvation protection threshold:\n * - Counts consecutive ticks scheduled on microtask boundaries without yielding to host (best-effort).\n * - Exceeding the limit forces the next tick to start on a macrotask boundary.\n */\n readonly microtaskChainDepthLimit?: number\n /**\n * Optional degraded-tick telemetry (opt-in, sampled):\n * - Runs even when diagnostics=off (Devtools disabled).\n * - Intended for production health signals (frequency of stable=false / forced yield).\n */\n readonly telemetry?: TickSchedulerTelemetryConfig\n}\n\nexport interface TickSchedulerTelemetryEvent {\n readonly tickSeq: number\n readonly stable: boolean\n readonly degradeReason?: TickDegradeReason\n readonly forcedMacrotask?: boolean\n readonly scheduleReason?: TickScheduleReason\n readonly microtaskChainDepth?: number\n readonly deferredWorkCount?: number\n}\n\nexport interface TickSchedulerTelemetryConfig {\n /** Sample rate in [0, 1]. Default: 0 (disabled). */\n readonly sampleRate?: number\n /** Called for ticks that are degraded (stable=false) and/or started on a forced macrotask boundary. */\n readonly onTickDegraded?: (event: TickSchedulerTelemetryEvent) => void\n}\n\nexport interface TickScheduler {\n readonly getTickSeq: () => number\n readonly onModuleCommit: (commit: RuntimeStoreModuleCommit) => Effect.Effect<void, never, never>\n readonly onSelectorChanged: (args: {\n readonly moduleInstanceKey: ModuleInstanceKey\n readonly selectorId: string\n readonly priority: StateCommitPriority\n }) => void\n readonly flushNow: Effect.Effect<void, never, never>\n}\n\n// ---- Runtime.batch (sync boundary) ----\n\ntype BatchWaiter = { readonly resolve: () => void }\n\nlet batchDepth = 0\nconst batchWaiters = new Set<BatchWaiter>()\n\nexport const enterRuntimeBatch = (): void => {\n batchDepth += 1\n}\n\nexport const exitRuntimeBatch = (): void => {\n batchDepth = Math.max(0, batchDepth - 1)\n if (batchDepth !== 0) return\n const waiters = Array.from(batchWaiters)\n batchWaiters.clear()\n for (const w of waiters) {\n try {\n w.resolve()\n } catch {\n // best-effort\n }\n }\n}\n\nconst waitForBatchEndIfNeeded = (): Effect.Effect<void, never, never> =>\n batchDepth === 0\n ? Effect.void\n : Effect.promise<void>((signal) =>\n new Promise<void>((resolve) => {\n\n let done = false\n const cleanup = () => {\n if (done) return\n done = true\n batchWaiters.delete(waiter)\n try {\n signal.removeEventListener('abort', onAbort)\n } catch {\n // best-effort\n }\n }\n\n const onAbort = () => {\n cleanup()\n }\n\n const waiter: BatchWaiter = {\n resolve: () => {\n cleanup()\n resolve()\n },\n }\n\n batchWaiters.add(waiter)\n try {\n signal.addEventListener('abort', onAbort, { once: true })\n } catch {\n // best-effort\n }\n }),\n )\n\n// ---- TickScheduler implementation ----\n\ntype TriggerKind = 'externalStore' | 'dispatch' | 'timer' | 'unknown'\n\ntype TickScheduleStartedAs = 'microtask' | 'macrotask' | 'batch' | 'unknown'\ntype TickScheduleReason = 'budget' | 'cycle_detected' | 'microtask_starvation' | 'unknown'\n\ntype TickSchedule = {\n readonly startedAs?: TickScheduleStartedAs\n readonly microtaskChainDepth?: number\n readonly forcedMacrotask?: boolean\n readonly reason?: TickScheduleReason\n}\n\ntype SchedulingDegradeState = {\n readonly tickSeq: number\n readonly reason: TickDegradeReason\n readonly moduleId: string\n readonly instanceId: string\n readonly txnSeq: number\n readonly txnId: string\n readonly opSeq: number\n readonly configScope: 'builtin' | 'runtime_default' | 'runtime_module' | 'provider'\n readonly limit: number | 'unbounded'\n readonly backlogCount: number\n}\n\ntype SchedulingAnchor = {\n readonly moduleId: string\n readonly instanceId: string\n readonly txnSeq: number\n readonly txnId: string\n readonly opSeq: number\n}\n\nconst toSchedulingAnchor = (commit: RuntimeStoreModuleCommit | undefined): SchedulingAnchor | undefined => {\n if (!commit) return undefined\n if (typeof commit.opSeq !== 'number') return undefined\n return {\n moduleId: commit.moduleId,\n instanceId: commit.instanceId,\n txnSeq: commit.meta.txnSeq,\n txnId: commit.meta.txnId,\n opSeq: commit.opSeq,\n }\n}\n\nconst toSchedulingResolvedTxnSeq = (commit: RuntimeStoreModuleCommit): number =>\n commit.schedulingPolicy?.resolvedAtTxnSeq ?? commit.meta.txnSeq\n\nconst toSchedulingResolvedOpSeq = (commit: RuntimeStoreModuleCommit): number =>\n typeof commit.opSeq === 'number' && Number.isFinite(commit.opSeq) ? commit.opSeq : -1\n\nconst pickNewerSchedulingCommit = (\n current: RuntimeStoreModuleCommit | undefined,\n candidate: RuntimeStoreModuleCommit,\n): RuntimeStoreModuleCommit => {\n if (!current) return candidate\n const currentTxnSeq = toSchedulingResolvedTxnSeq(current)\n const candidateTxnSeq = toSchedulingResolvedTxnSeq(candidate)\n if (candidateTxnSeq > currentTxnSeq) return candidate\n if (candidateTxnSeq < currentTxnSeq) return current\n return toSchedulingResolvedOpSeq(candidate) > toSchedulingResolvedOpSeq(current) ? candidate : current\n}\n\nconst clampSampleRate = (sampleRate: number | undefined): number => {\n if (typeof sampleRate !== 'number' || !Number.isFinite(sampleRate)) return 0\n if (sampleRate <= 0) return 0\n if (sampleRate >= 1) return 1\n return sampleRate\n}\n\nconst shouldSampleTick = (tickSeq: number, sampleRate: number): boolean => {\n if (sampleRate <= 0) return false\n if (sampleRate >= 1) return true\n // Deterministic sampling: stable across runs, avoids Math.random() and keeps overhead minimal.\n const x = tickSeq >>> 0\n const h = Math.imul(x ^ 0x9e3779b9, 0x85ebca6b) >>> 0\n return h / 0xffffffff < sampleRate\n}\n\nconst topicKeyResolutionCacheLimit = 1024\n\nconst toTriggerKind = (originKind: string | undefined): TriggerKind => {\n if (originKind === 'action') return 'dispatch'\n if (originKind === 'trait-external-store') return 'externalStore'\n if (originKind?.includes('timer')) return 'timer'\n return 'unknown'\n}\n\nconst toLane = (priority: StateCommitPriority): TickLane => (priority === 'low' ? 'nonUrgent' : 'urgent')\n\nconst maxPriority = (a: StateCommitPriority, b: StateCommitPriority): StateCommitPriority =>\n a === 'normal' || b === 'normal' ? 'normal' : 'low'\n\ntype MutablePendingDrain = {\n readonly modules: Map<ModuleInstanceKey, RuntimeStoreModuleCommit>\n readonly dirtyTopics: Map<string, StateCommitPriority>\n}\n\nconst mergeDrainInPlace = (base: MutablePendingDrain, next: RuntimeStorePendingDrain): void => {\n for (const [k, commit] of next.modules) {\n const prev = base.modules.get(k)\n if (!prev) {\n base.modules.set(k, commit)\n } else {\n const mergedPriority = maxPriority(prev.meta.priority, commit.meta.priority)\n if (mergedPriority === commit.meta.priority) {\n base.modules.set(k, commit)\n } else {\n base.modules.set(k, {\n ...commit,\n meta: {\n ...commit.meta,\n priority: mergedPriority,\n },\n })\n }\n }\n }\n\n for (const [k, p] of next.dirtyTopics) {\n const prev = base.dirtyTopics.get(k)\n if (!prev) {\n base.dirtyTopics.set(k, p)\n continue\n }\n const mergedPriority = maxPriority(prev, p)\n if (mergedPriority !== prev) {\n base.dirtyTopics.set(k, mergedPriority)\n }\n }\n}\n\nconst emptyDrain = (): MutablePendingDrain => ({ modules: new Map(), dirtyTopics: new Map() })\n\ntype BudgetPartitionResult = {\n readonly acceptedModules: Map<ModuleInstanceKey, RuntimeStoreModuleCommit>\n readonly deferredModules: Map<ModuleInstanceKey, RuntimeStoreModuleCommit>\n readonly urgentCapExceeded: boolean\n readonly deferredNonUrgentCount: number\n}\n\nconst partitionModulesForBudget = (args: {\n readonly modules: ReadonlyMap<ModuleInstanceKey, RuntimeStoreModuleCommit>\n readonly maxSteps: number\n readonly urgentStepCap: number\n}): BudgetPartitionResult => {\n let urgentCount = 0\n for (const commit of args.modules.values()) {\n if (toLane(commit.meta.priority) === 'urgent') {\n urgentCount += 1\n }\n }\n\n const urgentCap = Math.max(0, args.urgentStepCap)\n const urgentCapExceeded = urgentCount > urgentCap\n const nonUrgentBudget = Math.max(0, args.maxSteps)\n\n let acceptedUrgentCount = 0\n let deferredNonUrgentCount = 0\n\n const acceptedModules = new Map<ModuleInstanceKey, RuntimeStoreModuleCommit>()\n const deferredModules = new Map<ModuleInstanceKey, RuntimeStoreModuleCommit>()\n\n for (const commit of args.modules.values()) {\n if (toLane(commit.meta.priority) !== 'urgent') continue\n if (urgentCapExceeded && acceptedUrgentCount >= urgentCap) {\n deferredModules.set(commit.moduleInstanceKey, commit)\n continue\n }\n acceptedModules.set(commit.moduleInstanceKey, commit)\n acceptedUrgentCount += 1\n }\n\n if (urgentCapExceeded) {\n for (const commit of args.modules.values()) {\n if (toLane(commit.meta.priority) === 'urgent') continue\n deferredModules.set(commit.moduleInstanceKey, commit)\n deferredNonUrgentCount += 1\n }\n return {\n acceptedModules,\n deferredModules,\n urgentCapExceeded,\n deferredNonUrgentCount,\n }\n }\n\n let acceptedNonUrgentCount = 0\n for (const commit of args.modules.values()) {\n if (toLane(commit.meta.priority) === 'urgent') continue\n if (acceptedNonUrgentCount >= nonUrgentBudget) {\n deferredModules.set(commit.moduleInstanceKey, commit)\n deferredNonUrgentCount += 1\n continue\n }\n acceptedModules.set(commit.moduleInstanceKey, commit)\n acceptedNonUrgentCount += 1\n }\n\n return {\n acceptedModules,\n deferredModules,\n urgentCapExceeded,\n deferredNonUrgentCount,\n }\n}\n\nexport const makeTickScheduler = (args: {\n readonly runtimeStore: RuntimeStore\n readonly queue?: JobQueue\n readonly hostScheduler: HostScheduler\n readonly config?: TickSchedulerConfig\n readonly declarativeLinkRuntime?: DeclarativeLinkRuntime\n}): TickScheduler => {\n const store = args.runtimeStore\n const hostScheduler = args.hostScheduler\n const declarativeLinks = args.declarativeLinkRuntime\n const queue = args.queue ?? makeJobQueue()\n\n const config: Required<Pick<TickSchedulerConfig, 'maxSteps' | 'urgentStepCap' | 'maxDrainRounds' | 'microtaskChainDepthLimit'>> = {\n maxSteps: args.config?.maxSteps ?? 64,\n urgentStepCap: args.config?.urgentStepCap ?? 512,\n maxDrainRounds: args.config?.maxDrainRounds ?? 8,\n microtaskChainDepthLimit: args.config?.microtaskChainDepthLimit ?? 32,\n }\n const telemetry = args.config?.telemetry\n const telemetrySampleRate = clampSampleRate(telemetry?.sampleRate)\n\n let tickSeq = 0\n let scheduled = false\n let microtaskChainDepth = 0\n let nextForcedReason: TickScheduleReason | undefined\n let lastSchedulingDegrade: SchedulingDegradeState | undefined\n\n let coalescedModules = 0\n let coalescedTopics = 0\n const topicKeyToModuleInstanceKeyCache = new Map<string, ModuleInstanceKey | null>()\n\n const rememberTopicKeyResolution = (topicKey: string, moduleInstanceKey: ModuleInstanceKey | undefined): ModuleInstanceKey | undefined => {\n if (topicKeyToModuleInstanceKeyCache.has(topicKey)) {\n topicKeyToModuleInstanceKeyCache.delete(topicKey)\n } else if (topicKeyToModuleInstanceKeyCache.size >= topicKeyResolutionCacheLimit) {\n const oldestKey = topicKeyToModuleInstanceKeyCache.keys().next().value\n if (oldestKey !== undefined) {\n topicKeyToModuleInstanceKeyCache.delete(oldestKey)\n }\n }\n topicKeyToModuleInstanceKeyCache.set(topicKey, moduleInstanceKey ?? null)\n return moduleInstanceKey\n }\n\n const yieldMicrotask = Effect.promise<void>(() =>\n new Promise<void>((resolve) => {\n hostScheduler.scheduleMicrotask(resolve)\n }),\n )\n const yieldMacrotask = Effect.promise<void>((signal) =>\n new Promise<void>((resolve) => {\n const cancel = hostScheduler.scheduleMacrotask(resolve)\n try {\n signal.addEventListener(\n 'abort',\n () => {\n cancel()\n },\n { once: true },\n )\n } catch {\n // best-effort\n }\n }),\n )\n\n const scheduleTick = (): Effect.Effect<void, never, never> =>\n Effect.gen(function* () {\n if (scheduled) return\n scheduled = true\n\n const waitedForBatch = batchDepth > 0\n\n const forcedReason = nextForcedReason\n nextForcedReason = undefined\n\n const shouldYieldForStarvation =\n forcedReason == null && microtaskChainDepth >= Math.max(1, config.microtaskChainDepthLimit)\n\n const reason: TickScheduleReason | undefined = forcedReason ?? (shouldYieldForStarvation ? 'microtask_starvation' : undefined)\n const boundary: 'microtask' | 'macrotask' = reason ? 'macrotask' : 'microtask'\n const startedAs: TickScheduleStartedAs = waitedForBatch ? 'batch' : boundary\n const depthAtSchedule = microtaskChainDepth\n\n yield* Effect.provideService(Effect.gen(function* () {\n try {\n yield* waitForBatchEndIfNeeded()\n if (boundary === 'microtask') {\n // Always yield at least one microtask tick boundary before flushing:\n // - Keeps tick→notify semantics stable (async flush window) even under Runtime.batch.\n // - Avoids \"denominatorZero\" artifacts in perf budgets when dispatch is synchronous (mr.actions.*).\n if (waitedForBatch) {\n microtaskChainDepth = 0\n }\n yield* yieldMicrotask\n if (!waitedForBatch) {\n microtaskChainDepth += 1\n }\n } else {\n yield* yieldMacrotask\n microtaskChainDepth = 0\n }\n \n const schedule: TickSchedule = {\n startedAs,\n microtaskChainDepth: boundary === 'macrotask' ? depthAtSchedule : microtaskChainDepth,\n ...(boundary === 'macrotask' ? { forcedMacrotask: true, reason: reason ?? 'unknown' } : {}),\n }\n \n const outcome = yield* flushTick(schedule)\n if (!outcome.stable) {\n nextForcedReason =\n outcome.degradeReason === 'budget_steps'\n ? 'budget'\n : outcome.degradeReason === 'cycle_detected'\n ? 'cycle_detected'\n : 'unknown'\n }\n } finally {\n scheduled = false\n // If something was re-queued or arrived after commit, schedule the next tick (best-effort).\n if (queue.hasPending()) {\n yield* scheduleTick()\n } else {\n // Reset chain depth when the system becomes idle (avoid forcing a macrotask on the next unrelated tick).\n microtaskChainDepth = 0\n }\n }\n }), TaskRunner.inSyncTransactionFiber, false).pipe(Effect.forkDetach({ startImmediately: true }))\n })\n\n const flushTick = (schedule: TickSchedule): Effect.Effect<{ stable: boolean; degradeReason?: TickDegradeReason }, never, never> =>\n Effect.gen(function* () {\n if (!queue.hasPending()) {\n return { stable: true }\n }\n\n tickSeq += 1\n const currentTickSeq = tickSeq\n\n const diagnosticsLevel = yield* Effect.service(Debug.currentDiagnosticsLevel).pipe(Effect.orDie)\n const traceMode = yield* Effect.service(Debug.currentTraceMode).pipe(Effect.orDie)\n const shouldEmitTrace = traceMode === 'on' && diagnosticsLevel !== 'off'\n const shouldEmitSchedulingDiagnostics = diagnosticsLevel !== 'off'\n\n const captured: {\n drainRounds: number\n stable: boolean\n degradeReason?: TickDegradeReason\n deferred?: RuntimeStorePendingDrain\n accepted: MutablePendingDrain\n } = {\n drainRounds: 0,\n stable: true,\n accepted: emptyDrain(),\n }\n\n // Fixpoint capture: drain -> apply declarative links -> drain (bounded by maxDrainRounds).\n while (captured.drainRounds < config.maxDrainRounds) {\n const drained = queue.drain()\n if (!drained) break\n captured.drainRounds += 1\n mergeDrainInPlace(captured.accepted, drained)\n\n if (declarativeLinks && drained.modules.size > 0) {\n const changedModuleInstanceKeys = Array.from(drained.modules.keys())\n yield* declarativeLinks.applyForSources({\n tickSeq: currentTickSeq,\n acceptedModules: captured.accepted.modules,\n changedModuleInstanceKeys,\n })\n }\n }\n\n if (queue.hasPending()) {\n captured.stable = false\n captured.degradeReason = 'cycle_detected'\n }\n\n // Budget enforcement (defer nonUrgent only; urgent may be cut only in cycle safety-break).\n //\n // Perf: fast-path the common case where a tick is far under both budgets:\n // - Avoid allocating new Maps in partitionModulesForBudget.\n // - Avoid re-walking dirtyTopics to split accepted/deferred topics.\n let acceptedModules: Map<ModuleInstanceKey, RuntimeStoreModuleCommit> = captured.accepted.modules\n let deferredModules: Map<ModuleInstanceKey, RuntimeStoreModuleCommit> | undefined = undefined\n let urgentCapExceeded = false\n let deferredNonUrgentCount = 0\n\n if (!(captured.accepted.modules.size <= config.maxSteps && captured.accepted.modules.size <= config.urgentStepCap)) {\n const partitioned = partitionModulesForBudget({\n modules: captured.accepted.modules,\n maxSteps: config.maxSteps,\n urgentStepCap: config.urgentStepCap,\n })\n acceptedModules = partitioned.acceptedModules\n deferredModules = partitioned.deferredModules\n urgentCapExceeded = partitioned.urgentCapExceeded\n deferredNonUrgentCount = partitioned.deferredNonUrgentCount\n }\n\n if (urgentCapExceeded) {\n captured.stable = false\n captured.degradeReason = 'cycle_detected'\n } else if (deferredNonUrgentCount > 0) {\n captured.stable = false\n captured.degradeReason = captured.degradeReason ?? 'budget_steps'\n }\n\n const canAcceptAllTopics = deferredModules == null || deferredModules.size === 0\n\n const acceptedDrain: RuntimeStorePendingDrain = (() => {\n if (canAcceptAllTopics) {\n // Even when we accept all module topics, we must ignore non-parsable topic keys.\n // Otherwise, arbitrary strings would become \"real\" topics in RuntimeStore and create silent drift.\n if (captured.accepted.dirtyTopics.size === 0) {\n return captured.accepted as unknown as RuntimeStorePendingDrain\n }\n\n let hasNonParsable = false\n for (const topicKey of captured.accepted.dirtyTopics.keys()) {\n if (!storeTopicToModuleInstanceKey(topicKey)) {\n hasNonParsable = true\n break\n }\n }\n\n if (!hasNonParsable) {\n return captured.accepted as unknown as RuntimeStorePendingDrain\n }\n\n const acceptedTopics = new Map<string, StateCommitPriority>()\n for (const [topicKey, priority] of captured.accepted.dirtyTopics) {\n const moduleInstanceKey = storeTopicToModuleInstanceKey(topicKey)\n if (!moduleInstanceKey) continue\n acceptedTopics.set(topicKey, priority)\n }\n\n return {\n modules: acceptedModules,\n dirtyTopics: acceptedTopics,\n } satisfies RuntimeStorePendingDrain\n }\n\n const acceptedTopics = new Map<string, StateCommitPriority>()\n const deferredTopics = new Map<string, StateCommitPriority>()\n\n for (const [topicKey, priority] of captured.accepted.dirtyTopics) {\n const moduleInstanceKey = storeTopicToModuleInstanceKey(topicKey)\n if (!moduleInstanceKey) continue\n if (acceptedModules.has(moduleInstanceKey)) {\n acceptedTopics.set(topicKey, priority)\n } else if (deferredModules && deferredModules.has(moduleInstanceKey)) {\n deferredTopics.set(topicKey, priority)\n } else {\n // Conservative default: treat unknown topics as accepted.\n acceptedTopics.set(topicKey, priority)\n }\n }\n\n return {\n modules: acceptedModules,\n dirtyTopics: acceptedTopics,\n } satisfies RuntimeStorePendingDrain\n })()\n\n const deferredDrain: RuntimeStorePendingDrain | undefined =\n canAcceptAllTopics || !deferredModules\n ? undefined\n : deferredModules.size > 0\n ? {\n modules: deferredModules,\n dirtyTopics: (() => {\n const deferredTopics = new Map<string, StateCommitPriority>()\n for (const [topicKey, priority] of captured.accepted.dirtyTopics) {\n const moduleInstanceKey = storeTopicToModuleInstanceKey(topicKey)\n if (!moduleInstanceKey) continue\n if (deferredModules.has(moduleInstanceKey)) {\n deferredTopics.set(topicKey, priority)\n }\n }\n return deferredTopics\n })(),\n }\n : undefined\n\n captured.deferred = deferredDrain\n\n const anchorCommitForScheduling = (() => {\n let selected: RuntimeStoreModuleCommit | undefined\n for (const commit of acceptedModules.values()) {\n selected = pickNewerSchedulingCommit(selected, commit)\n }\n if (deferredDrain) {\n for (const commit of deferredDrain.modules.values()) {\n selected = pickNewerSchedulingCommit(selected, commit)\n }\n }\n return selected\n })()\n\n const schedulingAnchor = toSchedulingAnchor(anchorCommitForScheduling)\n const schedulingPolicy = anchorCommitForScheduling?.schedulingPolicy\n const schedulingConfigScope = schedulingPolicy?.configScope ?? 'builtin'\n const schedulingLimit = schedulingPolicy?.concurrencyLimit ?? 16\n const schedulingThreshold = schedulingPolicy?.pressureWarningThreshold ?? {\n backlogCount: 1000,\n backlogDurationMs: 5000,\n }\n const schedulingCooldownMs = schedulingPolicy?.warningCooldownMs ?? 30_000\n const backlogCount = deferredDrain ? deferredDrain.modules.size + deferredDrain.dirtyTopics.size : 0\n\n if (!captured.stable && shouldEmitSchedulingDiagnostics && schedulingAnchor && !lastSchedulingDegrade) {\n const reason = captured.degradeReason ?? 'unknown'\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: schedulingAnchor.moduleId,\n instanceId: schedulingAnchor.instanceId,\n txnSeq: schedulingAnchor.txnSeq,\n txnId: schedulingAnchor.txnId,\n opSeq: schedulingAnchor.opSeq,\n code: 'scheduling::degrade',\n severity: 'warning',\n message: 'Scheduling degraded: tick execution deferred part of the backlog.',\n hint:\n 'Inspect reason/backlog and align queue/tick/concurrency knobs through the same scheduling policy surface.',\n kind: 'scheduling:degrade',\n trigger: {\n kind: 'tickScheduler',\n name: 'flushTick',\n details: {\n eventKind: 'degrade',\n reason,\n tickSeq: currentTickSeq,\n backlogCount,\n configScope: schedulingConfigScope,\n limit: schedulingLimit,\n threshold: schedulingThreshold,\n cooldownMs: schedulingCooldownMs,\n schedule: {\n startedAs: schedule.startedAs ?? 'unknown',\n forcedMacrotask: schedule.forcedMacrotask === true,\n reason: schedule.reason ?? 'unknown',\n microtaskChainDepth: schedule.microtaskChainDepth ?? 0,\n },\n },\n },\n })\n\n lastSchedulingDegrade = {\n tickSeq: currentTickSeq,\n reason,\n moduleId: schedulingAnchor.moduleId,\n instanceId: schedulingAnchor.instanceId,\n txnSeq: schedulingAnchor.txnSeq,\n txnId: schedulingAnchor.txnId,\n opSeq: schedulingAnchor.opSeq,\n configScope: schedulingConfigScope,\n limit: schedulingLimit,\n backlogCount,\n }\n } else if (captured.stable && lastSchedulingDegrade) {\n const previous = lastSchedulingDegrade\n if (shouldEmitSchedulingDiagnostics) {\n const recoverAnchor = schedulingAnchor ?? previous\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: recoverAnchor.moduleId,\n instanceId: recoverAnchor.instanceId,\n txnSeq: recoverAnchor.txnSeq,\n txnId: recoverAnchor.txnId,\n opSeq: recoverAnchor.opSeq,\n code: 'scheduling::recover',\n severity: 'info',\n message: 'Scheduling recovered: backlog/degrade condition cleared.',\n hint: 'No immediate action needed unless degrade/recover oscillates frequently.',\n kind: 'scheduling:recover',\n trigger: {\n kind: 'tickScheduler',\n name: 'flushTick',\n details: {\n eventKind: 'recover',\n tickSeq: currentTickSeq,\n fromTickSeq: previous.tickSeq,\n fromReason: previous.reason,\n previousBacklogCount: previous.backlogCount,\n configScope: previous.configScope,\n limit: previous.limit,\n schedule: {\n startedAs: schedule.startedAs ?? 'unknown',\n forcedMacrotask: schedule.forcedMacrotask === true,\n reason: schedule.reason ?? 'unknown',\n microtaskChainDepth: schedule.microtaskChainDepth ?? 0,\n },\n },\n },\n })\n }\n lastSchedulingDegrade = undefined\n }\n\n let startedAtMs: number | undefined\n let triggerSummary: any | undefined\n let anchor: any | undefined\n let backlog: any | undefined\n let result: any | undefined\n\n if (shouldEmitTrace) {\n startedAtMs = Date.now()\n\n let triggerTotal = 0\n let triggerPrimary: any = undefined\n let triggerAnchor: RuntimeStoreModuleCommit | undefined\n const triggerKindsOrder: TriggerKind[] = []\n let externalStoreCount = 0\n let dispatchCount = 0\n let timerCount = 0\n let unknownCount = 0\n\n for (const commit of captured.accepted.modules.values()) {\n if (!triggerAnchor) {\n triggerAnchor = commit\n }\n triggerTotal += 1\n\n const kind = toTriggerKind(commit.meta.originKind)\n if (!triggerPrimary) {\n triggerPrimary = {\n kind,\n moduleId: commit.moduleId,\n instanceId: commit.instanceId,\n fieldPath: kind === 'externalStore' ? commit.meta.originName : undefined,\n actionTag: kind === 'dispatch' ? commit.meta.originName : undefined,\n }\n }\n\n switch (kind) {\n case 'externalStore': {\n if (externalStoreCount === 0) triggerKindsOrder.push(kind)\n externalStoreCount += 1\n break\n }\n case 'dispatch': {\n if (dispatchCount === 0) triggerKindsOrder.push(kind)\n dispatchCount += 1\n break\n }\n case 'timer': {\n if (timerCount === 0) triggerKindsOrder.push(kind)\n timerCount += 1\n break\n }\n default: {\n if (unknownCount === 0) triggerKindsOrder.push(kind)\n unknownCount += 1\n break\n }\n }\n }\n\n const kinds: Array<{ kind: TriggerKind; count: number }> = []\n for (const kind of triggerKindsOrder) {\n switch (kind) {\n case 'externalStore':\n kinds.push({ kind, count: externalStoreCount })\n break\n case 'dispatch':\n kinds.push({ kind, count: dispatchCount })\n break\n case 'timer':\n kinds.push({ kind, count: timerCount })\n break\n default:\n kinds.push({ kind, count: unknownCount })\n break\n }\n }\n\n triggerSummary = {\n total: triggerTotal,\n kinds,\n primary: triggerPrimary,\n coalescedCount: {\n modules: coalescedModules,\n topics: coalescedTopics,\n },\n }\n\n if (triggerAnchor) {\n anchor = {\n moduleId: triggerAnchor.moduleId,\n instanceId: triggerAnchor.instanceId,\n txnSeq: triggerAnchor.meta.txnSeq,\n txnId: triggerAnchor.meta.txnId,\n ...(typeof triggerAnchor.opSeq === 'number' ? { opSeq: triggerAnchor.opSeq } : null),\n }\n }\n\n const deferredWork = captured.deferred\n if (deferredWork) {\n const pendingDeferredWork = deferredWork.modules.size + deferredWork.dirtyTopics.size\n let pendingExternalInputs = 0\n let firstDeferred: RuntimeStoreModuleCommit | undefined\n let firstExternalStoreDeferred: RuntimeStoreModuleCommit | undefined\n\n for (const deferred of deferredWork.modules.values()) {\n if (!firstDeferred) {\n firstDeferred = deferred\n }\n const kind = toTriggerKind(deferred.meta.originKind)\n if (kind === 'externalStore') {\n pendingExternalInputs += 1\n if (!firstExternalStoreDeferred) {\n firstExternalStoreDeferred = deferred\n }\n }\n }\n\n const primaryDeferred = firstExternalStoreDeferred ?? firstDeferred\n let deferredPrimary: any = undefined\n if (primaryDeferred) {\n const kind = toTriggerKind(primaryDeferred.meta.originKind)\n const isExternalStore = kind === 'externalStore'\n deferredPrimary = {\n kind: isExternalStore ? ('externalStore' as const) : ('unknown' as const),\n moduleId: primaryDeferred.moduleId,\n instanceId: primaryDeferred.instanceId,\n fieldPath: isExternalStore ? primaryDeferred.meta.originName : undefined,\n storeId: undefined,\n }\n }\n\n backlog = {\n pendingExternalInputs,\n pendingDeferredWork,\n deferredPrimary,\n }\n }\n\n result = {\n stable: captured.stable,\n ...(captured.stable ? null : { degradeReason: captured.degradeReason ?? 'unknown' }),\n } as const\n }\n\n if (shouldEmitTrace && schedule.forcedMacrotask && schedule.reason === 'microtask_starvation') {\n yield* Debug.record({\n type: 'warn:microtask-starvation',\n moduleId: anchor?.moduleId,\n instanceId: anchor?.instanceId,\n tickSeq: currentTickSeq,\n microtaskChainDepth: schedule.microtaskChainDepth,\n })\n }\n\n if (shouldEmitTrace) {\n yield* Debug.record({\n type: 'trace:tick',\n moduleId: anchor?.moduleId,\n instanceId: anchor?.instanceId,\n data: {\n tickSeq: currentTickSeq,\n phase: 'start',\n timestampMs: startedAtMs!,\n schedule,\n triggerSummary,\n anchors: anchor,\n budget: {\n maxSteps: config.maxSteps,\n elapsedMs: 0,\n steps: 0,\n txnCount: acceptedModules.size,\n },\n },\n })\n }\n\n if (!captured.stable && shouldEmitTrace) {\n yield* Debug.record({\n type: 'trace:tick',\n moduleId: anchor?.moduleId,\n instanceId: anchor?.instanceId,\n data: {\n tickSeq: currentTickSeq,\n phase: 'budgetExceeded',\n timestampMs: Date.now(),\n schedule,\n triggerSummary,\n anchors: anchor,\n budget: {\n maxSteps: config.maxSteps,\n elapsedMs: Math.max(0, Date.now() - startedAtMs!),\n steps: config.maxSteps,\n txnCount: acceptedModules.size,\n },\n backlog,\n result,\n },\n })\n }\n\n // Requeue deferred backlog before committing the tick, so the next tick can pick it up.\n if (deferredDrain) {\n queue.requeue(deferredDrain)\n }\n\n store.commitTick({\n tickSeq: currentTickSeq,\n accepted: acceptedDrain,\n onListener: (listener) => listener(),\n })\n\n if (!captured.stable && shouldEmitTrace && backlog?.deferredPrimary) {\n const primary = backlog.deferredPrimary\n if (primary.kind === 'externalStore') {\n const moduleInstanceKey =\n primary.moduleId && primary.instanceId ? (`${primary.moduleId}::${primary.instanceId}` as ModuleInstanceKey) : undefined\n if (moduleInstanceKey && store.getModuleSubscriberCount(moduleInstanceKey) > 0) {\n yield* Debug.record({\n type: 'warn:priority-inversion',\n moduleId: primary.moduleId,\n instanceId: primary.instanceId,\n tickSeq: currentTickSeq,\n reason: 'deferredBacklog',\n })\n }\n }\n }\n\n if (shouldEmitTrace) {\n yield* Debug.record({\n type: 'trace:tick',\n moduleId: anchor?.moduleId,\n instanceId: anchor?.instanceId,\n data: {\n tickSeq: currentTickSeq,\n phase: 'settled',\n timestampMs: Date.now(),\n schedule,\n triggerSummary,\n anchors: anchor,\n budget: {\n maxSteps: config.maxSteps,\n elapsedMs: Math.max(0, Date.now() - startedAtMs!),\n steps: acceptedModules.size,\n txnCount: acceptedModules.size,\n },\n backlog,\n result,\n },\n })\n }\n\n if (telemetry?.onTickDegraded && (schedule.forcedMacrotask || !captured.stable) && shouldSampleTick(currentTickSeq, telemetrySampleRate)) {\n try {\n telemetry.onTickDegraded({\n tickSeq: currentTickSeq,\n stable: captured.stable,\n degradeReason: captured.stable ? undefined : (captured.degradeReason ?? 'unknown'),\n forcedMacrotask: schedule.forcedMacrotask,\n scheduleReason: schedule.reason,\n microtaskChainDepth: schedule.microtaskChainDepth,\n deferredWorkCount: deferredDrain ? deferredDrain.modules.size + deferredDrain.dirtyTopics.size : 0,\n })\n } catch {\n // best-effort: never let user telemetry break the tick\n }\n }\n coalescedModules = 0\n coalescedTopics = 0\n\n return { stable: captured.stable, degradeReason: captured.degradeReason }\n })\n\n const flushNow: TickScheduler['flushNow'] = Effect.gen(function* () {\n const beforeTickSeq = tickSeq\n yield* flushTick({ startedAs: 'unknown' })\n\n if (tickSeq > beforeTickSeq) {\n return\n }\n\n if (!queue.hasPending() && !scheduled) {\n return\n }\n\n yield* Effect.yieldNow\n if (tickSeq > beforeTickSeq) {\n return\n }\n\n if (queue.hasPending()) {\n yield* flushTick({ startedAs: 'unknown' })\n }\n }).pipe(Effect.asVoid)\n\n const storeTopicToModuleInstanceKey = (topicKey: string): ModuleInstanceKey | undefined => {\n const cached = topicKeyToModuleInstanceKeyCache.get(topicKey)\n if (cached !== undefined) {\n return cached === null ? undefined : cached\n }\n\n const idx = topicKey.indexOf('::rq:')\n if (idx > 0) {\n return rememberTopicKeyResolution(topicKey, topicKey.slice(0, idx) as ModuleInstanceKey)\n }\n if (topicKey.includes('::')) {\n return rememberTopicKeyResolution(topicKey, topicKey as ModuleInstanceKey)\n }\n return rememberTopicKeyResolution(topicKey, undefined)\n }\n\n const onSelectorChanged: TickScheduler['onSelectorChanged'] = ({ moduleInstanceKey, selectorId, priority }) => {\n const coalesced = queue.markTopicDirty(makeReadQueryTopicKey(moduleInstanceKey, selectorId), priority)\n if (coalesced) coalescedTopics += 1\n }\n\n const onModuleCommit: TickScheduler['onModuleCommit'] = (commit) =>\n Effect.gen(function* () {\n const coalescedCommit = queue.enqueueModuleCommit(commit)\n if (coalescedCommit) coalescedModules += 1\n const coalescedTopic = queue.markTopicDirty(commit.moduleInstanceKey, commit.meta.priority)\n if (coalescedTopic) coalescedTopics += 1\n yield* scheduleTick()\n })\n\n return {\n getTickSeq: () => tickSeq,\n onModuleCommit,\n onSelectorChanged,\n flushNow,\n }\n}\n","import type { StateCommitPriority } from './module.js'\nimport type { ModuleInstanceKey, RuntimeStoreModuleCommit, RuntimeStorePendingDrain, TopicKey } from './RuntimeStore.js'\n\nexport interface JobQueue {\n readonly hasPending: () => boolean\n /** Returns true when the operation coalesced with an existing pending entry. */\n readonly enqueueModuleCommit: (commit: RuntimeStoreModuleCommit) => boolean\n /** Returns true when the operation coalesced with an existing pending entry. */\n readonly markTopicDirty: (topicKey: TopicKey, priority: StateCommitPriority) => boolean\n readonly drain: () => RuntimeStorePendingDrain | undefined\n readonly requeue: (drain: RuntimeStorePendingDrain) => void\n}\n\nconst maxPriority = (a: StateCommitPriority, b: StateCommitPriority): StateCommitPriority =>\n a === 'normal' || b === 'normal' ? 'normal' : 'low'\n\nexport const makeJobQueue = (): JobQueue => {\n let pendingModules = new Map<ModuleInstanceKey, RuntimeStoreModuleCommit>()\n let pendingDirtyTopics = new Map<TopicKey, StateCommitPriority>()\n\n const hasPending = (): boolean => pendingModules.size > 0 || pendingDirtyTopics.size > 0\n\n const enqueueModuleCommit = (commit: RuntimeStoreModuleCommit): boolean => {\n const prev = pendingModules.get(commit.moduleInstanceKey)\n if (!prev) {\n pendingModules.set(commit.moduleInstanceKey, commit)\n return false\n }\n\n pendingModules.set(commit.moduleInstanceKey, {\n ...commit,\n meta: {\n ...commit.meta,\n priority: maxPriority(prev.meta.priority, commit.meta.priority),\n },\n })\n return true\n }\n\n const markTopicDirty = (topicKey: TopicKey, priority: StateCommitPriority): boolean => {\n const prev = pendingDirtyTopics.get(topicKey)\n pendingDirtyTopics.set(topicKey, prev ? maxPriority(prev, priority) : priority)\n return prev != null\n }\n\n const drain = (): RuntimeStorePendingDrain | undefined => {\n if (!hasPending()) return undefined\n const drained: RuntimeStorePendingDrain = {\n modules: pendingModules,\n dirtyTopics: pendingDirtyTopics,\n }\n pendingModules = new Map()\n pendingDirtyTopics = new Map()\n return drained\n }\n\n const requeue = (drain: RuntimeStorePendingDrain): void => {\n for (const [, commit] of drain.modules) {\n enqueueModuleCommit(commit)\n }\n for (const [k, p] of drain.dirtyTopics) {\n markTopicDirty(k, p)\n }\n }\n\n return {\n hasPending,\n enqueueModuleCommit,\n markTopicDirty,\n drain,\n requeue,\n }\n}\n\n","import { Cause, Effect, ServiceMap, Stream } from 'effect'\nimport * as Debug from './DebugSink.js'\nimport { isDevEnv } from './env.js'\nimport type * as Logic from './LogicMiddleware.js'\nimport type { AnyModuleShape, LogicEffect } from './module.js'\nimport type { RuntimeInternalsResolvedConcurrencyPolicy } from './RuntimeInternals.js'\nimport type { StateTxnOrigin } from './StateTransaction.js'\nimport * as ModeRunner from './ModeRunner.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 = ServiceMap.Reference<boolean>('@logixjs/core/TaskRunner.inSyncTransactionFiber', {\n defaultValue: () => false,\n})\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 = ServiceMap.Reference<boolean>('@logixjs/core/TaskRunner.forceSourceRefresh', {\n defaultValue: () => false,\n})\n\nlet inSyncTransactionShadowDepth = 0\n\nexport const enterSyncTransactionShadow = (): void => {\n inSyncTransactionShadowDepth += 1\n}\n\nexport const exitSyncTransactionShadow = (): void => {\n inSyncTransactionShadowDepth = Math.max(0, inSyncTransactionShadowDepth - 1)\n}\n\nexport const isInSyncTransactionShadow = (): boolean => inSyncTransactionShadowDepth > 0\n\nexport const enterSyncTransaction = (): void => {\n enterSyncTransactionShadow()\n}\n\nexport const exitSyncTransaction = (): void => {\n exitSyncTransactionShadow()\n}\n\nexport const isInSyncTransaction = (): boolean => isInSyncTransactionShadow()\n\nexport type TaskRunnerMode = ModeRunner.ModeRunnerMode\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 | LogicEffect<Sh, R, void, never>\n | ((payload: Payload) => LogicEffect<Sh, R, void, never>)\n\ntype TaskEffect<Payload, Sh extends AnyModuleShape, R, A, E> =\n | LogicEffect<Sh, R, A, E>\n | ((payload: Payload) => LogicEffect<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) => LogicEffect<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) => LogicEffect<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* Effect.service(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.hasInterruptsOnly(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.catchCause((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.flatMap(() => Effect.logError('TaskRunner error', cause)))),\n ) as Effect.Effect<void, never, Logic.Env<Sh, R>>\n\n/**\n * runTask:\n * - Uses shared ModeRunner semantics (task/parallel/latest/exhaust).\n * - Splits a single trigger into: pending (separate txn) → IO → success/failure (separate txn).\n */\nexport interface RunTaskConfig<Payload, Sh extends AnyModuleShape, R, A = void, E = never> {\n readonly stream: Stream.Stream<Payload>\n readonly mode?: TaskRunnerMode\n runtime: TaskRunnerRuntime,\n config: TaskRunnerConfig<Payload, Sh, R, A, E>\n}\n\nexport const runTask = <Payload, Sh extends AnyModuleShape, R, A = void, E = never>(\n args: RunTaskConfig<Payload, Sh, R, A, E>,\n): Effect.Effect<void, never, Logic.Env<Sh, R>> => {\n const mode = args.mode ?? 'task'\n const runtime = args.runtime\n const config = args.config\n\n return ModeRunner.runByMode<Payload, never, Logic.Env<Sh, R>>({\n stream: args.stream,\n mode,\n run: (payload) => runTaskLifecycle<Payload, Sh, R, A, E>(payload, runtime, config),\n runLatest: (payload, context) =>\n runTaskLifecycle<Payload, Sh, R, A, E>(payload, runtime, config, context.isCurrent),\n resolveConcurrencyLimit: resolveConcurrencyLimit(runtime),\n latest: {\n strategy: 'fiber-slot',\n // Keep TaskRunner behavior: triggers are acknowledged once started; no need to await final IO on stream completion.\n awaitLatestOnEnd: false,\n },\n }) as Effect.Effect<void, never, Logic.Env<Sh, R>>\n}\n\n/**\n * makeTaskRunner:\n * - Backward-compatible thin alias for runTask.\n * - Signature stays stable for existing Bound API callsites.\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 runTask<Payload, Sh, R, A, E>({\n stream,\n mode,\n runtime,\n config,\n })\n","import { Effect, Fiber, Ref, Stream } from 'effect'\nimport * as LatestFiberSlot from './LatestFiberSlot.js'\n\nconst EXHAUST_ACQUIRE_BUSY = [true, true] as const\nconst EXHAUST_REJECT_BUSY = [false, true] as const\n\nexport type ModeRunnerMode =\n | 'task' // sequential\n | 'parallel'\n | 'latest'\n | 'exhaust'\n\nexport type ModeRunnerLatestStrategy = 'switch' | 'fiber-slot'\n\nexport interface ModeRunnerLatestContext {\n readonly runId: number\n readonly isCurrent: Effect.Effect<boolean>\n}\n\nexport interface ModeRunnerConfig<Payload, E, R> {\n readonly stream: Stream.Stream<Payload>\n readonly mode: ModeRunnerMode\n readonly run: (payload: Payload) => Effect.Effect<void, E, R>\n readonly runLatest?: (payload: Payload, context: ModeRunnerLatestContext) => Effect.Effect<void, E, R>\n readonly resolveConcurrencyLimit: Effect.Effect<number | 'unbounded', never, any>\n readonly latest?: {\n readonly strategy?: ModeRunnerLatestStrategy\n readonly awaitLatestOnEnd?: boolean\n }\n}\n\ntype SwitchLatestState = {\n runningId: number\n nextId: number\n}\n\nconst beginSwitchLatestRun = (stateRef: Ref.Ref<SwitchLatestState>) =>\n Ref.modify(stateRef, (state) => {\n const runId = state.nextId + 1\n state.nextId = runId\n state.runningId = runId\n return [runId, state] as const\n })\n\nconst clearSwitchLatestIfCurrent = (stateRef: Ref.Ref<SwitchLatestState>, runId: number) =>\n Ref.update(stateRef, (state) => {\n if (state.runningId === runId) {\n state.runningId = 0\n }\n return state\n })\n\nconst runLatestSwitch = <Payload, E, R>(\n stream: Stream.Stream<Payload>,\n runLatest: (payload: Payload, context: ModeRunnerLatestContext) => Effect.Effect<void, E, R>,\n): Effect.Effect<void, E, R> =>\n Effect.gen(function* () {\n const stateRef = yield* Ref.make<SwitchLatestState>({\n runningId: 0,\n nextId: 0,\n })\n\n const makeEffect = (payload: Payload) =>\n Effect.gen(function* () {\n const runId = yield* beginSwitchLatestRun(stateRef)\n const isCurrent = Ref.get(stateRef).pipe(Effect.map((state) => state.runningId === runId))\n yield* runLatest(payload, { runId, isCurrent }).pipe(Effect.ensuring(clearSwitchLatestIfCurrent(stateRef, runId)))\n })\n\n return yield* Stream.runDrain(\n Stream.map(stream, makeEffect).pipe(Stream.switchMap((effect) => Stream.fromEffect(effect))),\n )\n })\n\nconst runLatestFiberSlot = <Payload, E, R>(\n stream: Stream.Stream<Payload>,\n runLatest: (payload: Payload, context: ModeRunnerLatestContext) => Effect.Effect<void, E, R>,\n awaitLatestOnEnd: boolean,\n): Effect.Effect<void, E, R> =>\n Effect.gen(function* () {\n const stateRef = yield* LatestFiberSlot.make<E>()\n\n const start = (payload: Payload) =>\n Effect.gen(function* () {\n const [prevFiber, prevRunningId, runId] = yield* LatestFiberSlot.beginRun(stateRef)\n\n if (prevFiber && prevRunningId !== 0) {\n // Do not wait for full shutdown of old work; stale writes are guarded by runId.\n yield* Fiber.interrupt(prevFiber)\n }\n\n const isCurrent = Ref.get(stateRef).pipe(Effect.map((state) => state.runningId === runId))\n const fiber = yield* Effect.forkChild(\n runLatest(payload, { runId, isCurrent }).pipe(Effect.ensuring(LatestFiberSlot.clearIfCurrent(stateRef, runId))),\n )\n yield* LatestFiberSlot.setFiberIfCurrent(stateRef, runId, fiber)\n })\n\n yield* Stream.runForEach(stream, start)\n\n if (!awaitLatestOnEnd) {\n return\n }\n\n const finalState = yield* Ref.get(stateRef)\n const finalFiber = finalState.runningId !== 0 ? finalState.fiber : undefined\n if (finalFiber) {\n yield* Fiber.join(finalFiber)\n }\n })\n\nconst runExhaust = <Payload, E, R>(\n stream: Stream.Stream<Payload>,\n run: (payload: Payload) => Effect.Effect<void, E, R>,\n resolveConcurrencyLimit: Effect.Effect<number | 'unbounded', never, any>,\n): Effect.Effect<void, E, R> =>\n Effect.gen(function* () {\n const concurrency = yield* resolveConcurrencyLimit\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 ? EXHAUST_REJECT_BUSY : EXHAUST_ACQUIRE_BUSY,\n )\n if (!acquired) {\n return\n }\n try {\n yield* run(payload)\n } finally {\n yield* Ref.set(busyRef, false)\n }\n })\n\n return yield* Stream.runDrain(stream.pipe(Stream.mapEffect(mapper, { concurrency })))\n })\n\nconst runParallel = <Payload, E, R>(\n stream: Stream.Stream<Payload>,\n run: (payload: Payload) => Effect.Effect<void, E, R>,\n resolveConcurrencyLimit: Effect.Effect<number | 'unbounded', never, any>,\n): Effect.Effect<void, E, R> =>\n Effect.gen(function* () {\n const concurrency = yield* resolveConcurrencyLimit\n return yield* Stream.runDrain(stream.pipe(Stream.mapEffect(run, { concurrency })))\n })\n\nexport const runByMode = <Payload, E, R>(config: ModeRunnerConfig<Payload, E, R>): Effect.Effect<void, E, R> => {\n const runLatest = config.runLatest ?? ((payload: Payload) => config.run(payload))\n if (config.mode === 'latest') {\n const strategy = config.latest?.strategy ?? 'switch'\n if (strategy === 'fiber-slot') {\n return runLatestFiberSlot(config.stream, runLatest, config.latest?.awaitLatestOnEnd ?? false)\n }\n return runLatestSwitch(config.stream, runLatest)\n }\n\n if (config.mode === 'exhaust') {\n return runExhaust(config.stream, config.run, config.resolveConcurrencyLimit)\n }\n\n if (config.mode === 'parallel') {\n return runParallel(config.stream, config.run, config.resolveConcurrencyLimit)\n }\n\n return Stream.runForEach(config.stream, config.run)\n}\n","import { Fiber, Ref } from 'effect'\n\nexport type LatestFiberSlotState<E = never> = {\n fiber: Fiber.Fiber<void, E> | undefined\n runningId: number\n nextId: number\n}\n\nexport const make = <E = never>() =>\n Ref.make<LatestFiberSlotState<E>>({\n fiber: undefined,\n runningId: 0,\n nextId: 0,\n })\n\nexport const beginRun = <E>(slotRef: Ref.Ref<LatestFiberSlotState<E>>) =>\n Ref.modify(slotRef, (state) => {\n const runId = state.nextId + 1\n const prevFiber = state.fiber\n const prevRunningId = state.runningId\n state.nextId = runId\n state.runningId = runId\n return [[prevFiber, prevRunningId, runId] as const, state] as const\n })\n\nexport const setFiberIfCurrent = <E>(\n slotRef: Ref.Ref<LatestFiberSlotState<E>>,\n runId: number,\n fiber: Fiber.Fiber<void, E>,\n) =>\n Ref.update(slotRef, (state) => {\n if (state.runningId === runId) {\n state.fiber = fiber\n }\n return state\n })\n\nexport const clearIfCurrent = <E>(slotRef: Ref.Ref<LatestFiberSlotState<E>>, runId: number) =>\n Ref.update(slotRef, (state) => {\n if (state.runningId === runId) {\n state.runningId = 0\n state.fiber = undefined\n }\n return state\n })\n","import { Effect } from 'effect'\nimport type { ReadQueryCompiled } from './ReadQuery.js'\nimport type { DeclarativeLinkIR, DeclarativeLinkNodeId } from './DeclarativeLinkIR.js'\nimport type { ModuleInstanceKey, RuntimeStoreModuleCommit } from './RuntimeStore.js'\n\nexport interface ModuleAsSourceLink {\n readonly id: string\n readonly sourceModuleInstanceKey: ModuleInstanceKey\n readonly readQuery: ReadQueryCompiled<any, any>\n readonly computeValue: (snapshot: unknown) => unknown\n readonly equalsValue: (a: unknown, b: unknown) => boolean\n readonly applyValue: (next: unknown) => Effect.Effect<void, never, never>\n}\n\nexport interface DeclarativeLinkRegistration {\n readonly linkId: string\n readonly ir: DeclarativeLinkIR\n readonly readNodes: ReadonlyArray<{\n readonly nodeId: DeclarativeLinkNodeId\n readonly moduleInstanceKey: ModuleInstanceKey\n readonly readQuery: ReadQueryCompiled<any, any>\n }>\n readonly dispatchNodes: ReadonlyArray<{\n readonly nodeId: DeclarativeLinkNodeId\n readonly dispatch: (payload: unknown) => Effect.Effect<void, never, never>\n }>\n}\n\nexport interface DeclarativeLinkRuntime {\n readonly registerModuleAsSourceLink: (link: ModuleAsSourceLink) => () => void\n readonly registerDeclarativeLink: (link: DeclarativeLinkRegistration) => () => void\n readonly applyForSources: (args: {\n readonly tickSeq: number\n readonly acceptedModules: ReadonlyMap<ModuleInstanceKey, RuntimeStoreModuleCommit>\n readonly changedModuleInstanceKeys: ReadonlyArray<ModuleInstanceKey>\n }) => Effect.Effect<{ readonly scheduled: boolean }, never, never>\n}\n\ntype StoredModuleAsSourceLink = ModuleAsSourceLink & {\n hasValue: boolean\n lastValue: unknown\n}\n\ntype StoredDeclarativeLink = DeclarativeLinkRegistration & {\n readonly readNodeById: ReadonlyMap<string, { readonly nodeId: DeclarativeLinkNodeId; readonly moduleInstanceKey: ModuleInstanceKey; readonly readQuery: ReadQueryCompiled<any, any> }>\n readonly dispatchNodeById: ReadonlyMap<string, { readonly nodeId: DeclarativeLinkNodeId; readonly dispatch: (payload: unknown) => Effect.Effect<void, never, never> }>\n readonly dispatchTargetsByReadNode: ReadonlyMap<string, ReadonlyArray<DeclarativeLinkNodeId>>\n readonly readNodeState: Map<string, { hasValue: boolean; lastValue: unknown }>\n}\n\nexport const makeDeclarativeLinkRuntime = (): DeclarativeLinkRuntime => {\n const moduleAsSourceById = new Map<string, StoredModuleAsSourceLink>()\n const moduleAsSourceIdsBySource = new Map<ModuleInstanceKey, Set<string>>()\n\n const declarativeById = new Map<string, StoredDeclarativeLink>()\n const declarativeReadNodesBySource = new Map<ModuleInstanceKey, Array<{ readonly linkId: string; readonly nodeId: DeclarativeLinkNodeId }>>()\n\n const registerModuleAsSourceLink: DeclarativeLinkRuntime['registerModuleAsSourceLink'] = (link) => {\n const stored: StoredModuleAsSourceLink = {\n ...link,\n hasValue: false,\n lastValue: undefined,\n }\n\n moduleAsSourceById.set(link.id, stored)\n const set = moduleAsSourceIdsBySource.get(link.sourceModuleInstanceKey) ?? new Set<string>()\n set.add(link.id)\n moduleAsSourceIdsBySource.set(link.sourceModuleInstanceKey, set)\n\n return () => {\n moduleAsSourceById.delete(link.id)\n const current = moduleAsSourceIdsBySource.get(link.sourceModuleInstanceKey)\n if (!current) return\n current.delete(link.id)\n if (current.size === 0) {\n moduleAsSourceIdsBySource.delete(link.sourceModuleInstanceKey)\n }\n }\n }\n\n const registerDeclarativeLink: DeclarativeLinkRuntime['registerDeclarativeLink'] = (link) => {\n const readNodeById = new Map<string, { readonly nodeId: DeclarativeLinkNodeId; readonly moduleInstanceKey: ModuleInstanceKey; readonly readQuery: ReadQueryCompiled<any, any> }>()\n for (const n of link.readNodes) {\n readNodeById.set(n.nodeId, n)\n }\n\n const dispatchNodeById = new Map<\n string,\n { readonly nodeId: DeclarativeLinkNodeId; readonly dispatch: (payload: unknown) => Effect.Effect<void, never, never> }\n >()\n for (const n of link.dispatchNodes) {\n dispatchNodeById.set(n.nodeId, n)\n }\n\n // V1 constraint: dispatch must have at most one incoming edge, interpreted as \"payload flow\".\n const incomingByDispatch = new Map<string, number>()\n for (const e of link.ir.edges) {\n const to = e.to\n const isDispatch = dispatchNodeById.has(to)\n if (!isDispatch) continue\n incomingByDispatch.set(to, (incomingByDispatch.get(to) ?? 0) + 1)\n const count = incomingByDispatch.get(to) ?? 0\n if (count > 1) {\n throw new Error(\n `[DeclarativeLinkRuntime] Invalid DeclarativeLinkIR: dispatch node has multiple incoming edges (linkId=${link.linkId}, nodeId=${to}).`,\n )\n }\n }\n\n const dispatchTargetsByReadNode = new Map<string, Array<DeclarativeLinkNodeId>>()\n for (const e of link.ir.edges) {\n const from = e.from\n const to = e.to\n if (!readNodeById.has(from)) continue\n if (!dispatchNodeById.has(to)) continue\n const list = dispatchTargetsByReadNode.get(from) ?? []\n list.push(to)\n dispatchTargetsByReadNode.set(from, list)\n }\n\n const stored: StoredDeclarativeLink = {\n ...link,\n readNodeById,\n dispatchNodeById,\n dispatchTargetsByReadNode,\n readNodeState: new Map(),\n }\n\n declarativeById.set(link.linkId, stored)\n\n for (const n of link.readNodes) {\n const list = declarativeReadNodesBySource.get(n.moduleInstanceKey) ?? []\n list.push({ linkId: link.linkId, nodeId: n.nodeId })\n declarativeReadNodesBySource.set(n.moduleInstanceKey, list)\n }\n\n return () => {\n declarativeById.delete(link.linkId)\n for (const n of link.readNodes) {\n const list = declarativeReadNodesBySource.get(n.moduleInstanceKey)\n if (!list) continue\n const next = list.filter((x) => !(x.linkId === link.linkId && x.nodeId === n.nodeId))\n if (next.length === 0) {\n declarativeReadNodesBySource.delete(n.moduleInstanceKey)\n } else {\n declarativeReadNodesBySource.set(n.moduleInstanceKey, next)\n }\n }\n }\n }\n\n const applyForSources: DeclarativeLinkRuntime['applyForSources'] = (args) =>\n Effect.gen(function* () {\n let scheduled = false\n\n // ---- Module-as-Source edges (module readQuery -> externalStore trait writeback) ----\n for (const sourceKey of args.changedModuleInstanceKeys) {\n const ids = moduleAsSourceIdsBySource.get(sourceKey)\n if (!ids || ids.size === 0) continue\n const commit = args.acceptedModules.get(sourceKey)\n if (!commit) continue\n\n for (const id of ids) {\n const link = moduleAsSourceById.get(id)\n if (!link) continue\n\n let selected: unknown\n try {\n selected = link.readQuery.select(commit.state as any)\n } catch {\n continue\n }\n\n const nextValue = link.computeValue(selected)\n if (link.hasValue && link.equalsValue(link.lastValue, nextValue)) {\n continue\n }\n\n link.hasValue = true\n link.lastValue = nextValue\n scheduled = true\n yield* link.applyValue(nextValue)\n }\n }\n\n // ---- DeclarativeLinkIR edges (module readQuery -> dispatch) ----\n for (const sourceKey of args.changedModuleInstanceKeys) {\n const refs = declarativeReadNodesBySource.get(sourceKey)\n if (!refs || refs.length === 0) continue\n const commit = args.acceptedModules.get(sourceKey)\n if (!commit) continue\n\n for (const ref of refs) {\n const link = declarativeById.get(ref.linkId)\n if (!link) continue\n const readNode = link.readNodeById.get(ref.nodeId)\n if (!readNode) continue\n\n let value: unknown\n try {\n value = readNode.readQuery.select(commit.state as any)\n } catch {\n continue\n }\n\n const state = link.readNodeState.get(ref.nodeId) ?? { hasValue: false, lastValue: undefined }\n const changed = !state.hasValue || !Object.is(state.lastValue, value)\n if (!changed) continue\n\n state.hasValue = true\n state.lastValue = value\n link.readNodeState.set(ref.nodeId, state)\n\n const targets = link.dispatchTargetsByReadNode.get(ref.nodeId) ?? []\n for (const dispatchNodeId of targets) {\n const node = link.dispatchNodeById.get(dispatchNodeId)\n if (!node) continue\n scheduled = true\n yield* node.dispatch(value)\n }\n }\n }\n\n return { scheduled } as const\n })\n\n return {\n registerModuleAsSourceLink,\n registerDeclarativeLink,\n applyForSources,\n }\n}\n","import { Effect, Layer, ServiceMap } 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 = ServiceMap.Reference<ReadonlyArray<ConvergeStaticIrCollector>>(\n '@logixjs/core/ConvergeStaticIrCollectors',\n {\n defaultValue: () => [],\n },\n)\n\nexport const appendConvergeStaticIrCollectors = (\n collectors: ReadonlyArray<ConvergeStaticIrCollector>,\n): Layer.Layer<any, never, never> =>\n Layer.effect(\n currentConvergeStaticIrCollectors,\n Effect.gen(function* () {\n const current = yield* Effect.service(currentConvergeStaticIrCollectors)\n return [...current, ...collectors]\n }),\n ) as Layer.Layer<any, never, never>\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'\nimport {\n collectTrialRunReExport,\n reExportTrialRunReport,\n type TrialRunReportBudgets as TrialRunReExportBudgets,\n} from './trialRunReportPipeline.js'\n\ntype RootLike<Sh extends AnyModuleShape> = ModuleImpl<any, Sh, any> | { readonly impl: ModuleImpl<any, Sh, any> }\n\nexport interface TrialRunReportBudgets extends TrialRunReExportBudgets {}\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 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 /\\bat\\s*\\[\"([A-Z0-9_./:-]+)\"\\]/g,\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()\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()\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 = cause.reasons\n .filter((reason) => Cause.isFailReason(reason) || Cause.isDieReason(reason))\n .map((reason) => (Cause.isFailReason(reason) ? reason.error : reason.defect))\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))\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(),\n missingConfigKeys: Array.from(new Set(missingConfigKeys)).sort(),\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()\n\n const missingServices = Array.from(new Set(params.missingServices ?? [])).sort()\n const missingConfigKeys = Array.from(new Set(params.missingConfigKeys ?? [])).sort()\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()\n\n const configKeys = Array.from(new Set([...providedConfigKeys, ...missingConfigKeys])).sort()\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 if (!hasTimeout) {\n return (yield* Fiber.await(fiber)) as Exit.Exit<A, E | Error>\n }\n\n const raced = yield* Effect.promise<Exit.Exit<A, E | Error> | { readonly _tag: 'Timeout' }>(() =>\n new Promise((resolve) => {\n const timer = setTimeout(() => resolve({ _tag: 'Timeout' as const }), timeoutMs)\n void Effect.runPromise(Fiber.await(fiber)).then((exit) => {\n clearTimeout(timer)\n resolve(exit as Exit.Exit<A, E | Error>)\n })\n }),\n )\n\n if ((raced as any)._tag !== 'Timeout') {\n return raced as Exit.Exit<A, E | Error>\n }\n\n yield* Fiber.interrupt(fiber).pipe(Effect.asVoid, Effect.forkDetach({ startImmediately: true }))\n return Exit.fail(makeTrialRunTimeoutError())\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(Effect.service(rootImpl.module as any).pipe(Effect.orDie))\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.findErrorOption(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 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)\n ? closeExit.cause.reasons.filter(Cause.isDieReason).map((reason) => reason.defect)[0]\n : undefined\n\n if (!Exit.isSuccess(bootExit)) {\n const failure = Option.getOrUndefined(Cause.findErrorOption(bootExit.cause))\n const defect = bootExit.cause.reasons.filter(Cause.isDieReason).map((reason) => reason.defect)[0]\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 = closeExit.cause.reasons.filter(Cause.isDieReason).map((reason) => reason.defect)[0]\n const failure = Option.getOrUndefined(Cause.findErrorOption(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 moduleIdFromRoot =\n typeof (rootImpl.module as any)?.id === 'string' && (rootImpl.module as any).id.length > 0\n ? String((rootImpl.module as any).id)\n : undefined\n\n const reExportCollection = yield* Effect.promise(async () =>\n collectTrialRunReExport({\n collectEvidence: () =>\n collector.exportEvidencePackage({\n maxEvents: options?.maxEvents ?? 1000,\n }),\n collectManifest: () =>\n extractManifest(root as any, {\n includeStaticIr: true,\n budgets: { maxBytes: 200_000 },\n }),\n collectStaticIr: () => exportStaticIr(root as any),\n collectArtifacts: ({ manifest, staticIr }) =>\n collectTrialRunArtifacts({\n exporters: getTrialRunArtifactExporters(rootImpl.module as any),\n ctx: {\n moduleId: moduleIdFromRoot ?? manifest?.moduleId ?? 'unknown',\n manifest,\n staticIr: staticIr as any,\n environment,\n },\n }),\n }),\n )\n\n const report = reExportTrialRunReport({\n base: {\n runId: session.runId,\n ok,\n environment,\n summary,\n error,\n },\n collection: reExportCollection,\n maxEvents: options?.maxEvents ?? 1000,\n budgets: options?.budgets,\n })\n\n return report satisfies TrialRunReport\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 entries = Object.entries(record ?? {}).flatMap(([k, v]) => {\n if (!k || v === undefined) {\n return []\n }\n return [[k, String(v)] as const]\n })\n return ConfigProvider.fromUnknown(Object.fromEntries(entries))\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 = ConfigProvider.layer(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 = cause.reasons\n .filter((reason) => Cause.isDieReason(reason) || Cause.isFailReason(reason))\n .map((reason) => (Cause.isDieReason(reason) ? reason.defect : reason.error))\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.catchCause((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 { Layer, ServiceMap } 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 ServiceMap.Service<RuntimeHost, RuntimeHostService>()('@logixjs/RuntimeHost') {}\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 { Effect, Option, ServiceMap } 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 ServiceMap.Service<\n KernelImplementationRefTagImpl,\n KernelImplementationRef\n>()('@logixjs/core/KernelImplementationRef') {}\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 { Cause, Effect, Exit, 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 { DisposeError, DisposeTimeoutError, 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.Closeable\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 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 Effect.gen(function* () {\n const exit = yield* Effect.exit(\n closeProgramScope({\n scope,\n timeoutMs: params.timeoutMs,\n identity,\n onError: params.onError,\n }),\n )\n\n if (Exit.isSuccess(exit)) {\n const disposeResult = yield* Effect.promise<\n | { readonly _tag: 'Success' }\n | { readonly _tag: 'Failure'; readonly error: unknown }\n | { readonly _tag: 'Timeout' }\n >(() =>\n new Promise((resolve) => {\n const timer = setTimeout(() => resolve({ _tag: 'Timeout' as const }), params.timeoutMs)\n void runtime.dispose().then(\n () => {\n clearTimeout(timer)\n resolve({ _tag: 'Success' as const })\n },\n (error) => {\n clearTimeout(timer)\n resolve({ _tag: 'Failure' as const, error })\n },\n )\n }),\n )\n\n if (disposeResult._tag === 'Timeout') {\n return yield* Effect.die(\n new DisposeTimeoutError(identity, {\n timeoutMs: params.timeoutMs,\n elapsedMs: params.timeoutMs,\n }),\n )\n }\n\n if (disposeResult._tag === 'Failure') {\n return yield* Effect.die(new DisposeError(identity, Cause.die(disposeResult.error)))\n }\n\n return\n }\n\n void runtime.dispose()\n return yield* Effect.failCause(exit.cause)\n }) as Effect.Effect<void, never, never>\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","import { Deferred, Effect, Exit, Option, Schema, ServiceMap, Stream } 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 type { JsonValue } from '../../observability/jsonValue.js'\nimport { RunSessionTag, type RunSession } 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\nconst DIRECT_STATE_WRITE_EFFECT = Symbol.for('logix.directStateWriteEffect')\n\ntype DirectStateWriteMetadata<Sh extends AnyModuleShape> =\n | { readonly kind: 'update'; readonly run: (prev: StateOf<Sh>) => StateOf<Sh> }\n | { readonly kind: 'mutate'; readonly run: (draft: Logic.Draft<StateOf<Sh>>) => void }\n\ntype DirectStateWriteEffect<Sh extends AnyModuleShape> = Effect.Effect<void, never, any> & {\n [DIRECT_STATE_WRITE_EFFECT]?: DirectStateWriteMetadata<Sh>\n}\n\nconst markDirectStateWriteEffect = <Sh extends AnyModuleShape, A extends Effect.Effect<void, never, any>>(\n effect: A,\n metadata: DirectStateWriteMetadata<Sh>,\n): A => {\n ;(effect as DirectStateWriteEffect<Sh>)[DIRECT_STATE_WRITE_EFFECT] = metadata\n return effect\n}\n\nconst getDirectStateWriteMetadata = <Sh extends AnyModuleShape>(\n value: unknown,\n): DirectStateWriteMetadata<Sh> | undefined => {\n if (!value || (typeof value !== 'object' && typeof value !== 'function')) return undefined\n return (value as DirectStateWriteEffect<Sh>)[DIRECT_STATE_WRITE_EFFECT]\n}\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 if (runtimeInternals && triggerName && typeof eff !== 'function' && getDirectStateWriteMetadata<Sh>(eff) != null) {\n return Effect.sync(() => {\n const metadata = getDirectStateWriteMetadata<Sh>(eff)!\n runtimeInternals.txn.registerActionStateWriteback(\n triggerName,\n metadata.kind === 'update'\n ? ({ kind: 'update', run: metadata.run } as any)\n : ({ kind: 'mutate', run: metadata.run } as any),\n )\n }) as Logic.Of<Sh, R & R2, void, E>\n }\n return Effect.forkScoped(flowApi.run<T, A, E, R2>(eff)(stream)).pipe(Effect.asVoid) as Logic.Of<\n Sh,\n R & R2,\n void,\n E\n >\n },\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 if (runtimeInternals && triggerName && typeof eff !== 'function' && getDirectStateWriteMetadata<Sh>(eff) != null) {\n return Effect.sync(() => {\n const metadata = getDirectStateWriteMetadata<Sh>(eff)!\n runtimeInternals.txn.registerActionStateWriteback(\n triggerName,\n metadata.kind === 'update'\n ? ({ kind: 'update', run: metadata.run } as any)\n : ({ kind: 'mutate', run: metadata.run } as any),\n )\n }) as Logic.Of<Sh, R & R2, void, E>\n }\n return 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 },\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.catchCause((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.catchCause((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 as ServiceMap.Key<any, Lifecycle.LifecycleManager>).pipe(\n Effect.flatMap((maybe) =>\n Option.match(maybe, {\n onSome: available,\n onNone: missing,\n })),\n )\n const withPlatform = (invoke: (platform: Platform.Service) => Effect.Effect<void, never, any>) =>\n Effect.serviceOption(Platform.Tag as ServiceMap.Key<any, Platform.Service>).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 }).pipe(Effect.orDie)\n\n const createIntentBuilder = <T>(stream: Stream.Stream<T>, triggerName?: string) =>\n makeIntentBuilder(runtime)(stream, triggerName)\n\n const actionMatchesTag = (action: unknown, tag: string): boolean => {\n const actionTag = (action as any)?._tag\n if (actionTag === tag) {\n return true\n }\n const actionType = (action as any)?.type\n return actionType === tag\n }\n\n const actionStreamByTag = (tag: string): Stream.Stream<Logix.ActionOf<Sh>> => {\n const topicSelector = runtime.actionsByTag$\n if (typeof topicSelector === 'function') {\n return topicSelector(tag)\n }\n return runtime.actions$.pipe(Stream.filter((action: unknown) => actionMatchesTag(action, tag)))\n }\n\n const onceInRunSession = (key: string): Effect.Effect<boolean, never, any> =>\n Effect.serviceOption(RunSessionTag as unknown as ServiceMap.Key<any, RunSession>).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: ServiceMap.Key<any, Logix.ModuleRuntime<any, any>>\n readonly schemas?: Record<string, unknown>\n readonly meta?: Record<string, JsonValue>\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 ServiceMap.isKey((value as any).tag),\n )\n\n const buildModuleHandle = (\n tag: ServiceMap.Key<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, JsonValue>\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: ServiceMap.Key<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 ServiceMap.Key<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 type BatchedStateWritebackOutcome =\n | { readonly _tag: 'ok' }\n | { readonly _tag: 'failure'; readonly cause: unknown }\n\n type BatchedStateWritebackRequest =\n | {\n readonly kind: 'update'\n readonly update: (prev: Logix.StateOf<Sh>) => Logix.StateOf<Sh>\n readonly done: Deferred.Deferred<BatchedStateWritebackOutcome>\n }\n | {\n readonly kind: 'mutate'\n readonly mutate: (draft: Logic.Draft<Logix.StateOf<Sh>>) => void\n readonly done: Deferred.Deferred<BatchedStateWritebackOutcome>\n }\n\n type BatchedStateWritebackCoordinator = {\n readonly enqueueUpdate: (update: (prev: Logix.StateOf<Sh>) => Logix.StateOf<Sh>) => Effect.Effect<void, never, any>\n readonly enqueueMutate: (mutate: (draft: Logic.Draft<Logix.StateOf<Sh>>) => void) => Effect.Effect<void, never, any>\n }\n\n // Perf-first batching for `$.state.update/$.state.mutate` called *outside* a transaction:\n // - Many watchers may write back on the same tick; running N transactions is dominated by fixed txn cost.\n // - Batch them into a single StateTransaction (still sequentially applies reducers), reducing queue/commit overhead.\n //\n // Notes:\n // - Enabled only when runtimeInternals exists and NODE_ENV=production (perf mode).\n // - Semantics change: multiple state writebacks may share the same txnSeq/txnId (forward-only evolution).\n let batchedStateWritebackCoordinator: BatchedStateWritebackCoordinator | undefined\n\n const getOrCreateBatchedStateWritebackCoordinator = (): BatchedStateWritebackCoordinator => {\n if (batchedStateWritebackCoordinator) return batchedStateWritebackCoordinator\n if (!runtimeInternals) {\n throw new Error('[BatchedStateWritebackCoordinator] Missing runtimeInternals (expected in ModuleRuntime-backed $).')\n }\n\n let inFlight = false\n const pending: Array<BatchedStateWritebackRequest> = []\n\n const drain = (): ReadonlyArray<BatchedStateWritebackRequest> => {\n if (pending.length === 0) return []\n return pending.splice(0, pending.length)\n }\n\n const ok: BatchedStateWritebackOutcome = { _tag: 'ok' }\n const fail = (cause: unknown): BatchedStateWritebackOutcome => ({ _tag: 'failure', cause })\n\n const applyBatch = (batch: ReadonlyArray<BatchedStateWritebackRequest>): Effect.Effect<void, never, any> =>\n Effect.gen(function* () {\n if (batch.length === 0) return\n\n let current = (yield* runtime.getState) as Logix.StateOf<Sh>\n\n for (let i = 0; i < batch.length; i++) {\n const req = batch[i]!\n if (req.kind === 'update') {\n const next = req.update(current)\n current = next\n yield* runtime.setState(next)\n continue\n }\n\n const { nextState, patchPaths } = mutateWithPatchPaths(current as Logix.StateOf<Sh>, (draft) => {\n req.mutate(draft as Logic.Draft<Logix.StateOf<Sh>>)\n })\n\n for (const path of patchPaths) {\n runtimeInternals.txn.recordStatePatch(path, 'unknown')\n }\n\n runtimeInternals.txn.updateDraft(nextState)\n current = nextState as Logix.StateOf<Sh>\n }\n })\n\n const flushInFlight = (): Effect.Effect<void, never, any> =>\n Effect.uninterruptible(\n Effect.gen(function* () {\n if (inFlight) return\n inFlight = true\n try {\n while (true) {\n const batch = drain()\n if (batch.length === 0) {\n // Release the inFlight lock, then re-check pending to avoid the \"enqueue while exiting\" race.\n inFlight = false\n if (pending.length === 0) return\n inFlight = true\n continue\n }\n\n const originName =\n batch.length === 1 ? (batch[0]!.kind === 'update' ? 'update' : 'mutate') : 'writeback:batched'\n\n const exit = yield* Effect.exit(\n runtimeInternals.txn.runWithStateTransaction(\n {\n kind: 'state',\n name: originName,\n details: { batched: true, count: batch.length },\n } as any,\n () => applyBatch(batch).pipe(Effect.asVoid),\n ),\n )\n\n const outcome: BatchedStateWritebackOutcome = exit._tag === 'Success' ? ok : fail(exit.cause)\n\n for (let i = 0; i < batch.length; i++) {\n yield* Deferred.succeed(batch[i]!.done, outcome)\n }\n\n // Unexpected failures are treated as fatal; unblock waiters and stop the drain loop.\n if (outcome._tag === 'failure') {\n return\n }\n }\n } finally {\n inFlight = false\n }\n }),\n )\n\n const waitForMicrotask = (): Effect.Effect<void, never, never> =>\n Effect.promise(\n () =>\n new Promise<void>((resolve) => {\n if (typeof queueMicrotask === 'function') {\n queueMicrotask(resolve)\n return\n }\n Promise.resolve().then(resolve)\n }),\n )\n\n const enqueueAndAwait = (req: BatchedStateWritebackRequest): Effect.Effect<void, never, any> =>\n Effect.gen(function* () {\n pending.push(req)\n if (!inFlight) {\n yield* waitForMicrotask()\n }\n yield* flushInFlight()\n const outcome = yield* Deferred.await(req.done)\n if (outcome._tag === 'failure') {\n return yield* Effect.die(outcome.cause)\n }\n })\n\n const coordinator: BatchedStateWritebackCoordinator = {\n enqueueUpdate: (update) =>\n Effect.gen(function* () {\n const done = yield* Deferred.make<BatchedStateWritebackOutcome>()\n yield* enqueueAndAwait({ kind: 'update', update, done })\n }),\n enqueueMutate: (mutate) =>\n Effect.gen(function* () {\n const done = yield* Deferred.make<BatchedStateWritebackOutcome>()\n yield* enqueueAndAwait({ kind: 'mutate', mutate, done })\n }),\n }\n\n batchedStateWritebackCoordinator = coordinator\n return coordinator\n }\n\n const stateApi: BoundApi<Sh, R>['state'] = {\n read: runtime.getState,\n update: (f) =>\n markDirectStateWriteEffect<Sh, Effect.Effect<void, never, any>>(\n Effect.gen(function* () {\n const inTxn = yield* Effect.service(TaskRunner.inSyncTransactionFiber).pipe(Effect.orDie)\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 if (runtimeInternals && !isDevEnv()) {\n return yield* getOrCreateBatchedStateWritebackCoordinator().enqueueUpdate(f as any)\n }\n\n return yield* runtimeInternals\n ? runtimeInternals.txn.runWithStateTransaction({ kind: 'state', name: 'update' } as any, body)\n : body()\n }),\n { kind: 'update', run: f as any },\n ),\n mutate: (f) =>\n markDirectStateWriteEffect<Sh, Effect.Effect<void, never, any>>(\n Effect.gen(function* () {\n const recordPatch = runtimeInternals?.txn.recordStatePatch\n const updateDraft = runtimeInternals?.txn.updateDraft\n\n const inTxn = yield* Effect.service(TaskRunner.inSyncTransactionFiber).pipe(Effect.orDie)\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 if (runtimeInternals && !isDevEnv()) {\n return yield* getOrCreateBatchedStateWritebackCoordinator().enqueueMutate(f as any)\n }\n\n return yield* runtimeInternals\n ? runtimeInternals.txn.runWithStateTransaction({ kind: 'state', name: 'mutate' } as any, body)\n : body()\n }),\n { kind: 'mutate', run: f as any },\n ),\n ref: runtime.ref,\n }\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.die(new Error('[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.provideService(handler(state), TaskRunner.forceSourceRefresh, true) : 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* Effect.service(TaskRunner.inSyncTransactionFiber).pipe(Effect.orDie)\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 ServiceMap.Key<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 = Effect.service(Debug.currentDiagnosticsLevel).pipe(\n Effect.map((level) => {\n cachedDiagnosticsLevel = level\n return 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 (ServiceMap.isKey(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 Effect.service(arg as ServiceMap.Key<any, any>).pipe(Effect.orDie) 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(actionStreamByTag(tag).pipe(Stream.map((action: any) => action.payload)), tag)\n }\n if (Schema.isSchema(arg)) {\n const decode = Schema.decodeUnknownSync(arg as any)\n return createIntentBuilder(\n runtime.actions$.pipe(\n Stream.filter((a: any) => {\n try {\n decode(a)\n return true\n } catch {\n return false\n }\n }),\n ),\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(actionStreamByTag(arg), arg)\n }\n if (typeof arg === 'object' && arg !== null) {\n if ('_tag' in arg) {\n const tag = String((arg as any)._tag)\n return createIntentBuilder(actionStreamByTag(tag), tag)\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(actionStreamByTag(prop), prop)\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 { 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> = Schema.Schema<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>>\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>>(\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>>>(\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> | 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>\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 { create, type Patches } from 'mutative'\nimport type { FieldPath } from '../../field-path.js'\nimport { isFieldPathSegment, toKey } 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\n// Patch path evidence (from mutative) is allowed to include list indices (number / digit strings).\n// Field-level dirty ids are still derived by filtering out index segments via normalizeFieldPath.\nconst isNonNegativeIntString = (text: string): boolean => {\n if (!text) return false\n for (let i = 0; i < text.length; i++) {\n const c = text.charCodeAt(i)\n if (c < 48 /* '0' */ || c > 57 /* '9' */) return false\n }\n return true\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 // Fast path: patch path is already a pure string path evidence array.\n let allValidString = true\n for (let i = 0; i < path.length; i++) {\n const seg = path[i]\n if (typeof seg !== 'string' || !(isFieldPathSegment(seg) || isNonNegativeIntString(seg))) {\n allValidString = false\n break\n }\n }\n if (allValidString) return path as PatchPath\n\n // Structural path:\n // - keep valid field segments (non-numeric), and\n // - keep list indices (numbers / digit strings) for listIndexEvidence (C-1 / D-1).\n const parts: Array<string> = []\n for (let i = 0; i < path.length; i++) {\n const seg = path[i]\n if (typeof seg === 'string') {\n if (isFieldPathSegment(seg) || isNonNegativeIntString(seg)) {\n parts.push(seg)\n }\n continue\n }\n\n if (typeof seg === 'number' && Number.isFinite(seg)) {\n const n = Math.floor(seg)\n if (n >= 0 && n <= 2_147_483_647) {\n parts.push(String(n))\n }\n }\n }\n\n return parts.length === 0 ? '*' : 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 // Large patch bursts (e.g. reducers mutating hundreds/thousands of flat fields) are typically prefix-free and\n // already unique. In this case, string-key dedup becomes pure overhead and can cause GC jitter in perf workloads.\n // We keep only the '*' guard and let downstream dirty-set tracking handle any rare duplicates.\n if (patches.length > 256) {\n let sawStar = false\n const patchPaths: Array<PatchPath | '*'> = []\n for (let i = 0; i < patches.length; i++) {\n const patch = patches[i]\n const p = toPatchFieldPath((patch as any)?.path)\n if (!p) continue\n if (p === '*') {\n if (sawStar) continue\n sawStar = true\n }\n patchPaths.push(p)\n }\n return {\n nextState,\n patchPaths,\n }\n }\n\n // Perf note:\n // - Avoid JSON.stringify-based dedup keys (alloc-heavy, can cause GC spikes in perf workloads).\n // - Use segment keys for single-segment paths; fall back to a stable toKey() digest for multi-segment paths.\n let sawStar = false\n const singleSeg = new Set<string>()\n const multiSeg = new Set<string>()\n const patchPaths: Array<PatchPath | '*'> = []\n\n for (let i = 0; i < patches.length; i++) {\n const patch = patches[i]\n const p = toPatchFieldPath((patch as any)?.path)\n if (!p) continue\n\n if (p === '*') {\n if (sawStar) continue\n sawStar = true\n patchPaths.push(p)\n continue\n }\n\n if (p.length === 1) {\n const seg = p[0]!\n if (singleSeg.has(seg)) continue\n singleSeg.add(seg)\n patchPaths.push(p)\n continue\n }\n\n const key = toKey(p)\n if (multiSeg.has(key)) continue\n multiSeg.add(key)\n patchPaths.push(p)\n }\n\n return {\n nextState,\n patchPaths,\n }\n}\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 | 'trait-external-store'\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 'trait-external-store':\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 => {\n let key = ''\n for (let i = 0; i < path.length; i++) {\n if (i > 0) key += '|'\n const seg = path[i]!\n key += seg.length\n key += ':'\n key += seg\n }\n return key\n}\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\nconst makeDirtyAllSet = (reason: DirtyAllReason): DirtySet => ({\n dirtyAll: true,\n reason,\n rootIds: [],\n rootCount: 0,\n keySize: 0,\n keyHash: 0,\n})\n\nconst buildSpecificDirtySetFromIds = (\n ids: ReadonlyArray<number>,\n fieldPathsById: ReadonlyArray<FieldPath>,\n): DirtySet => {\n const sorted = Array.from(ids)\n sorted.sort((a, b) => {\n const ap = fieldPathsById[a]\n const bp = fieldPathsById[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 < sorted.length; i++) {\n const id = sorted[i]!\n const path = fieldPathsById[id]!\n if (prev && isPrefixOf(prev, path)) continue\n rootIds.push(id)\n prev = path\n }\n\n if (rootIds.length === 0) {\n return makeDirtyAllSet('unknownWrite')\n }\n\n rootIds.sort((a, b) => a - b)\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 buildSpecificDirtySetFromIdsShallowFast = (ids: ReadonlyArray<number>): DirtySet => {\n // Fast path: if all dirty paths are single-segment (no structural prefixes possible),\n // roots are just the unique ids in numeric order.\n const sorted = Array.from(ids)\n sorted.sort((a, b) => a - b)\n\n const rootIds: Array<number> = []\n let prev: number | undefined\n for (let i = 0; i < sorted.length; i++) {\n const id = sorted[i]!\n if (prev === id) continue\n rootIds.push(id)\n prev = id\n }\n\n if (rootIds.length === 0) {\n return makeDirtyAllSet('unknownWrite')\n }\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\nexport const dirtyPathIdsToRootIds = (options: {\n readonly dirtyPathIds?: Iterable<FieldPathId>\n readonly registry: FieldPathIdRegistry\n readonly dirtyAllReason?: DirtyAllReason\n}): DirtySet => {\n if (options.dirtyAllReason) {\n return makeDirtyAllSet(options.dirtyAllReason)\n }\n\n let hasInvalid = false\n let missing = false\n let allShallow = true\n const ids: Array<number> = []\n\n for (const raw of options.dirtyPathIds ?? []) {\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 const fieldPath = options.registry.fieldPaths[id]\n if (!fieldPath) {\n missing = true\n continue\n }\n if (allShallow && fieldPath.length !== 1) {\n allShallow = false\n }\n ids.push(id)\n }\n\n if (hasInvalid) {\n return makeDirtyAllSet('nonTrackablePatch')\n }\n\n if (missing) {\n return makeDirtyAllSet('fallbackPolicy')\n }\n\n if (allShallow) {\n return buildSpecificDirtySetFromIdsShallowFast(ids)\n }\n\n return buildSpecificDirtySetFromIds(ids, options.registry.fieldPaths)\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 makeDirtyAllSet(options.dirtyAllReason)\n }\n\n let sawStar = false\n let hasInvalid = false\n let missing = false\n let allShallow = true\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 const fieldPath = options.registry.fieldPaths[id]\n if (!fieldPath) {\n missing = true\n continue\n }\n if (allShallow && fieldPath.length !== 1) {\n allShallow = false\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 if (allShallow && options.registry.fieldPaths[direct]?.length !== 1) {\n allShallow = false\n }\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 if (allShallow && options.registry.fieldPaths[id]?.length !== 1) {\n allShallow = false\n }\n ids.push(id)\n }\n\n if (hasInvalid) {\n return makeDirtyAllSet('nonTrackablePatch')\n }\n\n if (missing) {\n return makeDirtyAllSet('fallbackPolicy')\n }\n\n // Any non-trackable write must explicitly degrade (do not \"ignore *\" when roots exist).\n if (sawStar) {\n return makeDirtyAllSet('unknownWrite')\n }\n\n if (allShallow) {\n return buildSpecificDirtySetFromIdsShallowFast(ids)\n }\n\n return buildSpecificDirtySetFromIds(ids, options.registry.fieldPaths)\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","import { Effect, Stream, Option } from 'effect'\nimport type { AnyModuleShape, LogicEffect, 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'\nimport { makeRunBudgetEnvelopeV1, makeRunDegradeMarkerV1 } from './diagnosticsBudget.js'\nimport * as ModeRunner from './ModeRunner.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\ntype RuntimeReadQueryWithMetaCapability<S> = {\n readonly changesReadQueryWithMeta: <V>(readQuery: ReadQuery.ReadQueryInput<S, V>) => Stream.Stream<{ readonly value: V }>\n}\n\nconst hasChangesReadQueryWithMeta = <S>(candidate: unknown): candidate is RuntimeReadQueryWithMetaCapability<S> => {\n if (candidate == null) return false\n if (typeof candidate !== 'object' && typeof candidate !== 'function') return false\n return typeof (candidate as { readonly changesReadQueryWithMeta?: unknown }).changesReadQueryWithMeta === 'function'\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: {\n <V, A = void, E = never, R2 = unknown>(\n eff: LogicEffect<Sh, R & R2, A, E> | ((payload: V) => LogicEffect<Sh, R & R2, A, E>),\n options?: Logic.OperationOptions,\n ): (stream: Stream.Stream<V>) => LogicEffect<Sh, R & R2, void, E>\n <V, A = void, E = never, R2 = unknown>(\n config: RunConfig<Sh, R & R2, V, A, E>,\n ): (stream: Stream.Stream<V>) => LogicEffect<Sh, R & R2, void, E>\n }\n\n readonly runParallel: <V, A = void, E = never, R2 = unknown>(\n eff: LogicEffect<Sh, R & R2, A, E> | ((payload: V) => LogicEffect<Sh, R & R2, A, E>),\n options?: Logic.OperationOptions,\n ) => (stream: Stream.Stream<V>) => LogicEffect<Sh, R & R2, void, E>\n\n readonly runLatest: <V, A = void, E = never, R2 = unknown>(\n eff: LogicEffect<Sh, R & R2, A, E> | ((payload: V) => LogicEffect<Sh, R & R2, A, E>),\n options?: Logic.OperationOptions,\n ) => (stream: Stream.Stream<V>) => LogicEffect<Sh, R & R2, void, E>\n\n readonly runExhaust: <V, A = void, E = never, R2 = unknown>(\n eff: LogicEffect<Sh, R & R2, A, E> | ((payload: V) => LogicEffect<Sh, R & R2, A, E>),\n options?: Logic.OperationOptions,\n ) => (stream: Stream.Stream<V>) => LogicEffect<Sh, R & R2, void, E>\n}\n\nexport interface RunConfig<Sh extends AnyModuleShape, R, V, A = void, E = never> {\n readonly effect: LogicEffect<Sh, R, A, E> | ((payload: V) => LogicEffect<Sh, R, A, E>)\n readonly mode?: ModeRunner.ModeRunnerMode\n readonly options?: Logic.OperationOptions\n}\n\ntype EffectResolver<T, Sh extends AnyModuleShape, R, A, E> = (payload: T) => LogicEffect<Sh, R, A, E>\n\nconst preResolveEffectResolver = <T, Sh extends AnyModuleShape, R, A, E>(\n eff: LogicEffect<Sh, R, A, E> | EffectResolver<T, Sh, R, A, E>,\n): EffectResolver<T, Sh, R, A, E> => {\n if (typeof eff === 'function') {\n return eff as EffectResolver<T, Sh, R, A, E>\n }\n return () => eff\n}\n\nconst resolveFlowRunId = (name: string, meta: Record<string, unknown>, fallbackRunSeq?: number): string => {\n const explicitRunId = meta.runId\n if (typeof explicitRunId === 'string' && explicitRunId.length > 0) {\n return explicitRunId\n }\n\n const instanceId = typeof meta.instanceId === 'string' && meta.instanceId.length > 0 ? meta.instanceId : 'global'\n const opSeq = meta.opSeq\n if (typeof opSeq === 'number' && Number.isFinite(opSeq) && opSeq >= 1) {\n return `${instanceId}::${name}::r${Math.floor(opSeq)}`\n }\n if (typeof fallbackRunSeq === 'number' && Number.isFinite(fallbackRunSeq) && fallbackRunSeq >= 1) {\n return `${instanceId}::${name}::r${Math.floor(fallbackRunSeq)}`\n }\n return `${instanceId}::${name}`\n}\n\nconst withFlowRunBudgetMeta = (\n name: string,\n meta: Record<string, unknown>,\n fallbackRunSeq?: number,\n): Record<string, unknown> => {\n const disableObservers =\n typeof meta.policy === 'object' && meta.policy !== null && (meta.policy as { readonly disableObservers?: unknown }).disableObservers === true\n\n return {\n ...meta,\n budgetEnvelope: makeRunBudgetEnvelopeV1({\n domain: 'flow',\n runId: resolveFlowRunId(name, meta, fallbackRunSeq),\n }),\n degrade: makeRunDegradeMarkerV1(disableObservers, disableObservers ? 'observer_disabled' : undefined),\n }\n}\n\nconst isRunConfig = <Sh extends AnyModuleShape, R, V, A, E>(\n input: unknown,\n): input is RunConfig<Sh, R, V, A, E> => {\n if (!input || typeof input !== 'object') {\n return false\n }\n const candidate = input as { readonly effect?: unknown; readonly mode?: unknown }\n if (!('effect' in candidate)) {\n return false\n }\n const mode = candidate.mode\n if (mode === undefined) {\n return true\n }\n return mode === 'task' || mode === 'parallel' || mode === 'latest' || mode === 'exhaust'\n}\n\nexport const make = <Sh extends AnyModuleShape, R = never>(\n runtime: ModuleRuntime<StateOf<Sh>, ActionOf<Sh>>,\n runtimeInternals?: RuntimeInternals,\n): Api<Sh, R> => {\n let flowBudgetRunSeq = 0\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 interface FlowOpRunContext {\n readonly stack: EffectOp.MiddlewareStack\n readonly hasMiddleware: boolean\n readonly metaTemplate: Record<string, unknown>\n readonly hasFiniteTemplateOpSeq: boolean\n readonly allocateOpSeq?: () => number\n }\n\n const makeFlowOpRunContext = (\n options?: Logic.OperationOptions,\n ): Effect.Effect<FlowOpRunContext, never, any> =>\n Effect.gen(function* () {\n const stack = yield* getMiddlewareStack()\n if (stack.length === 0) {\n return {\n stack,\n hasMiddleware: false,\n metaTemplate: {},\n hasFiniteTemplateOpSeq: false,\n allocateOpSeq: undefined,\n }\n }\n\n const sessionOpt = yield* Effect.serviceOption(RunSessionTag)\n\n const metaTemplate: Record<string, unknown> = {\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 const hasFiniteTemplateOpSeq =\n typeof metaTemplate.opSeq === 'number' && Number.isFinite(metaTemplate.opSeq)\n const runSessionLocal = Option.isSome(sessionOpt) ? sessionOpt.value.local : undefined\n const opSeqKey = (metaTemplate.instanceId as string | undefined) ?? 'global'\n const allocateOpSeq = runSessionLocal\n ? () => runSessionLocal.nextSeq('opSeq', opSeqKey)\n : undefined\n\n return {\n stack,\n hasMiddleware: true,\n metaTemplate,\n hasFiniteTemplateOpSeq,\n allocateOpSeq,\n }\n })\n\n const buildFlowOpMeta = (context: FlowOpRunContext): Record<string, unknown> => {\n if (context.hasFiniteTemplateOpSeq) {\n // Keep per-op meta isolation when caller provided a fixed opSeq.\n return { ...context.metaTemplate }\n }\n if (context.allocateOpSeq) {\n return {\n ...context.metaTemplate,\n opSeq: context.allocateOpSeq(),\n }\n }\n // No in-session opSeq allocation: share template and let EffectOp.make fill opSeq.\n return context.metaTemplate\n }\n\n const runAsFlowOp = <A, E, R2, V>(\n context: FlowOpRunContext,\n name: string,\n payload: V,\n eff: LogicEffect<Sh, R & R2, A, E>,\n ): LogicEffect<Sh, R & R2, A, E> => {\n if (!context.hasMiddleware) {\n return eff\n }\n return Effect.gen(function* () {\n flowBudgetRunSeq += 1\n const meta = withFlowRunBudgetMeta(name, buildFlowOpMeta(context), flowBudgetRunSeq)\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, context.stack)\n }) as any\n }\n\n const makeFlowOpMapper = <T, A, E, R2>(\n context: FlowOpRunContext,\n name: string,\n resolver: EffectResolver<T, Sh, R & R2, A, E>,\n ) => {\n if (!context.hasMiddleware) {\n return resolver\n }\n return (payload: T) => runAsFlowOp<A, E, R2, T>(context, name, payload, resolver(payload))\n }\n\n const runStreamWithMode =\n <T, A, E, R2>(\n mode: ModeRunner.ModeRunnerMode,\n name: 'flow.run' | 'flow.runParallel' | 'flow.runLatest' | 'flow.runExhaust',\n resolver: EffectResolver<T, Sh, R & R2, A, E>,\n options?: Logic.OperationOptions,\n ) =>\n (stream: Stream.Stream<T>): LogicEffect<Sh, R & R2, void, E> =>\n Effect.gen(function* () {\n const context = yield* makeFlowOpRunContext(options)\n const mapper = makeFlowOpMapper<T, A, E, R2>(context, name, resolver)\n\n return yield* ModeRunner.runByMode<T, E, any>({\n stream,\n mode,\n run: mapper,\n resolveConcurrencyLimit: resolveConcurrencyLimit(),\n latest: {\n strategy: 'switch',\n },\n })\n }) as any\n\n const runStreamParallelWithDiagnostics =\n <T, A, E, R2>(resolver: EffectResolver<T, Sh, R & R2, A, E>, options?: Logic.OperationOptions) =>\n (stream: Stream.Stream<T>): LogicEffect<Sh, R & R2, void, E> =>\n runStreamWithMode<T, A, E, R2>('parallel', 'flow.runParallel', resolver, options)(stream).pipe(\n Effect.catchCause((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.flatMap(() => Effect.failCause(cause)))),\n ) as any\n\n const fromState = <V>(\n selectorOrQuery: ((s: StateOf<Sh>) => V) | ReadQuery.ReadQuery<StateOf<Sh>, V>,\n ): Stream.Stream<V> => {\n const runtimeWithReadQueryMeta = hasChangesReadQueryWithMeta<StateOf<Sh>>(runtime)\n ? runtime\n : undefined\n\n if (ReadQuery.isReadQuery(selectorOrQuery)) {\n if (runtimeWithReadQueryMeta) {\n return runtimeWithReadQueryMeta.changesReadQueryWithMeta(selectorOrQuery).pipe(Stream.map((evt) => evt.value))\n }\n return runtime.changes(selectorOrQuery.select)\n }\n\n if (!runtimeWithReadQueryMeta) {\n return runtime.changes(selectorOrQuery)\n }\n\n const compiled = ReadQuery.compile(selectorOrQuery)\n if (compiled.lane === 'static') {\n return runtimeWithReadQueryMeta.changesReadQueryWithMeta(compiled).pipe(Stream.map((evt) => evt.value))\n }\n\n return runtime.changes(selectorOrQuery)\n }\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,\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: (effOrConfig: unknown, options?: Logic.OperationOptions) => (stream) => {\n const mode = isRunConfig<Sh, any, any, any, any>(effOrConfig) ? (effOrConfig.mode ?? 'task') : 'task'\n const resolvedOptions = isRunConfig<Sh, any, any, any, any>(effOrConfig) ? effOrConfig.options : options\n const effect = isRunConfig<Sh, any, any, any, any>(effOrConfig) ? effOrConfig.effect : effOrConfig\n const resolver = preResolveEffectResolver<any, Sh, any, any, any>(effect as any)\n if (mode === 'parallel') {\n return runStreamParallelWithDiagnostics<any, any, any, any>(resolver, resolvedOptions)(stream) as any\n }\n return runStreamWithMode<any, any, any, any>(\n mode,\n mode === 'latest' ? 'flow.runLatest' : mode === 'exhaust' ? 'flow.runExhaust' : 'flow.run',\n resolver,\n resolvedOptions,\n )(stream) as any\n },\n\n runParallel: (eff, options) => (stream) =>\n runStreamParallelWithDiagnostics<any, any, any, any>(\n preResolveEffectResolver<any, Sh, any, any, any>(eff),\n options,\n )(stream),\n\n runLatest: (eff, options) => (stream) =>\n runStreamWithMode<any, any, any, any>(\n 'latest',\n 'flow.runLatest',\n preResolveEffectResolver<any, Sh, any, any, any>(eff),\n options,\n )(stream),\n\n runExhaust: (eff, options) => (stream) =>\n runStreamWithMode<any, any, any, any>(\n 'exhaust',\n 'flow.runExhaust',\n preResolveEffectResolver<any, Sh, any, any, any>(eff),\n options,\n )(stream),\n }\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","/**\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()\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 { 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' | 'missingBuildGrade'\n\nexport type EqualsKind = 'objectIs' | 'shallowStruct' | 'custom'\n\nexport type ReadQueryStrictGateRule =\n | 'denyFallbackReason'\n | 'requireStatic:global'\n | 'requireStatic:selectorId'\n | 'requireStatic:module'\n\nexport type ReadQueryQualitySource = 'build' | 'runtime_jit' | 'runtime_dynamic_fallback'\n\nexport interface ReadQueryStrictGateGrade {\n readonly evaluatedAt: 'build' | 'runtime'\n readonly verdict: 'PASS' | 'WARN' | 'FAIL'\n readonly rule?: ReadQueryStrictGateRule\n readonly fallbackReason?: ReadQueryFallbackReason\n}\n\nexport interface ReadQueryQualityMeta {\n readonly source: ReadQueryQualitySource\n readonly strictGate?: ReadQueryStrictGateGrade\n readonly reportId?: string\n readonly missingBuildGrade?: boolean\n}\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 readonly quality?: ReadQueryQualityMeta\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\nexport function isReadQueryCompiled<S, V>(input: ReadQueryInput<S, V> | ReadQueryCompiled<S, V>): input is ReadQueryCompiled<S, V>\nexport function isReadQueryCompiled(input: unknown): input is ReadQueryCompiled<any, any>\nexport function isReadQueryCompiled(input: unknown): input is ReadQueryCompiled<any, any> {\n if (!input || typeof input !== 'object') return false\n const maybe = input as any\n return (\n typeof maybe.selectorId === 'string' &&\n typeof maybe.select === 'function' &&\n Array.isArray(maybe.reads) &&\n maybe.staticIr != null &&\n typeof maybe.lane === 'string' &&\n typeof maybe.producer === 'string'\n )\n}\n\nexport const hasBuildQualityGrade = (compiled: ReadQueryCompiled<any, any>): boolean =>\n compiled.quality?.source === 'build' && compiled.quality.strictGate?.evaluatedAt === 'build'\n\nexport const shouldEvaluateStrictGateAtRuntime = (compiled: ReadQueryCompiled<any, any>): boolean =>\n compiled.lane === 'dynamic' && !hasBuildQualityGrade(compiled)\n\nexport const markRuntimeMissingBuildGrade = <S, V>(compiled: ReadQueryCompiled<S, V>): ReadQueryCompiled<S, V> => {\n if (compiled.lane !== 'dynamic' || hasBuildQualityGrade(compiled)) return compiled\n if (compiled.quality?.missingBuildGrade === true && compiled.fallbackReason === 'missingBuildGrade') return compiled\n return {\n ...compiled,\n fallbackReason: 'missingBuildGrade',\n staticIr: {\n ...compiled.staticIr,\n fallbackReason: 'missingBuildGrade',\n },\n quality: {\n ...(compiled.quality ?? {}),\n source: 'runtime_dynamic_fallback',\n missingBuildGrade: true,\n },\n }\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()\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] < b[0] ? -1 : a[0] > b[0] ? 1 : 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: ReadQueryStrictGateRule\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 resolveBuildGradeStrictGateDecision = (args: {\n readonly moduleId: string\n readonly instanceId: string\n readonly txnSeq: number\n readonly compiled: ReadQueryCompiled<any, any>\n}): ReadQueryStrictGateDecision | undefined => {\n if (args.compiled.quality?.source !== 'build') return undefined\n const grade = args.compiled.quality.strictGate\n if (!grade || grade.evaluatedAt !== 'build') return undefined\n if (grade.verdict === 'PASS') return undefined\n\n const fallbackReason = (grade.fallbackReason ?? args.compiled.fallbackReason ?? 'missingDeps') as ReadQueryFallbackReason\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: grade.rule ?? 'requireStatic:global',\n }\n\n const config: ReadQueryStrictGateConfig = {\n mode: grade.verdict === 'WARN' ? 'warn' : 'error',\n }\n const diagnostic = makeStrictGateDiagnostic({ config, details })\n\n if (grade.verdict === 'WARN') {\n return { verdict: 'WARN', diagnostic, details }\n }\n\n return {\n verdict: 'FAIL',\n diagnostic,\n error: makeStrictGateError({ details }),\n details,\n }\n}\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: ReadQueryStrictGateRule = 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","export const DIAGNOSTICS_BUDGET_CONTRACT_V1 = 'diagnostics_budget.v1' as const\n\nexport type RunBudgetDomain = 'process' | 'workflow' | 'flow'\n\nexport type RunBudgetEnvelopeV1 = {\n readonly contract: typeof DIAGNOSTICS_BUDGET_CONTRACT_V1\n readonly domain: RunBudgetDomain\n readonly runId: string\n readonly limits?: {\n readonly maxEvents?: number\n readonly maxBytes?: number\n }\n readonly usage?: {\n readonly emitted?: number\n readonly dropped?: number\n readonly downgraded?: number\n }\n}\n\nexport type RunDegradeReasonV1 =\n | 'budget_exceeded'\n | 'payload_oversized'\n | 'payload_non_serializable'\n | 'observer_disabled'\n | 'sampled_out'\n | 'unknown'\n\nexport type RunDegradeMarkerV1 = {\n readonly contract: typeof DIAGNOSTICS_BUDGET_CONTRACT_V1\n readonly degraded: boolean\n readonly reason?: RunDegradeReasonV1\n}\n\nconst normalizePositiveInteger = (value: unknown): number | undefined => {\n if (typeof value !== 'number' || !Number.isFinite(value) || value < 0) return undefined\n return Math.floor(value)\n}\n\nexport const makeRunBudgetEnvelopeV1 = (args: {\n readonly domain: RunBudgetDomain\n readonly runId: string\n readonly limits?: {\n readonly maxEvents?: number\n readonly maxBytes?: number\n }\n readonly usage?: {\n readonly emitted?: number\n readonly dropped?: number\n readonly downgraded?: number\n }\n}): RunBudgetEnvelopeV1 => {\n const maxEvents = normalizePositiveInteger(args.limits?.maxEvents)\n const maxBytes = normalizePositiveInteger(args.limits?.maxBytes)\n const emitted = normalizePositiveInteger(args.usage?.emitted)\n const dropped = normalizePositiveInteger(args.usage?.dropped)\n const downgraded = normalizePositiveInteger(args.usage?.downgraded)\n\n return {\n contract: DIAGNOSTICS_BUDGET_CONTRACT_V1,\n domain: args.domain,\n runId: args.runId,\n ...((maxEvents !== undefined || maxBytes !== undefined\n ? {\n limits: {\n ...(maxEvents !== undefined ? { maxEvents } : null),\n ...(maxBytes !== undefined ? { maxBytes } : null),\n },\n }\n : null) as object),\n ...((emitted !== undefined || dropped !== undefined || downgraded !== undefined\n ? {\n usage: {\n ...(emitted !== undefined ? { emitted } : null),\n ...(dropped !== undefined ? { dropped } : null),\n ...(downgraded !== undefined ? { downgraded } : null),\n },\n }\n : null) as object),\n } satisfies RunBudgetEnvelopeV1\n}\n\nexport const makeRunDegradeMarkerV1 = (\n degraded: boolean,\n reason?: RunDegradeReasonV1,\n): RunDegradeMarkerV1 => ({\n contract: DIAGNOSTICS_BUDGET_CONTRACT_V1,\n degraded,\n ...(degraded && reason ? { reason } : null),\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.die(new Error('[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.die(new Error('[FluentMatchTag] Non-exhaustive match: no tag handler matched value'))\n },\n }\n\n return chain\n}\n","import { Effect, ServiceMap } 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 class Tag extends ServiceMap.Service<Tag, Service>()('@logixjs/Platform') {}\n","import { Cause, Effect, Ref, ServiceMap } 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 class LifecycleContext extends ServiceMap.Service<LifecycleContext, 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.hasInterruptsOnly(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.flatMap(() =>\n Effect.forEach(\n onErrorHandlers,\n (handler) =>\n handler(cause, context).pipe(\n Effect.catchCause((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.flatMap(() =>\n Effect.forEach(\n start,\n (task) =>\n Effect.forkScoped(\n task.effect.pipe(\n Effect.catchCause((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 ).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.catchCause((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 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.catchCause((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 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.catchCause((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 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.catchCause((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 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 { Cause, Effect, ServiceMap } 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)\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 class LogicPhaseServiceTag extends ServiceMap.Service<\n LogicPhaseServiceTag,\n LogicPhaseService\n>()('@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 ServiceMap.Service<\n LogicUnitServiceTag,\n LogicUnitService\n>()('@logixjs/LogicUnitService') {}\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.reasons\n .filter((reason) => Cause.isFailReason(reason) || Cause.isDieReason(reason))\n .map((reason) => (Cause.isFailReason(reason) ? reason.error : reason.defect))\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","import { Deferred, Effect, Layer, ServiceMap } 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: ServiceMap.Key<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: ServiceMap.Key<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: ServiceMap.Key<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* Effect.service(RootContextTag).pipe(Effect.orDie)\n\n const rootContext = root.context ?? (options?.waitForReady ? yield* Deferred.await(root.ready) : undefined)\n\n if (!rootContext) {\n return yield* Effect.die(\n makeMissingRootProviderError(tag as ServiceMap.Key<any, any>, entrypoint, 'reason: rootContextNotReady'),\n )\n }\n\n try {\n return ServiceMap.get(rootContext, tag as ServiceMap.Key<any, any>) as Svc\n } catch {\n return yield* Effect.die(makeMissingRootProviderError(tag as ServiceMap.Key<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: ServiceMap.ServiceMap<any>): Layer.Layer<any, never, any> =>\n Layer.effect(\n RootContextTag,\n Effect.gen(function* () {\n const ready = yield* Deferred.make<ServiceMap.ServiceMap<any>>()\n yield* Deferred.succeed(ready, context)\n const root: RootContext = { context, ready, lifecycle: { state: 'ready' } }\n return root\n }),\n )\n","import { Deferred, Effect, ServiceMap } from 'effect'\n\nexport type RootContextLifecycleState = 'uninitialized' | 'merged' | 'ready' | 'failed'\n\nexport type RootContextLifecycleReasonCode =\n | 'root_context::merge_duplicate'\n | 'root_context::ready_without_merge'\n | 'root_context::ready_after_failed'\n | 'root_context::ready_duplicate'\n\nexport interface RootContextLifecycle {\n readonly state: RootContextLifecycleState\n readonly reasonCode?: RootContextLifecycleReasonCode\n}\n\nexport class RootContextLifecycleError extends Error {\n readonly _tag = 'RootContextLifecycleError'\n\n constructor(\n readonly reasonCode: RootContextLifecycleReasonCode,\n readonly fromState: RootContextLifecycleState,\n message: string,\n ) {\n super(message)\n this.name = 'RootContextLifecycleError'\n }\n}\n\nexport interface RootContext {\n context: ServiceMap.ServiceMap<any> | undefined\n readonly ready: Deferred.Deferred<ServiceMap.ServiceMap<any>, never>\n lifecycle: RootContextLifecycle\n readonly appId?: string\n readonly appModuleIds?: ReadonlyArray<string>\n}\n\nclass RootContextTagImpl extends ServiceMap.Service<RootContextTagImpl, RootContext>()('@logixjs/core/RootContext') {}\n\nexport const RootContextTag = RootContextTagImpl\n\nconst failRootContextTransition = (\n root: RootContext,\n reasonCode: RootContextLifecycleReasonCode,\n message: string,\n): RootContextLifecycleError => {\n const fromState = root.lifecycle.state\n root.lifecycle = { state: 'failed', reasonCode }\n return new RootContextLifecycleError(reasonCode, fromState, message)\n}\n\nexport const makeRootContext = (args?: {\n readonly appId?: string\n readonly appModuleIds?: ReadonlyArray<string>\n}): Effect.Effect<RootContext, never, never> =>\n Effect.gen(function* () {\n const ready = yield* Deferred.make<ServiceMap.ServiceMap<any>>()\n return {\n context: undefined,\n ready,\n lifecycle: { state: 'uninitialized' },\n appId: args?.appId,\n appModuleIds: args?.appModuleIds,\n } satisfies RootContext\n })\n\nexport const mergeRootContext = (\n root: RootContext,\n context: ServiceMap.ServiceMap<any>,\n): Effect.Effect<RootContext, RootContextLifecycleError, never> =>\n Effect.gen(function* () {\n if (root.context !== undefined || root.lifecycle.state !== 'uninitialized') {\n return yield* Effect.fail(\n failRootContextTransition(\n root,\n 'root_context::merge_duplicate',\n '[Logix] RootContext merge duplicated during app assembly.',\n ),\n )\n }\n\n root.context = context\n root.lifecycle = { state: 'merged' }\n return root\n })\n\nexport const readyRootContext = (root: RootContext): Effect.Effect<void, RootContextLifecycleError, never> =>\n Effect.gen(function* () {\n if (root.lifecycle.state === 'failed') {\n return yield* Effect.fail(\n failRootContextTransition(\n root,\n 'root_context::ready_after_failed',\n '[Logix] RootContext ready attempted after lifecycle entered failed state.',\n ),\n )\n }\n\n if (root.context === undefined || root.lifecycle.state === 'uninitialized') {\n return yield* Effect.fail(\n failRootContextTransition(\n root,\n 'root_context::ready_without_merge',\n '[Logix] RootContext ready attempted before merge during app assembly.',\n ),\n )\n }\n\n const readySucceeded = yield* Deferred.succeed(root.ready, root.context)\n if (!readySucceeded || root.lifecycle.state === 'ready') {\n return yield* Effect.fail(\n failRootContextTransition(\n root,\n 'root_context::ready_duplicate',\n '[Logix] RootContext ready was already completed before app assembly finished.',\n ),\n )\n }\n\n root.lifecycle = { state: 'ready' }\n })\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 { Cause, Effect, Exit, Scope } from 'effect'\nimport { DisposeError, DisposeTimeoutError, type ProgramIdentity } from './ProgramRunner.errors.js'\n\nexport const closeProgramScope = (params: {\n readonly scope: Scope.Closeable\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 result = yield* Effect.promise<Exit.Exit<void, never> | { readonly _tag: 'Timeout' }>(() =>\n new Promise((resolve) => {\n const timer = setTimeout(() => resolve({ _tag: 'Timeout' as const }), params.timeoutMs)\n void Effect.runPromiseExit(Scope.close(params.scope, Exit.void)).then((exit) => {\n clearTimeout(timer)\n resolve(exit)\n })\n }),\n )\n\n if ((result as any)._tag === 'Timeout') {\n const error = new DisposeTimeoutError(params.identity, {\n timeoutMs: params.timeoutMs,\n elapsedMs: Date.now() - start,\n })\n\n if (typeof params.onError === 'function') {\n yield* params.onError(Cause.die(error)).pipe(Effect.catchCause(() => Effect.void))\n }\n\n return yield* Effect.die(error)\n }\n\n const exit = result as Exit.Exit<void, never>\n if (Exit.isSuccess(exit)) {\n return\n }\n\n return yield* Effect.die(new DisposeError(params.identity, exit.cause))\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","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.Closeable\n readonly enabled: boolean\n readonly onSignal?: () => Effect.Effect<void, never, never>\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 const effect = params.onSignal ? params.onSignal() : Scope.close(params.scope, Exit.void).pipe(Effect.asVoid)\n void Effect.runPromise(effect)\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 { 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\n ? -1\n : a.actionTag > b.actionTag\n ? 1\n : a.sourceKey < b.sourceKey\n ? -1\n : a.sourceKey > b.sourceKey\n ? 1\n : 0,\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 < b.kind ? -1 : a.kind > b.kind ? 1 : 0))\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 { ServiceMap, Stream } from 'effect'\nimport type * as LogixModule from './module.js'\nimport type { ReadQueryCompiled } from './runtime/core/ReadQuery.js'\n\nexport type ExternalStoreDescriptor =\n | {\n readonly kind: 'manual'\n readonly storeId: string\n }\n | {\n readonly kind: 'service'\n readonly storeId: string\n readonly tagId: string\n readonly tag: ServiceMap.Key<any, any>\n readonly map: (service: any) => {\n readonly getSnapshot: () => any\n readonly getServerSnapshot?: () => any\n readonly subscribe: (listener: () => void) => () => void\n }\n }\n | {\n readonly kind: 'subscriptionRef'\n readonly storeId: string\n readonly ref: LogixModule.ReadonlySubscriptionRef<any>\n }\n | {\n readonly kind: 'stream'\n readonly storeId: string\n readonly stream: Stream.Stream<any, any, any>\n readonly initial: unknown\n readonly initialHint: 'initial' | 'current'\n }\n | {\n readonly kind: 'module'\n readonly storeId: string\n readonly module: unknown\n readonly moduleId: string\n /**\n * Optional instance anchor when the caller passes a concrete ModuleRuntime handle.\n * - When omitted, the runtime resolves it from the module tag during install.\n */\n readonly instanceId?: string\n /**\n * Full compiled ReadQuery (includes select/equals); may carry non-serializable closures.\n * Static IR export MUST use `readQuery.staticIr` (JSON-friendly) and ignore non-serializable parts.\n */\n readonly readQuery: ReadQueryCompiled<any, any>\n }\n\nexport const EXTERNAL_STORE_DESCRIPTOR = Symbol.for('@logixjs/core/externalStoreDescriptor')\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 attachExternalStoreDescriptor = (store: object, descriptor: ExternalStoreDescriptor): void => {\n defineHidden(store, EXTERNAL_STORE_DESCRIPTOR, descriptor)\n}\n\nexport const getExternalStoreDescriptor = (store: unknown): ExternalStoreDescriptor | undefined => {\n if (!store || (typeof store !== 'object' && typeof store !== 'function')) return undefined\n return (store as any)[EXTERNAL_STORE_DESCRIPTOR] as ExternalStoreDescriptor | undefined\n}\n","import type { JsonValue } from '../observability/jsonValue.js'\n\nexport 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 TraitMetaSanitizeReport = Readonly<{\n /**\n * invalidInput:\n * - Input was not a plain object (e.g. string/array/function/etc).\n */\n readonly invalidInput?: boolean\n /**\n * unknownKeys:\n * - Top-level keys that are ignored (not part of TraitMeta, and not `x-*` legacy annotations).\n */\n readonly unknownKeys?: ReadonlyArray<string>\n readonly unknownKeyCount?: number\n /**\n * droppedKeys:\n * - Known keys that exist but are dropped due to invalid value type (e.g. tags is not string/array).\n */\n readonly droppedKeys?: ReadonlyArray<string>\n /**\n * droppedTagItems:\n * - Number of non-string/empty tag items dropped during normalization.\n */\n readonly droppedTagItems?: number\n /**\n * annotations:\n * - Only accepts `x-*` keys; invalid keys/values are dropped.\n */\n readonly ignoredAnnotationKeys?: ReadonlyArray<string>\n readonly ignoredAnnotationKeyCount?: number\n readonly droppedAnnotationKeys?: ReadonlyArray<string>\n readonly droppedAnnotationKeyCount?: number\n readonly droppedAnnotationValues?: number\n readonly droppedAnnotationNonSerializable?: number\n readonly droppedAnnotationDepthExceeded?: number\n readonly droppedAnnotationNonFiniteNumber?: number\n}>\n\nexport type TraitMetaConflict = Readonly<{\n readonly origin: string\n readonly meta: TraitMeta\n}>\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()\n}\n\nconst isPlainRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\ntype SanitizeJsonValueStats = {\n dropped: number\n nonSerializable: number\n depthExceeded: number\n nonFiniteNumber: number\n}\n\nconst sanitizeJsonValue = (input: unknown, depth: number, stats: SanitizeJsonValueStats): 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 if (!Number.isFinite(input)) {\n stats.dropped += 1\n stats.nonSerializable += 1\n stats.nonFiniteNumber += 1\n return undefined\n }\n return input\n }\n\n if (depth >= 6) {\n stats.dropped += 1\n stats.depthExceeded += 1\n return undefined\n }\n\n if (Array.isArray(input)) {\n const out: Array<JsonValue> = []\n for (const item of input) {\n const v = sanitizeJsonValue(item, depth + 1, stats)\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, stats)\n if (v !== undefined) out[key] = v\n }\n return out\n }\n\n stats.dropped += 1\n stats.nonSerializable += 1\n return undefined\n}\n\nconst pushSample = (target: Array<string>, value: string, limit: number): void => {\n if (target.length >= limit) return\n target.push(value)\n}\n\nexport const sanitizeWithReport = (input: unknown): Readonly<{\n readonly meta?: TraitMeta\n readonly report?: TraitMetaSanitizeReport\n}> => {\n if (input === null || input === undefined) return {}\n if (typeof input !== 'object' || Array.isArray(input)) {\n return { report: { invalidInput: true } }\n }\n\n const record = input as Record<string, unknown>\n const out: Record<string, unknown> = {}\n\n const reportUnknownKeys: Array<string> = []\n let unknownKeyCount = 0\n const reportDroppedKeys: Array<string> = []\n let droppedTagItems = 0\n\n const reportIgnoredAnnotationKeys: Array<string> = []\n let ignoredAnnotationKeyCount = 0\n const reportDroppedAnnotationKeys: Array<string> = []\n let droppedAnnotationKeyCount = 0\n const stats: SanitizeJsonValueStats = { dropped: 0, nonSerializable: 0, depthExceeded: 0, nonFiniteNumber: 0 }\n\n const allowed = new Set([\n 'label',\n 'description',\n 'group',\n 'docsUrl',\n 'cacheGroup',\n 'canonical',\n 'tags',\n 'annotations',\n ])\n\n for (const key of Object.keys(record)) {\n if (allowed.has(key) || key.startsWith('x-')) continue\n unknownKeyCount += 1\n pushSample(reportUnknownKeys, key, 8)\n }\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 (canonical !== undefined && canonical !== null && typeof canonical !== 'boolean') {\n pushSample(reportDroppedKeys, 'canonical', 8)\n } else 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 raw = tagsRaw.filter((x): x is string => typeof x === 'string')\n droppedTagItems += tagsRaw.length - raw.length\n const tags = uniqSortedStrings(raw)\n if (tags.length > 0) out.tags = tags\n // count empty/whitespace tags dropped by uniqSortedStrings\n droppedTagItems += raw.length - tags.length\n } else if (tagsRaw !== undefined && tagsRaw !== null) {\n pushSample(reportDroppedKeys, 'tags', 8)\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()\n for (const key of annotationKeys) {\n const v = sanitizeJsonValue(record[key], 0, stats)\n if (v !== undefined) {\n annotations[key] = v\n } else {\n droppedAnnotationKeyCount += 1\n pushSample(reportDroppedAnnotationKeys, key, 8)\n }\n }\n\n // preferred: typed `annotations` field (only accepts `x-*` keys).\n const annotationsRaw = record.annotations\n if (annotationsRaw !== undefined && annotationsRaw !== null && !isPlainRecord(annotationsRaw)) {\n pushSample(reportDroppedKeys, 'annotations', 8)\n } else if (isPlainRecord(annotationsRaw)) {\n const keys = Object.keys(annotationsRaw)\n .sort()\n for (const key of keys) {\n if (!key.startsWith('x-')) {\n ignoredAnnotationKeyCount += 1\n pushSample(reportIgnoredAnnotationKeys, key, 8)\n continue\n }\n\n const v = sanitizeJsonValue(annotationsRaw[key], 0, stats)\n if (v !== undefined) {\n annotations[key] = v\n } else {\n droppedAnnotationKeyCount += 1\n pushSample(reportDroppedAnnotationKeys, key, 8)\n }\n }\n }\n\n if (Object.keys(annotations).length > 0) out.annotations = annotations\n\n // Dropped keys for invalid string fields (only track invalid types; empty string is ignored as low-signal).\n for (const key of ['label', 'description', 'group', 'docsUrl', 'cacheGroup'] as const) {\n const value = record[key]\n if (value !== undefined && value !== null && typeof value !== 'string') {\n pushSample(reportDroppedKeys, key, 8)\n }\n }\n\n const meta = Object.keys(out).length > 0 ? (out as TraitMeta) : undefined\n\n const report: TraitMetaSanitizeReport | undefined = (() => {\n const hasUnknownKeys = unknownKeyCount > 0\n const hasDroppedKeys = reportDroppedKeys.length > 0\n const hasDroppedTagItems = droppedTagItems > 0\n const hasIgnoredAnnotationKeys = ignoredAnnotationKeyCount > 0\n const hasDroppedAnnotations = droppedAnnotationKeyCount > 0 || stats.dropped > 0\n\n if (\n !hasUnknownKeys &&\n !hasDroppedKeys &&\n !hasDroppedTagItems &&\n !hasIgnoredAnnotationKeys &&\n !hasDroppedAnnotations\n ) {\n return undefined\n }\n\n return {\n ...(hasUnknownKeys ? { unknownKeys: reportUnknownKeys, unknownKeyCount } : {}),\n ...(hasDroppedKeys ? { droppedKeys: uniqSortedStrings(reportDroppedKeys) } : {}),\n ...(hasDroppedTagItems ? { droppedTagItems } : {}),\n ...(hasIgnoredAnnotationKeys\n ? { ignoredAnnotationKeys: uniqSortedStrings(reportIgnoredAnnotationKeys), ignoredAnnotationKeyCount }\n : {}),\n ...(hasDroppedAnnotations\n ? {\n droppedAnnotationKeys: uniqSortedStrings(reportDroppedAnnotationKeys),\n droppedAnnotationKeyCount,\n droppedAnnotationValues: stats.dropped,\n droppedAnnotationNonSerializable: stats.nonSerializable,\n droppedAnnotationDepthExceeded: stats.depthExceeded,\n droppedAnnotationNonFiniteNumber: stats.nonFiniteNumber,\n }\n : {}),\n } satisfies TraitMetaSanitizeReport\n })()\n\n return report ? { meta, report } : { meta }\n}\n\nexport const sanitize = (input: unknown): TraitMeta | undefined => sanitizeWithReport(input).meta\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 { StateTraitEntry, StateTraitPlanStep, StateTraitProgram } from './model.js'\nimport * as CanonicalFieldPath from '../field-path.js'\nimport { fnv1a32, stableStringify } from '../digest.js'\nimport { getExternalStoreDescriptor } from '../external-store-descriptor.js'\nimport * as Meta from './meta.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 'external-store-sync':\n return 'externalStore'\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 === 'externalStore') {\n return []\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 externalStorePolicy = (): Record<string, unknown> | undefined => {\n if (kind !== 'externalStore') return undefined\n if (!entry || entry.kind !== 'externalStore') return undefined\n\n const descriptor = getExternalStoreDescriptor((entry.meta as any).store)\n const storeId = descriptor?.storeId\n\n const priorityRaw = (entry.meta as any)?.priority\n const lane = priorityRaw === 'nonUrgent' ? 'nonUrgent' : 'urgent'\n\n const meta = Meta.sanitize((entry.meta as any).meta)\n\n const source =\n descriptor?.kind === 'module'\n ? {\n kind: 'module',\n storeId,\n moduleId: descriptor.moduleId,\n ...(descriptor.instanceId ? { instanceKey: descriptor.instanceId } : {}),\n selectorId: descriptor.readQuery.staticIr.selectorId,\n readsDigest: descriptor.readQuery.staticIr.readsDigest,\n fallbackReason: descriptor.readQuery.staticIr.fallbackReason,\n }\n : descriptor\n ? { kind: 'external', storeId }\n : { kind: 'external', storeId: 'unknown' }\n\n const coalesceWindowMs = (entry.meta as any)?.coalesceWindowMs\n\n return {\n traitId: step.id,\n storeId: storeId ?? 'unknown',\n source,\n ownership: 'external-owned',\n lane,\n ...(typeof coalesceWindowMs === 'number' && Number.isFinite(coalesceWindowMs) && coalesceWindowMs > 0\n ? { coalesceWindowMs }\n : {}),\n ...(meta ? { meta } : {}),\n }\n }\n\n const base: StaticIrNode = {\n nodeId: step.id,\n kind,\n reads,\n writes: kind === 'check' ? [] : writes,\n ...(kind === 'externalStore' ? { policy: externalStorePolicy() } : {}),\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 { 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 { Effect, Exit, Layer, ManagedRuntime, ServiceMap } from 'effect'\nimport {\n ConcurrencyPolicyTag,\n ReadQueryStrictGateConfigTag,\n SchedulingPolicySurfaceTag,\n StateTransactionConfigTag,\n declarativeLinkRuntimeLayer,\n hostSchedulerLayer,\n HostSchedulerTag,\n runtimeStoreLayer,\n tickSchedulerLayer,\n type ConcurrencyPolicy,\n type SchedulingPolicySurface,\n type ReadQueryStrictGateRuntimeConfig,\n type StateTransactionRuntimeConfig,\n} from './core/env.js'\nimport {\n AppAssemblyGraph,\n type AssemblyReasonCode,\n type AssemblyStageId,\n type BootAssemblyReport,\n} from './core/AppAssemblyGraph.js'\nimport {\n RootContextTag,\n makeRootContext,\n mergeRootContext,\n readyRootContext,\n type RootContext,\n} from './core/RootContext.js'\nimport type { HostScheduler } from './core/HostScheduler.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<ServiceMap.Key<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 * Optional HostScheduler override for this Runtime.\n *\n * IMPORTANT:\n * - Services like TickScheduler capture HostScheduler at Layer build-time (073).\n * - This option injects the override into the tick services build pipeline to avoid env-override pitfalls.\n */\n readonly hostScheduler?: HostScheduler\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 unified scheduling policy surface:\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 schedulingPolicy?: SchedulingPolicySurface\n /**\n * Legacy alias for schedulingPolicy (migration path).\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 readonly getAssemblyReport?: () => BootAssemblyReport | undefined\n}\n\ninterface TagInfo {\n readonly key: string\n readonly tag: ServiceMap.Key<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: ServiceMap.Key<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 ServiceMap.Key<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 appModuleIds = config.modules.map((entry) => String(entry.module.id))\n const appId = appModuleIds.length === 1 ? appModuleIds[0]! : appModuleIds.slice().sort().join('~')\n const assemblyGraph = new AppAssemblyGraph(appId)\n let latestAssemblyReport: BootAssemblyReport | undefined\n\n const failAndThrow = (stageId: AssemblyStageId, reasonCode: AssemblyReasonCode, error: unknown): never => {\n assemblyGraph.failStage(stageId, reasonCode, error)\n latestAssemblyReport = assemblyGraph.buildReport(false)\n throw error\n }\n\n assemblyGraph.beginStage('validate.modules')\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 const error = new Error(\n `[Logix] Duplicate Module ID/Tag detected: \"${id}\". \\nEnsure all modules in the application Runtime have unique IDs.`,\n )\n failAndThrow('validate.modules', 'boot::module_duplicate', error)\n }\n seenIds.add(id)\n }\n assemblyGraph.completeStage('validate.modules')\n\n // Validate tag collisions before merging layers.\n // This exposes \"the same ServiceTag implemented by multiple modules\" early, avoiding silent Env overrides.\n assemblyGraph.beginStage('validate.tags')\n try {\n validateTags(config.modules)\n assemblyGraph.completeStage('validate.tags')\n } catch (error) {\n failAndThrow('validate.tags', 'boot::tag_collision', error)\n }\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 const resolvedSchedulingPolicy = config.schedulingPolicy ?? config.concurrencyPolicy\n\n // If the Runtime provides a unified scheduling policy, attach the corresponding service to the app Env.\n // NOTE: ConcurrencyPolicyTag remains a legacy alias of SchedulingPolicySurfaceTag.\n const schedulingPolicyLayer: Layer.Layer<R, never, never> = resolvedSchedulingPolicy\n ? (Layer.succeed(SchedulingPolicySurfaceTag, resolvedSchedulingPolicy) 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 pinnedHostSchedulerLayer: Layer.Layer<any, never, never> | undefined =\n config.hostScheduler !== undefined\n ? (Layer.succeed(HostSchedulerTag, config.hostScheduler) as Layer.Layer<any, never, never>)\n : undefined\n\n const tickServicesLayer = Layer.provideMerge(pinnedHostSchedulerLayer ?? hostSchedulerLayer)(\n Layer.provideMerge(runtimeStoreLayer)(Layer.provideMerge(declarativeLinkRuntimeLayer)(tickSchedulerLayer())),\n )\n\n // Provide tick services as the baseline runtime env for caller layers.\n // This allows app layers to override TickScheduler/HostScheduler while still depending on RuntimeStore/DeclarativeLinkRuntime.\n const appLayer = (config.layer as Layer.Layer<any, never, never>).pipe(Layer.provide(tickServicesLayer))\n\n assemblyGraph.beginStage('build.baseLayer')\n const baseLayer = Layer.mergeAll(\n tickServicesLayer,\n appLayer,\n // If a HostScheduler override is requested, pin it as the final HostSchedulerTag value to avoid accidental divergence.\n // (Build-time capture is handled above by injecting it into tickServicesLayer.)\n pinnedHostSchedulerLayer ?? (Layer.empty as Layer.Layer<any, never, never>),\n stateTxnLayer,\n schedulingPolicyLayer,\n // Keep explicit legacy alias provisioning in the Env merge path so older callsites that reference\n // ConcurrencyPolicyTag keep identical behavior during phase-1 migration.\n resolvedSchedulingPolicy\n ? (Layer.succeed(ConcurrencyPolicyTag, resolvedSchedulingPolicy) as Layer.Layer<R, never, never>)\n : (Layer.empty as Layer.Layer<R, never, never>),\n readQueryStrictGateLayer,\n ProcessRuntime.layer(),\n Layer.effect(\n RootContextTag,\n makeRootContext({ appId, appModuleIds }),\n ),\n ) as Layer.Layer<R, never, never>\n assemblyGraph.completeStage('build.baseLayer')\n\n const runStage = <A>(\n stageId: AssemblyStageId,\n reasonCode: AssemblyReasonCode,\n effect: Effect.Effect<A, any, any>,\n ): Effect.Effect<A, any, any> =>\n Effect.gen(function* () {\n assemblyGraph.beginStage(stageId)\n const exit = yield* Effect.exit(effect)\n\n if (Exit.isSuccess(exit)) {\n assemblyGraph.completeStage(stageId)\n return exit.value\n }\n\n assemblyGraph.failStage(stageId, reasonCode, exit.cause)\n latestAssemblyReport = assemblyGraph.buildReport(false)\n return yield* Effect.failCause(exit.cause)\n })\n\n const finalLayer = Layer.unwrap(\n Effect.gen(function* () {\n // AppDefinition can be used to create multiple runtimes; reset graph state before each boot.\n assemblyGraph.reset()\n // These stages are validated/computed at makeApp-time and should appear as succeeded in every boot report.\n assemblyGraph.beginStage('validate.modules')\n assemblyGraph.completeStage('validate.modules')\n assemblyGraph.beginStage('validate.tags')\n assemblyGraph.completeStage('validate.tags')\n assemblyGraph.beginStage('build.baseLayer')\n assemblyGraph.completeStage('build.baseLayer')\n\n const scope = yield* Effect.scope\n\n // IMPORTANT (073):\n // - Build baseLayer first, then build module layers under baseEnv.\n // - Otherwise, module initialization may fork long-lived fibers (txnQueue/logics) before TickScheduler/RuntimeStore\n // is available, and those fibers will permanently miss the runtime services due to Env capture semantics.\n const env = yield* Effect.gen(function* () {\n const baseEnv = yield* runStage(\n 'build.baseEnv',\n 'boot::base_layer_build_failed',\n Layer.buildWithScope(baseLayer, scope),\n )\n\n const moduleEnv = yield* runStage(\n 'build.moduleEnvs',\n 'boot::module_layer_build_failed',\n config.modules.length > 0\n ? Effect.provide(\n Layer.buildWithScope(\n config.modules.length === 1\n ? config.modules[0]!.layer\n : config.modules.slice(1).reduce((acc, entry) => Layer.merge(acc, entry.layer), config.modules[0]!.layer),\n scope,\n ),\n baseEnv,\n )\n : Effect.succeed(undefined),\n )\n\n const mergedEnv = yield* runStage(\n 'merge.env',\n 'boot::env_merge_failed',\n Effect.sync(() => (moduleEnv ? ServiceMap.merge(baseEnv, moduleEnv) : baseEnv)),\n )\n\n const rootContext = yield* runStage(\n 'rootContext.merge',\n 'boot::root_context_merge_failed',\n Effect.flatMap(\n Effect.sync(() => ServiceMap.get(mergedEnv, RootContextTag as ServiceMap.Key<any, RootContext>)),\n (root) => mergeRootContext(root, mergedEnv as ServiceMap.ServiceMap<any>),\n ),\n )\n assemblyGraph.markRootContextMerged()\n\n yield* runStage(\n 'rootContext.ready',\n 'boot::root_context_ready_failed',\n readyRootContext(rootContext),\n )\n assemblyGraph.markRootContextReady()\n\n const processRuntime = ServiceMap.get(\n mergedEnv,\n ProcessRuntime.ProcessRuntimeTag as ServiceMap.Key<any, ProcessRuntime.ProcessRuntime>,\n )\n\n yield* runStage(\n 'process.install',\n 'boot::process_install_failed',\n 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 mergedEnv,\n )\n\n if (installation === undefined) {\n yield* Effect.provide(\n config.onError ? Effect.catchCause(process, config.onError) : process,\n mergedEnv,\n ).pipe(Effect.forkScoped())\n }\n }),\n { discard: true },\n ),\n )\n\n return mergedEnv\n })\n\n latestAssemblyReport = assemblyGraph.buildReport(true)\n\n return Layer.effectServices(Effect.succeed(env))\n }).pipe(\n Effect.catchCause((cause) =>\n Effect.gen(function* () {\n assemblyGraph.ensureFailure('boot::unknown', cause)\n latestAssemblyReport = assemblyGraph.buildReport(false)\n return yield* Effect.failCause(cause)\n }),\n ),\n ),\n ) as Layer.Layer<R, never, never>\n\n return {\n definition: config,\n layer: finalLayer,\n makeRuntime: () => ManagedRuntime.make(finalLayer),\n getAssemblyReport: () => latestAssemblyReport,\n }\n}\n\nexport const getAssemblyReport = <R>(app: AppDefinition<R>): BootAssemblyReport | undefined => app.getAssemblyReport?.()\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<ServiceMap.Key<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> => Layer.isLayer(value)\n","export type AssemblyStageId =\n | 'validate.modules'\n | 'validate.tags'\n | 'build.baseLayer'\n | 'build.baseEnv'\n | 'build.moduleEnvs'\n | 'merge.env'\n | 'rootContext.merge'\n | 'rootContext.ready'\n | 'process.install'\n\nexport type AssemblyStageStatus = 'pending' | 'running' | 'succeeded' | 'failed' | 'skipped'\n\nexport type AssemblyReasonCode =\n | 'boot::module_duplicate'\n | 'boot::tag_collision'\n | 'boot::base_layer_build_failed'\n | 'boot::module_layer_build_failed'\n | 'boot::env_merge_failed'\n | 'boot::root_context_merge_failed'\n | 'boot::root_context_ready_failed'\n | 'boot::process_install_failed'\n | 'boot::unknown'\n\ninterface AssemblyStageDefinition {\n readonly stageId: AssemblyStageId\n readonly dependsOn: ReadonlyArray<AssemblyStageId>\n}\n\nexport interface AppAssemblyGraphNode {\n readonly stageId: AssemblyStageId\n readonly stageSeq: number\n readonly dependsOn: ReadonlyArray<AssemblyStageId>\n readonly status: AssemblyStageStatus\n readonly durationMs?: number\n readonly reasonCode?: AssemblyReasonCode\n readonly message?: string\n}\n\ninterface MutableAppAssemblyGraphNode {\n stageId: AssemblyStageId\n stageSeq: number\n dependsOn: ReadonlyArray<AssemblyStageId>\n status: AssemblyStageStatus\n startedAtMs?: number\n durationMs?: number\n reasonCode?: AssemblyReasonCode\n message?: string\n}\n\nexport interface RootContextLifecycleRecord {\n readonly state: 'uninitialized' | 'merged' | 'ready' | 'failed'\n readonly mergedAtStageSeq?: number\n readonly readyAtStageSeq?: number\n readonly reasonCode?: AssemblyReasonCode\n}\n\nexport interface BootFailureDiagnostic {\n readonly stageId: AssemblyStageId\n readonly stageSeq: number\n readonly reasonCode: AssemblyReasonCode\n readonly message: string\n readonly upstreamStages: ReadonlyArray<AssemblyStageId>\n}\n\nexport interface BootAssemblyReport {\n readonly version: 1\n readonly appId: string\n readonly success: boolean\n readonly nodes: ReadonlyArray<AppAssemblyGraphNode>\n readonly rootContextLifecycle: RootContextLifecycleRecord\n readonly failure?: BootFailureDiagnostic\n}\n\nconst STAGE_DEFINITIONS: ReadonlyArray<AssemblyStageDefinition> = [\n { stageId: 'validate.modules', dependsOn: [] },\n { stageId: 'validate.tags', dependsOn: ['validate.modules'] },\n { stageId: 'build.baseLayer', dependsOn: ['validate.tags'] },\n { stageId: 'build.baseEnv', dependsOn: ['build.baseLayer'] },\n { stageId: 'build.moduleEnvs', dependsOn: ['build.baseEnv'] },\n { stageId: 'merge.env', dependsOn: ['build.moduleEnvs'] },\n { stageId: 'rootContext.merge', dependsOn: ['merge.env'] },\n { stageId: 'rootContext.ready', dependsOn: ['rootContext.merge'] },\n { stageId: 'process.install', dependsOn: ['rootContext.ready'] },\n]\n\nexport const APP_ASSEMBLY_STAGE_ORDER: ReadonlyArray<AssemblyStageDefinition> = STAGE_DEFINITIONS\n\nconst toSlimMessage = (error: unknown): string => {\n if (error instanceof Error && typeof error.message === 'string' && error.message.length > 0) {\n return error.message\n }\n\n const message = (error as { message?: unknown } | null)?.message\n if (typeof message === 'string' && message.length > 0) {\n return message\n }\n\n if (typeof error === 'string' && error.length > 0) {\n return error\n }\n\n try {\n return JSON.stringify(error)\n } catch {\n return String(error)\n }\n}\n\nexport class AppAssemblyGraph {\n private readonly nodes: Array<MutableAppAssemblyGraphNode>\n private readonly nodeIndex: ReadonlyMap<AssemblyStageId, MutableAppAssemblyGraphNode>\n private rootContextLifecycle: RootContextLifecycleRecord = { state: 'uninitialized' }\n private failure: BootFailureDiagnostic | undefined\n\n constructor(private readonly appId: string) {\n const mutableNodes: Array<MutableAppAssemblyGraphNode> = STAGE_DEFINITIONS.map((stage, index) => ({\n stageId: stage.stageId,\n stageSeq: index + 1,\n dependsOn: stage.dependsOn,\n status: 'pending',\n }))\n\n this.nodes = mutableNodes\n this.nodeIndex = new Map(mutableNodes.map((node) => [node.stageId, node] as const))\n }\n\n reset(): void {\n for (const node of this.nodes) {\n node.status = 'pending'\n node.startedAtMs = undefined\n node.durationMs = undefined\n node.reasonCode = undefined\n node.message = undefined\n }\n this.rootContextLifecycle = { state: 'uninitialized' }\n this.failure = undefined\n }\n\n beginStage(stageId: AssemblyStageId): void {\n const node = this.getNode(stageId)\n if (node.status === 'pending') {\n node.status = 'running'\n node.startedAtMs = Date.now()\n }\n }\n\n completeStage(stageId: AssemblyStageId): void {\n const node = this.getNode(stageId)\n node.status = 'succeeded'\n node.durationMs = this.computeDurationMs(node)\n }\n\n failStage(stageId: AssemblyStageId, reasonCode: AssemblyReasonCode, error: unknown): void {\n const node = this.getNode(stageId)\n node.status = 'failed'\n node.durationMs = this.computeDurationMs(node)\n node.reasonCode = reasonCode\n node.message = toSlimMessage(error)\n\n this.failure = {\n stageId,\n stageSeq: node.stageSeq,\n reasonCode,\n message: node.message,\n upstreamStages: node.dependsOn,\n }\n\n if (stageId === 'rootContext.merge' || stageId === 'rootContext.ready') {\n this.markRootContextFailed(reasonCode)\n }\n\n for (const currentNode of this.nodes) {\n if (currentNode.stageSeq > node.stageSeq && currentNode.status === 'pending') {\n currentNode.status = 'skipped'\n }\n }\n }\n\n ensureFailure(reasonCode: AssemblyReasonCode, error: unknown): void {\n if (this.failure) {\n return\n }\n\n const fallbackNode =\n this.nodes.find((node) => node.status === 'running') ??\n this.nodes.find((node) => node.status === 'pending') ??\n this.nodes[this.nodes.length - 1]\n\n if (!fallbackNode) {\n return\n }\n\n this.failStage(fallbackNode.stageId, reasonCode, error)\n }\n\n markRootContextMerged(): void {\n const mergeStageSeq = this.getNode('rootContext.merge').stageSeq\n this.rootContextLifecycle = {\n state: this.rootContextLifecycle.state === 'ready' ? 'ready' : 'merged',\n mergedAtStageSeq: mergeStageSeq,\n readyAtStageSeq: this.rootContextLifecycle.readyAtStageSeq,\n reasonCode: this.rootContextLifecycle.reasonCode,\n }\n }\n\n markRootContextReady(): void {\n const readyStageSeq = this.getNode('rootContext.ready').stageSeq\n this.rootContextLifecycle = {\n state: 'ready',\n mergedAtStageSeq: this.rootContextLifecycle.mergedAtStageSeq,\n readyAtStageSeq: readyStageSeq,\n reasonCode: undefined,\n }\n }\n\n buildReport(success: boolean): BootAssemblyReport {\n return {\n version: 1,\n appId: this.appId,\n success,\n nodes: this.nodes.map((node) => ({\n stageId: node.stageId,\n stageSeq: node.stageSeq,\n dependsOn: node.dependsOn,\n status: node.status,\n durationMs: node.durationMs,\n reasonCode: node.reasonCode,\n message: node.message,\n })),\n rootContextLifecycle: { ...this.rootContextLifecycle },\n failure: this.failure ? { ...this.failure } : undefined,\n }\n }\n\n private markRootContextFailed(reasonCode: AssemblyReasonCode): void {\n this.rootContextLifecycle = {\n state: 'failed',\n mergedAtStageSeq: this.rootContextLifecycle.mergedAtStageSeq,\n readyAtStageSeq: this.rootContextLifecycle.readyAtStageSeq,\n reasonCode,\n }\n }\n\n private getNode(stageId: AssemblyStageId): MutableAppAssemblyGraphNode {\n const node = this.nodeIndex.get(stageId)\n if (!node) {\n throw new Error(`[Logix] Unknown assembly stage: ${stageId}`)\n }\n return node\n }\n\n private computeDurationMs(node: MutableAppAssemblyGraphNode): number | undefined {\n if (node.startedAtMs === undefined) {\n return undefined\n }\n\n return Math.max(0, Date.now() - node.startedAtMs)\n }\n}\n","import { Cause, Deferred, Effect, Fiber, Layer, Option, PubSub, Queue, Ref, ServiceMap, Scope, Stream } 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 { resolveSchemaAst } from './selectorSchema.js'\nimport { compileProcessTriggerStartPlan, type ProcessTriggerStartPlan } from './triggerStartPlan.js'\nimport { makeNonPlatformTriggerStreamFactory } from './triggerStreams.js'\nimport { moduleRuntimeTagFromModuleId } from '../../../serviceId.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 PlatformEventTriggerSpec = Extract<ProcessTriggerSpec, { readonly kind: 'platformEvent' }>\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: ServiceMap.ServiceMap<any>\n forkScope: Scope.Scope\n readonly process: Effect.Effect<void, any, unknown>\n readonly kind: Meta.ProcessMeta['kind']\n readonly platformEventTriggerIndex: ReadonlyMap<string, ReadonlyArray<PlatformEventTriggerSpec>>\n readonly platformEventNames: ReadonlyArray<string>\n readonly startPlan: ProcessTriggerStartPlan\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.Fiber<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 ServiceMap.Service<ProcessRuntimeTag, ProcessRuntime>()('@logixjs/core/ProcessRuntime') {}\n\nconst currentProcessTrigger = ServiceMap.Reference<ProcessTrigger | undefined>('@logixjs/core/ProcessRuntime.currentTrigger', {\n defaultValue: () => undefined,\n})\nconst currentProcessEventBudget = ServiceMap.Reference<Ref.Ref<ProcessEvents.ProcessRunEventBudgetState> | undefined>(\n '@logixjs/core/ProcessRuntime.currentEventBudget',\n {\n defaultValue: () => undefined,\n },\n)\nconst RUNTIME_BOOT_EVENT = 'runtime:boot' as const\nconst PROCESS_EVENT_HISTORY_MAX_CAPACITY = 0xffff_fffe\n\nconst deriveDebugModuleId = (processId: string): string => `process:${processId}`\n\ntype ProcessDispatchPayload = NonNullable<ProcessEvent['dispatch']>\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\ntype ProcessTriggerChainKernel = {\n readonly assignTriggerSeq: (trigger: ProcessTrigger) => ProcessTrigger\n readonly run: (trigger: ProcessTrigger, fatal: Deferred.Deferred<Cause.Cause<any>>) => Effect.Effect<void>\n readonly onDrop: (trigger: ProcessTrigger) => Effect.Effect<void>\n}\n\nconst makeProcessTriggerChainKernel = (args: {\n readonly shouldRecordChainEvents: boolean\n readonly nextTriggerSeq: () => number\n readonly makeBudgetState: (trigger: ProcessTrigger) => ProcessEvents.ProcessRunEventBudgetState\n readonly emitTriggerEvent: (trigger: ProcessTrigger, severity: ProcessEvent['severity']) => Effect.Effect<void>\n readonly runWithoutChainBudget: (\n trigger: ProcessTrigger,\n fatal: Deferred.Deferred<Cause.Cause<any>>,\n ) => Effect.Effect<void>\n}): ProcessTriggerChainKernel => {\n const assignTriggerSeq = (trigger: ProcessTrigger): ProcessTrigger => {\n if (!args.shouldRecordChainEvents) {\n return trigger\n }\n return {\n ...trigger,\n triggerSeq: args.nextTriggerSeq(),\n }\n }\n\n const run = (trigger: ProcessTrigger, fatal: Deferred.Deferred<Cause.Cause<any>>): Effect.Effect<void> => {\n if (!args.shouldRecordChainEvents) {\n return args.runWithoutChainBudget(trigger, fatal)\n }\n\n return Effect.gen(function* () {\n const budgetRef = yield* Ref.make(args.makeBudgetState(trigger))\n return yield* Effect.provideService(args.emitTriggerEvent(trigger, 'info').pipe(Effect.flatMap(() => args.runWithoutChainBudget(trigger, fatal))), currentProcessEventBudget, budgetRef)\n })\n }\n\n const onDrop = (trigger: ProcessTrigger): Effect.Effect<void> => args.emitTriggerEvent(trigger, 'warning')\n\n return {\n assignTriggerSeq,\n run,\n onDrop,\n }\n}\n\nconst shouldNoopDueToSyncTxn = (scope: ProcessScope, kind: string): Effect.Effect<boolean, never, never> => {\n const moduleId = scope.type === 'moduleInstance' ? scope.moduleId : undefined\n const instanceId = scope.type === 'moduleInstance' ? scope.instanceId : undefined\n return Effect.provideService(\n 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 TaskRunner.inSyncTransactionFiber,\n false,\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\nconst buildPlatformEventTriggerIndex = (\n definition: ProcessDefinition,\n): ReadonlyMap<string, ReadonlyArray<PlatformEventTriggerSpec>> => {\n const index = new Map<string, PlatformEventTriggerSpec[]>()\n for (const trigger of definition.triggers) {\n if (trigger.kind !== 'platformEvent') continue\n const current = index.get(trigger.platformEvent)\n if (current) {\n current.push(trigger)\n } else {\n index.set(trigger.platformEvent, [trigger])\n }\n }\n return index\n}\n\nconst syncPlatformEventInstallations = (options: {\n installationKey: InstallationKey,\n previousEventNames: ReadonlyArray<string>\n nextTriggerIndex: ReadonlyMap<string, ReadonlyArray<PlatformEventTriggerSpec>>\n installationsByEventName: Map<string, Set<InstallationKey>>\n}): ReadonlyArray<string> => {\n for (const eventName of options.previousEventNames) {\n const current = options.installationsByEventName.get(eventName)\n if (!current) continue\n current.delete(options.installationKey)\n if (current.size === 0) {\n options.installationsByEventName.delete(eventName)\n }\n }\n\n const nextEventNames = Array.from(options.nextTriggerIndex.keys())\n for (const eventName of nextEventNames) {\n const current = options.installationsByEventName.get(eventName)\n if (current) {\n current.add(options.installationKey)\n } else {\n options.installationsByEventName.set(eventName, new Set([options.installationKey]))\n }\n }\n\n return nextEventNames\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 requestedMaxEventHistory =\n typeof options?.maxEventHistory === 'number' &&\n Number.isFinite(options.maxEventHistory) &&\n options.maxEventHistory >= 0\n ? Math.floor(options.maxEventHistory)\n : 500\n const maxEventHistory = Math.min(requestedMaxEventHistory, PROCESS_EVENT_HISTORY_MAX_CAPACITY)\n\n const installations = new Map<InstallationKey, InstallationState>()\n const installationsByPlatformEvent = new Map<string, Set<InstallationKey>>()\n const instances = new Map<ProcessInstanceId, InstanceState>()\n\n const eventHistoryCapacity = maxEventHistory > 0 ? maxEventHistory : 0\n const eventHistoryRing: ProcessEvent[] = []\n let eventHistoryStart = 0\n let eventHistorySize = 0\n const eventsHub = yield* PubSub.sliding<ProcessEvent>(Math.max(1, Math.min(2048, maxEventHistory)))\n\n const appendEventHistory = (event: ProcessEvent): void => {\n if (eventHistoryCapacity <= 0) {\n eventHistorySize = 0\n eventHistoryStart = 0\n return\n }\n\n if (eventHistorySize < eventHistoryCapacity) {\n const writeIndex = (eventHistoryStart + eventHistorySize) % eventHistoryCapacity\n if (writeIndex === eventHistoryRing.length) {\n eventHistoryRing.push(event)\n } else {\n eventHistoryRing[writeIndex] = event\n }\n eventHistorySize += 1\n return\n }\n\n eventHistoryRing[eventHistoryStart] = event\n eventHistoryStart = (eventHistoryStart + 1) % eventHistoryCapacity\n }\n\n const snapshotEventHistory = (): ReadonlyArray<ProcessEvent> => {\n if (eventHistoryCapacity <= 0 || eventHistorySize === 0) {\n return []\n }\n\n const snapshot = new Array<ProcessEvent>(eventHistorySize)\n for (let index = 0; index < eventHistorySize; index += 1) {\n const ringIndex = (eventHistoryStart + index) % eventHistoryCapacity\n snapshot[index] = eventHistoryRing[ringIndex] as ProcessEvent\n }\n return snapshot\n }\n\n const recordDebugEvent = (event: ProcessEvent): Effect.Effect<void> =>\n Effect.gen(function* () {\n const diagnosticsLevel = yield* Effect.service(Debug.currentDiagnosticsLevel).pipe(Effect.orDie)\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 budgetEnvelope: (event as any).budgetEnvelope,\n degrade: (event as any).degrade,\n txnSeq,\n txnId,\n } as any)\n })\n\n const publishEvent = (event: ProcessEvent): Effect.Effect<void> =>\n Effect.gen(function* () {\n appendEventHistory(event)\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* Effect.service(currentProcessEventBudget).pipe(Effect.orDie)\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 requires = installation.startPlan.dependencyModuleIds\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 const tag = moduleRuntimeTagFromModuleId(dep)\n const found = ServiceMap.getOption(installation.env, tag)\n if (Option.isNone(found)) {\n missing.push(dep)\n }\n }\n return missing\n }\n\n const buildModuleRuntimeRegistry = (\n installation: InstallationState,\n env: ServiceMap.ServiceMap<any>,\n ): ReadonlyMap<string, unknown> => {\n const registry = new Map<string, unknown>()\n for (const moduleId of installation.startPlan.dependencyModuleIds) {\n if (typeof moduleId !== 'string' || moduleId.length === 0 || registry.has(moduleId)) continue\n const tag = moduleRuntimeTagFromModuleId(moduleId)\n const found = ServiceMap.getOption(env, tag)\n if (Option.isSome(found)) {\n registry.set(moduleId, found.value)\n }\n }\n return registry\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, never, never> = (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.Closeable,\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.catchCause(() => 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 const moduleRuntimeRegistry = buildModuleRuntimeRegistry(installation, baseEnv)\n\n const makeWrappedEnv = (): ServiceMap.ServiceMap<any> => {\n if (!shouldRecordChainEvents) {\n return baseEnv\n }\n\n const requires = installation.startPlan.dispatchTracingModuleIds\n if (requires.length === 0) {\n return baseEnv\n }\n\n let nextEnv = baseEnv\n\n for (const moduleId of requires) {\n if (typeof moduleId !== 'string' || moduleId.length === 0) continue\n const tag = moduleRuntimeTagFromModuleId(moduleId)\n const found = ServiceMap.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* Effect.service(currentProcessTrigger).pipe(Effect.orDie)\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 yield* emit(\n makeDispatchEvent(trigger, {\n moduleId: dispatchModuleId,\n instanceId: dispatchInstanceId,\n actionId,\n }),\n )\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 = ServiceMap.add(nextEnv, tag, wrapped)\n }\n\n return nextEnv\n }\n\n const wrappedEnv = makeWrappedEnv()\n const providedProcess = Effect.provide(installation.process, wrappedEnv)\n\n const nextProcessEventMeta = () => ({\n identity,\n eventSeq: instanceState.nextEventSeq++,\n timestampMs: Date.now(),\n })\n\n const makeDispatchEvent = (\n trigger: ProcessTrigger,\n dispatch: ProcessDispatchPayload,\n ): ProcessEvent => ({\n type: 'process:dispatch',\n trigger,\n dispatch,\n severity: 'info',\n ...nextProcessEventMeta(),\n })\n\n const makeTriggerEvent = (\n trigger: ProcessTrigger,\n severity: ProcessEvent['severity'],\n error?: SerializableErrorSummary,\n ): ProcessEvent => ({\n type: 'process:trigger',\n trigger,\n severity,\n ...(error ? { error } : null),\n ...nextProcessEventMeta(),\n })\n\n const makeTriggerStream = makeNonPlatformTriggerStreamFactory({\n moduleRuntimeRegistry,\n shouldRecordChainEvents,\n actionIdFromUnknown,\n resolveRuntimeStateSchemaAst,\n withModuleHint,\n emitSelectorWarning: (trigger, warning) => emit(makeTriggerEvent(trigger, 'warning', warning)),\n })\n\n const makeRun = (trigger: ProcessTrigger, fatal: Deferred.Deferred<Cause.Cause<any>>): Effect.Effect<void> =>\n Effect.provideService(providedProcess.pipe(\n Effect.catchCause((cause) => {\n if (Cause.hasInterruptsOnly(cause)) {\n return Effect.void\n }\n return Deferred.succeed(fatal, cause).pipe(\n Effect.asVoid,\n Effect.catch(() => Effect.void),\n )\n }),\n ), currentProcessTrigger, trigger)\n\n const emitTriggerEvent = (trigger: ProcessTrigger, severity: ProcessEvent['severity']): Effect.Effect<void> => {\n if (!shouldRecordChainEvents) {\n return Effect.void\n }\n\n return emit(makeTriggerEvent(trigger, severity))\n }\n const triggerChainKernel = makeProcessTriggerChainKernel({\n shouldRecordChainEvents,\n nextTriggerSeq: () => instanceState.nextTriggerSeq++,\n makeBudgetState: (trigger) =>\n ProcessEvents.makeProcessRunEventBudgetState({\n runId: ProcessEvents.makeProcessRunBudgetRunId(identity, trigger),\n }),\n emitTriggerEvent,\n runWithoutChainBudget: makeRun,\n })\n\n const policy = installation.definition.concurrency\n const bootTrigger = installation.startPlan.bootTrigger\n\n const streamReady = yield* Deferred.make<void>()\n const markStreamReady: Effect.Effect<void> = Deferred.succeed(streamReady, undefined).pipe(Effect.asVoid)\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.startPlan.nonPlatformTriggers\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.catch(() => Effect.void),\n )\n }\n\n const runnerFiber = yield* Effect.forkScoped(\n ProcessConcurrency.runProcessTriggerStream({\n stream: triggerStream,\n policy,\n assignTriggerSeq: triggerChainKernel.assignTriggerSeq,\n run: (trigger) => triggerChainKernel.run(trigger, fatal),\n onDrop: triggerChainKernel.onDrop,\n onQueueOverflow: reportQueueOverflow,\n }),\n )\n\n // Ensure the trigger stream fiber has started pulling, otherwise moduleAction/moduleStateChange events\n // may be published before any subscriber exists (PubSub streams drop events without subscribers).\n //\n // We rely on the fiber reaching \"Suspended\" (typically blocked on a queue take) as a proxy that the\n // subscription has been established.\n for (let i = 0; i < 64; i++) {\n const exitOpt = yield* Fiber.await(runnerFiber).pipe(Effect.timeoutOption(0))\n if (Option.isSome(exitOpt)) {\n break\n }\n yield* Effect.yieldNow\n }\n yield* markStreamReady\n\n if (bootTrigger) {\n yield* Queue.offer(instanceState.platformTriggersQueue, bootTrigger)\n }\n\n const cause = yield* Deferred.await(fatal)\n yield* Fiber.interrupt(runnerFiber)\n return yield* Effect.failCause(cause)\n })\n\n const processFiberEffect = Effect.provideService(\n Effect.scoped(instanceProgram).pipe(\n Effect.ensuring(markStreamReady),\n Effect.catchCause((cause) =>\n Effect.gen(function* () {\n if (Cause.hasInterruptsOnly(cause)) {\n if (instanceState.status.status === 'stopping') {\n return\n }\n\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 pendingInstallation = installations.get(installationKey)\n if (pendingInstallation?.pendingStart) {\n pendingInstallation.pendingStart = undefined\n yield* startInstallation(installationKey)\n }\n return\n }\n\n const primary = Option.getOrElse(Cause.findErrorOption(cause), () => {\n const defects = cause.reasons.filter(Cause.isDieReason).map((reason) => reason.defect)\n return defects[0] ?? 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 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 TaskRunner.inSyncTransactionFiber,\n false,\n )\n\n const fiber = yield* Effect.forkIn(processFiberEffect, installation.forkScope)\n\n instanceState.fiber = fiber as Fiber.Fiber<unknown, unknown>\n instanceState.status = {\n ...instanceState.status,\n status: 'running',\n }\n\n // Hard guarantee: block until trigger subscriptions are acquired (or the instance fiber failed early).\n yield* Deferred.await(streamReady)\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.services<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 derived = Effect.suspend(() => process)\n Meta.attachMeta(derived, {\n ...meta,\n installationScope: options.scope,\n })\n\n const nextPlatformEventTriggerIndex = buildPlatformEventTriggerIndex(meta.definition)\n const nextStartPlan = compileProcessTriggerStartPlan(meta.definition)\n const existing = installations.get(installationKey)\n if (existing) {\n const updated: InstallationState = {\n ...existing,\n definition: meta.definition,\n env: env as ServiceMap.ServiceMap<any>,\n forkScope,\n process: derived as unknown as Effect.Effect<void, any, unknown>,\n kind: meta.kind ?? 'process',\n platformEventTriggerIndex: nextPlatformEventTriggerIndex,\n platformEventNames: syncPlatformEventInstallations({\n installationKey,\n previousEventNames: existing.platformEventNames,\n nextTriggerIndex: nextPlatformEventTriggerIndex,\n installationsByEventName: installationsByPlatformEvent,\n }),\n startPlan: nextStartPlan,\n enabled: options.enabled ?? existing.enabled,\n installedAt: options.installedAt ?? existing.installedAt,\n }\n installations.set(installationKey, updated)\n\n if (!updated.enabled) {\n updated.pendingStart = undefined\n return {\n identity,\n enabled: updated.enabled,\n installedAt: updated.installedAt,\n } satisfies ProcessInstallation\n }\n\n const currentId = updated.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 updated.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 updated.pendingStart = undefined\n }\n return {\n identity,\n enabled: updated.enabled,\n installedAt: updated.installedAt,\n } satisfies ProcessInstallation\n }\n\n if (status === 'stopping') {\n const mode: ProcessInstallMode = options.mode ?? 'switch'\n if (mode === 'switch') {\n updated.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 updated.pendingStart = undefined\n }\n return {\n identity,\n enabled: updated.enabled,\n installedAt: updated.installedAt,\n } satisfies ProcessInstallation\n }\n\n updated.pendingStart = undefined\n yield* startInstallation(installationKey)\n return {\n identity,\n enabled: updated.enabled,\n installedAt: updated.installedAt,\n } satisfies ProcessInstallation\n }\n\n const nextPlatformEventNames = syncPlatformEventInstallations({\n installationKey,\n previousEventNames: [],\n nextTriggerIndex: nextPlatformEventTriggerIndex,\n installationsByEventName: installationsByPlatformEvent,\n })\n\n const installation: InstallationState = {\n identity,\n scopeKey,\n definition: meta.definition,\n env: env as ServiceMap.ServiceMap<any>,\n forkScope,\n process: derived as unknown as Effect.Effect<void, any, unknown>,\n kind: meta.kind ?? 'process',\n platformEventTriggerIndex: nextPlatformEventTriggerIndex,\n platformEventNames: nextPlatformEventNames,\n startPlan: nextStartPlan,\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 eventName = event.eventName\n const installationKeys = installationsByPlatformEvent.get(eventName)\n if (!installationKeys || installationKeys.size === 0) {\n return\n }\n\n yield* Effect.forEach(\n installationKeys,\n (installationKey) =>\n Effect.suspend(() => {\n const installation = installations.get(installationKey)\n if (!installation) {\n return Effect.void\n }\n\n const currentInstanceId = installation.currentInstanceId\n if (!currentInstanceId) {\n return Effect.void\n }\n\n const instance = instances.get(currentInstanceId)\n if (!instance) {\n return Effect.void\n }\n\n if (instance.status.status !== 'starting' && instance.status.status !== 'running') {\n return Effect.void\n }\n\n const specs = installation.platformEventTriggerIndex.get(eventName)\n if (!specs || 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(snapshotEventHistory)\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.catchCause((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 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.effect(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 * as LatestFiberSlot from '../LatestFiberSlot.js'\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\nconst QUEUE_COMPACTION_MIN_CONSUMED = 64\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\ntype TriggerQueueState = {\n queue: ProcessTrigger[]\n queueStart: number\n peak: number\n}\n\nconst queueLength = (state: TriggerQueueState): number => state.queue.length - state.queueStart\n\nconst compactQueueIfNeeded = (state: TriggerQueueState): void => {\n if (state.queueStart === 0) return\n\n if (state.queueStart >= state.queue.length) {\n state.queue = []\n state.queueStart = 0\n return\n }\n\n // Keep dequeue O(1) on the hot path and compact only occasionally.\n if (state.queueStart >= QUEUE_COMPACTION_MIN_CONSUMED && state.queueStart * 2 >= state.queue.length) {\n state.queue = state.queue.slice(state.queueStart)\n state.queueStart = 0\n }\n}\n\nconst enqueueTrigger = (state: TriggerQueueState, trigger: ProcessTrigger): number => {\n state.queue.push(trigger)\n const size = queueLength(state)\n if (size > state.peak) {\n state.peak = size\n }\n return size\n}\n\nconst dequeueTrigger = (state: TriggerQueueState): ProcessTrigger | undefined => {\n if (state.queueStart >= state.queue.length) {\n state.queue = []\n state.queueStart = 0\n return undefined\n }\n const next = state.queue[state.queueStart]\n state.queueStart += 1\n compactQueueIfNeeded(state)\n return next\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* LatestFiberSlot.make()\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* LatestFiberSlot.beginRun(stateRef)\n\n if (prevFiber && prevRunningId !== 0) {\n yield* Fiber.interrupt(prevFiber)\n }\n\n const fiber = yield* args\n .run(trigger)\n .pipe(Effect.ensuring(LatestFiberSlot.clearIfCurrent(stateRef, runId)), Effect.forkScoped)\n\n yield* LatestFiberSlot.setFiberIfCurrent(stateRef, runId, 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 queueStart: 0,\n peak: 0,\n })\n const parallelStateRef = yield* Ref.make({\n active: 0,\n queue: [] as ProcessTrigger[],\n queueStart: 0,\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 || queueLength(state) === 0) {\n return [Option.none(), state] as const\n }\n const next = dequeueTrigger(state)\n if (next === undefined) {\n return [Option.none(), state] as const\n }\n state.running = true\n return [Option.some(next), state] 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(\n Ref.update(serialStateRef, (s) => {\n s.running = false\n return s\n }),\n ),\n Effect.flatMap(() => 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 || queueLength(state) === 0) {\n return [Option.none(), state] as const\n }\n const next = dequeueTrigger(state)\n if (next === undefined) {\n return [Option.none(), state] as const\n }\n state.active += 1\n return [Option.some(next), state] 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.active = Math.max(0, s.active - 1)\n return s\n }),\n ),\n Effect.flatMap(() => drainParallel()),\n ),\n ).pipe(Effect.asVoid, Effect.flatMap(() => 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, peak] = yield* Ref.modify(parallelStateRef, (state) => {\n const size = enqueueTrigger(state, trigger)\n return [[size, state.peak] as const, state] as const\n })\n\n if (nextSize > parallelQueueLimit.guard) {\n yield* args.onQueueOverflow({\n mode: 'parallel',\n currentLength: nextSize,\n peak,\n limit: parallelQueueLimit,\n policy,\n })\n return\n }\n\n yield* drainParallel()\n return\n }\n\n // serial\n const [nextSize, peak] = yield* Ref.modify(serialStateRef, (state) => {\n const size = enqueueTrigger(state, trigger)\n return [[size, state.peak] as const, state] as const\n })\n\n if (nextSize > serialQueueLimit.guard) {\n yield* args.onQueueOverflow({\n mode: 'serial',\n currentLength: nextSize,\n 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'\nimport {\n makeRunBudgetEnvelopeV1,\n makeRunDegradeMarkerV1,\n type RunDegradeReasonV1,\n} from '../diagnosticsBudget.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 runId: string\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\nconst PROCESS_RUN_BUDGET_RUN_ID_UNKNOWN = 'process:run:unknown'\n\nconst scopeKeyFromProcessEventIdentity = (eventIdentity: ProcessEvent['identity']['identity']['scope']): string => {\n switch (eventIdentity.type) {\n case 'app':\n return `app:${eventIdentity.appId}`\n case 'moduleInstance':\n return `module:${eventIdentity.moduleId}:${eventIdentity.instanceId}`\n case 'uiSubtree':\n return `subtree:${eventIdentity.subtreeId}`\n }\n}\n\nexport const makeProcessRunBudgetRunId = (\n identity: ProcessEvent['identity'],\n trigger?: ProcessEvent['trigger'],\n): string => {\n const processId = identity.identity.processId\n const scopeKey = scopeKeyFromProcessEventIdentity(identity.identity.scope)\n const runSeq = identity.runSeq\n const triggerSeq =\n trigger && typeof trigger.triggerSeq === 'number' && Number.isFinite(trigger.triggerSeq) && trigger.triggerSeq >= 1\n ? Math.floor(trigger.triggerSeq)\n : undefined\n return triggerSeq != null\n ? `${processId}@${scopeKey}::r${runSeq}::g${triggerSeq}`\n : `${processId}@${scopeKey}::r${runSeq}`\n}\n\nexport const makeProcessRunEventBudgetState = (options?: {\n readonly runId?: string\n readonly maxEvents?: number\n readonly maxBytes?: number\n}): ProcessRunEventBudgetState => ({\n runId:\n typeof options?.runId === 'string' && options.runId.length > 0 ? options.runId : PROCESS_RUN_BUDGET_RUN_ID_UNKNOWN,\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 attachProcessRunBudgetEnvelope = (\n event: ProcessEvent,\n state: ProcessRunEventBudgetState,\n degradeReason?: RunDegradeReasonV1,\n): ProcessEvent => ({\n ...event,\n budgetEnvelope: makeRunBudgetEnvelopeV1({\n domain: 'process',\n runId: state.runId,\n limits: {\n maxEvents: state.maxEvents,\n maxBytes: state.maxBytes,\n },\n usage: {\n emitted: state.emitted,\n dropped: state.dropped,\n downgraded: state.downgraded,\n },\n }),\n degrade: makeRunDegradeMarkerV1(Boolean(degradeReason), degradeReason),\n})\n\nconst finalizeBudgetedProcessEvent = (args: {\n readonly event: ProcessEvent\n readonly state: ProcessRunEventBudgetState\n readonly maxBytes: number\n readonly degradeReason?: RunDegradeReasonV1\n}): { readonly event: ProcessEvent; readonly state: ProcessRunEventBudgetState } => {\n const withEnvelope = attachProcessRunBudgetEnvelope(args.event, args.state, args.degradeReason)\n if (estimateEventBytes(withEnvelope) <= args.maxBytes) {\n return { event: withEnvelope, state: args.state }\n }\n\n // Envelope itself may push the event over the byte budget.\n // In this case we degrade to a slimmer event (keep degrade marker, drop envelope).\n let nextState: ProcessRunEventBudgetState = {\n ...args.state,\n downgraded: args.state.downgraded + 1,\n }\n\n const compact: ProcessEvent = {\n ...args.event,\n degrade: makeRunDegradeMarkerV1(true, args.degradeReason ?? 'payload_oversized'),\n }\n\n const enforcedCompact = enforceProcessEventMaxBytes(compact, { maxBytes: args.maxBytes })\n if (enforcedCompact.downgraded) {\n nextState = {\n ...nextState,\n downgraded: nextState.downgraded + 1,\n }\n }\n\n return {\n event: enforcedCompact.event,\n state: nextState,\n }\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 const baseState: ProcessRunEventBudgetState = {\n ...state,\n emitted: state.emitted + 1,\n downgraded: state.downgraded + (enforced.downgraded ? 1 : 0),\n }\n const finalized = finalizeBudgetedProcessEvent({\n event: enforced.event,\n state: baseState,\n maxBytes,\n degradeReason: enforced.downgraded ? 'payload_oversized' : undefined,\n })\n return [\n { _tag: 'emit', event: finalized.event },\n finalized.state,\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 const baseState: ProcessRunEventBudgetState = {\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 const finalized = finalizeBudgetedProcessEvent({\n event: enforcedSummary.event,\n state: baseState,\n maxBytes,\n degradeReason: 'budget_exceeded',\n })\n\n return [\n { _tag: 'emitSummary', event: finalized.event },\n finalized.state,\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' | 'declarativeLink'\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 let current = SchemaAST.toType(ast)\n\n while (SchemaAST.isSuspend(current)) {\n if (seen.has(current)) return undefined\n seen.add(current)\n current = SchemaAST.toType(current.thunk())\n }\n\n if (segments.length === 0) return current\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.isArrays(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, tail, seen) : undefined\n }\n\n if (SchemaAST.isObjects(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 const param = SchemaAST.toType(sig.parameter as unknown as SchemaAST.AST)\n const tag = (param as any)?._tag\n const acceptsString = tag === 'String' || tag === 'TemplateLiteral'\n const acceptsNumber = tag === 'Number'\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 { ProcessDefinition, ProcessTrigger } from './protocol.js'\nimport type { NonPlatformTriggerSpec } from './triggerStreams.js'\n\nexport const PROCESS_RUNTIME_BOOT_EVENT = 'runtime:boot' as const\n\nexport type ProcessTriggerStartPlan = {\n readonly nonPlatformTriggers: ReadonlyArray<NonPlatformTriggerSpec>\n readonly bootTrigger?: Extract<ProcessTrigger, { readonly kind: 'platformEvent' }>\n readonly dependencyModuleIds: ReadonlyArray<string>\n readonly dispatchTracingModuleIds: ReadonlyArray<string>\n}\n\nconst appendUniqueModuleId = (ids: string[], seen: Set<string>, moduleId: string | undefined): void => {\n if (typeof moduleId !== 'string' || moduleId.length === 0 || seen.has(moduleId)) {\n return\n }\n seen.add(moduleId)\n ids.push(moduleId)\n}\n\nexport const compileProcessTriggerStartPlan = (definition: ProcessDefinition): ProcessTriggerStartPlan => {\n const nonPlatformTriggers: NonPlatformTriggerSpec[] = []\n\n let bootTrigger: ProcessTriggerStartPlan['bootTrigger'] = undefined\n\n const implicitModuleIds: string[] = []\n const implicitSeen = new Set<string>()\n\n for (const trigger of definition.triggers) {\n switch (trigger.kind) {\n case 'platformEvent': {\n if (!bootTrigger && trigger.platformEvent === PROCESS_RUNTIME_BOOT_EVENT) {\n bootTrigger = {\n kind: 'platformEvent',\n name: trigger.name,\n platformEvent: PROCESS_RUNTIME_BOOT_EVENT,\n }\n }\n break\n }\n case 'timer': {\n nonPlatformTriggers.push(trigger)\n break\n }\n case 'moduleAction': {\n nonPlatformTriggers.push(trigger)\n appendUniqueModuleId(implicitModuleIds, implicitSeen, trigger.moduleId)\n break\n }\n case 'moduleStateChange': {\n nonPlatformTriggers.push(trigger)\n appendUniqueModuleId(implicitModuleIds, implicitSeen, trigger.moduleId)\n break\n }\n default: {\n // Keep malformed trigger kinds in the non-platform stream path so runtime preserves\n // existing process::invalid_trigger_kind error semantics.\n nonPlatformTriggers.push(trigger as NonPlatformTriggerSpec)\n break\n }\n }\n }\n\n const dispatchTracingModuleIds: string[] = []\n const dispatchSeen = new Set<string>()\n for (const moduleId of definition.requires ?? []) {\n appendUniqueModuleId(dispatchTracingModuleIds, dispatchSeen, moduleId)\n }\n\n const dependencyModuleIds = dispatchTracingModuleIds.slice()\n const dependencySeen = new Set(dependencyModuleIds)\n for (const moduleId of implicitModuleIds) {\n appendUniqueModuleId(dependencyModuleIds, dependencySeen, moduleId)\n }\n\n return {\n nonPlatformTriggers,\n bootTrigger,\n dependencyModuleIds,\n dispatchTracingModuleIds,\n }\n}\n","import { Duration, Effect, Option, Ref, Stream } from 'effect'\nimport { isDevEnv } from '../env.js'\nimport * as ReadQuery from '../ReadQuery.js'\nimport { makeSchemaSelector } from './selectorSchema.js'\nimport {\n buildSelectorWarningHint,\n evaluateSelectorWarning,\n initialSelectorDiagnosticsState,\n makeSelectorDiagnosticsConfig,\n makeSelectorSamplingTracker,\n} from './selectorDiagnostics.js'\nimport type { ProcessTrigger, ProcessTriggerSpec, SerializableErrorSummary } from './protocol.js'\n\nexport type NonPlatformTriggerSpec = Exclude<ProcessTriggerSpec, { readonly kind: 'platformEvent' }>\ntype TimerTriggerSpec = Extract<NonPlatformTriggerSpec, { readonly kind: 'timer' }>\ntype ModuleActionTriggerSpec = Extract<NonPlatformTriggerSpec, { readonly kind: 'moduleAction' }>\ntype ModuleStateChangeTriggerSpec = Extract<NonPlatformTriggerSpec, { readonly kind: 'moduleStateChange' }>\ntype SchemaAstLike = Parameters<typeof makeSchemaSelector>[1]\ntype CachedSchemaAstEntry = { readonly ast: SchemaAstLike }\n\ntype TriggerStreamFactoryOptions = {\n readonly moduleRuntimeRegistry: ReadonlyMap<string, unknown>\n readonly shouldRecordChainEvents: boolean\n readonly actionIdFromUnknown: (action: unknown) => string | undefined\n readonly resolveRuntimeStateSchemaAst: (runtime: unknown) => SchemaAstLike\n readonly withModuleHint: (error: Error, moduleId: string) => Error\n readonly emitSelectorWarning: (trigger: ProcessTrigger, warning: SerializableErrorSummary) => Effect.Effect<void>\n}\n\nconst makeInvalidTriggerKindError = (spec: never): Error =>\n Object.assign(\n new Error(`[ProcessRuntime] unreachable non-platform trigger kind: ${String((spec as any)?.kind ?? 'unknown')}`),\n { code: 'process::invalid_trigger_kind' },\n )\n\nconst makeInvalidTimerIdError = (timerId: string): Error => {\n const err = new Error(`[ProcessRuntime] invalid timerId (expected DurationInput): ${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 err\n}\n\nconst makeMissingActionStreamError = (moduleId: string): Error => {\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=${moduleId}`\n return err\n}\n\nconst makeMissingActionMetaStreamError = (moduleId: string): Error => {\n const err = new Error('ModuleRuntime does not provide actionsWithMeta$ (required for moduleAction trigger).')\n ;(err as any).code = 'process::missing_action_meta_stream'\n ;(err as any).hint = `moduleId=${moduleId}`\n return err\n}\n\nconst makeMissingChangesStreamError = (moduleId: string): Error => {\n const err = new Error('ModuleRuntime does not provide changesWithMeta (required for moduleStateChange trigger).')\n ;(err as any).code = 'process::missing_changes_stream'\n ;(err as any).hint = `moduleId=${moduleId}`\n return err\n}\n\nconst nowMs = (): number => {\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n return performance.now()\n }\n return Date.now()\n}\n\nconst isWeakMapKey = (value: unknown): value is object =>\n (typeof value === 'object' && value !== null) || typeof value === 'function'\n\nconst makeModuleStateChangeReadQuery = (args: {\n readonly moduleId: string\n readonly path: string\n readonly selector: (state: unknown) => unknown\n}): ReadQuery.ReadQuery<unknown, unknown> =>\n ReadQuery.make({\n selectorId: `process:moduleStateChange:${args.moduleId}:${args.path}`,\n debugKey: `process.moduleStateChange:${args.moduleId}.${args.path}`,\n reads: [args.path],\n select: args.selector,\n equalsKind: 'objectIs',\n })\n\nexport const makeNonPlatformTriggerStreamFactory = (options: TriggerStreamFactoryOptions) => {\n const moduleRuntimeCache = new Map<string, any>()\n const runtimeSchemaAstCache = new WeakMap<object, CachedSchemaAstEntry>()\n\n const resolveModuleRuntime = (moduleId: string): Effect.Effect<any, Error> =>\n Effect.gen(function* () {\n if (moduleRuntimeCache.has(moduleId)) {\n return moduleRuntimeCache.get(moduleId)\n }\n\n const runtime = options.moduleRuntimeRegistry.get(moduleId)\n if (runtime === undefined) {\n return yield* Effect.fail(new Error(`Missing module runtime in scope: ${moduleId}`))\n }\n\n moduleRuntimeCache.set(moduleId, runtime as any)\n return runtime\n })\n\n const resolveRuntimeStateSchemaAst = (runtime: unknown): SchemaAstLike => {\n if (!isWeakMapKey(runtime)) {\n return options.resolveRuntimeStateSchemaAst(runtime)\n }\n\n const cached = runtimeSchemaAstCache.get(runtime)\n if (cached) {\n return cached.ast\n }\n\n const ast = options.resolveRuntimeStateSchemaAst(runtime)\n runtimeSchemaAstCache.set(runtime, { ast })\n return ast\n }\n\n const makeTimerTriggerStream = (spec: TimerTriggerSpec): Effect.Effect<Stream.Stream<ProcessTrigger>, Error> =>\n Effect.gen(function* () {\n const interval = Duration.fromInput(spec.timerId as Duration.Input)\n if (!interval) {\n return yield* Effect.fail(makeInvalidTimerIdError(spec.timerId))\n }\n\n return Stream.tick(interval).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 const makeModuleActionTriggerStream = (\n spec: ModuleActionTriggerSpec,\n ): Effect.Effect<Stream.Stream<ProcessTrigger>, Error> =>\n Effect.gen(function* () {\n const runtime = yield* resolveModuleRuntime(spec.moduleId)\n const buildModuleActionTrigger = (txnSeq: number): ProcessTrigger => ({\n kind: 'moduleAction',\n name: spec.name,\n moduleId: spec.moduleId,\n instanceId: runtime.instanceId as string,\n actionId: spec.actionId,\n txnSeq,\n })\n\n if (!options.shouldRecordChainEvents) {\n const stream = runtime.actions$ as Stream.Stream<any> | undefined\n if (!stream) {\n return yield* Effect.fail(makeMissingActionStreamError(spec.moduleId))\n }\n\n return stream.pipe(\n Stream.filter((action: any) => options.actionIdFromUnknown(action) === spec.actionId),\n Stream.map(() => buildModuleActionTrigger(1)),\n )\n }\n\n const stream = runtime.actionsWithMeta$ as Stream.Stream<any> | undefined\n if (!stream) {\n return yield* Effect.fail(makeMissingActionMetaStreamError(spec.moduleId))\n }\n\n return stream.pipe(\n Stream.filter((evt: any) => options.actionIdFromUnknown(evt.value) === spec.actionId),\n Stream.map((evt: any) => {\n const txnSeq = evt?.meta?.txnSeq\n return buildModuleActionTrigger(typeof txnSeq === 'number' ? txnSeq : 1)\n }),\n )\n })\n\n const makeModuleStateChangeTriggerStream = (\n spec: ModuleStateChangeTriggerSpec,\n ): Effect.Effect<Stream.Stream<ProcessTrigger>, Error> =>\n Effect.gen(function* () {\n const runtime = yield* resolveModuleRuntime(spec.moduleId)\n const schemaAst = resolveRuntimeStateSchemaAst(runtime)\n const selectorResult = makeSchemaSelector(spec.path, schemaAst)\n if (!selectorResult.ok) {\n return yield* Effect.fail(options.withModuleHint(selectorResult.error, spec.moduleId))\n }\n\n const selectorBase = selectorResult.selector\n const buildModuleStateChangeTrigger = (txnSeq: unknown): ProcessTrigger => ({\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 })\n\n const buildModuleStateChangeBaseStream = (\n selector: (state: unknown) => unknown,\n ): Effect.Effect<Stream.Stream<ProcessTrigger>, Error> =>\n Effect.gen(function* () {\n const readQuery = makeModuleStateChangeReadQuery({\n moduleId: spec.moduleId,\n path: spec.path,\n selector,\n })\n const changesReadQueryWithMeta = runtime.changesReadQueryWithMeta as\n | ((input: ReadQuery.ReadQueryInput<unknown, unknown>) => Stream.Stream<any>)\n | undefined\n\n if (typeof changesReadQueryWithMeta === 'function') {\n return changesReadQueryWithMeta(readQuery).pipe(\n Stream.map((evt: any) => buildModuleStateChangeTrigger(evt?.meta?.txnSeq)),\n )\n }\n\n const changesWithMeta = runtime.changesWithMeta as ((selector: (state: unknown) => unknown) => Stream.Stream<any>) | undefined\n if (typeof changesWithMeta !== 'function') {\n return yield* Effect.fail(makeMissingChangesStreamError(spec.moduleId))\n }\n\n let hasPrevValue = false\n let prevValue: unknown\n\n return changesWithMeta(selector).pipe(\n Stream.filter((evt: any) => {\n if (hasPrevValue && Object.is(prevValue, evt.value)) {\n return false\n }\n hasPrevValue = true\n prevValue = evt.value\n return true\n }),\n Stream.map((evt: any) => buildModuleStateChangeTrigger(evt?.meta?.txnSeq)),\n )\n })\n\n if (!options.shouldRecordChainEvents) {\n return yield* buildModuleStateChangeBaseStream(selectorBase)\n }\n\n const selectorDiagnosticsConfig = makeSelectorDiagnosticsConfig(isDevEnv())\n const selectorDiagnosticsRef = yield* Ref.make(initialSelectorDiagnosticsState(Date.now()))\n const selectorSampling = makeSelectorSamplingTracker(selectorDiagnosticsConfig)\n\n const selector = (state: unknown): unknown => {\n if (!selectorSampling.onSelectorCall()) {\n return selectorBase(state)\n }\n\n const t0 = nowMs()\n const value = selectorBase(state)\n const dt = nowMs() - t0\n\n selectorSampling.recordSample(dt)\n return value\n }\n\n const maybeWarnSelector = (trigger: ProcessTrigger): Effect.Effect<void> => {\n return Effect.gen(function* () {\n const now = Date.now()\n const sampling = selectorSampling.snapshot()\n\n const decision = yield* Ref.modify(selectorDiagnosticsRef, (state) =>\n evaluateSelectorWarning(state, now, {\n config: selectorDiagnosticsConfig,\n sampling: {\n sampled: sampling.sampled,\n maxSampleMs: sampling.maxSampleMs,\n },\n }),\n )\n\n if (!decision.shouldWarn) {\n return\n }\n\n const code = decision.tooFrequent ? 'process::selector_high_frequency' : 'process::selector_slow'\n const hint = buildSelectorWarningHint({\n moduleId: spec.moduleId,\n path: spec.path,\n decision,\n config: selectorDiagnosticsConfig,\n sampling,\n })\n selectorSampling.resetSampling()\n\n yield* options.emitSelectorWarning(trigger, {\n message: 'moduleStateChange selector diagnostics warning',\n code,\n hint,\n })\n })\n }\n\n const baseStream = yield* buildModuleStateChangeBaseStream(selector)\n\n return baseStream.pipe(Stream.tap(maybeWarnSelector))\n })\n\n return (spec: NonPlatformTriggerSpec): Effect.Effect<Stream.Stream<ProcessTrigger>, Error> =>\n Effect.gen(function* () {\n switch (spec.kind) {\n case 'timer':\n return yield* makeTimerTriggerStream(spec)\n case 'moduleAction':\n return yield* makeModuleActionTriggerStream(spec)\n case 'moduleStateChange':\n return yield* makeModuleStateChangeTriggerStream(spec)\n default:\n return yield* Effect.fail(makeInvalidTriggerKindError(spec))\n }\n })\n}\n","export type SelectorDiagnosticsState = {\n readonly windowStartedMs: number\n readonly triggersInWindow: number\n readonly lastWarningAtMs: number\n}\n\nexport type SelectorWarningDecision = {\n readonly shouldWarn: boolean\n readonly tooFrequent: boolean\n readonly tooSlow: boolean\n readonly triggersInWindow: number\n}\n\nexport type SelectorDiagnosticsSampling = {\n readonly calls: number\n readonly sampled: number\n readonly slowSamples: number\n readonly maxSampleMs: number\n}\n\nexport type SelectorDiagnosticsConfig = {\n readonly sampleEveryMask: number\n readonly slowSampleThresholdMs: number\n readonly triggerWindowMs: number\n readonly triggerWarningThreshold: number\n readonly warningCooldownMs: number\n}\n\ntype SelectorSamplingTrackerConfig = Pick<SelectorDiagnosticsConfig, 'sampleEveryMask' | 'slowSampleThresholdMs'>\n\ntype SelectorWarningEvaluationOptions = {\n readonly config: SelectorDiagnosticsConfig\n readonly sampling: Pick<SelectorDiagnosticsSampling, 'sampled' | 'maxSampleMs'>\n}\n\ntype SelectorWarningHintOptions = {\n readonly moduleId: string\n readonly path: string\n readonly decision: SelectorWarningDecision\n readonly config: SelectorDiagnosticsConfig\n readonly sampling: SelectorDiagnosticsSampling\n}\n\nexport type SelectorSamplingTracker = {\n readonly onSelectorCall: () => boolean\n readonly recordSample: (sampleMs: number) => void\n readonly resetSampling: () => void\n readonly snapshot: () => SelectorDiagnosticsSampling\n}\n\nexport const makeSelectorDiagnosticsConfig = (isDevEnv: boolean): SelectorDiagnosticsConfig => ({\n sampleEveryMask: 0x7f, // sample every 128 calls\n slowSampleThresholdMs: 4,\n triggerWindowMs: 1000,\n triggerWarningThreshold: isDevEnv ? 20 : 200,\n warningCooldownMs: 30_000,\n})\n\nexport const initialSelectorDiagnosticsState = (now: number): SelectorDiagnosticsState => ({\n windowStartedMs: now,\n triggersInWindow: 0,\n lastWarningAtMs: 0,\n})\n\nexport const makeSelectorSamplingTracker = (config: SelectorSamplingTrackerConfig): SelectorSamplingTracker => {\n let calls = 0\n let sampled = 0\n let slowSamples = 0\n let maxSampleMs = 0\n\n return {\n onSelectorCall: () => {\n calls += 1\n return (calls & config.sampleEveryMask) === 0\n },\n recordSample: (sampleMs) => {\n sampled += 1\n if (sampleMs >= config.slowSampleThresholdMs) {\n slowSamples += 1\n }\n if (sampleMs > maxSampleMs) {\n maxSampleMs = sampleMs\n }\n },\n resetSampling: () => {\n sampled = 0\n slowSamples = 0\n maxSampleMs = 0\n },\n snapshot: () => ({\n calls,\n sampled,\n slowSamples,\n maxSampleMs,\n }),\n }\n}\n\nexport const evaluateSelectorWarning = (\n state: SelectorDiagnosticsState,\n now: number,\n options: SelectorWarningEvaluationOptions,\n): readonly [SelectorWarningDecision, SelectorDiagnosticsState] => {\n const { config, sampling } = options\n const windowExpired = now - state.windowStartedMs >= config.triggerWindowMs\n const windowStartedMs = windowExpired ? now : state.windowStartedMs\n const triggersInWindow = windowExpired ? 1 : state.triggersInWindow + 1\n\n const shouldCooldown = now - state.lastWarningAtMs < config.warningCooldownMs\n const tooFrequent = triggersInWindow >= config.triggerWarningThreshold\n const tooSlow = sampling.maxSampleMs >= config.slowSampleThresholdMs && sampling.sampled > 0\n const shouldWarn = !shouldCooldown && (tooFrequent || tooSlow)\n\n const next: SelectorDiagnosticsState = shouldWarn\n ? {\n windowStartedMs: now,\n triggersInWindow: 0,\n lastWarningAtMs: now,\n }\n : {\n ...state,\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\nexport const buildSelectorWarningHint = (options: SelectorWarningHintOptions): string => {\n const { moduleId, path, decision, config, sampling } = options\n return [\n `moduleId=${moduleId}`,\n `path=${path}`,\n `windowMs=${config.triggerWindowMs}`,\n `triggersInWindow=${decision.triggersInWindow}`,\n `threshold=${config.triggerWarningThreshold}`,\n `cooldownMs=${config.warningCooldownMs}`,\n '',\n 'selector sampling:',\n `calls=${sampling.calls}`,\n `sampled=${sampling.sampled}`,\n `slowSamples(>=${config.slowSampleThresholdMs}ms)=${sampling.slowSamples}`,\n `maxSampleMs=${sampling.maxSampleMs.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","import { ServiceMap } from 'effect'\n\n/**\n * ServiceId contract (specs/078-module-service-manifest/contracts/service-id.md):\n * - Stable string derived from Context.Tag by priority: tag.key ?? tag.id ?? tag._id\n * - tag.toString() is forbidden as an identity source (diagnostics only).\n */\n\nexport type ServiceId = string\n\nconst asNonEmptyString = (value: unknown): string | undefined =>\n typeof value === 'string' && value.length > 0 ? value : undefined\n\nexport const fromTag = (tag: ServiceMap.Key<any, any>): ServiceId | undefined => {\n const anyTag = tag as any\n return asNonEmptyString(anyTag.key) ?? asNonEmptyString(anyTag.id) ?? asNonEmptyString(anyTag._id)\n}\n\nexport const requireFromTag = (tag: ServiceMap.Key<any, any>, options?: { readonly hint?: string }): ServiceId => {\n const id = fromTag(tag)\n if (id) return id\n\n const hint =\n options?.hint ??\n 'Define the Tag with a stable string key, e.g. `class X extends Context.Tag(\"my-svc/x\")<X, Service>() {}`.'\n\n throw new Error(`[InvalidServiceId] Tag is missing a stable id (tag.key/tag.id/tag._id).\\n${hint}`)\n}\n\n\nconst tagCache = new Map<string, ServiceMap.Key<any, any>>()\n\nexport const tagFromServiceId = <S = unknown>(serviceId: ServiceId): ServiceMap.Key<any, S> => {\n const cached = tagCache.get(serviceId)\n if (cached) return cached as ServiceMap.Key<any, S>\n const created = ServiceMap.Service<any, S>(serviceId) as ServiceMap.Key<any, S>\n tagCache.set(serviceId, created)\n return created\n}\n\nexport const moduleRuntimeTagFromModuleId = <S = unknown>(moduleId: string): ServiceMap.Key<any, S> =>\n tagFromServiceId<S>(`@logixjs/Module/${moduleId}`)\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 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()\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 < ib ? -1 : ia > ib ? 1 : 0\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()) {\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 < b.artifactKey ? -1 : a.artifactKey > b.artifactKey ? 1 : 0))\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 type { SerializableErrorSummary } from '../runtime/core/errorSummary.js'\nimport { toSerializableErrorSummary } from '../runtime/core/errorSummary.js'\n\nexport type TrialRunReExportField = 'manifest' | 'staticIr' | 'artifacts' | 'evidence'\nexport type TrialRunReExportStage = TrialRunReExportField | 'budget'\nexport type TrialRunReExportStatus = 'ok' | 'partial' | 'recovered' | 'failed'\n\nexport interface TrialRunReportBudgets {\n readonly maxBytes?: number\n}\n\nexport interface TrialRunReExportIssue {\n readonly stage: TrialRunReExportStage\n readonly code: string\n readonly message: string\n readonly hint?: string\n readonly recoverable: boolean\n}\n\nexport interface TrialRunReExportCollection<Manifest, StaticIr, Artifacts, Evidence> {\n readonly manifest?: Manifest\n readonly staticIr?: StaticIr\n readonly artifacts?: Artifacts\n readonly evidence?: Evidence\n readonly issues: ReadonlyArray<TrialRunReExportIssue>\n}\n\nexport interface TrialRunReportBase<Environment> {\n readonly runId: string\n readonly ok: boolean\n readonly environment?: Environment\n readonly summary?: unknown\n readonly error?: SerializableErrorSummary\n}\n\nexport type TrialRunReportShape<Manifest, StaticIr, Artifacts, Environment, Evidence> = TrialRunReportBase<Environment> & {\n readonly manifest?: Manifest\n readonly staticIr?: StaticIr\n readonly artifacts?: Artifacts\n readonly evidence?: Evidence\n}\n\nconst dropOrder: ReadonlyArray<TrialRunReExportField> = ['evidence', 'artifacts', 'staticIr', 'manifest']\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\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 > 0 ? n : undefined\n}\n\nconst utf8ByteLength = (value: unknown): number => {\n const json = JSON.stringify(value) ?? 'null'\n if (typeof TextEncoder !== 'undefined') {\n return new TextEncoder().encode(json).length\n }\n return json.length\n}\n\nconst issueFromCause = (args: {\n readonly stage: TrialRunReExportStage\n readonly code: string\n readonly cause: unknown\n readonly hint?: string\n}): TrialRunReExportIssue => {\n const err = toSerializableErrorSummary(args.cause).errorSummary\n return {\n stage: args.stage,\n code: args.code,\n message: err.message,\n hint: args.hint ?? err.hint,\n recoverable: true,\n }\n}\n\nconst collectSafely = <A>(args: {\n readonly stage: TrialRunReExportStage\n readonly code: string\n readonly hint?: string\n readonly issues: Array<TrialRunReExportIssue>\n readonly collect: () => A | undefined\n}): A | undefined => {\n try {\n return args.collect()\n } catch (cause) {\n args.issues.push(\n issueFromCause({\n stage: args.stage,\n code: args.code,\n cause,\n hint: args.hint,\n }),\n )\n return undefined\n }\n}\n\nexport const collectTrialRunReExport = <Manifest, StaticIr, Artifacts, Evidence>(args: {\n readonly collectManifest: () => Manifest | undefined\n readonly collectStaticIr: () => StaticIr | undefined\n readonly collectArtifacts: (input: { readonly manifest?: Manifest; readonly staticIr?: StaticIr }) => Artifacts | undefined\n readonly collectEvidence: () => Evidence | undefined\n}): TrialRunReExportCollection<Manifest, StaticIr, Artifacts, Evidence> => {\n const issues: Array<TrialRunReExportIssue> = []\n\n const evidence = collectSafely({\n stage: 'evidence',\n code: 'EvidenceExportFailed',\n hint: 'Evidence export failed; report keeps runtime status and drops evidence payload.',\n issues,\n collect: args.collectEvidence,\n })\n\n const manifest = collectSafely({\n stage: 'manifest',\n code: 'ManifestExportFailed',\n hint: 'Manifest export failed; report keeps runtime status and continues with remaining artifacts.',\n issues,\n collect: args.collectManifest,\n })\n\n const staticIr = collectSafely({\n stage: 'staticIr',\n code: 'StaticIrExportFailed',\n hint: 'Static IR export failed; report keeps runtime status and continues with remaining artifacts.',\n issues,\n collect: args.collectStaticIr,\n })\n\n const artifacts = collectSafely({\n stage: 'artifacts',\n code: 'ArtifactExportFailed',\n hint: 'Artifact export failed; report keeps runtime status and falls back to base summary/evidence.',\n issues,\n collect: () =>\n args.collectArtifacts({\n manifest,\n staticIr,\n }),\n })\n\n issues.sort((a, b) => (a.stage < b.stage ? -1 : a.stage > b.stage ? 1 : a.code < b.code ? -1 : a.code > b.code ? 1 : 0))\n\n return {\n manifest,\n staticIr,\n artifacts,\n evidence,\n issues,\n }\n}\n\nconst mergeSummaryWithReExport = (args: {\n readonly baseSummary: unknown\n readonly status: TrialRunReExportStatus\n readonly issues: ReadonlyArray<TrialRunReExportIssue>\n readonly maxEvents?: number\n readonly maxBytes?: number\n readonly dropped?: ReadonlyArray<TrialRunReExportField>\n readonly originalBytes?: number\n readonly finalBytes?: number\n}): unknown => {\n const reExport = {\n status: args.status,\n budgets: {\n ...(typeof args.maxEvents === 'number' && Number.isFinite(args.maxEvents) ? { maxEvents: Math.floor(args.maxEvents) } : {}),\n ...(typeof args.maxBytes === 'number' && Number.isFinite(args.maxBytes) ? { maxBytes: Math.floor(args.maxBytes) } : {}),\n },\n issues: args.issues,\n ...(args.dropped && args.dropped.length > 0 ? { dropped: Array.from(args.dropped) } : {}),\n ...(typeof args.originalBytes === 'number' ? { originalBytes: args.originalBytes } : {}),\n ...(typeof args.finalBytes === 'number' ? { finalBytes: args.finalBytes } : {}),\n }\n\n if (isRecord(args.baseSummary)) {\n const prevLogix = isRecord(args.baseSummary.__logix) ? args.baseSummary.__logix : {}\n return {\n ...args.baseSummary,\n __logix: {\n ...prevLogix,\n reExport,\n },\n }\n }\n\n return {\n __logix: {\n reExport,\n },\n }\n}\n\nconst fitReportByBudget = <Report extends { readonly runId: string; readonly ok: boolean }>(\n report: Report,\n maxBytes: number | undefined,\n): {\n readonly adjusted: Report\n readonly dropped: ReadonlyArray<TrialRunReExportField>\n readonly originalBytes?: number\n readonly finalBytes?: number\n readonly recovered: boolean\n readonly failed: boolean\n} => {\n if (maxBytes === undefined) {\n return {\n adjusted: report,\n dropped: [],\n recovered: false,\n failed: false,\n }\n }\n\n const originalBytes = utf8ByteLength(report)\n if (originalBytes <= maxBytes) {\n return {\n adjusted: report,\n dropped: [],\n originalBytes,\n finalBytes: originalBytes,\n recovered: false,\n failed: false,\n }\n }\n\n const dropped: Array<TrialRunReExportField> = []\n const working: Record<string, unknown> = { ...(report as unknown as Record<string, unknown>) }\n\n for (const field of dropOrder) {\n if (working[field] === undefined) continue\n delete working[field]\n dropped.push(field)\n const bytes = utf8ByteLength(working)\n if (bytes <= maxBytes) {\n return {\n adjusted: working as Report,\n dropped,\n originalBytes,\n finalBytes: bytes,\n recovered: true,\n failed: false,\n }\n }\n }\n\n const finalBytes = utf8ByteLength(working)\n\n return {\n adjusted: working as Report,\n dropped,\n originalBytes,\n finalBytes,\n recovered: false,\n failed: true,\n }\n}\n\nconst dedupeIssues = (issues: ReadonlyArray<TrialRunReExportIssue>): ReadonlyArray<TrialRunReExportIssue> => {\n const out: TrialRunReExportIssue[] = []\n const seen = new Set<string>()\n for (const issue of issues) {\n const key = `${issue.stage}:${issue.code}`\n if (seen.has(key)) continue\n seen.add(key)\n out.push(issue)\n }\n out.sort((a, b) => (a.stage < b.stage ? -1 : a.stage > b.stage ? 1 : a.code < b.code ? -1 : a.code > b.code ? 1 : 0))\n return out\n}\n\nexport const summarizeTrialRunReExport = (args: {\n readonly baseSummary: unknown\n readonly issues: ReadonlyArray<TrialRunReExportIssue>\n readonly maxEvents?: number\n readonly maxBytes?: number\n readonly dropped?: ReadonlyArray<TrialRunReExportField>\n readonly originalBytes?: number\n readonly finalBytes?: number\n readonly status: TrialRunReExportStatus\n}): unknown =>\n mergeSummaryWithReExport({\n baseSummary: args.baseSummary,\n status: args.status,\n issues: args.issues,\n maxEvents: args.maxEvents,\n maxBytes: args.maxBytes,\n dropped: args.dropped,\n originalBytes: args.originalBytes,\n finalBytes: args.finalBytes,\n })\n\nexport const reExportTrialRunReport = <Manifest, StaticIr, Artifacts, Environment, Evidence>(args: {\n readonly base: TrialRunReportBase<Environment>\n readonly collection: TrialRunReExportCollection<Manifest, StaticIr, Artifacts, Evidence>\n readonly maxEvents?: number\n readonly budgets?: TrialRunReportBudgets\n}): TrialRunReportShape<Manifest, StaticIr, Artifacts, Environment, Evidence> => {\n const maxBytes = asPositiveInt(args.budgets?.maxBytes)\n\n const draft: TrialRunReportShape<Manifest, StaticIr, Artifacts, Environment, Evidence> = {\n runId: args.base.runId,\n ok: args.base.ok,\n manifest: args.collection.manifest,\n staticIr: args.collection.staticIr,\n artifacts: args.collection.artifacts,\n environment: args.base.environment,\n evidence: args.collection.evidence,\n summary: args.base.summary,\n error: args.base.error,\n }\n\n const budgetFit = fitReportByBudget(draft, maxBytes)\n\n const issues: Array<TrialRunReExportIssue> = [...args.collection.issues]\n\n if (maxBytes !== undefined && typeof budgetFit.originalBytes === 'number' && budgetFit.originalBytes > maxBytes) {\n issues.push(\n budgetFit.failed\n ? {\n stage: 'budget',\n code: 'Oversized',\n message: `[Logix] TrialRunReport exceeded maxBytes (${budgetFit.originalBytes} > ${maxBytes})`,\n hint: 'Reduce maxEvents or budgets.maxBytes, or split manifest/evidence artifacts in CI.',\n recoverable: false,\n }\n : {\n stage: 'budget',\n code: 'ReExportBudgetRecovered',\n message: `[Logix] TrialRunReport exceeded maxBytes (${budgetFit.originalBytes} > ${maxBytes}) and was slimmed by dropping heavy exports.`,\n hint: 'Increase budgets.maxBytes to retain more reflection/evidence payloads.',\n recoverable: true,\n },\n )\n }\n\n const issuesDeduped = dedupeIssues(issues)\n\n const status: TrialRunReExportStatus = budgetFit.failed\n ? 'failed'\n : budgetFit.recovered\n ? 'recovered'\n : issuesDeduped.length > 0\n ? 'partial'\n : 'ok'\n\n const summary = summarizeTrialRunReExport({\n baseSummary: args.base.summary,\n issues: issuesDeduped,\n maxEvents: args.maxEvents,\n maxBytes,\n dropped: budgetFit.dropped,\n originalBytes: budgetFit.originalBytes,\n finalBytes: budgetFit.finalBytes,\n status,\n })\n\n let error = args.base.error\n if (budgetFit.failed && !error) {\n error = {\n message: `[Logix] TrialRunReport exceeded maxBytes (${budgetFit.originalBytes ?? 'unknown'} > ${maxBytes})`,\n code: 'Oversized',\n hint: 'Reduce maxEvents or budgets.maxBytes, or split manifest/evidence artifacts in CI.',\n }\n }\n\n const report = {\n ...budgetFit.adjusted,\n ok: budgetFit.failed ? false : args.base.ok,\n summary,\n ...(error ? { error } : {}),\n } satisfies TrialRunReportShape<Manifest, StaticIr, Artifacts, Environment, Evidence>\n\n if (maxBytes !== undefined) {\n const serializedBytes = utf8ByteLength(report)\n if (serializedBytes > maxBytes) {\n const overflowIssue: TrialRunReExportIssue = {\n stage: 'budget',\n code: 'Oversized',\n message: `[Logix] TrialRunReport exceeded maxBytes (${serializedBytes} > ${maxBytes})`,\n hint: 'Reduce maxEvents or budgets.maxBytes, or split manifest/evidence artifacts in CI.',\n recoverable: false,\n }\n\n const fallbackIssues = dedupeIssues([...issuesDeduped, overflowIssue])\n\n const fallbackSummary = summarizeTrialRunReExport({\n baseSummary: undefined,\n issues: fallbackIssues,\n maxEvents: args.maxEvents,\n maxBytes,\n dropped: ['manifest', 'staticIr', 'artifacts', 'evidence'],\n originalBytes: budgetFit.originalBytes ?? serializedBytes,\n finalBytes: serializedBytes,\n status: 'failed',\n })\n\n const fallbackError: SerializableErrorSummary = error ?? {\n message: `[Logix] TrialRunReport exceeded maxBytes (${serializedBytes} > ${maxBytes})`,\n code: 'Oversized',\n hint: 'Reduce maxEvents or budgets.maxBytes, or split manifest/evidence artifacts in CI.',\n }\n\n return {\n runId: args.base.runId,\n ok: false,\n environment: args.base.environment,\n summary: fallbackSummary,\n error: fallbackError,\n }\n }\n }\n\n return report\n}\n"],"mappings":"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","names":["exportEvidencePackage","importEvidencePackage","out","limit","protocolVersion","import_effect","import_effect","protocolVersion","import_effect","import_effect","import_effect","mergeDowngrade","diagnosticsLevel","mergeDowngrade","metaProjection","isRecord","exportEvidencePackage","import_effect","import_effect","import_effect","drain","import_effect","import_effect","import_effect","run","resolveConcurrencyLimit","resolve","maxPriority","diagnosticsLevel","acceptedTopics","import_effect","import_effect","import_effect","import_effect","import_effect","import_effect","isBrowser","make","make","record","layer","make","import_effect","formatScope","formatScope","import_effect","import_effect","import_effect","normalized","sawStar","patchPaths","import_effect","import_effect","make","record","make","staticIr","selectorId","make","resolveConcurrencyLimit","import_effect","import_effect","import_effect","import_effect","import_effect","import_effect","resolve","module","formatScope","make","api","module","resolve","options","import_effect","resolve","exit","import_effect","resolve","make","import_effect","isPlainRecord","record","normalizeFieldPath","meta","base","isRecord","exportStaticIr","module","isRecord","isModuleImpl","resolveModuleId","next","module","exportStaticIr","import_effect","import_effect","import_effect","import_effect","onTrigger","nextSize","peak","baseState","finalized","defineHidden","defineHidden","isRecord","tag","import_effect","isDevEnv","make","resolveRuntimeStateSchemaAst","stream","selector","import_effect","nowMs","run","make","diagnosticsLevel","process","options","installation","layer","layer","process","module","layer","make","isRecord","asPositiveInt","utf8ByteLength","isRecord","toErrorSummaryWithCode","resolve","layer","make","exportStaticIr","defaultHost","exportEvidencePackage","importEvidencePackage"]}
|