@graphrefly/ts 0.0.2 → 0.0.3
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/README.md +197 -117
- package/dist/{actions-types-wl9Mgkmr.d.cts → actions-types-CH-XCU9O.d.cts} +4 -4
- package/dist/{actions-types-CSC3NMDl.d.ts → actions-types-w2iPQTkv.d.ts} +4 -4
- package/dist/adapters/index.cjs.map +1 -1
- package/dist/adapters/index.d.cts +10 -10
- package/dist/adapters/index.d.ts +10 -10
- package/dist/adapters/index.js +7 -7
- package/dist/adapters/nestjs/microservices.d.cts +3 -3
- package/dist/adapters/nestjs/microservices.d.ts +3 -3
- package/dist/adapters/nestjs/native.cjs.map +1 -1
- package/dist/adapters/nestjs/native.d.cts +4 -4
- package/dist/adapters/nestjs/native.d.ts +4 -4
- package/dist/adapters/nestjs/native.js +3 -3
- package/dist/adapters/nestjs/websockets.d.cts +3 -3
- package/dist/adapters/nestjs/websockets.d.ts +3 -3
- package/dist/adapters/nestjs.d.cts +3 -3
- package/dist/adapters/nestjs.d.ts +3 -3
- package/dist/adapters/observe-storage.d.cts +3 -3
- package/dist/adapters/observe-storage.d.ts +3 -3
- package/dist/adapters/react.d.cts +2 -2
- package/dist/adapters/react.d.ts +2 -2
- package/dist/adapters/solid.d.cts +2 -2
- package/dist/adapters/solid.d.ts +2 -2
- package/dist/adapters/svelte.d.cts +2 -2
- package/dist/adapters/svelte.d.ts +2 -2
- package/dist/adapters/vue.d.cts +2 -2
- package/dist/adapters/vue.d.ts +2 -2
- package/dist/{agent-runtime-types-core-hU299uIC.d.ts → agent-runtime-types-core-CKwrBDyi.d.ts} +1 -1
- package/dist/{agent-runtime-types-core-CaXfKNtY.d.cts → agent-runtime-types-core-bfl4m0vM.d.cts} +1 -1
- package/dist/{agent-runtime-types-tool-DninPEzk.d.cts → agent-runtime-types-tool-BLPV3azj.d.cts} +4 -4
- package/dist/{agent-runtime-types-tool-BEpSINol.d.ts → agent-runtime-types-tool-hwqvVqNt.d.ts} +4 -4
- package/dist/{agentic-memory-retention-BmGX368S.d.ts → agentic-memory-retention-CLwI76JK.d.ts} +2 -2
- package/dist/{agentic-memory-retention-Ih1qhX9Z.d.cts → agentic-memory-retention-Cz8GR6ie.d.cts} +2 -2
- package/dist/{agentic-memory-types-FnnYlVUs.d.cts → agentic-memory-types-JDr7MPhh.d.cts} +2 -2
- package/dist/{agentic-memory-types-CVSUS6XR.d.ts → agentic-memory-types-khYJgzKL.d.ts} +2 -2
- package/dist/{capability-admission-lwSecxXs.d.cts → capability-admission-B8RNFyaZ.d.cts} +3 -3
- package/dist/{capability-admission-BW2CziT6.d.ts → capability-admission-Dkw1Xz3r.d.ts} +3 -3
- package/dist/{chunk-SIDJO2T4.js → chunk-3J7UPZL5.js} +6 -6
- package/dist/{chunk-ECURQ3HD.js → chunk-3LYI6ADX.js} +4 -4
- package/dist/chunk-3LYI6ADX.js.map +1 -0
- package/dist/{chunk-M7J6Z4IJ.js → chunk-4M37FH2I.js} +2 -2
- package/dist/chunk-4M37FH2I.js.map +1 -0
- package/dist/{chunk-CJIFGJQG.js → chunk-54WPEODM.js} +2 -2
- package/dist/chunk-54WPEODM.js.map +1 -0
- package/dist/{chunk-CX6B6PO2.js → chunk-DKFWDTVY.js} +2 -2
- package/dist/chunk-DKFWDTVY.js.map +1 -0
- package/dist/{chunk-SHZDP2MQ.js → chunk-GXU6WFEJ.js} +1 -1
- package/dist/chunk-GXU6WFEJ.js.map +1 -0
- package/dist/{chunk-YDWBXXQZ.js → chunk-KFURM6FM.js} +3 -3
- package/dist/{chunk-STXRMPW4.js → chunk-MCOFHMUU.js} +2 -2
- package/dist/{chunk-EOKT4QFF.js → chunk-NNDIFUKX.js} +3 -3
- package/dist/chunk-NNDIFUKX.js.map +1 -0
- package/dist/{chunk-TPND5MJS.js → chunk-PUSRRALM.js} +3 -3
- package/dist/{chunk-7HZRJMN6.js → chunk-UEMN5URK.js} +2 -2
- package/dist/{chunk-2NJP6GO4.js → chunk-WOS7RJYZ.js} +2 -2
- package/dist/composition/index.cjs.map +1 -1
- package/dist/composition/index.d.cts +3 -3
- package/dist/composition/index.d.ts +3 -3
- package/dist/composition/index.js +3 -3
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.cts +23 -2
- package/dist/core/index.d.ts +23 -2
- package/dist/core/index.js +1 -1
- package/dist/cqrs/index.d.cts +3 -3
- package/dist/cqrs/index.d.ts +3 -3
- package/dist/cqrs/messaging.d.cts +4 -4
- package/dist/cqrs/messaging.d.ts +4 -4
- package/dist/cqrs/work-queue.d.cts +5 -5
- package/dist/cqrs/work-queue.d.ts +5 -5
- package/dist/data-structures/index.cjs.map +1 -1
- package/dist/data-structures/index.d.cts +8 -8
- package/dist/data-structures/index.d.ts +8 -8
- package/dist/data-structures/index.js +4 -4
- package/dist/{describe-CQRrkv-Q.d.cts → describe-BumQ-3_0.d.cts} +1 -1
- package/dist/{describe-B_A5fbXH.d.ts → describe-cYr_Z5zm.d.ts} +1 -1
- package/dist/executors/tool-provider-adapters.d.cts +7 -7
- package/dist/executors/tool-provider-adapters.d.ts +7 -7
- package/dist/executors/tool-provider-adapters.js +5 -5
- package/dist/executors/tool-provider-runtime.cjs.map +1 -1
- package/dist/executors/tool-provider-runtime.d.cts +8 -8
- package/dist/executors/tool-provider-runtime.d.ts +8 -8
- package/dist/executors/tool-provider-runtime.js +2 -2
- package/dist/executors/tool-provider.cjs.map +1 -1
- package/dist/executors/tool-provider.d.cts +7 -7
- package/dist/executors/tool-provider.d.ts +7 -7
- package/dist/executors/tool-provider.js +2 -2
- package/dist/executors/work-queue.d.cts +6 -6
- package/dist/executors/work-queue.d.ts +6 -6
- package/dist/graph/index.cjs.map +1 -1
- package/dist/graph/index.d.cts +9 -9
- package/dist/graph/index.d.ts +9 -9
- package/dist/graph/index.js +7 -7
- package/dist/{graph-CWK3HLPB.d.cts → graph-C1C-wb0L.d.cts} +135 -8
- package/dist/{graph-ho5sotHP.d.ts → graph-CS0b4V9B.d.ts} +135 -8
- package/dist/{index-CQWcE0Dw.d.ts → index-DLrNopda.d.cts} +135 -8
- package/dist/{index-DHA1i67c.d.cts → index-DzJni3_6.d.ts} +135 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -12
- package/dist/index.d.ts +12 -12
- package/dist/index.js +13 -13
- package/dist/inspection/boundary.d.cts +4 -4
- package/dist/inspection/boundary.d.ts +4 -4
- package/dist/{measurements-OMpCeBwh.d.ts → measurements-BWAnochv.d.ts} +139 -9
- package/dist/{measurements-C0mAvWU1.d.cts → measurements-B_gJfD8h.d.cts} +139 -9
- package/dist/messaging/index.d.cts +5 -5
- package/dist/messaging/index.d.ts +5 -5
- package/dist/operators/index.cjs.map +1 -1
- package/dist/operators/index.d.cts +5 -5
- package/dist/operators/index.d.ts +5 -5
- package/dist/operators/index.js +4 -4
- package/dist/orchestration/index.cjs.map +1 -1
- package/dist/orchestration/index.d.cts +12 -12
- package/dist/orchestration/index.d.ts +12 -12
- package/dist/orchestration/index.js +5 -5
- package/dist/orchestration/messaging.d.cts +5 -5
- package/dist/orchestration/messaging.d.ts +5 -5
- package/dist/orchestration/work-queue.d.cts +8 -8
- package/dist/orchestration/work-queue.d.ts +8 -8
- package/dist/patterns/event-flow.d.cts +4 -4
- package/dist/patterns/event-flow.d.ts +4 -4
- package/dist/patterns/index.d.cts +6 -6
- package/dist/patterns/index.d.ts +6 -6
- package/dist/{process-types-h3uRlzDc.d.cts → process-types-BB7oRhX3.d.cts} +1 -1
- package/dist/{process-types-C9uMYz3i.d.ts → process-types-QNhyoYJ8.d.ts} +1 -1
- package/dist/{reactive-collection-B9R0Bl1P.d.cts → reactive-collection-BYlWvtnp.d.cts} +3 -3
- package/dist/{reactive-collection-BXFrH0U2.d.ts → reactive-collection-efOEdGFN.d.ts} +3 -3
- package/dist/{reactive-collection-storage-BLGv8Xp8.d.cts → reactive-collection-storage-BjoLsoiC.d.cts} +5 -5
- package/dist/{reactive-collection-storage-a4zD3665.d.ts → reactive-collection-storage-DwW6UuK_.d.ts} +5 -5
- package/dist/{reactive-map-jle5dnok.d.ts → reactive-map-BHacbIqz.d.cts} +7 -3
- package/dist/{reactive-map-C_8sOfdS.d.cts → reactive-map-DN4Jyqnf.d.ts} +7 -3
- package/dist/render/index.d.cts +2 -2
- package/dist/render/index.d.ts +2 -2
- package/dist/{scheduled-readiness-5rwQlyjV.d.ts → scheduled-readiness-BmqXxnzX.d.ts} +3 -3
- package/dist/{scheduled-readiness-DpRY8jI0.d.cts → scheduled-readiness-CYSw7KDE.d.cts} +3 -3
- package/dist/{semantic-memory-graph-DlZBD_Eu.d.cts → semantic-memory-graph-B_LwbM-E.d.cts} +2 -2
- package/dist/{semantic-memory-graph-C2ZUwIlq.d.ts → semantic-memory-graph-rsFNNhwn.d.ts} +2 -2
- package/dist/{semantic-memory-graph-types-BvzdqmkY.d.cts → semantic-memory-graph-types-Y73bbwVI.d.cts} +1 -1
- package/dist/{semantic-memory-graph-types-Ci-OtahO.d.ts → semantic-memory-graph-types-safmPkuX.d.ts} +1 -1
- package/dist/solutions/index.cjs.map +1 -1
- package/dist/solutions/index.d.cts +11 -11
- package/dist/solutions/index.d.ts +11 -11
- package/dist/solutions/index.js +2 -2
- package/dist/solutions/reactive-layout/browser/index.cjs.map +1 -1
- package/dist/solutions/reactive-layout/browser/index.d.cts +4 -4
- package/dist/solutions/reactive-layout/browser/index.d.ts +4 -4
- package/dist/solutions/reactive-layout/browser/index.js +2 -2
- package/dist/solutions/reactive-layout/index.cjs.map +1 -1
- package/dist/solutions/reactive-layout/index.d.cts +6 -6
- package/dist/solutions/reactive-layout/index.d.ts +6 -6
- package/dist/solutions/reactive-layout/index.js +2 -2
- package/dist/solutions/reactive-layout/node-canvas/index.cjs.map +1 -1
- package/dist/solutions/reactive-layout/node-canvas/index.d.cts +4 -4
- package/dist/solutions/reactive-layout/node-canvas/index.d.ts +4 -4
- package/dist/solutions/reactive-layout/node-canvas/index.js +2 -2
- package/dist/solutions/reactive-layout/react-native/index.cjs.map +1 -1
- package/dist/solutions/reactive-layout/react-native/index.d.cts +4 -4
- package/dist/solutions/reactive-layout/react-native/index.d.ts +4 -4
- package/dist/solutions/reactive-layout/react-native/index.js +2 -2
- package/dist/solutions/reactive-layout/skia/index.cjs.map +1 -1
- package/dist/solutions/reactive-layout/skia/index.d.cts +4 -4
- package/dist/solutions/reactive-layout/skia/index.d.ts +4 -4
- package/dist/solutions/reactive-layout/skia/index.js +2 -2
- package/dist/solutions/work-item/actions.d.cts +10 -10
- package/dist/solutions/work-item/actions.d.ts +10 -10
- package/dist/solutions/work-item/scheduling.d.cts +9 -9
- package/dist/solutions/work-item/scheduling.d.ts +9 -9
- package/dist/solutions/work-item/work-queue.d.cts +7 -7
- package/dist/solutions/work-item/work-queue.d.ts +7 -7
- package/dist/sources/browser.cjs.map +1 -1
- package/dist/sources/browser.d.cts +22 -6
- package/dist/sources/browser.d.ts +22 -6
- package/dist/sources/browser.js +3 -3
- package/dist/sources/browser.js.map +1 -1
- package/dist/sources/index.cjs.map +1 -1
- package/dist/sources/index.d.cts +4 -4
- package/dist/sources/index.d.ts +4 -4
- package/dist/sources/index.js +3 -3
- package/dist/sources/node.d.cts +3 -3
- package/dist/sources/node.d.ts +3 -3
- package/dist/storage/index.d.cts +5 -5
- package/dist/storage/index.d.ts +5 -5
- package/dist/{store-BmtEs9mG.d.ts → store-6_CHF6Ge.d.ts} +1 -1
- package/dist/{store-PAAsYvML.d.cts → store-BljX8RkQ.d.cts} +1 -1
- package/dist/{types-BhveCMg5.d.cts → types-BAw2QVVE.d.cts} +1 -1
- package/dist/{types-XDoqxYO9.d.cts → types-BUbbbh4f.d.cts} +1 -1
- package/dist/{types-BWK2ay3e.d.cts → types-CMnzoL54.d.cts} +2 -2
- package/dist/{types-BS6CyR-x.d.cts → types-CTN3XoMl.d.cts} +30 -0
- package/dist/{types-BXKSAoE1.d.cts → types-CV_ohy5T.d.cts} +2 -2
- package/dist/{types-C9NOgNJw.d.ts → types-DChxk1vK.d.ts} +30 -0
- package/dist/{types-CTsQ8Ww4.d.ts → types-DRu7SnLV.d.ts} +1 -1
- package/dist/{types-DL_05n2M.d.ts → types-DeID_FRl.d.ts} +1 -1
- package/dist/{types-BRNKoFHj.d.ts → types-IhKH0hGW.d.ts} +2 -2
- package/dist/{types-BaPpZItj.d.ts → types-ePlD2uyT.d.ts} +2 -2
- package/dist/{work-item-runtime-types-CHO03AKh.d.cts → work-item-runtime-types-BTxLskN5.d.cts} +2 -2
- package/dist/{work-item-runtime-types-BqtWnSCS.d.ts → work-item-runtime-types-DAsZbb2y.d.ts} +2 -2
- package/dist/work-queue/index.d.cts +6 -6
- package/dist/work-queue/index.d.ts +6 -6
- package/package.json +9 -1
- package/dist/chunk-CJIFGJQG.js.map +0 -1
- package/dist/chunk-CX6B6PO2.js.map +0 -1
- package/dist/chunk-ECURQ3HD.js.map +0 -1
- package/dist/chunk-EOKT4QFF.js.map +0 -1
- package/dist/chunk-M7J6Z4IJ.js.map +0 -1
- package/dist/chunk-SHZDP2MQ.js.map +0 -1
- /package/dist/{chunk-SIDJO2T4.js.map → chunk-3J7UPZL5.js.map} +0 -0
- /package/dist/{chunk-YDWBXXQZ.js.map → chunk-KFURM6FM.js.map} +0 -0
- /package/dist/{chunk-STXRMPW4.js.map → chunk-MCOFHMUU.js.map} +0 -0
- /package/dist/{chunk-TPND5MJS.js.map → chunk-PUSRRALM.js.map} +0 -0
- /package/dist/{chunk-7HZRJMN6.js.map → chunk-UEMN5URK.js.map} +0 -0
- /package/dist/{chunk-2NJP6GO4.js.map → chunk-WOS7RJYZ.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/batch/boundary.ts","../src/batch/batch.ts","../src/dispatcher/index.ts","../src/graph/environment.ts","../src/node/versioning.ts","../src/node/core.ts","../src/node/protocol-guards.ts","../src/node/runtime-accessors.ts","../src/node/node-context-runtime.ts","../src/node/node-input-runtime.ts","../src/node/node-runtime-host.ts","../src/node/node-lifecycle-runtime.ts","../src/node/node-output-runtime.ts","../src/node/node-rewire-runtime.ts","../src/node/node.ts"],"sourcesContent":["/**\n * The wave-owner boundary + deferred self-rewire drain (R-rewire-deferred / D47).\n *\n * `ctx.rewireNext` defers a node's OWN dep-set mutation to the COMMITTED wave boundary.\n * The substrate has no such boundary on the raw call stack, so this module establishes one:\n * a module-global re-entrant DEPTH counter — the TS analogue of the Rust `WaveScope` /\n * `with_wave_owner` (graphrefly-rs B25, flagged forward-load-bearing for exactly this). JS is\n * single-threaded and waves are synchronous, so one cascade is on the stack at a time (same\n * rationale as `batch.ts`'s module-global `active`).\n *\n * Every EXTERNAL wave origin brackets its synchronous cascade with {@link enterWave} /\n * {@link exitWave}: `Node.subscribe`/`Node.down`/`Node.up` (activation, state.set, control),\n * the async-pool `ctx.down`/`ctx.up` re-entry (which enters via the stashed ctx, NOT the public\n * method), and `batch()` (so the drain fires AFTER commit). Re-entrant (nested) calls just\n * inc/dec the counter; only the OUTERMOST exit (depth → 0) DRAINS the deferred-rewire queue.\n *\n * B49 migration: the deferred thunks now live on the graph-local NodeCore, not in this module.\n * This module keeps only the JS call-stack wave-owner depth plus a small FIFO of cores that\n * have work to drain. Per D22, a graph is the supported single-thread domain; cross-domain\n * coordination is the async wire bridge (D32), so the queued work for one legal synchronous cascade\n * belongs to one graph-local core. Standalone nodes keep their private core. Within a core, FIFO\n * issue order still gives the R-rewire-deferred drain order, and the scheduler records one core\n * token per queued task so mixed-core legal batches keep their enqueue order. Each queued mutation\n * runs as a fresh wave whose own `ctx.rewireNext` calls re-enqueue and drain in the same loop.\n *\n * C-25 / D110: queued boundary work is tagged with the batch frame that caused it (when any)\n * plus an owner-readiness predicate. The drain applies only committed, unpaused tasks; rollback\n * drops the batch's tasks, and paused owners re-schedule their core on final RESUME.\n * Zero behavior change when no `ctx.rewireNext`/`ctx.upNext` is ever called: the drain is one\n * empty-queue check per outermost wave (F-PERF).\n */\n\nimport type { NodeCore } from \"../node/core.js\";\n\nlet depth = 0;\nconst pendingCores: NodeCore[] = [];\nlet pendingHead = 0;\n\n/** Enter a wave cascade (re-entrant). Pair with {@link exitWave} in a try/finally. */\nexport function enterWave(): void {\n\tdepth++;\n}\n\n/** Exit a wave cascade; the OUTERMOST exit (depth → 0) drains the deferred-rewire queue. */\nexport function exitWave(): void {\n\tdepth--;\n\tif (depth === 0 && pendingHead < pendingCores.length) drain();\n}\n\nexport interface DeferredBoundaryOptions {\n\treadonly batchToken?: object;\n\treadonly isReady?: () => boolean;\n}\n\n/**\n * Queue a deferred self-rewire application, drained at the committed boundary\n * (R-rewire-deferred). The thunk applies one queued mutation to its owning node.\n */\nexport function deferRewire(\n\tcore: NodeCore,\n\tapply: () => void,\n\toptions: DeferredBoundaryOptions = {},\n): void {\n\tcore.enqueueBoundaryTask({ apply, batchToken: options.batchToken, isReady: options.isReady });\n\tpendingCores.push(core);\n}\n\n/** Re-schedule an existing core queue, used when a final RESUME opens a paused boundary gate. */\nexport function scheduleBoundaryDrain(core: NodeCore): void {\n\tfor (let i = 0; i < core.boundaryTaskCount(); i++) pendingCores.push(core);\n\tif (depth === 0 && pendingHead < pendingCores.length) drain();\n}\n\n/** D110: an uncommitted batch cannot leak queued boundary effects. */\nexport function dropBoundaryTasksForBatch(batchToken: object): void {\n\tconst seen = new Set<NodeCore>();\n\tfor (let i = pendingHead; i < pendingCores.length; i++) {\n\t\tconst core = pendingCores[i] as NodeCore;\n\t\tif (seen.has(core)) continue;\n\t\tseen.add(core);\n\t\tcore.dropBoundaryTasksForBatch(batchToken);\n\t}\n}\n\nfunction drain(): void {\n\t// Each applied rewire runs a fresh wave (its own depth-bracketed cascade) which may itself\n\t// enqueue more rewireNext requests — appended and drained by this same FIFO loop\n\t// (DrainExactlyOnce). The depth++ around apply() prevents the fresh wave's own outermost\n\t// exit from re-entering drain (this loop owns the draining). A net-changing op re-issued\n\t// every boundary (oscillation) is a user-level runaway, like an infinite producer — NOT a\n\t// substrate-detected error (D47).\n\t//\n\t// Per-thunk isolation: a thunk whose application throws (e.g. its _applyRewireNext error-route\n\t// reaches a throwing external sink) must NOT abandon the rest of the queue — otherwise the\n\t// stranded thunks would linger in this module-global queue and drain at an unrelated LATER\n\t// wave boundary (a stale, misattributed rewire). Drain every thunk; re-surface the FIRST\n\t// escape once the queue is empty so the error stays visible without corrupting the queue.\n\tlet escaped: { e: unknown } | null = null;\n\twhile (pendingHead < pendingCores.length) {\n\t\tconst core = pendingCores[pendingHead++] as NodeCore;\n\t\tconst task = core.shiftBoundaryTask();\n\t\tif (task === undefined) continue;\n\t\tif (task.batchToken !== undefined) {\n\t\t\t// A stale token means the batch never reached the committed boundary (D110). Rollback\n\t\t\t// normally removes these before drain; this guard covers commit failures before the\n\t\t\t// batch frame marks itself committed.\n\t\t\tconst committed = (task.batchToken as { committed?: boolean }).committed === true;\n\t\t\tif (!committed) continue;\n\t\t}\n\t\tif (task.isReady !== undefined && !task.isReady()) {\n\t\t\tcore.unshiftBoundaryTask(task);\n\t\t\tcontinue;\n\t\t}\n\t\tdepth++;\n\t\ttry {\n\t\t\ttask.apply();\n\t\t} catch (e) {\n\t\t\tif (escaped === null) escaped = { e };\n\t\t} finally {\n\t\t\tdepth--;\n\t\t}\n\t}\n\tpendingCores.length = 0;\n\tpendingHead = 0;\n\tif (escaped !== null) throw escaped.e;\n}\n","/**\n * Declarative batch (R-batch-coalesce / D12).\n *\n * Inside a batch, DIRTY propagates immediately but the tier-3 settle slice\n * (DATA/RESOLVED/INVALIDATE) is deferred to commit, so a shared downstream\n * recomputes ONCE after all batched sources settle. Success -> commit; a thrown\n * error -> rollback; `bctx.rollback()` is the explicit escape hatch.\n *\n * Coalescing note: this kernel coalesces multiple emits to the SAME node within\n * one batch to the latest tier-3 wave (last-value-wins). Full per-item batch-array\n * delivery (downstream fn receiving [v1..vK]) is a documented refinement — the\n * dominant use (coalescing a diamond join to one recompute) is exact here.\n */\n\nimport type { Wave } from \"../protocol/messages.js\";\nimport { dropBoundaryTasksForBatch, enterWave, exitWave } from \"./boundary.js\";\n\n/** A node target the batch can commit/rollback against (structural, avoids an import cycle). */\nexport interface BatchTarget {\n\t__commitBatchedWave(wave: Wave): void;\n\t__rollbackBatched(): void;\n\t__deferBoundary(fn: () => void, batchToken?: object): void;\n}\n\nexport interface BatchCtx {\n\t/** Discard all deferred emissions in this batch instead of committing. */\n\trollback(): void;\n}\n\ninterface ActiveBatch {\n\torder: BatchTarget[];\n\tdeferred: Map<BatchTarget, Wave>;\n\tcommitted: boolean;\n\trolledBack: boolean;\n}\n\nlet active: ActiveBatch | null = null;\nlet boundaryOwner: ActiveBatch | null = null;\n\nexport function currentBatch(): boolean {\n\treturn active !== null;\n}\n\nexport function currentBoundaryBatchToken(): object | undefined {\n\treturn active ?? boundaryOwner ?? undefined;\n}\n\n/**\n * Defer a node's tier-3 settle slice into the active batch. Returns true if a batch\n * captured it; false if there is no active batch (caller emits normally).\n */\nexport function deferToBatch(target: BatchTarget, tier3Wave: Wave): boolean {\n\tif (active === null) return false;\n\tif (!active.deferred.has(target)) active.order.push(target);\n\tactive.deferred.set(target, tier3Wave); // last-value coalescing\n\treturn true;\n}\n\n/**\n * Defer a topology mutation until after the active batch has committed/rolled back,\n * but only when this target has an uncommitted settle slice in the current batch.\n */\nexport function deferAfterBatchForTarget(target: BatchTarget, fn: () => void): boolean {\n\tif (active === null || !active.deferred.has(target)) return false;\n\tconst owner = active;\n\ttarget.__deferBoundary(() => {\n\t\tif (owner.committed) fn();\n\t}, owner);\n\treturn true;\n}\n\nfunction commit(b: ActiveBatch): void {\n\tconst prev = boundaryOwner;\n\tboundaryOwner = b;\n\ttry {\n\t\tfor (const target of b.order) {\n\t\t\tconst wave = b.deferred.get(target);\n\t\t\tif (wave) target.__commitBatchedWave(wave);\n\t\t}\n\t\tb.committed = true;\n\t} catch (e) {\n\t\tdropBoundaryTasksForBatch(b);\n\t\tthrow e;\n\t} finally {\n\t\tboundaryOwner = prev;\n\t}\n}\n\nfunction rollback(b: ActiveBatch): void {\n\tdropBoundaryTasksForBatch(b);\n\tfor (const target of b.order) target.__rollbackBatched();\n}\n\n/** Run `fn` as a batch (D12). DATA deferred to commit; throw/rollback discards. */\nexport function batch<R>(fn: (bctx: BatchCtx) => R): R {\n\t// Wave-owner boundary (R-rewire-deferred / D47): bracket the whole batch (fn + commit) so a\n\t// ctx.rewireNext issued by a fn that runs during COMMIT drains AFTER the commit, never on the\n\t// un-committed view. Inner waves (state.set, commit cascade) nest under this owner.\n\tenterWave();\n\ttry {\n\t\tif (active !== null) {\n\t\t\t// Nested batch joins the outer frame (one commit at the outermost exit).\n\t\t\tconst outer = active;\n\t\t\treturn fn({\n\t\t\t\trollback: () => {\n\t\t\t\t\touter.rolledBack = true;\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t\tconst b: ActiveBatch = { order: [], deferred: new Map(), committed: false, rolledBack: false };\n\t\tactive = b;\n\t\tconst bctx: BatchCtx = {\n\t\t\trollback: () => {\n\t\t\t\tb.rolledBack = true;\n\t\t\t},\n\t\t};\n\t\tlet result: R;\n\t\ttry {\n\t\t\tresult = fn(bctx);\n\t\t} catch (e) {\n\t\t\tactive = null;\n\t\t\trollback(b);\n\t\t\tthrow e;\n\t\t}\n\t\tactive = null;\n\t\tif (b.rolledBack) rollback(b);\n\t\telse {\n\t\t\tcommit(b);\n\t\t}\n\t\treturn result;\n\t} finally {\n\t\texitWave();\n\t}\n}\n","/**\n * Dispatcher, pools, and the pure-data Handle.\n *\n * Canonical authority: ~/src/graphrefly/spec/rules.jsonl\n * R-handle (D7), R-dispatch-all (D21), R-sync-core (D20/D21).\n *\n * Lifted from the validated retired handle-dispatch PoC (R8/R9):\n * fn lives in an external pool, indexed by handle; `dispatcher.invoke` is uniformly\n * SYNC void — async/remote behavior lives in the fn body (it kicks off async work\n * and emits later via `ctx.down`), not in a different call mechanism.\n */\n\nimport type { Ctx, NodeFn } from \"../ctx/types.js\";\n\n/** A pool kind label. LocalSync + LocalAsync ship in 1.0 (D20). */\nexport type PoolKind = \"sync\" | \"async\";\n\n/**\n * Handle = pure data `(poolId, handleId)`, NO methods (R-handle / D7). A serializable\n * index into a pool's dispatch table. node != handle.\n */\nexport interface Handle {\n\treadonly poolId: number;\n\treadonly handleId: number;\n}\n\n/** A dispatch pool: a flat fn table + an array-indexed sync invoke. */\nexport interface Pool {\n\treadonly kind: PoolKind;\n\tregister(fn: NodeFn): number;\n\t/** Free a handle's slot so its fn closure is GC'd and the id is reused (B15). */\n\tunregister(handleId: number): void;\n\tinvoke(handleId: number, ctx: Ctx): void;\n}\n\n/**\n * Array-indexed fn table with a free-list (B15). `register` reuses a freed slot before\n * growing the array, so a rewire-heavy graph (fn-swap on every replaceDeps/subscribeDep/unsubscribeDep,\n * e.g. CSP-2.7 higher-order *Map operators) keeps the table bounded to its peak live size\n * instead of leaking a slot + closure per swap. `unregister` tombstones the slot (drops the\n * closure reference for GC) and offers the id for reuse. handleId reuse is safe: the graph is\n * a single causal domain (D22) and D37 forbids a fn rewiring its own handle mid-run, so a\n * freed id is never re-registered while an invoke of it is in flight. The hot path stays a\n * raw array index (F-PERF).\n */\nclass PoolTable implements Pool {\n\tconstructor(readonly kind: PoolKind) {}\n\tprivate fns: (NodeFn | undefined)[] = [];\n\tprivate free: number[] = [];\n\tregister(fn: NodeFn): number {\n\t\tconst reused = this.free.pop();\n\t\tif (reused !== undefined) {\n\t\t\tthis.fns[reused] = fn;\n\t\t\treturn reused;\n\t\t}\n\t\tconst id = this.fns.length;\n\t\tthis.fns.push(fn);\n\t\treturn id;\n\t}\n\tunregister(handleId: number): void {\n\t\tif (this.fns[handleId] === undefined) return; // already free → idempotent\n\t\tthis.fns[handleId] = undefined; // drop the closure (GC)\n\t\tthis.free.push(handleId); // offer the slot for reuse (bounded growth)\n\t}\n\tinvoke(handleId: number, ctx: Ctx): void {\n\t\t// A live handle always resolves to a fn; a dead/unregistered id throws (TypeError —\n\t\t// invoking an unregistered handle is a bug, surfaced loudly). Cast keeps the hot path\n\t\t// a raw index with no extra branch (F-PERF).\n\t\t(this.fns[handleId] as NodeFn)(ctx);\n\t}\n}\n\n/**\n * First-class dispatcher (D21). Owns pools; graph binds to one (default = process-global,\n * D26 — the only global singleton). Pool trait is pluggable for WorkerPool/RemotePool (D20).\n */\n/** Per-handle profiling counters (D39 / R-profile). Lives on the dispatcher — the invoke\n * funnel (F-DISPATCH-ALL) — NEVER on the thin node (R-node-thin). */\nexport interface HandleStat {\n\tinvokes: number;\n\ttotalDurationNs: number;\n\tlastDurationNs: number;\n}\n\nconst statKey = (h: Handle): string => `${h.poolId}:${h.handleId}`;\n\nexport class Dispatcher {\n\tprivate pools: Pool[] = [];\n\treadonly syncPoolId: number;\n\treadonly asyncPoolId: number;\n\n\t// opt-in profile recorder (default OFF → zero overhead, F-PERF).\n\tprivate _recording = false;\n\tprivate _stats = new Map<string, HandleStat>();\n\tprivate _totalInvokes = 0;\n\n\tconstructor() {\n\t\tthis.syncPoolId = this.addPool(new PoolTable(\"sync\"));\n\t\tthis.asyncPoolId = this.addPool(new PoolTable(\"async\"));\n\t}\n\n\t/** Turn the profile recorder on/off (D39). Off = zero overhead on invoke. */\n\tsetRecording(on: boolean): void {\n\t\tthis._recording = on;\n\t}\n\t/** Reset accumulated profiling counters. */\n\tclearStats(): void {\n\t\tthis._stats.clear();\n\t\tthis._totalInvokes = 0;\n\t}\n\t/** Read a handle's accumulated counters (undefined if it never ran while recording). */\n\tstatFor(handle: Handle): HandleStat | undefined {\n\t\treturn this._stats.get(statKey(handle));\n\t}\n\t/** Total fn invocations recorded across the dispatcher. */\n\tget totalInvokes(): number {\n\t\treturn this._totalInvokes;\n\t}\n\n\taddPool(pool: Pool): number {\n\t\tconst id = this.pools.length;\n\t\tthis.pools.push(pool);\n\t\treturn id;\n\t}\n\n\t/** Register a fn in a pool, returning its Handle. Default pool = sync (R-sync-core). */\n\tregister(fn: NodeFn, pool: PoolKind | number = \"sync\"): Handle {\n\t\tconst poolId = pool === \"sync\" ? this.syncPoolId : pool === \"async\" ? this.asyncPoolId : pool;\n\t\tconst handleId = this.pools[poolId].register(fn);\n\t\treturn { poolId, handleId };\n\t}\n\n\t/**\n\t * Release a handle (B15): frees the pool slot (closure GC'd, id reusable) and drops any\n\t * accumulated profile stat so a reused id never inherits the previous tenant's counters.\n\t * Called on rewire fn-swap (node._rewire) — the old handle is dropped before the node\n\t * adopts the new one. Idempotent. NOT called on deactivate (a node's handle survives\n\t * activate↔deactivate and is reused on reactivation; only a rewire swaps it).\n\t */\n\tunregister(handle: Handle): void {\n\t\tthis.pools[handle.poolId].unregister(handle.handleId);\n\t\t// Drop the stat UNCONDITIONALLY (QA F2.1), not only while recording: if recording was\n\t\t// OFF at unregister time the key would linger, and a later register reusing this id (the\n\t\t// free-list) would inherit the prior tenant's counters once recording resumes. delete of\n\t\t// an absent key is a cheap no-op; unregister is off the hot invoke path (F-PERF intact).\n\t\tthis._stats.delete(statKey(handle));\n\t}\n\n\t/** Uniform sync-void invoke (R-sync-core / R-dispatch-all). */\n\tinvoke(handle: Handle, ctx: Ctx): void {\n\t\tif (!this._recording) {\n\t\t\tthis.pools[handle.poolId].invoke(handle.handleId, ctx);\n\t\t\treturn;\n\t\t}\n\t\tthis._totalInvokes++;\n\t\tconst t0 = performance.now();\n\t\ttry {\n\t\t\tthis.pools[handle.poolId].invoke(handle.handleId, ctx);\n\t\t} finally {\n\t\t\tconst dur = (performance.now() - t0) * 1e6; // ms → ns\n\t\t\tconst key = statKey(handle);\n\t\t\tconst s = this._stats.get(key) ?? {\n\t\t\t\tinvokes: 0,\n\t\t\t\ttotalDurationNs: 0,\n\t\t\t\tlastDurationNs: 0,\n\t\t\t};\n\t\t\ts.invokes++;\n\t\t\ts.lastDurationNs = dur;\n\t\t\ts.totalDurationNs += dur;\n\t\t\tthis._stats.set(key, s);\n\t\t}\n\t}\n\n\tpoolKind(poolId: number): PoolKind {\n\t\treturn this.pools[poolId].kind;\n\t}\n}\n\n/** The only global singleton (D26). Overridable by passing an explicit dispatcher. */\nexport const defaultDispatcher = new Dispatcher();\n","/**\n * Graph-owned environment driver bag (D130/D131).\n *\n * Drivers host process/network/messaging/runtime boundary work outside the synchronous wave core.\n * The bag is graph-local and is read from ctx by source/adapter bodies.\n */\n\nexport type DriverCancel = () => void;\n\nexport type DriverResult<T> =\n\t| { readonly ok: true; readonly value: T }\n\t| { readonly ok: false; readonly error: unknown };\n\nexport interface ProcessCommand {\n\treadonly program: string;\n\treadonly args: readonly string[];\n\treadonly cwd?: string;\n\treadonly env?: readonly (readonly [string, string])[];\n}\n\nexport interface ProcessResult {\n\treadonly stdout: string;\n\treadonly stderr: string;\n\treadonly exitCode: number | null;\n\treadonly signal: string | null;\n}\n\nexport interface HttpRequest {\n\treadonly method: string;\n\treadonly url: string;\n\treadonly headers?: readonly (readonly [string, string])[];\n\treadonly body?: Uint8Array | string;\n}\n\nexport interface HttpResponse {\n\treadonly status: number;\n\treadonly headers: readonly (readonly [string, string])[];\n\treadonly body: Uint8Array;\n}\n\nexport interface SseRequest {\n\treadonly url: string;\n\treadonly headers?: readonly (readonly [string, string])[];\n}\n\nexport interface SseEvent {\n\treadonly event?: string;\n\treadonly data: string;\n\treadonly id?: string;\n\treadonly retryMs?: number;\n}\n\nexport type SseDriverEvent =\n\t| { readonly kind: \"event\"; readonly event: SseEvent }\n\t| { readonly kind: \"error\"; readonly error: unknown }\n\t| { readonly kind: \"complete\" };\n\nexport interface WebSocketRequest {\n\treadonly url: string;\n\treadonly headers?: readonly (readonly [string, string])[];\n}\n\nexport type WebSocketEvent =\n\t| { readonly kind: \"open\" }\n\t| { readonly kind: \"text\"; readonly data: string }\n\t| { readonly kind: \"binary\"; readonly data: Uint8Array }\n\t| { readonly kind: \"close\"; readonly code?: number; readonly reason?: string };\n\nexport interface WebSocketSend {\n\treadonly data: string | Uint8Array;\n}\n\nexport interface WebSocketSendResult {\n\treadonly sent: true;\n}\n\n/** Live WebSocket session handle for D133 SessionBundle adapters. */\nexport interface WebSocketSessionHandle {\n\tsend(\n\t\tmessage: WebSocketSend,\n\t\tcallback: (result: DriverResult<WebSocketSendResult>) => void,\n\t): DriverCancel;\n\tclose(code?: number, reason?: string): void;\n\tcancel(): void;\n}\n\nexport type WebSocketDriverEvent =\n\t| { readonly kind: \"event\"; readonly event: WebSocketEvent }\n\t| { readonly kind: \"error\"; readonly error: unknown }\n\t| { readonly kind: \"complete\" };\n\nexport interface WebhookRegistration {\n\treadonly id: string;\n\treadonly method?: string;\n\treadonly path?: string;\n}\n\nexport interface WebhookEvent {\n\treadonly registrationId: string;\n\treadonly method: string;\n\treadonly path: string;\n\treadonly headers: readonly (readonly [string, string])[];\n\treadonly query: readonly (readonly [string, string])[];\n\treadonly body: Uint8Array;\n}\n\nexport type WebhookDriverEvent =\n\t| { readonly kind: \"event\"; readonly event: WebhookEvent }\n\t| { readonly kind: \"error\"; readonly error: unknown }\n\t| { readonly kind: \"complete\" };\n\nexport interface LocalProcessDriver {\n\trun(\n\t\tcommand: ProcessCommand,\n\t\tcallback: (result: DriverResult<ProcessResult>) => void,\n\t): DriverCancel;\n}\n\nexport interface LocalHttpDriver {\n\trequest(\n\t\trequest: HttpRequest,\n\t\tcallback: (result: DriverResult<HttpResponse>) => void,\n\t): DriverCancel;\n}\n\nexport interface LocalSseDriver {\n\tconnect(request: SseRequest, callback: (event: SseDriverEvent) => void): DriverCancel;\n}\n\nexport interface LocalWebSocketDriver {\n\tconnect(request: WebSocketRequest, callback: (event: WebSocketDriverEvent) => void): DriverCancel;\n\tsend?(\n\t\trequest: WebSocketRequest,\n\t\tmessage: WebSocketSend,\n\t\tcallback: (result: DriverResult<WebSocketSendResult>) => void,\n\t): DriverCancel;\n\t/** Open a live bidirectional session; unlike send(), outbound messages use this same connection. */\n\tconnectSession?(\n\t\trequest: WebSocketRequest,\n\t\tcallback: (event: WebSocketDriverEvent) => void,\n\t): WebSocketSessionHandle;\n}\n\nexport interface LocalWebhookDriver {\n\tregister(\n\t\tregistration: WebhookRegistration,\n\t\tcallback: (event: WebhookDriverEvent) => void,\n\t): DriverCancel;\n}\n\nexport interface FetchResponseLike {\n\treadonly status: number;\n\treadonly headers?: { forEach?(fn: (value: string, key: string) => void): void };\n\tarrayBuffer(): PromiseLike<ArrayBuffer>;\n}\n\nexport type FetchLike = (\n\turl: string,\n\tinit?: {\n\t\treadonly method?: string;\n\t\treadonly headers?: readonly (readonly [string, string])[];\n\t\treadonly body?: Uint8Array | string;\n\t\treadonly signal?: AbortSignal;\n\t},\n) => PromiseLike<FetchResponseLike>;\n\nexport interface WebSocketLike {\n\tsend(data: string | Uint8Array): void;\n\tclose(code?: number, reason?: string): void;\n\taddEventListener(\n\t\ttype: \"open\" | \"message\" | \"error\" | \"close\",\n\t\tlistener: (event: unknown) => void,\n\t): void;\n\tremoveEventListener(\n\t\ttype: \"open\" | \"message\" | \"error\" | \"close\",\n\t\tlistener: (event: unknown) => void,\n\t): void;\n}\n\nexport type WebSocketConstructorLike = new (url: string) => WebSocketLike;\n\nexport interface EnvironmentDriversInit {\n\treadonly process?: LocalProcessDriver;\n\treadonly http?: LocalHttpDriver;\n\treadonly sse?: LocalSseDriver;\n\treadonly websocket?: LocalWebSocketDriver;\n\treadonly webhook?: LocalWebhookDriver;\n}\n\nexport class EnvironmentDrivers {\n\treadonly process?: LocalProcessDriver;\n\treadonly http?: LocalHttpDriver;\n\treadonly sse?: LocalSseDriver;\n\treadonly websocket?: LocalWebSocketDriver;\n\treadonly webhook?: LocalWebhookDriver;\n\n\tconstructor(init: EnvironmentDriversInit = {}) {\n\t\tthis.process = init.process;\n\t\tthis.http = init.http;\n\t\tthis.sse = init.sse;\n\t\tthis.websocket = init.websocket;\n\t\tthis.webhook = init.webhook;\n\t\tObject.freeze(this);\n\t}\n\n\tstatic empty(): EnvironmentDrivers {\n\t\treturn EMPTY_ENVIRONMENT;\n\t}\n\n\twithProcess(driver: LocalProcessDriver): EnvironmentDrivers {\n\t\treturn new EnvironmentDrivers({ ...this, process: driver });\n\t}\n\n\twithHttp(driver: LocalHttpDriver): EnvironmentDrivers {\n\t\treturn new EnvironmentDrivers({ ...this, http: driver });\n\t}\n\n\twithSse(driver: LocalSseDriver): EnvironmentDrivers {\n\t\treturn new EnvironmentDrivers({ ...this, sse: driver });\n\t}\n\n\twithWebSocket(driver: LocalWebSocketDriver): EnvironmentDrivers {\n\t\treturn new EnvironmentDrivers({ ...this, websocket: driver });\n\t}\n\n\twithWebhook(driver: LocalWebhookDriver): EnvironmentDrivers {\n\t\treturn new EnvironmentDrivers({ ...this, webhook: driver });\n\t}\n\n\tprocessDriver(): LocalProcessDriver | undefined {\n\t\treturn this.process;\n\t}\n\n\thttpDriver(): LocalHttpDriver | undefined {\n\t\treturn this.http;\n\t}\n\n\tsseDriver(): LocalSseDriver | undefined {\n\t\treturn this.sse;\n\t}\n\n\twebSocketDriver(): LocalWebSocketDriver | undefined {\n\t\treturn this.websocket;\n\t}\n\n\twebhookDriver(): LocalWebhookDriver | undefined {\n\t\treturn this.webhook;\n\t}\n}\n\nconst EMPTY_ENVIRONMENT = new EnvironmentDrivers();\n\nexport function fetchHttpDriver(fetchFn: FetchLike = requireGlobalFetch()): LocalHttpDriver {\n\treturn {\n\t\trequest(request, callback) {\n\t\t\tconst controller = new AbortController();\n\t\t\tvoid Promise.resolve(\n\t\t\t\tfetchFn(request.url, {\n\t\t\t\t\tmethod: request.method,\n\t\t\t\t\theaders: request.headers,\n\t\t\t\t\tbody: request.body,\n\t\t\t\t\tsignal: controller.signal,\n\t\t\t\t}),\n\t\t\t).then(\n\t\t\t\tasync (response) => {\n\t\t\t\t\tconst headers: Array<readonly [string, string]> = [];\n\t\t\t\t\tresponse.headers?.forEach?.((value, key) => {\n\t\t\t\t\t\theaders.push([key, value]);\n\t\t\t\t\t});\n\t\t\t\t\tconst body = new Uint8Array(await response.arrayBuffer());\n\t\t\t\t\tcallback({ ok: true, value: { status: response.status, headers, body } });\n\t\t\t\t},\n\t\t\t\t(error) => callback({ ok: false, error }),\n\t\t\t);\n\t\t\treturn () => controller.abort();\n\t\t},\n\t};\n}\n\nexport function domWebSocketDriver(\n\tWebSocketCtor: WebSocketConstructorLike = requireGlobalWebSocket(),\n): LocalWebSocketDriver {\n\treturn {\n\t\tconnect(request, callback) {\n\t\t\tconst socket = new WebSocketCtor(request.url);\n\t\t\tconst onOpen = () => callback({ kind: \"event\", event: { kind: \"open\" } });\n\t\t\tconst onMessage = (event: unknown) => {\n\t\t\t\tconst data = (event as { data?: unknown }).data;\n\t\t\t\tif (typeof data === \"string\") callback({ kind: \"event\", event: { kind: \"text\", data } });\n\t\t\t\telse if (data instanceof Uint8Array) {\n\t\t\t\t\tcallback({ kind: \"event\", event: { kind: \"binary\", data } });\n\t\t\t\t} else {\n\t\t\t\t\tcallback({ kind: \"event\", event: { kind: \"text\", data: String(data ?? \"\") } });\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst onError = (event: unknown) => callback({ kind: \"error\", error: event });\n\t\t\tconst onClose = (event: unknown) => {\n\t\t\t\tconst close = event as { code?: number; reason?: string };\n\t\t\t\tcallback({\n\t\t\t\t\tkind: \"event\",\n\t\t\t\t\tevent: { kind: \"close\", code: close.code, reason: close.reason },\n\t\t\t\t});\n\t\t\t\tcallback({ kind: \"complete\" });\n\t\t\t};\n\t\t\tsocket.addEventListener(\"open\", onOpen);\n\t\t\tsocket.addEventListener(\"message\", onMessage);\n\t\t\tsocket.addEventListener(\"error\", onError);\n\t\t\tsocket.addEventListener(\"close\", onClose);\n\t\t\treturn () => {\n\t\t\t\tsocket.removeEventListener(\"open\", onOpen);\n\t\t\t\tsocket.removeEventListener(\"message\", onMessage);\n\t\t\t\tsocket.removeEventListener(\"error\", onError);\n\t\t\t\tsocket.removeEventListener(\"close\", onClose);\n\t\t\t\tsocket.close();\n\t\t\t};\n\t\t},\n\t\tsend(request, message, callback) {\n\t\t\tconst socket = new WebSocketCtor(request.url);\n\t\t\tlet settled = false;\n\t\t\tconst finish = (result: DriverResult<WebSocketSendResult>) => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\tcallback(result);\n\t\t\t\tsocket.close();\n\t\t\t};\n\t\t\tconst onOpen = () => {\n\t\t\t\ttry {\n\t\t\t\t\tsocket.send(message.data);\n\t\t\t\t\tfinish({ ok: true, value: { sent: true } });\n\t\t\t\t} catch (error) {\n\t\t\t\t\tfinish({ ok: false, error });\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst onError = (event: unknown) => finish({ ok: false, error: event });\n\t\t\tsocket.addEventListener(\"open\", onOpen);\n\t\t\tsocket.addEventListener(\"error\", onError);\n\t\t\treturn () => {\n\t\t\t\tsettled = true;\n\t\t\t\tsocket.removeEventListener(\"open\", onOpen);\n\t\t\t\tsocket.removeEventListener(\"error\", onError);\n\t\t\t\tsocket.close();\n\t\t\t};\n\t\t},\n\t\tconnectSession(request, callback) {\n\t\t\tconst socket = new WebSocketCtor(request.url);\n\t\t\tlet active = true;\n\t\t\tconst onOpen = () => callback({ kind: \"event\", event: { kind: \"open\" } });\n\t\t\tconst onMessage = (event: unknown) => {\n\t\t\t\tconst data = (event as { data?: unknown }).data;\n\t\t\t\tif (typeof data === \"string\") callback({ kind: \"event\", event: { kind: \"text\", data } });\n\t\t\t\telse if (data instanceof Uint8Array) {\n\t\t\t\t\tcallback({ kind: \"event\", event: { kind: \"binary\", data } });\n\t\t\t\t} else {\n\t\t\t\t\tcallback({ kind: \"event\", event: { kind: \"text\", data: String(data ?? \"\") } });\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst onError = (event: unknown) => callback({ kind: \"error\", error: event });\n\t\t\tconst onClose = (event: unknown) => {\n\t\t\t\tconst close = event as { code?: number; reason?: string };\n\t\t\t\tcallback({\n\t\t\t\t\tkind: \"event\",\n\t\t\t\t\tevent: { kind: \"close\", code: close.code, reason: close.reason },\n\t\t\t\t});\n\t\t\t\tcallback({ kind: \"complete\" });\n\t\t\t};\n\t\t\tconst removeListeners = () => {\n\t\t\t\tsocket.removeEventListener(\"open\", onOpen);\n\t\t\t\tsocket.removeEventListener(\"message\", onMessage);\n\t\t\t\tsocket.removeEventListener(\"error\", onError);\n\t\t\t\tsocket.removeEventListener(\"close\", onClose);\n\t\t\t};\n\t\t\tsocket.addEventListener(\"open\", onOpen);\n\t\t\tsocket.addEventListener(\"message\", onMessage);\n\t\t\tsocket.addEventListener(\"error\", onError);\n\t\t\tsocket.addEventListener(\"close\", onClose);\n\t\t\treturn {\n\t\t\t\tsend(message, sendCallback) {\n\t\t\t\t\tlet canceled = false;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tsocket.send(message.data);\n\t\t\t\t\t\tif (!canceled) sendCallback({ ok: true, value: { sent: true } });\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (!canceled) sendCallback({ ok: false, error });\n\t\t\t\t\t}\n\t\t\t\t\treturn () => {\n\t\t\t\t\t\tcanceled = true;\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tclose(code, reason) {\n\t\t\t\t\tif (!active) return;\n\t\t\t\t\tsocket.close(code, reason);\n\t\t\t\t},\n\t\t\t\tcancel() {\n\t\t\t\t\tif (!active) return;\n\t\t\t\t\tactive = false;\n\t\t\t\t\tremoveListeners();\n\t\t\t\t\tsocket.close();\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n}\n\nfunction requireGlobalFetch(): FetchLike {\n\tconst fetchFn = (globalThis as { fetch?: FetchLike }).fetch;\n\tif (fetchFn === undefined) throw new Error(\"fetchHttpDriver: global fetch is not available\");\n\treturn fetchFn;\n}\n\nfunction requireGlobalWebSocket(): WebSocketConstructorLike {\n\tconst ctor = (globalThis as { WebSocket?: WebSocketConstructorLike }).WebSocket;\n\tif (ctor === undefined) throw new Error(\"domWebSocketDriver: global WebSocket is not available\");\n\treturn ctor;\n}\n","import { strictCanonicalJsonBytes, strictJsonCodec } from \"../json/codec.js\";\n\nexport type NodeVersioningLevel = 0 | 1;\n\n/**\n * D112 V1 node-version hash callback.\n *\n * The callback receives strict canonical JSON UTF-8 DATA bytes, not the raw host value.\n * Runtime V1 versioning encodes DATA with `strictCanonicalJsonBytes(value)` before calling hash.\n */\nexport type NodeVersionHashFn = (bytes: Uint8Array) => string;\n\nexport type NodeVersioningPolicy =\n\t| false\n\t| 0\n\t| 1\n\t| {\n\t\t\tlevel: NodeVersioningLevel;\n\t\t\thash?: NodeVersionHashFn;\n\t };\n\nexport type ResolvedNodeVersioningPolicy =\n\t| { readonly enabled: false }\n\t| { readonly enabled: true; readonly level: 0 }\n\t| { readonly enabled: true; readonly level: 1; readonly hash: NodeVersionHashFn };\n\nexport type NodeVersionV0 = {\n\treadonly level: 0;\n\treadonly counter: number;\n};\n\nexport type NodeVersionV1 = {\n\treadonly level: 1;\n\treadonly counter: number;\n\treadonly cid: string;\n\treadonly prev: string | null;\n};\n\nexport type NodeVersion = NodeVersionV0 | NodeVersionV1;\n\nexport type NodeVersionJson = NodeVersion;\n\nconst ABSENT_V1_SEED = Object.freeze({\n\t\"@graphrefly/node-version\": \"v1-absent\",\n});\n\nfunction fnv1a64(input: Uint8Array): string {\n\tlet hash = 0xcbf29ce484222325n;\n\tconst prime = 0x100000001b3n;\n\tfor (const byte of input) {\n\t\thash ^= BigInt(byte);\n\t\thash = BigInt.asUintN(64, hash * prime);\n\t}\n\treturn hash.toString(16).padStart(16, \"0\");\n}\n\n/**\n * Default synchronous D112 V1 node-version hash over strict canonical JSON UTF-8 bytes.\n *\n * When hashing a host value directly, encode first:\n * `defaultNodeVersionHash(strictCanonicalJsonBytes(value))`.\n */\nexport function defaultNodeVersionHash(bytes: Uint8Array): string {\n\treturn `fnv1a64:${fnv1a64(bytes)}`;\n}\n\nfunction computeV1Cid(\n\tpolicy: Extract<ResolvedNodeVersioningPolicy, { enabled: true; level: 1 }>,\n\tvalue: unknown,\n): string {\n\treturn policy.hash(strictCanonicalJsonBytes(value));\n}\n\nexport function assertNodeVersionDataCompatible(\n\tpolicy: ResolvedNodeVersioningPolicy,\n\tvalue: unknown,\n): void {\n\tif (!policy.enabled || policy.level === 0) return;\n\tstrictCanonicalJsonBytes(value);\n}\n\nexport function snapshotNodeVersionData(\n\tpolicy: ResolvedNodeVersioningPolicy,\n\tvalue: unknown,\n): unknown {\n\tif (!policy.enabled || policy.level === 0) return value;\n\tconst bytes = strictCanonicalJsonBytes(value);\n\treturn strictJsonCodec.decode(bytes);\n}\n\nexport function resolveNodeVersioningPolicy(\n\tpolicy: NodeVersioningPolicy | undefined,\n): ResolvedNodeVersioningPolicy {\n\tif (policy === false) return { enabled: false };\n\tif (policy === undefined || policy === 0) return { enabled: true, level: 0 };\n\tif (policy === 1) return { enabled: true, level: 1, hash: defaultNodeVersionHash };\n\tif (typeof policy === \"object\" && policy !== null) {\n\t\tif (policy.level === 0) return { enabled: true, level: 0 };\n\t\tif (policy.level === 1) {\n\t\t\treturn { enabled: true, level: 1, hash: policy.hash ?? defaultNodeVersionHash };\n\t\t}\n\t}\n\tthrow new Error(\"node: versioning level must be 0 or 1; V2/V3 are not locked yet (D109)\");\n}\n\nexport function createNodeVersion(\n\tpolicy: ResolvedNodeVersioningPolicy,\n\tinitialValue: unknown = ABSENT_V1_SEED,\n): NodeVersion | undefined {\n\tif (!policy.enabled) return undefined;\n\tif (policy.level === 0) return Object.freeze({ level: 0, counter: 0 });\n\treturn Object.freeze({\n\t\tlevel: 1,\n\t\tcounter: 0,\n\t\tcid: computeV1Cid(policy, initialValue),\n\t\tprev: null,\n\t});\n}\n\nexport function advanceNodeVersion(\n\tcurrent: NodeVersion | undefined,\n\tpolicy: ResolvedNodeVersioningPolicy,\n\tvalue: unknown,\n): NodeVersion | undefined {\n\tif (!policy.enabled) return undefined;\n\tif (current === undefined) return createNodeVersion(policy, value);\n\tif (policy.level === 0) {\n\t\treturn Object.freeze({ level: 0, counter: current.counter + 1 });\n\t}\n\tconst previous = current.level === 1 ? current.cid : null;\n\treturn Object.freeze({\n\t\tlevel: 1,\n\t\tcounter: current.counter + 1,\n\t\tcid: computeV1Cid(policy, value),\n\t\tprev: previous,\n\t});\n}\n\nexport function cloneNodeVersion(version: NodeVersion | undefined): NodeVersion | undefined {\n\tif (version === undefined) return undefined;\n\tif (version.level === 0) return Object.freeze({ level: 0, counter: version.counter });\n\treturn Object.freeze({\n\t\tlevel: 1,\n\t\tcounter: version.counter,\n\t\tcid: version.cid,\n\t\tprev: version.prev,\n\t});\n}\n\nexport function restoredV1Cid(\n\tpolicy: Extract<ResolvedNodeVersioningPolicy, { enabled: true; level: 1 }>,\n\thasData: boolean,\n\tcache: unknown,\n): string {\n\treturn computeV1Cid(policy, hasData ? cache : ABSENT_V1_SEED);\n}\n\nexport function validateNodeVersionJson(value: unknown, path: string): NodeVersionJson {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tthrow new Error(`restoreGraph: ${path} must be an object`);\n\t}\n\tconst record = value as Record<string, unknown>;\n\tif (record.level === 0) {\n\t\tif (!Number.isSafeInteger(record.counter) || (record.counter as number) < 0) {\n\t\t\tthrow new Error(`restoreGraph: ${path}.counter must be a non-negative safe integer`);\n\t\t}\n\t\treturn Object.freeze({ level: 0, counter: record.counter as number });\n\t}\n\tif (record.level === 1) {\n\t\tif (!Number.isSafeInteger(record.counter) || (record.counter as number) < 0) {\n\t\t\tthrow new Error(`restoreGraph: ${path}.counter must be a non-negative safe integer`);\n\t\t}\n\t\tif (typeof record.cid !== \"string\") {\n\t\t\tthrow new Error(`restoreGraph: ${path}.cid must be a string`);\n\t\t}\n\t\tif (record.prev !== null && typeof record.prev !== \"string\") {\n\t\t\tthrow new Error(`restoreGraph: ${path}.prev must be a string or null`);\n\t\t}\n\t\tif ((record.counter as number) === 0 && record.prev !== null) {\n\t\t\tthrow new Error(`restoreGraph: ${path}.prev must be null when counter is 0`);\n\t\t}\n\t\tif ((record.counter as number) > 0 && typeof record.prev !== \"string\") {\n\t\t\tthrow new Error(`restoreGraph: ${path}.prev must be a string when counter is > 0`);\n\t\t}\n\t\treturn Object.freeze({\n\t\t\tlevel: 1,\n\t\t\tcounter: record.counter as number,\n\t\t\tcid: record.cid,\n\t\t\tprev: record.prev,\n\t\t});\n\t}\n\tthrow new Error(`restoreGraph: ${path}.level must be 0 or 1`);\n}\n","import type { Ctx, Sink } from \"../ctx/types.js\";\nimport type { Dispatcher, Handle } from \"../dispatcher/index.js\";\nimport type { EnvironmentDrivers } from \"../graph/environment.js\";\nimport { type LockId, type PullDemand, SENTINEL, type Wave } from \"../protocol/messages.js\";\nimport type { Node, Status } from \"./node.js\";\nimport type { NodeVersion, ResolvedNodeVersioningPolicy } from \"./versioning.js\";\n\nexport type NodeId = number & { readonly __nodeId: unique symbol };\n\nexport interface DepBookkeeping {\n\tbatch: Array<unknown[] | null>;\n\twaveData: unknown[][][];\n\twaveTokens: Array<object | undefined>;\n\tprev: unknown[];\n\thasData: boolean[];\n\tdirty: boolean[];\n\ttier: number[];\n\tterminal: Array<true | unknown | undefined>;\n\tterminalInput: Array<true | unknown | undefined>;\n\tunsubs: Array<() => void>;\n\tidxBoxes: Array<{ v: number }>;\n}\n\nexport interface ValueState<T> {\n\tcache: T | undefined;\n\thasData: boolean;\n\tstatus: Status;\n\tterminal: true | unknown | undefined;\n\thasTorndown: boolean;\n\treplayRing: T[];\n}\n\nexport interface VersionState {\n\tpolicy: ResolvedNodeVersioningPolicy;\n\tvalue: NodeVersion | undefined;\n}\n\nexport interface WaveState {\n\tpending: number;\n\thasCalledFnOnce: boolean;\n\temittedDirtyThisWave: boolean;\n\temittedSettleThisWave: boolean;\n\tinsideRunWave: boolean;\n\tinDepMutation: boolean;\n\trewireRunPending: boolean;\n\tbatchDirtyOwed: boolean;\n}\n\nexport interface ControlState {\n\tpauseLockset: Set<unknown>;\n\tpausedDepWaveOccurred: boolean;\n\tpauseBuffer: Wave[];\n\tdemandOwed: PullDemand | undefined;\n\tactivePull: PullDemand | undefined;\n\tpullDirtyOwed: boolean;\n\tinDeliverDemand: boolean;\n}\n\nexport interface PrivateState {\n\tvalue: unknown;\n\tpersist: boolean;\n}\n\nexport interface CleanupHooks {\n\tonDeactivation: Array<() => void>;\n\tonInvalidate: Array<() => void>;\n}\n\nexport interface SyncCtxState {\n\tvalue: Ctx | null;\n}\n\nexport interface LifecycleState {\n\tsubscribers: Set<Sink>;\n\tactivated: boolean;\n}\n\nexport interface BoundaryTask {\n\tapply: () => void;\n\tbatchToken?: object;\n\tisReady?: () => boolean;\n}\n\nexport interface BoundaryState {\n\tqueue: BoundaryTask[];\n\thead: number;\n}\n\nexport interface NodeSlot<_T> {\n\tid: NodeId;\n\tdeps: Node<unknown>[];\n\thandle: Handle | null;\n\tpool: \"sync\" | \"async\";\n\tdispatcher: Dispatcher;\n\tenvironment: EnvironmentDrivers;\n\tpartial: boolean;\n\tterminalAsRealInput: boolean;\n\tcompleteWhenDepsComplete: boolean;\n\terrorWhenDepsError: boolean;\n\tresubscribable: boolean;\n\tresetOnTeardown: boolean;\n\tpausable: boolean | \"resumeAll\";\n\tpull: boolean;\n\tpullLock: LockId | undefined;\n\treplayN: number;\n\tdynamic: boolean;\n\tname?: string;\n\tfactory?: string;\n}\n\nexport interface NodeState<T> {\n\tdep: DepBookkeeping;\n\tlifecycle: LifecycleState;\n\tvalue: ValueState<T>;\n\tversion: VersionState;\n\twave: WaveState;\n\tcontrol: ControlState;\n\tprivateState: PrivateState;\n\thooks: CleanupHooks;\n\tsyncCtx: SyncCtxState;\n}\n\nexport class NodeCore {\n\tprivate nextId = 0;\n\tprivate readonly slots: Array<NodeSlot<unknown> | undefined> = [];\n\tprivate readonly values: Array<ValueState<unknown> | undefined> = [];\n\tprivate readonly waves: Array<WaveState | undefined> = [];\n\tprivate readonly controls: Array<ControlState | undefined> = [];\n\tprivate readonly lifecycles: Array<LifecycleState | undefined> = [];\n\tprivate readonly depStates: Array<DepBookkeeping | undefined> = [];\n\tprivate readonly privateStates: Array<PrivateState | undefined> = [];\n\tprivate readonly hooks: Array<CleanupHooks | undefined> = [];\n\tprivate readonly syncCtxs: Array<SyncCtxState | undefined> = [];\n\tprivate readonly versionStates: Array<VersionState | undefined> = [];\n\tprivate readonly boundary: BoundaryState = { queue: [], head: 0 };\n\n\tcreateSlot<T>(\n\t\tslot: Omit<NodeSlot<T>, \"id\">,\n\t\tstate: NodeState<T>,\n\t): { id: NodeId; slot: NodeSlot<T> } {\n\t\tconst id = this.nextId++ as NodeId;\n\t\tconst full = { ...slot, id };\n\t\tthis.slots[id] = full as NodeSlot<unknown>;\n\t\tthis.depStates[id] = state.dep;\n\t\tthis.lifecycles[id] = state.lifecycle;\n\t\tthis.values[id] = state.value as ValueState<unknown>;\n\t\tthis.waves[id] = state.wave;\n\t\tthis.controls[id] = state.control;\n\t\tthis.privateStates[id] = state.privateState;\n\t\tthis.hooks[id] = state.hooks;\n\t\tthis.syncCtxs[id] = state.syncCtx;\n\t\tthis.versionStates[id] = state.version;\n\t\treturn { id, slot: full };\n\t}\n\n\tget<T>(id: NodeId): NodeSlot<T> {\n\t\tconst slot = this.slots[id];\n\t\tif (slot === undefined) throw new Error(\"NodeCore: unknown node slot\");\n\t\treturn slot as NodeSlot<T>;\n\t}\n\n\tgetValue<T>(id: NodeId): ValueState<T> {\n\t\tconst value = this.values[id];\n\t\tif (value === undefined) throw new Error(\"NodeCore: unknown node value state\");\n\t\treturn value as ValueState<T>;\n\t}\n\n\tgetWave(id: NodeId): WaveState {\n\t\tconst wave = this.waves[id];\n\t\tif (wave === undefined) throw new Error(\"NodeCore: unknown node wave state\");\n\t\treturn wave;\n\t}\n\n\tgetControl(id: NodeId): ControlState {\n\t\tconst control = this.controls[id];\n\t\tif (control === undefined) throw new Error(\"NodeCore: unknown node control state\");\n\t\treturn control;\n\t}\n\n\tgetLifecycle(id: NodeId): LifecycleState {\n\t\tconst lifecycle = this.lifecycles[id];\n\t\tif (lifecycle === undefined) throw new Error(\"NodeCore: unknown node lifecycle state\");\n\t\treturn lifecycle;\n\t}\n\n\tgetDep(id: NodeId): DepBookkeeping {\n\t\tconst dep = this.depStates[id];\n\t\tif (dep === undefined) throw new Error(\"NodeCore: unknown node dep state\");\n\t\treturn dep;\n\t}\n\n\tgetPrivateState(id: NodeId): PrivateState {\n\t\tconst state = this.privateStates[id];\n\t\tif (state === undefined) throw new Error(\"NodeCore: unknown node private state\");\n\t\treturn state;\n\t}\n\n\tgetHooks(id: NodeId): CleanupHooks {\n\t\tconst hooks = this.hooks[id];\n\t\tif (hooks === undefined) throw new Error(\"NodeCore: unknown node cleanup hooks\");\n\t\treturn hooks;\n\t}\n\n\tgetSyncCtx(id: NodeId): SyncCtxState {\n\t\tconst state = this.syncCtxs[id];\n\t\tif (state === undefined) throw new Error(\"NodeCore: unknown node ctx state\");\n\t\treturn state;\n\t}\n\n\tgetVersion(id: NodeId): VersionState {\n\t\tconst state = this.versionStates[id];\n\t\tif (state === undefined) throw new Error(\"NodeCore: unknown node version state\");\n\t\treturn state;\n\t}\n\n\t/** @internal D122: release graph-owned ephemeral node runtime state from core retention. */\n\treleaseSlot(id: NodeId): void {\n\t\tthis.slots[id] = undefined;\n\t\tthis.depStates[id] = undefined;\n\t\tthis.lifecycles[id] = undefined;\n\t\tthis.values[id] = undefined;\n\t\tthis.waves[id] = undefined;\n\t\tthis.controls[id] = undefined;\n\t\tthis.privateStates[id] = undefined;\n\t\tthis.hooks[id] = undefined;\n\t\tthis.syncCtxs[id] = undefined;\n\t\tthis.versionStates[id] = undefined;\n\t}\n\n\t/** @internal B49: graph-local deferred-boundary queue (rewireNext/upNext/batch-after-commit). */\n\tenqueueBoundaryTask(task: BoundaryTask): void {\n\t\tthis.boundary.queue.push(task);\n\t}\n\n\t/** @internal */\n\thasBoundaryTasks(): boolean {\n\t\treturn this.boundary.head < this.boundary.queue.length;\n\t}\n\n\t/** @internal */\n\tboundaryTaskCount(): number {\n\t\treturn this.boundary.queue.length - this.boundary.head;\n\t}\n\n\t/** @internal */\n\tshiftBoundaryTask(): BoundaryTask | undefined {\n\t\tif (!this.hasBoundaryTasks()) {\n\t\t\tthis.boundary.queue = [];\n\t\t\tthis.boundary.head = 0;\n\t\t\treturn undefined;\n\t\t}\n\t\tconst task = this.boundary.queue[this.boundary.head++];\n\t\tif (!this.hasBoundaryTasks()) {\n\t\t\tthis.boundary.queue = [];\n\t\t\tthis.boundary.head = 0;\n\t\t}\n\t\treturn task;\n\t}\n\n\t/** @internal Put a not-yet-ready task back at this core's FIFO head. */\n\tunshiftBoundaryTask(task: BoundaryTask): void {\n\t\tconst remaining = this.boundary.queue.slice(this.boundary.head);\n\t\tthis.boundary.queue = [task, ...remaining];\n\t\tthis.boundary.head = 0;\n\t}\n\n\t/** @internal D110: discard all pending tasks caused by an uncommitted batch. */\n\tdropBoundaryTasksForBatch(batchToken: object): void {\n\t\tconst remaining = this.boundary.queue\n\t\t\t.slice(this.boundary.head)\n\t\t\t.filter((task) => task.batchToken !== batchToken);\n\t\tthis.boundary.queue = remaining;\n\t\tthis.boundary.head = 0;\n\t}\n}\n\nexport function makeDepBookkeeping(depCount: number): DepBookkeeping {\n\treturn {\n\t\tbatch: new Array(depCount).fill(null),\n\t\twaveData: Array.from({ length: depCount }, () => []),\n\t\twaveTokens: new Array(depCount).fill(undefined),\n\t\tprev: new Array(depCount).fill(SENTINEL),\n\t\thasData: new Array(depCount).fill(false),\n\t\tdirty: new Array(depCount).fill(false),\n\t\ttier: new Array(depCount).fill(0),\n\t\tterminal: new Array(depCount).fill(undefined),\n\t\tterminalInput: new Array(depCount).fill(undefined),\n\t\tunsubs: [],\n\t\tidxBoxes: [],\n\t};\n}\n","import { isInvalidErrorPayload, type PullDemand, type Wave } from \"../protocol/messages.js\";\n\nexport function terminalView(t: unknown): unknown {\n\treturn t === undefined ? false : t;\n}\n\nexport function normalizePullDemand(demand: PullDemand): PullDemand {\n\tif (typeof demand !== \"object\" || demand === null || Array.isArray(demand)) {\n\t\tthrow new Error(\"ctx.up: PULL requires { pullId, params? } demand payload (D269)\");\n\t}\n\tconst pullId = (demand as { pullId?: unknown }).pullId;\n\tif (typeof pullId !== \"string\" && typeof pullId !== \"symbol\") {\n\t\tthrow new Error(\"ctx.up: PULL demand requires a string or symbol pullId (D269)\");\n\t}\n\tconst params = (demand as { params?: unknown }).params;\n\treturn params === undefined ? { pullId } : { pullId, params };\n}\n\nexport function validateDownPayloads(msgs: Wave): void {\n\tfor (const m of msgs) {\n\t\tif (m[0] === \"DATA\" && m[1] === undefined) {\n\t\t\tthrow new Error(\"down: DATA requires a non-SENTINEL payload (R-data-payload)\");\n\t\t}\n\t\tif (m[0] === \"ERROR\" && isInvalidErrorPayload(m[1])) {\n\t\t\tthrow new Error(\"down: ERROR requires a non-SENTINEL, non-boolean payload (R-data-payload)\");\n\t\t}\n\t}\n}\n","import type { EnvironmentDrivers } from \"../graph/environment.js\";\nimport type { NodeCore } from \"./core.js\";\nimport type { Node } from \"./node.js\";\nimport type { NodeCheckpointState, NodeRestoreState } from \"./types.js\";\n\ntype TopologyDepsChangedObserver = (\n\tnode: Node<unknown>,\n\tprevDeps: readonly Node<unknown>[],\n\tdeps: readonly Node<unknown>[],\n) => void;\n\nlet constructingCore: NodeCore | undefined;\nlet constructingEnvironment: EnvironmentDrivers | undefined;\nexport const ownerTokens = new WeakMap<Node<unknown>, unknown>();\nexport const topologyDepsChangedObservers = new WeakMap<\n\tNode<unknown>,\n\tTopologyDepsChangedObserver\n>();\nexport const checkpointReaders = new WeakMap<Node<unknown>, () => NodeCheckpointState>();\nexport const restoreWriters = new WeakMap<Node<unknown>, (state: NodeRestoreState) => void>();\nexport const runtimeReleasers = new WeakMap<Node<unknown>, () => void>();\nexport const runtimeQuiescenceReaders = new WeakMap<Node<unknown>, () => boolean>();\nexport const subscriberCountReaders = new WeakMap<Node<unknown>, () => number>();\nexport const activationReaders = new WeakMap<Node<unknown>, () => boolean>();\nexport const releasedNodes = new WeakSet<Node<unknown>>();\n\n/** @internal Run a Node/StateNode constructor against a graph-local core without widening the public constructor. */\nexport function withNodeCore<TNode extends Node<unknown>>(\n\tcore: NodeCore,\n\tcreate: () => TNode,\n): TNode {\n\tconst prev = constructingCore;\n\tconstructingCore = core;\n\ttry {\n\t\treturn create();\n\t} finally {\n\t\tconstructingCore = prev;\n\t}\n}\n\n/** @internal Consume the graph-local NodeCore staged by withNodeCore. */\nexport function takeConstructingNodeCore(): NodeCore | undefined {\n\tconst core = constructingCore;\n\tconstructingCore = undefined;\n\treturn core;\n}\n\n/** @internal Run a Node/StateNode constructor with graph-owned environment drivers (D130/D131). */\nexport function withEnvironmentDrivers<TNode extends Node<unknown>>(\n\tenvironment: EnvironmentDrivers,\n\tcreate: () => TNode,\n): TNode {\n\tconst prev = constructingEnvironment;\n\tconstructingEnvironment = environment;\n\ttry {\n\t\treturn create();\n\t} finally {\n\t\tconstructingEnvironment = prev;\n\t}\n}\n\n/** @internal Consume graph-owned environment drivers staged by withEnvironmentDrivers. */\nexport function takeConstructingEnvironmentDrivers(): EnvironmentDrivers | undefined {\n\tconst environment = constructingEnvironment;\n\tconstructingEnvironment = undefined;\n\treturn environment;\n}\n\n/** @internal Graph-domain ownership token for D22 intra-graph guards. */\nexport function getNodeOwner(n: Node<unknown>): unknown {\n\treturn ownerTokens.get(n);\n}\n\n/** @internal Assign graph-domain ownership after graph registration. */\nexport function setNodeOwner(n: Node<unknown>, owner: unknown): void {\n\townerTokens.set(n, owner);\n}\n\n/** @internal Graph-layer D145 topology egress hook. */\nexport function setNodeTopologyDepsChangedObserver(\n\tn: Node<unknown>,\n\tobserver: TopologyDepsChangedObserver,\n): void {\n\ttopologyDepsChangedObservers.set(n, observer);\n}\n\nexport function notifyTopologyDepsChanged(\n\tnode: Node<unknown>,\n\tprevDeps: readonly Node<unknown>[],\n\tdeps: readonly Node<unknown>[],\n): void {\n\ttopologyDepsChangedObservers.get(node)?.(node, prevDeps, deps);\n}\n\n/** @internal Graph checkpoint inspection, kept as a module helper so Node stays method-thin. */\nexport function checkpointStateOfNode(n: Node<unknown>): NodeCheckpointState {\n\tconst read = checkpointReaders.get(n);\n\tif (read === undefined) throw new Error(\"checkpoint: unknown node state\");\n\treturn read();\n}\n\n/** @internal D94 restore commit: install runtime state without a protocol wave or subscription. */\nexport function restoreStateOfNode(n: Node<unknown>, state: NodeRestoreState): void {\n\tconst write = restoreWriters.get(n);\n\tif (write === undefined) throw new Error(\"restoreGraph: unknown node state\");\n\twrite(state);\n}\n\n/** @internal D122 graph-owned ephemeral lifecycle release. */\nexport function releaseRuntimeOfNode(n: Node<unknown>): void {\n\truntimeReleasers.get(n)?.();\n}\n\n/** @internal D124 guard for graph-owned ephemeral lifecycle release. */\nexport function isNodeRuntimeQuiescentForRelease(n: Node<unknown>): boolean {\n\treturn runtimeQuiescenceReaders.get(n)?.() ?? false;\n}\n\n/** @internal D124 graph-owned release subscriber accounting. */\nexport function subscriberCountOfNode(n: Node<unknown>): number {\n\treturn subscriberCountReaders.get(n)?.() ?? 0;\n}\n\n/** @internal D124 graph-owned release internal-subscriber accounting. */\nexport function isNodeActiveForRelease(n: Node<unknown>): boolean {\n\treturn activationReaders.get(n)?.() ?? false;\n}\n\n/** @internal D122 guard for graph-owned ephemeral lifecycle release. */\nexport function isNodeRuntimeReleased(n: Node<unknown>): boolean {\n\treturn releasedNodes.has(n);\n}\n","import { enterWave, exitWave } from \"../batch/boundary.js\";\nimport {\n\tCTX_DEP_CACHE,\n\tCTX_NODE_BINDING,\n\ttype Ctx,\n\ttype CtxState,\n\ttype TerminalData,\n\ttype WaveData,\n} from \"../ctx/types.js\";\nimport type { PullDemand } from \"../protocol/messages.js\";\nimport type { Node } from \"./node.js\";\nimport type { NodeRuntimeHost } from \"./node-runtime-host.js\";\nimport { terminalView } from \"./protocol-guards.js\";\nimport { withEnvironmentDrivers, withNodeCore } from \"./runtime-accessors.js\";\n\nexport function nodeBuildCtx<T>(self: NodeRuntimeHost<T>): Ctx {\n\tconst kind = self._slot.handle\n\t\t? self._slot.dispatcher.poolKind(self._slot.handle.poolId)\n\t\t: \"sync\";\n\tif (kind === \"sync\") {\n\t\tif (self._syncCtx === null) self._syncCtx = self._makeCtx();\n\t\tself._refreshCtx(self._syncCtx);\n\t\treturn self._syncCtx;\n\t}\n\t// async: snapshot dep inputs so a deferred late-emit reads this wave's view.\n\treturn self._makeCtx({\n\t\twaveData: self._dep.waveData.map((waves) => waves.map((w) => [...w])),\n\t\tterminal: self._dep.terminalInput.map(terminalView),\n\t\tlatest: [...self._dep.prev],\n\t});\n}\n\nexport function nodeMakeCtx<T>(\n\tself: NodeRuntimeHost<T>,\n\tsnapshot?: { waveData: unknown[][][]; terminal: unknown[]; latest: unknown[] },\n): Ctx {\n\tconst ctx: Ctx = {\n\t\t// Wave-owner boundary (D47): a SYNC fn's emit nests under the public entry that drove\n\t\t// it (cheap inc/dec, no early drain); an ASYNC-pool fn re-enters here from its stashed\n\t\t// ctx at depth 0, so this is the boundary that drains any rewireNext it issued.\n\t\tup: (msgs, towardDep) => {\n\t\t\tif (self._released) return;\n\t\t\tenterWave();\n\t\t\ttry {\n\t\t\t\tself._up(msgs, towardDep);\n\t\t\t} finally {\n\t\t\t\texitWave();\n\t\t\t}\n\t\t},\n\t\tdown: (msgs) => {\n\t\t\tif (self._released) return;\n\t\t\tenterWave();\n\t\t\ttry {\n\t\t\t\tself._down(msgs);\n\t\t\t} finally {\n\t\t\t\texitWave();\n\t\t\t}\n\t\t},\n\t\twaveData: snapshot?.waveData ?? self._dep.waveData,\n\t\tterminal: snapshot?.terminal ?? self._dep.terminalInput.map(terminalView),\n\t\tstate: self._makeState(),\n\t\tonDeactivation: (fn) => {\n\t\t\tif (self._released) return;\n\t\t\tself._hooks.onDeactivation.push(fn);\n\t\t},\n\t\tonInvalidate: (fn) => {\n\t\t\tif (self._released) return;\n\t\t\tself._hooks.onInvalidate.push(fn);\n\t\t},\n\t\tenvironment: () => self._slot.environment,\n\t\t// R-rewire-deferred (D47): defer a self-dep-set mutation to the committed boundary.\n\t\trewireNext: {\n\t\t\tsubscribeDep: (dep, fn) => self._requestRewireNext({ kind: \"add\", dep, fn }),\n\t\t\tunsubscribeDep: (dep, fn) => self._requestRewireNext({ kind: \"remove\", dep, fn }),\n\t\t\treplaceDeps: (deps, fn) => self._requestRewireNext({ kind: \"set\", deps, fn }),\n\t\t},\n\t\t// R-up-routing / R-pull (D269): deferred up — route a control/demand wave (e.g. PULL)\n\t\t// up the declared cone at the committed boundary. The SELF-demand path: an\n\t\t// immediate ctx.up whose delivery loops back re-enters this fn (D37 / R-reentrancy).\n\t\tupNext: (msgs, towardDep) => self._requestUpNext(msgs, towardDep),\n\t\t...(self._control.activePull === undefined ? {} : { pull: self._control.activePull }),\n\t\t[CTX_DEP_CACHE]: { latest: snapshot?.latest ?? self._dep.prev },\n\t\t[CTX_NODE_BINDING]: {\n\t\t\tdispatcher: self._slot.dispatcher,\n\t\t\tcreate: <U>(factory: () => Node<U>) =>\n\t\t\t\twithEnvironmentDrivers(self._slot.environment, () => withNodeCore(self._core, factory)),\n\t\t},\n\t};\n\tif (self._slot.dynamic) {\n\t\t// R-dynamic-node: read a dep's latest by index. Untracked deps still drive waves and\n\t\t// re-run the fn; under D49 (no equals-substitution) the fn re-emits its current value\n\t\t// as DATA — to suppress redundant downstream propagation, pair with distinctUntilChanged.\n\t\tctx.track = (i: number) => ctx[CTX_DEP_CACHE]?.latest[i];\n\t}\n\treturn ctx;\n}\n\nexport function nodeRefreshCtx<T>(self: NodeRuntimeHost<T>, ctx: Ctx): void {\n\t(ctx as { waveData: WaveData }).waveData = self._dep.waveData;\n\t(ctx as { terminal: TerminalData }).terminal = self._dep.terminalInput.map(terminalView);\n\tif (self._control.activePull === undefined) {\n\t\tdelete (ctx as { pull?: PullDemand }).pull;\n\t} else {\n\t\t(ctx as { pull?: PullDemand }).pull = self._control.activePull;\n\t}\n\tctx[CTX_DEP_CACHE] = { latest: self._dep.prev };\n}\n\nexport function nodeMakeState<T>(self: NodeRuntimeHost<T>): CtxState {\n\treturn {\n\t\tget: <S>() => self._privateState.value as S | undefined,\n\t\tset: <S>(v: S) => {\n\t\t\tself._privateState.value = v;\n\t\t},\n\t\tpersist: (on = true) => {\n\t\t\tself._privateState.persist = on;\n\t\t},\n\t};\n}\n","import type { DeliveryMeta } from \"../ctx/types.js\";\nimport type { Handle } from \"../dispatcher/index.js\";\nimport type { Message } from \"../protocol/messages.js\";\nimport { isTerminal, SENTINEL } from \"../protocol/messages.js\";\nimport type { NodeRuntimeHost } from \"./node-runtime-host.js\";\n\nexport function nodeRecordDepProjection<T>(\n\tself: NodeRuntimeHost<T>,\n\tidx: number,\n\tdelivery: DeliveryMeta | undefined,\n): unknown[] {\n\tconst token = delivery?.wave ?? {};\n\tif (self._dep.waveTokens[idx] !== token) {\n\t\tself._dep.waveData[idx].push([]);\n\t\tself._dep.waveTokens[idx] = token;\n\t}\n\treturn self._dep.waveData[idx][self._dep.waveData[idx].length - 1];\n}\n\nexport function nodeDepProjectionHasData<T>(self: NodeRuntimeHost<T>, idx: number): boolean {\n\tconst projection = self._dep.waveData[idx][self._dep.waveData[idx].length - 1];\n\treturn projection?.some((v) => v !== SENTINEL) ?? false;\n}\n\nexport function nodeReceiveFromDep<T>(\n\tself: NodeRuntimeHost<T>,\n\tidx: number,\n\tmsg: Message,\n\tdelivery?: DeliveryMeta,\n): void {\n\tif (self._released) return;\n\tconst t = msg[0];\n\tif (t === \"START\") return;\n\tconst isLastInDeliveredWave = delivery?.last ?? true;\n\t// Terminal-is-forever, except terminal intermediates still relay upstream TEARDOWN\n\t// downstream for lifecycle unwire (R-teardown-terminal-relay / D65).\n\tif (self._value.terminal !== undefined) {\n\t\tif (t === \"TEARDOWN\") self._down([[\"TEARDOWN\"]]);\n\t\treturn;\n\t}\n\n\tif (t === \"INVALIDATE\") {\n\t\tconst projection = self._recordDepProjection(idx, delivery);\n\t\tprojection.push(SENTINEL);\n\t\tif (projection.some((v) => v !== SENTINEL) && isLastInDeliveredWave) self._maybeRun();\n\t\t// The dep's value is gone — drop our cached latest view to SENTINEL so the\n\t\t// never-emitted detector reads correctly, C-3) and cascade (idempotent).\n\t\tself._dep.prev[idx] = SENTINEL;\n\t\tself._dep.hasData[idx] = false;\n\t\tself._dep.batch[idx] = null;\n\t\t// EC3: un-wedge the dirty bookkeeping if this dep had gone DIRTY first, so an\n\t\t// INVALIDATE-before-DATA doesn't strand _pending / downstream forever\n\t\t// (R-invalidate-idempotent — exists to prevent the wedged-DIRTY deadlock).\n\t\tif (self._dep.dirty[idx]) {\n\t\t\tself._dep.dirty[idx] = false;\n\t\t\tself._wave.pending--;\n\t\t}\n\t\t// D50 / R-paused-invalidate: this INVALIDATE SUPERSEDES the dep's buffered\n\t\t// paused dep-wave (_depBatch[idx] just cleared). Re-derive the paused-recompute\n\t\t// flag — if no dep still carries a buffered DATA, CANCEL the paused recompute\n\t\t// (attributed cancellation; the node has settled to SENTINEL via its own\n\t\t// INVALIDATE, so a RESUME must not recompute against a now-SENTINEL dep). A\n\t\t// surviving dep keeps it set; a later DATA re-arms it ([DATA,INVALIDATE,DATA2]).\n\t\tif (self._control.pausedDepWaveOccurred && self._dep.batch.every((b) => b === null)) {\n\t\t\tself._control.pausedDepWaveOccurred = false;\n\t\t}\n\t\tconst hadData = self._value.hasData;\n\t\tself._invalidate(); // cascades INVALIDATE iff populated; no-op otherwise\n\t\t// If we broadcast DIRTY this wave but _invalidate produced no settle (the node\n\t\t// was never populated, so the cascade is suppressed per the rule), un-dirty\n\t\t// downstream with a RESOLVED once all deps have settled.\n\t\tif (self._wave.pending === 0 && self._wave.emittedDirtyThisWave) {\n\t\t\tif (!hadData) self._down([[\"RESOLVED\"]]);\n\t\t\telse self._wave.emittedDirtyThisWave = false;\n\t\t}\n\t\tself._fireOwedDemandIfReady(); // R-pull (D59/B1/F6): an INVALIDATE settle can drain _pending → fire a deferred demand\n\t\treturn;\n\t}\n\n\tif (isTerminal(t)) {\n\t\t// Tier 5 (R-tier / D34): COMPLETE | ERROR — ONE branch routed by the CENTRAL tier table,\n\t\t// not a per-variant string check (feedback_use_tier_for_signal_routing). The shared terminal\n\t\t// bookkeeping (record the terminal + release the in-wave DIRTY) runs for ANY tier-5 message;\n\t\t// only the COMPLETE-vs-ERROR cascade differs, so discriminate by the type within the tier.\n\t\tconst isError = t === \"ERROR\";\n\t\tconst errPayload = isError ? (msg as readonly [\"ERROR\", unknown])[1] : undefined;\n\t\tself._dep.terminal[idx] = isError ? errPayload : true;\n\t\tself._dep.terminalInput[idx] = isError ? errPayload : true;\n\t\t// R-terminal-settles-dirty (B35): a terminal RELEASES this dep's outstanding in-wave DIRTY\n\t\t// contribution (the exactly-one-settle invariant) — exactly as DATA/RESOLVED/INVALIDATE do\n\t\t// (a dirty-then-terminal-without-DATA dep would otherwise strand _pending and wedge the node,\n\t\t// the deadlock R-invalidate-idempotent prevents for INVALIDATE).\n\t\tself._releaseDepDirty(idx);\n\t\tconst ranValueBeforeTerminal = self._depProjectionHasData(idx) && isLastInDeliveredWave;\n\t\tif (ranValueBeforeTerminal) self._maybeRun();\n\t\tif (isError && self._slot.errorWhenDepsError) {\n\t\t\tself._down([[\"ERROR\", errPayload]]); // auto-cascade ERROR → node itself terminal\n\t\t} else if (self._slot.terminalAsRealInput) {\n\t\t\tif (ranValueBeforeTerminal) {\n\t\t\t\tself._fireOwedDemandIfReady();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tself._maybeRun(); // rescue/reduce/catch/*Map: the fn reads depTerminal(ctx, idx)\n\t\t} else if (self._slot.completeWhenDepsComplete && self._allDepsTerminal()) {\n\t\t\t// R-deps-terminal auto-COMPLETE + B42: COMPLETE once ALL deps are TERMINAL (each COMPLETE\n\t\t\t// or an absorbed ERROR) — so an absorbed-error dep terminating LAST still fires the\n\t\t\t// cascade. terminalAsRealInput is checked FIRST so a rescue recovers via _maybeRun rather\n\t\t\t// than being preempted (no operator sets both completeWhenDepsComplete:true + tari:true).\n\t\t\tself._down([[\"COMPLETE\"]]);\n\t\t} else {\n\t\t\t// absorbed terminal, NOT an input + not auto-completing: the dep's signalled change did\n\t\t\t// not materialise (no DATA) → un-dirty downstream, keep cache (R-resolved-undirty balance).\n\t\t\tself._settleAfterAbsorbedTerminal();\n\t\t}\n\t\tself._fireOwedDemandIfReady(); // R-pull (D59/B1/F6): a dep terminal can drain _pending → fire a deferred demand (no-op if this node went terminal)\n\t\treturn;\n\t}\n\n\tif (t === \"TEARDOWN\") {\n\t\tself._down([[\"TEARDOWN\"]]);\n\t\treturn;\n\t}\n\n\tif (t === \"DIRTY\") {\n\t\tif (!self._dep.dirty[idx]) {\n\t\t\tself._dep.dirty[idx] = true;\n\t\t\tself._wave.pending++;\n\t\t\tself._dep.tier[idx] = 2;\n\t\t\tself._markDirty();\n\t\t}\n\t\treturn;\n\t}\n\n\tif (t === \"DATA\") {\n\t\tconst v = msg[1];\n\t\tself._recordDepProjection(idx, delivery).push(v);\n\t\tconst b = self._dep.batch[idx];\n\t\tif (b === null) self._dep.batch[idx] = [v];\n\t\telse b.push(v);\n\t\tself._dep.prev[idx] = v;\n\t\tself._dep.hasData[idx] = true;\n\t\tself._dep.tier[idx] = 3;\n\t\tif (self._dep.dirty[idx]) {\n\t\t\tself._dep.dirty[idx] = false;\n\t\t\tself._wave.pending--;\n\t\t}\n\t\tif (isLastInDeliveredWave) self._maybeRun();\n\t\tself._fireOwedDemandIfReady(); // R-pull pin 5: settle-ready now → fire a deferred demand\n\t\treturn;\n\t}\n\n\tif (t === \"RESOLVED\") {\n\t\tself._recordDepProjection(idx, delivery);\n\t\tself._dep.tier[idx] = 3;\n\t\tif (self._dep.dirty[idx]) {\n\t\t\tself._dep.dirty[idx] = false;\n\t\t\tself._wave.pending--;\n\t\t}\n\t\tif (isLastInDeliveredWave) self._maybeRun();\n\t\tself._fireOwedDemandIfReady(); // R-pull pin 5: settle-ready now → fire a deferred demand\n\t\treturn;\n\t}\n\t// PAUSE / RESUME are not delivered downstream to a dep-subscriber; a node is\n\t// paused via its own up() (lockset), not by an upstream dep.\n}\n\nexport function nodeReleaseDepDirty<T>(self: NodeRuntimeHost<T>, idx: number): void {\n\tif (self._dep.dirty[idx]) {\n\t\tself._dep.dirty[idx] = false;\n\t\tself._wave.pending--;\n\t}\n}\n\nexport function nodeSettleAfterAbsorbedTerminal<T>(self: NodeRuntimeHost<T>): void {\n\tif (self._wave.pending !== 0 || !self._wave.emittedDirtyThisWave) return;\n\t// A real value occurred this wave (some OTHER dep delivered DATA) → recompute. _maybeRun\n\t// runs the fn ONLY if it's not gated (first-run gate open, not paused); it may emit DATA, a\n\t// fn-synthesized undirty RESOLVED, or nothing (gated / gate still holds).\n\tconst sawData = self._dep.batch.some((b) => b !== null && b.length > 0);\n\tif (sawData) self._maybeRun();\n\t// If after that the node STILL owes a downstream settle (no DATA occurred, OR the recompute\n\t// was gated — e.g. the first-run gate holds because the terminated dep never delivered and\n\t// terminalAsRealInput is false), balance the broadcast DIRTY with one undirty RESOLVED\n\t// (R-resolved-undirty), keeping the cache (a terminal, unlike INVALIDATE, leaves the value).\n\t// Without this fallback a DIRTY-then-terminal-without-DATA dep on a pre-first-run multi-dep\n\t// node would strand the DIRTY → downstream wedged (the B35 class, in the gate-holds corner).\n\tif (self._wave.emittedDirtyThisWave) self._down([[\"RESOLVED\"]]);\n}\n\nexport function nodeMarkDirty<T>(self: NodeRuntimeHost<T>): void {\n\tself._value.status = \"dirty\";\n\t// SPIKE (protocol-pull): while quiet, ABSORB the upstream DIRTY — do NOT relay it downstream.\n\t// This is the P0b wedge fix: a quiet pull node that relayed DIRTY but withheld the settle\n\t// (coalesced by pause) wedged every downstream's two-phase _pending. The downstream learns of\n\t// changes via the push STREAM port, not the silent snapshot port; on demand the pull node\n\t// emits a fresh wave. Internal dep dirty-accounting (the DIRTY-branch _pending++) is untouched.\n\tif (self._isPullQuiet()) return;\n\tif (!self._wave.emittedDirtyThisWave) {\n\t\tself._wave.emittedDirtyThisWave = true;\n\t\tself._emitToSubs([\"DIRTY\"]);\n\t}\n}\n\nexport function nodeMaybeRun<T>(self: NodeRuntimeHost<T>): void {\n\t// R-rewire: an added cached dep's push-on-subscribe lands here mid-mutation. Defer\n\t// the fn-run to ONE atomic two-phase settle after every added dep is wired, so the\n\t// fn never fires on a partially-populated added-dep view (multi-add) — _settleRewire\n\t// drains this flag.\n\tif (self._wave.inDepMutation) {\n\t\tself._wave.rewireRunPending = true;\n\t\treturn;\n\t}\n\t// R-pause-modes + R-pull: while externally paused or pull-quiet, default pull mode\n\t// coalesces. `resumeAll` still runs so its outgoing settle slice can enter pauseBuffer.\n\tif (self._slot.pausable === true && (self._isPaused() || self._isPullQuiet())) {\n\t\tself._control.pausedDepWaveOccurred = true;\n\t\treturn;\n\t}\n\tself._tryRun();\n}\n\nexport function nodeSettleRewire<T>(self: NodeRuntimeHost<T>): void {\n\tif (self._slot.pausable === true && self._isPaused()) {\n\t\tself._control.pausedDepWaveOccurred = true;\n\t\treturn;\n\t}\n\tif (self._wave.pending > 0) return;\n\tif (self._slot.handle === null) {\n\t\tself._passthroughEmit();\n\t\treturn;\n\t}\n\tif (!self._wave.hasCalledFnOnce && !(self._slot.partial || self._allDepsSettled())) return;\n\tself._markDirty(); // phase 1 (no-op if already dirty, e.g. unsubscribeDep auto-settle)\n\tself._runWave(); // phase 2: fn → DATA/RESOLVED\n}\n\nexport function nodeTryRun<T>(self: NodeRuntimeHost<T>): void {\n\tif (self._wave.pending > 0) return;\n\tif (self._slot.handle === null) {\n\t\t// Passthrough wire (deps, no fn): forward the latest dep DATA downstream.\n\t\tself._passthroughEmit();\n\t\treturn;\n\t}\n\tif (!self._wave.hasCalledFnOnce) {\n\t\tif (self._slot.partial || self._allDepsSettled()) self._runWave();\n\t\t// else: first-run gate holds fn until every dep has settled (R-first-run-gate).\n\t\treturn;\n\t}\n\tself._runWave();\n}\n\nexport function nodeAllDepsSettled<T>(self: NodeRuntimeHost<T>): boolean {\n\tfor (let i = 0; i < self._slot.deps.length; i++) {\n\t\tif (self._dep.hasData[i]) continue;\n\t\tif (self._slot.terminalAsRealInput && self._dep.terminal[i] !== undefined) continue;\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nexport function nodePassthroughEmit<T>(self: NodeRuntimeHost<T>): void {\n\t// Single-dep wire: relay dep 0's latest batch value as DATA.\n\tconst b = self._dep.batch[0];\n\tif (b !== null && b.length > 0) {\n\t\tself._down([[\"DATA\", b[b.length - 1]]]);\n\t} else if (self._wave.emittedDirtyThisWave) {\n\t\t// R-resolved-undirty (D49): the dep settled via an undirty RESOLVED (no DATA in the\n\t\t// batch), but this wire already broadcast DIRTY downstream this wave — balance it with\n\t\t// a RESOLVED so downstream un-dirties instead of wedging. Routed through _down (NOT a\n\t\t// bare _emitToSubs) so the balance respects batch-defer (D12) + pause-buffer, matching\n\t\t// the zero-dep un-dirty path. Without this, a passthrough over a filter-reject /\n\t\t// distinctUntilChanged-dup leaves a dangling DIRTY (the wedge D49 made common).\n\t\tself._down([[\"RESOLVED\"]]);\n\t}\n\tself._dep.batch[0] = null;\n\tself._wave.emittedDirtyThisWave = false;\n}\n\nexport function nodeRunWave<T>(self: NodeRuntimeHost<T>): void {\n\t// R-reentrancy (D37): a fn that re-drives its own dep mid-wave re-enters here while\n\t// _insideRunWave is still set — a synchronous feedback cycle. Reject (throw); the graph\n\t// layer catches it and converts to [[ERROR, e]] (D30). The try/finally resets the flag\n\t// on every frame as the throw unwinds, leaving the graph clean for the catch. Detection\n\t// is node-local and free — it reuses the existing _insideRunWave flag (no new structure,\n\t// dispatcher stays a pure funnel).\n\tif (self._wave.insideRunWave)\n\t\tthrow new Error(\n\t\t\t\"synchronous feedback cycle: node fn re-entered its own wave (R-reentrancy / D37)\",\n\t\t);\n\tself._wave.hasCalledFnOnce = true;\n\t// R-cleanup-hooks per-run lifecycle (D28 clarification): clear BOTH hook lists\n\t// before the fn runs; the fn body re-registers the current run's hooks. Only the\n\t// latest run's registrations are live — a re-run supersedes the prior run's hooks,\n\t// discarded WITHOUT firing (no fire-on-rerun; onRerun stays cut). Fixes the push-only\n\t// accumulation (K stale hooks fired after K runs). C-14.\n\tself._hooks.onInvalidate = [];\n\tself._hooks.onDeactivation = [];\n\tconst ctx = self._buildCtx();\n\tconst wasDirty = self._wave.emittedDirtyThisWave;\n\tself._wave.emittedSettleThisWave = false;\n\tself._wave.insideRunWave = true;\n\ttry {\n\t\tself._slot.dispatcher.invoke(self._slot.handle as Handle, ctx);\n\t} finally {\n\t\tself._wave.insideRunWave = false;\n\t}\n\n\t// R-resolved-undirty (D49): a SYNC fn DIRTY'd in phase 1 that produced NO tier-3 value\n\t// this wave (filter-reject / distinctUntilChanged-dup / any no-emit fn) gets a substrate-\n\t// SYNTHESIZED undirty RESOLVED to clear the downstream dirty — operator bodies stay\n\t// protocol-clean (R-primary-api-clean). Status reflects cache freshness: a carried value\n\t// -> resolved, never-valued -> sentinel. EXEMPT: terminal/INVALIDATE waves (they set\n\t// _emittedSettleThisWave and balance their own dirty), and ASYNC-pool nodes — an async fn\n\t// that returns without emitting has DEFERRED its result (it emits later via the stashed\n\t// ctx), NOT rejected; synthesizing here would prematurely settle a still-pending diamond\n\t// leg (R-async-paused / C-4). The eventual async ctx.down carries its own DIRTY balance.\n\tif (\n\t\twasDirty &&\n\t\t!self._wave.emittedSettleThisWave &&\n\t\tself._value.terminal === undefined &&\n\t\t!self._isAsyncPool()\n\t) {\n\t\tself._down([[\"RESOLVED\"]]);\n\t}\n\n\t// roll wave-local state forward\n\tfor (let i = 0; i < self._dep.batch.length; i++) {\n\t\tself._dep.batch[i] = null;\n\t\tself._dep.waveData[i] = [];\n\t\tself._dep.waveTokens[i] = undefined;\n\t\tself._dep.terminalInput[i] = undefined;\n\t}\n\tself._wave.emittedDirtyThisWave = false;\n}\n","import type { Ctx, CtxState, DeliveryMeta, NodeFn } from \"../ctx/types.js\";\nimport type { LockId, Message, PullDemand, Wave } from \"../protocol/messages.js\";\nimport type {\n\tCleanupHooks,\n\tControlState,\n\tDepBookkeeping,\n\tLifecycleState,\n\tNodeCore,\n\tNodeId,\n\tNodeSlot,\n\tPrivateState,\n\tSyncCtxState,\n\tValueState,\n\tVersionState,\n\tWaveState,\n} from \"./core.js\";\nimport type { Node } from \"./node.js\";\nimport type { RewireOp, UpRouteState } from \"./types.js\";\n\nexport interface NodeRuntimeHost<T = unknown> {\n\t_core: NodeCore;\n\t_id: NodeId;\n\t_slot: NodeSlot<T>;\n\t_dep: DepBookkeeping;\n\t_value: ValueState<T>;\n\t_wave: WaveState;\n\t_control: ControlState;\n\t_lifecycle: LifecycleState;\n\t_privateState: PrivateState;\n\t_hooks: CleanupHooks;\n\t_syncCtxState: SyncCtxState;\n\t_version: VersionState;\n\t_syncCtx: Ctx | null;\n\t_restoredActivationPending: boolean;\n\t_released: boolean;\n\t_assertNotReleased(op: string): void;\n\t_isPullQuiet(): boolean;\n\t_requestRewireNext(op: RewireOp): void;\n\t_requestUpNext(msgs: Wave, towardDep?: number): void;\n\t_applyRewireNext(op: RewireOp): void;\n\t_dedupDeps(deps: Node<unknown>[]): Node<unknown>[];\n\t_reachableUpstream(from: Node<unknown>, target: Node<unknown>): boolean;\n\t_assertRewireDepOwner(dep: Node<unknown>): void;\n\t_rewire(newDeps: Node<unknown>[], fn: NodeFn, opts?: { allowTerminalOwner?: boolean }): boolean;\n\t_activate(): void;\n\t_subscribeDepAt(depNode: Node<unknown>, opts?: { seedRestored?: boolean }): void;\n\t_seedRestoredDepAt(idx: number, depNode: Node<unknown>): void;\n\t_deactivate(): void;\n\t_subscriberCount(): number;\n\t_isRuntimeQuiescentForRelease(): boolean;\n\t_releaseRuntime(): void;\n\t_resetDepState(): void;\n\t_recordDepProjection(idx: number, delivery: DeliveryMeta | undefined): unknown[];\n\t_depProjectionHasData(idx: number): boolean;\n\t_receiveFromDep(idx: number, msg: Message, delivery?: DeliveryMeta): void;\n\t_releaseDepDirty(idx: number): void;\n\t_settleAfterAbsorbedTerminal(): void;\n\t_markDirty(): void;\n\t_maybeRun(): void;\n\t_settleRewire(): void;\n\t_tryRun(): void;\n\t_allDepsSettled(): boolean;\n\t_passthroughEmit(): void;\n\t_runWave(): void;\n\t_buildCtx(): Ctx;\n\t_makeCtx(snapshot?: { waveData: unknown[][][]; terminal: unknown[]; latest: unknown[] }): Ctx;\n\t_refreshCtx(ctx: Ctx): void;\n\t_makeState(): CtxState;\n\t_down(msgs: Wave): void;\n\t_up(msgs: Wave, towardDep?: number, route?: UpRouteState): void;\n\t_markDemandRouted(lockId: LockId, route: UpRouteState): boolean;\n\t_forwardUp(m: Message, towardDep: number | undefined, route: UpRouteState): void;\n\t_isPaused(): boolean;\n\t_hasBoundaryPauseLock(): boolean;\n\t_isAsyncPool(): boolean;\n\t_pauseAcquire(lockId: unknown): void;\n\t_pauseRelease(lockId: unknown): void;\n\t_onResume(): void;\n\t_canFireDemand(): boolean;\n\t_deliverPullDemand(demand: PullDemand): void;\n\t_onDemand(demand: PullDemand): void;\n\t_firePullDemand(): void;\n\t_fireOwedDemandIfReady(): void;\n\t_shouldBufferOnPause(): boolean;\n\t_invalidate(delivery?: DeliveryMeta): void;\n\t_allDepsTerminal(): boolean;\n\t_resetLifecycle(): void;\n\t_emitToSubs(msg: Message, delivery?: DeliveryMeta): void;\n\t__commitBatchedWave(wave: Wave): void;\n\t__rollbackBatched(): void;\n\t__deferBoundary(fn: () => void, batchToken?: object): void;\n}\n\nexport function nodeRuntimeHost<T>(node: Node<T>): NodeRuntimeHost<T> {\n\treturn node as unknown as NodeRuntimeHost<T>;\n}\n","import { SENTINEL } from \"../protocol/messages.js\";\nimport type { Node } from \"./node.js\";\nimport { type NodeRuntimeHost, nodeRuntimeHost } from \"./node-runtime-host.js\";\nimport {\n\tactivationReaders,\n\tcheckpointReaders,\n\townerTokens,\n\treleasedNodes,\n\trestoreWriters,\n\truntimeQuiescenceReaders,\n\truntimeReleasers,\n\tsubscriberCountReaders,\n\ttopologyDepsChangedObservers,\n} from \"./runtime-accessors.js\";\n\nexport function nodeActivate<T>(self: NodeRuntimeHost<T>): void {\n\tself._lifecycle.activated = true;\n\tconst seedRestoredDeps = self._restoredActivationPending;\n\tself._restoredActivationPending = false;\n\t// R-pull (D55/D272): activePull is undefined before wiring deps, so each dep's\n\t// push-on-subscribe DIRTY/DATA is absorbed quietly, not relayed downstream.\n\tself._dep.unsubs = new Array(self._slot.deps.length);\n\tself._dep.idxBoxes = new Array(self._slot.deps.length);\n\tfor (const dep of self._slot.deps) self._subscribeDepAt(dep, { seedRestored: seedRestoredDeps });\n\t// Depless producer (fn, no deps): run once on activation.\n\tif (self._slot.deps.length === 0 && self._slot.handle !== null && !self._wave.hasCalledFnOnce) {\n\t\tself._runWave();\n\t}\n}\n\nexport function nodeSubscribeDepAt<T>(\n\tself: NodeRuntimeHost<T>,\n\tdepNode: Node<unknown>,\n\topts: { seedRestored?: boolean } = {},\n): void {\n\tconst idx0 = self._slot.deps.indexOf(depNode);\n\tconst box = { v: idx0 };\n\tlet ignoreInitialPush = opts.seedRestored === true;\n\tif (ignoreInitialPush && idx0 !== -1) {\n\t\tself._seedRestoredDepAt(idx0, depNode);\n\t\tconst dep = nodeRuntimeHost(depNode);\n\t\tif (dep._value.terminal !== undefined && !dep._slot.resubscribable) {\n\t\t\tself._dep.unsubs[idx0] = () => {};\n\t\t\tself._dep.idxBoxes[idx0] = box;\n\t\t\treturn;\n\t\t}\n\t}\n\tconst unsub = depNode.subscribe((msg, delivery) => {\n\t\tif (ignoreInitialPush && delivery === undefined) return;\n\t\tif (ignoreInitialPush) ignoreInitialPush = false;\n\t\tif (box.v === -1) return; // dep removed — stale callback, drop (drain)\n\t\tself._receiveFromDep(box.v, msg, delivery);\n\t});\n\tif (ignoreInitialPush && idx0 !== -1 && box.v !== -1) self._seedRestoredDepAt(idx0, depNode);\n\tignoreInitialPush = false;\n\tif (idx0 !== -1) {\n\t\tself._dep.unsubs[idx0] = unsub;\n\t\tself._dep.idxBoxes[idx0] = box;\n\t}\n}\n\nexport function nodeSeedRestoredDepAt<T>(\n\tself: NodeRuntimeHost<T>,\n\tidx: number,\n\tdepNode: Node<unknown>,\n): void {\n\tconst dep = nodeRuntimeHost(depNode);\n\tconst seedData = dep._value.hasData && !dep._slot.pull;\n\tself._dep.batch[idx] = null;\n\tself._dep.waveData[idx] = [];\n\tself._dep.waveTokens[idx] = undefined;\n\tself._dep.prev[idx] = seedData ? dep._value.cache : SENTINEL;\n\tself._dep.hasData[idx] = seedData;\n\tself._dep.dirty[idx] = false;\n\tself._dep.tier[idx] = seedData ? 3 : 0;\n\tself._dep.terminal[idx] = dep._value.terminal;\n\tself._dep.terminalInput[idx] = undefined;\n}\n\nexport function nodeDeactivate<T>(self: NodeRuntimeHost<T>): void {\n\tself._lifecycle.activated = false;\n\tfor (const u of self._dep.unsubs) if (u) u();\n\tself._dep.unsubs = [];\n\tself._dep.idxBoxes = [];\n\tfor (const fn of self._hooks.onDeactivation) fn();\n\tself._hooks.onDeactivation = [];\n\tself._hooks.onInvalidate = [];\n\n\tconst isCompute = self._slot.handle !== null || self._slot.deps.length > 0;\n\tif (isCompute) {\n\t\t// RAM: compute nodes clear cache; reconnect re-runs fn fresh.\n\t\tself._value.cache = SENTINEL;\n\t\tself._value.hasData = false;\n\t\tself._value.status = \"sentinel\";\n\t}\n\tself._resetDepState();\n\tself._wave.hasCalledFnOnce = false;\n\tself._control.pauseLockset.clear();\n\tself._control.pauseBuffer = [];\n\tself._control.pausedDepWaveOccurred = false;\n\tself._control.demandOwed = undefined; // R-pull (D269): drop any deferred demand\n\tself._control.activePull = undefined;\n\tself._control.pullDirtyOwed = false;\n\tself._value.replayRing = []; // BH6: don't replay stale values to a post-reactivation subscriber\n\tif (!self._privateState.persist) self._privateState.value = SENTINEL;\n}\n\nexport function nodeSubscriberCount<T>(self: NodeRuntimeHost<T>): number {\n\treturn self._lifecycle.subscribers.size;\n}\n\nexport function nodeIsRuntimeQuiescentForRelease<T>(self: NodeRuntimeHost<T>): boolean {\n\treturn (\n\t\t!self._released &&\n\t\tself._value.status !== \"dirty\" &&\n\t\tself._value.status !== \"pending\" &&\n\t\tself._wave.pending === 0 &&\n\t\t!self._wave.insideRunWave &&\n\t\t!self._wave.inDepMutation &&\n\t\t!self._wave.rewireRunPending &&\n\t\t!self._wave.batchDirtyOwed &&\n\t\tself._dep.dirty.every((dirty) => !dirty) &&\n\t\tself._control.pauseBuffer.length === 0 &&\n\t\t!self._control.pausedDepWaveOccurred &&\n\t\tself._control.demandOwed === undefined &&\n\t\tself._control.activePull === undefined &&\n\t\t!self._control.inDeliverDemand &&\n\t\tself._control.pauseLockset.size === 0\n\t);\n}\n\nexport function nodeReleaseRuntime<T>(self: NodeRuntimeHost<T>): void {\n\tif (self._released) return;\n\tself._released = true;\n\tconst node = self as unknown as Node<unknown>;\n\treleasedNodes.add(node);\n\tlet releaseError: unknown;\n\tconst recordReleaseError = (error: unknown): void => {\n\t\tif (releaseError === undefined) releaseError = error;\n\t};\n\tself._lifecycle.activated = false;\n\tfor (const u of self._dep.unsubs) {\n\t\ttry {\n\t\t\tu();\n\t\t} catch (error) {\n\t\t\trecordReleaseError(error);\n\t\t\t// D124 release is graph-owned and atomic; user cleanup must not split commit.\n\t\t}\n\t}\n\tfor (const fn of self._hooks.onDeactivation) {\n\t\ttry {\n\t\t\tfn();\n\t\t} catch (error) {\n\t\t\trecordReleaseError(error);\n\t\t\t// D124 release cleans runtime without synthesizing protocol ERROR/COMPLETE.\n\t\t}\n\t}\n\tself._dep.unsubs = [];\n\tself._dep.idxBoxes = [];\n\tself._lifecycle.subscribers.clear();\n\tif (self._slot.handle !== null) {\n\t\tself._slot.dispatcher.unregister(self._slot.handle);\n\t\tself._slot.handle = null;\n\t}\n\tself._slot.deps = [];\n\tself._dep.batch = [];\n\tself._dep.waveData = [];\n\tself._dep.waveTokens = [];\n\tself._dep.prev = [];\n\tself._dep.hasData = [];\n\tself._dep.dirty = [];\n\tself._dep.tier = [];\n\tself._dep.terminal = [];\n\tself._dep.terminalInput = [];\n\tself._value.cache = SENTINEL;\n\tself._value.hasData = false;\n\tself._value.status = \"sentinel\";\n\tself._value.terminal = undefined;\n\tself._value.replayRing = [];\n\tself._privateState.value = SENTINEL;\n\tself._privateState.persist = false;\n\tself._syncCtx = null;\n\tself._resetDepState();\n\tself._hooks.onDeactivation = [];\n\tself._hooks.onInvalidate = [];\n\tself._control.pauseLockset.clear();\n\tself._control.pauseBuffer = [];\n\tself._control.pausedDepWaveOccurred = false;\n\tself._control.demandOwed = undefined;\n\tself._control.activePull = undefined;\n\tself._control.pullDirtyOwed = false;\n\tself._restoredActivationPending = false;\n\tcheckpointReaders.delete(node);\n\trestoreWriters.delete(node);\n\truntimeReleasers.delete(node);\n\truntimeQuiescenceReaders.delete(node);\n\tsubscriberCountReaders.delete(node);\n\tactivationReaders.delete(node);\n\townerTokens.delete(node);\n\ttopologyDepsChangedObservers.delete(node);\n\tself._core.releaseSlot(self._id);\n\tif (releaseError !== undefined) throw releaseError;\n}\n\nexport function nodeResetDepState<T>(self: NodeRuntimeHost<T>): void {\n\tconst n = self._slot.deps.length;\n\tfor (let i = 0; i < n; i++) {\n\t\tself._dep.batch[i] = null;\n\t\tself._dep.waveData[i] = [];\n\t\tself._dep.waveTokens[i] = undefined;\n\t\tself._dep.prev[i] = SENTINEL;\n\t\tself._dep.hasData[i] = false;\n\t\tself._dep.dirty[i] = false;\n\t\tself._dep.tier[i] = 0;\n\t\tself._dep.terminal[i] = undefined;\n\t\tself._dep.terminalInput[i] = undefined;\n\t}\n\tself._wave.pending = 0;\n\tself._wave.emittedDirtyThisWave = false;\n}\n","import { currentBatch, deferToBatch } from \"../batch/batch.js\";\nimport { deferRewire, scheduleBoundaryDrain } from \"../batch/boundary.js\";\nimport type { DeliveryMeta } from \"../ctx/types.js\";\nimport type { LockId, Message, PullDemand, Wave } from \"../protocol/messages.js\";\nimport {\n\tisDeferredTier,\n\tisPauseBufferedTier,\n\tisUpAllowed,\n\tisValueTier,\n\tmessageTier,\n\tSENTINEL,\n} from \"../protocol/messages.js\";\nimport type { Node } from \"./node.js\";\nimport { type NodeRuntimeHost, nodeRuntimeHost } from \"./node-runtime-host.js\";\nimport { normalizePullDemand, validateDownPayloads } from \"./protocol-guards.js\";\nimport type { UpRouteState } from \"./types.js\";\nimport {\n\tadvanceNodeVersion,\n\tassertNodeVersionDataCompatible,\n\tsnapshotNodeVersionData,\n} from \"./versioning.js\";\n\nexport function nodeDown<T>(self: NodeRuntimeHost<T>, msgs: Wave): void {\n\tif (self._released) return;\n\tvalidateDownPayloads(msgs);\n\tconst deliveryWave = {};\n\tconst assertVersionDataCompatible = (wave: readonly Message[]) => {\n\t\tfor (const m of wave) {\n\t\t\tif (m[0] === \"DATA\") assertNodeVersionDataCompatible(self._version.policy, m[1]);\n\t\t}\n\t};\n\tconst snapshotVersionData = (wave: readonly Message[]): Message[] =>\n\t\twave.map((m) =>\n\t\t\tm[0] === \"DATA\"\n\t\t\t\t? ([\"DATA\", snapshotNodeVersionData(self._version.policy, m[1])] as Message)\n\t\t\t\t: m,\n\t\t);\n\tassertVersionDataCompatible(msgs);\n\t// Terminal-is-forever (R-terminal / D17 / B30): once COMPLETE/ERROR has been emitted the\n\t// node is final — a self-emit (state.set / ctx.down) in a LATER wave is a no-op, never\n\t// resurrecting the cache or re-emitting. The COMPLETE/ERROR arms below also self-guard\n\t// against a double terminal, but DATA/RESOLVED/INVALIDATE had no entry guard, so a\n\t// post-terminal set() would overwrite cache + emit DATA. R-teardown-terminal-relay / D65\n\t// carves out the only post-terminal exception: TEARDOWN still relays downstream for unwire\n\t// without reopening value output. A single wave that goes terminal mid-loop (e.g.\n\t// [COMPLETE, TEARDOWN]) is unaffected: _terminal is still undefined at entry.\n\t// Resubscribable reset clears _terminal before any re-emit.\n\tif (self._value.terminal !== undefined) {\n\t\tif (!msgs.some((m) => m[0] === \"TEARDOWN\")) return;\n\t\tself._value.hasTorndown = true;\n\t\tif (self._slot.resetOnTeardown) {\n\t\t\tself._value.cache = SENTINEL;\n\t\t\tself._value.hasData = false;\n\t\t}\n\t\tself._emitToSubs([\"TEARDOWN\"], { wave: deliveryWave, last: true });\n\t\treturn;\n\t}\n\tlet sorted: Message[] = [...msgs].sort((a, b) => messageTier(a[0]) - messageTier(b[0]));\n\t// R-same-wave-merge: collapse repeated INVALIDATE in one wave (Q9) so the\n\t// cleanup hook + downstream broadcast fire at most once.\n\tconst firstInvalidate = sorted.findIndex((m) => m[0] === \"INVALIDATE\");\n\tif (firstInvalidate !== -1) {\n\t\tsorted = sorted.filter((m, i) => m[0] !== \"INVALIDATE\" || i === firstInvalidate);\n\t}\n\t// R-teardown-complete: a TEARDOWN reaching a non-terminal node synthesizes a\n\t// COMPLETE prefix (so firstValueFrom-style bridges resolve), unless the wave\n\t// already carries a terminal or the node already tore down.\n\tconst hasTeardown = sorted.some((m) => m[0] === \"TEARDOWN\");\n\tconst hasTerminal = sorted.some((m) => m[0] === \"COMPLETE\" || m[0] === \"ERROR\");\n\tif (\n\t\thasTeardown &&\n\t\t!hasTerminal &&\n\t\tself._value.terminal === undefined &&\n\t\t!self._value.hasTorndown\n\t) {\n\t\tsorted = [[\"COMPLETE\"], ...sorted];\n\t}\n\t// R-batch-coalesce (D12): inside a batch, emit DIRTY immediately but defer the\n\t// tier-3 settle slice to commit so a shared downstream recomputes once. Only\n\t// external emits defer (fn emits during commit run normally).\n\tif (!self._wave.insideRunWave && currentBatch()) {\n\t\tconst deferred = snapshotVersionData(sorted.filter((m) => isDeferredTier(m[0])));\n\t\tif (deferred.length > 0) {\n\t\t\tif (!self._wave.emittedDirtyThisWave) {\n\t\t\t\tself._wave.emittedDirtyThisWave = true;\n\t\t\t\tself._value.status = \"dirty\";\n\t\t\t\tself._emitToSubs([\"DIRTY\"], { wave: deliveryWave, last: false });\n\t\t\t}\n\t\t\tself._wave.batchDirtyOwed = true; // BH1: owe a balancing RESOLVED on rollback\n\t\t\tdeferToBatch(self as unknown as Node<unknown>, deferred);\n\t\t\treturn;\n\t\t}\n\t}\n\t// R-pause-modes / R-async-paused: defer the settle slice (tier 3/4) into the\n\t// pause buffer while paused; tier 0-2 (DIRTY/PAUSE/RESUME), tier 5 (terminal),\n\t// tier 6 (TEARDOWN) bypass so end-of-stream + control always reach observers.\n\tif (self._shouldBufferOnPause()) {\n\t\tconst buffered = snapshotVersionData(sorted.filter((m) => isPauseBufferedTier(m[0])));\n\t\tif (buffered.length > 0) {\n\t\t\t// B36 / R-resolved-undirty: buffering a settle slice still means this fn wave\n\t\t\t// produced a settle. Without this, _runWave sees \"dirty + no settle\" and\n\t\t\t// synthesizes a RESOLVED that pierces the pause while the DATA waits in the buffer.\n\t\t\tself._wave.emittedSettleThisWave = true;\n\t\t\tself._control.pauseBuffer.push(buffered);\n\t\t}\n\t\tsorted = sorted.filter((m) => !isPauseBufferedTier(m[0]));\n\t\tif (sorted.length === 0) return;\n\t}\n\tlet dataCount = 0;\n\tlet hasTier3 = false;\n\tlet hasResolved = false;\n\tfor (const m of sorted) {\n\t\tif (m[0] === \"DATA\") dataCount++;\n\t\tif (m[0] === \"RESOLVED\") hasResolved = true;\n\t\tif (isValueTier(m[0])) hasTier3 = true;\n\t}\n\t// EC2 / R-resolved-undirty tier-3 exclusivity: a wave's tier-3 slot is >=1 DATA\n\t// (occurrence) XOR exactly 1 RESOLVED (undirty) — never mixed. Reject fail-fast.\n\tif (dataCount >= 1 && hasResolved) {\n\t\tthrow new Error(\n\t\t\t\"down: a wave cannot mix DATA and RESOLVED (tier-3 exclusivity, R-resolved-undirty)\",\n\t\t);\n\t}\n\tconst plannedVersions: Array<NodeVersion | undefined> = new Array(sorted.length);\n\tif (dataCount > 0) {\n\t\tlet plannedVersion = self._version.value;\n\t\tfor (let i = 0; i < sorted.length; i++) {\n\t\t\tconst m = sorted[i];\n\t\t\tif (m[0] !== \"DATA\") continue;\n\t\t\tplannedVersion = advanceNodeVersion(plannedVersion, self._version.policy, m[1]);\n\t\t\tplannedVersions[i] = plannedVersion;\n\t\t}\n\t}\n\n\t// Synthesize a leading DIRTY for an EXTERNAL tier-3 emit (R-dirty-before-data), and for\n\t// PULL demand fns only when they actually emit tier-3. A no-op pull helper must stay silent.\n\tif (\n\t\thasTier3 &&\n\t\t(!self._wave.insideRunWave || self._control.pullDirtyOwed) &&\n\t\t!self._wave.emittedDirtyThisWave\n\t) {\n\t\tself._wave.emittedDirtyThisWave = true;\n\t\tself._value.status = \"dirty\";\n\t\tself._emitToSubs([\"DIRTY\"], { wave: deliveryWave, last: false });\n\t}\n\n\tfor (let i = 0; i < sorted.length; i++) {\n\t\tconst m = sorted[i];\n\t\tconst delivery = { wave: deliveryWave, last: i === sorted.length - 1 };\n\t\t// R-resolved-undirty (D49): a tier-3+ emit this wave means the fn produced a settle,\n\t\t// so no synthesized undirty RESOLVED is owed (see _runWave).\n\t\tif (isDeferredTier(m[0])) self._wave.emittedSettleThisWave = true;\n\t\tif (m[0] === \"DIRTY\") {\n\t\t\tif (!self._wave.emittedDirtyThisWave) {\n\t\t\t\tself._wave.emittedDirtyThisWave = true;\n\t\t\t\tself._value.status = \"dirty\";\n\t\t\t\tself._emitToSubs([\"DIRTY\"], delivery);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (m[0] === \"DATA\") {\n\t\t\tconst v = m[1] as T;\n\t\t\t// R-resolved-undirty (D49): every value-occurrence is emitted as DATA — the\n\t\t\t// substrate never substitutes DATA->RESOLVED on value-equality. Dedup is opt-in\n\t\t\t// at the operator layer (distinctUntilChanged), never a substrate behavior.\n\t\t\tself._value.cache = v;\n\t\t\tself._value.hasData = true;\n\t\t\tself._value.status = \"settled\";\n\t\t\tself._version.value = plannedVersions[i];\n\t\t\tif (self._slot.replayN > 0) {\n\t\t\t\tself._value.replayRing.push(v);\n\t\t\t\tif (self._value.replayRing.length > self._slot.replayN) self._value.replayRing.shift();\n\t\t\t}\n\t\t\tself._emitToSubs([\"DATA\", v], delivery);\n\t\t\tcontinue;\n\t\t}\n\t\tif (m[0] === \"RESOLVED\") {\n\t\t\tself._value.status = self._value.hasData ? \"resolved\" : \"sentinel\";\n\t\t\tself._emitToSubs([\"RESOLVED\"], delivery);\n\t\t\tcontinue;\n\t\t}\n\t\tif (m[0] === \"INVALIDATE\") {\n\t\t\tself._invalidate(delivery);\n\t\t\tcontinue;\n\t\t}\n\t\tif (m[0] === \"COMPLETE\") {\n\t\t\tif (self._value.terminal !== undefined) continue;\n\t\t\tself._value.terminal = true;\n\t\t\tself._control.pauseBuffer = []; // BH3: terminal discards buffered settle slices\n\t\t\tself._value.status = \"completed\";\n\t\t\tself._emitToSubs([\"COMPLETE\"], delivery);\n\t\t\tcontinue;\n\t\t}\n\t\tif (m[0] === \"ERROR\") {\n\t\t\tif (self._value.terminal !== undefined) continue;\n\t\t\tself._value.terminal = m[1];\n\t\t\tself._control.pauseBuffer = []; // BH3: terminal discards buffered settle slices\n\t\t\tself._value.status = \"errored\";\n\t\t\tself._emitToSubs([\"ERROR\", m[1]], delivery);\n\t\t\tcontinue;\n\t\t}\n\t\tif (m[0] === \"TEARDOWN\") {\n\t\t\tself._value.hasTorndown = true;\n\t\t\tif (self._slot.resetOnTeardown) {\n\t\t\t\tself._value.cache = SENTINEL;\n\t\t\t\tself._value.hasData = false;\n\t\t\t}\n\t\t\tself._emitToSubs([\"TEARDOWN\"], delivery);\n\t\t}\n\t\t// PAUSE / RESUME — control slice.\n\t}\n\n\tif (!self._wave.insideRunWave) self._wave.emittedDirtyThisWave = false;\n}\n\nexport function nodeUp<T>(\n\tself: NodeRuntimeHost<T>,\n\tmsgs: Wave,\n\ttowardDep?: number,\n\troute?: UpRouteState,\n): void {\n\tif (self._released) return;\n\tconst routeState = route ?? { demandFired: new Map() };\n\tfor (const m of msgs) {\n\t\tif (!isUpAllowed(m[0])) {\n\t\t\tthrow new Error(\n\t\t\t\t`ctx.up: ${m[0]} is down-only (tier ${messageTier(m[0])}); up carries control tiers only (R-ctx-up)`,\n\t\t\t);\n\t\t}\n\t}\n\tfor (const m of msgs) {\n\t\tif (m[0] === \"PAUSE\") {\n\t\t\t// PAUSE is NODE-TARGETED (R-up-routing): it ACQUIRES a lock, so there is no\n\t\t\t// pre-existing holder to route to — a controller targets the node directly.\n\t\t\tself._pauseAcquire(m[1]);\n\t\t} else if (m[0] === \"RESUME\") {\n\t\t\t// R-up-routing (D269): RESUME is pause-lock release only.\n\t\t\tif (self._control.pauseLockset.has(m[1])) {\n\t\t\t\t// a pause lock held HERE → release LOCALLY (normal pause/resume, R-pause-lockset).\n\t\t\t\tself._pauseRelease(m[1]);\n\t\t\t} else {\n\t\t\t\t// not held here → forward UP the declared cone to find the holder.\n\t\t\t\tself._forwardUp(m, towardDep, routeState);\n\t\t\t}\n\t\t} else if (m[0] === \"PULL\") {\n\t\t\t// R-up-routing / R-pull (D269/D272): DEMAND-IF-PULL-HOLDER-ELSE-FORWARD-UP.\n\t\t\tconst demand = normalizePullDemand(m[1]);\n\t\t\tif (self._slot.pull && demand.pullId === self._slot.pullLock) {\n\t\t\t\tif (!self._markDemandRouted(demand.pullId, routeState)) self._onDemand(demand);\n\t\t\t} else {\n\t\t\t\tself._forwardUp([\"PULL\", demand], towardDep, routeState);\n\t\t\t}\n\t\t} else if (self._slot.deps.length === 0) {\n\t\t\t// R-up-at-source (D38): a depless source is the terminus of upstream control.\n\t\t\t// INVALIDATE → HONOR the invalidate-request. Routed through _down (NOT a direct\n\t\t\t// _invalidate call, QA A-2) so the invalidate-request respects batch-defer (D12)\n\t\t\t// and pause-buffer exactly like a downstream-originated INVALIDATE; _down's\n\t\t\t// INVALIDATE branch calls _invalidate() (clear cache → SENTINEL, fire onInvalidate,\n\t\t\t// broadcast downstream). Outside batch/pause it is identical to a direct call.\n\t\t\t// DIRTY / TEARDOWN → DROP (no coherent terminus action; self-dirty would wedge\n\t\t\t// downstream awaiting a settle that never comes; source lifecycle is source-owned).\n\t\t\tif (m[0] === \"INVALIDATE\") self._down([[\"INVALIDATE\"]]);\n\t\t} else {\n\t\t\t// dep-bearing intermediate: forward DIRTY/INVALIDATE/TEARDOWN up toward deps.\n\t\t\tself._forwardUp(m, towardDep, routeState);\n\t\t}\n\t}\n}\n\nexport function nodeMarkDemandRouted<T>(\n\tself: NodeRuntimeHost<T>,\n\tlockId: LockId,\n\troute: UpRouteState,\n): boolean {\n\tlet holders = route.demandFired.get(lockId);\n\tif (holders === undefined) {\n\t\tholders = new Set();\n\t\troute.demandFired.set(lockId, holders);\n\t}\n\tconst node = self as unknown as Node<unknown>;\n\tif (holders.has(node)) return true;\n\tholders.add(node);\n\treturn false;\n}\n\nexport function nodeForwardUp<T>(\n\tself: NodeRuntimeHost<T>,\n\tm: Message,\n\ttowardDep: number | undefined,\n\troute: UpRouteState,\n): void {\n\tif (self._slot.deps.length === 0) return; // depless source terminus → drop\n\tif (towardDep !== undefined) {\n\t\tconst d = self._slot.deps[towardDep];\n\t\tif (d !== undefined) nodeRuntimeHost(d)._up([m], undefined, route);\n\t} else {\n\t\tfor (const dep of self._slot.deps) nodeRuntimeHost(dep)._up([m], undefined, route);\n\t}\n}\n\nexport function nodeIsPaused<T>(self: NodeRuntimeHost<T>): boolean {\n\treturn self._control.pauseLockset.size > 0;\n}\n\nexport function nodeHasBoundaryPauseLock<T>(self: NodeRuntimeHost<T>): boolean {\n\tif (self._slot.pausable === false) return false;\n\treturn self._control.pauseLockset.size > 0;\n}\n\nexport function nodeIsAsyncPool<T>(self: NodeRuntimeHost<T>): boolean {\n\treturn (\n\t\tself._slot.handle !== null &&\n\t\tself._slot.dispatcher.poolKind(self._slot.handle.poolId) === \"async\"\n\t);\n}\n\nexport function nodePauseAcquire<T>(self: NodeRuntimeHost<T>, lockId: unknown): void {\n\tself._control.pauseLockset.add(lockId); // Set => same-id repeat PAUSE is idempotent\n}\n\nexport function nodePauseRelease<T>(self: NodeRuntimeHost<T>, lockId: unknown): void {\n\tif (!self._control.pauseLockset.has(lockId)) return; // unknown id => no-op\n\tself._control.pauseLockset.delete(lockId);\n\t// R-pull (D59 / D272): releasing an EXTERNAL pause lock can unblock an owed demand.\n\t// Pull quiet is activePull-derived and never stored in pauseLockset.\n\tif (self._slot.pull && self._control.demandOwed !== undefined) self._fireOwedDemandIfReady();\n\tif (self._hasBoundaryPauseLock()) return; // another external lock still held => stay paused\n\tscheduleBoundaryDrain(self._core);\n\tif (self._slot.pull) return; // pull nodes stay quiet until PULL, even after external resume\n\tself._onResume();\n}\n\nexport function nodeOnResume<T>(self: NodeRuntimeHost<T>): void {\n\t// BH3: a node that terminated while paused discards its buffer and never\n\t// replays/recomputes (terminal-is-forever).\n\tif (self._value.terminal !== undefined) {\n\t\tself._control.pauseBuffer = [];\n\t\tself._control.pausedDepWaveOccurred = false;\n\t\tself._control.demandOwed = undefined;\n\t\tself._control.activePull = undefined;\n\t\tself._control.pullDirtyOwed = false;\n\t\treturn;\n\t}\n\t// Non-pull pause/resume (R-pause-modes): drain buffered settle slices (resumeAll /\n\t// async-at-paused, R-async-paused), then fire a coalesced dep-wave once (default mode).\n\t// A PULL node does not resume by draining here; its demand fires through _onDemand.\n\tif (self._control.pauseBuffer.length > 0) {\n\t\tconst buf = self._control.pauseBuffer;\n\t\tself._control.pauseBuffer = [];\n\t\tfor (const wave of buf) self._down(wave);\n\t}\n\tif (self._control.pausedDepWaveOccurred) {\n\t\tself._control.pausedDepWaveOccurred = false;\n\t\tself._tryRun();\n\t}\n}\n\nexport function nodeCanFireDemand<T>(self: NodeRuntimeHost<T>): boolean {\n\tif (self._value.terminal !== undefined || self._wave.pending > 0) return false;\n\treturn self._control.pauseLockset.size === 0;\n}\n\nexport function nodeDeliverPullDemand<T>(self: NodeRuntimeHost<T>, demand: PullDemand): void {\n\tself._control.demandOwed = undefined;\n\tself._control.activePull = demand;\n\tself._control.inDeliverDemand = true;\n\ttry {\n\t\tself._firePullDemand();\n\t} finally {\n\t\tself._control.activePull = undefined;\n\t\tself._control.inDeliverDemand = false;\n\t}\n}\n\nexport function nodeOnDemand<T>(self: NodeRuntimeHost<T>, demand: PullDemand): void {\n\tif (self._control.inDeliverDemand) return; // re-entrant demand during an active delivery → drop (1:1)\n\tif (self._canFireDemand()) self._deliverPullDemand(demand);\n\telse self._control.demandOwed = demand; // latest owed params wins (D269/D272)\n}\n\nexport function nodeFirePullDemand<T>(self: NodeRuntimeHost<T>): void {\n\tlet drainedBuffer = false;\n\tif (self._control.pauseBuffer.length > 0) {\n\t\tconst buf = self._control.pauseBuffer;\n\t\tself._control.pauseBuffer = [];\n\t\tfor (const wave of buf) self._down(wave);\n\t\tdrainedBuffer = true;\n\t}\n\tif (drainedBuffer) return;\n\tif (self._control.pausedDepWaveOccurred) {\n\t\t// QA-B2: only deliver if the fn can actually run this wave (settle-ready + first-run gate\n\t\t// open). A gated run emits no DATA, so emitting the leading DIRTY would STRAND downstream\n\t\t// — the exact wedge this feature exists to prevent (NoWedgeWhileQuiet). When gated, stay\n\t\t// SILENT and KEEP _pausedDepWaveOccurred so a later demand (once every dep has settled)\n\t\t// delivers. Mirrors _settleRewire's pre-_markDirty gate.\n\t\tconst gated =\n\t\t\tself._slot.handle !== null &&\n\t\t\t!self._wave.hasCalledFnOnce &&\n\t\t\t!(self._slot.partial || self._allDepsSettled());\n\t\tif (self._wave.pending > 0 || gated) return;\n\t\tself._control.pausedDepWaveOccurred = false;\n\t\tself._wave.emittedDirtyThisWave = false;\n\t\tself._control.pullDirtyOwed = true;\n\t\ttry {\n\t\t\tself._tryRun(); // fn DATA triggers DIRTY-before-DATA; no DATA means no output.\n\t\t} finally {\n\t\t\tself._control.pullDirtyOwed = false;\n\t\t}\n\t\treturn;\n\t}\n\tif (self._slot.handle !== null) {\n\t\tif (!self._wave.hasCalledFnOnce && !(self._slot.partial || self._allDepsSettled())) return;\n\t\tself._wave.emittedDirtyThisWave = false;\n\t\tself._control.pullDirtyOwed = true;\n\t\ttry {\n\t\t\tself._runWave();\n\t\t} finally {\n\t\t\tself._control.pullDirtyOwed = false;\n\t\t}\n\t}\n}\n\nexport function nodeFireOwedDemandIfReady<T>(self: NodeRuntimeHost<T>): void {\n\tif (self._control.inDeliverDemand) return; // don't re-enter during an active delivery (1:1, QA guard)\n\tif (self._slot.pull && self._control.demandOwed !== undefined && self._canFireDemand()) {\n\t\tself._deliverPullDemand(self._control.demandOwed);\n\t}\n}\n\nexport function nodeShouldBufferOnPause<T>(self: NodeRuntimeHost<T>): boolean {\n\t// D44: pausable mode is the OUTER gate over R-async-paused buffering.\n\t// false: ignore PAUSE/RESUME ENTIRELY — never buffer, keep producing (R-pause-modes; resolves B20).\n\tif (self._slot.pausable === false) return false;\n\tif (!self._isPaused() && !self._isPullQuiet()) return false;\n\t// resumeAll: production-gating — buffer the node's own (sync/async) settle slice too.\n\tif (self._slot.pausable === \"resumeAll\") return true;\n\t// true (default): PAUSE gates recomputation/propagation, NOT a leaf source's own production.\n\t// An async COMPUTE node's (deps>0) in-flight result buffers (R-async-paused / C-2); a depless\n\t// async leaf source's own production delivers immediately (R-pause-modes / C-10).\n\tif (!self._wave.insideRunWave && self._isAsyncPool() && self._slot.deps.length > 0) return true;\n\treturn false;\n}\n\nexport function nodeInvalidate<T>(self: NodeRuntimeHost<T>, delivery?: DeliveryMeta): void {\n\tif (!self._value.hasData) return; // never-populated or already-reset → no-op\n\tself._value.cache = SENTINEL;\n\tself._value.hasData = false;\n\tself._value.status = \"sentinel\";\n\tself._value.replayRing = []; // BH6: invalidated values are stale — don't replay them\n\tfor (const fn of self._hooks.onInvalidate) fn();\n\tself._emitToSubs([\"INVALIDATE\"], delivery);\n}\n\nexport function nodeAllDepsTerminal<T>(self: NodeRuntimeHost<T>): boolean {\n\tif (self._slot.deps.length === 0) return false;\n\tfor (const tm of self._dep.terminal) if (tm === undefined) return false;\n\treturn true;\n}\n\nexport function nodeResetLifecycle<T>(self: NodeRuntimeHost<T>): void {\n\tfor (const u of self._dep.unsubs) if (u) u();\n\tself._dep.unsubs = [];\n\tself._dep.idxBoxes = [];\n\tself._lifecycle.subscribers.clear();\n\tself._lifecycle.activated = false;\n\tself._value.terminal = undefined;\n\tself._value.hasTorndown = false;\n\tself._wave.hasCalledFnOnce = false;\n\tself._resetDepState();\n\tself._control.pauseLockset.clear();\n\tself._control.pauseBuffer = [];\n\tself._control.pausedDepWaveOccurred = false;\n\tself._control.demandOwed = undefined; // R-pull (D269): drop any deferred demand\n\tself._control.activePull = undefined;\n\tself._control.pullDirtyOwed = false;\n\tself._value.replayRing = []; // BH6\n\tconst isCompute = self._slot.handle !== null || self._slot.deps.length > 0;\n\tif (isCompute) {\n\t\tself._value.cache = SENTINEL;\n\t\tself._value.hasData = false;\n\t\tself._value.status = \"sentinel\";\n\t} else {\n\t\tself._value.status = self._value.hasData ? \"settled\" : \"sentinel\";\n\t}\n\tif (!self._privateState.persist) self._privateState.value = SENTINEL;\n}\n\nexport function nodeEmitToSubs<T>(\n\tself: NodeRuntimeHost<T>,\n\tmsg: Message,\n\tdelivery?: DeliveryMeta,\n): void {\n\tif (self._released) return;\n\t// Copy guards against subscribe/unsubscribe during iteration.\n\tconst subs = [...self._lifecycle.subscribers];\n\tfor (const sink of subs) sink(msg, delivery);\n}\n\nexport function nodeCommitBatchedWave<T>(self: NodeRuntimeHost<T>, wave: Wave): void {\n\tself._wave.batchDirtyOwed = false; // commit delivers the real settle (BH1)\n\tself._down(wave); // batch is inactive at commit -> processes normally\n}\n\nexport function nodeRollbackBatched<T>(self: NodeRuntimeHost<T>): void {\n\t// BH1: keyed on _batchDirtyOwed (not _emittedDirtyThisWave, which a fn wave between\n\t// defer and rollback would have reset) so the balancing RESOLVED is never skipped.\n\tif (self._wave.batchDirtyOwed) {\n\t\tself._wave.batchDirtyOwed = false;\n\t\tself._wave.emittedDirtyThisWave = false;\n\t\tself._value.status = self._value.hasData ? \"settled\" : \"sentinel\";\n\t\tself._emitToSubs([\"RESOLVED\"]);\n\t}\n}\n\nexport function nodeDeferBoundary<T>(\n\tself: NodeRuntimeHost<T>,\n\tfn: () => void,\n\tbatchToken?: object,\n): void {\n\tdeferRewire(self._core, fn, {\n\t\tbatchToken,\n\t\tisReady: () => !self._hasBoundaryPauseLock(),\n\t});\n}\n","import { currentBoundaryBatchToken, deferAfterBatchForTarget } from \"../batch/batch.js\";\nimport { deferRewire } from \"../batch/boundary.js\";\nimport type { NodeFn } from \"../ctx/types.js\";\nimport type { Wave } from \"../protocol/messages.js\";\nimport { errorPayload, SENTINEL } from \"../protocol/messages.js\";\nimport type { Node } from \"./node.js\";\nimport { type NodeRuntimeHost, nodeRuntimeHost } from \"./node-runtime-host.js\";\nimport { notifyTopologyDepsChanged } from \"./runtime-accessors.js\";\nimport type { RewireOp } from \"./types.js\";\n\nexport function nodeRequestRewireNext<T>(self: NodeRuntimeHost<T>, op: RewireOp): void {\n\tdeferRewire(self._core, () => self._applyRewireNext(op), {\n\t\tbatchToken: currentBoundaryBatchToken(),\n\t\tisReady: () => !self._hasBoundaryPauseLock(),\n\t});\n}\n\nexport function nodeRequestUpNext<T>(\n\tself: NodeRuntimeHost<T>,\n\tmsgs: Wave,\n\ttowardDep?: number,\n): void {\n\tdeferRewire(\n\t\tself._core,\n\t\t() => {\n\t\t\tif (!self._released) self._up(msgs, towardDep);\n\t\t},\n\t\t{\n\t\t\tbatchToken: currentBoundaryBatchToken(),\n\t\t\tisReady: () => !self._hasBoundaryPauseLock(),\n\t\t},\n\t);\n}\n\nexport function nodeApplyRewireNext<T>(self: NodeRuntimeHost<T>, op: RewireOp): void {\n\tif (self._released) return;\n\ttry {\n\t\t// D62 / R-rewire-deferred: terminal seals output but does NOT cancel queued topology.\n\t\t// Public/immediate rewire of a terminal node still rejects; the exception is only for\n\t\t// self-triggered ops already issued before terminal and now draining at the boundary.\n\t\tif (op.kind === \"add\") {\n\t\t\tconst next = self._slot.deps.includes(op.dep)\n\t\t\t\t? [...self._slot.deps]\n\t\t\t\t: [...self._slot.deps, op.dep];\n\t\t\tself._rewire(next, op.fn, { allowTerminalOwner: true });\n\t\t} else if (op.kind === \"remove\") {\n\t\t\tself._rewire(\n\t\t\t\tself._slot.deps.filter((d) => d !== op.dep),\n\t\t\t\top.fn,\n\t\t\t\t{ allowTerminalOwner: true },\n\t\t\t);\n\t\t} else {\n\t\t\tself._rewire(self._dedupDeps(op.deps), op.fn, { allowTerminalOwner: true });\n\t\t}\n\t} catch (e) {\n\t\t// An invalid deferred op (cycle / self / non-resubscribable terminal dep) surfaces as\n\t\t// an ERROR on this node (D30-consistent) rather than stranding the rest of the drain\n\t\t// queue. Reachable only on misuse — higher-order operator inners are fresh, acyclic\n\t\t// leaf sources. Coerce a SENTINEL reason (a rewire fn that `throw undefined`s) to a real\n\t\t// Error so _down's R-data-payload guard does not itself throw out of the drain.\n\t\tself._down([[\"ERROR\", errorPayload(e, \"rewireNext op failed\")]]);\n\t}\n}\n\nexport function nodeRewire<T>(\n\tself: NodeRuntimeHost<T>,\n\tnewDeps: Node<unknown>[],\n\tfn: NodeFn,\n\topts: { allowTerminalOwner?: boolean } = {},\n): boolean {\n\tconst node = self as unknown as Node<unknown>;\n\t// ── rejects (R-rewire / D42) ──\n\tif (self._value.terminal !== undefined && !opts.allowTerminalOwner)\n\t\tthrow new Error(\n\t\t\t\"rewire: node is terminal (completed/errored) — cannot rewire (R-rewire / D42)\",\n\t\t);\n\tif (self._wave.insideRunWave)\n\t\tthrow new Error(\n\t\t\t\"rewire: mid-fn topology mutation — a fn mutating its own deps mid-wave is the feedback cycle (R-rewire / D37)\",\n\t\t);\n\tif (self._wave.inDepMutation)\n\t\tthrow new Error(\n\t\t\t\"rewire: reentrant dep mutation — another replaceDeps/subscribeDep/unsubscribeDep is in flight (R-rewire)\",\n\t\t);\n\tif (newDeps.includes(node)) throw new Error(\"rewire: self-dependency rejected (R-rewire / D42)\");\n\tconst oldDeps = self._slot.deps;\n\tconst added = newDeps.filter((d) => !oldDeps.includes(d));\n\tfor (const d of added) {\n\t\tif (self._reachableUpstream(d, node))\n\t\t\tthrow new Error(\n\t\t\t\t\"rewire: would create a cycle — dep already transitively depends on this node (R-rewire / D42)\",\n\t\t\t);\n\t\tconst dep = nodeRuntimeHost(d);\n\t\tif (dep._value.terminal !== undefined && !dep._slot.resubscribable)\n\t\t\tthrow new Error(\n\t\t\t\t\"rewire: cannot add a non-resubscribable terminal dep — would wedge (R-rewire / D42)\",\n\t\t\t);\n\t\tself._assertRewireDepOwner(d);\n\t}\n\n\tif (\n\t\tdeferAfterBatchForTarget(node, () => {\n\t\t\tself._rewire(newDeps, fn, { ...opts, allowTerminalOwner: true });\n\t\t})\n\t) {\n\t\treturn true;\n\t}\n\tif (!self._lifecycle.activated) self._restoredActivationPending = false;\n\n\tself._wave.inDepMutation = true;\n\tself._wave.rewireRunPending = false;\n\tlet zeroDepUnDirty = false;\n\ttry {\n\t\t// fn swap (SD-1): re-register against the same pool, then release the old handle\n\t\t// (B15) so the rewired-away fn closure is GC'd and its dispatcher slot is reused —\n\t\t// a rewire-heavy graph (CSP-2.7 *Map) no longer leaks a handle per swap. Register\n\t\t// first, then unregister the old: self._slot.handle never points at a freed slot, and a\n\t\t// null old handle (a passthrough/state node gaining a fn) has nothing to free.\n\t\tconst oldHandle = self._slot.handle;\n\t\tself._slot.handle = self._slot.dispatcher.register(fn, self._slot.pool);\n\t\tif (oldHandle !== null) self._slot.dispatcher.unregister(oldHandle);\n\n\t\tconst removed = oldDeps.filter((d) => !newDeps.includes(d));\n\t\tlet removedDirtyContributor = false;\n\t\tfor (const d of removed) {\n\t\t\tconst oldIdx = oldDeps.indexOf(d);\n\t\t\tif (self._dep.dirty[oldIdx]) {\n\t\t\t\tremovedDirtyContributor = true;\n\t\t\t\tself._wave.pending--;\n\t\t\t}\n\t\t\tif (self._lifecycle.activated) {\n\t\t\t\tconst box = self._dep.idxBoxes[oldIdx];\n\t\t\t\tif (box) box.v = -1; // drain: any stale in-flight callback drops\n\t\t\t\tconst unsub = self._dep.unsubs[oldIdx];\n\t\t\t\tif (unsub) unsub(); // stops the removed dep's edge — no further delivery\n\t\t\t}\n\t\t}\n\n\t\t// Rebuild per-dep parallel arrays in newDeps order; kept deps carry their state\n\t\t// + subscription, added deps start fresh (R-rewire Q1/Q4).\n\t\tconst n = newDeps.length;\n\t\tconst newBatch: Array<unknown[] | null> = new Array(n).fill(null);\n\t\tconst newPrev: unknown[] = new Array(n).fill(SENTINEL);\n\t\tconst newHasData: boolean[] = new Array(n).fill(false);\n\t\tconst newDirty: boolean[] = new Array(n).fill(false);\n\t\tconst newTier: number[] = new Array(n).fill(0);\n\t\tconst newTerminal: Array<true | unknown | undefined> = new Array(n).fill(undefined);\n\t\tconst newTerminalInput: Array<true | unknown | undefined> = new Array(n).fill(undefined);\n\t\tconst newUnsubs: Array<() => void> = new Array(n);\n\t\tconst newBoxes: Array<{ v: number }> = new Array(n);\n\t\tfor (let j = 0; j < n; j++) {\n\t\t\tconst oldIdx = oldDeps.indexOf(newDeps[j]);\n\t\t\tif (oldIdx !== -1) {\n\t\t\t\tnewBatch[j] = self._dep.batch[oldIdx];\n\t\t\t\tnewPrev[j] = self._dep.prev[oldIdx];\n\t\t\t\tnewHasData[j] = self._dep.hasData[oldIdx];\n\t\t\t\tnewDirty[j] = self._dep.dirty[oldIdx];\n\t\t\t\tnewTier[j] = self._dep.tier[oldIdx];\n\t\t\t\tnewTerminal[j] = self._dep.terminal[oldIdx];\n\t\t\t\tnewUnsubs[j] = self._dep.unsubs[oldIdx];\n\t\t\t\t// carry the kept dep's subscription box and point it at the new index (O(1) reroute)\n\t\t\t\tconst box = self._dep.idxBoxes[oldIdx];\n\t\t\t\tif (box) box.v = j;\n\t\t\t\tnewBoxes[j] = box;\n\t\t\t}\n\t\t}\n\t\tself._slot.deps = newDeps;\n\t\tself._dep.batch = newBatch;\n\t\tself._dep.prev = newPrev;\n\t\tself._dep.hasData = newHasData;\n\t\tself._dep.dirty = newDirty;\n\t\tself._dep.tier = newTier;\n\t\tself._dep.terminal = newTerminal;\n\t\tself._dep.terminalInput = newTerminalInput;\n\t\tself._dep.unsubs = newUnsubs;\n\t\tself._dep.idxBoxes = newBoxes;\n\t\tself._dep.waveData = newDeps.map(() => []);\n\t\tself._dep.waveTokens = new Array(newDeps.length).fill(undefined);\n\t\tself._syncCtx = null;\n\n\t\t// Subscribe added deps — push-on-subscribe (R-push-subscribe) delivers a cached\n\t\t// dep's DATA here, which drives _maybeRun; a SENTINEL dep delivers START only.\n\t\tif (self._lifecycle.activated) {\n\t\t\tfor (const d of added) self._subscribeDepAt(d);\n\t\t}\n\t\tnotifyTopologyDepsChanged(node, oldDeps, newDeps);\n\n\t\t// Q6 auto-settle: removing the sole dirty contributor closes the wave. With deps\n\t\t// remaining, request the atomic settle (recompute → DATA for a value; a no-emit fn\n\t\t// gets a substrate-synthesized undirty RESOLVED per R-resolved-undirty/D49 — NOT\n\t\t// equals-absorption, which is gone). With zero deps the node is inert (degenerate\n\t\t// fn-no-deps) — just un-dirty downstream. Cache is preserved either way (Q7).\n\t\tif (removedDirtyContributor && self._wave.pending === 0 && self._value.status === \"dirty\") {\n\t\t\tif (newDeps.length > 0) self._wave.rewireRunPending = true;\n\t\t\telse zeroDepUnDirty = true;\n\t\t}\n\t} finally {\n\t\tself._wave.inDepMutation = false;\n\t}\n\n\t// Atomic post-mutation settle (outside the reentrancy guard so a fresh wave runs\n\t// normally): ONE two-phase DIRTY→DATA recompute if any added dep delivered data or a\n\t// sole-dirty dep was removed; else the zero-dep un-dirty via _down (pause/batch-safe).\n\tif (self._wave.rewireRunPending) {\n\t\tself._wave.rewireRunPending = false;\n\t\tself._settleRewire();\n\t} else if (zeroDepUnDirty) {\n\t\tif (self._wave.emittedDirtyThisWave) self._down([[\"RESOLVED\"]]);\n\t\telse self._value.status = self._value.hasData ? \"settled\" : \"sentinel\";\n\t}\n\treturn false;\n}\n","/**\n * The node primitive — the thinnest substrate object (R-node-thin / D5).\n *\n * Holds a fn handle + deps + the wave state machine; ZERO inspection cruft\n * (naming/find/describe are the graph layer, CSP-2). Canonical authority:\n * ~/src/graphrefly/spec/rules.jsonl (R-node-*, R-two-phase, R-diamond, R-resolved-undirty,\n * R-first-run-gate, R-push-subscribe, R-rom-ram, R-fn-contract, R-initial, R-ctx-up).\n *\n * Slice 1 = core wave: state node, compute node, two-phase DIRTY->DATA, diamond\n * pending-counter join, first-run gate, substrate-synthesized undirty RESOLVED\n * (R-resolved-undirty / D49 — no equals-substitution; every occurrence is DATA),\n * push-on-subscribe, lazy activation, ROM/RAM. Lifecycle (terminal/INVALIDATE/cleanup),\n * control (PAUSE/async), batch, and dynamicNode land in later slices.\n */\n\nimport { enterWave, exitWave } from \"../batch/boundary.js\";\nimport type { Ctx, CtxState, DeliveryMeta, NodeFn, Sink } from \"../ctx/types.js\";\nimport { defaultDispatcher, type Handle } from \"../dispatcher/index.js\";\nimport { EnvironmentDrivers } from \"../graph/environment.js\";\nimport {\n\ttype LockId,\n\ttype Message,\n\ttype PullDemand,\n\tSENTINEL,\n\ttype Wave,\n} from \"../protocol/messages.js\";\nimport {\n\ttype CleanupHooks,\n\ttype ControlState,\n\ttype DepBookkeeping,\n\ttype LifecycleState,\n\tmakeDepBookkeeping,\n\tNodeCore,\n\ttype NodeId,\n\ttype NodeSlot,\n\ttype PrivateState,\n\ttype SyncCtxState,\n\ttype ValueState,\n\ttype VersionState,\n\ttype WaveState,\n} from \"./core.js\";\nimport {\n\tnodeBuildCtx,\n\tnodeMakeCtx,\n\tnodeMakeState,\n\tnodeRefreshCtx,\n} from \"./node-context-runtime.js\";\nimport {\n\tnodeAllDepsSettled,\n\tnodeDepProjectionHasData,\n\tnodeMarkDirty,\n\tnodeMaybeRun,\n\tnodePassthroughEmit,\n\tnodeReceiveFromDep,\n\tnodeRecordDepProjection,\n\tnodeReleaseDepDirty,\n\tnodeRunWave,\n\tnodeSettleAfterAbsorbedTerminal,\n\tnodeSettleRewire,\n\tnodeTryRun,\n} from \"./node-input-runtime.js\";\nimport {\n\tnodeActivate,\n\tnodeDeactivate,\n\tnodeIsRuntimeQuiescentForRelease,\n\tnodeReleaseRuntime,\n\tnodeResetDepState,\n\tnodeSeedRestoredDepAt,\n\tnodeSubscribeDepAt,\n\tnodeSubscriberCount,\n} from \"./node-lifecycle-runtime.js\";\nimport {\n\tnodeAllDepsTerminal,\n\tnodeCanFireDemand,\n\tnodeCommitBatchedWave,\n\tnodeDeferBoundary,\n\tnodeDeliverPullDemand,\n\tnodeDown,\n\tnodeEmitToSubs,\n\tnodeFireOwedDemandIfReady,\n\tnodeFirePullDemand,\n\tnodeForwardUp,\n\tnodeHasBoundaryPauseLock,\n\tnodeInvalidate,\n\tnodeIsAsyncPool,\n\tnodeIsPaused,\n\tnodeMarkDemandRouted,\n\tnodeOnDemand,\n\tnodeOnResume,\n\tnodePauseAcquire,\n\tnodePauseRelease,\n\tnodeResetLifecycle,\n\tnodeRollbackBatched,\n\tnodeShouldBufferOnPause,\n\tnodeUp,\n} from \"./node-output-runtime.js\";\nimport {\n\tnodeApplyRewireNext,\n\tnodeRequestRewireNext,\n\tnodeRequestUpNext,\n\tnodeRewire,\n} from \"./node-rewire-runtime.js\";\nimport { nodeRuntimeHost } from \"./node-runtime-host.js\";\nimport {\n\tactivationReaders,\n\tcheckpointReaders,\n\tgetNodeOwner,\n\trestoreWriters,\n\truntimeQuiescenceReaders,\n\truntimeReleasers,\n\tsubscriberCountReaders,\n\ttakeConstructingEnvironmentDrivers,\n\ttakeConstructingNodeCore,\n} from \"./runtime-accessors.js\";\nimport type { NodeOptions, RewireOp, Status, UpRouteState } from \"./types.js\";\nimport {\n\tcloneNodeVersion,\n\tcreateNodeVersion,\n\ttype NodeVersion,\n\tresolveNodeVersioningPolicy,\n\trestoredV1Cid,\n} from \"./versioning.js\";\n\nexport {\n\tcheckpointStateOfNode,\n\tgetNodeOwner,\n\tisNodeActiveForRelease,\n\tisNodeRuntimeQuiescentForRelease,\n\tisNodeRuntimeReleased,\n\treleaseRuntimeOfNode,\n\trestoreStateOfNode,\n\tsetNodeOwner,\n\tsetNodeTopologyDepsChangedObserver,\n\tsubscriberCountOfNode,\n\twithEnvironmentDrivers,\n\twithNodeCore,\n} from \"./runtime-accessors.js\";\nexport type { NodeCheckpointState, NodeOptions, NodeRestoreState, Status } from \"./types.js\";\n\nexport class Node<T = unknown> {\n\tprivate readonly _core: NodeCore;\n\tprivate readonly _id: NodeId;\n\tprivate readonly _slot: NodeSlot<T>;\n\tprivate readonly _dep: DepBookkeeping;\n\tprivate readonly _value: ValueState<T>;\n\tprivate readonly _wave: WaveState;\n\tprivate readonly _control: ControlState;\n\tprivate readonly _lifecycle: LifecycleState;\n\tprivate readonly _privateState: PrivateState;\n\tprivate readonly _hooks: CleanupHooks;\n\tprivate readonly _syncCtxState: SyncCtxState;\n\tprivate readonly _version: VersionState;\n\tprivate _restoredActivationPending = false;\n\tprivate _released = false;\n\n\tprivate get _syncCtx(): Ctx | null {\n\t\treturn this._syncCtxState.value;\n\t}\n\n\tprivate set _syncCtx(ctx: Ctx | null) {\n\t\tthis._syncCtxState.value = ctx;\n\t}\n\n\tprivate static _retainIndirectRuntimeMethods(node: Node<unknown>): void {\n\t\tvoid node._dep;\n\t\tvoid node._hooks;\n\t\tvoid node._restoredActivationPending;\n\t\tvoid node._requestRewireNext;\n\t\tvoid node._requestUpNext;\n\t\tvoid node._applyRewireNext;\n\t\tvoid node._reachableUpstream;\n\t\tvoid node._assertRewireDepOwner;\n\t\tvoid node._subscribeDepAt;\n\t\tvoid node._seedRestoredDepAt;\n\t\tvoid node._recordDepProjection;\n\t\tvoid node._depProjectionHasData;\n\t\tvoid node._receiveFromDep;\n\t\tvoid node._releaseDepDirty;\n\t\tvoid node._settleAfterAbsorbedTerminal;\n\t\tvoid node._markDirty;\n\t\tvoid node._maybeRun;\n\t\tvoid node._settleRewire;\n\t\tvoid node._tryRun;\n\t\tvoid node._allDepsSettled;\n\t\tvoid node._passthroughEmit;\n\t\tvoid node._runWave;\n\t\tvoid node._buildCtx;\n\t\tvoid node._makeCtx;\n\t\tvoid node._refreshCtx;\n\t\tvoid node._makeState;\n\t\tvoid node._markDemandRouted;\n\t\tvoid node._forwardUp;\n\t\tvoid node._isPullQuiet;\n\t\tvoid node._isPaused;\n\t\tvoid node._hasBoundaryPauseLock;\n\t\tvoid node._isAsyncPool;\n\t\tvoid node._pauseAcquire;\n\t\tvoid node._pauseRelease;\n\t\tvoid node._onResume;\n\t\tvoid node._canFireDemand;\n\t\tvoid node._deliverPullDemand;\n\t\tvoid node._onDemand;\n\t\tvoid node._firePullDemand;\n\t\tvoid node._fireOwedDemandIfReady;\n\t\tvoid node._shouldBufferOnPause;\n\t\tvoid node._invalidate;\n\t\tvoid node._allDepsTerminal;\n\t\tvoid node._emitToSubs;\n\t}\n\n\tconstructor(\n\t\tdeps: Node<unknown>[],\n\t\thandleOrFn: Handle | NodeFn | null,\n\t\topts: NodeOptions<T> = {},\n\t) {\n\t\tconst core = takeConstructingNodeCore();\n\t\tconst dispatcher = opts.dispatcher ?? defaultDispatcher;\n\t\tconst environment = takeConstructingEnvironmentDrivers() ?? EnvironmentDrivers.empty();\n\t\tconst pool = opts.pool ?? \"sync\";\n\t\tconst pausable = opts.pausable ?? true;\n\t\tconst pullLock = opts.pullId;\n\t\tconst pull = opts.pullId !== undefined;\n\t\t// R-pull (D269): pull-mode is keyed by an author-supplied pullId (its quiet latch).\n\t\t// R-pull (D55, pin 3): pull still uses the pausable delivery-content axis; pausable:false\n\t\t// ignores PAUSE/RESUME buffering and contradicts quiet pull delivery. Reject at construction.\n\t\tif (pull && pausable === false)\n\t\t\tthrow new Error(\n\t\t\t\t\"node: pullId is incompatible with pausable:false — a pull node uses the pausable delivery-content axis (R-pull / R-pause-modes / D55,D269)\",\n\t\t\t);\n\n\t\tlet handle: Handle | null;\n\t\tif (handleOrFn === null) handle = null;\n\t\telse if (typeof handleOrFn === \"function\") handle = dispatcher.register(handleOrFn, pool);\n\t\telse handle = handleOrFn;\n\n\t\tconst n = deps.length;\n\t\tconst dep = makeDepBookkeeping(n);\n\t\tconst versioning = resolveNodeVersioningPolicy(opts.versioning);\n\t\tconst value = {\n\t\t\tcache: SENTINEL as T | undefined,\n\t\t\thasData: false,\n\t\t\tstatus: \"sentinel\" as Status,\n\t\t\tterminal: undefined,\n\t\t\thasTorndown: false,\n\t\t\treplayRing: [] as T[],\n\t\t};\n\t\tif (opts.initial !== undefined) {\n\t\t\tvalue.cache = opts.initial as T;\n\t\t\tvalue.hasData = true;\n\t\t\tvalue.status = \"settled\";\n\t\t}\n\t\tconst pauseLockset = new Set<unknown>();\n\t\tthis._core = core ?? new NodeCore();\n\t\tconst created = this._core.createSlot<T>(\n\t\t\t{\n\t\t\t\tdeps,\n\t\t\t\thandle,\n\t\t\t\tpool,\n\t\t\t\tdispatcher,\n\t\t\t\tenvironment,\n\t\t\t\tpartial: opts.partial ?? false,\n\t\t\t\tterminalAsRealInput: opts.terminalAsRealInput ?? false,\n\t\t\t\tcompleteWhenDepsComplete: opts.completeWhenDepsComplete ?? true,\n\t\t\t\terrorWhenDepsError: opts.errorWhenDepsError ?? true,\n\t\t\t\tresubscribable: opts.resubscribable ?? false,\n\t\t\t\tresetOnTeardown: opts.resetOnTeardown ?? false,\n\t\t\t\tpausable,\n\t\t\t\tpull,\n\t\t\t\tpullLock,\n\t\t\t\treplayN: opts.replayBuffer ?? 0,\n\t\t\t\tdynamic: opts.dynamic ?? false,\n\t\t\t\tname: opts.name,\n\t\t\t\tfactory: opts.factory,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdep,\n\t\t\t\tlifecycle: { subscribers: new Set<Sink>(), activated: false },\n\t\t\t\tvalue,\n\t\t\t\twave: {\n\t\t\t\t\tpending: 0,\n\t\t\t\t\thasCalledFnOnce: false,\n\t\t\t\t\temittedDirtyThisWave: false,\n\t\t\t\t\temittedSettleThisWave: false,\n\t\t\t\t\tinsideRunWave: false,\n\t\t\t\t\tinDepMutation: false,\n\t\t\t\t\trewireRunPending: false,\n\t\t\t\t\tbatchDirtyOwed: false,\n\t\t\t\t},\n\t\t\t\tcontrol: {\n\t\t\t\t\tpauseLockset,\n\t\t\t\t\tpausedDepWaveOccurred: false,\n\t\t\t\t\tpauseBuffer: [],\n\t\t\t\t\tdemandOwed: undefined,\n\t\t\t\t\tactivePull: undefined,\n\t\t\t\t\tpullDirtyOwed: false,\n\t\t\t\t\tinDeliverDemand: false,\n\t\t\t\t},\n\t\t\t\tprivateState: { value: SENTINEL, persist: false },\n\t\t\t\thooks: { onDeactivation: [], onInvalidate: [] },\n\t\t\t\tsyncCtx: { value: null },\n\t\t\t\tversion: {\n\t\t\t\t\tpolicy: versioning,\n\t\t\t\t\tvalue: createNodeVersion(\n\t\t\t\t\t\tversioning,\n\t\t\t\t\t\topts.initial !== undefined ? opts.initial : undefined,\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t\tthis._id = created.id;\n\t\tthis._slot = this._core.get<T>(this._id);\n\t\tthis._dep = this._core.getDep(this._id);\n\t\tthis._value = this._core.getValue<T>(this._id);\n\t\tthis._wave = this._core.getWave(this._id);\n\t\tthis._control = this._core.getControl(this._id);\n\t\tthis._lifecycle = this._core.getLifecycle(this._id);\n\t\tthis._privateState = this._core.getPrivateState(this._id);\n\t\tthis._hooks = this._core.getHooks(this._id);\n\t\tthis._syncCtxState = this._core.getSyncCtx(this._id);\n\t\tthis._version = this._core.getVersion(this._id);\n\t\tcheckpointReaders.set(this as Node<unknown>, () => ({\n\t\t\tcache: this._value.cache,\n\t\t\thasData: this._value.hasData,\n\t\t\tterminal: this._value.terminal,\n\t\t\tactivated: this._lifecycle.activated,\n\t\t\thasCalledFnOnce: this._wave.hasCalledFnOnce,\n\t\t\tctxState: {\n\t\t\t\tvalue: this._privateState.value,\n\t\t\t\tpersist: this._privateState.persist,\n\t\t\t},\n\t\t\tversion: cloneNodeVersion(this._version.value),\n\t\t\thandle: this._slot.handle,\n\t\t}));\n\t\trestoreWriters.set(this as Node<unknown>, (state) => {\n\t\t\tthis._assertNotReleased(\"restoreGraph\");\n\t\t\tthis._value.cache = state.cache as T;\n\t\t\tthis._value.hasData = state.hasData;\n\t\t\tthis._value.status = state.status;\n\t\t\tthis._value.terminal = state.terminal;\n\t\t\tthis._value.hasTorndown = false;\n\t\t\tthis._value.replayRing = [];\n\t\t\tthis._wave.hasCalledFnOnce = state.hasCalledFnOnce;\n\t\t\tthis._wave.emittedDirtyThisWave = false;\n\t\t\tthis._wave.emittedSettleThisWave = false;\n\t\t\tthis._wave.pending = 0;\n\t\t\tthis._wave.insideRunWave = false;\n\t\t\tthis._wave.inDepMutation = false;\n\t\t\tthis._wave.rewireRunPending = false;\n\t\t\tthis._wave.batchDirtyOwed = false;\n\t\t\tthis._control.pauseBuffer = [];\n\t\t\tthis._control.pausedDepWaveOccurred = false;\n\t\t\tthis._control.demandOwed = undefined;\n\t\t\tthis._control.activePull = undefined;\n\t\t\tthis._control.pullDirtyOwed = false;\n\t\t\tthis._control.inDeliverDemand = false;\n\t\t\tthis._control.pauseLockset.clear();\n\t\t\tthis._privateState.value = state.ctxState.value;\n\t\t\tthis._privateState.persist = state.ctxState.persist;\n\t\t\tif (state.version === false) {\n\t\t\t\tthis._version.policy = { enabled: false };\n\t\t\t\tthis._version.value = undefined;\n\t\t\t} else if (state.version.level === 0) {\n\t\t\t\tthis._version.policy = { enabled: true, level: 0 };\n\t\t\t\tthis._version.value = cloneNodeVersion(state.version);\n\t\t\t} else {\n\t\t\t\tif (!this._version.policy.enabled || this._version.policy.level !== 1) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`restoreGraph: checkpoint node version level ${state.version.level} requires matching node versioning policy`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// D109: V1 restore must match the selected hash lane. After DATA then\n\t\t\t\t// INVALIDATE/resetOnTeardown, cache is absent while cid remains the last DATA cid;\n\t\t\t\t// without the DATA value, restore cannot verify the lane, so fail honestly.\n\t\t\t\tif (!state.hasData && state.version.counter > 0) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"restoreGraph: checkpoint node version cid cannot be verified without current DATA under V1 versioning (D109)\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst expectedCid = restoredV1Cid(this._version.policy, state.hasData, state.cache);\n\t\t\t\tif (expectedCid !== state.version.cid) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"restoreGraph: checkpoint node version cid does not match the selected node versioning hash policy (D109)\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthis._version.value = cloneNodeVersion(state.version);\n\t\t\t}\n\t\t\tthis._syncCtx = null;\n\t\t\tthis._resetDepState();\n\t\t\t// A fresh restored graph has no subscribers before return. Keep activation closed so the\n\t\t\t// first real subscriber wires deps normally; D94's preserved lifecycle bit is the first-run\n\t\t\t// gate (`hasCalledFnOnce`), not a hidden subscription graph.\n\t\t\tthis._lifecycle.activated = false;\n\t\t\tthis._lifecycle.subscribers.clear();\n\t\t\tthis._restoredActivationPending = true;\n\t\t});\n\t\truntimeReleasers.set(this as Node<unknown>, () => this._releaseRuntime());\n\t\truntimeQuiescenceReaders.set(this as Node<unknown>, () => this._isRuntimeQuiescentForRelease());\n\t\tsubscriberCountReaders.set(this as Node<unknown>, () => this._subscriberCount());\n\t\tactivationReaders.set(this as Node<unknown>, () => this._lifecycle.activated);\n\t\tNode._retainIndirectRuntimeMethods(this as Node<unknown>);\n\t}\n\n\t/** R-pull (D55/D272): true while a pull node is not serving a PULL demand pulse. */\n\tprivate _isPullQuiet(): boolean {\n\t\treturn this._slot.pull && this._control.activePull === undefined;\n\t}\n\n\t/**\n\t * R-pull (D269/D272): this pull node's pullId (pure data, like {@link cache}/{@link handle} —\n\t * never triggers computation). A consumer demands one delivery by cone-routing PULL of it (no\n\t * node reference): `ctx.up([[\"PULL\", { pullId }]])` (immediate; loops back → D37 for a self-read\n\t * dep) or `ctx.upNext([[\"PULL\", { pullId }]])` (boundary-deferred self-demand). Undefined for a\n\t * non-pull node. The author writes the pullId verbatim; routing matches by identity.\n\t */\n\tget pullId(): LockId | undefined {\n\t\treturn this._slot.pullLock;\n\t}\n\n\tget cache(): T | undefined {\n\t\treturn this._value.cache;\n\t}\n\n\tget status(): Status {\n\t\treturn this._value.status;\n\t}\n\n\tget version(): NodeVersion | undefined {\n\t\treturn cloneNodeVersion(this._version.value);\n\t}\n\n\tget name(): string | undefined {\n\t\treturn this._slot.name;\n\t}\n\n\t/** R-describe/D51: real factory name for a standalone graph-less node (a runtime *Map inner). */\n\tget factory(): string | undefined {\n\t\treturn this._slot.factory;\n\t}\n\n\t/**\n\t * The node's CURRENT/LIVE deps (R-describe / R-edges-derived / D51) — readonly view of the\n\t * live `_deps`, which a rewire (C-8 / C-11) mutates. The graph's describe() reads this (NOT a\n\t * construction-time snapshot) so every edge corresponds to a real current subscription (D3).\n\t * Inspection-only, like cache/status; never triggers computation.\n\t */\n\tget deps(): readonly Node<unknown>[] {\n\t\treturn this._slot.deps;\n\t}\n\n\t/**\n\t * The fn handle (pure data `(poolId, handleId)`, D7) or null for state/passthrough\n\t * nodes. Inspection-only (L1.6 handle is referenceable/inspectable) — lets the graph\n\t * layer key a dispatcher-backed profile recorder WITHOUT putting counters on the node\n\t * (R-node-thin / D39).\n\t */\n\tget handle(): Handle | null {\n\t\treturn this._slot.handle;\n\t}\n\n\t/** R-push-subscribe: a new sink receives START, then cached DATA (or DIRTY if dirty). */\n\tsubscribe(sink: Sink): () => void {\n\t\tthis._assertNotReleased(\"subscribe\");\n\t\t// Wave-owner boundary (R-rewire-deferred / D47): the activation cascade can run fns that\n\t\t// issue ctx.rewireNext; the OUTERMOST exit drains them. Nested subscribes (dep wiring)\n\t\t// just inc/dec the depth.\n\t\tenterWave();\n\t\ttry {\n\t\t\t// R-terminal: late subscribe to a terminal node either resets (resubscribable)\n\t\t\t// or is rejected (non-resubscribable, R2.2.7.b).\n\t\t\tif (this._value.terminal !== undefined) {\n\t\t\t\tif (this._slot.resubscribable) {\n\t\t\t\t\tthis._restoredActivationPending = false;\n\t\t\t\t\tthis._resetLifecycle();\n\t\t\t\t} else\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"subscribe: node is non-resubscribable and has terminated; the stream is permanently over (R-terminal / R2.2.7.b)\",\n\t\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis._lifecycle.subscribers.add(sink);\n\t\t\tsink([\"START\"]);\n\t\t\tif (this._slot.replayN > 0 && this._value.replayRing.length > 0) {\n\t\t\t\t// R-replay-buffer: late subscriber gets the last N DATA after START.\n\t\t\t\tfor (const v of this._value.replayRing) sink([\"DATA\", v]);\n\t\t\t} else if (this._value.hasData && !this._slot.pull) {\n\t\t\t\t// R-pull (D55): a pull node NEVER push-on-subscribes its cached value — quiet by\n\t\t\t\t// default, it stays silent until demanded (START only). QA-B4: gated on `_pull`, not\n\t\t\t\t// activePull, so a REACTIVATED pull node still does not leak its cache.\n\t\t\t\tsink([\"DATA\", this._value.cache]);\n\t\t\t} else if (this._value.status === \"dirty\" && !this._slot.pull) {\n\t\t\t\tsink([\"DIRTY\"]);\n\t\t\t}\n\n\t\t\tif (!this._lifecycle.activated) this._activate();\n\n\t\t\treturn () => {\n\t\t\t\tif (!this._lifecycle.subscribers.delete(sink)) return;\n\t\t\t\tif (this._lifecycle.subscribers.size === 0) this._deactivate();\n\t\t\t};\n\t\t} finally {\n\t\t\texitWave();\n\t\t}\n\t}\n\n\t/** External emission toward sinks (state-node push, or async late-emit). One call = one wave. */\n\tdown(msgs: Wave): void {\n\t\tthis._assertNotReleased(\"down\");\n\t\t// Wave-owner boundary (D47): a state.set / external push that drives a fn issuing\n\t\t// ctx.rewireNext drains at this outermost exit.\n\t\tenterWave();\n\t\ttry {\n\t\t\tthis._down(msgs);\n\t\t} finally {\n\t\t\texitWave();\n\t\t}\n\t}\n\n\t/**\n\t * Emit upstream toward deps — control tiers only (R-ctx-up). `towardDep` (a dep index) routes up\n\t * ONE declared edge (R-up-routing directed-up); omitted = broadcast up all deps.\n\t */\n\tup(msgs: Wave, towardDep?: number): void {\n\t\tthis._assertNotReleased(\"up\");\n\t\t// Wave-owner boundary (D47). Internal dep-forwarding calls dep.up() nest under this.\n\t\tenterWave();\n\t\ttry {\n\t\t\tthis._up(msgs, towardDep);\n\t\t} finally {\n\t\t\texitWave();\n\t\t}\n\t}\n\n\t// ── rewire (R-rewire / D42): intra-graph runtime topology mutation ──\n\n\t/**\n\t * Replace this node's deps atomically (surgical, Option-C). Requires an explicit\n\t * `fn` (SD-1 fn-deps pairing — user fns read dep input positionally). Kept deps\n\t * keep their subscription + per-dep state; only removed deps unsubscribe and only\n\t * added deps fresh-subscribe (push-on-subscribe for an added cached dep). The\n\t * first-run gate and cache are PRESERVED (R-rewire Q2/Q7). Intra-graph only (D22).\n\t */\n\treplaceDeps(newDeps: Node<unknown>[], fn: NodeFn): void {\n\t\tthis._assertNotReleased(\"replaceDeps\");\n\t\tthis._rewire(this._dedupDeps(newDeps), fn);\n\t}\n\n\t/** Subscribe to one dep (special case of replaceDeps); returns its index. fn required (SD-1). */\n\tsubscribeDep(depNode: Node<unknown>, fn: NodeFn): number {\n\t\tthis._assertNotReleased(\"subscribeDep\");\n\t\tconst next = this._slot.deps.includes(depNode)\n\t\t\t? [...this._slot.deps]\n\t\t\t: [...this._slot.deps, depNode];\n\t\tconst deferred = this._rewire(next, fn);\n\t\treturn deferred ? next.indexOf(depNode) : this._slot.deps.indexOf(depNode);\n\t}\n\n\t/** Unsubscribe from one dep (special case of replaceDeps); idempotent if absent (fn swap still applies). */\n\tunsubscribeDep(depNode: Node<unknown>, fn: NodeFn): void {\n\t\tthis._assertNotReleased(\"unsubscribeDep\");\n\t\tthis._rewire(\n\t\t\tthis._slot.deps.filter((d) => d !== depNode),\n\t\t\tfn,\n\t\t);\n\t}\n\n\tprivate _requestRewireNext(op: RewireOp): void {\n\t\tnodeRequestRewireNext(nodeRuntimeHost(this), op);\n\t}\n\n\tprivate _requestUpNext(msgs: Wave, towardDep?: number): void {\n\t\tnodeRequestUpNext(nodeRuntimeHost(this), msgs, towardDep);\n\t}\n\n\tprivate _applyRewireNext(op: RewireOp): void {\n\t\tnodeApplyRewireNext(nodeRuntimeHost(this), op);\n\t}\n\n\tprivate _dedupDeps(deps: Node<unknown>[]): Node<unknown>[] {\n\t\tconst seen = new Set<Node<unknown>>();\n\t\tconst out: Node<unknown>[] = [];\n\t\tfor (const d of deps)\n\t\t\tif (!seen.has(d)) {\n\t\t\t\tseen.add(d);\n\t\t\t\tout.push(d);\n\t\t\t}\n\t\treturn out;\n\t}\n\n\tprivate _reachableUpstream(from: Node<unknown>, target: Node<unknown>): boolean {\n\t\tconst seen = new Set<Node<unknown>>();\n\t\tconst stack: Node<unknown>[] = [from];\n\t\twhile (stack.length > 0) {\n\t\t\tconst n = stack.pop();\n\t\t\tif (n === undefined) continue;\n\t\t\tif (n === target) return true;\n\t\t\tif (seen.has(n)) continue;\n\t\t\tseen.add(n);\n\t\t\tfor (const d of nodeRuntimeHost(n)._slot.deps) stack.push(d);\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate _assertRewireDepOwner(dep: Node<unknown>): void {\n\t\tconst selfOwner = getNodeOwner(this as unknown as Node<unknown>);\n\t\tconst depOwner = getNodeOwner(dep);\n\t\tif (selfOwner !== undefined && depOwner !== undefined && selfOwner !== depOwner)\n\t\t\tthrow new Error(\n\t\t\t\t\"rewire: dep belongs to a different graph; cross-graph deps require a wire bridge (D22 / R-graph-domain)\",\n\t\t\t);\n\t}\n\n\tprivate _rewire(\n\t\tnewDeps: Node<unknown>[],\n\t\tfn: NodeFn,\n\t\topts: { allowTerminalOwner?: boolean } = {},\n\t): boolean {\n\t\treturn nodeRewire(nodeRuntimeHost(this), newDeps, fn, opts);\n\t}\n\n\t// ── activation / deactivation (lazy; R-rom-ram) ──\n\n\tprivate _activate(): void {\n\t\tnodeActivate(nodeRuntimeHost(this));\n\t}\n\n\tprivate _deactivate(): void {\n\t\tnodeDeactivate(nodeRuntimeHost(this));\n\t}\n\n\tprivate _assertNotReleased(op: string): void {\n\t\tif (this._released)\n\t\t\tthrow new Error(`${op}: node has been released from its graph lifecycle (D122)`);\n\t}\n\n\tprivate _subscriberCount(): number {\n\t\treturn nodeSubscriberCount(nodeRuntimeHost(this));\n\t}\n\n\tprivate _isRuntimeQuiescentForRelease(): boolean {\n\t\treturn nodeIsRuntimeQuiescentForRelease(nodeRuntimeHost(this));\n\t}\n\n\tprivate _releaseRuntime(): void {\n\t\tnodeReleaseRuntime(nodeRuntimeHost(this));\n\t}\n\n\tprivate _resetDepState(): void {\n\t\tnodeResetDepState(nodeRuntimeHost(this));\n\t}\n\n\tprivate _subscribeDepAt(depNode: Node<unknown>, opts: { seedRestored?: boolean } = {}): void {\n\t\tnodeSubscribeDepAt(nodeRuntimeHost(this), depNode, opts);\n\t}\n\n\tprivate _seedRestoredDepAt(idx: number, depNode: Node<unknown>): void {\n\t\tnodeSeedRestoredDepAt(nodeRuntimeHost(this), idx, depNode);\n\t}\n\n\tprivate _recordDepProjection(idx: number, delivery: DeliveryMeta | undefined): unknown[] {\n\t\treturn nodeRecordDepProjection(nodeRuntimeHost(this), idx, delivery);\n\t}\n\n\tprivate _depProjectionHasData(idx: number): boolean {\n\t\treturn nodeDepProjectionHasData(nodeRuntimeHost(this), idx);\n\t}\n\n\tprivate _receiveFromDep(idx: number, msg: Message, delivery?: DeliveryMeta): void {\n\t\tnodeReceiveFromDep(nodeRuntimeHost(this), idx, msg, delivery);\n\t}\n\n\tprivate _releaseDepDirty(idx: number): void {\n\t\tnodeReleaseDepDirty(nodeRuntimeHost(this), idx);\n\t}\n\n\tprivate _settleAfterAbsorbedTerminal(): void {\n\t\tnodeSettleAfterAbsorbedTerminal(nodeRuntimeHost(this));\n\t}\n\n\tprivate _markDirty(): void {\n\t\tnodeMarkDirty(nodeRuntimeHost(this));\n\t}\n\n\tprivate _maybeRun(): void {\n\t\tnodeMaybeRun(nodeRuntimeHost(this));\n\t}\n\n\tprivate _settleRewire(): void {\n\t\tnodeSettleRewire(nodeRuntimeHost(this));\n\t}\n\n\tprivate _tryRun(): void {\n\t\tnodeTryRun(nodeRuntimeHost(this));\n\t}\n\n\tprivate _allDepsSettled(): boolean {\n\t\treturn nodeAllDepsSettled(nodeRuntimeHost(this));\n\t}\n\n\tprivate _passthroughEmit(): void {\n\t\tnodePassthroughEmit(nodeRuntimeHost(this));\n\t}\n\n\tprivate _runWave(): void {\n\t\tnodeRunWave(nodeRuntimeHost(this));\n\t}\n\n\tprivate _buildCtx(): Ctx {\n\t\treturn nodeBuildCtx(nodeRuntimeHost(this));\n\t}\n\n\tprivate _makeCtx(snapshot?: {\n\t\twaveData: unknown[][][];\n\t\tterminal: unknown[];\n\t\tlatest: unknown[];\n\t}): Ctx {\n\t\treturn nodeMakeCtx(nodeRuntimeHost(this), snapshot);\n\t}\n\n\tprivate _refreshCtx(ctx: Ctx): void {\n\t\tnodeRefreshCtx(nodeRuntimeHost(this), ctx);\n\t}\n\n\tprivate _makeState(): CtxState {\n\t\treturn nodeMakeState(nodeRuntimeHost(this));\n\t}\n\n\t// ── downstream emission pipeline (the unified waist) ──\n\n\tprivate _down(msgs: Wave): void {\n\t\tnodeDown(nodeRuntimeHost(this), msgs);\n\t}\n\n\tprivate _up(msgs: Wave, towardDep?: number, route?: UpRouteState): void {\n\t\tnodeUp(nodeRuntimeHost(this), msgs, towardDep, route);\n\t}\n\n\tprivate _markDemandRouted(lockId: LockId, route: UpRouteState): boolean {\n\t\treturn nodeMarkDemandRouted(nodeRuntimeHost(this), lockId, route);\n\t}\n\n\tprivate _forwardUp(m: Message, towardDep: number | undefined, route: UpRouteState): void {\n\t\tnodeForwardUp(nodeRuntimeHost(this), m, towardDep, route);\n\t}\n\n\tprivate _isPaused(): boolean {\n\t\treturn nodeIsPaused(nodeRuntimeHost(this));\n\t}\n\n\tprivate _hasBoundaryPauseLock(): boolean {\n\t\treturn nodeHasBoundaryPauseLock(nodeRuntimeHost(this));\n\t}\n\n\tprivate _isAsyncPool(): boolean {\n\t\treturn nodeIsAsyncPool(nodeRuntimeHost(this));\n\t}\n\n\tprivate _pauseAcquire(lockId: unknown): void {\n\t\tnodePauseAcquire(nodeRuntimeHost(this), lockId);\n\t}\n\n\tprivate _pauseRelease(lockId: unknown): void {\n\t\tnodePauseRelease(nodeRuntimeHost(this), lockId);\n\t}\n\n\tprivate _onResume(): void {\n\t\tnodeOnResume(nodeRuntimeHost(this));\n\t}\n\n\tprivate _canFireDemand(): boolean {\n\t\treturn nodeCanFireDemand(nodeRuntimeHost(this));\n\t}\n\n\tprivate _deliverPullDemand(demand: PullDemand): void {\n\t\tnodeDeliverPullDemand(nodeRuntimeHost(this), demand);\n\t}\n\n\tprivate _onDemand(demand: PullDemand): void {\n\t\tnodeOnDemand(nodeRuntimeHost(this), demand);\n\t}\n\n\tprivate _firePullDemand(): void {\n\t\tnodeFirePullDemand(nodeRuntimeHost(this));\n\t}\n\n\tprivate _fireOwedDemandIfReady(): void {\n\t\tnodeFireOwedDemandIfReady(nodeRuntimeHost(this));\n\t}\n\n\tprivate _shouldBufferOnPause(): boolean {\n\t\treturn nodeShouldBufferOnPause(nodeRuntimeHost(this));\n\t}\n\n\tprivate _invalidate(delivery?: DeliveryMeta): void {\n\t\tnodeInvalidate(nodeRuntimeHost(this), delivery);\n\t}\n\n\tprivate _allDepsTerminal(): boolean {\n\t\treturn nodeAllDepsTerminal(nodeRuntimeHost(this));\n\t}\n\n\tprivate _emitToSubs(msg: Message, delivery?: DeliveryMeta): void {\n\t\tnodeEmitToSubs(nodeRuntimeHost(this), msg, delivery);\n\t}\n\n\t/** R-terminal: resubscribable reset clears terminal + dep state + re-arms the gate. */\n\tprivate _resetLifecycle(): void {\n\t\tnodeResetLifecycle(nodeRuntimeHost(this));\n\t}\n\n\t/** Batch commit (R-batch-coalesce): deliver the deferred tier-3 wave now. */\n\t__commitBatchedWave(wave: Wave): void {\n\t\tnodeCommitBatchedWave(nodeRuntimeHost(this), wave);\n\t}\n\n\t/** Batch rollback: balance the immediate DIRTY with a RESOLVED so downstream un-dirties. */\n\t__rollbackBatched(): void {\n\t\tnodeRollbackBatched(nodeRuntimeHost(this));\n\t}\n\n\t/** B49: enqueue a committed-boundary task on this node's graph-local core. */\n\t__deferBoundary(fn: () => void, batchToken?: object): void {\n\t\tnodeDeferBoundary(nodeRuntimeHost(this), fn, batchToken);\n\t}\n}\n\n/**\n * Construct a node (R-node-iface / D5 / L1.9 deps-first).\n * node([], null, { initial }) — state node (manual source; emit via .down)\n * node([], fn) — producer (runs on activation)\n * node([a, b], fn) — compute / derived\n * node([dep]) — passthrough wire\n */\nexport function node<T = unknown>(\n\tdeps: Node<unknown>[] = [],\n\thandleOrFn: Handle | NodeFn | null = null,\n\topts: NodeOptions<T> = {},\n): Node<T> {\n\treturn new Node<T>(deps, handleOrFn, opts);\n}\n\n/**\n * Construct a dynamicNode (R-dynamic-node / D35) — a node variant whose fn reads a\n * subset of a fixed superset of deps per invocation via `ctx.track(i)`. All declared\n * deps participate in wave tracking; an unread dep's change re-runs the fn, which re-emits\n * its current value as DATA (D49 removed equals-absorption — dedup is opt-in via\n * distinctUntilChanged). Intra-graph only (D22).\n */\nexport function dynamicNode<T = unknown>(\n\tdeps: Node<unknown>[],\n\tfn: NodeFn,\n\topts: NodeOptions<T> = {},\n): Node<T> {\n\treturn new Node<T>(deps, fn, { ...opts, dynamic: true });\n}\n"],"mappings":"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","names":["active","node","node","node","node","node","node"]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|