@logixjs/core 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/dist/{Bound-BN1DQ_lM.d.ts → Bound-CEa1ihvH.d.ts} +2 -2
- package/dist/{Bound-BPIfH9SS.d.cts → Bound-CNLNkC7c.d.cts} +2 -2
- package/dist/Bound.cjs +620 -163
- package/dist/Bound.cjs.map +1 -1
- package/dist/Bound.d.cts +3 -3
- package/dist/Bound.d.ts +3 -3
- package/dist/Bound.js +14 -14
- package/dist/{Debug-Bq8Sqjcr.d.cts → Debug-BhMYr-1i.d.cts} +3 -3
- package/dist/{Debug-B5q5Bkzx.d.ts → Debug-ByM7m4Ft.d.ts} +3 -3
- package/dist/Debug.cjs +553 -32
- package/dist/Debug.cjs.map +1 -1
- package/dist/Debug.d.cts +10 -8
- package/dist/Debug.d.ts +10 -8
- package/dist/Debug.js +12 -10
- package/dist/EffectOp.cjs.map +1 -1
- package/dist/EffectOp.js +2 -3
- package/dist/EffectOp.js.map +1 -1
- package/dist/Env.cjs +664 -6
- package/dist/Env.cjs.map +1 -1
- package/dist/Env.js +5 -2
- package/dist/ExternalStore-BAz83PVq.d.cts +60 -0
- package/dist/ExternalStore-BYWPbYs8.d.ts +60 -0
- package/dist/ExternalStore.cjs +746 -0
- package/dist/ExternalStore.cjs.map +1 -0
- package/dist/ExternalStore.d.cts +4 -0
- package/dist/ExternalStore.d.ts +4 -0
- package/dist/ExternalStore.js +19 -0
- package/dist/ExternalStore.js.map +1 -0
- package/dist/{Flow-1fZT8MpX.d.cts → Flow-BlSoMmhV.d.cts} +2 -2
- package/dist/{Flow-BhpjE22E.d.ts → Flow-CQSGve5c.d.ts} +2 -2
- package/dist/Flow.cjs +2 -2
- package/dist/Flow.cjs.map +1 -1
- package/dist/Flow.d.cts +4 -4
- package/dist/Flow.d.ts +4 -4
- package/dist/Flow.js +7 -8
- package/dist/{Handle-D_cLW1Z3.d.ts → Handle-B7PSmsrY.d.ts} +1 -1
- package/dist/{Handle-D8D1zPb_.d.cts → Handle-ByovhL-c.d.cts} +1 -1
- package/dist/Handle.d.cts +3 -3
- package/dist/Handle.d.ts +3 -3
- package/dist/{Kernel-CnGE1Fyk.d.ts → Kernel-DGSpS4GM.d.ts} +2 -2
- package/dist/{Kernel-8kC-jOda.d.cts → Kernel-DZAk-Mrn.d.cts} +2 -2
- package/dist/Kernel.cjs +680 -22
- package/dist/Kernel.cjs.map +1 -1
- package/dist/Kernel.d.cts +10 -8
- package/dist/Kernel.d.ts +10 -8
- package/dist/Kernel.js +7 -4
- package/dist/{Link-Db7975nU.d.ts → Link-Cm4eR9n0.d.ts} +10 -3
- package/dist/{Link-fX8x1eCK.d.cts → Link-DF8i8iWR.d.cts} +10 -3
- package/dist/Link.cjs +1128 -86
- package/dist/Link.cjs.map +1 -1
- package/dist/Link.d.cts +3 -3
- package/dist/Link.d.ts +3 -3
- package/dist/Link.js +30 -25
- package/dist/{Logic-DRh4sDZj.d.cts → Logic-BcQA0AvE.d.cts} +1 -1
- package/dist/{Logic-BRjEMr-W.d.ts → Logic-OotSE1xw.d.ts} +1 -1
- package/dist/Logic.d.cts +3 -3
- package/dist/Logic.d.ts +3 -3
- package/dist/{MatchBuilder-CJk5oCkR.d.cts → MatchBuilder-BNDJ8waF.d.ts} +1 -1
- package/dist/{MatchBuilder-0QOc-nlU.d.ts → MatchBuilder-CvZ5WY1B.d.cts} +1 -1
- package/dist/MatchBuilder.d.cts +4 -4
- package/dist/MatchBuilder.d.ts +4 -4
- package/dist/Middleware-D8tUDLv_.d.cts +100 -0
- package/dist/Middleware-DS7CbTTN.d.ts +100 -0
- package/dist/Middleware.cjs +461 -13
- 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 +13 -11
- package/dist/{Module-DnzluX2J.d.ts → Module-CFj0I2yE.d.ts} +45 -18
- package/dist/{Module-B_0xRDMR.d.cts → Module-DpXPW9EQ.d.cts} +45 -18
- package/dist/Module.cjs +8583 -5741
- package/dist/Module.cjs.map +1 -1
- package/dist/Module.d.cts +5 -4
- package/dist/Module.d.ts +5 -4
- package/dist/Module.js +32 -27
- package/dist/ModuleTag-BcVF6z7B.d.ts +113 -0
- package/dist/ModuleTag-DuZXo_NS.d.cts +113 -0
- package/dist/ModuleTag.cjs +2609 -1232
- package/dist/ModuleTag.cjs.map +1 -1
- package/dist/ModuleTag.d.cts +4 -4
- package/dist/ModuleTag.d.ts +4 -4
- package/dist/ModuleTag.js +28 -25
- package/dist/{Observability-cY4kLn0S.d.ts → Observability-D-ZWeEVb.d.ts} +22 -15
- package/dist/{Observability-COqEvp2C.d.cts → Observability-V7sRMYTh.d.cts} +22 -15
- package/dist/Observability.cjs +1938 -640
- package/dist/Observability.cjs.map +1 -1
- package/dist/Observability.d.cts +4 -4
- package/dist/Observability.d.ts +4 -4
- package/dist/Observability.js +21 -19
- package/dist/{Process-mL8fHDSB.d.cts → Process-B55aJMFk.d.cts} +29 -4
- package/dist/{Process-CM9xbMdP.d.ts → Process-DvhFEwUS.d.ts} +29 -4
- package/dist/Process.cjs +1122 -85
- package/dist/Process.cjs.map +1 -1
- package/dist/Process.d.cts +4 -3
- package/dist/Process.d.ts +4 -3
- package/dist/Process.js +27 -22
- package/dist/{ReadQuery-BlMwhe-F.d.ts → ReadQuery-C4vZ8Prc.d.ts} +2 -2
- package/dist/{ReadQuery-SinbStGF.d.ts → ReadQuery-CafjlJQo.d.cts} +1 -1
- package/dist/{ReadQuery-SinbStGF.d.cts → ReadQuery-CafjlJQo.d.ts} +1 -1
- package/dist/{ReadQuery-CL5XlXts.d.cts → ReadQuery-mc0NgrFV.d.cts} +2 -2
- package/dist/ReadQuery.cjs +3 -3
- package/dist/ReadQuery.cjs.map +1 -1
- package/dist/ReadQuery.d.cts +2 -2
- package/dist/ReadQuery.d.ts +2 -2
- package/dist/ReadQuery.js +3 -3
- package/dist/{Reflection-CQnKwPXj.d.ts → Reflection-C8xZ267q.d.ts} +88 -7
- package/dist/{Reflection-Kabo1mlU.d.cts → Reflection-DP7Vsv3f.d.cts} +88 -7
- package/dist/Reflection.cjs +2934 -1553
- package/dist/Reflection.cjs.map +1 -1
- package/dist/Reflection.d.cts +14 -11
- package/dist/Reflection.d.ts +14 -11
- package/dist/Reflection.js +26 -21
- package/dist/Resource.cjs +670 -12
- package/dist/Resource.cjs.map +1 -1
- package/dist/Resource.js +6 -3
- package/dist/Root.cjs +675 -17
- package/dist/Root.cjs.map +1 -1
- package/dist/Root.js +7 -3
- package/dist/{Runtime-CtyzZG4i.d.ts → Runtime-BWc9YfUB.d.ts} +37 -7
- package/dist/{Runtime-B-aL-f29.d.cts → Runtime-PShIC4DW.d.cts} +37 -7
- package/dist/Runtime.cjs +1899 -809
- package/dist/Runtime.cjs.map +1 -1
- package/dist/Runtime.d.cts +14 -11
- package/dist/Runtime.d.ts +14 -11
- package/dist/Runtime.js +33 -28
- package/dist/ScopeRegistry.cjs +668 -10
- package/dist/ScopeRegistry.cjs.map +1 -1
- package/dist/ScopeRegistry.js +6 -3
- package/dist/{StateTrait-OWhbj12c.d.cts → StateTrait-CQsDlXJm.d.cts} +23 -6
- package/dist/{StateTrait-BGsZghTz.d.ts → StateTrait-YvJzVDKl.d.ts} +23 -6
- package/dist/StateTrait.cjs +1475 -370
- package/dist/StateTrait.cjs.map +1 -1
- package/dist/StateTrait.d.cts +7 -5
- package/dist/StateTrait.d.ts +7 -5
- package/dist/StateTrait.js +17 -14
- package/dist/{TraitLifecycle-LdIWmKlg.d.ts → TraitLifecycle-CjIBICAA.d.ts} +2 -2
- package/dist/{TraitLifecycle-CwV5WPFX.d.cts → TraitLifecycle-NmqGiXPC.d.cts} +2 -2
- package/dist/TraitLifecycle.cjs +489 -32
- package/dist/TraitLifecycle.cjs.map +1 -1
- package/dist/TraitLifecycle.d.cts +4 -4
- package/dist/TraitLifecycle.d.ts +4 -4
- package/dist/TraitLifecycle.js +7 -7
- package/dist/Workflow-BlFG_20_.d.cts +414 -0
- package/dist/Workflow-CW9S_aAP.d.ts +414 -0
- package/dist/Workflow.cjs +2977 -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 +55 -0
- package/dist/Workflow.js.map +1 -0
- package/dist/{chunk-G5ZBFPNU.js → chunk-2A4UKO2D.js} +2 -2
- package/dist/chunk-2DE6D42I.js +248 -0
- package/dist/chunk-2DE6D42I.js.map +1 -0
- package/dist/{chunk-ANLBCBDC.js → chunk-2DVLMSOE.js} +6 -6
- package/dist/{chunk-BE3HW4FY.js → chunk-34CF6OGE.js} +14 -16
- package/dist/chunk-34CF6OGE.js.map +1 -0
- package/dist/{chunk-ZFY7U2FR.js → chunk-3LPIXG56.js} +43 -3
- package/dist/chunk-3LPIXG56.js.map +1 -0
- package/dist/chunk-3VZYDNXZ.js +10 -0
- package/dist/chunk-3VZYDNXZ.js.map +1 -0
- package/dist/{chunk-3TMODYZV.js → chunk-3XO4HR6V.js} +2 -2
- package/dist/chunk-46FGVWRF.js +817 -0
- package/dist/chunk-46FGVWRF.js.map +1 -0
- package/dist/chunk-4LODUXFI.js +288 -0
- package/dist/chunk-4LODUXFI.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-TKZ7MEIA.js → chunk-53GVPGSM.js} +2 -2
- package/dist/{chunk-KP7MUZNX.js → chunk-5W2V2NVJ.js} +2 -2
- package/dist/chunk-5W2V2NVJ.js.map +1 -0
- package/dist/chunk-6DACKW3D.js +613 -0
- package/dist/chunk-6DACKW3D.js.map +1 -0
- package/dist/chunk-AQ7L2QZ5.js +1395 -0
- package/dist/chunk-AQ7L2QZ5.js.map +1 -0
- package/dist/{chunk-NZJKFF45.js → chunk-C2UZZQ76.js} +2 -2
- package/dist/chunk-CCKP5Z6F.js +701 -0
- package/dist/chunk-CCKP5Z6F.js.map +1 -0
- package/dist/chunk-CUKM2XUW.js +27 -0
- package/dist/{chunk-QCHIQWAJ.js.map → chunk-CUKM2XUW.js.map} +1 -1
- package/dist/{chunk-M2RGJPXX.js → chunk-DBD6Q6JH.js} +3 -3
- package/dist/{chunk-ZGDVUPTM.js → chunk-EB4RGQO3.js} +2 -2
- package/dist/{chunk-PAYXCY6A.js → chunk-G7ESIQTI.js} +12 -14
- package/dist/chunk-G7ESIQTI.js.map +1 -0
- package/dist/chunk-GPBAZQ23.js +348 -0
- package/dist/chunk-GPBAZQ23.js.map +1 -0
- package/dist/{chunk-OFADUJWJ.js → chunk-I4LCE5OY.js} +3 -5
- package/dist/{chunk-OFADUJWJ.js.map → chunk-I4LCE5OY.js.map} +1 -1
- package/dist/{chunk-DFNM3WX2.js → chunk-IMCC6TBN.js} +158 -39
- package/dist/chunk-IMCC6TBN.js.map +1 -0
- package/dist/{chunk-76WT3HOR.js → chunk-IROZNQAF.js} +22 -21
- package/dist/chunk-IROZNQAF.js.map +1 -0
- package/dist/{chunk-TAAPQVZN.js → chunk-ISKNULNH.js} +2 -2
- package/dist/chunk-J3CWXIPV.js +242 -0
- package/dist/chunk-J3CWXIPV.js.map +1 -0
- package/dist/{chunk-PYOE4VSI.js → chunk-JBKYRTCS.js} +224 -161
- package/dist/chunk-JBKYRTCS.js.map +1 -0
- package/dist/{chunk-66ALHVEX.js → chunk-KKIAYH4X.js} +3 -3
- package/dist/{chunk-3RMKLXHX.js → chunk-KLDVG3SY.js} +2 -2
- package/dist/{chunk-BABLDP24.js → chunk-KSZQYSEH.js} +3 -3
- package/dist/chunk-KSZQYSEH.js.map +1 -0
- package/dist/{chunk-CW6T36TN.js → chunk-M3M7JFAH.js} +4 -4
- package/dist/chunk-M3M7JFAH.js.map +1 -0
- package/dist/{chunk-THATMZXD.js → chunk-MLB253V2.js} +2 -2
- package/dist/{chunk-THATMZXD.js.map → chunk-MLB253V2.js.map} +1 -1
- package/dist/{chunk-JGIWG6SR.js → chunk-MS77U77X.js} +664 -550
- package/dist/chunk-MS77U77X.js.map +1 -0
- package/dist/chunk-MW4FA3MW.js +23 -0
- package/dist/chunk-MW4FA3MW.js.map +1 -0
- package/dist/chunk-MYKNINNN.js +228 -0
- package/dist/chunk-MYKNINNN.js.map +1 -0
- package/dist/{chunk-4CQAV7YB.js → chunk-O6TTQXTY.js} +2 -2
- package/dist/{chunk-NBD3KUOZ.js → chunk-OJDJ4VDQ.js} +35 -24
- package/dist/chunk-OJDJ4VDQ.js.map +1 -0
- package/dist/{chunk-NQZ2OSGR.js → chunk-PVZEMNJY.js} +9 -9
- package/dist/chunk-PVZEMNJY.js.map +1 -0
- package/dist/chunk-RN26DV2M.js +271 -0
- package/dist/chunk-RN26DV2M.js.map +1 -0
- package/dist/{chunk-JCXGZRMU.js → chunk-RQQW3IQC.js} +3 -3
- package/dist/chunk-RQQW3IQC.js.map +1 -0
- package/dist/{chunk-24VULZ7A.js → chunk-TKOGZDD6.js} +3 -3
- package/dist/{chunk-EGK3KN7B.js → chunk-TQYLVXGY.js} +70 -39
- package/dist/chunk-TQYLVXGY.js.map +1 -0
- package/dist/{chunk-QMM6O4CD.js → chunk-UACD2CL2.js} +15 -3
- package/dist/{chunk-QMM6O4CD.js.map → chunk-UACD2CL2.js.map} +1 -1
- package/dist/{chunk-M3WTHJHJ.js → chunk-VH575UTV.js} +30 -34
- package/dist/chunk-VH575UTV.js.map +1 -0
- package/dist/{chunk-AUIR5O6W.js → chunk-WWBMC24F.js} +9 -15
- package/dist/chunk-WWBMC24F.js.map +1 -0
- package/dist/{chunk-JWOYLO27.js → chunk-WYJUJV4L.js} +80 -7
- package/dist/chunk-WYJUJV4L.js.map +1 -0
- package/dist/{chunk-EY4NZKDR.js → chunk-XFMMPYNU.js} +2 -2
- package/dist/chunk-Y4VRBIS6.js +35 -0
- package/dist/chunk-Y4VRBIS6.js.map +1 -0
- package/dist/{chunk-DMBALCE2.js → chunk-ZC7MSQ5U.js} +77 -4
- package/dist/chunk-ZC7MSQ5U.js.map +1 -0
- package/dist/{chunk-OGWBVHB3.js → chunk-ZCK6SCOE.js} +67 -8
- package/dist/chunk-ZCK6SCOE.js.map +1 -0
- package/dist/{chunk-IHVBV5C2.js → chunk-ZTFTABXV.js} +2 -1
- package/dist/chunk-ZTFTABXV.js.map +1 -0
- package/dist/index.cjs +9532 -5017
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +163 -27
- package/dist/index.d.ts +163 -27
- package/dist/index.js +119 -56
- package/dist/index.js.map +1 -1
- package/dist/{ir-BMP7yxJJ.d.cts → ir-C-Zm_GlZ.d.cts} +1 -1
- package/dist/{ir-DUOz6H-5.d.ts → ir-DGyGiwVe.d.ts} +1 -1
- package/dist/{module-k7m3txak.d.ts → module-DqQ1U-Me.d.ts} +129 -100
- package/dist/{module-B8CBqIZ_.d.cts → module-doenaCsZ.d.cts} +129 -100
- package/package.json +12 -1
- package/dist/ModuleTag-C8FHY_sY.d.ts +0 -93
- package/dist/ModuleTag-EGbgBMpZ.d.cts +0 -93
- package/dist/chunk-3QMIVH35.js +0 -43
- package/dist/chunk-3QMIVH35.js.map +0 -1
- package/dist/chunk-76WT3HOR.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-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.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-KP7MUZNX.js.map +0 -1
- package/dist/chunk-M3WTHJHJ.js.map +0 -1
- package/dist/chunk-M7IYCTJV.js +0 -79
- package/dist/chunk-M7IYCTJV.js.map +0 -1
- package/dist/chunk-NBD3KUOZ.js.map +0 -1
- package/dist/chunk-NQZ2OSGR.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-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-ZFLHVFUC.js +0 -192
- package/dist/chunk-ZFLHVFUC.js.map +0 -1
- package/dist/chunk-ZFY7U2FR.js.map +0 -1
- /package/dist/{chunk-G5ZBFPNU.js.map → chunk-2A4UKO2D.js.map} +0 -0
- /package/dist/{chunk-ANLBCBDC.js.map → chunk-2DVLMSOE.js.map} +0 -0
- /package/dist/{chunk-3TMODYZV.js.map → chunk-3XO4HR6V.js.map} +0 -0
- /package/dist/{chunk-TKZ7MEIA.js.map → chunk-53GVPGSM.js.map} +0 -0
- /package/dist/{chunk-NZJKFF45.js.map → chunk-C2UZZQ76.js.map} +0 -0
- /package/dist/{chunk-M2RGJPXX.js.map → chunk-DBD6Q6JH.js.map} +0 -0
- /package/dist/{chunk-ZGDVUPTM.js.map → chunk-EB4RGQO3.js.map} +0 -0
- /package/dist/{chunk-TAAPQVZN.js.map → chunk-ISKNULNH.js.map} +0 -0
- /package/dist/{chunk-66ALHVEX.js.map → chunk-KKIAYH4X.js.map} +0 -0
- /package/dist/{chunk-3RMKLXHX.js.map → chunk-KLDVG3SY.js.map} +0 -0
- /package/dist/{chunk-4CQAV7YB.js.map → chunk-O6TTQXTY.js.map} +0 -0
- /package/dist/{chunk-24VULZ7A.js.map → chunk-TKOGZDD6.js.map} +0 -0
- /package/dist/{chunk-EY4NZKDR.js.map → chunk-XFMMPYNU.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/runtime/core/DevtoolsHub.ts","../src/internal/runtime/core/TickScheduler.ts","../src/internal/runtime/core/JobQueue.ts","../src/internal/runtime/core/TaskRunner.ts","../src/internal/runtime/core/env.ts","../src/internal/runtime/core/RuntimeStore.ts","../src/internal/runtime/core/DeclarativeLinkRuntime.ts"],"sourcesContent":["import { Effect, FiberRef } from 'effect'\nimport type { JsonValue } from '../../observability/jsonValue.js'\nimport type { EvidencePackage, EvidencePackageSource } from '../../observability/evidence.js'\nimport { exportEvidencePackage, OBSERVABILITY_PROTOCOL_VERSION } from '../../observability/evidence.js'\nimport type { ConvergeStaticIrExport } from '../../state-trait/converge-ir.js'\nimport type { ConvergeStaticIrCollector } from './ConvergeStaticIrCollector.js'\nimport {\n currentDiagnosticsLevel,\n clearRuntimeDebugEventSeq,\n toRuntimeDebugEventRef,\n type Event,\n type RuntimeDebugEventRef,\n type Sink,\n} from './DebugSink.js'\nimport { getGlobalHostScheduler } from './HostScheduler.js'\n\n/**\n * DevtoolsHub:\n * - Process/page-level Debug event aggregator (global singleton).\n *\n * Note: this hub is only appended to Debug sinks when devtoolsHubLayer is explicitly enabled.\n * The Snapshot API is always available (returns empty snapshots when disabled).\n *\n * Performance:\n * - Devtools Debug events can be extremely dense in hot paths (EffectOp / Trait / StateTxn, etc.).\n * - The previous implementation copied ringBuffer and Maps per event to build an \"immutable snapshot\" (O(bufferSize)).\n * - The current implementation lets Snapshot reference internal Map/Array directly (read-only convention) and batches\n * subscriber notifications in microtasks, avoiding per-event copies and reducing main-thread interference.\n */\n\nexport interface DevtoolsSnapshot {\n /**\n * SnapshotToken:\n * - Monotonic snapshot change token (a subscription-safe source of truth).\n * - Any externally visible change must advance the token.\n * - If the token does not change, externally visible snapshot fields must not change (avoid tearing / missed updates).\n */\n readonly snapshotToken: SnapshotToken\n readonly instances: ReadonlyMap<string, number>\n readonly events: ReadonlyArray<RuntimeDebugEventRef>\n readonly latestStates: ReadonlyMap<string, JsonValue>\n readonly latestTraitSummaries: ReadonlyMap<string, JsonValue>\n /**\n * exportBudget:\n * - Tracks \"degrade counts\" caused by export boundaries (JsonValue projection/trimming), for explainability.\n * - Counts are cumulative (may differ from the ring buffer window); clearDevtoolsEvents resets them.\n */\n readonly exportBudget: {\n readonly dropped: number\n readonly oversized: number\n }\n}\n\nexport interface DevtoolsHubOptions {\n readonly bufferSize?: number\n}\n\nexport type SnapshotToken = number\n\n// ---- Global mutable state (singleton) ----\n\nconst instances = new Map<string, number>()\nconst latestStates = new Map<string, JsonValue>()\nconst latestTraitSummaries = new Map<string, JsonValue>()\nconst instanceLabels = new Map<string, string>()\nconst convergeStaticIrByDigest = new Map<string, ConvergeStaticIrExport>()\nconst liveInstanceKeys = new Set<string>()\n\nconst exportBudget = {\n dropped: 0,\n oversized: 0,\n}\n\nlet lastRunTs = 0\nlet lastRunTsSeq = 0\n\nconst nextRunId = (): string => {\n const ts = Date.now()\n if (ts === lastRunTs) {\n lastRunTsSeq += 1\n } else {\n lastRunTs = ts\n lastRunTsSeq = 0\n }\n\n return lastRunTsSeq === 0 ? `run-${ts}` : `run-${ts}.${lastRunTsSeq}`\n}\n\nlet currentRunId = nextRunId()\nlet nextSeq = 1\n\nlet bufferSize = 500\nconst ringBuffer: RuntimeDebugEventRef[] = []\nconst ringBufferSeq: number[] = []\n\nlet snapshotToken: SnapshotToken = 0\n\nconst ensureRingBufferSize = (): void => {\n if (bufferSize <= 0) {\n ringBuffer.length = 0\n ringBufferSeq.length = 0\n return\n }\n\n if (ringBuffer.length <= bufferSize) return\n const excess = ringBuffer.length - bufferSize\n ringBuffer.splice(0, excess)\n ringBufferSeq.splice(0, excess)\n}\n\nconst trimRingBufferIfNeeded = (): void => {\n if (bufferSize <= 0) {\n ringBuffer.length = 0\n ringBufferSeq.length = 0\n return\n }\n\n // Small windows keep a strict upper bound to avoid \"size=5 but events.length briefly > 5\" surprises.\n // Large windows allow short bursts + batch trimming to avoid linear shift() costs under sustained load.\n if (bufferSize <= 64) {\n ensureRingBufferSize()\n return\n }\n\n const slack = Math.min(1024, Math.floor(bufferSize / 2))\n const threshold = bufferSize + Math.max(1, slack)\n if (ringBuffer.length <= threshold) return\n\n const excess = ringBuffer.length - bufferSize\n ringBuffer.splice(0, excess)\n ringBufferSeq.splice(0, excess)\n}\n\n// Snapshot references internal structures directly (read-only convention) to avoid copy costs in hot paths.\nconst currentSnapshot: DevtoolsSnapshot = {\n snapshotToken,\n instances,\n events: ringBuffer,\n latestStates,\n latestTraitSummaries,\n exportBudget,\n}\n\nconst listeners = new Set<() => void>()\n\nlet notifyScheduled = false\nconst scheduleNotify = () => {\n if (listeners.size === 0) return\n if (notifyScheduled) return\n notifyScheduled = true\n getGlobalHostScheduler().scheduleMicrotask(() => {\n notifyScheduled = false\n for (const listener of listeners) {\n listener()\n }\n })\n}\n\nlet devtoolsEnabled = false\n\nconst bumpSnapshotToken = (): void => {\n snapshotToken += 1\n ;(currentSnapshot as any).snapshotToken = snapshotToken\n}\n\nconst markSnapshotChanged = (): void => {\n bumpSnapshotToken()\n scheduleNotify()\n}\n\nexport const configureDevtoolsHub = (options?: DevtoolsHubOptions) => {\n devtoolsEnabled = true\n if (typeof options?.bufferSize === 'number' && Number.isFinite(options.bufferSize)) {\n const next = Math.floor(options.bufferSize)\n const nextBufferSize = next >= 0 ? next : 0\n if (nextBufferSize !== bufferSize) {\n bufferSize = nextBufferSize\n ensureRingBufferSize()\n markSnapshotChanged()\n }\n }\n}\n\nexport const isDevtoolsEnabled = (): boolean => devtoolsEnabled\n\n// ---- Snapshot public helpers ----\n\nexport const getDevtoolsSnapshot = (): DevtoolsSnapshot => currentSnapshot\nexport const getDevtoolsSnapshotToken = (): SnapshotToken => snapshotToken\n\nexport const subscribeDevtoolsSnapshot = (listener: () => void): (() => void) => {\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n}\n\nexport const getDevtoolsRunId = (): string => currentRunId\n\nexport const setDevtoolsRunId = (runId: string): void => {\n if (typeof runId !== 'string' || runId.length === 0) return\n if (runId !== currentRunId) {\n currentRunId = runId\n markSnapshotChanged()\n }\n}\n\nexport const startDevtoolsRun = (runId?: string): string => {\n currentRunId = typeof runId === 'string' && runId.length > 0 ? runId : nextRunId()\n nextSeq = 1\n clearRuntimeDebugEventSeq()\n clearDevtoolsEvents()\n return currentRunId\n}\n\nexport const clearDevtoolsEvents = (): void => {\n ringBuffer.length = 0\n ringBufferSeq.length = 0\n exportBudget.dropped = 0\n exportBudget.oversized = 0\n markSnapshotChanged()\n}\n\nexport const setInstanceLabel = (instanceId: string, label: string): void => {\n instanceLabels.set(instanceId, label)\n markSnapshotChanged()\n}\n\nexport const getInstanceLabel = (instanceId: string): string | undefined => instanceLabels.get(instanceId)\n\nconst registerConvergeStaticIr = (ir: ConvergeStaticIrExport): void => {\n convergeStaticIrByDigest.set(ir.staticIrDigest, ir)\n}\n\nexport const devtoolsHubConvergeStaticIrCollector: ConvergeStaticIrCollector = {\n register: registerConvergeStaticIr,\n}\n\nexport const exportDevtoolsEvidencePackage = (options?: {\n readonly runId?: string\n readonly source?: EvidencePackageSource\n readonly protocolVersion?: string\n}): EvidencePackage => {\n const protocolVersion = options?.protocolVersion ?? OBSERVABILITY_PROTOCOL_VERSION\n const runId = options?.runId ?? currentRunId\n const source = options?.source ?? { host: 'unknown' }\n\n const events = ringBuffer.map((payload, i) => ({\n protocolVersion,\n runId,\n seq: ringBufferSeq[i] ?? i + 1,\n timestamp: payload.timestamp,\n type: 'debug:event',\n payload: payload as unknown as JsonValue,\n }))\n\n const isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\n // In full diagnostics: de-duplicate by staticIrDigest and export matching ConvergeStaticIR (for offline explanation/replay).\n const convergeDigests = new Set<string>()\n let sawFullConverge = false\n\n for (const ref of ringBuffer) {\n if (ref.kind !== 'trait:converge') continue\n const meta = ref.meta\n if (!isRecord(meta)) continue\n\n const digest = meta.staticIrDigest\n if (typeof digest === 'string' && digest.length > 0) {\n convergeDigests.add(digest)\n }\n\n const dirty = meta.dirty\n if (isRecord(dirty) && typeof dirty.rootCount === 'number') {\n sawFullConverge = true\n }\n }\n\n let summary: JsonValue | undefined\n if (sawFullConverge && convergeDigests.size > 0) {\n const staticIrByDigest: Record<string, JsonValue> = {}\n for (const digest of convergeDigests) {\n const ir = convergeStaticIrByDigest.get(digest)\n if (ir) {\n staticIrByDigest[digest] = ir as unknown as JsonValue\n }\n }\n if (Object.keys(staticIrByDigest).length > 0) {\n summary = { converge: { staticIrByDigest } } as unknown as JsonValue\n }\n }\n\n return exportEvidencePackage({\n protocolVersion,\n runId,\n source,\n events,\n summary,\n })\n}\n\n// ---- Hub Sink ----\n\nexport const devtoolsHubSink: Sink = {\n record: (event: Event) =>\n Effect.gen(function* () {\n // NOTE: the hub is a global singleton, but whether events are exportable/written to the buffer is controlled by FiberRef,\n // enabling different perf baselines/diagnostics tiers across scopes within the same process.\n const level = yield* FiberRef.get(currentDiagnosticsLevel)\n\n let changed = false\n\n // trace:instanceLabel: set a human-readable label for a runtime instance.\n if (event.type === 'trace:instanceLabel') {\n const instanceId = (event as any).instanceId as string | undefined\n const data = (event as any).data\n const label = data && typeof data === 'object' && 'label' in data ? String((data as any).label) : undefined\n if (instanceId && label) {\n instanceLabels.set(instanceId, label)\n changed = true\n }\n }\n\n // Instance counters: maintain active instance counts by runtimeLabel::moduleId.\n if (event.type === 'module:init' || event.type === 'module:destroy') {\n const moduleId = (event as any).moduleId ?? 'unknown'\n const runtimeLabel = (event as any).runtimeLabel ?? 'unknown'\n const instanceId = (event as any).instanceId as string | undefined\n const key = `${runtimeLabel}::${moduleId}`\n const prev = instances.get(key) ?? 0\n if (event.type === 'module:init') {\n instances.set(key, prev + 1)\n changed = true\n if (instanceId) {\n const instanceKey = `${runtimeLabel}::${moduleId}::${instanceId}`\n liveInstanceKeys.add(instanceKey)\n // If instanceId is reused, ensure derived caches do not carry leftovers from the previous lifetime.\n if (latestStates.delete(instanceKey)) changed = true\n if (latestTraitSummaries.delete(instanceKey)) changed = true\n }\n } else {\n const next = prev - 1\n if (next <= 0) {\n if (instances.delete(key)) changed = true\n } else {\n instances.set(key, next)\n changed = true\n }\n\n if (instanceId) {\n const instanceKey = `${runtimeLabel}::${moduleId}::${instanceId}`\n liveInstanceKeys.delete(instanceKey)\n if (latestStates.delete(instanceKey)) changed = true\n if (latestTraitSummaries.delete(instanceKey)) changed = true\n if (instanceLabels.delete(instanceId)) changed = true\n changed = true\n }\n }\n }\n\n let exportBudgetChanged = false\n const ref = toRuntimeDebugEventRef(event, {\n diagnosticsLevel: level,\n resolveConvergeStaticIr: (staticIrDigest) => convergeStaticIrByDigest.get(staticIrDigest),\n onMetaProjection: ({ stats }) => {\n if (stats.dropped !== 0 || stats.oversized !== 0) {\n exportBudgetChanged = true\n }\n exportBudget.dropped += stats.dropped\n exportBudget.oversized += stats.oversized\n },\n })\n if (exportBudgetChanged) {\n changed = true\n }\n if (!ref) {\n // off tier: do not write ring buffer / latestStates, but keep minimal counters/labels (including module:destroy cleanup).\n if (changed) {\n markSnapshotChanged()\n }\n return\n }\n\n // latestStates / latestTraitSummaries: record latest snapshots by runtimeLabel::moduleId::instanceId.\n if (ref.kind === 'state' && ref.label === 'state:update') {\n const runtimeLabel = ref.runtimeLabel ?? 'unknown'\n const key = `${runtimeLabel}::${ref.moduleId}::${ref.instanceId}`\n\n // Late/replayed events after module:destroy: allow entering the window for replay, but do not rebuild latest* caches.\n if (liveInstanceKeys.has(key)) {\n if (ref.meta && typeof ref.meta === 'object' && !Array.isArray(ref.meta)) {\n const anyMeta = ref.meta as any\n if ('state' in anyMeta) {\n latestStates.set(key, anyMeta.state as JsonValue)\n changed = true\n }\n if ('traitSummary' in anyMeta && anyMeta.traitSummary !== undefined) {\n latestTraitSummaries.set(key, anyMeta.traitSummary as JsonValue)\n changed = true\n }\n }\n }\n }\n\n // ring buffer: keep the most recent bufferSize RuntimeDebugEventRefs.\n if (bufferSize > 0) {\n const seq = nextSeq++\n ringBuffer.push(ref)\n ringBufferSeq.push(seq)\n trimRingBufferIfNeeded()\n changed = true\n }\n\n if (changed) {\n markSnapshotChanged()\n }\n }),\n}\n","import { Effect, FiberRef } from 'effect'\nimport * as Debug from './DebugSink.js'\nimport * as DevtoolsHub from './DevtoolsHub.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.async<void, never>((resume, signal) => {\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 resume(Effect.void)\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// ---- 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\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 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\nconst mergeDrain = (base: RuntimeStorePendingDrain, next: RuntimeStorePendingDrain): RuntimeStorePendingDrain => {\n const modules = new Map(base.modules)\n for (const [k, commit] of next.modules) {\n const prev = modules.get(k)\n if (!prev) {\n modules.set(k, commit)\n } else {\n modules.set(k, {\n ...commit,\n meta: {\n ...commit.meta,\n priority: maxPriority(prev.meta.priority, commit.meta.priority),\n },\n })\n }\n }\n\n const dirtyTopics = new Map(base.dirtyTopics)\n for (const [k, p] of next.dirtyTopics) {\n const prev = dirtyTopics.get(k)\n dirtyTopics.set(k, prev ? maxPriority(prev, p) : p)\n }\n\n return { modules, dirtyTopics }\n}\n\nconst emptyDrain = (): RuntimeStorePendingDrain => ({ modules: new Map(), dirtyTopics: new Map() })\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\n let coalescedModules = 0\n let coalescedTopics = 0\n\n const yieldMicrotask = Effect.async<void, never>((resume) => {\n hostScheduler.scheduleMicrotask(() => resume(Effect.void))\n })\n const yieldMacrotask = Effect.async<void, never>((resume, signal) => {\n const cancel = hostScheduler.scheduleMacrotask(() => resume(Effect.void))\n try {\n signal.addEventListener(\n 'abort',\n () => {\n cancel()\n },\n { once: true },\n )\n } catch {\n // best-effort\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.forkDaemon(\n Effect.locally(TaskRunner.inSyncTransactionFiber, false)(\n Effect.gen(function* () {\n try {\n yield* waitForBatchEndIfNeeded()\n if (boundary === 'microtask') {\n yield* yieldMicrotask\n microtaskChainDepth += 1\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 }),\n ),\n )\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* FiberRef.get(Debug.currentDiagnosticsLevel)\n const shouldEmitTrace = DevtoolsHub.isDevtoolsEnabled() && diagnosticsLevel !== 'off'\n\n const captured: {\n drainRounds: number\n stable: boolean\n degradeReason?: TickDegradeReason\n deferred?: RuntimeStorePendingDrain\n accepted: RuntimeStorePendingDrain\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 captured.accepted = mergeDrain(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 const urgentModules: Array<RuntimeStoreModuleCommit> = []\n const nonUrgentModules: Array<RuntimeStoreModuleCommit> = []\n\n for (const commit of captured.accepted.modules.values()) {\n if (toLane(commit.meta.priority) === 'urgent') {\n urgentModules.push(commit)\n } else {\n nonUrgentModules.push(commit)\n }\n }\n\n const urgentCapExceeded = urgentModules.length > config.urgentStepCap\n const urgentAccepted = urgentCapExceeded ? urgentModules.slice(0, config.urgentStepCap) : urgentModules\n const urgentDeferred = urgentCapExceeded ? urgentModules.slice(config.urgentStepCap) : []\n\n const nonUrgentBudget = Math.max(0, config.maxSteps)\n const nonUrgentAccepted = urgentCapExceeded ? [] : nonUrgentModules.slice(0, nonUrgentBudget)\n const nonUrgentDeferred = urgentCapExceeded ? nonUrgentModules : nonUrgentModules.slice(nonUrgentBudget)\n\n if (urgentCapExceeded) {\n captured.stable = false\n captured.degradeReason = 'cycle_detected'\n } else if (nonUrgentDeferred.length > 0) {\n captured.stable = false\n captured.degradeReason = captured.degradeReason ?? 'budget_steps'\n }\n\n const acceptedModules = new Map<ModuleInstanceKey, RuntimeStoreModuleCommit>()\n const deferredModules = new Map<ModuleInstanceKey, RuntimeStoreModuleCommit>()\n\n for (const c of urgentAccepted) acceptedModules.set(c.moduleInstanceKey, c)\n for (const c of nonUrgentAccepted) acceptedModules.set(c.moduleInstanceKey, c)\n\n for (const c of urgentDeferred) deferredModules.set(c.moduleInstanceKey, c)\n for (const c of nonUrgentDeferred) deferredModules.set(c.moduleInstanceKey, c)\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 info = storeTopicToModuleInstanceKey(topicKey)\n if (!info) continue\n if (acceptedModules.has(info)) {\n acceptedTopics.set(topicKey, priority)\n } else if (deferredModules.has(info)) {\n deferredTopics.set(topicKey, priority)\n } else {\n // Conservative default: treat unknown topics as accepted.\n acceptedTopics.set(topicKey, priority)\n }\n }\n\n const acceptedDrain: RuntimeStorePendingDrain = {\n modules: acceptedModules,\n dirtyTopics: acceptedTopics,\n }\n\n const deferredDrain: RuntimeStorePendingDrain | undefined =\n deferredModules.size > 0 || deferredTopics.size > 0\n ? {\n modules: deferredModules,\n dirtyTopics: deferredTopics,\n }\n : undefined\n\n captured.deferred = deferredDrain\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 triggerSummary = (() => {\n const triggers = Array.from(captured.accepted.modules.values())\n const counts = new Map<TriggerKind, number>()\n let primary: any = undefined\n for (const t of triggers) {\n const kind = toTriggerKind(t.meta.originKind)\n counts.set(kind, (counts.get(kind) ?? 0) + 1)\n if (!primary) {\n primary = {\n kind,\n moduleId: t.moduleId,\n instanceId: t.instanceId,\n fieldPath: kind === 'externalStore' ? t.meta.originName : undefined,\n actionTag: kind === 'dispatch' ? t.meta.originName : undefined,\n }\n }\n }\n return {\n total: triggers.length,\n kinds: Array.from(counts.entries()).map(([kind, count]) => ({ kind, count })),\n primary,\n coalescedCount: {\n modules: coalescedModules,\n topics: coalescedTopics,\n },\n }\n })()\n\n anchor = (() => {\n const first = captured.accepted.modules.values().next().value as RuntimeStoreModuleCommit | undefined\n if (!first) return undefined\n return {\n moduleId: first.moduleId,\n instanceId: first.instanceId,\n txnSeq: first.meta.txnSeq,\n txnId: first.meta.txnId,\n ...(typeof first.opSeq === 'number' ? { opSeq: first.opSeq } : null),\n }\n })()\n\n backlog = (() => {\n const deferredWork = captured.deferred\n if (!deferredWork) return undefined\n const pendingDeferredWork = deferredWork.modules.size + deferredWork.dirtyTopics.size\n\n const deferredModulesList = Array.from(deferredWork.modules.values())\n const pendingExternalInputs = deferredModulesList.filter((m) => toTriggerKind(m.meta.originKind) === 'externalStore').length\n\n const primaryDeferred =\n deferredModulesList.find((m) => toTriggerKind(m.meta.originKind) === 'externalStore') ?? deferredModulesList[0]\n const kind = primaryDeferred ? toTriggerKind(primaryDeferred.meta.originKind) : 'unknown'\n\n const deferredPrimary =\n primaryDeferred != null\n ? {\n kind: kind === 'externalStore' ? ('externalStore' as const) : ('unknown' as const),\n moduleId: primaryDeferred.moduleId,\n instanceId: primaryDeferred.instanceId,\n fieldPath: kind === 'externalStore' ? primaryDeferred.meta.originName : undefined,\n storeId: undefined,\n }\n : undefined\n\n return {\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 const committed = store.commitTick({\n tickSeq: currentTickSeq,\n accepted: acceptedDrain,\n })\n\n // Notify changed topics after committing the snapshot token.\n for (const { listeners } of committed.changedTopics.values()) {\n for (const listener of listeners) {\n try {\n listener()\n } catch {\n // best-effort: never let a subscriber break the tick\n }\n }\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'] = flushTick({ startedAs: 'unknown' }).pipe(Effect.asVoid)\n\n const storeTopicToModuleInstanceKey = (topicKey: string): ModuleInstanceKey | undefined => {\n const idx = topicKey.indexOf('::rq:')\n if (idx > 0) {\n return topicKey.slice(0, idx) as ModuleInstanceKey\n }\n if (topicKey.includes('::')) {\n return topicKey as ModuleInstanceKey\n }\n return 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, 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, LogicEffect } 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 | 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* 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 { Context, Effect, Layer } 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 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\n// ---- 073: TickScheduler + RuntimeStore (injectable runtime services) ----\n\nexport interface RuntimeStoreService extends RuntimeStore {}\n\nexport class RuntimeStoreTag extends Context.Tag('@logixjs/core/RuntimeStore')<RuntimeStoreTag, RuntimeStoreService>() {}\n\nexport const runtimeStoreLayer: Layer.Layer<any, never, never> = Layer.scoped(\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 Context.Tag('@logixjs/core/HostScheduler')<\n HostSchedulerTag,\n HostSchedulerService\n>() {}\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 Context.Tag('@logixjs/core/DeclarativeLinkRuntime')<\n DeclarativeLinkRuntimeTag,\n DeclarativeLinkRuntimeService\n>() {}\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 Context.Tag('@logixjs/core/TickScheduler')<TickSchedulerTag, TickSchedulerService>() {}\n\nexport const tickSchedulerLayer = (config?: TickSchedulerConfig): Layer.Layer<any, never, never> =>\n Layer.effect(\n TickSchedulerTag,\n Effect.gen(function* () {\n const store = yield* RuntimeStoreTag\n const declarativeLinkRuntime = yield* DeclarativeLinkRuntimeTag\n const hostScheduler = yield* HostSchedulerTag\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","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}\n\nexport interface RuntimeStorePendingDrain {\n readonly modules: ReadonlyMap<ModuleInstanceKey, RuntimeStoreModuleCommit>\n readonly dirtyTopics: ReadonlyMap<TopicKey, StateCommitPriority>\n}\n\nexport interface RuntimeStoreCommitResult {\n readonly changedTopics: ReadonlyMap<TopicKey, { readonly priority: StateCommitPriority; readonly listeners: ReadonlyArray<() => void> }>\n}\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 }) => RuntimeStoreCommitResult\n\n readonly dispose: () => void\n}\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, Set<() => void>>()\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 subscribeTopic = (topicKey: TopicKey, listener: () => void): (() => void) => {\n const info = parseTopicKey(topicKey)\n const existing = listenersByTopic.get(topicKey)\n const set = existing ?? new Set<() => void>()\n const alreadyHas = set.has(listener)\n if (!alreadyHas) {\n set.add(listener)\n }\n if (!existing) {\n listenersByTopic.set(topicKey, set)\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 current = listenersByTopic.get(topicKey)\n if (!current) return\n const deleted = current.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 (current.size === 0) {\n listenersByTopic.delete(topicKey)\n }\n }\n }\n\n const getTopicSubscriberCount = (topicKey: TopicKey): number => listenersByTopic.get(topicKey)?.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: { readonly tickSeq: number; readonly accepted: RuntimeStorePendingDrain }): RuntimeStoreCommitResult => {\n tickSeq = args.tickSeq\n\n for (const [key, commit] of args.accepted.modules) {\n moduleStates.set(key, commit.state)\n }\n\n const changedTopics = new Map<TopicKey, { readonly priority: StateCommitPriority; readonly listeners: ReadonlyArray<() => void> }>()\n\n for (const [topicKey, priority] of args.accepted.dirtyTopics) {\n commitTopicBump(topicKey, priority)\n const listeners = Array.from(listenersByTopic.get(topicKey) ?? [])\n if (listeners.length > 0) {\n changedTopics.set(topicKey, { priority, listeners })\n }\n }\n\n return { changedTopics }\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 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"],"mappings":"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","names":["Effect","FiberRef","drain","Effect","FiberRef","Effect","listeners","Effect","Effect","Effect","FiberRef","Effect","Effect","maxPriority","FiberRef","listeners"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isDevEnv
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-AQ7L2QZ5.js";
|
|
4
4
|
|
|
5
5
|
// src/internal/resource.ts
|
|
6
6
|
import { Context, Layer } from "effect";
|
|
@@ -103,4 +103,4 @@ export {
|
|
|
103
103
|
make,
|
|
104
104
|
layer
|
|
105
105
|
};
|
|
106
|
-
//# sourceMappingURL=chunk-
|
|
106
|
+
//# sourceMappingURL=chunk-C2UZZQ76.js.map
|