@graphrefly/ts 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions-types-CSC3NMDl.d.ts +657 -0
- package/dist/actions-types-wl9Mgkmr.d.cts +657 -0
- package/dist/adapters/index.cjs +5157 -2951
- package/dist/adapters/index.cjs.map +1 -1
- package/dist/adapters/index.d.cts +207 -70
- package/dist/adapters/index.d.ts +207 -70
- package/dist/adapters/index.js +3738 -1688
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/nestjs/microservices.cjs +841 -0
- package/dist/adapters/nestjs/microservices.cjs.map +1 -0
- package/dist/adapters/nestjs/microservices.d.cts +45 -0
- package/dist/adapters/nestjs/microservices.d.ts +45 -0
- package/dist/adapters/nestjs/microservices.js +206 -0
- package/dist/adapters/nestjs/microservices.js.map +1 -0
- package/dist/adapters/nestjs/native.cjs +1391 -0
- package/dist/adapters/nestjs/native.cjs.map +1 -0
- package/dist/adapters/nestjs/native.d.cts +111 -0
- package/dist/adapters/nestjs/native.d.ts +111 -0
- package/dist/adapters/nestjs/native.js +577 -0
- package/dist/adapters/nestjs/native.js.map +1 -0
- package/dist/adapters/nestjs/websockets.cjs +924 -0
- package/dist/adapters/nestjs/websockets.cjs.map +1 -0
- package/dist/adapters/nestjs/websockets.d.cts +47 -0
- package/dist/adapters/nestjs/websockets.d.ts +47 -0
- package/dist/adapters/nestjs/websockets.js +286 -0
- package/dist/adapters/nestjs/websockets.js.map +1 -0
- package/dist/adapters/nestjs.cjs +1085 -0
- package/dist/adapters/nestjs.cjs.map +1 -0
- package/dist/adapters/nestjs.d.cts +385 -0
- package/dist/adapters/nestjs.d.ts +385 -0
- package/dist/adapters/nestjs.js +112 -0
- package/dist/adapters/nestjs.js.map +1 -0
- package/dist/adapters/observe-storage.d.cts +3 -3
- package/dist/adapters/observe-storage.d.ts +3 -3
- package/dist/adapters/observe-storage.js +4 -4
- package/dist/adapters/react.cjs.map +1 -1
- package/dist/adapters/react.d.cts +2 -2
- package/dist/adapters/react.d.ts +2 -2
- package/dist/adapters/react.js +1 -1
- package/dist/adapters/solid.cjs.map +1 -1
- package/dist/adapters/solid.d.cts +2 -2
- package/dist/adapters/solid.d.ts +2 -2
- package/dist/adapters/solid.js +1 -1
- package/dist/adapters/svelte.cjs.map +1 -1
- package/dist/adapters/svelte.d.cts +2 -2
- package/dist/adapters/svelte.d.ts +2 -2
- package/dist/adapters/svelte.js +1 -1
- package/dist/adapters/vue.cjs.map +1 -1
- package/dist/adapters/vue.d.cts +2 -2
- package/dist/adapters/vue.d.ts +2 -2
- package/dist/adapters/vue.js +1 -1
- package/dist/{agent-runtime-DZTJ3C-p.d.cts → agent-runtime-types-core-CaXfKNtY.d.cts} +171 -320
- package/dist/{agent-runtime-BesGDZcB.d.ts → agent-runtime-types-core-hU299uIC.d.ts} +171 -320
- package/dist/agent-runtime-types-tool-BEpSINol.d.ts +695 -0
- package/dist/agent-runtime-types-tool-DninPEzk.d.cts +695 -0
- package/dist/agentic-memory-retention-BmGX368S.d.ts +14 -0
- package/dist/agentic-memory-retention-Ih1qhX9Z.d.cts +14 -0
- package/dist/{agentic-memory-BmRCvh0d.d.ts → agentic-memory-types-CVSUS6XR.d.ts} +13 -57
- package/dist/{agentic-memory-DfuVZ-lY.d.cts → agentic-memory-types-FnnYlVUs.d.cts} +13 -57
- package/dist/{capability-admission-g0mn9hpq.d.ts → capability-admission-BW2CziT6.d.ts} +3 -3
- package/dist/{capability-admission-B0BzqAm5.d.cts → capability-admission-lwSecxXs.d.cts} +3 -3
- package/dist/chunk-2KUAG2GZ.js +9693 -0
- package/dist/chunk-2KUAG2GZ.js.map +1 -0
- package/dist/chunk-2NJP6GO4.js +1320 -0
- package/dist/chunk-2NJP6GO4.js.map +1 -0
- package/dist/{chunk-YDSIVHRR.js → chunk-4NWSNI4K.js} +1598 -1584
- package/dist/chunk-4NWSNI4K.js.map +1 -0
- package/dist/{chunk-Z2ANQ6JW.js → chunk-4Q77MMJY.js} +2 -2
- package/dist/chunk-6E76H4OU.js +132 -0
- package/dist/chunk-6E76H4OU.js.map +1 -0
- package/dist/chunk-7GOTIIQ7.js +819 -0
- package/dist/chunk-7GOTIIQ7.js.map +1 -0
- package/dist/{chunk-IXZBUWSP.js → chunk-7HZRJMN6.js} +2 -2
- package/dist/{chunk-SS2A464I.js → chunk-CJIFGJQG.js} +3 -3
- package/dist/{chunk-V7CIJE4B.js → chunk-CX6B6PO2.js} +92 -9
- package/dist/chunk-CX6B6PO2.js.map +1 -0
- package/dist/{chunk-FBUU43PM.js → chunk-E4QCH32M.js} +448 -446
- package/dist/chunk-E4QCH32M.js.map +1 -0
- package/dist/{chunk-HKK2JD7Z.js → chunk-ECURQ3HD.js} +12 -125
- package/dist/chunk-ECURQ3HD.js.map +1 -0
- package/dist/{chunk-3JR3EDB2.js → chunk-EOKT4QFF.js} +121 -115
- package/dist/chunk-EOKT4QFF.js.map +1 -0
- package/dist/{chunk-K3FXTC3I.js → chunk-HJACH5PU.js} +3 -3
- package/dist/{chunk-GTPCOEOZ.js → chunk-IDMLXLLG.js} +3 -3
- package/dist/{chunk-DKP56CSW.js → chunk-JKAYLDQV.js} +2 -2
- package/dist/{chunk-4VLAQHZI.js → chunk-K7FB3JTD.js} +17 -1
- package/dist/chunk-K7FB3JTD.js.map +1 -0
- package/dist/{chunk-H75VXTGT.js → chunk-L6LDXRWE.js} +3 -3
- package/dist/{chunk-H75VXTGT.js.map → chunk-L6LDXRWE.js.map} +1 -1
- package/dist/{chunk-YXMZ2N6J.js → chunk-M7J6Z4IJ.js} +1071 -1025
- package/dist/chunk-M7J6Z4IJ.js.map +1 -0
- package/dist/chunk-MQEQMS7B.js +1009 -0
- package/dist/chunk-MQEQMS7B.js.map +1 -0
- package/dist/chunk-MTELVIYR.js +1421 -0
- package/dist/chunk-MTELVIYR.js.map +1 -0
- package/dist/{chunk-QFY4AFY4.js → chunk-PVC7WDKI.js} +58 -52
- package/dist/chunk-PVC7WDKI.js.map +1 -0
- package/dist/{chunk-VTHLCFN4.js → chunk-RAHNUYA5.js} +2 -2
- package/dist/{chunk-XKXWK2KP.js → chunk-SHZDP2MQ.js} +1157 -1021
- package/dist/chunk-SHZDP2MQ.js.map +1 -0
- package/dist/{chunk-CZNV3VXM.js → chunk-SIDJO2T4.js} +11 -11
- package/dist/chunk-STXRMPW4.js +4131 -0
- package/dist/chunk-STXRMPW4.js.map +1 -0
- package/dist/{chunk-2747WN4Y.js → chunk-TPND5MJS.js} +3 -3
- package/dist/chunk-TQPCAIQI.js +612 -0
- package/dist/chunk-TQPCAIQI.js.map +1 -0
- package/dist/{chunk-43BKLFZU.js → chunk-YDWBXXQZ.js} +10 -10
- package/dist/{chunk-6PHB5CJS.js → chunk-ZLFRB6FI.js} +2 -2
- package/dist/composition/index.cjs +1228 -1076
- 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 +4 -4
- package/dist/core/index.cjs +1198 -1046
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.cts +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.js +2 -2
- 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 +1226 -1074
- package/dist/data-structures/index.cjs.map +1 -1
- package/dist/data-structures/index.d.cts +8 -7
- package/dist/data-structures/index.d.ts +8 -7
- package/dist/data-structures/index.js +6 -5
- package/dist/{describe-BpyJuWkw.d.ts → describe-B_A5fbXH.d.ts} +1 -1
- package/dist/{describe-DYMw_l1C.d.cts → describe-CQRrkv-Q.d.cts} +1 -1
- package/dist/executors/tool-provider-adapters.cjs +3091 -0
- package/dist/executors/tool-provider-adapters.cjs.map +1 -0
- package/dist/executors/tool-provider-adapters.d.cts +174 -0
- package/dist/executors/tool-provider-adapters.d.ts +174 -0
- package/dist/executors/tool-provider-adapters.js +1336 -0
- package/dist/executors/tool-provider-adapters.js.map +1 -0
- package/dist/executors/tool-provider-runtime.cjs +5178 -0
- package/dist/executors/tool-provider-runtime.cjs.map +1 -0
- package/dist/executors/tool-provider-runtime.d.cts +17 -0
- package/dist/executors/tool-provider-runtime.d.ts +17 -0
- package/dist/executors/tool-provider-runtime.js +15 -0
- package/dist/executors/tool-provider-runtime.js.map +1 -0
- package/dist/executors/tool-provider.cjs +6392 -0
- package/dist/executors/tool-provider.cjs.map +1 -0
- package/dist/executors/tool-provider.d.cts +60 -0
- package/dist/executors/tool-provider.d.ts +60 -0
- package/dist/executors/tool-provider.js +89 -0
- package/dist/executors/tool-provider.js.map +1 -0
- package/dist/executors/work-queue.d.cts +6 -6
- package/dist/executors/work-queue.d.ts +6 -6
- package/dist/graph/index.cjs +1499 -1341
- package/dist/graph/index.cjs.map +1 -1
- package/dist/graph/index.d.cts +9 -8
- package/dist/graph/index.d.ts +9 -8
- package/dist/graph/index.js +23 -22
- package/dist/{graph-DCEWh4T2.d.cts → graph-CWK3HLPB.d.cts} +133 -131
- package/dist/{graph-D-1-SQeC.d.ts → graph-ho5sotHP.d.ts} +133 -131
- package/dist/{index-Bmxeu0nK.d.ts → index-CQWcE0Dw.d.ts} +18 -4
- package/dist/{index-72VZC0-E.d.cts → index-DHA1i67c.d.cts} +18 -4
- package/dist/index.cjs +3397 -3140
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -9
- package/dist/index.d.ts +12 -9
- package/dist/index.js +110 -109
- package/dist/inspection/boundary.d.cts +4 -4
- package/dist/inspection/boundary.d.ts +4 -4
- package/dist/measurements-C0mAvWU1.d.cts +164 -0
- package/dist/measurements-OMpCeBwh.d.ts +164 -0
- package/dist/messaging/index.cjs +57 -51
- package/dist/messaging/index.cjs.map +1 -1
- package/dist/messaging/index.d.cts +11 -276
- package/dist/messaging/index.d.ts +11 -276
- package/dist/messaging/index.js +1 -1
- package/dist/operators/index.cjs +1228 -1076
- 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 +5 -5
- package/dist/orchestration/index.cjs +8844 -6071
- package/dist/orchestration/index.cjs.map +1 -1
- package/dist/orchestration/index.d.cts +171 -224
- package/dist/orchestration/index.d.ts +171 -224
- package/dist/orchestration/index.js +42 -991
- package/dist/orchestration/index.js.map +1 -1
- package/dist/orchestration/messaging.d.cts +5 -8
- package/dist/orchestration/messaging.d.ts +5 -8
- package/dist/orchestration/work-queue.cjs +1243 -5
- package/dist/orchestration/work-queue.cjs.map +1 -1
- package/dist/orchestration/work-queue.d.cts +121 -10
- package/dist/orchestration/work-queue.d.ts +121 -10
- package/dist/orchestration/work-queue.js +1067 -4
- package/dist/orchestration/work-queue.js.map +1 -1
- package/dist/patterns/event-flow.cjs +6 -20
- package/dist/patterns/event-flow.cjs.map +1 -1
- package/dist/patterns/event-flow.d.cts +4 -4
- package/dist/patterns/event-flow.d.ts +4 -4
- package/dist/patterns/event-flow.js +2 -2
- package/dist/patterns/index.cjs +453 -465
- package/dist/patterns/index.cjs.map +1 -1
- package/dist/patterns/index.d.cts +6 -5
- package/dist/patterns/index.d.ts +6 -5
- package/dist/patterns/index.js +3 -3
- package/dist/process-types-C9uMYz3i.d.ts +200 -0
- package/dist/process-types-h3uRlzDc.d.cts +200 -0
- package/dist/{reactive-collection-DNV0-gFi.d.cts → reactive-collection-B9R0Bl1P.d.cts} +4 -34
- package/dist/{reactive-collection-BAmfrGjd.d.ts → reactive-collection-BXFrH0U2.d.ts} +4 -34
- package/dist/{reactive-collection-storage-BNEldDyi.d.cts → reactive-collection-storage-BLGv8Xp8.d.cts} +5 -5
- package/dist/{reactive-collection-storage-YZsAQsWK.d.ts → reactive-collection-storage-a4zD3665.d.ts} +5 -5
- package/dist/{reactive-map-DRD1LJ2H.d.cts → reactive-map-C_8sOfdS.d.cts} +3 -2
- package/dist/{reactive-map-EsDiCmJk.d.ts → reactive-map-jle5dnok.d.ts} +3 -2
- package/dist/render/index.d.cts +2 -2
- package/dist/render/index.d.ts +2 -2
- package/dist/scheduled-readiness-5rwQlyjV.d.ts +91 -0
- package/dist/scheduled-readiness-DpRY8jI0.d.cts +91 -0
- package/dist/semantic-memory-graph-C2ZUwIlq.d.ts +30 -0
- package/dist/semantic-memory-graph-DlZBD_Eu.d.cts +30 -0
- package/dist/{semantic-memory-graph-DKuNzuWw.d.cts → semantic-memory-graph-types-BvzdqmkY.d.cts} +2 -28
- package/dist/{semantic-memory-graph-uwbwJdhe.d.ts → semantic-memory-graph-types-Ci-OtahO.d.ts} +2 -28
- package/dist/solutions/index.cjs +6353 -6169
- package/dist/solutions/index.cjs.map +1 -1
- package/dist/solutions/index.d.cts +12 -10
- package/dist/solutions/index.d.ts +12 -10
- package/dist/solutions/index.js +5 -5
- package/dist/solutions/reactive-layout/browser/index.cjs +116 -108
- 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 +3 -3
- package/dist/solutions/reactive-layout/index.cjs +3578 -3350
- package/dist/solutions/reactive-layout/index.cjs.map +1 -1
- package/dist/solutions/reactive-layout/index.d.cts +32 -576
- package/dist/solutions/reactive-layout/index.d.ts +32 -576
- package/dist/solutions/reactive-layout/index.js +65 -5
- package/dist/solutions/reactive-layout/node-canvas/index.cjs +127 -117
- 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 +3 -3
- package/dist/solutions/reactive-layout/react-native/index.cjs +127 -117
- 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 +3 -3
- package/dist/solutions/reactive-layout/skia/index.cjs +127 -117
- 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 +3 -3
- package/dist/solutions/work-item/actions.cjs +1609 -1428
- package/dist/solutions/work-item/actions.cjs.map +1 -1
- package/dist/solutions/work-item/actions.d.cts +23 -184
- package/dist/solutions/work-item/actions.d.ts +23 -184
- package/dist/solutions/work-item/actions.js +1558 -934
- package/dist/solutions/work-item/actions.js.map +1 -1
- package/dist/solutions/work-item/scheduling.cjs +9181 -1838
- package/dist/solutions/work-item/scheduling.cjs.map +1 -1
- package/dist/solutions/work-item/scheduling.d.cts +1763 -328
- package/dist/solutions/work-item/scheduling.d.ts +1763 -328
- package/dist/solutions/work-item/scheduling.js +117 -3
- 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 +1318 -1083
- package/dist/sources/browser.cjs.map +1 -1
- package/dist/sources/browser.d.cts +4 -4
- package/dist/sources/browser.d.ts +4 -4
- package/dist/sources/browser.js +4 -4
- package/dist/sources/index.cjs +1318 -1083
- 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 +4 -4
- package/dist/sources/node.d.cts +3 -3
- package/dist/sources/node.d.ts +3 -3
- package/dist/storage/browser.cjs +16 -0
- package/dist/storage/browser.cjs.map +1 -1
- package/dist/storage/browser.js +3 -3
- package/dist/storage/index.cjs +16 -0
- package/dist/storage/index.cjs.map +1 -1
- package/dist/storage/index.d.cts +5 -4
- package/dist/storage/index.d.ts +5 -4
- package/dist/storage/index.js +6 -6
- package/dist/storage/node.cjs +16 -0
- package/dist/storage/node.cjs.map +1 -1
- package/dist/storage/node.js +3 -3
- package/dist/{store-C-joM4gh.d.ts → store-BmtEs9mG.d.ts} +1 -1
- package/dist/{store-CNJwmT-h.d.cts → store-PAAsYvML.d.cts} +1 -1
- package/dist/types-BRNKoFHj.d.ts +357 -0
- package/dist/{types-CcPIn7sy.d.cts → types-BS6CyR-x.d.cts} +27 -108
- package/dist/types-BWK2ay3e.d.cts +457 -0
- package/dist/types-BXKSAoE1.d.cts +357 -0
- package/dist/types-BaPpZItj.d.ts +457 -0
- package/dist/types-BhveCMg5.d.cts +274 -0
- package/dist/{types-BsJvElYZ.d.ts → types-C9NOgNJw.d.ts} +27 -108
- package/dist/types-CTsQ8Ww4.d.ts +274 -0
- package/dist/types-DL_05n2M.d.ts +34 -0
- package/dist/types-XDoqxYO9.d.cts +34 -0
- package/dist/{work-item-runtime-C3M79vE9.d.ts → work-item-runtime-types-BqtWnSCS.d.ts} +3 -93
- package/dist/{work-item-runtime-qaVgsL0T.d.cts → work-item-runtime-types-CHO03AKh.d.cts} +3 -93
- package/dist/work-queue/index.cjs +957 -953
- package/dist/work-queue/index.cjs.map +1 -1
- package/dist/work-queue/index.d.cts +9 -357
- package/dist/work-queue/index.d.ts +9 -357
- package/dist/work-queue/index.js +957 -953
- package/dist/work-queue/index.js.map +1 -1
- package/package.json +603 -513
- package/dist/chunk-3JR3EDB2.js.map +0 -1
- package/dist/chunk-4VLAQHZI.js.map +0 -1
- package/dist/chunk-6XAIOL3X.js +0 -2407
- package/dist/chunk-6XAIOL3X.js.map +0 -1
- package/dist/chunk-FBUU43PM.js.map +0 -1
- package/dist/chunk-HKK2JD7Z.js.map +0 -1
- package/dist/chunk-PC3BTTBE.js +0 -3217
- package/dist/chunk-PC3BTTBE.js.map +0 -1
- package/dist/chunk-QFY4AFY4.js.map +0 -1
- package/dist/chunk-V7CIJE4B.js.map +0 -1
- package/dist/chunk-XKXWK2KP.js.map +0 -1
- package/dist/chunk-YDSIVHRR.js.map +0 -1
- package/dist/chunk-YXMZ2N6J.js.map +0 -1
- /package/dist/{chunk-Z2ANQ6JW.js.map → chunk-4Q77MMJY.js.map} +0 -0
- /package/dist/{chunk-IXZBUWSP.js.map → chunk-7HZRJMN6.js.map} +0 -0
- /package/dist/{chunk-SS2A464I.js.map → chunk-CJIFGJQG.js.map} +0 -0
- /package/dist/{chunk-K3FXTC3I.js.map → chunk-HJACH5PU.js.map} +0 -0
- /package/dist/{chunk-GTPCOEOZ.js.map → chunk-IDMLXLLG.js.map} +0 -0
- /package/dist/{chunk-DKP56CSW.js.map → chunk-JKAYLDQV.js.map} +0 -0
- /package/dist/{chunk-VTHLCFN4.js.map → chunk-RAHNUYA5.js.map} +0 -0
- /package/dist/{chunk-CZNV3VXM.js.map → chunk-SIDJO2T4.js.map} +0 -0
- /package/dist/{chunk-2747WN4Y.js.map → chunk-TPND5MJS.js.map} +0 -0
- /package/dist/{chunk-43BKLFZU.js.map → chunk-YDWBXXQZ.js.map} +0 -0
- /package/dist/{chunk-6PHB5CJS.js.map → chunk-ZLFRB6FI.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/storage/index.ts","../../src/storage/backend.ts","../../src/json/codec.ts","../../src/storage/kv.ts","../../src/storage/append-log.ts","../../src/storage/scalar.ts","../../src/storage/change.ts","../../src/storage/content-addressed.ts","../../src/storage/observe-event-log.ts","../../src/storage/reactive-collection.ts","../../src/storage/read-through.ts","../../src/storage/wal.ts"],"sourcesContent":["export {\n\tAPPEND_LOG_SEQ_PAD,\n\ttype AppendLogEntry,\n\ttype AppendLogPage,\n\ttype AppendLogReadOptions,\n\ttype AppendLogStorageTier,\n\tappendLogKey,\n\tappendLogStorage,\n\ttype MultiWriterAppendLogOptions,\n\ttype MultiWriterAppendLogStorageTier,\n\tmemoryAppendLog,\n\tmemoryMultiWriterAppendLog,\n\tmultiWriterAppendLogStorage,\n\treadAppendLogPage,\n} from \"./append-log.js\";\nexport {\n\thasStoragePutIfAbsent,\n\thasStorageVersioned,\n\ttype MemoryBackend,\n\tmemoryBackend,\n\ttype PutIfAbsentStorageBackend,\n\trequireStoragePutIfAbsent,\n\trequireStorageVersioned,\n\ttype StorageBackend,\n\ttype StorageGeneration,\n\ttype StorageNamespaceOptions,\n\ttype StorageVersionedRead,\n\ttype VersionedStorageBackend,\n\ttype WebStorageLike,\n\twebStorageBackend,\n} from \"./backend.js\";\nexport {\n\tassertChangeEnvelope,\n\ttype ChangeEnvelope,\n\ttype ChangeEnvelopeOptions,\n\ttype ChangeLifecycle,\n\tchangeEnvelopeCodec,\n\tenvelopeChange,\n\tnowNs,\n\ttype StorageTimestampNs,\n} from \"./change.js\";\nexport {\n\tassertStrictJsonObject,\n\tassertStrictJsonValue,\n\ttype Codec,\n\tjsonCodec,\n\tjsonCodecFor,\n\ttype StrictJsonObject,\n\ttype StrictJsonScalar,\n\ttype StrictJsonValue,\n\tstableJsonString,\n\tstrictJsonCodec,\n\tstrictJsonCodecFor,\n} from \"./codec.js\";\nexport {\n\ttype ContentAddressedKv,\n\ttype ContentAddressedKvOptions,\n\tContentAddressedMissError,\n\ttype ContentAddressedMode,\n\ttype ContentAddressedStorage,\n\ttype ContentAddressedStorageOptions,\n\tcontentAddressedKv,\n\tcontentAddressedStorage,\n} from \"./content-addressed.js\";\nexport {\n\tdictKv,\n\thasKvPutIfAbsent,\n\thasKvVersioned,\n\ttype KvGeneration,\n\ttype KvStorageOptions,\n\ttype KvStorageTier,\n\ttype KvVersionedRead,\n\tkvStorage,\n\tlistByPrefix,\n\tmemoryKv,\n\ttype PutIfAbsentKvStorageTier,\n\trequireKvPutIfAbsent,\n\trequireKvVersioned,\n\ttype VersionedKvStorageTier,\n} from \"./kv.js\";\nexport {\n\tassertObserveEventFrame,\n\ttype ObserveEventFrame,\n\ttype ObserveEventLogPage,\n\tobserveEventFrame,\n\tobserveEventFrameCodec,\n\treadObserveEventLogPage,\n} from \"./observe-event-log.js\";\nexport {\n\tassertReactiveCollectionChangeFrame,\n\tassertReactiveCollectionSnapshotFrame,\n\tcollectionSnapshotKey,\n\ttype LoadReactiveCollectionStateOptions,\n\tloadReactiveIndexState,\n\tloadReactiveListState,\n\tloadReactiveLogState,\n\tloadReactiveMapState,\n\tREACTIVE_COLLECTION_CHANGE_FORMAT,\n\tREACTIVE_COLLECTION_FRAME_VERSION,\n\tREACTIVE_COLLECTION_SNAPSHOT_FORMAT,\n\ttype ReactiveCollectionChangeFrame,\n\ttype ReactiveCollectionRestoreState,\n\ttype ReactiveCollectionSnapshotFrame,\n\ttype ReactiveCollectionStorageKind,\n\ttype ReactiveIndexRestoreState,\n\ttype ReactiveListRestoreState,\n\ttype ReactiveLogRestoreState,\n\ttype ReactiveMapRestoreState,\n\treactiveCollectionChangeFrame,\n\treactiveCollectionChangeFrameCodec,\n\treactiveCollectionSnapshotFrame,\n\treactiveCollectionSnapshotFrameCodec,\n} from \"./reactive-collection.js\";\nexport {\n\ttype ReadThroughErrorContext,\n\ttype ReadThroughLookupFact,\n\ttype ReadThroughLookupTier,\n\ttype ReadThroughMissContext,\n\ttype ReadThroughPromotionFact,\n\treadThroughKv,\n\ttype TieredReadThroughOptions,\n\ttype TieredReadThroughResult,\n\ttieredReadThrough,\n} from \"./read-through.js\";\nexport {\n\tassertDecimalIntegerString,\n\tassertNonNegativeDecimalIntegerString,\n\tbigIntToDecimalString,\n\tbigIntToNonNegativeDecimalString,\n\ttype DecimalIntegerString,\n\tdecimalStringToBigInt,\n\tisDecimalIntegerString,\n\tisNonNegativeDecimalIntegerString,\n\ttype NonNegativeDecimalIntegerString,\n\tnonNegativeDecimalStringToBigInt,\n} from \"./scalar.js\";\nexport {\n\tassertWalFrame,\n\tverifyWalFrameChecksum,\n\tWAL_FORMAT_VERSION,\n\tWAL_FRAME_SEQ_PAD,\n\tWAL_KEY_SEGMENT,\n\ttype WalFrame,\n\ttype WalFrameBody,\n\ttype WalFrameOptions,\n\ttype WalFrameTimestampNs,\n\twalFrame,\n\twalFrameChecksum,\n\twalFrameCodec,\n\twalFrameKey,\n\twalFramePrefix,\n} from \"./wal.js\";\n","/**\n * Byte storage backends (D82): passive adapter-owned storage, no graph methods.\n */\n\nconst HEX_TABLE = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, \"0\"));\nconst NAMESPACE_SEPARATOR = \"\\u0000\";\n\nfunction cloneBytes(bytes: Uint8Array): Uint8Array {\n\treturn Uint8Array.from(bytes);\n}\n\nfunction encodeNamespacePrefix(namespace: string): string {\n\treturn namespace.length > 0 ? `${namespace}${NAMESPACE_SEPARATOR}` : \"\";\n}\n\nfunction encodeBytesToHex(bytes: Uint8Array): string {\n\tlet out = \"\";\n\tfor (const byte of bytes) out += HEX_TABLE[byte];\n\treturn out;\n}\n\nfunction decodeHexToBytes(raw: string): Uint8Array {\n\tif (raw.length % 2 !== 0 || !/^[0-9a-f]*$/i.test(raw)) {\n\t\tthrow new TypeError(\"webStorageBackend: malformed stored bytes\");\n\t}\n\tconst out = new Uint8Array(raw.length / 2);\n\tfor (let i = 0; i < raw.length; i += 2) {\n\t\tconst value = Number.parseInt(raw.slice(i, i + 2), 16);\n\t\tif (Number.isNaN(value)) throw new TypeError(\"webStorageBackend: malformed stored bytes\");\n\t\tout[i / 2] = value;\n\t}\n\treturn out;\n}\n\nfunction validateLogicalKey(label: string, key: string): string {\n\tif (typeof key !== \"string\") {\n\t\tthrow new TypeError(`${label}: key must be a string`);\n\t}\n\tif (key.includes(NAMESPACE_SEPARATOR)) {\n\t\tthrow new TypeError(`${label}: key must not contain U+0000`);\n\t}\n\treturn key;\n}\n\nfunction validateListPrefix(label: string, prefix: string): string {\n\tif (typeof prefix !== \"string\") {\n\t\tthrow new TypeError(`${label}: list prefix must be a string`);\n\t}\n\tif (prefix.includes(NAMESPACE_SEPARATOR)) {\n\t\tthrow new TypeError(`${label}: list prefix must not contain U+0000`);\n\t}\n\treturn prefix;\n}\n\nfunction validateNamespace(label: string, namespace: string): string {\n\tif (typeof namespace !== \"string\") {\n\t\tthrow new TypeError(`${label}: namespace must be a string`);\n\t}\n\tif (namespace.includes(NAMESPACE_SEPARATOR)) {\n\t\tthrow new TypeError(`${label}: namespace must not contain U+0000`);\n\t}\n\treturn namespace;\n}\n\n/** Passive byte-addressed backend used by D82 storage binding tiers. */\nexport interface StorageBackend {\n\tget(key: string): undefined | Uint8Array | PromiseLike<undefined | Uint8Array>;\n\tput(key: string, value: Uint8Array): void | PromiseLike<void>;\n\tputIfAbsent?(key: string, value: Uint8Array): boolean | PromiseLike<boolean>;\n\tgetVersioned?(key: string): StorageVersionedRead | PromiseLike<StorageVersionedRead>;\n\tsetIfMatch?(\n\t\tkey: string,\n\t\tvalue: Uint8Array,\n\t\tgeneration: StorageGeneration,\n\t): boolean | PromiseLike<boolean>;\n\tdelete?(key: string): void | PromiseLike<void>;\n\tlist?(prefix?: string): readonly string[] | PromiseLike<readonly string[]>;\n}\n\n/** Passive D85 conditional-create capability for multi-writer storage helpers. */\nexport interface PutIfAbsentStorageBackend extends StorageBackend {\n\tputIfAbsent(key: string, value: Uint8Array): boolean | PromiseLike<boolean>;\n}\n\n/** Opaque D108 per-key generation token for passive storage versioned reads. */\nexport type StorageGeneration = unknown;\n\n/** D108 versioned byte read result with explicit present/absent observations. */\nexport type StorageVersionedRead =\n\t| {\n\t\t\treadonly kind: \"hit\";\n\t\t\treadonly value: Uint8Array;\n\t\t\treadonly generation: StorageGeneration;\n\t }\n\t| {\n\t\t\treadonly kind: \"miss\";\n\t\t\treadonly generation: StorageGeneration;\n\t };\n\n/** Passive D108 versioned read + generation-conditional set capability. */\nexport interface VersionedStorageBackend extends StorageBackend {\n\tgetVersioned(key: string): StorageVersionedRead | PromiseLike<StorageVersionedRead>;\n\tsetIfMatch(\n\t\tkey: string,\n\t\tvalue: Uint8Array,\n\t\tgeneration: StorageGeneration,\n\t): boolean | PromiseLike<boolean>;\n}\n\n/** Runtime guard for D85 conditional-create capable byte backends. */\nexport function hasStoragePutIfAbsent(\n\tbackend: StorageBackend,\n): backend is PutIfAbsentStorageBackend {\n\treturn typeof backend.putIfAbsent === \"function\";\n}\n\n/** Require D85 conditional-create support and produce a clear adapter error when absent. */\nexport function requireStoragePutIfAbsent(\n\tbackend: StorageBackend,\n\tlabel = \"storage backend\",\n): PutIfAbsentStorageBackend {\n\tif (!hasStoragePutIfAbsent(backend)) {\n\t\tthrow new Error(`${label}: backend does not support putIfAbsent`);\n\t}\n\treturn backend;\n}\n\n/** Runtime guard for D108 versioned byte backends. */\nexport function hasStorageVersioned(backend: StorageBackend): backend is VersionedStorageBackend {\n\treturn typeof backend.getVersioned === \"function\" && typeof backend.setIfMatch === \"function\";\n}\n\n/** Require D108 versioned support and produce a clear adapter error when absent. */\nexport function requireStorageVersioned(\n\tbackend: StorageBackend,\n\tlabel = \"storage backend\",\n): VersionedStorageBackend {\n\tif (!hasStorageVersioned(backend)) {\n\t\tthrow new Error(`${label}: backend does not support versioned get/set-if-match`);\n\t}\n\treturn backend;\n}\n\n/** Browser/storage-adapter shape for deterministic byte helpers (DOM-free for portability). */\nexport interface WebStorageLike {\n\treadonly length?: number;\n\tgetItem(key: string): string | null | undefined;\n\tsetItem(key: string, value: string): void;\n\tremoveItem(key: string): void;\n\tkey?(index: number): string | null | undefined;\n\tkeys?(): readonly string[];\n}\n\n/** Storage helper options for namespace isolation and logical-key prefixing. */\nexport interface StorageNamespaceOptions {\n\t/**\n\t * Optional namespace for logical keys.\n\t *\n\t * Namespace is part of key mapping only and is not returned from `list()`.\n\t */\n\tnamespace?: string;\n}\n\nfunction toStorageKey(namespace: string, key: string): string {\n\treturn `${encodeNamespacePrefix(namespace)}${key}`;\n}\n\nfunction enumerateStorageKeys(storage: WebStorageLike): readonly unknown[] {\n\tif (storage.keys) return [...storage.keys()];\n\tif (typeof storage.key === \"function\" && typeof storage.length === \"number\") {\n\t\tconst keys: string[] = [];\n\t\tfor (let i = 0; i < storage.length; i += 1) {\n\t\t\tconst key = storage.key(i);\n\t\t\tif (key !== null && key !== undefined) keys.push(key);\n\t\t}\n\t\treturn keys;\n\t}\n\tconst fallback = storage as unknown as Readonly<Record<string, unknown>>;\n\treturn Object.keys(fallback).filter((key) => typeof fallback[key] === \"string\");\n}\n\nfunction decodeStorageListKey(namespace: string, rawKey: unknown): string | undefined {\n\tif (typeof rawKey !== \"string\") {\n\t\tthrow new TypeError(\"webStorageBackend: stored key must be a string\");\n\t}\n\tconst prefix = encodeNamespacePrefix(namespace);\n\tif (!rawKey.startsWith(prefix)) return undefined;\n\tconst logical = rawKey.slice(prefix.length);\n\tif (logical.includes(NAMESPACE_SEPARATOR)) {\n\t\tthrow new TypeError(\"webStorageBackend: malformed stored key\");\n\t}\n\treturn logical;\n}\n\nfunction listByPrefix(namespace: string, prefix: string, raw: readonly unknown[]): string[] {\n\tconst out: string[] = [];\n\tfor (const key of raw) {\n\t\tconst logical = decodeStorageListKey(namespace, key);\n\t\tif (logical === undefined) continue;\n\t\tif (!logical.startsWith(prefix)) continue;\n\t\tout.push(logical);\n\t}\n\tout.sort();\n\treturn out;\n}\n\n/** Build a deterministic byte backend backed by a browser-like key/value store (D103/D82). */\nexport function webStorageBackend(\n\tstorage: WebStorageLike,\n\topts: StorageNamespaceOptions = {},\n): StorageBackend {\n\tconst namespace =\n\t\topts.namespace === undefined ? \"\" : validateNamespace(\"webStorageBackend\", opts.namespace);\n\treturn {\n\t\tget(key) {\n\t\t\tconst raw = storage.getItem(\n\t\t\t\ttoStorageKey(namespace, validateLogicalKey(\"webStorageBackend\", key)),\n\t\t\t);\n\t\t\tif (raw === null || raw === undefined) return undefined;\n\t\t\treturn decodeHexToBytes(raw);\n\t\t},\n\t\tput(key, value) {\n\t\t\tstorage.setItem(\n\t\t\t\ttoStorageKey(namespace, validateLogicalKey(\"webStorageBackend\", key)),\n\t\t\t\tencodeBytesToHex(cloneBytes(value)),\n\t\t\t);\n\t\t},\n\t\tdelete(key) {\n\t\t\tstorage.removeItem(toStorageKey(namespace, validateLogicalKey(\"webStorageBackend\", key)));\n\t\t},\n\t\tlist(prefix = \"\") {\n\t\t\treturn listByPrefix(\n\t\t\t\tnamespace,\n\t\t\t\tvalidateListPrefix(\"webStorageBackend\", prefix),\n\t\t\t\tenumerateStorageKeys(storage),\n\t\t\t);\n\t\t},\n\t};\n}\n\n/** In-memory backend for tests, adapters, and lightweight local storage. */\nexport interface MemoryBackend extends StorageBackend {\n\treadonly entries: ReadonlyMap<string, Uint8Array>;\n\tclear(): void;\n}\n\nconst MEMORY_GENERATION = Symbol(\"graphrefly.memoryBackend.generation\");\n\ninterface MemoryGeneration {\n\treadonly [MEMORY_GENERATION]: readonly [epoch: number, key: string, version: number];\n}\n\nfunction memoryGeneration(epoch: number, key: string, version: number): MemoryGeneration {\n\treturn Object.freeze({ [MEMORY_GENERATION]: Object.freeze([epoch, key, version] as const) });\n}\n\nfunction readMemoryGeneration(\n\tgeneration: StorageGeneration,\n): readonly [epoch: number, key: string, version: number] | undefined {\n\tif (typeof generation !== \"object\" || generation === null) return undefined;\n\tconst maybe = generation as Partial<MemoryGeneration>;\n\tconst token = maybe[MEMORY_GENERATION];\n\tif (\n\t\tArray.isArray(token) &&\n\t\ttoken.length === 3 &&\n\t\ttypeof token[0] === \"number\" &&\n\t\ttypeof token[1] === \"string\" &&\n\t\ttypeof token[2] === \"number\"\n\t) {\n\t\treturn token as readonly [number, string, number];\n\t}\n\treturn undefined;\n}\n\n/** Create a byte-cloning in-memory backend. */\nexport function memoryBackend(\n\tinitial: Iterable<readonly [string, Uint8Array]> = [],\n): MemoryBackend {\n\tconst entries = new Map<string, Uint8Array>();\n\tconst versions = new Map<string, number>();\n\tlet epoch = 0;\n\tfor (const [key, value] of initial) {\n\t\tentries.set(validateLogicalKey(\"memoryBackend\", key), cloneBytes(value));\n\t}\n\tconst versionOf = (key: string): number => versions.get(key) ?? 0;\n\tconst bump = (key: string): void => {\n\t\tversions.set(key, versionOf(key) + 1);\n\t};\n\treturn {\n\t\tentries,\n\t\tget(key) {\n\t\t\tconst value = entries.get(validateLogicalKey(\"memoryBackend\", key));\n\t\t\treturn value === undefined ? undefined : cloneBytes(value);\n\t\t},\n\t\tput(key, value) {\n\t\t\tvalidateLogicalKey(\"memoryBackend\", key);\n\t\t\tentries.set(key, cloneBytes(value));\n\t\t\tbump(key);\n\t\t},\n\t\tputIfAbsent(key, value) {\n\t\t\tvalidateLogicalKey(\"memoryBackend\", key);\n\t\t\tif (entries.has(key)) return false;\n\t\t\tentries.set(key, cloneBytes(value));\n\t\t\tbump(key);\n\t\t\treturn true;\n\t\t},\n\t\tgetVersioned(key) {\n\t\t\tvalidateLogicalKey(\"memoryBackend\", key);\n\t\t\tconst value = entries.get(key);\n\t\t\tconst generation = memoryGeneration(epoch, key, versionOf(key));\n\t\t\tif (value === undefined) return { kind: \"miss\", generation };\n\t\t\treturn { kind: \"hit\", value: cloneBytes(value), generation };\n\t\t},\n\t\tsetIfMatch(key, value, generation) {\n\t\t\tvalidateLogicalKey(\"memoryBackend\", key);\n\t\t\tconst observed = readMemoryGeneration(generation);\n\t\t\tif (\n\t\t\t\tobserved === undefined ||\n\t\t\t\tobserved[0] !== epoch ||\n\t\t\t\tobserved[1] !== key ||\n\t\t\t\tobserved[2] !== versionOf(key)\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tentries.set(key, cloneBytes(value));\n\t\t\tbump(key);\n\t\t\treturn true;\n\t\t},\n\t\tdelete(key) {\n\t\t\tvalidateLogicalKey(\"memoryBackend\", key);\n\t\t\tif (entries.delete(key)) bump(key);\n\t\t},\n\t\tlist(prefix = \"\") {\n\t\t\tconst validatedPrefix = validateListPrefix(\"memoryBackend\", prefix);\n\t\t\treturn [...entries.keys()].filter((key) => key.startsWith(validatedPrefix)).sort();\n\t\t},\n\t\tclear() {\n\t\t\tentries.clear();\n\t\t\tversions.clear();\n\t\t\tepoch += 1;\n\t\t},\n\t};\n}\n","/**\n * Neutral JSON/encoding utilities (D96).\n *\n * Shared by graph checkpoints and storage bindings; neither layer owns the strict JSON\n * scanner/canonicalization contract.\n */\n\n/** Typed byte codec for D82 storage binding helpers and D96 shared JSON surfaces. */\nexport interface Codec<T> {\n\tencode(value: T): Uint8Array;\n\tdecode(bytes: Uint8Array): T;\n}\n\nexport type StrictJsonScalar = null | boolean | number | string;\nexport type StrictJsonValue =\n\t| StrictJsonScalar\n\t| readonly StrictJsonValue[]\n\t| { readonly [key: string]: StrictJsonValue };\nexport type StrictJsonObject = Readonly<Record<string, StrictJsonValue>>;\n\ntype JsonValue = StrictJsonValue;\n\nconst JS_MIN_NORMAL_NUMBER = 2 ** -1022;\n\nfunction assertStableJsonNumber(value: number, path: string): void {\n\tif (!Number.isFinite(value)) {\n\t\tthrow new TypeError(`stableJsonString: non-finite number at ${path}`);\n\t}\n}\n\nfunction assertStrictJsonNumber(value: number, path: string): void {\n\tassertStableJsonNumber(value, path);\n\tif (Object.is(value, -0)) {\n\t\tthrow new TypeError(`stableJsonString: non-canonical number at ${path}`);\n\t}\n\tconst abs = Math.abs(value);\n\tif (abs > 0 && abs < JS_MIN_NORMAL_NUMBER) {\n\t\tthrow new TypeError(`stableJsonString: subnormal number at ${path}`);\n\t}\n\tif (Number.isInteger(value) && !Number.isSafeInteger(value)) {\n\t\tthrow new TypeError(`stableJsonString: integer outside safe range at ${path}`);\n\t}\n}\n\nfunction sortedJsonValue(\n\tvalue: unknown,\n\tseen = new Set<object>(),\n\tpath = \"$\",\n\tstrictNumbers = false,\n): JsonValue {\n\tif (value === null) return null;\n\tif (typeof value === \"string\" || typeof value === \"boolean\") return value;\n\tif (typeof value === \"number\") {\n\t\tif (strictNumbers) assertStrictJsonNumber(value, path);\n\t\telse assertStableJsonNumber(value, path);\n\t\treturn value;\n\t}\n\tif (typeof value !== \"object\") {\n\t\tthrow new TypeError(`stableJsonString: value at ${path} is not JSON-encodable`);\n\t}\n\tif (seen.has(value)) throw new TypeError(`stableJsonString: circular reference at ${path}`);\n\tconst proto = Object.getPrototypeOf(value);\n\tif (!Array.isArray(value) && proto !== Object.prototype && proto !== null) {\n\t\tthrow new TypeError(`stableJsonString: non-plain object at ${path}`);\n\t}\n\tseen.add(value);\n\ttry {\n\t\tif (Array.isArray(value)) {\n\t\t\tif (Object.getOwnPropertySymbols(value).length > 0) {\n\t\t\t\tthrow new TypeError(`stableJsonString: symbol-keyed properties at ${path}`);\n\t\t\t}\n\t\t\tfor (const key of Object.getOwnPropertyNames(value)) {\n\t\t\t\tconst isIndex =\n\t\t\t\t\t/^(0|[1-9]\\d*)$/.test(key) &&\n\t\t\t\t\tNumber.isSafeInteger(Number(key)) &&\n\t\t\t\t\tNumber(key) < value.length;\n\t\t\t\tif (key !== \"length\" && !isIndex) {\n\t\t\t\t\tthrow new TypeError(`stableJsonString: non-index array property at ${path}.${key}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst out: JsonValue[] = [];\n\t\t\tfor (let i = 0; i < value.length; i += 1) {\n\t\t\t\tif (!(i in value)) {\n\t\t\t\t\tthrow new TypeError(`stableJsonString: sparse array hole at ${path}[${i}]`);\n\t\t\t\t}\n\t\t\t\tout.push(sortedJsonValue(value[i], seen, `${path}[${i}]`, strictNumbers));\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\t\tif (Object.getOwnPropertySymbols(value).length > 0) {\n\t\t\tthrow new TypeError(`stableJsonString: symbol-keyed properties at ${path}`);\n\t\t}\n\t\tconst out: Record<string, JsonValue> = Object.create(null);\n\t\tfor (const key of Object.keys(value as Record<string, unknown>).sort()) {\n\t\t\tout[key] = sortedJsonValue(\n\t\t\t\t(value as Record<string, unknown>)[key],\n\t\t\t\tseen,\n\t\t\t\t`${path}.${key}`,\n\t\t\t\tstrictNumbers,\n\t\t\t);\n\t\t}\n\t\treturn out;\n\t} finally {\n\t\tseen.delete(value);\n\t}\n}\n\n/** Stable JSON string: object keys sort by code-unit order for deterministic storage/checkpoint bytes. */\nexport function stableJsonString(value: unknown): string {\n\treturn JSON.stringify(sortedJsonValue(value));\n}\n\nfunction strictStableJsonString(value: unknown): string {\n\treturn JSON.stringify(sortedJsonValue(value, new Set<object>(), \"$\", true));\n}\n\n/** Build a JSON codec using stable object-key ordering. */\nexport function jsonCodecFor<T>(): Codec<T> {\n\tconst encoder = new TextEncoder();\n\tconst decoder = new TextDecoder();\n\treturn {\n\t\tencode(value: T): Uint8Array {\n\t\t\treturn encoder.encode(stableJsonString(value));\n\t\t},\n\t\tdecode(bytes: Uint8Array): T {\n\t\t\treturn JSON.parse(decoder.decode(bytes)) as T;\n\t\t},\n\t};\n}\n\n/** Default stable JSON codec for unknown values. */\nexport const jsonCodec: Codec<unknown> = jsonCodecFor<unknown>();\n\nfunction bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n\tif (a.byteLength !== b.byteLength) return false;\n\tfor (let i = 0; i < a.byteLength; i += 1) {\n\t\tif (a[i] !== b[i]) return false;\n\t}\n\treturn true;\n}\n\nfunction hasUnpairedSurrogate(value: string): boolean {\n\tfor (let i = 0; i < value.length; i += 1) {\n\t\tconst code = value.charCodeAt(i);\n\t\tif (code >= 0xd800 && code <= 0xdbff) {\n\t\t\tconst next = value.charCodeAt(i + 1);\n\t\t\tif (next >= 0xdc00 && next <= 0xdfff) {\n\t\t\t\ti += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tif (code >= 0xdc00 && code <= 0xdfff) return true;\n\t}\n\treturn false;\n}\n\nfunction assertNoUnpairedSurrogates(value: unknown, seen = new Set<object>(), path = \"$\"): void {\n\tif (typeof value === \"string\") {\n\t\tif (hasUnpairedSurrogate(value)) {\n\t\t\tthrow new TypeError(`strictJsonCodec: unpaired surrogate at ${path}`);\n\t\t}\n\t\treturn;\n\t}\n\tif (value === null || typeof value !== \"object\") return;\n\tif (seen.has(value)) return;\n\tseen.add(value);\n\ttry {\n\t\tif (Array.isArray(value)) {\n\t\t\tfor (let i = 0; i < value.length; i += 1) {\n\t\t\t\tassertNoUnpairedSurrogates(value[i], seen, `${path}[${i}]`);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tfor (const key of Object.keys(value as Record<string, unknown>)) {\n\t\t\tif (hasUnpairedSurrogate(key)) {\n\t\t\t\tthrow new TypeError(`strictJsonCodec: unpaired surrogate at ${path}.${key}`);\n\t\t\t}\n\t\t\tassertNoUnpairedSurrogates((value as Record<string, unknown>)[key], seen, `${path}.${key}`);\n\t\t}\n\t} finally {\n\t\tseen.delete(value);\n\t}\n}\n\nfunction assertNoDuplicateJsonObjectKeys(text: string): void {\n\tlet index = 0;\n\n\tfunction fail(message: string): never {\n\t\tthrow new TypeError(`strictJsonCodec: ${message}`);\n\t}\n\n\tfunction skipWhitespace(): void {\n\t\twhile (/\\s/.test(text[index] ?? \"\")) index += 1;\n\t}\n\n\tfunction readJsonString(): string {\n\t\tconst start = index;\n\t\tindex += 1;\n\t\twhile (index < text.length) {\n\t\t\tconst ch = text[index];\n\t\t\tif (ch === '\"') {\n\t\t\t\tindex += 1;\n\t\t\t\ttry {\n\t\t\t\t\treturn JSON.parse(text.slice(start, index)) as string;\n\t\t\t\t} catch {\n\t\t\t\t\tfail(\"malformed JSON string\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (ch === \"\\\\\") {\n\t\t\t\tindex += 2;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tindex += 1;\n\t\t}\n\t\tfail(\"unterminated JSON string\");\n\t}\n\n\tfunction consumeLiteral(literal: string): void {\n\t\tif (text.slice(index, index + literal.length) !== literal) {\n\t\t\tfail(`malformed JSON near byte ${index}`);\n\t\t}\n\t\tindex += literal.length;\n\t}\n\n\tfunction consumeNumber(): void {\n\t\tconst match = /^-?(0|[1-9]\\d*)(\\.\\d+)?([eE][+-]?\\d+)?/.exec(text.slice(index));\n\t\tif (!match) fail(`malformed JSON number near byte ${index}`);\n\t\tindex += match[0].length;\n\t}\n\n\tfunction parseValue(path: string): void {\n\t\tskipWhitespace();\n\t\tconst ch = text[index];\n\t\tif (ch === \"{\") {\n\t\t\tparseObject(path);\n\t\t\treturn;\n\t\t}\n\t\tif (ch === \"[\") {\n\t\t\tparseArray(path);\n\t\t\treturn;\n\t\t}\n\t\tif (ch === '\"') {\n\t\t\treadJsonString();\n\t\t\treturn;\n\t\t}\n\t\tif (ch === \"t\") {\n\t\t\tconsumeLiteral(\"true\");\n\t\t\treturn;\n\t\t}\n\t\tif (ch === \"f\") {\n\t\t\tconsumeLiteral(\"false\");\n\t\t\treturn;\n\t\t}\n\t\tif (ch === \"n\") {\n\t\t\tconsumeLiteral(\"null\");\n\t\t\treturn;\n\t\t}\n\t\tif (ch === \"-\" || (ch !== undefined && ch >= \"0\" && ch <= \"9\")) {\n\t\t\tconsumeNumber();\n\t\t\treturn;\n\t\t}\n\t\tfail(`malformed JSON near byte ${index}`);\n\t}\n\n\tfunction parseObject(path: string): void {\n\t\tconst keys = new Set<string>();\n\t\tindex += 1;\n\t\tskipWhitespace();\n\t\tif (text[index] === \"}\") {\n\t\t\tindex += 1;\n\t\t\treturn;\n\t\t}\n\t\twhile (index < text.length) {\n\t\t\tskipWhitespace();\n\t\t\tif (text[index] !== '\"') fail(`expected object key near byte ${index}`);\n\t\t\tconst key = readJsonString();\n\t\t\tif (keys.has(key)) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`strictJsonCodec: duplicate object key ${JSON.stringify(key)} at ${path}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tkeys.add(key);\n\t\t\tskipWhitespace();\n\t\t\tif (text[index] !== \":\") fail(`expected ':' after object key near byte ${index}`);\n\t\t\tindex += 1;\n\t\t\tparseValue(`${path}.${key}`);\n\t\t\tskipWhitespace();\n\t\t\tif (text[index] === \",\") {\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (text[index] === \"}\") {\n\t\t\t\tindex += 1;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfail(`expected ',' or '}' near byte ${index}`);\n\t\t}\n\t\tfail(\"unterminated JSON object\");\n\t}\n\n\tfunction parseArray(path: string): void {\n\t\tindex += 1;\n\t\tskipWhitespace();\n\t\tif (text[index] === \"]\") {\n\t\t\tindex += 1;\n\t\t\treturn;\n\t\t}\n\t\tlet item = 0;\n\t\twhile (index < text.length) {\n\t\t\tparseValue(`${path}[${item}]`);\n\t\t\titem += 1;\n\t\t\tskipWhitespace();\n\t\t\tif (text[index] === \",\") {\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (text[index] === \"]\") {\n\t\t\t\tindex += 1;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfail(`expected ',' or ']' near byte ${index}`);\n\t\t}\n\t\tfail(\"unterminated JSON array\");\n\t}\n\n\tparseValue(\"$\");\n\tskipWhitespace();\n\tif (index !== text.length) fail(`trailing JSON token near byte ${index}`);\n}\n\n/**\n * Build a strict canonical JSON codec (D84/D87/D96).\n * The strict surface rejects malformed UTF-8, duplicate object keys, non-canonical bytes,\n * unpaired surrogates, and values that cannot round-trip through stable JSON.\n */\nexport function strictJsonCodecFor<T>(): Codec<T> {\n\tconst encoder = new TextEncoder();\n\tconst decoder = new TextDecoder(\"utf-8\", { fatal: true });\n\treturn {\n\t\tencode(value: T): Uint8Array {\n\t\t\tassertNoUnpairedSurrogates(value);\n\t\t\treturn encoder.encode(strictStableJsonString(value));\n\t\t},\n\t\tdecode(bytes: Uint8Array): T {\n\t\t\tconst text = decoder.decode(bytes);\n\t\t\tassertNoDuplicateJsonObjectKeys(text);\n\t\t\tconst decoded = JSON.parse(text) as unknown;\n\t\t\tassertNoUnpairedSurrogates(decoded);\n\t\t\tconst canonical = encoder.encode(strictStableJsonString(decoded));\n\t\t\tif (!bytesEqual(bytes, canonical)) {\n\t\t\t\tthrow new TypeError(\"strictJsonCodec: bytes are not canonical stable JSON\");\n\t\t\t}\n\t\t\treturn decoded as T;\n\t\t},\n\t};\n}\n\n/** Default strict canonical JSON codec for unknown values. */\nexport const strictJsonCodec: Codec<unknown> = strictJsonCodecFor<unknown>();\n\n/** D113 neutral helper for strict canonical JSON UTF-8 bytes. */\nexport function strictCanonicalJsonBytes(value: unknown): Uint8Array {\n\treturn strictJsonCodec.encode(value);\n}\n\n/** Validate and normalize a host value into strict canonical JSON data. */\nexport function assertStrictJsonValue(value: unknown, label = \"strictJsonValue\"): StrictJsonValue {\n\ttry {\n\t\treturn strictJsonCodec.decode(strictJsonCodec.encode(value)) as StrictJsonValue;\n\t} catch (cause) {\n\t\tconst message = cause instanceof Error ? cause.message : String(cause);\n\t\tthrow new TypeError(`${label}: value is not strict JSON compatible: ${message}`, { cause });\n\t}\n}\n\n/** Validate and normalize a host value into a strict canonical JSON object. */\nexport function assertStrictJsonObject(\n\tvalue: unknown,\n\tlabel = \"strictJsonObject\",\n): StrictJsonObject {\n\tconst normalized = assertStrictJsonValue(value, label);\n\tif (normalized === null || typeof normalized !== \"object\" || Array.isArray(normalized)) {\n\t\tthrow new TypeError(`${label}: value must be a strict JSON object`);\n\t}\n\treturn normalized as StrictJsonObject;\n}\n","import {\n\thasStoragePutIfAbsent,\n\thasStorageVersioned,\n\tmemoryBackend,\n\ttype StorageBackend,\n\ttype StorageGeneration,\n} from \"./backend.js\";\nimport type { Codec } from \"./codec.js\";\nimport { jsonCodecFor } from \"./codec.js\";\n\n/** Codec-backed key/value tier over a passive byte backend (D82). */\nexport interface KvStorageTier<T = unknown> {\n\tget(key: string): Promise<T | undefined>;\n\tset(key: string, value: T): Promise<void>;\n\tputIfAbsent?(key: string, value: T): Promise<boolean>;\n\tgetVersioned?(key: string): Promise<KvVersionedRead<T>>;\n\tsetIfMatch?(key: string, value: T, generation: StorageGeneration): Promise<boolean>;\n\tdelete(key: string): Promise<void>;\n\tlist(prefix?: string): Promise<readonly string[]>;\n}\n\n/** Typed D85 conditional-create capability over a KV tier. */\nexport interface PutIfAbsentKvStorageTier<T = unknown> extends KvStorageTier<T> {\n\tputIfAbsent(key: string, value: T): Promise<boolean>;\n}\n\n/** Opaque D108 per-key generation token for typed KV versioned reads. */\nexport type KvGeneration = StorageGeneration;\n\n/** D108 versioned typed read result with explicit present/absent observations. */\nexport type KvVersionedRead<T> =\n\t| {\n\t\t\treadonly kind: \"hit\";\n\t\t\treadonly value: T;\n\t\t\treadonly generation: KvGeneration;\n\t }\n\t| {\n\t\t\treadonly kind: \"miss\";\n\t\t\treadonly generation: KvGeneration;\n\t };\n\n/** Typed D108 versioned read + generation-conditional set capability over a KV tier. */\nexport interface VersionedKvStorageTier<T = unknown> extends KvStorageTier<T> {\n\tgetVersioned(key: string): Promise<KvVersionedRead<T>>;\n\tsetIfMatch(key: string, value: T, generation: KvGeneration): Promise<boolean>;\n}\n\n/** Runtime guard for typed KV tiers that expose D85 conditional create. */\nexport function hasKvPutIfAbsent<T>(tier: KvStorageTier<T>): tier is PutIfAbsentKvStorageTier<T> {\n\treturn typeof tier.putIfAbsent === \"function\";\n}\n\n/** Require D85 conditional-create support and produce a clear adapter error when absent. */\nexport function requireKvPutIfAbsent<T>(\n\ttier: KvStorageTier<T>,\n\tlabel = \"kvStorage\",\n): PutIfAbsentKvStorageTier<T> {\n\tif (!hasKvPutIfAbsent(tier)) {\n\t\tthrow new Error(`${label}: KV tier does not support putIfAbsent`);\n\t}\n\treturn tier;\n}\n\n/** Runtime guard for typed KV tiers that expose D108 versioned read/set-if-match. */\nexport function hasKvVersioned<T>(tier: KvStorageTier<T>): tier is VersionedKvStorageTier<T> {\n\treturn typeof tier.getVersioned === \"function\" && typeof tier.setIfMatch === \"function\";\n}\n\n/** Require D108 versioned KV support and produce a clear adapter error when absent. */\nexport function requireKvVersioned<T>(\n\ttier: KvStorageTier<T>,\n\tlabel = \"kvStorage\",\n): VersionedKvStorageTier<T> {\n\tif (!hasKvVersioned(tier)) {\n\t\tthrow new Error(`${label}: KV tier does not support versioned get/set-if-match`);\n\t}\n\treturn tier;\n}\n\n/** Options for wrapping a byte backend as a typed KV tier. */\nexport interface KvStorageOptions<T> {\n\tbackend: StorageBackend;\n\tcodec?: Codec<T>;\n}\n\nfunction defer<T>(fn: () => T | PromiseLike<T>): Promise<T> {\n\treturn Promise.resolve().then(fn);\n}\n\n/** Build a typed KV tier from a byte backend and codec. */\nexport function kvStorage<T = unknown>(opts: KvStorageOptions<T>): KvStorageTier<T> {\n\tconst codec = opts.codec ?? jsonCodecFor<T>();\n\tconst { backend } = opts;\n\tconst tier: KvStorageTier<T> = {\n\t\tget(key) {\n\t\t\treturn defer(() => backend.get(key)).then((bytes) =>\n\t\t\t\tbytes === undefined ? undefined : codec.decode(bytes),\n\t\t\t);\n\t\t},\n\t\tset(key, value) {\n\t\t\treturn defer(() => backend.put(key, codec.encode(value))).then(() => undefined);\n\t\t},\n\t\tdelete(key) {\n\t\t\treturn defer(() => backend.delete?.(key)).then(() => undefined);\n\t\t},\n\t\tlist(prefix = \"\") {\n\t\t\treturn defer(() => {\n\t\t\t\tif (!backend.list) throw new Error(\"kvStorage.list: backend does not support listing\");\n\t\t\t\treturn backend.list(prefix);\n\t\t\t}).then((keys) => [...keys].sort());\n\t\t},\n\t};\n\tlet out = tier;\n\tif (hasStoragePutIfAbsent(backend)) {\n\t\tout = {\n\t\t\t...out,\n\t\t\tputIfAbsent(key, value) {\n\t\t\t\treturn defer(() => backend.putIfAbsent(key, codec.encode(value)));\n\t\t\t},\n\t\t};\n\t}\n\tif (hasStorageVersioned(backend)) {\n\t\tout = {\n\t\t\t...out,\n\t\t\tgetVersioned(key) {\n\t\t\t\treturn defer(() => backend.getVersioned(key)).then((result) => {\n\t\t\t\t\tif (result.kind === \"miss\") return { kind: \"miss\", generation: result.generation };\n\t\t\t\t\treturn {\n\t\t\t\t\t\tkind: \"hit\",\n\t\t\t\t\t\tvalue: codec.decode(result.value),\n\t\t\t\t\t\tgeneration: result.generation,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t},\n\t\t\tsetIfMatch(key, value, generation) {\n\t\t\t\treturn defer(() => backend.setIfMatch(key, codec.encode(value), generation));\n\t\t\t},\n\t\t};\n\t}\n\treturn out;\n}\n\n/** Create an in-memory typed KV tier. */\nexport function memoryKv<T = unknown>(codec: Codec<T> = jsonCodecFor<T>()): KvStorageTier<T> {\n\treturn kvStorage({ backend: memoryBackend(), codec });\n}\n\n/** Create an in-memory typed KV tier preloaded from a record. */\nexport function dictKv<T = unknown>(\n\tentries: Record<string, T> = {},\n\tcodec: Codec<T> = jsonCodecFor<T>(),\n): KvStorageTier<T> {\n\tconst backend = memoryBackend();\n\tconst kv = kvStorage({ backend, codec });\n\tfor (const [key, value] of Object.entries(entries)) {\n\t\tbackend.put(key, codec.encode(value as T));\n\t}\n\treturn kv;\n}\n\n/** Convenience wrapper for deterministic prefix listing. */\nexport function listByPrefix<T>(tier: KvStorageTier<T>, prefix = \"\"): Promise<readonly string[]> {\n\treturn tier.list(prefix);\n}\n","import type { KvStorageTier } from \"./kv.js\";\nimport { memoryKv, requireKvPutIfAbsent } from \"./kv.js\";\n\nexport const APPEND_LOG_SEQ_PAD = 20;\n\n/** One append-log record with its storage key and monotonic sequence. */\nexport interface AppendLogEntry<T> {\n\treadonly key: string;\n\treadonly seq: number;\n\treadonly value: T;\n}\n\n/** Cursor and page-size options for append-log reads. */\nexport interface AppendLogReadOptions {\n\t/** Return entries with seq > after. */\n\tafter?: number;\n\tlimit?: number;\n}\n\n/** One bounded append-log page with the cursor for the next read. */\nexport interface AppendLogPage<T> {\n\treadonly entries: readonly AppendLogEntry<T>[];\n\treadonly nextAfter: number;\n\treadonly done: boolean;\n}\n\n/**\n * Append-only tier for durable event/change logs (D82), not graph restore replay.\n *\n * This first-cut helper serializes operations within one handle. Concurrent writers sharing the\n * same KV prefix need an external single-writer discipline or a future CAS-capable backend.\n */\nexport interface AppendLogStorageTier<T = unknown> {\n\tappend(value: T): Promise<AppendLogEntry<T>>;\n\tread(opts?: AppendLogReadOptions): Promise<readonly AppendLogEntry<T>[]>;\n\ttruncateAfter(seq: number): Promise<void>;\n\tsize(): Promise<number>;\n}\n\n/** D85 multi-writer append log; requires a passive conditional-create KV capability. */\nexport type MultiWriterAppendLogStorageTier<T = unknown> = AppendLogStorageTier<T>;\n\n/** Build the deterministic storage key for an append-log sequence number. */\nexport function appendLogKey(prefix: string, seq: number): string {\n\tif (!Number.isSafeInteger(seq) || seq < 0) {\n\t\tthrow new RangeError(`appendLogKey: seq must be a non-negative safe integer, got ${seq}`);\n\t}\n\treturn `${prefix}/${seq.toString().padStart(APPEND_LOG_SEQ_PAD, \"0\")}`;\n}\n\nfunction seqFromKey(prefix: string, key: string): number {\n\tconst head = `${prefix}/`;\n\tif (!key.startsWith(head)) throw new Error(`append log key outside prefix: ${key}`);\n\tconst raw = key.slice(head.length);\n\tif (!/^\\d+$/.test(raw)) {\n\t\tthrow new Error(`append log key has a non-numeric sequence: ${key}`);\n\t}\n\tif (raw.length !== APPEND_LOG_SEQ_PAD) {\n\t\tthrow new Error(`append log key sequence must be ${APPEND_LOG_SEQ_PAD} padded digits: ${key}`);\n\t}\n\tconst seq = Number(raw);\n\tif (!Number.isSafeInteger(seq)) {\n\t\tthrow new Error(`append log key sequence is outside the safe integer range: ${key}`);\n\t}\n\treturn seq;\n}\n\nfunction nextSeqFromKeys(prefix: string, keys: readonly string[]): number {\n\tif (keys.length === 0) return 0;\n\tconst next = Math.max(...keys.map((key) => seqFromKey(prefix, key))) + 1;\n\tif (!Number.isSafeInteger(next)) {\n\t\tthrow new RangeError(`append log next sequence is outside the safe integer range: ${prefix}`);\n\t}\n\treturn next;\n}\n\nfunction sizeFromKeys(prefix: string, keys: readonly string[]): number {\n\tfor (const key of keys) seqFromKey(prefix, key);\n\treturn keys.length;\n}\n\nfunction validateReadOptions(opts: AppendLogReadOptions): {\n\tafter: number;\n\tlimit: number;\n} {\n\tconst after = opts.after ?? -1;\n\tconst limit = opts.limit ?? Number.POSITIVE_INFINITY;\n\tif (!Number.isSafeInteger(after) || after < -1) {\n\t\tthrow new RangeError(\n\t\t\t`appendLogStorage.read: after must be an integer cursor >= -1, got ${after}`,\n\t\t);\n\t}\n\tif (limit !== Number.POSITIVE_INFINITY && (!Number.isSafeInteger(limit) || limit < 0)) {\n\t\tthrow new RangeError(\n\t\t\t`appendLogStorage.read: limit must be a non-negative safe integer or Infinity, got ${limit}`,\n\t\t);\n\t}\n\treturn { after, limit };\n}\n\nfunction validatePageLimit(limit: number): number {\n\tif (!Number.isSafeInteger(limit) || limit < 1) {\n\t\tthrow new RangeError(`readAppendLogPage: limit must be a positive safe integer, got ${limit}`);\n\t}\n\tif (limit >= Number.MAX_SAFE_INTEGER) {\n\t\tthrow new RangeError(\"readAppendLogPage: limit must leave room for one lookahead entry\");\n\t}\n\treturn limit;\n}\n\nfunction readAppendLogEntries<T>(\n\tkv: KvStorageTier<T>,\n\tprefix: string,\n\topts: AppendLogReadOptions,\n): Promise<readonly AppendLogEntry<T>[]> {\n\tconst { after, limit } = validateReadOptions(opts);\n\treturn kv.list(`${prefix}/`).then((listed) => {\n\t\tconst keys = listed\n\t\t\t.map((key) => ({ key, seq: seqFromKey(prefix, key) }))\n\t\t\t.filter(({ seq }) => seq > after)\n\t\t\t.sort((a, b) => a.seq - b.seq)\n\t\t\t.slice(0, limit);\n\t\treturn Promise.all(\n\t\t\tkeys.map(\n\t\t\t\t({ key, seq }): Promise<AppendLogEntry<T> | undefined> =>\n\t\t\t\t\tkv.get(key).then((value) => {\n\t\t\t\t\t\tif (value === undefined) {\n\t\t\t\t\t\t\tthrow new Error(`append log listed key is missing: ${key}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { key, seq, value };\n\t\t\t\t\t}),\n\t\t\t),\n\t\t).then((entries) => {\n\t\t\tconst out: AppendLogEntry<T>[] = [];\n\t\t\tfor (const entry of entries) if (entry !== undefined) out.push(entry);\n\t\t\treturn out;\n\t\t});\n\t});\n}\n\n/** Read one ordered append-log page without assigning replay or restore semantics. */\nexport function readAppendLogPage<T>(\n\tlog: AppendLogStorageTier<T>,\n\topts: AppendLogReadOptions = {},\n): Promise<AppendLogPage<T>> {\n\tconst { after, limit } = validateReadOptions({ after: opts.after, limit: opts.limit ?? 100 });\n\tconst pageLimit = validatePageLimit(limit);\n\treturn log.read({ after, limit: pageLimit + 1 }).then((entries) => {\n\t\tconst visible = entries.slice(0, pageLimit);\n\t\tconst last = visible[visible.length - 1];\n\t\treturn {\n\t\t\tentries: visible,\n\t\t\tnextAfter: last?.seq ?? after,\n\t\t\tdone: entries.length <= pageLimit,\n\t\t};\n\t});\n}\n\nfunction deleteAppendLogEntriesAfter<T>(\n\tkv: KvStorageTier<T>,\n\tprefix: string,\n\tseq: number,\n): Promise<void> {\n\treturn kv\n\t\t.list(`${prefix}/`)\n\t\t.then((keys) =>\n\t\t\tPromise.all(keys.filter((key) => seqFromKey(prefix, key) > seq).map((key) => kv.delete(key))),\n\t\t)\n\t\t.then(() => kv.list(`${prefix}/`))\n\t\t.then(() => undefined);\n}\n\n/** Options for a typed append log over a KV tier. */\nexport interface AppendLogOptions<T> {\n\tkv: KvStorageTier<T>;\n\tprefix?: string;\n}\n\n/** Options for D85 multi-writer append logs over conditional-create capable KV. */\nexport interface MultiWriterAppendLogOptions<T> extends AppendLogOptions<T> {\n\t/** Bound retry work before refreshing the listed tail after another writer wins slots. */\n\tmaxAttempts?: number;\n}\n\n/**\n * Build a single-writer append-only log over a KV tier, serializing all operations in call order\n * for this handle. D85 multi-handle concurrent appends require multiWriterAppendLogStorage.\n */\nexport function appendLogStorage<T = unknown>(opts: AppendLogOptions<T>): AppendLogStorageTier<T> {\n\tconst { kv, prefix = \"event-log\" } = opts;\n\tlet tail: Promise<unknown> = Promise.resolve();\n\n\tfunction initNextSeq(): Promise<number> {\n\t\treturn kv.list(`${prefix}/`).then((keys) => {\n\t\t\treturn nextSeqFromKeys(prefix, keys);\n\t\t});\n\t}\n\n\tfunction enqueue<R>(task: () => Promise<R>): Promise<R> {\n\t\tconst run = tail.then(task, task);\n\t\ttail = run.then(\n\t\t\t() => undefined,\n\t\t\t() => undefined,\n\t\t);\n\t\treturn run;\n\t}\n\n\treturn {\n\t\tappend(value) {\n\t\t\treturn enqueue(() =>\n\t\t\t\tinitNextSeq().then((seq) => {\n\t\t\t\t\tconst key = appendLogKey(prefix, seq);\n\t\t\t\t\treturn kv.set(key, value).then(() => {\n\t\t\t\t\t\treturn { key, seq, value };\n\t\t\t\t\t});\n\t\t\t\t}),\n\t\t\t);\n\t\t},\n\t\tread(opts = {}) {\n\t\t\treturn enqueue(() => readAppendLogEntries(kv, prefix, opts));\n\t\t},\n\t\ttruncateAfter(seq) {\n\t\t\treturn enqueue(() => deleteAppendLogEntriesAfter(kv, prefix, seq));\n\t\t},\n\t\tsize() {\n\t\t\treturn enqueue(() => kv.list(`${prefix}/`).then((keys) => sizeFromKeys(prefix, keys)));\n\t\t},\n\t};\n}\n\n/**\n * Build a D85 multi-writer append log over a conditional-create capable KV tier.\n *\n * Sequence allocation is passive storage work: each writer proposes a padded key and retries the\n * next key when another writer already created that slot. This does not provide general CAS,\n * locks, leases, transactions, unsafe truncation, WAL replay, or graph restore semantics.\n */\nexport function multiWriterAppendLogStorage<T = unknown>(\n\topts: MultiWriterAppendLogOptions<T>,\n): MultiWriterAppendLogStorageTier<T> {\n\tconst { kv, prefix = \"event-log\", maxAttempts = 1024 } = opts;\n\tconst capableKv = requireKvPutIfAbsent(kv, \"multiWriterAppendLogStorage\");\n\tlet tail: Promise<unknown> = Promise.resolve();\n\n\tif (!Number.isSafeInteger(maxAttempts) || maxAttempts < 1) {\n\t\tthrow new RangeError(\n\t\t\t`multiWriterAppendLogStorage: maxAttempts must be a positive safe integer, got ${maxAttempts}`,\n\t\t);\n\t}\n\n\tfunction initNextSeq(): Promise<number> {\n\t\treturn kv.list(`${prefix}/`).then((keys) => nextSeqFromKeys(prefix, keys));\n\t}\n\n\tfunction enqueue<R>(task: () => Promise<R>): Promise<R> {\n\t\tconst run = tail.then(task, task);\n\t\ttail = run.then(\n\t\t\t() => undefined,\n\t\t\t() => undefined,\n\t\t);\n\t\treturn run;\n\t}\n\n\treturn {\n\t\tappend(value) {\n\t\t\treturn enqueue(() =>\n\t\t\t\tinitNextSeq().then((startSeq) => {\n\t\t\t\t\tlet seq = startSeq;\n\t\t\t\t\tlet attempt = 0;\n\t\t\t\t\tconst tryNext = (): Promise<AppendLogEntry<T>> => {\n\t\t\t\t\t\tif (attempt >= maxAttempts) {\n\t\t\t\t\t\t\treturn initNextSeq().then((refreshedSeq) => {\n\t\t\t\t\t\t\t\tseq = Math.max(seq, refreshedSeq);\n\t\t\t\t\t\t\t\tattempt = 0;\n\t\t\t\t\t\t\t\treturn tryNext();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tattempt += 1;\n\t\t\t\t\t\tconst key = appendLogKey(prefix, seq);\n\t\t\t\t\t\treturn capableKv.putIfAbsent(key, value).then((created) => {\n\t\t\t\t\t\t\tif (created) return { key, seq, value };\n\t\t\t\t\t\t\tseq += 1;\n\t\t\t\t\t\t\tif (!Number.isSafeInteger(seq)) {\n\t\t\t\t\t\t\t\tthrow new RangeError(\n\t\t\t\t\t\t\t\t\t`append log next sequence is outside the safe integer range: ${prefix}`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn tryNext();\n\t\t\t\t\t\t});\n\t\t\t\t\t};\n\t\t\t\t\treturn tryNext();\n\t\t\t\t}),\n\t\t\t);\n\t\t},\n\t\tread(opts = {}) {\n\t\t\treturn enqueue(() => readAppendLogEntries(kv, prefix, opts));\n\t\t},\n\t\ttruncateAfter(seq) {\n\t\t\treturn enqueue(() => {\n\t\t\t\tif (!Number.isSafeInteger(seq) || seq < -1) {\n\t\t\t\t\tthrow new RangeError(\n\t\t\t\t\t\t`multiWriterAppendLogStorage.truncateAfter: seq must be an integer cursor >= -1, got ${seq}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"multiWriterAppendLogStorage.truncateAfter: unsupported without a stronger compaction capability\",\n\t\t\t\t);\n\t\t\t});\n\t\t},\n\t\tsize() {\n\t\t\treturn enqueue(() => kv.list(`${prefix}/`).then((keys) => sizeFromKeys(prefix, keys)));\n\t\t},\n\t};\n}\n\n/** Create an in-memory append log. */\nexport function memoryAppendLog<T = unknown>(prefix?: string): AppendLogStorageTier<T> {\n\treturn appendLogStorage({ kv: memoryKv<T>(), prefix });\n}\n\n/** Create an in-memory D85 multi-writer append log. */\nexport function memoryMultiWriterAppendLog<T = unknown>(\n\tprefix?: string,\n): MultiWriterAppendLogStorageTier<T> {\n\treturn multiWriterAppendLogStorage({ kv: memoryKv<T>(), prefix });\n}\n","/**\n * Storage scalar helpers (D88): host BigInt in memory, canonical decimal strings on JSON/storage.\n */\n\n/** Canonical decimal integer string; no leading zeroes, and no negative zero. */\nexport type DecimalIntegerString = string;\n\n/** Canonical non-negative decimal integer string. */\nexport type NonNegativeDecimalIntegerString = DecimalIntegerString;\n\nconst DECIMAL_INTEGER_RE = /^(0|-?[1-9]\\d*)$/;\nconst NON_NEGATIVE_DECIMAL_INTEGER_RE = /^(0|[1-9]\\d*)$/;\n\n/** Test whether a value is a canonical decimal integer string. */\nexport function isDecimalIntegerString(value: unknown): value is DecimalIntegerString {\n\treturn typeof value === \"string\" && DECIMAL_INTEGER_RE.test(value);\n}\n\n/** Test whether a value is a canonical non-negative decimal integer string. */\nexport function isNonNegativeDecimalIntegerString(\n\tvalue: unknown,\n): value is NonNegativeDecimalIntegerString {\n\treturn typeof value === \"string\" && NON_NEGATIVE_DECIMAL_INTEGER_RE.test(value);\n}\n\n/** Assert a canonical decimal integer string and return it typed. */\nexport function assertDecimalIntegerString(\n\tvalue: unknown,\n\tlabel = \"decimal integer\",\n): DecimalIntegerString {\n\tif (!isDecimalIntegerString(value)) {\n\t\tthrow new TypeError(`${label} must be a canonical decimal integer string`);\n\t}\n\treturn value;\n}\n\n/** Assert a canonical non-negative decimal integer string and return it typed. */\nexport function assertNonNegativeDecimalIntegerString(\n\tvalue: unknown,\n\tlabel = \"decimal integer\",\n): NonNegativeDecimalIntegerString {\n\tif (!isNonNegativeDecimalIntegerString(value)) {\n\t\tthrow new TypeError(`${label} must be a canonical non-negative decimal integer string`);\n\t}\n\treturn value;\n}\n\n/** Convert a host BigInt to the canonical decimal storage scalar. */\nexport function bigIntToDecimalString(value: bigint): DecimalIntegerString {\n\treturn value.toString();\n}\n\n/** Convert a non-negative host BigInt to the canonical non-negative decimal storage scalar. */\nexport function bigIntToNonNegativeDecimalString(value: bigint): NonNegativeDecimalIntegerString {\n\tif (value < 0n) {\n\t\tthrow new TypeError(\"decimal integer must be non-negative\");\n\t}\n\treturn value.toString();\n}\n\n/** Parse a canonical decimal storage scalar into host BigInt. */\nexport function decimalStringToBigInt(value: DecimalIntegerString): bigint {\n\treturn BigInt(assertDecimalIntegerString(value));\n}\n\n/** Parse a canonical non-negative decimal storage scalar into host BigInt. */\nexport function nonNegativeDecimalStringToBigInt(value: NonNegativeDecimalIntegerString): bigint {\n\treturn BigInt(assertNonNegativeDecimalIntegerString(value));\n}\n","/**\n * Storage change envelopes (D82): persistence framing for raw graph/data-structure deltas.\n */\n\nimport type { Codec } from \"./codec.js\";\nimport { strictJsonCodecFor } from \"./codec.js\";\nimport {\n\tassertNonNegativeDecimalIntegerString,\n\tbigIntToNonNegativeDecimalString,\n\ttype NonNegativeDecimalIntegerString,\n} from \"./scalar.js\";\n\n/** Storage-side lifecycle namespace for change envelopes; presentation framing only. */\nexport type ChangeLifecycle = \"spec\" | \"data\" | \"ownership\";\n\n/** D84 cross-runtime wall-clock nanosecond metadata: canonical non-negative decimal string. */\nexport type StorageTimestampNs = NonNegativeDecimalIntegerString;\n\n/** Persistence envelope for raw graph/data-structure deltas (D82), not restore semantics. */\nexport interface ChangeEnvelope<T = unknown> {\n\treadonly lifecycle: ChangeLifecycle;\n\treadonly structure: string;\n\treadonly version: number | string;\n\treadonly t_ns: StorageTimestampNs;\n\treadonly seq?: number;\n\treadonly change: T;\n}\n\n/** Options for wrapping a raw change in a storage envelope. */\nexport interface ChangeEnvelopeOptions {\n\tlifecycle?: ChangeLifecycle;\n\tstructure: string;\n\tversion?: number | string;\n\tt_ns?: StorageTimestampNs;\n\tseq?: number;\n}\n\n/** Wall-clock nanoseconds for storage metadata. */\nexport function nowNs(): StorageTimestampNs {\n\treturn bigIntToNonNegativeDecimalString(BigInt(Date.now()) * 1_000_000n);\n}\n\n/** Wrap a raw change payload in a D82 storage envelope. */\nexport function envelopeChange<T>(change: T, opts: ChangeEnvelopeOptions): ChangeEnvelope<T> {\n\tconst envelope = {\n\t\tlifecycle: opts.lifecycle ?? \"data\",\n\t\tstructure: opts.structure,\n\t\tversion: opts.version ?? 1,\n\t\tt_ns: opts.t_ns ?? nowNs(),\n\t\t...(opts.seq === undefined ? {} : { seq: opts.seq }),\n\t\tchange,\n\t};\n\treturn assertChangeEnvelope<T>(envelope);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isLifecycle(value: unknown): value is ChangeLifecycle {\n\treturn value === \"spec\" || value === \"data\" || value === \"ownership\";\n}\n\n/** Validate a decoded D82 change envelope and return it with typed payload. */\nexport function assertChangeEnvelope<T = unknown>(value: unknown): ChangeEnvelope<T> {\n\tif (!isRecord(value)) throw new TypeError(\"changeEnvelopeCodec: frame must be an object\");\n\tif (!isLifecycle(value.lifecycle)) {\n\t\tthrow new TypeError(\"changeEnvelopeCodec: lifecycle must be spec, data, or ownership\");\n\t}\n\tif (typeof value.structure !== \"string\" || value.structure.length === 0) {\n\t\tthrow new TypeError(\"changeEnvelopeCodec: structure must be a non-empty string\");\n\t}\n\tif (\n\t\t(typeof value.version !== \"number\" || !Number.isFinite(value.version)) &&\n\t\ttypeof value.version !== \"string\"\n\t) {\n\t\tthrow new TypeError(\"changeEnvelopeCodec: version must be a finite number or string\");\n\t}\n\tassertNonNegativeDecimalIntegerString(value.t_ns, \"changeEnvelopeCodec: t_ns\");\n\tif (value.seq !== undefined && (!Number.isSafeInteger(value.seq) || (value.seq as number) < 0)) {\n\t\tthrow new TypeError(\n\t\t\t\"changeEnvelopeCodec: seq must be a non-negative safe integer when present\",\n\t\t);\n\t}\n\tif (!Object.hasOwn(value, \"change\")) {\n\t\tthrow new TypeError(\"changeEnvelopeCodec: change payload is required\");\n\t}\n\treturn value as unknown as ChangeEnvelope<T>;\n}\n\n/** Stable JSON codec for D82 change envelopes, with strict framing checks. */\nexport function changeEnvelopeCodec<T = unknown>(): Codec<ChangeEnvelope<T>> {\n\tconst codec = strictJsonCodecFor<unknown>();\n\treturn {\n\t\tencode(value) {\n\t\t\treturn codec.encode(assertChangeEnvelope(value));\n\t\t},\n\t\tdecode(bytes) {\n\t\t\treturn assertChangeEnvelope<T>(codec.decode(bytes));\n\t\t},\n\t};\n}\n","import { strictCanonicalJsonBytes } from \"../json/codec.js\";\nimport type { KvStorageTier } from \"./kv.js\";\n\n/** Content-addressed KV access mode for D82 passive storage helpers. */\nexport type ContentAddressedMode = \"read\" | \"write\" | \"read-write\" | \"read-strict\";\n\n/** Error thrown when a read-strict content-addressed lookup misses. */\nexport class ContentAddressedMissError extends Error {\n\treadonly key: string;\n\treadonly context: unknown;\n\n\tconstructor(key: string, context: unknown) {\n\t\tsuper(`content-addressed lookup miss in read-strict mode: ${key}`);\n\t\tthis.name = \"ContentAddressedMissError\";\n\t\tthis.key = key;\n\t\tthis.context = context;\n\t}\n}\n\n/** Options for {@link contentAddressedKv}. */\nexport interface ContentAddressedKvOptions<Ctx, V> {\n\t/** Underlying D82 KV tier. */\n\tkv: KvStorageTier<V>;\n\t/** Select the JSON-encodable data that participates in the content key. */\n\tkeyContext?: (ctx: Ctx) => unknown;\n\t/** Optional namespace prefix for sharing one KV tier across consumers. */\n\tkeyPrefix?: string;\n\t/** Access mode. Defaults to read-write. */\n\tmode?: ContentAddressedMode;\n}\n\n/** Content-addressed helper handle over a D82 KV tier. */\nexport interface ContentAddressedKv<Ctx, V> {\n\tkeyFor(ctx: Ctx): Promise<string>;\n\tlookup(ctx: Ctx): Promise<V | undefined>;\n\tstore(ctx: Ctx, value: V): Promise<void>;\n\tforget(ctx: Ctx): Promise<void>;\n}\n\nexport type ContentAddressedStorageOptions<Ctx, V> = ContentAddressedKvOptions<Ctx, V>;\nexport type ContentAddressedStorage<Ctx, V> = ContentAddressedKv<Ctx, V>;\n\nconst SHA_256 = \"SHA-256\";\nconst HEX_TABLE = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, \"0\"));\n\nfunction bytesToHex(bytes: Uint8Array): string {\n\tlet out = \"\";\n\tfor (const byte of bytes) out += HEX_TABLE[byte];\n\treturn out;\n}\n\nfunction sha256Hex(data: Uint8Array): Promise<string> {\n\tconst digestInput = Uint8Array.from(data);\n\treturn globalThis.crypto.subtle\n\t\t.digest(SHA_256, digestInput)\n\t\t.then((buf) => bytesToHex(new Uint8Array(buf)));\n}\n\n/** Build a content-addressed helper over a D82 KV tier. */\nexport function contentAddressedKv<Ctx, V>(\n\topts: ContentAddressedKvOptions<Ctx, V>,\n): ContentAddressedKv<Ctx, V> {\n\tconst { kv, keyContext, keyPrefix, mode = \"read-write\" } = opts;\n\tconst contextForKey = keyContext ?? ((ctx: Ctx) => ctx as unknown);\n\n\tfunction keyFor(ctx: Ctx): Promise<string> {\n\t\tlet bytes: Uint8Array;\n\t\ttry {\n\t\t\tbytes = strictCanonicalJsonBytes(contextForKey(ctx));\n\t\t} catch (err) {\n\t\t\treturn Promise.resolve().then(() => {\n\t\t\t\tthrow err;\n\t\t\t});\n\t\t}\n\t\treturn Promise.resolve()\n\t\t\t.then(() => sha256Hex(bytes))\n\t\t\t.then((hex) => (keyPrefix ? `${keyPrefix}:${hex}` : hex));\n\t}\n\n\treturn {\n\t\tkeyFor,\n\t\tlookup(ctx) {\n\t\t\tif (mode === \"write\") return Promise.resolve(undefined);\n\t\t\treturn keyFor(ctx).then((key) =>\n\t\t\t\tkv.get(key).then((value) => {\n\t\t\t\t\tif (value === undefined && mode === \"read-strict\") {\n\t\t\t\t\t\tthrow new ContentAddressedMissError(key, ctx);\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}),\n\t\t\t);\n\t\t},\n\t\tstore(ctx, value) {\n\t\t\tif (mode === \"read\") return Promise.resolve();\n\t\t\treturn keyFor(ctx).then((key) => kv.set(key, value));\n\t\t},\n\t\tforget(ctx) {\n\t\t\tif (mode === \"read\" || mode === \"write\") return Promise.resolve();\n\t\t\treturn keyFor(ctx).then((key) => kv.delete(key));\n\t\t},\n\t};\n}\n\n/** Alias for consumers that name the same D82 helper by storage role rather than KV tier. */\nexport function contentAddressedStorage<Ctx, V>(\n\topts: ContentAddressedStorageOptions<Ctx, V>,\n): ContentAddressedStorage<Ctx, V> {\n\treturn contentAddressedKv(opts);\n}\n","import type { AppendLogPage, AppendLogReadOptions, AppendLogStorageTier } from \"./append-log.js\";\nimport { readAppendLogPage } from \"./append-log.js\";\nimport { assertChangeEnvelope, type ChangeEnvelope, envelopeChange } from \"./change.js\";\nimport type { Codec } from \"./codec.js\";\nimport { strictJsonCodecFor } from \"./codec.js\";\n\nexport interface ObserveEventLike {\n\treadonly seq: number;\n\treadonly path: string;\n}\n\n/** Storage frame for one Graph.observe() event, preserving graph observe sequence. */\nexport interface ObserveEventFrame<T = unknown> extends ChangeEnvelope<T> {\n\treadonly structure: \"observe-event\";\n\treadonly observeSeq: number;\n\treadonly path: string;\n\treadonly stream?: string;\n}\n\n/** One ordered observe-event log page. It is not graph projection or restore replay. */\nexport type ObserveEventLogPage<T = unknown> = AppendLogPage<ObserveEventFrame<T>>;\n\n/** Create a storage frame from one observe event and mapped payload. */\nexport function observeEventFrame<T>(\n\tevent: ObserveEventLike,\n\tvalue: T,\n\topts: { stream?: string } = {},\n): ObserveEventFrame<T> {\n\treturn {\n\t\t...envelopeChange(value, {\n\t\t\tlifecycle: \"data\",\n\t\t\tstructure: \"observe-event\",\n\t\t\tversion: 1,\n\t\t\tseq: event.seq,\n\t\t}),\n\t\tstructure: \"observe-event\",\n\t\tobserveSeq: event.seq,\n\t\tpath: event.path,\n\t\t...(opts.stream === undefined ? {} : { stream: opts.stream }),\n\t};\n}\n\n/** Validate a decoded D82 observe-event storage frame. */\nexport function assertObserveEventFrame<T = unknown>(value: unknown): ObserveEventFrame<T> {\n\tconst frame = assertChangeEnvelope<T>(value);\n\tconst record = frame as unknown as Record<string, unknown>;\n\tif (frame.structure !== \"observe-event\") {\n\t\tthrow new TypeError(\"observeEventFrameCodec: structure must be observe-event\");\n\t}\n\tif (!Number.isSafeInteger(record.observeSeq) || (record.observeSeq as number) < 0) {\n\t\tthrow new TypeError(\"observeEventFrameCodec: observeSeq must be a non-negative safe integer\");\n\t}\n\tif (typeof record.path !== \"string\") {\n\t\tthrow new TypeError(\"observeEventFrameCodec: path must be a string\");\n\t}\n\tif (record.stream !== undefined && typeof record.stream !== \"string\") {\n\t\tthrow new TypeError(\"observeEventFrameCodec: stream must be a string when present\");\n\t}\n\treturn frame as ObserveEventFrame<T>;\n}\n\n/** Stable JSON codec for D82 observe-event frames, not restore records. */\nexport function observeEventFrameCodec<T = unknown>(): Codec<ObserveEventFrame<T>> {\n\tconst codec = strictJsonCodecFor<unknown>();\n\treturn {\n\t\tencode(value) {\n\t\t\treturn codec.encode(assertObserveEventFrame(value));\n\t\t},\n\t\tdecode(bytes) {\n\t\t\treturn assertObserveEventFrame<T>(codec.decode(bytes));\n\t\t},\n\t};\n}\n\n/**\n * Read one ordered observe-event log page without projecting it into graph state.\n */\nexport function readObserveEventLogPage<T = unknown>(\n\tlog: AppendLogStorageTier<ObserveEventFrame<T>>,\n\topts: AppendLogReadOptions = {},\n): Promise<ObserveEventLogPage<T>> {\n\treturn readAppendLogPage(log, opts);\n}\n","import type {\n\tIndexChange,\n\tListChange,\n\tLogChange,\n\tMapChange,\n} from \"../graph/data-structures/change.js\";\nimport type { IndexRow } from \"../graph/data-structures/reactive-index.js\";\nimport { strictCanonicalJsonBytes, strictJsonCodecFor } from \"../json/codec.js\";\nimport type { AppendLogStorageTier } from \"./append-log.js\";\nimport type { Codec } from \"./codec.js\";\nimport type { KvStorageTier } from \"./kv.js\";\n\n/** D161 strict-JSON snapshot frame format tag for reactive collection persistence. */\nexport const REACTIVE_COLLECTION_SNAPSHOT_FORMAT =\n\t\"graphrefly.reactive-collection.snapshot.v1\" as const;\n/** D161 strict-JSON change frame format tag for reactive collection persistence. */\nexport const REACTIVE_COLLECTION_CHANGE_FORMAT =\n\t\"graphrefly.reactive-collection.change.v1\" as const;\n/** D161 v1 frame version for reactive collection snapshot/change storage. */\nexport const REACTIVE_COLLECTION_FRAME_VERSION = 1 as const;\n\n/** D161 collection kinds recognized by the unified persistence frame envelope. */\nexport type ReactiveCollectionStorageKind =\n\t| \"reactiveList\"\n\t| \"reactiveLog\"\n\t| \"reactiveMap\"\n\t| \"reactiveIndex\";\n\n/** D161 durable baseline frame; storage is passive and does not own graph restore. */\nexport interface ReactiveCollectionSnapshotFrame<\n\tK extends ReactiveCollectionStorageKind = ReactiveCollectionStorageKind,\n\tS = unknown,\n> {\n\treadonly format: typeof REACTIVE_COLLECTION_SNAPSHOT_FORMAT;\n\treadonly version: typeof REACTIVE_COLLECTION_FRAME_VERSION;\n\treadonly kind: K;\n\t/** Last append-log seq reflected by this snapshot; -1 means no change-log entry. */\n\treadonly changeCursor: number;\n\treadonly snapshot: S;\n}\n\n/** D161 append-log change frame; change-log replay is collection-state folding, not graph restore. */\nexport interface ReactiveCollectionChangeFrame<\n\tK extends ReactiveCollectionStorageKind = ReactiveCollectionStorageKind,\n\tC = unknown,\n> {\n\treadonly format: typeof REACTIVE_COLLECTION_CHANGE_FORMAT;\n\treadonly version: typeof REACTIVE_COLLECTION_FRAME_VERSION;\n\treadonly kind: K;\n\treadonly change: C;\n}\n\n/** D161 passive load/fold result consumed by synchronous restoreReactive* helpers. */\nexport interface ReactiveCollectionRestoreState<\n\tK extends ReactiveCollectionStorageKind = ReactiveCollectionStorageKind,\n\tS = unknown,\n> {\n\treadonly kind: K;\n\treadonly state: S;\n\treadonly source: \"empty\" | \"changes\" | \"snapshot\" | \"snapshot+changes\";\n\treadonly snapshot: { readonly found: boolean; readonly changeCursor: number };\n\treadonly changes: { readonly applied: number; readonly cursor: number };\n}\n\n/** D161 restore state for a reactiveList materialized as a strict-JSON array snapshot. */\nexport type ReactiveListRestoreState<T = unknown> = ReactiveCollectionRestoreState<\n\t\"reactiveList\",\n\treadonly T[]\n>;\n\n/** D161 restore state for a reactiveLog materialized as a strict-JSON array snapshot. */\nexport type ReactiveLogRestoreState<T = unknown> = ReactiveCollectionRestoreState<\n\t\"reactiveLog\",\n\treadonly T[]\n>;\n\n/** D161 passive restore-state shape for reactiveMap; policy-aware restore remains deferred. */\nexport type ReactiveMapRestoreState<K = unknown, V = unknown> = ReactiveCollectionRestoreState<\n\t\"reactiveMap\",\n\treadonly (readonly [K, V])[]\n>;\n\n/** D161 passive restore-state shape for reactiveIndex; key-codec restore remains deferred. */\nexport type ReactiveIndexRestoreState<K = unknown, V = unknown> = ReactiveCollectionRestoreState<\n\t\"reactiveIndex\",\n\treadonly IndexRow<K, V>[]\n>;\n\n/** D161 passive storage inputs for collection load/fold helpers. */\nexport interface LoadReactiveCollectionStateOptions {\n\treadonly snapshotStore: KvStorageTier<unknown>;\n\treadonly snapshotKey?: string;\n\treadonly storagePrefix?: string;\n\treadonly changeLog?: AppendLogStorageTier<unknown>;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction ownKeys(value: Record<string, unknown>): readonly string[] {\n\treturn Object.keys(value).sort();\n}\n\nfunction assertKeys(\n\tvalue: Record<string, unknown>,\n\texpected: readonly string[],\n\tlabel: string,\n): void {\n\tconst actual = ownKeys(value);\n\tconst want = [...expected].sort();\n\tif (actual.length !== want.length || actual.some((key, i) => key !== want[i])) {\n\t\tthrow new TypeError(`${label}: unexpected frame fields ${actual.join(\",\")}`);\n\t}\n}\n\nfunction assertSafeInteger(value: unknown, label: string, min = 0): number {\n\tif (!Number.isSafeInteger(value) || (value as number) < min) {\n\t\tthrow new TypeError(`${label} must be a safe integer >= ${min}`);\n\t}\n\treturn value as number;\n}\n\nfunction assertKind<K extends ReactiveCollectionStorageKind>(\n\tvalue: unknown,\n\texpected: K,\n\tlabel: string,\n): K {\n\tif (value !== expected) throw new TypeError(`${label}: kind must be ${expected}`);\n\treturn expected;\n}\n\nfunction assertArray<T = unknown>(value: unknown, label: string): readonly T[] {\n\tif (!Array.isArray(value)) throw new TypeError(`${label}: snapshot must be an array`);\n\treturn value as readonly T[];\n}\n\nfunction strictJsonIdentity(value: unknown): string {\n\treturn Array.from(strictCanonicalJsonBytes(value)).join(\",\");\n}\n\nfunction assertEntryArray<K = unknown, V = unknown>(\n\tvalue: unknown,\n\tlabel: string,\n): readonly (readonly [K, V])[] {\n\tconst entries = assertArray<unknown>(value, label);\n\tconst seen = new Set<string>();\n\tfor (const [i, entry] of entries.entries()) {\n\t\tif (!Array.isArray(entry) || entry.length !== 2) {\n\t\t\tthrow new TypeError(`${label}: entry ${i} must be [key,value]`);\n\t\t}\n\t\tconst key = strictJsonIdentity(entry[0]);\n\t\tif (seen.has(key)) throw new TypeError(`${label}: entry ${i} duplicates an earlier key`);\n\t\tseen.add(key);\n\t}\n\treturn entries as readonly (readonly [K, V])[];\n}\n\nfunction assertIndexRows<K = unknown, V = unknown>(\n\tvalue: unknown,\n\tlabel: string,\n): readonly IndexRow<K, V>[] {\n\tconst rows = assertArray<unknown>(value, label);\n\tconst seen = new Set<string>();\n\tfor (const [i, row] of rows.entries()) {\n\t\tif (!isRecord(row)) throw new TypeError(`${label}: row ${i} must be an object`);\n\t\tassertKeys(row, [\"primary\", \"secondary\", \"value\"], `${label} row`);\n\t\tconst primary = strictJsonIdentity(row.primary);\n\t\tif (seen.has(primary)) {\n\t\t\tthrow new TypeError(`${label}: row ${i} duplicates an earlier primary`);\n\t\t}\n\t\tseen.add(primary);\n\t}\n\treturn rows as readonly IndexRow<K, V>[];\n}\n\n/** Build the default D161 snapshot key for a storage prefix. */\nexport function collectionSnapshotKey(storagePrefix = \"reactive-collection\"): string {\n\tif (storagePrefix.length === 0) throw new TypeError(\"storagePrefix must be non-empty\");\n\treturn `${storagePrefix}/snapshot`;\n}\n\n/** Build a D161 strict-JSON snapshot frame before validation/encoding. */\nexport function reactiveCollectionSnapshotFrame<K extends ReactiveCollectionStorageKind, S>(\n\tkind: K,\n\tsnapshot: S,\n\topts: { readonly changeCursor?: number } = {},\n): ReactiveCollectionSnapshotFrame<K, S> {\n\tconst changeCursor = opts.changeCursor ?? -1;\n\tif (!Number.isSafeInteger(changeCursor) || changeCursor < -1) {\n\t\tthrow new RangeError(\"reactive collection snapshot changeCursor must be a safe integer >= -1\");\n\t}\n\treturn {\n\t\tformat: REACTIVE_COLLECTION_SNAPSHOT_FORMAT,\n\t\tversion: REACTIVE_COLLECTION_FRAME_VERSION,\n\t\tkind,\n\t\tchangeCursor,\n\t\tsnapshot,\n\t};\n}\n\n/** Build a D161 strict-JSON change frame before validation/encoding. */\nexport function reactiveCollectionChangeFrame<K extends ReactiveCollectionStorageKind, C>(\n\tkind: K,\n\tchange: C,\n): ReactiveCollectionChangeFrame<K, C> {\n\treturn {\n\t\tformat: REACTIVE_COLLECTION_CHANGE_FORMAT,\n\t\tversion: REACTIVE_COLLECTION_FRAME_VERSION,\n\t\tkind,\n\t\tchange,\n\t};\n}\n\n/** Validate a D161 snapshot frame and reject non-strict-JSON payloads honestly. */\nexport function assertReactiveCollectionSnapshotFrame<\n\tK extends ReactiveCollectionStorageKind,\n\tS = unknown,\n>(value: unknown, expectedKind: K): ReactiveCollectionSnapshotFrame<K, S> {\n\tif (!isRecord(value)) throw new TypeError(\"reactive collection snapshot frame must be an object\");\n\tassertKeys(value, [\"changeCursor\", \"format\", \"kind\", \"snapshot\", \"version\"], \"snapshot frame\");\n\tif (value.format !== REACTIVE_COLLECTION_SNAPSHOT_FORMAT) {\n\t\tthrow new TypeError(\"snapshot frame: invalid format\");\n\t}\n\tif (value.version !== REACTIVE_COLLECTION_FRAME_VERSION) {\n\t\tthrow new TypeError(\"snapshot frame: invalid version\");\n\t}\n\tassertKind(value.kind, expectedKind, \"snapshot frame\");\n\tassertSafeInteger(value.changeCursor, \"snapshot frame changeCursor\", -1);\n\tstrictJsonCodecFor<unknown>().encode(value);\n\treturn value as unknown as ReactiveCollectionSnapshotFrame<K, S>;\n}\n\n/** Validate a D161 change frame and reject non-strict-JSON payloads honestly. */\nexport function assertReactiveCollectionChangeFrame<\n\tK extends ReactiveCollectionStorageKind,\n\tC = unknown,\n>(value: unknown, expectedKind: K): ReactiveCollectionChangeFrame<K, C> {\n\tif (!isRecord(value)) throw new TypeError(\"reactive collection change frame must be an object\");\n\tassertKeys(value, [\"change\", \"format\", \"kind\", \"version\"], \"change frame\");\n\tif (value.format !== REACTIVE_COLLECTION_CHANGE_FORMAT) {\n\t\tthrow new TypeError(\"change frame: invalid format\");\n\t}\n\tif (value.version !== REACTIVE_COLLECTION_FRAME_VERSION) {\n\t\tthrow new TypeError(\"change frame: invalid version\");\n\t}\n\tassertKind(value.kind, expectedKind, \"change frame\");\n\tif (!Object.hasOwn(value, \"change\")) throw new TypeError(\"change frame: change is required\");\n\tstrictJsonCodecFor<unknown>().encode(value);\n\treturn value as unknown as ReactiveCollectionChangeFrame<K, C>;\n}\n\n/** Codec for D161 snapshot frames with strict JSON validation on both encode and decode. */\nexport function reactiveCollectionSnapshotFrameCodec<\n\tK extends ReactiveCollectionStorageKind,\n\tS = unknown,\n>(kind: K): Codec<ReactiveCollectionSnapshotFrame<K, S>> {\n\tconst codec = strictJsonCodecFor<unknown>();\n\treturn {\n\t\tencode(value) {\n\t\t\treturn codec.encode(assertReactiveCollectionSnapshotFrame<K, S>(value, kind));\n\t\t},\n\t\tdecode(bytes) {\n\t\t\treturn assertReactiveCollectionSnapshotFrame<K, S>(codec.decode(bytes), kind);\n\t\t},\n\t};\n}\n\n/** Codec for D161 change frames with strict JSON validation on both encode and decode. */\nexport function reactiveCollectionChangeFrameCodec<\n\tK extends ReactiveCollectionStorageKind,\n\tC = unknown,\n>(kind: K): Codec<ReactiveCollectionChangeFrame<K, C>> {\n\tconst codec = strictJsonCodecFor<unknown>();\n\treturn {\n\t\tencode(value) {\n\t\t\treturn codec.encode(assertReactiveCollectionChangeFrame<K, C>(value, kind));\n\t\t},\n\t\tdecode(bytes) {\n\t\t\treturn assertReactiveCollectionChangeFrame<K, C>(codec.decode(bytes), kind);\n\t\t},\n\t};\n}\n\nfunction assertListChange<T>(value: unknown): ListChange<T> {\n\tif (!isRecord(value) || typeof value.kind !== \"string\") {\n\t\tthrow new TypeError(\"reactiveList change must be an object with kind\");\n\t}\n\tswitch (value.kind) {\n\t\tcase \"append\":\n\t\t\tif (!Object.hasOwn(value, \"value\")) throw new TypeError(\"reactiveList append.value required\");\n\t\t\tassertKeys(value, [\"kind\", \"value\"], \"reactiveList append\");\n\t\t\treturn value as unknown as ListChange<T>;\n\t\tcase \"appendMany\":\n\t\t\tassertKeys(value, [\"kind\", \"values\"], \"reactiveList appendMany\");\n\t\t\tassertArray<T>(value.values, \"reactiveList appendMany.values\");\n\t\t\treturn value as unknown as ListChange<T>;\n\t\tcase \"insert\":\n\t\t\tassertKeys(value, [\"index\", \"kind\", \"value\"], \"reactiveList insert\");\n\t\t\tassertSafeInteger(value.index, \"reactiveList insert.index\", 0);\n\t\t\treturn value as unknown as ListChange<T>;\n\t\tcase \"insertMany\":\n\t\t\tassertKeys(value, [\"index\", \"kind\", \"values\"], \"reactiveList insertMany\");\n\t\t\tassertSafeInteger(value.index, \"reactiveList insertMany.index\", 0);\n\t\t\tassertArray<T>(value.values, \"reactiveList insertMany.values\");\n\t\t\treturn value as unknown as ListChange<T>;\n\t\tcase \"pop\":\n\t\t\tassertKeys(value, [\"index\", \"kind\", \"value\"], \"reactiveList pop\");\n\t\t\tassertSafeInteger(value.index, \"reactiveList pop.index\", 0);\n\t\t\treturn value as unknown as ListChange<T>;\n\t\tcase \"trimHead\":\n\t\t\tassertKeys(value, [\"kind\", \"n\"], \"reactiveList trimHead\");\n\t\t\tassertSafeInteger(value.n, \"reactiveList trimHead.n\", 0);\n\t\t\treturn value as unknown as ListChange<T>;\n\t\tcase \"clear\":\n\t\t\tassertKeys(value, [\"count\", \"kind\"], \"reactiveList clear\");\n\t\t\tassertSafeInteger(value.count, \"reactiveList clear.count\", 0);\n\t\t\treturn value as unknown as ListChange<T>;\n\t\tdefault:\n\t\t\tthrow new TypeError(`unsupported reactiveList change kind ${value.kind}`);\n\t}\n}\n\nfunction assertLogChange<T>(value: unknown): LogChange<T> {\n\tif (!isRecord(value) || typeof value.kind !== \"string\") {\n\t\tthrow new TypeError(\"reactiveLog change must be an object with kind\");\n\t}\n\tswitch (value.kind) {\n\t\tcase \"append\":\n\t\t\tif (!Object.hasOwn(value, \"value\")) throw new TypeError(\"reactiveLog append.value required\");\n\t\t\tassertKeys(value, [\"kind\", \"value\"], \"reactiveLog append\");\n\t\t\treturn value as unknown as LogChange<T>;\n\t\tcase \"appendMany\":\n\t\t\tassertKeys(value, [\"kind\", \"values\"], \"reactiveLog appendMany\");\n\t\t\tassertArray<T>(value.values, \"reactiveLog appendMany.values\");\n\t\t\treturn value as unknown as LogChange<T>;\n\t\tcase \"trimHead\":\n\t\t\tassertKeys(value, [\"kind\", \"n\"], \"reactiveLog trimHead\");\n\t\t\tassertSafeInteger(value.n, \"reactiveLog trimHead.n\", 0);\n\t\t\treturn value as unknown as LogChange<T>;\n\t\tcase \"clear\":\n\t\t\tassertKeys(value, [\"count\", \"kind\"], \"reactiveLog clear\");\n\t\t\tassertSafeInteger(value.count, \"reactiveLog clear.count\", 0);\n\t\t\treturn value as unknown as LogChange<T>;\n\t\tdefault:\n\t\t\tthrow new TypeError(`unsupported reactiveLog change kind ${value.kind}`);\n\t}\n}\n\nfunction assertMapChange<K, V>(value: unknown): MapChange<K, V> {\n\tif (!isRecord(value) || typeof value.kind !== \"string\") {\n\t\tthrow new TypeError(\"reactiveMap change must be an object with kind\");\n\t}\n\tswitch (value.kind) {\n\t\tcase \"set\":\n\t\t\tif (!Object.hasOwn(value, \"key\")) throw new TypeError(\"reactiveMap set.key required\");\n\t\t\tif (!Object.hasOwn(value, \"value\")) throw new TypeError(\"reactiveMap set.value required\");\n\t\t\tassertKeys(value, [\"key\", \"kind\", \"value\"], \"reactiveMap set\");\n\t\t\treturn value as unknown as MapChange<K, V>;\n\t\tcase \"delete\":\n\t\t\tif (!Object.hasOwn(value, \"key\")) throw new TypeError(\"reactiveMap delete.key required\");\n\t\t\tif (!Object.hasOwn(value, \"previous\")) {\n\t\t\t\tthrow new TypeError(\"reactiveMap delete.previous required\");\n\t\t\t}\n\t\t\tassertKeys(value, [\"key\", \"kind\", \"previous\", \"reason\"], \"reactiveMap delete\");\n\t\t\tif (\n\t\t\t\tvalue.reason !== \"expired\" &&\n\t\t\t\tvalue.reason !== \"lru-evict\" &&\n\t\t\t\tvalue.reason !== \"archived\" &&\n\t\t\t\tvalue.reason !== \"explicit\"\n\t\t\t) {\n\t\t\t\tthrow new TypeError(\"reactiveMap delete.reason is invalid\");\n\t\t\t}\n\t\t\treturn value as unknown as MapChange<K, V>;\n\t\tcase \"clear\":\n\t\t\tassertKeys(value, [\"count\", \"kind\"], \"reactiveMap clear\");\n\t\t\tassertSafeInteger(value.count, \"reactiveMap clear.count\", 0);\n\t\t\treturn value as unknown as MapChange<K, V>;\n\t\tdefault:\n\t\t\tthrow new TypeError(`unsupported reactiveMap change kind ${value.kind}`);\n\t}\n}\n\nfunction assertIndexChange<K, V>(value: unknown): IndexChange<K, V> {\n\tif (!isRecord(value) || typeof value.kind !== \"string\") {\n\t\tthrow new TypeError(\"reactiveIndex change must be an object with kind\");\n\t}\n\tswitch (value.kind) {\n\t\tcase \"upsert\":\n\t\t\tif (!Object.hasOwn(value, \"primary\")) {\n\t\t\t\tthrow new TypeError(\"reactiveIndex upsert.primary required\");\n\t\t\t}\n\t\t\tif (!Object.hasOwn(value, \"secondary\")) {\n\t\t\t\tthrow new TypeError(\"reactiveIndex upsert.secondary required\");\n\t\t\t}\n\t\t\tif (!Object.hasOwn(value, \"value\"))\n\t\t\t\tthrow new TypeError(\"reactiveIndex upsert.value required\");\n\t\t\tassertKeys(value, [\"kind\", \"primary\", \"secondary\", \"value\"], \"reactiveIndex upsert\");\n\t\t\treturn value as unknown as IndexChange<K, V>;\n\t\tcase \"delete\":\n\t\t\tif (!Object.hasOwn(value, \"primary\")) {\n\t\t\t\tthrow new TypeError(\"reactiveIndex delete.primary required\");\n\t\t\t}\n\t\t\tassertKeys(value, [\"kind\", \"primary\"], \"reactiveIndex delete\");\n\t\t\treturn value as unknown as IndexChange<K, V>;\n\t\tcase \"deleteMany\":\n\t\t\tassertKeys(value, [\"kind\", \"primaries\"], \"reactiveIndex deleteMany\");\n\t\t\tassertArray<K>(value.primaries, \"reactiveIndex deleteMany.primaries\");\n\t\t\treturn value as unknown as IndexChange<K, V>;\n\t\tcase \"clear\":\n\t\t\tassertKeys(value, [\"count\", \"kind\"], \"reactiveIndex clear\");\n\t\t\tassertSafeInteger(value.count, \"reactiveIndex clear.count\", 0);\n\t\t\treturn value as unknown as IndexChange<K, V>;\n\t\tdefault:\n\t\t\tthrow new TypeError(`unsupported reactiveIndex change kind ${value.kind}`);\n\t}\n}\n\nfunction applyListChange<T>(state: T[], change: ListChange<T>): void {\n\tswitch (change.kind) {\n\t\tcase \"append\":\n\t\t\tstate.push(change.value);\n\t\t\treturn;\n\t\tcase \"appendMany\":\n\t\t\tstate.push(...change.values);\n\t\t\treturn;\n\t\tcase \"insert\":\n\t\t\tif (change.index > state.length)\n\t\t\t\tthrow new Error(\"reactiveList insert change is out of range\");\n\t\t\tstate.splice(change.index, 0, change.value);\n\t\t\treturn;\n\t\tcase \"insertMany\":\n\t\t\tif (change.index > state.length) {\n\t\t\t\tthrow new Error(\"reactiveList insertMany change is out of range\");\n\t\t\t}\n\t\t\tstate.splice(change.index, 0, ...change.values);\n\t\t\treturn;\n\t\tcase \"pop\":\n\t\t\tif (change.index >= state.length) throw new Error(\"reactiveList pop change is out of range\");\n\t\t\tif (!strictJsonEquals(state[change.index], change.value)) {\n\t\t\t\tthrow new Error(\"reactiveList pop change value does not match current state\");\n\t\t\t}\n\t\t\tstate.splice(change.index, 1);\n\t\t\treturn;\n\t\tcase \"trimHead\":\n\t\t\tif (change.n > state.length) throw new Error(\"reactiveList trimHead change is out of range\");\n\t\t\tstate.splice(0, change.n);\n\t\t\treturn;\n\t\tcase \"clear\":\n\t\t\tif (change.count !== state.length) {\n\t\t\t\tthrow new Error(\"reactiveList clear change count does not match current state\");\n\t\t\t}\n\t\t\tstate.length = 0;\n\t\t\treturn;\n\t}\n}\n\nfunction strictJsonEquals(a: unknown, b: unknown): boolean {\n\tconst left = strictCanonicalJsonBytes(a);\n\tconst right = strictCanonicalJsonBytes(b);\n\tif (left.byteLength !== right.byteLength) return false;\n\tfor (let i = 0; i < left.byteLength; i += 1) if (left[i] !== right[i]) return false;\n\treturn true;\n}\n\nfunction findJsonIndex<T>(\n\tvalues: readonly T[],\n\tmatch: (value: T) => unknown,\n\tkey: unknown,\n\tlabel: string,\n): number {\n\tlet found = -1;\n\tfor (let i = 0; i < values.length; i += 1) {\n\t\tif (strictJsonEquals(match(values[i] as T), key)) {\n\t\t\tif (found !== -1) throw new Error(`${label} duplicate JSON key in restore state`);\n\t\t\tfound = i;\n\t\t}\n\t}\n\treturn found;\n}\n\nfunction cmpOrd(a: unknown, b: unknown): number {\n\tif (a === b) return 0;\n\tconst ta = typeof a;\n\tif (\n\t\tta === typeof b &&\n\t\t(ta === \"number\" || ta === \"string\" || ta === \"boolean\" || ta === \"bigint\")\n\t) {\n\t\tconst ax = a as number | string | bigint | boolean;\n\t\tconst bx = b as number | string | bigint | boolean;\n\t\treturn ax < bx ? -1 : ax > bx ? 1 : 0;\n\t}\n\treturn String(a).localeCompare(String(b));\n}\n\nfunction applyLogChange<T>(state: T[], change: LogChange<T>): void {\n\tswitch (change.kind) {\n\t\tcase \"append\":\n\t\t\tstate.push(change.value);\n\t\t\treturn;\n\t\tcase \"appendMany\":\n\t\t\tstate.push(...change.values);\n\t\t\treturn;\n\t\tcase \"trimHead\":\n\t\t\tif (change.n > state.length) throw new Error(\"reactiveLog trimHead change is out of range\");\n\t\t\tstate.splice(0, change.n);\n\t\t\treturn;\n\t\tcase \"clear\":\n\t\t\tif (change.count !== state.length) {\n\t\t\t\tthrow new Error(\"reactiveLog clear change count does not match current state\");\n\t\t\t}\n\t\t\tstate.length = 0;\n\t\t\treturn;\n\t}\n}\n\nfunction applyMapChange<K, V>(state: Array<readonly [K, V]>, change: MapChange<K, V>): void {\n\tswitch (change.kind) {\n\t\tcase \"set\": {\n\t\t\tconst index = findJsonIndex(state, ([key]) => key, change.key, \"reactiveMap\");\n\t\t\tif (index === -1) state.push([change.key, change.value] as const);\n\t\t\telse state[index] = [change.key, change.value] as const;\n\t\t\treturn;\n\t\t}\n\t\tcase \"delete\": {\n\t\t\tconst index = findJsonIndex(state, ([key]) => key, change.key, \"reactiveMap\");\n\t\t\tif (index === -1) throw new Error(\"reactiveMap delete change key is missing\");\n\t\t\tif (!strictJsonEquals(state[index]?.[1], change.previous)) {\n\t\t\t\tthrow new Error(\"reactiveMap delete change previous value does not match current state\");\n\t\t\t}\n\t\t\tstate.splice(index, 1);\n\t\t\treturn;\n\t\t}\n\t\tcase \"clear\":\n\t\t\tif (change.count !== state.length) {\n\t\t\t\tthrow new Error(\"reactiveMap clear change count does not match current state\");\n\t\t\t}\n\t\t\tstate.length = 0;\n\t\t\treturn;\n\t}\n}\n\nfunction sortIndexRows<K, V>(state: Array<IndexRow<K, V>>): void {\n\tstate.sort((a, b) => {\n\t\tconst bySecondary = cmpOrd(a.secondary, b.secondary);\n\t\treturn bySecondary === 0 ? cmpOrd(a.primary, b.primary) : bySecondary;\n\t});\n}\n\nfunction applyIndexChange<K, V>(state: Array<IndexRow<K, V>>, change: IndexChange<K, V>): void {\n\tswitch (change.kind) {\n\t\tcase \"upsert\": {\n\t\t\tconst index = findJsonIndex(state, (row) => row.primary, change.primary, \"reactiveIndex\");\n\t\t\tconst row: IndexRow<K, V> = {\n\t\t\t\tprimary: change.primary,\n\t\t\t\tsecondary: change.secondary,\n\t\t\t\tvalue: change.value,\n\t\t\t};\n\t\t\tif (index === -1) state.push(row);\n\t\t\telse state[index] = row;\n\t\t\tsortIndexRows(state);\n\t\t\treturn;\n\t\t}\n\t\tcase \"delete\": {\n\t\t\tconst index = findJsonIndex(state, (row) => row.primary, change.primary, \"reactiveIndex\");\n\t\t\tif (index === -1) throw new Error(\"reactiveIndex delete change primary is missing\");\n\t\t\tstate.splice(index, 1);\n\t\t\treturn;\n\t\t}\n\t\tcase \"deleteMany\": {\n\t\t\tfor (const primary of change.primaries) {\n\t\t\t\tconst index = findJsonIndex(state, (row) => row.primary, primary, \"reactiveIndex\");\n\t\t\t\tif (index === -1) {\n\t\t\t\t\tthrow new Error(\"reactiveIndex deleteMany change primary is missing\");\n\t\t\t\t}\n\t\t\t\tstate.splice(index, 1);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tcase \"clear\":\n\t\t\tif (change.count !== state.length) {\n\t\t\t\tthrow new Error(\"reactiveIndex clear change count does not match current state\");\n\t\t\t}\n\t\t\tstate.length = 0;\n\t\t\treturn;\n\t}\n}\n\nfunction finishState<K extends ReactiveCollectionStorageKind, T>(\n\tkind: K,\n\tstate: T[],\n\tsnapshotFound: boolean,\n\tsnapshotCursor: number,\n\tapplied: number,\n\tcursor: number,\n): ReactiveCollectionRestoreState<K, readonly T[]> {\n\treturn {\n\t\tkind,\n\t\tstate,\n\t\tsource: snapshotFound\n\t\t\t? applied > 0\n\t\t\t\t? \"snapshot+changes\"\n\t\t\t\t: \"snapshot\"\n\t\t\t: applied > 0\n\t\t\t\t? \"changes\"\n\t\t\t\t: \"empty\",\n\t\tsnapshot: { found: snapshotFound, changeCursor: snapshotCursor },\n\t\tchanges: { applied, cursor },\n\t};\n}\n\nfunction loadState<K extends ReactiveCollectionStorageKind, T, C>(\n\tkind: K,\n\topts: LoadReactiveCollectionStateOptions,\n\tassertSnapshot: (value: unknown) => readonly T[],\n\tassertChange: (value: unknown) => C,\n\tapplyChange: (state: T[], change: C) => void,\n): Promise<ReactiveCollectionRestoreState<K, readonly T[]>> {\n\tconst key = opts.snapshotKey ?? collectionSnapshotKey(opts.storagePrefix);\n\treturn opts.snapshotStore.get(key).then((snapshotValue) => {\n\t\tlet snapshotFound = false;\n\t\tlet snapshotCursor = -1;\n\t\tlet state: T[] = [];\n\n\t\tif (snapshotValue !== undefined) {\n\t\t\tconst frame = assertReactiveCollectionSnapshotFrame<K, readonly T[]>(snapshotValue, kind);\n\t\t\tstate = [...assertSnapshot(frame.snapshot)];\n\t\t\tsnapshotFound = true;\n\t\t\tsnapshotCursor = frame.changeCursor;\n\t\t}\n\n\t\tif (opts.changeLog === undefined) {\n\t\t\treturn finishState(kind, state, snapshotFound, snapshotCursor, 0, snapshotCursor);\n\t\t}\n\n\t\treturn opts.changeLog.read({ after: snapshotCursor }).then((entries) => {\n\t\t\tlet applied = 0;\n\t\t\tlet cursor = snapshotCursor;\n\t\t\tfor (const entry of entries) {\n\t\t\t\tconst expectedSeq = cursor + 1;\n\t\t\t\tif (!Number.isSafeInteger(entry.seq) || entry.seq !== expectedSeq) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`reactive collection change log is non-contiguous: expected seq ${expectedSeq}, got ${entry.seq}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst frame = assertReactiveCollectionChangeFrame<K, C>(entry.value, kind);\n\t\t\t\tconst change = assertChange(frame.change);\n\t\t\t\tapplyChange(state, change);\n\t\t\t\tapplied += 1;\n\t\t\t\tcursor = entry.seq;\n\t\t\t}\n\t\t\treturn finishState(kind, state, snapshotFound, snapshotCursor, applied, cursor);\n\t\t});\n\t});\n}\n\n/** D161 passive load/fold for reactiveList; reads storage but never mutates graph topology. */\nexport function loadReactiveListState<T = unknown>(\n\topts: LoadReactiveCollectionStateOptions,\n): Promise<ReactiveListRestoreState<T>> {\n\treturn loadState<\"reactiveList\", T, ListChange<T>>(\n\t\t\"reactiveList\",\n\t\topts,\n\t\t(value) => assertArray<T>(value, \"reactiveList snapshot\"),\n\t\tassertListChange,\n\t\tapplyListChange,\n\t);\n}\n\n/** D161 passive load/fold for reactiveLog; reads storage but never mutates graph topology. */\nexport function loadReactiveLogState<T = unknown>(\n\topts: LoadReactiveCollectionStateOptions,\n): Promise<ReactiveLogRestoreState<T>> {\n\treturn loadState<\"reactiveLog\", T, LogChange<T>>(\n\t\t\"reactiveLog\",\n\t\topts,\n\t\t(value) => assertArray<T>(value, \"reactiveLog snapshot\"),\n\t\tassertLogChange,\n\t\tapplyLogChange,\n\t);\n}\n\n/** D161 passive load/fold scaffold for reactiveMap; synchronous policy restore is deferred. */\nexport function loadReactiveMapState<K = unknown, V = unknown>(\n\topts: LoadReactiveCollectionStateOptions,\n): Promise<ReactiveMapRestoreState<K, V>> {\n\treturn loadState<\"reactiveMap\", readonly [K, V], MapChange<K, V>>(\n\t\t\"reactiveMap\",\n\t\topts,\n\t\t(value) => assertEntryArray<K, V>(value, \"reactiveMap snapshot\"),\n\t\tassertMapChange,\n\t\tapplyMapChange,\n\t);\n}\n\n/** D161 passive load/fold scaffold for reactiveIndex; key-codec restore is deferred. */\nexport function loadReactiveIndexState<K = unknown, V = unknown>(\n\topts: LoadReactiveCollectionStateOptions,\n): Promise<ReactiveIndexRestoreState<K, V>> {\n\treturn loadState<\"reactiveIndex\", IndexRow<K, V>, IndexChange<K, V>>(\n\t\t\"reactiveIndex\",\n\t\topts,\n\t\t(value) => assertIndexRows<K, V>(value, \"reactiveIndex snapshot\"),\n\t\tassertIndexChange,\n\t\tapplyIndexChange,\n\t);\n}\n","import { hasKvVersioned, type KvGeneration, type KvStorageTier } from \"./kv.js\";\n\n/** Result tier for read-through output facts. */\nexport interface ReadThroughLookupTier {\n\t/** Tier index in the ordered lookup list. `-1` = optional loader fallback. */\n\treadonly index: number;\n\t/** Optional human-facing tier name. */\n\treadonly name?: string;\n}\n\n/** Ordered lookup result from a single tier or loader attempt. */\ntype ReadThroughOutcome = \"hit\" | \"miss\" | \"error\";\n\n/** Fact for one lookup attempt (one tier or the optional loader fallback). */\nexport interface ReadThroughLookupFact<T> {\n\treadonly kind: ReadThroughOutcome;\n\treadonly key: string;\n\treadonly tier: ReadThroughLookupTier;\n\treadonly value?: T;\n\treadonly generation?: KvGeneration;\n\treadonly error?: unknown;\n}\n\n/** Result of one promotion write attempt to an earlier tier. */\nexport interface ReadThroughPromotionFact {\n\treadonly tier: ReadThroughLookupTier;\n\treadonly ok: boolean;\n\treadonly error?: unknown;\n}\n\n/** Final read-through outcome, with explicit lookup facts and promotion facts. */\nexport interface TieredReadThroughResult<T> {\n\treadonly status: \"hit\" | \"miss\" | \"error\";\n\treadonly key: string;\n\treadonly value?: T;\n\treadonly hitTier?: ReadThroughLookupTier;\n\treadonly facts: readonly ReadThroughLookupFact<T>[];\n\treadonly promotions: readonly ReadThroughPromotionFact[];\n}\n\n/** Optional hook/context for lookup misses. */\nexport interface ReadThroughMissContext {\n\treadonly key: string;\n\treadonly tier: ReadThroughLookupTier;\n}\n\n/** Optional hook/context for get/load/promotion errors. */\nexport interface ReadThroughErrorContext {\n\treadonly key: string;\n\treadonly tier: ReadThroughLookupTier;\n\treadonly stage: \"lookup\" | \"promotion\";\n\treadonly error: unknown;\n}\n\n/** Configuration for `tieredReadThrough`. */\nexport interface TieredReadThroughOptions<T> {\n\t/** Lookup key for all tiers. */\n\treadonly key: string;\n\t/** Ordered lookup tiers, index 0 = hottest/fastest. */\n\treadonly tiers: readonly KvStorageTier<T>[];\n\t/** Optional friendly tier names, matched by index. */\n\treadonly tierNames?: readonly string[];\n\t/**\n\t * Optional loader fallback for cache-miss. If provided and no tier hits, this runs\n\t * after all tiers are checked and may write-through by promotion logic.\n\t */\n\treadonly load?: (key: string) => Promise<T | undefined> | T | undefined;\n\t/**\n\t * Optional promotion policy: set hit values to earlier (lower-index) tiers.\n\t * `false` disables promotion; default promotes to all earlier tiers on any hit.\n\t * Explicit indices can narrow promotion targets.\n\t */\n\treadonly promoteTo?: readonly number[] | false;\n\t/** Optional callbacks for control-plane observability. */\n\treadonly onMiss?: (context: ReadThroughMissContext) => void;\n\t/** Called for lookup/load errors and promotion failures by default. */\n\treadonly onError?: (context: ReadThroughErrorContext) => void;\n}\n\nfunction defer<T>(fn: () => T | PromiseLike<T>): Promise<T> {\n\treturn Promise.resolve().then(fn);\n}\n\n/** Alias for callers that prefer loader-oriented naming. */\nexport function readThroughKv<T>(\n\topts: TieredReadThroughOptions<T>,\n): Promise<TieredReadThroughResult<T>> {\n\treturn tieredReadThrough(opts);\n}\n\n/**\n * Build explicit lookup facts across tiers plus optional loader fallback (D104 layer 1).\n *\n * This is a passive storage/domain helper: it creates no graph nodes, performs no hydration or\n * restore, and treats promotion writes as facts rather than a graph commit barrier.\n */\nexport function tieredReadThrough<T>(\n\topts: TieredReadThroughOptions<T>,\n): Promise<TieredReadThroughResult<T>> {\n\tconst { key, tiers, tierNames = [], load, promoteTo, onMiss, onError } = opts;\n\n\tconst lookupFacts: ReadThroughLookupFact<T>[] = [];\n\tconst promotions: ReadThroughPromotionFact[] = [];\n\tlet hitTier: ReadThroughLookupTier | undefined;\n\tlet value: T | undefined;\n\n\tconst safeOnMiss = (tier: ReadThroughLookupTier): void => {\n\t\tif (!onMiss) return;\n\t\ttry {\n\t\t\tonMiss({ key, tier });\n\t\t} catch {\n\t\t\t/* no-op */\n\t\t}\n\t};\n\n\tconst safeOnError = (context: ReadThroughErrorContext): void => {\n\t\tif (!onError) return;\n\t\ttry {\n\t\t\tonError(context);\n\t\t} catch {\n\t\t\t/* no-op */\n\t\t}\n\t};\n\n\tconst addFact = (fact: ReadThroughLookupFact<T>): void => {\n\t\tlookupFacts.push(fact);\n\t};\n\n\tconst lookupTier = (index: number): ReadThroughLookupTier => ({\n\t\tindex,\n\t\tname: tierNames[index],\n\t});\n\n\tconst lookupNext = (index: number): Promise<void> => {\n\t\tif (hitTier !== undefined || index >= tiers.length) return defer(() => undefined);\n\t\tconst tier = tiers[index]!;\n\t\tconst info = lookupTier(index);\n\t\tconst read = hasKvVersioned(tier)\n\t\t\t? defer(() => tier.getVersioned(key)).then((result) => {\n\t\t\t\t\tif (result.kind === \"miss\") {\n\t\t\t\t\t\treturn { found: undefined, generation: result.generation } as const;\n\t\t\t\t\t}\n\t\t\t\t\treturn { found: result.value, generation: result.generation } as const;\n\t\t\t\t})\n\t\t\t: defer(() => tier.get(key)).then((found) => ({ found, generation: undefined }) as const);\n\t\treturn read\n\t\t\t.then(({ found, generation }) => {\n\t\t\t\tif (found === undefined) {\n\t\t\t\t\taddFact({ kind: \"miss\", key, tier: info, generation });\n\t\t\t\t\tsafeOnMiss(info);\n\t\t\t\t\treturn lookupNext(index + 1);\n\t\t\t\t}\n\t\t\t\taddFact({ kind: \"hit\", key, tier: info, value: found, generation });\n\t\t\t\thitTier = info;\n\t\t\t\tvalue = found;\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\taddFact({ kind: \"error\", key, tier: info, error });\n\t\t\t\tsafeOnError({ key, tier: info, stage: \"lookup\", error });\n\t\t\t\treturn lookupNext(index + 1);\n\t\t\t});\n\t};\n\n\tconst runLoader = (): Promise<void> => {\n\t\tif (hitTier !== undefined || typeof load !== \"function\") return defer(() => undefined);\n\t\tconst loaderTier: ReadThroughLookupTier = { index: -1, name: \"load\" };\n\t\treturn defer(() => load(key))\n\t\t\t.then((loaded) => {\n\t\t\t\tif (loaded === undefined) {\n\t\t\t\t\taddFact({ kind: \"miss\", key, tier: loaderTier });\n\t\t\t\t\tsafeOnMiss(loaderTier);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\taddFact({ kind: \"hit\", key, tier: loaderTier, value: loaded });\n\t\t\t\thitTier = loaderTier;\n\t\t\t\tvalue = loaded;\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\taddFact({ kind: \"error\", key, tier: loaderTier, error });\n\t\t\t\tsafeOnError({ key, tier: loaderTier, stage: \"lookup\", error });\n\t\t\t});\n\t};\n\n\tconst promoteNext = (targets: readonly number[], offset: number): Promise<void> => {\n\t\tif (offset >= targets.length || value === undefined) return defer(() => undefined);\n\t\tconst index = targets[offset]!;\n\t\tconst info = { index, name: tierNames[index] };\n\t\tconst tier = tiers[index]!;\n\t\tconst generation = generationForTier(lookupFacts, index);\n\t\tconst write = hasKvVersioned(tier)\n\t\t\t? generation === undefined\n\t\t\t\t? defer<boolean>(() => {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\"tieredReadThrough: versioned promotion target was not observed with a generation\",\n\t\t\t\t\t\t);\n\t\t\t\t\t})\n\t\t\t\t: defer(() => tier.setIfMatch(key, value as T, generation))\n\t\t\t: defer(() => tier.set(key, value as T)).then(() => true);\n\t\treturn write\n\t\t\t.then((ok) => {\n\t\t\t\tpromotions.push({ tier: info, ok });\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tpromotions.push({ tier: info, ok: false, error });\n\t\t\t\tsafeOnError({ key, tier: info, stage: \"promotion\", error });\n\t\t\t})\n\t\t\t.then(() => promoteNext(targets, offset + 1));\n\t};\n\n\tconst promote = (): Promise<void> => {\n\t\tif (hitTier === undefined || value === undefined) return defer(() => undefined);\n\t\tconst sourceIndex = hitTier.index === -1 ? tiers.length : hitTier.index;\n\t\tconst targets = buildPromotionTargets(tiers.length, sourceIndex, promoteTo);\n\t\treturn promoteNext(targets, 0);\n\t};\n\n\tconst result = (): TieredReadThroughResult<T> => {\n\t\tconst status: TieredReadThroughResult<T>[\"status\"] = (() => {\n\t\t\tif (hitTier !== undefined && hitTier.index >= -1 && value !== undefined) return \"hit\";\n\t\t\tif (lookupFacts.some((fact) => fact.kind === \"error\")) return \"error\";\n\t\t\treturn \"miss\";\n\t\t})();\n\n\t\treturn {\n\t\t\tstatus,\n\t\t\tkey,\n\t\t\tvalue,\n\t\t\thitTier,\n\t\t\tfacts: lookupFacts,\n\t\t\tpromotions,\n\t\t};\n\t};\n\n\treturn lookupNext(0).then(runLoader).then(promote).then(result);\n}\n\nfunction generationForTier<T>(\n\tfacts: readonly ReadThroughLookupFact<T>[],\n\tindex: number,\n): KvGeneration | undefined {\n\treturn facts.find((fact) => fact.tier.index === index)?.generation;\n}\n\nfunction buildPromotionTargets(\n\ttierCount: number,\n\thitIndex: number,\n\tpromoteTo?: readonly number[] | false,\n): number[] {\n\tif (promoteTo === false || tierCount <= 0) return [];\n\tconst maxPromote = Math.max(0, Math.min(hitIndex, tierCount));\n\tif (promoteTo === undefined) {\n\t\treturn [...Array(maxPromote).keys()];\n\t}\n\tconst normalized: number[] = [];\n\tconst seen = new Set<number>();\n\tfor (const index of promoteTo) {\n\t\tif (!Number.isSafeInteger(index) || index < 0 || index >= tierCount || index >= maxPromote) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (!seen.has(index)) {\n\t\t\tseen.add(index);\n\t\t\tnormalized.push(index);\n\t\t}\n\t}\n\treturn normalized;\n}\n","import { strictCanonicalJsonBytes, strictJsonCodecFor } from \"../json/codec.js\";\nimport type { ChangeLifecycle, StorageTimestampNs } from \"./change.js\";\nimport { nowNs } from \"./change.js\";\nimport type { Codec } from \"./codec.js\";\nimport {\n\tassertNonNegativeDecimalIntegerString,\n\ttype NonNegativeDecimalIntegerString,\n} from \"./scalar.js\";\n\n/** Storage key segment for passive WAL frame facts. */\nexport const WAL_KEY_SEGMENT = \"wal\";\n\n/** Decimal sequence padding for lexicographically ordered WAL frame keys. */\nexport const WAL_FRAME_SEQ_PAD = 20;\n\n/** First passive WAL frame format version. */\nexport const WAL_FORMAT_VERSION = 1;\n\n/** Passive WAL frame body; this is a storage fact, not graph restore input. */\nexport interface WalFrameBody<T = unknown> {\n\treadonly t: \"c\";\n\treadonly lifecycle: ChangeLifecycle;\n\treadonly path: string;\n\treadonly change: T;\n\treadonly frame_seq: number;\n\treadonly frame_t_ns: StorageTimestampNs;\n\treadonly format_version: typeof WAL_FORMAT_VERSION;\n}\n\n/** Checksummed passive WAL frame. */\nexport interface WalFrame<T = unknown> extends WalFrameBody<T> {\n\treadonly checksum: string;\n}\n\n/** Options for constructing a passive WAL frame. */\nexport interface WalFrameOptions<T = unknown> {\n\treadonly path: string;\n\treadonly change: T;\n\treadonly frame_seq: number;\n\treadonly lifecycle?: ChangeLifecycle;\n\treadonly frame_t_ns?: StorageTimestampNs;\n}\n\nconst SHA_256 = \"SHA-256\";\nconst HEX_TABLE = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, \"0\"));\nconst CHECKSUM_RE = /^[0-9a-f]{64}$/;\nconst WAL_BODY_KEYS = new Set([\n\t\"t\",\n\t\"lifecycle\",\n\t\"path\",\n\t\"change\",\n\t\"frame_seq\",\n\t\"frame_t_ns\",\n\t\"format_version\",\n]);\nconst WAL_FRAME_KEYS = new Set([...WAL_BODY_KEYS, \"checksum\"]);\n\nfunction bytesToHex(bytes: Uint8Array): string {\n\tlet out = \"\";\n\tfor (const byte of bytes) out += HEX_TABLE[byte];\n\treturn out;\n}\n\nfunction sha256Hex(data: Uint8Array): Promise<string> {\n\tconst digestInput = Uint8Array.from(data);\n\treturn globalThis.crypto.subtle\n\t\t.digest(SHA_256, digestInput)\n\t\t.then((buf) => bytesToHex(new Uint8Array(buf)));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isLifecycle(value: unknown): value is ChangeLifecycle {\n\treturn value === \"spec\" || value === \"data\" || value === \"ownership\";\n}\n\nfunction assertOnlyKeys(value: Record<string, unknown>, allowed: ReadonlySet<string>): void {\n\tfor (const key of Object.keys(value)) {\n\t\tif (!allowed.has(key)) throw new TypeError(`walFrameCodec: unknown field ${key}`);\n\t}\n}\n\nfunction assertFrameSeq(value: unknown, label: string): number {\n\tif (!Number.isSafeInteger(value) || (value as number) < 0) {\n\t\tthrow new TypeError(`${label} must be a non-negative safe integer`);\n\t}\n\treturn value as number;\n}\n\nfunction assertWalFrameBody<T = unknown>(\n\tvalue: unknown,\n\tallowedKeys: ReadonlySet<string> = WAL_BODY_KEYS,\n): WalFrameBody<T> {\n\tif (!isRecord(value)) throw new TypeError(\"walFrameCodec: frame must be an object\");\n\tassertOnlyKeys(value, allowedKeys);\n\tif (value.t !== \"c\") throw new TypeError(\"walFrameCodec: t must be c\");\n\tif (!isLifecycle(value.lifecycle)) {\n\t\tthrow new TypeError(\"walFrameCodec: lifecycle must be spec, data, or ownership\");\n\t}\n\tif (typeof value.path !== \"string\" || value.path.length === 0) {\n\t\tthrow new TypeError(\"walFrameCodec: path must be a non-empty string\");\n\t}\n\tif (!Object.hasOwn(value, \"change\")) {\n\t\tthrow new TypeError(\"walFrameCodec: change payload is required\");\n\t}\n\tconst frameSeq = assertFrameSeq(value.frame_seq, \"walFrameCodec: frame_seq\");\n\tconst frameTimestamp = assertNonNegativeDecimalIntegerString(\n\t\tvalue.frame_t_ns,\n\t\t\"walFrameCodec: frame_t_ns\",\n\t);\n\tif (value.format_version !== WAL_FORMAT_VERSION) {\n\t\tthrow new TypeError(`walFrameCodec: format_version must be ${WAL_FORMAT_VERSION}`);\n\t}\n\treturn {\n\t\tt: \"c\",\n\t\tlifecycle: value.lifecycle,\n\t\tpath: value.path,\n\t\tchange: value.change as T,\n\t\tframe_seq: frameSeq,\n\t\tframe_t_ns: frameTimestamp,\n\t\tformat_version: WAL_FORMAT_VERSION,\n\t};\n}\n\n/** Build the namespace prefix for passive WAL frame keys. */\nexport function walFramePrefix(namespace: string): string {\n\tif (namespace.length === 0) return WAL_KEY_SEGMENT;\n\treturn `${namespace}/${WAL_KEY_SEGMENT}`;\n}\n\n/** Build the deterministic storage key for a WAL frame sequence number. */\nexport function walFrameKey(prefix: string, frameSeq: number): string {\n\tif (!Number.isSafeInteger(frameSeq) || frameSeq < 0) {\n\t\tthrow new RangeError(\n\t\t\t`walFrameKey: frameSeq must be a non-negative safe integer, got ${frameSeq}`,\n\t\t);\n\t}\n\treturn `${prefix}/${frameSeq.toString().padStart(WAL_FRAME_SEQ_PAD, \"0\")}`;\n}\n\n/** Hash the canonical WAL frame body, excluding the checksum field itself. */\nexport function walFrameChecksum<T = unknown>(body: WalFrameBody<T>): Promise<string> {\n\tlet bytes: Uint8Array;\n\ttry {\n\t\tbytes = strictCanonicalJsonBytes(assertWalFrameBody<T>(body));\n\t} catch (err) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tthrow err;\n\t\t});\n\t}\n\treturn sha256Hex(bytes);\n}\n\n/** Construct a passive WAL frame with a canonical checksum. */\nexport function walFrame<T = unknown>(opts: WalFrameOptions<T>): Promise<WalFrame<T>> {\n\tconst body: WalFrameBody<T> = {\n\t\tt: \"c\",\n\t\tlifecycle: opts.lifecycle ?? \"data\",\n\t\tpath: opts.path,\n\t\tchange: opts.change,\n\t\tframe_seq: opts.frame_seq,\n\t\tframe_t_ns: opts.frame_t_ns ?? nowNs(),\n\t\tformat_version: WAL_FORMAT_VERSION,\n\t};\n\treturn walFrameChecksum(body).then((checksum) => ({ ...body, checksum }));\n}\n\n/** Validate a decoded passive WAL frame without verifying its checksum bytes. */\nexport function assertWalFrame<T = unknown>(value: unknown): WalFrame<T> {\n\tif (!isRecord(value)) throw new TypeError(\"walFrameCodec: frame must be an object\");\n\tassertOnlyKeys(value, WAL_FRAME_KEYS);\n\tconst body = assertWalFrameBody<T>(value, WAL_FRAME_KEYS);\n\tconst checksum = (value as Record<string, unknown>).checksum;\n\tif (typeof checksum !== \"string\" || !CHECKSUM_RE.test(checksum)) {\n\t\tthrow new TypeError(\"walFrameCodec: checksum must be a lowercase sha256 hex string\");\n\t}\n\treturn { ...body, checksum } as WalFrame<T>;\n}\n\n/** Verify that a passive WAL frame checksum matches its body. */\nexport function verifyWalFrameChecksum<T = unknown>(frame: WalFrame<T>): Promise<boolean> {\n\tlet checked: WalFrame<T>;\n\ttry {\n\t\tchecked = assertWalFrame<T>(frame);\n\t} catch (err) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tthrow err;\n\t\t});\n\t}\n\tconst { checksum, ...body } = checked;\n\treturn walFrameChecksum(body).then((expected) => expected === checksum);\n}\n\n/** Strict canonical JSON codec for passive WAL frames; this is not a restore codec. */\nexport function walFrameCodec<T = unknown>(): Codec<WalFrame<T>> {\n\tconst codec = strictJsonCodecFor<unknown>();\n\treturn {\n\t\tencode(value) {\n\t\t\treturn codec.encode(assertWalFrame(value));\n\t\t},\n\t\tdecode(bytes) {\n\t\t\treturn assertWalFrame<T>(codec.decode(bytes));\n\t\t},\n\t};\n}\n\nexport type WalFrameTimestampNs = NonNegativeDecimalIntegerString;\n"],"mappings":"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","names":["listByPrefix","out","listByPrefix","opts","HEX_TABLE","isRecord","row","defer","result","SHA_256","HEX_TABLE","bytesToHex","sha256Hex","isRecord","isLifecycle"]}
|
|
1
|
+
{"version":3,"sources":["../../src/storage/index.ts","../../src/storage/backend.ts","../../src/json/codec.ts","../../src/storage/kv.ts","../../src/storage/append-log.ts","../../src/storage/scalar.ts","../../src/storage/change.ts","../../src/storage/content-addressed.ts","../../src/storage/observe-event-log.ts","../../src/storage/reactive-collection.ts","../../src/storage/read-through.ts","../../src/storage/wal.ts"],"sourcesContent":["export {\n\tAPPEND_LOG_SEQ_PAD,\n\ttype AppendLogEntry,\n\ttype AppendLogPage,\n\ttype AppendLogReadOptions,\n\ttype AppendLogStorageTier,\n\tappendLogKey,\n\tappendLogStorage,\n\ttype MultiWriterAppendLogOptions,\n\ttype MultiWriterAppendLogStorageTier,\n\tmemoryAppendLog,\n\tmemoryMultiWriterAppendLog,\n\tmultiWriterAppendLogStorage,\n\treadAppendLogPage,\n} from \"./append-log.js\";\nexport {\n\thasStoragePutIfAbsent,\n\thasStorageVersioned,\n\ttype MemoryBackend,\n\tmemoryBackend,\n\ttype PutIfAbsentStorageBackend,\n\trequireStoragePutIfAbsent,\n\trequireStorageVersioned,\n\ttype StorageBackend,\n\ttype StorageGeneration,\n\ttype StorageNamespaceOptions,\n\ttype StorageVersionedRead,\n\ttype VersionedStorageBackend,\n\ttype WebStorageLike,\n\twebStorageBackend,\n} from \"./backend.js\";\nexport {\n\tassertChangeEnvelope,\n\ttype ChangeEnvelope,\n\ttype ChangeEnvelopeOptions,\n\ttype ChangeLifecycle,\n\tchangeEnvelopeCodec,\n\tenvelopeChange,\n\tnowNs,\n\ttype StorageTimestampNs,\n} from \"./change.js\";\nexport {\n\tassertStrictJsonObject,\n\tassertStrictJsonValue,\n\ttype Codec,\n\tjsonCodec,\n\tjsonCodecFor,\n\ttype StrictJsonObject,\n\ttype StrictJsonScalar,\n\ttype StrictJsonValue,\n\tstableJsonString,\n\tstrictJsonCodec,\n\tstrictJsonCodecFor,\n} from \"./codec.js\";\nexport {\n\ttype ContentAddressedKv,\n\ttype ContentAddressedKvOptions,\n\tContentAddressedMissError,\n\ttype ContentAddressedMode,\n\ttype ContentAddressedStorage,\n\ttype ContentAddressedStorageOptions,\n\tcontentAddressedKv,\n\tcontentAddressedStorage,\n} from \"./content-addressed.js\";\nexport {\n\tdictKv,\n\thasKvPutIfAbsent,\n\thasKvVersioned,\n\ttype KvGeneration,\n\ttype KvStorageOptions,\n\ttype KvStorageTier,\n\ttype KvVersionedRead,\n\tkvStorage,\n\tlistByPrefix,\n\tmemoryKv,\n\ttype PutIfAbsentKvStorageTier,\n\trequireKvPutIfAbsent,\n\trequireKvVersioned,\n\ttype VersionedKvStorageTier,\n} from \"./kv.js\";\nexport {\n\tassertObserveEventFrame,\n\ttype ObserveEventFrame,\n\ttype ObserveEventLogPage,\n\tobserveEventFrame,\n\tobserveEventFrameCodec,\n\treadObserveEventLogPage,\n} from \"./observe-event-log.js\";\nexport {\n\tassertReactiveCollectionChangeFrame,\n\tassertReactiveCollectionSnapshotFrame,\n\tcollectionSnapshotKey,\n\ttype LoadReactiveCollectionStateOptions,\n\tloadReactiveIndexState,\n\tloadReactiveListState,\n\tloadReactiveLogState,\n\tloadReactiveMapState,\n\tREACTIVE_COLLECTION_CHANGE_FORMAT,\n\tREACTIVE_COLLECTION_FRAME_VERSION,\n\tREACTIVE_COLLECTION_SNAPSHOT_FORMAT,\n\ttype ReactiveCollectionChangeFrame,\n\ttype ReactiveCollectionRestoreState,\n\ttype ReactiveCollectionSnapshotFrame,\n\ttype ReactiveCollectionStorageKind,\n\ttype ReactiveIndexRestoreState,\n\ttype ReactiveListRestoreState,\n\ttype ReactiveLogRestoreState,\n\ttype ReactiveMapRestoreState,\n\treactiveCollectionChangeFrame,\n\treactiveCollectionChangeFrameCodec,\n\treactiveCollectionSnapshotFrame,\n\treactiveCollectionSnapshotFrameCodec,\n} from \"./reactive-collection.js\";\nexport {\n\ttype ReadThroughErrorContext,\n\ttype ReadThroughLookupFact,\n\ttype ReadThroughLookupTier,\n\ttype ReadThroughMissContext,\n\ttype ReadThroughPromotionFact,\n\treadThroughKv,\n\ttype TieredReadThroughOptions,\n\ttype TieredReadThroughResult,\n\ttieredReadThrough,\n} from \"./read-through.js\";\nexport {\n\tassertDecimalIntegerString,\n\tassertNonNegativeDecimalIntegerString,\n\tbigIntToDecimalString,\n\tbigIntToNonNegativeDecimalString,\n\ttype DecimalIntegerString,\n\tdecimalStringToBigInt,\n\tisDecimalIntegerString,\n\tisNonNegativeDecimalIntegerString,\n\ttype NonNegativeDecimalIntegerString,\n\tnonNegativeDecimalStringToBigInt,\n} from \"./scalar.js\";\nexport {\n\tassertWalFrame,\n\tverifyWalFrameChecksum,\n\tWAL_FORMAT_VERSION,\n\tWAL_FRAME_SEQ_PAD,\n\tWAL_KEY_SEGMENT,\n\ttype WalFrame,\n\ttype WalFrameBody,\n\ttype WalFrameOptions,\n\ttype WalFrameTimestampNs,\n\twalFrame,\n\twalFrameChecksum,\n\twalFrameCodec,\n\twalFrameKey,\n\twalFramePrefix,\n} from \"./wal.js\";\n","/**\n * Byte storage backends (D82): passive adapter-owned storage, no graph methods.\n */\n\nconst HEX_TABLE = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, \"0\"));\nconst NAMESPACE_SEPARATOR = \"\\u0000\";\n\nfunction cloneBytes(bytes: Uint8Array): Uint8Array {\n\treturn Uint8Array.from(bytes);\n}\n\nfunction encodeNamespacePrefix(namespace: string): string {\n\treturn namespace.length > 0 ? `${namespace}${NAMESPACE_SEPARATOR}` : \"\";\n}\n\nfunction encodeBytesToHex(bytes: Uint8Array): string {\n\tlet out = \"\";\n\tfor (const byte of bytes) out += HEX_TABLE[byte];\n\treturn out;\n}\n\nfunction decodeHexToBytes(raw: string): Uint8Array {\n\tif (raw.length % 2 !== 0 || !/^[0-9a-f]*$/i.test(raw)) {\n\t\tthrow new TypeError(\"webStorageBackend: malformed stored bytes\");\n\t}\n\tconst out = new Uint8Array(raw.length / 2);\n\tfor (let i = 0; i < raw.length; i += 2) {\n\t\tconst value = Number.parseInt(raw.slice(i, i + 2), 16);\n\t\tif (Number.isNaN(value)) throw new TypeError(\"webStorageBackend: malformed stored bytes\");\n\t\tout[i / 2] = value;\n\t}\n\treturn out;\n}\n\nfunction validateLogicalKey(label: string, key: string): string {\n\tif (typeof key !== \"string\") {\n\t\tthrow new TypeError(`${label}: key must be a string`);\n\t}\n\tif (key.includes(NAMESPACE_SEPARATOR)) {\n\t\tthrow new TypeError(`${label}: key must not contain U+0000`);\n\t}\n\treturn key;\n}\n\nfunction validateListPrefix(label: string, prefix: string): string {\n\tif (typeof prefix !== \"string\") {\n\t\tthrow new TypeError(`${label}: list prefix must be a string`);\n\t}\n\tif (prefix.includes(NAMESPACE_SEPARATOR)) {\n\t\tthrow new TypeError(`${label}: list prefix must not contain U+0000`);\n\t}\n\treturn prefix;\n}\n\nfunction validateNamespace(label: string, namespace: string): string {\n\tif (typeof namespace !== \"string\") {\n\t\tthrow new TypeError(`${label}: namespace must be a string`);\n\t}\n\tif (namespace.includes(NAMESPACE_SEPARATOR)) {\n\t\tthrow new TypeError(`${label}: namespace must not contain U+0000`);\n\t}\n\treturn namespace;\n}\n\n/** Passive byte-addressed backend used by D82 storage binding tiers. */\nexport interface StorageBackend {\n\tget(key: string): undefined | Uint8Array | PromiseLike<undefined | Uint8Array>;\n\tput(key: string, value: Uint8Array): void | PromiseLike<void>;\n\tputIfAbsent?(key: string, value: Uint8Array): boolean | PromiseLike<boolean>;\n\tgetVersioned?(key: string): StorageVersionedRead | PromiseLike<StorageVersionedRead>;\n\tsetIfMatch?(\n\t\tkey: string,\n\t\tvalue: Uint8Array,\n\t\tgeneration: StorageGeneration,\n\t): boolean | PromiseLike<boolean>;\n\tdelete?(key: string): void | PromiseLike<void>;\n\tlist?(prefix?: string): readonly string[] | PromiseLike<readonly string[]>;\n}\n\n/** Passive D85 conditional-create capability for multi-writer storage helpers. */\nexport interface PutIfAbsentStorageBackend extends StorageBackend {\n\tputIfAbsent(key: string, value: Uint8Array): boolean | PromiseLike<boolean>;\n}\n\n/** Opaque D108 per-key generation token for passive storage versioned reads. */\nexport type StorageGeneration = unknown;\n\n/** D108 versioned byte read result with explicit present/absent observations. */\nexport type StorageVersionedRead =\n\t| {\n\t\t\treadonly kind: \"hit\";\n\t\t\treadonly value: Uint8Array;\n\t\t\treadonly generation: StorageGeneration;\n\t }\n\t| {\n\t\t\treadonly kind: \"miss\";\n\t\t\treadonly generation: StorageGeneration;\n\t };\n\n/** Passive D108 versioned read + generation-conditional set capability. */\nexport interface VersionedStorageBackend extends StorageBackend {\n\tgetVersioned(key: string): StorageVersionedRead | PromiseLike<StorageVersionedRead>;\n\tsetIfMatch(\n\t\tkey: string,\n\t\tvalue: Uint8Array,\n\t\tgeneration: StorageGeneration,\n\t): boolean | PromiseLike<boolean>;\n}\n\n/** Runtime guard for D85 conditional-create capable byte backends. */\nexport function hasStoragePutIfAbsent(\n\tbackend: StorageBackend,\n): backend is PutIfAbsentStorageBackend {\n\treturn typeof backend.putIfAbsent === \"function\";\n}\n\n/** Require D85 conditional-create support and produce a clear adapter error when absent. */\nexport function requireStoragePutIfAbsent(\n\tbackend: StorageBackend,\n\tlabel = \"storage backend\",\n): PutIfAbsentStorageBackend {\n\tif (!hasStoragePutIfAbsent(backend)) {\n\t\tthrow new Error(`${label}: backend does not support putIfAbsent`);\n\t}\n\treturn backend;\n}\n\n/** Runtime guard for D108 versioned byte backends. */\nexport function hasStorageVersioned(backend: StorageBackend): backend is VersionedStorageBackend {\n\treturn typeof backend.getVersioned === \"function\" && typeof backend.setIfMatch === \"function\";\n}\n\n/** Require D108 versioned support and produce a clear adapter error when absent. */\nexport function requireStorageVersioned(\n\tbackend: StorageBackend,\n\tlabel = \"storage backend\",\n): VersionedStorageBackend {\n\tif (!hasStorageVersioned(backend)) {\n\t\tthrow new Error(`${label}: backend does not support versioned get/set-if-match`);\n\t}\n\treturn backend;\n}\n\n/** Browser/storage-adapter shape for deterministic byte helpers (DOM-free for portability). */\nexport interface WebStorageLike {\n\treadonly length?: number;\n\tgetItem(key: string): string | null | undefined;\n\tsetItem(key: string, value: string): void;\n\tremoveItem(key: string): void;\n\tkey?(index: number): string | null | undefined;\n\tkeys?(): readonly string[];\n}\n\n/** Storage helper options for namespace isolation and logical-key prefixing. */\nexport interface StorageNamespaceOptions {\n\t/**\n\t * Optional namespace for logical keys.\n\t *\n\t * Namespace is part of key mapping only and is not returned from `list()`.\n\t */\n\tnamespace?: string;\n}\n\nfunction toStorageKey(namespace: string, key: string): string {\n\treturn `${encodeNamespacePrefix(namespace)}${key}`;\n}\n\nfunction enumerateStorageKeys(storage: WebStorageLike): readonly unknown[] {\n\tif (storage.keys) return [...storage.keys()];\n\tif (typeof storage.key === \"function\" && typeof storage.length === \"number\") {\n\t\tconst keys: string[] = [];\n\t\tfor (let i = 0; i < storage.length; i += 1) {\n\t\t\tconst key = storage.key(i);\n\t\t\tif (key !== null && key !== undefined) keys.push(key);\n\t\t}\n\t\treturn keys;\n\t}\n\tconst fallback = storage as unknown as Readonly<Record<string, unknown>>;\n\treturn Object.keys(fallback).filter((key) => typeof fallback[key] === \"string\");\n}\n\nfunction decodeStorageListKey(namespace: string, rawKey: unknown): string | undefined {\n\tif (typeof rawKey !== \"string\") {\n\t\tthrow new TypeError(\"webStorageBackend: stored key must be a string\");\n\t}\n\tconst prefix = encodeNamespacePrefix(namespace);\n\tif (!rawKey.startsWith(prefix)) return undefined;\n\tconst logical = rawKey.slice(prefix.length);\n\tif (logical.includes(NAMESPACE_SEPARATOR)) {\n\t\tthrow new TypeError(\"webStorageBackend: malformed stored key\");\n\t}\n\treturn logical;\n}\n\nfunction listByPrefix(namespace: string, prefix: string, raw: readonly unknown[]): string[] {\n\tconst out: string[] = [];\n\tfor (const key of raw) {\n\t\tconst logical = decodeStorageListKey(namespace, key);\n\t\tif (logical === undefined) continue;\n\t\tif (!logical.startsWith(prefix)) continue;\n\t\tout.push(logical);\n\t}\n\tout.sort();\n\treturn out;\n}\n\n/** Build a deterministic byte backend backed by a browser-like key/value store (D103/D82). */\nexport function webStorageBackend(\n\tstorage: WebStorageLike,\n\topts: StorageNamespaceOptions = {},\n): StorageBackend {\n\tconst namespace =\n\t\topts.namespace === undefined ? \"\" : validateNamespace(\"webStorageBackend\", opts.namespace);\n\treturn {\n\t\tget(key) {\n\t\t\tconst raw = storage.getItem(\n\t\t\t\ttoStorageKey(namespace, validateLogicalKey(\"webStorageBackend\", key)),\n\t\t\t);\n\t\t\tif (raw === null || raw === undefined) return undefined;\n\t\t\treturn decodeHexToBytes(raw);\n\t\t},\n\t\tput(key, value) {\n\t\t\tstorage.setItem(\n\t\t\t\ttoStorageKey(namespace, validateLogicalKey(\"webStorageBackend\", key)),\n\t\t\t\tencodeBytesToHex(cloneBytes(value)),\n\t\t\t);\n\t\t},\n\t\tdelete(key) {\n\t\t\tstorage.removeItem(toStorageKey(namespace, validateLogicalKey(\"webStorageBackend\", key)));\n\t\t},\n\t\tlist(prefix = \"\") {\n\t\t\treturn listByPrefix(\n\t\t\t\tnamespace,\n\t\t\t\tvalidateListPrefix(\"webStorageBackend\", prefix),\n\t\t\t\tenumerateStorageKeys(storage),\n\t\t\t);\n\t\t},\n\t};\n}\n\n/** In-memory backend for tests, adapters, and lightweight local storage. */\nexport interface MemoryBackend extends StorageBackend {\n\treadonly entries: ReadonlyMap<string, Uint8Array>;\n\tclear(): void;\n}\n\nconst MEMORY_GENERATION = Symbol(\"graphrefly.memoryBackend.generation\");\n\ninterface MemoryGeneration {\n\treadonly [MEMORY_GENERATION]: readonly [epoch: number, key: string, version: number];\n}\n\nfunction memoryGeneration(epoch: number, key: string, version: number): MemoryGeneration {\n\treturn Object.freeze({ [MEMORY_GENERATION]: Object.freeze([epoch, key, version] as const) });\n}\n\nfunction readMemoryGeneration(\n\tgeneration: StorageGeneration,\n): readonly [epoch: number, key: string, version: number] | undefined {\n\tif (typeof generation !== \"object\" || generation === null) return undefined;\n\tconst maybe = generation as Partial<MemoryGeneration>;\n\tconst token = maybe[MEMORY_GENERATION];\n\tif (\n\t\tArray.isArray(token) &&\n\t\ttoken.length === 3 &&\n\t\ttypeof token[0] === \"number\" &&\n\t\ttypeof token[1] === \"string\" &&\n\t\ttypeof token[2] === \"number\"\n\t) {\n\t\treturn token as readonly [number, string, number];\n\t}\n\treturn undefined;\n}\n\n/** Create a byte-cloning in-memory backend. */\nexport function memoryBackend(\n\tinitial: Iterable<readonly [string, Uint8Array]> = [],\n): MemoryBackend {\n\tconst entries = new Map<string, Uint8Array>();\n\tconst versions = new Map<string, number>();\n\tlet epoch = 0;\n\tfor (const [key, value] of initial) {\n\t\tentries.set(validateLogicalKey(\"memoryBackend\", key), cloneBytes(value));\n\t}\n\tconst versionOf = (key: string): number => versions.get(key) ?? 0;\n\tconst bump = (key: string): void => {\n\t\tversions.set(key, versionOf(key) + 1);\n\t};\n\treturn {\n\t\tentries,\n\t\tget(key) {\n\t\t\tconst value = entries.get(validateLogicalKey(\"memoryBackend\", key));\n\t\t\treturn value === undefined ? undefined : cloneBytes(value);\n\t\t},\n\t\tput(key, value) {\n\t\t\tvalidateLogicalKey(\"memoryBackend\", key);\n\t\t\tentries.set(key, cloneBytes(value));\n\t\t\tbump(key);\n\t\t},\n\t\tputIfAbsent(key, value) {\n\t\t\tvalidateLogicalKey(\"memoryBackend\", key);\n\t\t\tif (entries.has(key)) return false;\n\t\t\tentries.set(key, cloneBytes(value));\n\t\t\tbump(key);\n\t\t\treturn true;\n\t\t},\n\t\tgetVersioned(key) {\n\t\t\tvalidateLogicalKey(\"memoryBackend\", key);\n\t\t\tconst value = entries.get(key);\n\t\t\tconst generation = memoryGeneration(epoch, key, versionOf(key));\n\t\t\tif (value === undefined) return { kind: \"miss\", generation };\n\t\t\treturn { kind: \"hit\", value: cloneBytes(value), generation };\n\t\t},\n\t\tsetIfMatch(key, value, generation) {\n\t\t\tvalidateLogicalKey(\"memoryBackend\", key);\n\t\t\tconst observed = readMemoryGeneration(generation);\n\t\t\tif (\n\t\t\t\tobserved === undefined ||\n\t\t\t\tobserved[0] !== epoch ||\n\t\t\t\tobserved[1] !== key ||\n\t\t\t\tobserved[2] !== versionOf(key)\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tentries.set(key, cloneBytes(value));\n\t\t\tbump(key);\n\t\t\treturn true;\n\t\t},\n\t\tdelete(key) {\n\t\t\tvalidateLogicalKey(\"memoryBackend\", key);\n\t\t\tif (entries.delete(key)) bump(key);\n\t\t},\n\t\tlist(prefix = \"\") {\n\t\t\tconst validatedPrefix = validateListPrefix(\"memoryBackend\", prefix);\n\t\t\treturn [...entries.keys()].filter((key) => key.startsWith(validatedPrefix)).sort();\n\t\t},\n\t\tclear() {\n\t\t\tentries.clear();\n\t\t\tversions.clear();\n\t\t\tepoch += 1;\n\t\t},\n\t};\n}\n","/**\n * Neutral JSON/encoding utilities (D96).\n *\n * Shared by graph checkpoints and storage bindings; neither layer owns the strict JSON\n * scanner/canonicalization contract.\n */\n\n/** Typed byte codec for D82 storage binding helpers and D96 shared JSON surfaces. */\nexport interface Codec<T> {\n\tencode(value: T): Uint8Array;\n\tdecode(bytes: Uint8Array): T;\n}\n\nexport type StrictJsonScalar = null | boolean | number | string;\nexport type StrictJsonValue =\n\t| StrictJsonScalar\n\t| readonly StrictJsonValue[]\n\t| { readonly [key: string]: StrictJsonValue };\nexport type StrictJsonObject = Readonly<Record<string, StrictJsonValue>>;\n\ntype JsonValue = StrictJsonValue;\n\nconst JS_MIN_NORMAL_NUMBER = 2 ** -1022;\n\nfunction assertStableJsonNumber(value: number, path: string): void {\n\tif (!Number.isFinite(value)) {\n\t\tthrow new TypeError(`stableJsonString: non-finite number at ${path}`);\n\t}\n}\n\nfunction assertStrictJsonNumber(value: number, path: string): void {\n\tassertStableJsonNumber(value, path);\n\tif (Object.is(value, -0)) {\n\t\tthrow new TypeError(`stableJsonString: non-canonical number at ${path}`);\n\t}\n\tconst abs = Math.abs(value);\n\tif (abs > 0 && abs < JS_MIN_NORMAL_NUMBER) {\n\t\tthrow new TypeError(`stableJsonString: subnormal number at ${path}`);\n\t}\n\tif (Number.isInteger(value) && !Number.isSafeInteger(value)) {\n\t\tthrow new TypeError(`stableJsonString: integer outside safe range at ${path}`);\n\t}\n}\n\nfunction sortedJsonValue(\n\tvalue: unknown,\n\tseen = new Set<object>(),\n\tpath = \"$\",\n\tstrictNumbers = false,\n): JsonValue {\n\tif (value === null) return null;\n\tif (typeof value === \"string\" || typeof value === \"boolean\") return value;\n\tif (typeof value === \"number\") {\n\t\tif (strictNumbers) assertStrictJsonNumber(value, path);\n\t\telse assertStableJsonNumber(value, path);\n\t\treturn value;\n\t}\n\tif (typeof value !== \"object\") {\n\t\tthrow new TypeError(`stableJsonString: value at ${path} is not JSON-encodable`);\n\t}\n\tif (seen.has(value)) throw new TypeError(`stableJsonString: circular reference at ${path}`);\n\tconst proto = Object.getPrototypeOf(value);\n\tif (!Array.isArray(value) && proto !== Object.prototype && proto !== null) {\n\t\tthrow new TypeError(`stableJsonString: non-plain object at ${path}`);\n\t}\n\tseen.add(value);\n\ttry {\n\t\tif (Array.isArray(value)) {\n\t\t\tif (Object.getOwnPropertySymbols(value).length > 0) {\n\t\t\t\tthrow new TypeError(`stableJsonString: symbol-keyed properties at ${path}`);\n\t\t\t}\n\t\t\tfor (const key of Object.getOwnPropertyNames(value)) {\n\t\t\t\tconst isIndex =\n\t\t\t\t\t/^(0|[1-9]\\d*)$/.test(key) &&\n\t\t\t\t\tNumber.isSafeInteger(Number(key)) &&\n\t\t\t\t\tNumber(key) < value.length;\n\t\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(value, key);\n\t\t\t\tif (descriptor !== undefined && (\"get\" in descriptor || \"set\" in descriptor)) {\n\t\t\t\t\tthrow new TypeError(`stableJsonString: accessor property at ${path}.${key}`);\n\t\t\t\t}\n\t\t\t\tif (key !== \"length\" && !isIndex) {\n\t\t\t\t\tthrow new TypeError(`stableJsonString: non-index array property at ${path}.${key}`);\n\t\t\t\t}\n\t\t\t\tif (key !== \"length\" && descriptor !== undefined && !descriptor.enumerable) {\n\t\t\t\t\tthrow new TypeError(`stableJsonString: non-enumerable array property at ${path}.${key}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst out: JsonValue[] = [];\n\t\t\tfor (let i = 0; i < value.length; i += 1) {\n\t\t\t\tif (!(i in value)) {\n\t\t\t\t\tthrow new TypeError(`stableJsonString: sparse array hole at ${path}[${i}]`);\n\t\t\t\t}\n\t\t\t\tout.push(sortedJsonValue(value[i], seen, `${path}[${i}]`, strictNumbers));\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\t\tif (Object.getOwnPropertySymbols(value).length > 0) {\n\t\t\tthrow new TypeError(`stableJsonString: symbol-keyed properties at ${path}`);\n\t\t}\n\t\tfor (const key of Object.getOwnPropertyNames(value)) {\n\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(value, key);\n\t\t\tif (descriptor !== undefined && (\"get\" in descriptor || \"set\" in descriptor)) {\n\t\t\t\tthrow new TypeError(`stableJsonString: accessor property at ${path}.${key}`);\n\t\t\t}\n\t\t\tif (descriptor !== undefined && !descriptor.enumerable) {\n\t\t\t\tthrow new TypeError(`stableJsonString: non-enumerable property at ${path}.${key}`);\n\t\t\t}\n\t\t}\n\t\tconst out: Record<string, JsonValue> = Object.create(null);\n\t\tfor (const key of Object.keys(value as Record<string, unknown>).sort()) {\n\t\t\tout[key] = sortedJsonValue(\n\t\t\t\t(value as Record<string, unknown>)[key],\n\t\t\t\tseen,\n\t\t\t\t`${path}.${key}`,\n\t\t\t\tstrictNumbers,\n\t\t\t);\n\t\t}\n\t\treturn out;\n\t} finally {\n\t\tseen.delete(value);\n\t}\n}\n\n/** Stable JSON string: object keys sort by code-unit order for deterministic storage/checkpoint bytes. */\nexport function stableJsonString(value: unknown): string {\n\treturn JSON.stringify(sortedJsonValue(value));\n}\n\nfunction strictStableJsonString(value: unknown): string {\n\treturn JSON.stringify(sortedJsonValue(value, new Set<object>(), \"$\", true));\n}\n\n/** Build a JSON codec using stable object-key ordering. */\nexport function jsonCodecFor<T>(): Codec<T> {\n\tconst encoder = new TextEncoder();\n\tconst decoder = new TextDecoder();\n\treturn {\n\t\tencode(value: T): Uint8Array {\n\t\t\treturn encoder.encode(stableJsonString(value));\n\t\t},\n\t\tdecode(bytes: Uint8Array): T {\n\t\t\treturn JSON.parse(decoder.decode(bytes)) as T;\n\t\t},\n\t};\n}\n\n/** Default stable JSON codec for unknown values. */\nexport const jsonCodec: Codec<unknown> = jsonCodecFor<unknown>();\n\nfunction bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n\tif (a.byteLength !== b.byteLength) return false;\n\tfor (let i = 0; i < a.byteLength; i += 1) {\n\t\tif (a[i] !== b[i]) return false;\n\t}\n\treturn true;\n}\n\nfunction hasUnpairedSurrogate(value: string): boolean {\n\tfor (let i = 0; i < value.length; i += 1) {\n\t\tconst code = value.charCodeAt(i);\n\t\tif (code >= 0xd800 && code <= 0xdbff) {\n\t\t\tconst next = value.charCodeAt(i + 1);\n\t\t\tif (next >= 0xdc00 && next <= 0xdfff) {\n\t\t\t\ti += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tif (code >= 0xdc00 && code <= 0xdfff) return true;\n\t}\n\treturn false;\n}\n\nfunction assertNoUnpairedSurrogates(value: unknown, seen = new Set<object>(), path = \"$\"): void {\n\tif (typeof value === \"string\") {\n\t\tif (hasUnpairedSurrogate(value)) {\n\t\t\tthrow new TypeError(`strictJsonCodec: unpaired surrogate at ${path}`);\n\t\t}\n\t\treturn;\n\t}\n\tif (value === null || typeof value !== \"object\") return;\n\tif (seen.has(value)) return;\n\tseen.add(value);\n\ttry {\n\t\tif (Array.isArray(value)) {\n\t\t\tfor (let i = 0; i < value.length; i += 1) {\n\t\t\t\tassertNoUnpairedSurrogates(value[i], seen, `${path}[${i}]`);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tfor (const key of Object.keys(value as Record<string, unknown>)) {\n\t\t\tif (hasUnpairedSurrogate(key)) {\n\t\t\t\tthrow new TypeError(`strictJsonCodec: unpaired surrogate at ${path}.${key}`);\n\t\t\t}\n\t\t\tassertNoUnpairedSurrogates((value as Record<string, unknown>)[key], seen, `${path}.${key}`);\n\t\t}\n\t} finally {\n\t\tseen.delete(value);\n\t}\n}\n\nfunction assertNoDuplicateJsonObjectKeys(text: string): void {\n\tlet index = 0;\n\n\tfunction fail(message: string): never {\n\t\tthrow new TypeError(`strictJsonCodec: ${message}`);\n\t}\n\n\tfunction skipWhitespace(): void {\n\t\twhile (/\\s/.test(text[index] ?? \"\")) index += 1;\n\t}\n\n\tfunction readJsonString(): string {\n\t\tconst start = index;\n\t\tindex += 1;\n\t\twhile (index < text.length) {\n\t\t\tconst ch = text[index];\n\t\t\tif (ch === '\"') {\n\t\t\t\tindex += 1;\n\t\t\t\ttry {\n\t\t\t\t\treturn JSON.parse(text.slice(start, index)) as string;\n\t\t\t\t} catch {\n\t\t\t\t\tfail(\"malformed JSON string\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (ch === \"\\\\\") {\n\t\t\t\tindex += 2;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tindex += 1;\n\t\t}\n\t\tfail(\"unterminated JSON string\");\n\t}\n\n\tfunction consumeLiteral(literal: string): void {\n\t\tif (text.slice(index, index + literal.length) !== literal) {\n\t\t\tfail(`malformed JSON near byte ${index}`);\n\t\t}\n\t\tindex += literal.length;\n\t}\n\n\tfunction consumeNumber(): void {\n\t\tconst match = /^-?(0|[1-9]\\d*)(\\.\\d+)?([eE][+-]?\\d+)?/.exec(text.slice(index));\n\t\tif (!match) fail(`malformed JSON number near byte ${index}`);\n\t\tindex += match[0].length;\n\t}\n\n\tfunction parseValue(path: string): void {\n\t\tskipWhitespace();\n\t\tconst ch = text[index];\n\t\tif (ch === \"{\") {\n\t\t\tparseObject(path);\n\t\t\treturn;\n\t\t}\n\t\tif (ch === \"[\") {\n\t\t\tparseArray(path);\n\t\t\treturn;\n\t\t}\n\t\tif (ch === '\"') {\n\t\t\treadJsonString();\n\t\t\treturn;\n\t\t}\n\t\tif (ch === \"t\") {\n\t\t\tconsumeLiteral(\"true\");\n\t\t\treturn;\n\t\t}\n\t\tif (ch === \"f\") {\n\t\t\tconsumeLiteral(\"false\");\n\t\t\treturn;\n\t\t}\n\t\tif (ch === \"n\") {\n\t\t\tconsumeLiteral(\"null\");\n\t\t\treturn;\n\t\t}\n\t\tif (ch === \"-\" || (ch !== undefined && ch >= \"0\" && ch <= \"9\")) {\n\t\t\tconsumeNumber();\n\t\t\treturn;\n\t\t}\n\t\tfail(`malformed JSON near byte ${index}`);\n\t}\n\n\tfunction parseObject(path: string): void {\n\t\tconst keys = new Set<string>();\n\t\tindex += 1;\n\t\tskipWhitespace();\n\t\tif (text[index] === \"}\") {\n\t\t\tindex += 1;\n\t\t\treturn;\n\t\t}\n\t\twhile (index < text.length) {\n\t\t\tskipWhitespace();\n\t\t\tif (text[index] !== '\"') fail(`expected object key near byte ${index}`);\n\t\t\tconst key = readJsonString();\n\t\t\tif (keys.has(key)) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`strictJsonCodec: duplicate object key ${JSON.stringify(key)} at ${path}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tkeys.add(key);\n\t\t\tskipWhitespace();\n\t\t\tif (text[index] !== \":\") fail(`expected ':' after object key near byte ${index}`);\n\t\t\tindex += 1;\n\t\t\tparseValue(`${path}.${key}`);\n\t\t\tskipWhitespace();\n\t\t\tif (text[index] === \",\") {\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (text[index] === \"}\") {\n\t\t\t\tindex += 1;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfail(`expected ',' or '}' near byte ${index}`);\n\t\t}\n\t\tfail(\"unterminated JSON object\");\n\t}\n\n\tfunction parseArray(path: string): void {\n\t\tindex += 1;\n\t\tskipWhitespace();\n\t\tif (text[index] === \"]\") {\n\t\t\tindex += 1;\n\t\t\treturn;\n\t\t}\n\t\tlet item = 0;\n\t\twhile (index < text.length) {\n\t\t\tparseValue(`${path}[${item}]`);\n\t\t\titem += 1;\n\t\t\tskipWhitespace();\n\t\t\tif (text[index] === \",\") {\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (text[index] === \"]\") {\n\t\t\t\tindex += 1;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfail(`expected ',' or ']' near byte ${index}`);\n\t\t}\n\t\tfail(\"unterminated JSON array\");\n\t}\n\n\tparseValue(\"$\");\n\tskipWhitespace();\n\tif (index !== text.length) fail(`trailing JSON token near byte ${index}`);\n}\n\n/**\n * Build a strict canonical JSON codec (D84/D87/D96).\n * The strict surface rejects malformed UTF-8, duplicate object keys, non-canonical bytes,\n * unpaired surrogates, and values that cannot round-trip through stable JSON.\n */\nexport function strictJsonCodecFor<T>(): Codec<T> {\n\tconst encoder = new TextEncoder();\n\tconst decoder = new TextDecoder(\"utf-8\", { fatal: true });\n\treturn {\n\t\tencode(value: T): Uint8Array {\n\t\t\tassertNoUnpairedSurrogates(value);\n\t\t\treturn encoder.encode(strictStableJsonString(value));\n\t\t},\n\t\tdecode(bytes: Uint8Array): T {\n\t\t\tconst text = decoder.decode(bytes);\n\t\t\tassertNoDuplicateJsonObjectKeys(text);\n\t\t\tconst decoded = JSON.parse(text) as unknown;\n\t\t\tassertNoUnpairedSurrogates(decoded);\n\t\t\tconst canonical = encoder.encode(strictStableJsonString(decoded));\n\t\t\tif (!bytesEqual(bytes, canonical)) {\n\t\t\t\tthrow new TypeError(\"strictJsonCodec: bytes are not canonical stable JSON\");\n\t\t\t}\n\t\t\treturn decoded as T;\n\t\t},\n\t};\n}\n\n/** Default strict canonical JSON codec for unknown values. */\nexport const strictJsonCodec: Codec<unknown> = strictJsonCodecFor<unknown>();\n\n/** D113 neutral helper for strict canonical JSON UTF-8 bytes. */\nexport function strictCanonicalJsonBytes(value: unknown): Uint8Array {\n\treturn strictJsonCodec.encode(value);\n}\n\n/** Validate and normalize a host value into strict canonical JSON data. */\nexport function assertStrictJsonValue(value: unknown, label = \"strictJsonValue\"): StrictJsonValue {\n\ttry {\n\t\treturn strictJsonCodec.decode(strictJsonCodec.encode(value)) as StrictJsonValue;\n\t} catch (cause) {\n\t\tconst message = cause instanceof Error ? cause.message : String(cause);\n\t\tthrow new TypeError(`${label}: value is not strict JSON compatible: ${message}`, { cause });\n\t}\n}\n\n/** Validate and normalize a host value into a strict canonical JSON object. */\nexport function assertStrictJsonObject(\n\tvalue: unknown,\n\tlabel = \"strictJsonObject\",\n): StrictJsonObject {\n\tconst normalized = assertStrictJsonValue(value, label);\n\tif (normalized === null || typeof normalized !== \"object\" || Array.isArray(normalized)) {\n\t\tthrow new TypeError(`${label}: value must be a strict JSON object`);\n\t}\n\treturn normalized as StrictJsonObject;\n}\n","import {\n\thasStoragePutIfAbsent,\n\thasStorageVersioned,\n\tmemoryBackend,\n\ttype StorageBackend,\n\ttype StorageGeneration,\n} from \"./backend.js\";\nimport type { Codec } from \"./codec.js\";\nimport { jsonCodecFor } from \"./codec.js\";\n\n/** Codec-backed key/value tier over a passive byte backend (D82). */\nexport interface KvStorageTier<T = unknown> {\n\tget(key: string): Promise<T | undefined>;\n\tset(key: string, value: T): Promise<void>;\n\tputIfAbsent?(key: string, value: T): Promise<boolean>;\n\tgetVersioned?(key: string): Promise<KvVersionedRead<T>>;\n\tsetIfMatch?(key: string, value: T, generation: StorageGeneration): Promise<boolean>;\n\tdelete(key: string): Promise<void>;\n\tlist(prefix?: string): Promise<readonly string[]>;\n}\n\n/** Typed D85 conditional-create capability over a KV tier. */\nexport interface PutIfAbsentKvStorageTier<T = unknown> extends KvStorageTier<T> {\n\tputIfAbsent(key: string, value: T): Promise<boolean>;\n}\n\n/** Opaque D108 per-key generation token for typed KV versioned reads. */\nexport type KvGeneration = StorageGeneration;\n\n/** D108 versioned typed read result with explicit present/absent observations. */\nexport type KvVersionedRead<T> =\n\t| {\n\t\t\treadonly kind: \"hit\";\n\t\t\treadonly value: T;\n\t\t\treadonly generation: KvGeneration;\n\t }\n\t| {\n\t\t\treadonly kind: \"miss\";\n\t\t\treadonly generation: KvGeneration;\n\t };\n\n/** Typed D108 versioned read + generation-conditional set capability over a KV tier. */\nexport interface VersionedKvStorageTier<T = unknown> extends KvStorageTier<T> {\n\tgetVersioned(key: string): Promise<KvVersionedRead<T>>;\n\tsetIfMatch(key: string, value: T, generation: KvGeneration): Promise<boolean>;\n}\n\n/** Runtime guard for typed KV tiers that expose D85 conditional create. */\nexport function hasKvPutIfAbsent<T>(tier: KvStorageTier<T>): tier is PutIfAbsentKvStorageTier<T> {\n\treturn typeof tier.putIfAbsent === \"function\";\n}\n\n/** Require D85 conditional-create support and produce a clear adapter error when absent. */\nexport function requireKvPutIfAbsent<T>(\n\ttier: KvStorageTier<T>,\n\tlabel = \"kvStorage\",\n): PutIfAbsentKvStorageTier<T> {\n\tif (!hasKvPutIfAbsent(tier)) {\n\t\tthrow new Error(`${label}: KV tier does not support putIfAbsent`);\n\t}\n\treturn tier;\n}\n\n/** Runtime guard for typed KV tiers that expose D108 versioned read/set-if-match. */\nexport function hasKvVersioned<T>(tier: KvStorageTier<T>): tier is VersionedKvStorageTier<T> {\n\treturn typeof tier.getVersioned === \"function\" && typeof tier.setIfMatch === \"function\";\n}\n\n/** Require D108 versioned KV support and produce a clear adapter error when absent. */\nexport function requireKvVersioned<T>(\n\ttier: KvStorageTier<T>,\n\tlabel = \"kvStorage\",\n): VersionedKvStorageTier<T> {\n\tif (!hasKvVersioned(tier)) {\n\t\tthrow new Error(`${label}: KV tier does not support versioned get/set-if-match`);\n\t}\n\treturn tier;\n}\n\n/** Options for wrapping a byte backend as a typed KV tier. */\nexport interface KvStorageOptions<T> {\n\tbackend: StorageBackend;\n\tcodec?: Codec<T>;\n}\n\nfunction defer<T>(fn: () => T | PromiseLike<T>): Promise<T> {\n\treturn Promise.resolve().then(fn);\n}\n\n/** Build a typed KV tier from a byte backend and codec. */\nexport function kvStorage<T = unknown>(opts: KvStorageOptions<T>): KvStorageTier<T> {\n\tconst codec = opts.codec ?? jsonCodecFor<T>();\n\tconst { backend } = opts;\n\tconst tier: KvStorageTier<T> = {\n\t\tget(key) {\n\t\t\treturn defer(() => backend.get(key)).then((bytes) =>\n\t\t\t\tbytes === undefined ? undefined : codec.decode(bytes),\n\t\t\t);\n\t\t},\n\t\tset(key, value) {\n\t\t\treturn defer(() => backend.put(key, codec.encode(value))).then(() => undefined);\n\t\t},\n\t\tdelete(key) {\n\t\t\treturn defer(() => backend.delete?.(key)).then(() => undefined);\n\t\t},\n\t\tlist(prefix = \"\") {\n\t\t\treturn defer(() => {\n\t\t\t\tif (!backend.list) throw new Error(\"kvStorage.list: backend does not support listing\");\n\t\t\t\treturn backend.list(prefix);\n\t\t\t}).then((keys) => [...keys].sort());\n\t\t},\n\t};\n\tlet out = tier;\n\tif (hasStoragePutIfAbsent(backend)) {\n\t\tout = {\n\t\t\t...out,\n\t\t\tputIfAbsent(key, value) {\n\t\t\t\treturn defer(() => backend.putIfAbsent(key, codec.encode(value)));\n\t\t\t},\n\t\t};\n\t}\n\tif (hasStorageVersioned(backend)) {\n\t\tout = {\n\t\t\t...out,\n\t\t\tgetVersioned(key) {\n\t\t\t\treturn defer(() => backend.getVersioned(key)).then((result) => {\n\t\t\t\t\tif (result.kind === \"miss\") return { kind: \"miss\", generation: result.generation };\n\t\t\t\t\treturn {\n\t\t\t\t\t\tkind: \"hit\",\n\t\t\t\t\t\tvalue: codec.decode(result.value),\n\t\t\t\t\t\tgeneration: result.generation,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t},\n\t\t\tsetIfMatch(key, value, generation) {\n\t\t\t\treturn defer(() => backend.setIfMatch(key, codec.encode(value), generation));\n\t\t\t},\n\t\t};\n\t}\n\treturn out;\n}\n\n/** Create an in-memory typed KV tier. */\nexport function memoryKv<T = unknown>(codec: Codec<T> = jsonCodecFor<T>()): KvStorageTier<T> {\n\treturn kvStorage({ backend: memoryBackend(), codec });\n}\n\n/** Create an in-memory typed KV tier preloaded from a record. */\nexport function dictKv<T = unknown>(\n\tentries: Record<string, T> = {},\n\tcodec: Codec<T> = jsonCodecFor<T>(),\n): KvStorageTier<T> {\n\tconst backend = memoryBackend();\n\tconst kv = kvStorage({ backend, codec });\n\tfor (const [key, value] of Object.entries(entries)) {\n\t\tbackend.put(key, codec.encode(value as T));\n\t}\n\treturn kv;\n}\n\n/** Convenience wrapper for deterministic prefix listing. */\nexport function listByPrefix<T>(tier: KvStorageTier<T>, prefix = \"\"): Promise<readonly string[]> {\n\treturn tier.list(prefix);\n}\n","import type { KvStorageTier } from \"./kv.js\";\nimport { memoryKv, requireKvPutIfAbsent } from \"./kv.js\";\n\nexport const APPEND_LOG_SEQ_PAD = 20;\n\n/** One append-log record with its storage key and monotonic sequence. */\nexport interface AppendLogEntry<T> {\n\treadonly key: string;\n\treadonly seq: number;\n\treadonly value: T;\n}\n\n/** Cursor and page-size options for append-log reads. */\nexport interface AppendLogReadOptions {\n\t/** Return entries with seq > after. */\n\tafter?: number;\n\tlimit?: number;\n}\n\n/** One bounded append-log page with the cursor for the next read. */\nexport interface AppendLogPage<T> {\n\treadonly entries: readonly AppendLogEntry<T>[];\n\treadonly nextAfter: number;\n\treadonly done: boolean;\n}\n\n/**\n * Append-only tier for durable event/change logs (D82), not graph restore replay.\n *\n * This first-cut helper serializes operations within one handle. Concurrent writers sharing the\n * same KV prefix need an external single-writer discipline or a future CAS-capable backend.\n */\nexport interface AppendLogStorageTier<T = unknown> {\n\tappend(value: T): Promise<AppendLogEntry<T>>;\n\tread(opts?: AppendLogReadOptions): Promise<readonly AppendLogEntry<T>[]>;\n\ttruncateAfter(seq: number): Promise<void>;\n\tsize(): Promise<number>;\n}\n\n/** D85 multi-writer append log; requires a passive conditional-create KV capability. */\nexport type MultiWriterAppendLogStorageTier<T = unknown> = AppendLogStorageTier<T>;\n\n/** Build the deterministic storage key for an append-log sequence number. */\nexport function appendLogKey(prefix: string, seq: number): string {\n\tif (!Number.isSafeInteger(seq) || seq < 0) {\n\t\tthrow new RangeError(`appendLogKey: seq must be a non-negative safe integer, got ${seq}`);\n\t}\n\treturn `${prefix}/${seq.toString().padStart(APPEND_LOG_SEQ_PAD, \"0\")}`;\n}\n\nfunction seqFromKey(prefix: string, key: string): number {\n\tconst head = `${prefix}/`;\n\tif (!key.startsWith(head)) throw new Error(`append log key outside prefix: ${key}`);\n\tconst raw = key.slice(head.length);\n\tif (!/^\\d+$/.test(raw)) {\n\t\tthrow new Error(`append log key has a non-numeric sequence: ${key}`);\n\t}\n\tif (raw.length !== APPEND_LOG_SEQ_PAD) {\n\t\tthrow new Error(`append log key sequence must be ${APPEND_LOG_SEQ_PAD} padded digits: ${key}`);\n\t}\n\tconst seq = Number(raw);\n\tif (!Number.isSafeInteger(seq)) {\n\t\tthrow new Error(`append log key sequence is outside the safe integer range: ${key}`);\n\t}\n\treturn seq;\n}\n\nfunction nextSeqFromKeys(prefix: string, keys: readonly string[]): number {\n\tif (keys.length === 0) return 0;\n\tconst next = Math.max(...keys.map((key) => seqFromKey(prefix, key))) + 1;\n\tif (!Number.isSafeInteger(next)) {\n\t\tthrow new RangeError(`append log next sequence is outside the safe integer range: ${prefix}`);\n\t}\n\treturn next;\n}\n\nfunction sizeFromKeys(prefix: string, keys: readonly string[]): number {\n\tfor (const key of keys) seqFromKey(prefix, key);\n\treturn keys.length;\n}\n\nfunction validateReadOptions(opts: AppendLogReadOptions): {\n\tafter: number;\n\tlimit: number;\n} {\n\tconst after = opts.after ?? -1;\n\tconst limit = opts.limit ?? Number.POSITIVE_INFINITY;\n\tif (!Number.isSafeInteger(after) || after < -1) {\n\t\tthrow new RangeError(\n\t\t\t`appendLogStorage.read: after must be an integer cursor >= -1, got ${after}`,\n\t\t);\n\t}\n\tif (limit !== Number.POSITIVE_INFINITY && (!Number.isSafeInteger(limit) || limit < 0)) {\n\t\tthrow new RangeError(\n\t\t\t`appendLogStorage.read: limit must be a non-negative safe integer or Infinity, got ${limit}`,\n\t\t);\n\t}\n\treturn { after, limit };\n}\n\nfunction validatePageLimit(limit: number): number {\n\tif (!Number.isSafeInteger(limit) || limit < 1) {\n\t\tthrow new RangeError(`readAppendLogPage: limit must be a positive safe integer, got ${limit}`);\n\t}\n\tif (limit >= Number.MAX_SAFE_INTEGER) {\n\t\tthrow new RangeError(\"readAppendLogPage: limit must leave room for one lookahead entry\");\n\t}\n\treturn limit;\n}\n\nfunction readAppendLogEntries<T>(\n\tkv: KvStorageTier<T>,\n\tprefix: string,\n\topts: AppendLogReadOptions,\n): Promise<readonly AppendLogEntry<T>[]> {\n\tconst { after, limit } = validateReadOptions(opts);\n\treturn kv.list(`${prefix}/`).then((listed) => {\n\t\tconst keys = listed\n\t\t\t.map((key) => ({ key, seq: seqFromKey(prefix, key) }))\n\t\t\t.filter(({ seq }) => seq > after)\n\t\t\t.sort((a, b) => a.seq - b.seq)\n\t\t\t.slice(0, limit);\n\t\treturn Promise.all(\n\t\t\tkeys.map(\n\t\t\t\t({ key, seq }): Promise<AppendLogEntry<T> | undefined> =>\n\t\t\t\t\tkv.get(key).then((value) => {\n\t\t\t\t\t\tif (value === undefined) {\n\t\t\t\t\t\t\tthrow new Error(`append log listed key is missing: ${key}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { key, seq, value };\n\t\t\t\t\t}),\n\t\t\t),\n\t\t).then((entries) => {\n\t\t\tconst out: AppendLogEntry<T>[] = [];\n\t\t\tfor (const entry of entries) if (entry !== undefined) out.push(entry);\n\t\t\treturn out;\n\t\t});\n\t});\n}\n\n/** Read one ordered append-log page without assigning replay or restore semantics. */\nexport function readAppendLogPage<T>(\n\tlog: AppendLogStorageTier<T>,\n\topts: AppendLogReadOptions = {},\n): Promise<AppendLogPage<T>> {\n\tconst { after, limit } = validateReadOptions({ after: opts.after, limit: opts.limit ?? 100 });\n\tconst pageLimit = validatePageLimit(limit);\n\treturn log.read({ after, limit: pageLimit + 1 }).then((entries) => {\n\t\tconst visible = entries.slice(0, pageLimit);\n\t\tconst last = visible[visible.length - 1];\n\t\treturn {\n\t\t\tentries: visible,\n\t\t\tnextAfter: last?.seq ?? after,\n\t\t\tdone: entries.length <= pageLimit,\n\t\t};\n\t});\n}\n\nfunction deleteAppendLogEntriesAfter<T>(\n\tkv: KvStorageTier<T>,\n\tprefix: string,\n\tseq: number,\n): Promise<void> {\n\treturn kv\n\t\t.list(`${prefix}/`)\n\t\t.then((keys) =>\n\t\t\tPromise.all(keys.filter((key) => seqFromKey(prefix, key) > seq).map((key) => kv.delete(key))),\n\t\t)\n\t\t.then(() => kv.list(`${prefix}/`))\n\t\t.then(() => undefined);\n}\n\n/** Options for a typed append log over a KV tier. */\nexport interface AppendLogOptions<T> {\n\tkv: KvStorageTier<T>;\n\tprefix?: string;\n}\n\n/** Options for D85 multi-writer append logs over conditional-create capable KV. */\nexport interface MultiWriterAppendLogOptions<T> extends AppendLogOptions<T> {\n\t/** Bound retry work before refreshing the listed tail after another writer wins slots. */\n\tmaxAttempts?: number;\n}\n\n/**\n * Build a single-writer append-only log over a KV tier, serializing all operations in call order\n * for this handle. D85 multi-handle concurrent appends require multiWriterAppendLogStorage.\n */\nexport function appendLogStorage<T = unknown>(opts: AppendLogOptions<T>): AppendLogStorageTier<T> {\n\tconst { kv, prefix = \"event-log\" } = opts;\n\tlet tail: Promise<unknown> = Promise.resolve();\n\n\tfunction initNextSeq(): Promise<number> {\n\t\treturn kv.list(`${prefix}/`).then((keys) => {\n\t\t\treturn nextSeqFromKeys(prefix, keys);\n\t\t});\n\t}\n\n\tfunction enqueue<R>(task: () => Promise<R>): Promise<R> {\n\t\tconst run = tail.then(task, task);\n\t\ttail = run.then(\n\t\t\t() => undefined,\n\t\t\t() => undefined,\n\t\t);\n\t\treturn run;\n\t}\n\n\treturn {\n\t\tappend(value) {\n\t\t\treturn enqueue(() =>\n\t\t\t\tinitNextSeq().then((seq) => {\n\t\t\t\t\tconst key = appendLogKey(prefix, seq);\n\t\t\t\t\treturn kv.set(key, value).then(() => {\n\t\t\t\t\t\treturn { key, seq, value };\n\t\t\t\t\t});\n\t\t\t\t}),\n\t\t\t);\n\t\t},\n\t\tread(opts = {}) {\n\t\t\treturn enqueue(() => readAppendLogEntries(kv, prefix, opts));\n\t\t},\n\t\ttruncateAfter(seq) {\n\t\t\treturn enqueue(() => deleteAppendLogEntriesAfter(kv, prefix, seq));\n\t\t},\n\t\tsize() {\n\t\t\treturn enqueue(() => kv.list(`${prefix}/`).then((keys) => sizeFromKeys(prefix, keys)));\n\t\t},\n\t};\n}\n\n/**\n * Build a D85 multi-writer append log over a conditional-create capable KV tier.\n *\n * Sequence allocation is passive storage work: each writer proposes a padded key and retries the\n * next key when another writer already created that slot. This does not provide general CAS,\n * locks, leases, transactions, unsafe truncation, WAL replay, or graph restore semantics.\n */\nexport function multiWriterAppendLogStorage<T = unknown>(\n\topts: MultiWriterAppendLogOptions<T>,\n): MultiWriterAppendLogStorageTier<T> {\n\tconst { kv, prefix = \"event-log\", maxAttempts = 1024 } = opts;\n\tconst capableKv = requireKvPutIfAbsent(kv, \"multiWriterAppendLogStorage\");\n\tlet tail: Promise<unknown> = Promise.resolve();\n\n\tif (!Number.isSafeInteger(maxAttempts) || maxAttempts < 1) {\n\t\tthrow new RangeError(\n\t\t\t`multiWriterAppendLogStorage: maxAttempts must be a positive safe integer, got ${maxAttempts}`,\n\t\t);\n\t}\n\n\tfunction initNextSeq(): Promise<number> {\n\t\treturn kv.list(`${prefix}/`).then((keys) => nextSeqFromKeys(prefix, keys));\n\t}\n\n\tfunction enqueue<R>(task: () => Promise<R>): Promise<R> {\n\t\tconst run = tail.then(task, task);\n\t\ttail = run.then(\n\t\t\t() => undefined,\n\t\t\t() => undefined,\n\t\t);\n\t\treturn run;\n\t}\n\n\treturn {\n\t\tappend(value) {\n\t\t\treturn enqueue(() =>\n\t\t\t\tinitNextSeq().then((startSeq) => {\n\t\t\t\t\tlet seq = startSeq;\n\t\t\t\t\tlet attempt = 0;\n\t\t\t\t\tconst tryNext = (): Promise<AppendLogEntry<T>> => {\n\t\t\t\t\t\tif (attempt >= maxAttempts) {\n\t\t\t\t\t\t\treturn initNextSeq().then((refreshedSeq) => {\n\t\t\t\t\t\t\t\tseq = Math.max(seq, refreshedSeq);\n\t\t\t\t\t\t\t\tattempt = 0;\n\t\t\t\t\t\t\t\treturn tryNext();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tattempt += 1;\n\t\t\t\t\t\tconst key = appendLogKey(prefix, seq);\n\t\t\t\t\t\treturn capableKv.putIfAbsent(key, value).then((created) => {\n\t\t\t\t\t\t\tif (created) return { key, seq, value };\n\t\t\t\t\t\t\tseq += 1;\n\t\t\t\t\t\t\tif (!Number.isSafeInteger(seq)) {\n\t\t\t\t\t\t\t\tthrow new RangeError(\n\t\t\t\t\t\t\t\t\t`append log next sequence is outside the safe integer range: ${prefix}`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn tryNext();\n\t\t\t\t\t\t});\n\t\t\t\t\t};\n\t\t\t\t\treturn tryNext();\n\t\t\t\t}),\n\t\t\t);\n\t\t},\n\t\tread(opts = {}) {\n\t\t\treturn enqueue(() => readAppendLogEntries(kv, prefix, opts));\n\t\t},\n\t\ttruncateAfter(seq) {\n\t\t\treturn enqueue(() => {\n\t\t\t\tif (!Number.isSafeInteger(seq) || seq < -1) {\n\t\t\t\t\tthrow new RangeError(\n\t\t\t\t\t\t`multiWriterAppendLogStorage.truncateAfter: seq must be an integer cursor >= -1, got ${seq}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"multiWriterAppendLogStorage.truncateAfter: unsupported without a stronger compaction capability\",\n\t\t\t\t);\n\t\t\t});\n\t\t},\n\t\tsize() {\n\t\t\treturn enqueue(() => kv.list(`${prefix}/`).then((keys) => sizeFromKeys(prefix, keys)));\n\t\t},\n\t};\n}\n\n/** Create an in-memory append log. */\nexport function memoryAppendLog<T = unknown>(prefix?: string): AppendLogStorageTier<T> {\n\treturn appendLogStorage({ kv: memoryKv<T>(), prefix });\n}\n\n/** Create an in-memory D85 multi-writer append log. */\nexport function memoryMultiWriterAppendLog<T = unknown>(\n\tprefix?: string,\n): MultiWriterAppendLogStorageTier<T> {\n\treturn multiWriterAppendLogStorage({ kv: memoryKv<T>(), prefix });\n}\n","/**\n * Storage scalar helpers (D88): host BigInt in memory, canonical decimal strings on JSON/storage.\n */\n\n/** Canonical decimal integer string; no leading zeroes, and no negative zero. */\nexport type DecimalIntegerString = string;\n\n/** Canonical non-negative decimal integer string. */\nexport type NonNegativeDecimalIntegerString = DecimalIntegerString;\n\nconst DECIMAL_INTEGER_RE = /^(0|-?[1-9]\\d*)$/;\nconst NON_NEGATIVE_DECIMAL_INTEGER_RE = /^(0|[1-9]\\d*)$/;\n\n/** Test whether a value is a canonical decimal integer string. */\nexport function isDecimalIntegerString(value: unknown): value is DecimalIntegerString {\n\treturn typeof value === \"string\" && DECIMAL_INTEGER_RE.test(value);\n}\n\n/** Test whether a value is a canonical non-negative decimal integer string. */\nexport function isNonNegativeDecimalIntegerString(\n\tvalue: unknown,\n): value is NonNegativeDecimalIntegerString {\n\treturn typeof value === \"string\" && NON_NEGATIVE_DECIMAL_INTEGER_RE.test(value);\n}\n\n/** Assert a canonical decimal integer string and return it typed. */\nexport function assertDecimalIntegerString(\n\tvalue: unknown,\n\tlabel = \"decimal integer\",\n): DecimalIntegerString {\n\tif (!isDecimalIntegerString(value)) {\n\t\tthrow new TypeError(`${label} must be a canonical decimal integer string`);\n\t}\n\treturn value;\n}\n\n/** Assert a canonical non-negative decimal integer string and return it typed. */\nexport function assertNonNegativeDecimalIntegerString(\n\tvalue: unknown,\n\tlabel = \"decimal integer\",\n): NonNegativeDecimalIntegerString {\n\tif (!isNonNegativeDecimalIntegerString(value)) {\n\t\tthrow new TypeError(`${label} must be a canonical non-negative decimal integer string`);\n\t}\n\treturn value;\n}\n\n/** Convert a host BigInt to the canonical decimal storage scalar. */\nexport function bigIntToDecimalString(value: bigint): DecimalIntegerString {\n\treturn value.toString();\n}\n\n/** Convert a non-negative host BigInt to the canonical non-negative decimal storage scalar. */\nexport function bigIntToNonNegativeDecimalString(value: bigint): NonNegativeDecimalIntegerString {\n\tif (value < 0n) {\n\t\tthrow new TypeError(\"decimal integer must be non-negative\");\n\t}\n\treturn value.toString();\n}\n\n/** Parse a canonical decimal storage scalar into host BigInt. */\nexport function decimalStringToBigInt(value: DecimalIntegerString): bigint {\n\treturn BigInt(assertDecimalIntegerString(value));\n}\n\n/** Parse a canonical non-negative decimal storage scalar into host BigInt. */\nexport function nonNegativeDecimalStringToBigInt(value: NonNegativeDecimalIntegerString): bigint {\n\treturn BigInt(assertNonNegativeDecimalIntegerString(value));\n}\n","/**\n * Storage change envelopes (D82): persistence framing for raw graph/data-structure deltas.\n */\n\nimport type { Codec } from \"./codec.js\";\nimport { strictJsonCodecFor } from \"./codec.js\";\nimport {\n\tassertNonNegativeDecimalIntegerString,\n\tbigIntToNonNegativeDecimalString,\n\ttype NonNegativeDecimalIntegerString,\n} from \"./scalar.js\";\n\n/** Storage-side lifecycle namespace for change envelopes; presentation framing only. */\nexport type ChangeLifecycle = \"spec\" | \"data\" | \"ownership\";\n\n/** D84 cross-runtime wall-clock nanosecond metadata: canonical non-negative decimal string. */\nexport type StorageTimestampNs = NonNegativeDecimalIntegerString;\n\n/** Persistence envelope for raw graph/data-structure deltas (D82), not restore semantics. */\nexport interface ChangeEnvelope<T = unknown> {\n\treadonly lifecycle: ChangeLifecycle;\n\treadonly structure: string;\n\treadonly version: number | string;\n\treadonly t_ns: StorageTimestampNs;\n\treadonly seq?: number;\n\treadonly change: T;\n}\n\n/** Options for wrapping a raw change in a storage envelope. */\nexport interface ChangeEnvelopeOptions {\n\tlifecycle?: ChangeLifecycle;\n\tstructure: string;\n\tversion?: number | string;\n\tt_ns?: StorageTimestampNs;\n\tseq?: number;\n}\n\n/** Wall-clock nanoseconds for storage metadata. */\nexport function nowNs(): StorageTimestampNs {\n\treturn bigIntToNonNegativeDecimalString(BigInt(Date.now()) * 1_000_000n);\n}\n\n/** Wrap a raw change payload in a D82 storage envelope. */\nexport function envelopeChange<T>(change: T, opts: ChangeEnvelopeOptions): ChangeEnvelope<T> {\n\tconst envelope = {\n\t\tlifecycle: opts.lifecycle ?? \"data\",\n\t\tstructure: opts.structure,\n\t\tversion: opts.version ?? 1,\n\t\tt_ns: opts.t_ns ?? nowNs(),\n\t\t...(opts.seq === undefined ? {} : { seq: opts.seq }),\n\t\tchange,\n\t};\n\treturn assertChangeEnvelope<T>(envelope);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isLifecycle(value: unknown): value is ChangeLifecycle {\n\treturn value === \"spec\" || value === \"data\" || value === \"ownership\";\n}\n\n/** Validate a decoded D82 change envelope and return it with typed payload. */\nexport function assertChangeEnvelope<T = unknown>(value: unknown): ChangeEnvelope<T> {\n\tif (!isRecord(value)) throw new TypeError(\"changeEnvelopeCodec: frame must be an object\");\n\tif (!isLifecycle(value.lifecycle)) {\n\t\tthrow new TypeError(\"changeEnvelopeCodec: lifecycle must be spec, data, or ownership\");\n\t}\n\tif (typeof value.structure !== \"string\" || value.structure.length === 0) {\n\t\tthrow new TypeError(\"changeEnvelopeCodec: structure must be a non-empty string\");\n\t}\n\tif (\n\t\t(typeof value.version !== \"number\" || !Number.isFinite(value.version)) &&\n\t\ttypeof value.version !== \"string\"\n\t) {\n\t\tthrow new TypeError(\"changeEnvelopeCodec: version must be a finite number or string\");\n\t}\n\tassertNonNegativeDecimalIntegerString(value.t_ns, \"changeEnvelopeCodec: t_ns\");\n\tif (value.seq !== undefined && (!Number.isSafeInteger(value.seq) || (value.seq as number) < 0)) {\n\t\tthrow new TypeError(\n\t\t\t\"changeEnvelopeCodec: seq must be a non-negative safe integer when present\",\n\t\t);\n\t}\n\tif (!Object.hasOwn(value, \"change\")) {\n\t\tthrow new TypeError(\"changeEnvelopeCodec: change payload is required\");\n\t}\n\treturn value as unknown as ChangeEnvelope<T>;\n}\n\n/** Stable JSON codec for D82 change envelopes, with strict framing checks. */\nexport function changeEnvelopeCodec<T = unknown>(): Codec<ChangeEnvelope<T>> {\n\tconst codec = strictJsonCodecFor<unknown>();\n\treturn {\n\t\tencode(value) {\n\t\t\treturn codec.encode(assertChangeEnvelope(value));\n\t\t},\n\t\tdecode(bytes) {\n\t\t\treturn assertChangeEnvelope<T>(codec.decode(bytes));\n\t\t},\n\t};\n}\n","import { strictCanonicalJsonBytes } from \"../json/codec.js\";\nimport type { KvStorageTier } from \"./kv.js\";\n\n/** Content-addressed KV access mode for D82 passive storage helpers. */\nexport type ContentAddressedMode = \"read\" | \"write\" | \"read-write\" | \"read-strict\";\n\n/** Error thrown when a read-strict content-addressed lookup misses. */\nexport class ContentAddressedMissError extends Error {\n\treadonly key: string;\n\treadonly context: unknown;\n\n\tconstructor(key: string, context: unknown) {\n\t\tsuper(`content-addressed lookup miss in read-strict mode: ${key}`);\n\t\tthis.name = \"ContentAddressedMissError\";\n\t\tthis.key = key;\n\t\tthis.context = context;\n\t}\n}\n\n/** Options for {@link contentAddressedKv}. */\nexport interface ContentAddressedKvOptions<Ctx, V> {\n\t/** Underlying D82 KV tier. */\n\tkv: KvStorageTier<V>;\n\t/** Select the JSON-encodable data that participates in the content key. */\n\tkeyContext?: (ctx: Ctx) => unknown;\n\t/** Optional namespace prefix for sharing one KV tier across consumers. */\n\tkeyPrefix?: string;\n\t/** Access mode. Defaults to read-write. */\n\tmode?: ContentAddressedMode;\n}\n\n/** Content-addressed helper handle over a D82 KV tier. */\nexport interface ContentAddressedKv<Ctx, V> {\n\tkeyFor(ctx: Ctx): Promise<string>;\n\tlookup(ctx: Ctx): Promise<V | undefined>;\n\tstore(ctx: Ctx, value: V): Promise<void>;\n\tforget(ctx: Ctx): Promise<void>;\n}\n\nexport type ContentAddressedStorageOptions<Ctx, V> = ContentAddressedKvOptions<Ctx, V>;\nexport type ContentAddressedStorage<Ctx, V> = ContentAddressedKv<Ctx, V>;\n\nconst SHA_256 = \"SHA-256\";\nconst HEX_TABLE = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, \"0\"));\n\nfunction bytesToHex(bytes: Uint8Array): string {\n\tlet out = \"\";\n\tfor (const byte of bytes) out += HEX_TABLE[byte];\n\treturn out;\n}\n\nfunction sha256Hex(data: Uint8Array): Promise<string> {\n\tconst digestInput = Uint8Array.from(data);\n\treturn globalThis.crypto.subtle\n\t\t.digest(SHA_256, digestInput)\n\t\t.then((buf) => bytesToHex(new Uint8Array(buf)));\n}\n\n/** Build a content-addressed helper over a D82 KV tier. */\nexport function contentAddressedKv<Ctx, V>(\n\topts: ContentAddressedKvOptions<Ctx, V>,\n): ContentAddressedKv<Ctx, V> {\n\tconst { kv, keyContext, keyPrefix, mode = \"read-write\" } = opts;\n\tconst contextForKey = keyContext ?? ((ctx: Ctx) => ctx as unknown);\n\n\tfunction keyFor(ctx: Ctx): Promise<string> {\n\t\tlet bytes: Uint8Array;\n\t\ttry {\n\t\t\tbytes = strictCanonicalJsonBytes(contextForKey(ctx));\n\t\t} catch (err) {\n\t\t\treturn Promise.resolve().then(() => {\n\t\t\t\tthrow err;\n\t\t\t});\n\t\t}\n\t\treturn Promise.resolve()\n\t\t\t.then(() => sha256Hex(bytes))\n\t\t\t.then((hex) => (keyPrefix ? `${keyPrefix}:${hex}` : hex));\n\t}\n\n\treturn {\n\t\tkeyFor,\n\t\tlookup(ctx) {\n\t\t\tif (mode === \"write\") return Promise.resolve(undefined);\n\t\t\treturn keyFor(ctx).then((key) =>\n\t\t\t\tkv.get(key).then((value) => {\n\t\t\t\t\tif (value === undefined && mode === \"read-strict\") {\n\t\t\t\t\t\tthrow new ContentAddressedMissError(key, ctx);\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}),\n\t\t\t);\n\t\t},\n\t\tstore(ctx, value) {\n\t\t\tif (mode === \"read\") return Promise.resolve();\n\t\t\treturn keyFor(ctx).then((key) => kv.set(key, value));\n\t\t},\n\t\tforget(ctx) {\n\t\t\tif (mode === \"read\" || mode === \"write\") return Promise.resolve();\n\t\t\treturn keyFor(ctx).then((key) => kv.delete(key));\n\t\t},\n\t};\n}\n\n/** Alias for consumers that name the same D82 helper by storage role rather than KV tier. */\nexport function contentAddressedStorage<Ctx, V>(\n\topts: ContentAddressedStorageOptions<Ctx, V>,\n): ContentAddressedStorage<Ctx, V> {\n\treturn contentAddressedKv(opts);\n}\n","import type { AppendLogPage, AppendLogReadOptions, AppendLogStorageTier } from \"./append-log.js\";\nimport { readAppendLogPage } from \"./append-log.js\";\nimport { assertChangeEnvelope, type ChangeEnvelope, envelopeChange } from \"./change.js\";\nimport type { Codec } from \"./codec.js\";\nimport { strictJsonCodecFor } from \"./codec.js\";\n\nexport interface ObserveEventLike {\n\treadonly seq: number;\n\treadonly path: string;\n}\n\n/** Storage frame for one Graph.observe() event, preserving graph observe sequence. */\nexport interface ObserveEventFrame<T = unknown> extends ChangeEnvelope<T> {\n\treadonly structure: \"observe-event\";\n\treadonly observeSeq: number;\n\treadonly path: string;\n\treadonly stream?: string;\n}\n\n/** One ordered observe-event log page. It is not graph projection or restore replay. */\nexport type ObserveEventLogPage<T = unknown> = AppendLogPage<ObserveEventFrame<T>>;\n\n/** Create a storage frame from one observe event and mapped payload. */\nexport function observeEventFrame<T>(\n\tevent: ObserveEventLike,\n\tvalue: T,\n\topts: { stream?: string } = {},\n): ObserveEventFrame<T> {\n\treturn {\n\t\t...envelopeChange(value, {\n\t\t\tlifecycle: \"data\",\n\t\t\tstructure: \"observe-event\",\n\t\t\tversion: 1,\n\t\t\tseq: event.seq,\n\t\t}),\n\t\tstructure: \"observe-event\",\n\t\tobserveSeq: event.seq,\n\t\tpath: event.path,\n\t\t...(opts.stream === undefined ? {} : { stream: opts.stream }),\n\t};\n}\n\n/** Validate a decoded D82 observe-event storage frame. */\nexport function assertObserveEventFrame<T = unknown>(value: unknown): ObserveEventFrame<T> {\n\tconst frame = assertChangeEnvelope<T>(value);\n\tconst record = frame as unknown as Record<string, unknown>;\n\tif (frame.structure !== \"observe-event\") {\n\t\tthrow new TypeError(\"observeEventFrameCodec: structure must be observe-event\");\n\t}\n\tif (!Number.isSafeInteger(record.observeSeq) || (record.observeSeq as number) < 0) {\n\t\tthrow new TypeError(\"observeEventFrameCodec: observeSeq must be a non-negative safe integer\");\n\t}\n\tif (typeof record.path !== \"string\") {\n\t\tthrow new TypeError(\"observeEventFrameCodec: path must be a string\");\n\t}\n\tif (record.stream !== undefined && typeof record.stream !== \"string\") {\n\t\tthrow new TypeError(\"observeEventFrameCodec: stream must be a string when present\");\n\t}\n\treturn frame as ObserveEventFrame<T>;\n}\n\n/** Stable JSON codec for D82 observe-event frames, not restore records. */\nexport function observeEventFrameCodec<T = unknown>(): Codec<ObserveEventFrame<T>> {\n\tconst codec = strictJsonCodecFor<unknown>();\n\treturn {\n\t\tencode(value) {\n\t\t\treturn codec.encode(assertObserveEventFrame(value));\n\t\t},\n\t\tdecode(bytes) {\n\t\t\treturn assertObserveEventFrame<T>(codec.decode(bytes));\n\t\t},\n\t};\n}\n\n/**\n * Read one ordered observe-event log page without projecting it into graph state.\n */\nexport function readObserveEventLogPage<T = unknown>(\n\tlog: AppendLogStorageTier<ObserveEventFrame<T>>,\n\topts: AppendLogReadOptions = {},\n): Promise<ObserveEventLogPage<T>> {\n\treturn readAppendLogPage(log, opts);\n}\n","import type {\n\tIndexChange,\n\tListChange,\n\tLogChange,\n\tMapChange,\n} from \"../graph/data-structures/change.js\";\nimport type { IndexRow } from \"../graph/data-structures/reactive-index.js\";\nimport { strictCanonicalJsonBytes, strictJsonCodecFor } from \"../json/codec.js\";\nimport type { AppendLogStorageTier } from \"./append-log.js\";\nimport type { Codec } from \"./codec.js\";\nimport type { KvStorageTier } from \"./kv.js\";\n\n/** D161 strict-JSON snapshot frame format tag for reactive collection persistence. */\nexport const REACTIVE_COLLECTION_SNAPSHOT_FORMAT =\n\t\"graphrefly.reactive-collection.snapshot.v1\" as const;\n/** D161 strict-JSON change frame format tag for reactive collection persistence. */\nexport const REACTIVE_COLLECTION_CHANGE_FORMAT =\n\t\"graphrefly.reactive-collection.change.v1\" as const;\n/** D161 v1 frame version for reactive collection snapshot/change storage. */\nexport const REACTIVE_COLLECTION_FRAME_VERSION = 1 as const;\n\n/** D161 collection kinds recognized by the unified persistence frame envelope. */\nexport type ReactiveCollectionStorageKind =\n\t| \"reactiveList\"\n\t| \"reactiveLog\"\n\t| \"reactiveMap\"\n\t| \"reactiveIndex\";\n\n/** D161 durable baseline frame; storage is passive and does not own graph restore. */\nexport interface ReactiveCollectionSnapshotFrame<\n\tK extends ReactiveCollectionStorageKind = ReactiveCollectionStorageKind,\n\tS = unknown,\n> {\n\treadonly format: typeof REACTIVE_COLLECTION_SNAPSHOT_FORMAT;\n\treadonly version: typeof REACTIVE_COLLECTION_FRAME_VERSION;\n\treadonly kind: K;\n\t/** Last append-log seq reflected by this snapshot; -1 means no change-log entry. */\n\treadonly changeCursor: number;\n\treadonly snapshot: S;\n}\n\n/** D161 append-log change frame; change-log replay is collection-state folding, not graph restore. */\nexport interface ReactiveCollectionChangeFrame<\n\tK extends ReactiveCollectionStorageKind = ReactiveCollectionStorageKind,\n\tC = unknown,\n> {\n\treadonly format: typeof REACTIVE_COLLECTION_CHANGE_FORMAT;\n\treadonly version: typeof REACTIVE_COLLECTION_FRAME_VERSION;\n\treadonly kind: K;\n\treadonly change: C;\n}\n\n/** D161 passive load/fold result consumed by synchronous restoreReactive* helpers. */\nexport interface ReactiveCollectionRestoreState<\n\tK extends ReactiveCollectionStorageKind = ReactiveCollectionStorageKind,\n\tS = unknown,\n> {\n\treadonly kind: K;\n\treadonly state: S;\n\treadonly source: \"empty\" | \"changes\" | \"snapshot\" | \"snapshot+changes\";\n\treadonly snapshot: { readonly found: boolean; readonly changeCursor: number };\n\treadonly changes: { readonly applied: number; readonly cursor: number };\n}\n\n/** D161 restore state for a reactiveList materialized as a strict-JSON array snapshot. */\nexport type ReactiveListRestoreState<T = unknown> = ReactiveCollectionRestoreState<\n\t\"reactiveList\",\n\treadonly T[]\n>;\n\n/** D161 restore state for a reactiveLog materialized as a strict-JSON array snapshot. */\nexport type ReactiveLogRestoreState<T = unknown> = ReactiveCollectionRestoreState<\n\t\"reactiveLog\",\n\treadonly T[]\n>;\n\n/** D161 passive restore-state shape for reactiveMap; policy-aware restore remains deferred. */\nexport type ReactiveMapRestoreState<K = unknown, V = unknown> = ReactiveCollectionRestoreState<\n\t\"reactiveMap\",\n\treadonly (readonly [K, V])[]\n>;\n\n/** D161 passive restore-state shape for reactiveIndex; key-codec restore remains deferred. */\nexport type ReactiveIndexRestoreState<K = unknown, V = unknown> = ReactiveCollectionRestoreState<\n\t\"reactiveIndex\",\n\treadonly IndexRow<K, V>[]\n>;\n\n/** D161 passive storage inputs for collection load/fold helpers. */\nexport interface LoadReactiveCollectionStateOptions {\n\treadonly snapshotStore: KvStorageTier<unknown>;\n\treadonly snapshotKey?: string;\n\treadonly storagePrefix?: string;\n\treadonly changeLog?: AppendLogStorageTier<unknown>;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction ownKeys(value: Record<string, unknown>): readonly string[] {\n\treturn Object.keys(value).sort();\n}\n\nfunction assertKeys(\n\tvalue: Record<string, unknown>,\n\texpected: readonly string[],\n\tlabel: string,\n): void {\n\tconst actual = ownKeys(value);\n\tconst want = [...expected].sort();\n\tif (actual.length !== want.length || actual.some((key, i) => key !== want[i])) {\n\t\tthrow new TypeError(`${label}: unexpected frame fields ${actual.join(\",\")}`);\n\t}\n}\n\nfunction assertSafeInteger(value: unknown, label: string, min = 0): number {\n\tif (!Number.isSafeInteger(value) || (value as number) < min) {\n\t\tthrow new TypeError(`${label} must be a safe integer >= ${min}`);\n\t}\n\treturn value as number;\n}\n\nfunction assertKind<K extends ReactiveCollectionStorageKind>(\n\tvalue: unknown,\n\texpected: K,\n\tlabel: string,\n): K {\n\tif (value !== expected) throw new TypeError(`${label}: kind must be ${expected}`);\n\treturn expected;\n}\n\nfunction assertArray<T = unknown>(value: unknown, label: string): readonly T[] {\n\tif (!Array.isArray(value)) throw new TypeError(`${label}: snapshot must be an array`);\n\treturn value as readonly T[];\n}\n\nfunction strictJsonIdentity(value: unknown): string {\n\treturn Array.from(strictCanonicalJsonBytes(value)).join(\",\");\n}\n\nfunction assertEntryArray<K = unknown, V = unknown>(\n\tvalue: unknown,\n\tlabel: string,\n): readonly (readonly [K, V])[] {\n\tconst entries = assertArray<unknown>(value, label);\n\tconst seen = new Set<string>();\n\tfor (const [i, entry] of entries.entries()) {\n\t\tif (!Array.isArray(entry) || entry.length !== 2) {\n\t\t\tthrow new TypeError(`${label}: entry ${i} must be [key,value]`);\n\t\t}\n\t\tconst key = strictJsonIdentity(entry[0]);\n\t\tif (seen.has(key)) throw new TypeError(`${label}: entry ${i} duplicates an earlier key`);\n\t\tseen.add(key);\n\t}\n\treturn entries as readonly (readonly [K, V])[];\n}\n\nfunction assertIndexRows<K = unknown, V = unknown>(\n\tvalue: unknown,\n\tlabel: string,\n): readonly IndexRow<K, V>[] {\n\tconst rows = assertArray<unknown>(value, label);\n\tconst seen = new Set<string>();\n\tfor (const [i, row] of rows.entries()) {\n\t\tif (!isRecord(row)) throw new TypeError(`${label}: row ${i} must be an object`);\n\t\tassertKeys(row, [\"primary\", \"secondary\", \"value\"], `${label} row`);\n\t\tconst primary = strictJsonIdentity(row.primary);\n\t\tif (seen.has(primary)) {\n\t\t\tthrow new TypeError(`${label}: row ${i} duplicates an earlier primary`);\n\t\t}\n\t\tseen.add(primary);\n\t}\n\treturn rows as readonly IndexRow<K, V>[];\n}\n\n/** Build the default D161 snapshot key for a storage prefix. */\nexport function collectionSnapshotKey(storagePrefix = \"reactive-collection\"): string {\n\tif (storagePrefix.length === 0) throw new TypeError(\"storagePrefix must be non-empty\");\n\treturn `${storagePrefix}/snapshot`;\n}\n\n/** Build a D161 strict-JSON snapshot frame before validation/encoding. */\nexport function reactiveCollectionSnapshotFrame<K extends ReactiveCollectionStorageKind, S>(\n\tkind: K,\n\tsnapshot: S,\n\topts: { readonly changeCursor?: number } = {},\n): ReactiveCollectionSnapshotFrame<K, S> {\n\tconst changeCursor = opts.changeCursor ?? -1;\n\tif (!Number.isSafeInteger(changeCursor) || changeCursor < -1) {\n\t\tthrow new RangeError(\"reactive collection snapshot changeCursor must be a safe integer >= -1\");\n\t}\n\treturn {\n\t\tformat: REACTIVE_COLLECTION_SNAPSHOT_FORMAT,\n\t\tversion: REACTIVE_COLLECTION_FRAME_VERSION,\n\t\tkind,\n\t\tchangeCursor,\n\t\tsnapshot,\n\t};\n}\n\n/** Build a D161 strict-JSON change frame before validation/encoding. */\nexport function reactiveCollectionChangeFrame<K extends ReactiveCollectionStorageKind, C>(\n\tkind: K,\n\tchange: C,\n): ReactiveCollectionChangeFrame<K, C> {\n\treturn {\n\t\tformat: REACTIVE_COLLECTION_CHANGE_FORMAT,\n\t\tversion: REACTIVE_COLLECTION_FRAME_VERSION,\n\t\tkind,\n\t\tchange,\n\t};\n}\n\n/** Validate a D161 snapshot frame and reject non-strict-JSON payloads honestly. */\nexport function assertReactiveCollectionSnapshotFrame<\n\tK extends ReactiveCollectionStorageKind,\n\tS = unknown,\n>(value: unknown, expectedKind: K): ReactiveCollectionSnapshotFrame<K, S> {\n\tif (!isRecord(value)) throw new TypeError(\"reactive collection snapshot frame must be an object\");\n\tassertKeys(value, [\"changeCursor\", \"format\", \"kind\", \"snapshot\", \"version\"], \"snapshot frame\");\n\tif (value.format !== REACTIVE_COLLECTION_SNAPSHOT_FORMAT) {\n\t\tthrow new TypeError(\"snapshot frame: invalid format\");\n\t}\n\tif (value.version !== REACTIVE_COLLECTION_FRAME_VERSION) {\n\t\tthrow new TypeError(\"snapshot frame: invalid version\");\n\t}\n\tassertKind(value.kind, expectedKind, \"snapshot frame\");\n\tassertSafeInteger(value.changeCursor, \"snapshot frame changeCursor\", -1);\n\tstrictJsonCodecFor<unknown>().encode(value);\n\treturn value as unknown as ReactiveCollectionSnapshotFrame<K, S>;\n}\n\n/** Validate a D161 change frame and reject non-strict-JSON payloads honestly. */\nexport function assertReactiveCollectionChangeFrame<\n\tK extends ReactiveCollectionStorageKind,\n\tC = unknown,\n>(value: unknown, expectedKind: K): ReactiveCollectionChangeFrame<K, C> {\n\tif (!isRecord(value)) throw new TypeError(\"reactive collection change frame must be an object\");\n\tassertKeys(value, [\"change\", \"format\", \"kind\", \"version\"], \"change frame\");\n\tif (value.format !== REACTIVE_COLLECTION_CHANGE_FORMAT) {\n\t\tthrow new TypeError(\"change frame: invalid format\");\n\t}\n\tif (value.version !== REACTIVE_COLLECTION_FRAME_VERSION) {\n\t\tthrow new TypeError(\"change frame: invalid version\");\n\t}\n\tassertKind(value.kind, expectedKind, \"change frame\");\n\tif (!Object.hasOwn(value, \"change\")) throw new TypeError(\"change frame: change is required\");\n\tstrictJsonCodecFor<unknown>().encode(value);\n\treturn value as unknown as ReactiveCollectionChangeFrame<K, C>;\n}\n\n/** Codec for D161 snapshot frames with strict JSON validation on both encode and decode. */\nexport function reactiveCollectionSnapshotFrameCodec<\n\tK extends ReactiveCollectionStorageKind,\n\tS = unknown,\n>(kind: K): Codec<ReactiveCollectionSnapshotFrame<K, S>> {\n\tconst codec = strictJsonCodecFor<unknown>();\n\treturn {\n\t\tencode(value) {\n\t\t\treturn codec.encode(assertReactiveCollectionSnapshotFrame<K, S>(value, kind));\n\t\t},\n\t\tdecode(bytes) {\n\t\t\treturn assertReactiveCollectionSnapshotFrame<K, S>(codec.decode(bytes), kind);\n\t\t},\n\t};\n}\n\n/** Codec for D161 change frames with strict JSON validation on both encode and decode. */\nexport function reactiveCollectionChangeFrameCodec<\n\tK extends ReactiveCollectionStorageKind,\n\tC = unknown,\n>(kind: K): Codec<ReactiveCollectionChangeFrame<K, C>> {\n\tconst codec = strictJsonCodecFor<unknown>();\n\treturn {\n\t\tencode(value) {\n\t\t\treturn codec.encode(assertReactiveCollectionChangeFrame<K, C>(value, kind));\n\t\t},\n\t\tdecode(bytes) {\n\t\t\treturn assertReactiveCollectionChangeFrame<K, C>(codec.decode(bytes), kind);\n\t\t},\n\t};\n}\n\nfunction assertListChange<T>(value: unknown): ListChange<T> {\n\tif (!isRecord(value) || typeof value.kind !== \"string\") {\n\t\tthrow new TypeError(\"reactiveList change must be an object with kind\");\n\t}\n\tswitch (value.kind) {\n\t\tcase \"append\":\n\t\t\tif (!Object.hasOwn(value, \"value\")) throw new TypeError(\"reactiveList append.value required\");\n\t\t\tassertKeys(value, [\"kind\", \"value\"], \"reactiveList append\");\n\t\t\treturn value as unknown as ListChange<T>;\n\t\tcase \"appendMany\":\n\t\t\tassertKeys(value, [\"kind\", \"values\"], \"reactiveList appendMany\");\n\t\t\tassertArray<T>(value.values, \"reactiveList appendMany.values\");\n\t\t\treturn value as unknown as ListChange<T>;\n\t\tcase \"insert\":\n\t\t\tassertKeys(value, [\"index\", \"kind\", \"value\"], \"reactiveList insert\");\n\t\t\tassertSafeInteger(value.index, \"reactiveList insert.index\", 0);\n\t\t\treturn value as unknown as ListChange<T>;\n\t\tcase \"insertMany\":\n\t\t\tassertKeys(value, [\"index\", \"kind\", \"values\"], \"reactiveList insertMany\");\n\t\t\tassertSafeInteger(value.index, \"reactiveList insertMany.index\", 0);\n\t\t\tassertArray<T>(value.values, \"reactiveList insertMany.values\");\n\t\t\treturn value as unknown as ListChange<T>;\n\t\tcase \"pop\":\n\t\t\tassertKeys(value, [\"index\", \"kind\", \"value\"], \"reactiveList pop\");\n\t\t\tassertSafeInteger(value.index, \"reactiveList pop.index\", 0);\n\t\t\treturn value as unknown as ListChange<T>;\n\t\tcase \"trimHead\":\n\t\t\tassertKeys(value, [\"kind\", \"n\"], \"reactiveList trimHead\");\n\t\t\tassertSafeInteger(value.n, \"reactiveList trimHead.n\", 0);\n\t\t\treturn value as unknown as ListChange<T>;\n\t\tcase \"clear\":\n\t\t\tassertKeys(value, [\"count\", \"kind\"], \"reactiveList clear\");\n\t\t\tassertSafeInteger(value.count, \"reactiveList clear.count\", 0);\n\t\t\treturn value as unknown as ListChange<T>;\n\t\tdefault:\n\t\t\tthrow new TypeError(`unsupported reactiveList change kind ${value.kind}`);\n\t}\n}\n\nfunction assertLogChange<T>(value: unknown): LogChange<T> {\n\tif (!isRecord(value) || typeof value.kind !== \"string\") {\n\t\tthrow new TypeError(\"reactiveLog change must be an object with kind\");\n\t}\n\tswitch (value.kind) {\n\t\tcase \"append\":\n\t\t\tif (!Object.hasOwn(value, \"value\")) throw new TypeError(\"reactiveLog append.value required\");\n\t\t\tassertKeys(value, [\"kind\", \"value\"], \"reactiveLog append\");\n\t\t\treturn value as unknown as LogChange<T>;\n\t\tcase \"appendMany\":\n\t\t\tassertKeys(value, [\"kind\", \"values\"], \"reactiveLog appendMany\");\n\t\t\tassertArray<T>(value.values, \"reactiveLog appendMany.values\");\n\t\t\treturn value as unknown as LogChange<T>;\n\t\tcase \"trimHead\":\n\t\t\tassertKeys(value, [\"kind\", \"n\"], \"reactiveLog trimHead\");\n\t\t\tassertSafeInteger(value.n, \"reactiveLog trimHead.n\", 0);\n\t\t\treturn value as unknown as LogChange<T>;\n\t\tcase \"clear\":\n\t\t\tassertKeys(value, [\"count\", \"kind\"], \"reactiveLog clear\");\n\t\t\tassertSafeInteger(value.count, \"reactiveLog clear.count\", 0);\n\t\t\treturn value as unknown as LogChange<T>;\n\t\tdefault:\n\t\t\tthrow new TypeError(`unsupported reactiveLog change kind ${value.kind}`);\n\t}\n}\n\nfunction assertMapChange<K, V>(value: unknown): MapChange<K, V> {\n\tif (!isRecord(value) || typeof value.kind !== \"string\") {\n\t\tthrow new TypeError(\"reactiveMap change must be an object with kind\");\n\t}\n\tswitch (value.kind) {\n\t\tcase \"set\":\n\t\t\tif (!Object.hasOwn(value, \"key\")) throw new TypeError(\"reactiveMap set.key required\");\n\t\t\tif (!Object.hasOwn(value, \"value\")) throw new TypeError(\"reactiveMap set.value required\");\n\t\t\tassertKeys(value, [\"key\", \"kind\", \"value\"], \"reactiveMap set\");\n\t\t\treturn value as unknown as MapChange<K, V>;\n\t\tcase \"delete\":\n\t\t\tif (!Object.hasOwn(value, \"key\")) throw new TypeError(\"reactiveMap delete.key required\");\n\t\t\tif (!Object.hasOwn(value, \"previous\")) {\n\t\t\t\tthrow new TypeError(\"reactiveMap delete.previous required\");\n\t\t\t}\n\t\t\tassertKeys(value, [\"key\", \"kind\", \"previous\", \"reason\"], \"reactiveMap delete\");\n\t\t\tif (\n\t\t\t\tvalue.reason !== \"expired\" &&\n\t\t\t\tvalue.reason !== \"lru-evict\" &&\n\t\t\t\tvalue.reason !== \"archived\" &&\n\t\t\t\tvalue.reason !== \"explicit\"\n\t\t\t) {\n\t\t\t\tthrow new TypeError(\"reactiveMap delete.reason is invalid\");\n\t\t\t}\n\t\t\treturn value as unknown as MapChange<K, V>;\n\t\tcase \"clear\":\n\t\t\tassertKeys(value, [\"count\", \"kind\"], \"reactiveMap clear\");\n\t\t\tassertSafeInteger(value.count, \"reactiveMap clear.count\", 0);\n\t\t\treturn value as unknown as MapChange<K, V>;\n\t\tdefault:\n\t\t\tthrow new TypeError(`unsupported reactiveMap change kind ${value.kind}`);\n\t}\n}\n\nfunction assertIndexChange<K, V>(value: unknown): IndexChange<K, V> {\n\tif (!isRecord(value) || typeof value.kind !== \"string\") {\n\t\tthrow new TypeError(\"reactiveIndex change must be an object with kind\");\n\t}\n\tswitch (value.kind) {\n\t\tcase \"upsert\":\n\t\t\tif (!Object.hasOwn(value, \"primary\")) {\n\t\t\t\tthrow new TypeError(\"reactiveIndex upsert.primary required\");\n\t\t\t}\n\t\t\tif (!Object.hasOwn(value, \"secondary\")) {\n\t\t\t\tthrow new TypeError(\"reactiveIndex upsert.secondary required\");\n\t\t\t}\n\t\t\tif (!Object.hasOwn(value, \"value\"))\n\t\t\t\tthrow new TypeError(\"reactiveIndex upsert.value required\");\n\t\t\tassertKeys(value, [\"kind\", \"primary\", \"secondary\", \"value\"], \"reactiveIndex upsert\");\n\t\t\treturn value as unknown as IndexChange<K, V>;\n\t\tcase \"delete\":\n\t\t\tif (!Object.hasOwn(value, \"primary\")) {\n\t\t\t\tthrow new TypeError(\"reactiveIndex delete.primary required\");\n\t\t\t}\n\t\t\tassertKeys(value, [\"kind\", \"primary\"], \"reactiveIndex delete\");\n\t\t\treturn value as unknown as IndexChange<K, V>;\n\t\tcase \"deleteMany\":\n\t\t\tassertKeys(value, [\"kind\", \"primaries\"], \"reactiveIndex deleteMany\");\n\t\t\tassertArray<K>(value.primaries, \"reactiveIndex deleteMany.primaries\");\n\t\t\treturn value as unknown as IndexChange<K, V>;\n\t\tcase \"clear\":\n\t\t\tassertKeys(value, [\"count\", \"kind\"], \"reactiveIndex clear\");\n\t\t\tassertSafeInteger(value.count, \"reactiveIndex clear.count\", 0);\n\t\t\treturn value as unknown as IndexChange<K, V>;\n\t\tdefault:\n\t\t\tthrow new TypeError(`unsupported reactiveIndex change kind ${value.kind}`);\n\t}\n}\n\nfunction applyListChange<T>(state: T[], change: ListChange<T>): void {\n\tswitch (change.kind) {\n\t\tcase \"append\":\n\t\t\tstate.push(change.value);\n\t\t\treturn;\n\t\tcase \"appendMany\":\n\t\t\tstate.push(...change.values);\n\t\t\treturn;\n\t\tcase \"insert\":\n\t\t\tif (change.index > state.length)\n\t\t\t\tthrow new Error(\"reactiveList insert change is out of range\");\n\t\t\tstate.splice(change.index, 0, change.value);\n\t\t\treturn;\n\t\tcase \"insertMany\":\n\t\t\tif (change.index > state.length) {\n\t\t\t\tthrow new Error(\"reactiveList insertMany change is out of range\");\n\t\t\t}\n\t\t\tstate.splice(change.index, 0, ...change.values);\n\t\t\treturn;\n\t\tcase \"pop\":\n\t\t\tif (change.index >= state.length) throw new Error(\"reactiveList pop change is out of range\");\n\t\t\tif (!strictJsonEquals(state[change.index], change.value)) {\n\t\t\t\tthrow new Error(\"reactiveList pop change value does not match current state\");\n\t\t\t}\n\t\t\tstate.splice(change.index, 1);\n\t\t\treturn;\n\t\tcase \"trimHead\":\n\t\t\tif (change.n > state.length) throw new Error(\"reactiveList trimHead change is out of range\");\n\t\t\tstate.splice(0, change.n);\n\t\t\treturn;\n\t\tcase \"clear\":\n\t\t\tif (change.count !== state.length) {\n\t\t\t\tthrow new Error(\"reactiveList clear change count does not match current state\");\n\t\t\t}\n\t\t\tstate.length = 0;\n\t\t\treturn;\n\t}\n}\n\nfunction strictJsonEquals(a: unknown, b: unknown): boolean {\n\tconst left = strictCanonicalJsonBytes(a);\n\tconst right = strictCanonicalJsonBytes(b);\n\tif (left.byteLength !== right.byteLength) return false;\n\tfor (let i = 0; i < left.byteLength; i += 1) if (left[i] !== right[i]) return false;\n\treturn true;\n}\n\nfunction findJsonIndex<T>(\n\tvalues: readonly T[],\n\tmatch: (value: T) => unknown,\n\tkey: unknown,\n\tlabel: string,\n): number {\n\tlet found = -1;\n\tfor (let i = 0; i < values.length; i += 1) {\n\t\tif (strictJsonEquals(match(values[i] as T), key)) {\n\t\t\tif (found !== -1) throw new Error(`${label} duplicate JSON key in restore state`);\n\t\t\tfound = i;\n\t\t}\n\t}\n\treturn found;\n}\n\nfunction cmpOrd(a: unknown, b: unknown): number {\n\tif (a === b) return 0;\n\tconst ta = typeof a;\n\tif (\n\t\tta === typeof b &&\n\t\t(ta === \"number\" || ta === \"string\" || ta === \"boolean\" || ta === \"bigint\")\n\t) {\n\t\tconst ax = a as number | string | bigint | boolean;\n\t\tconst bx = b as number | string | bigint | boolean;\n\t\treturn ax < bx ? -1 : ax > bx ? 1 : 0;\n\t}\n\treturn String(a).localeCompare(String(b));\n}\n\nfunction applyLogChange<T>(state: T[], change: LogChange<T>): void {\n\tswitch (change.kind) {\n\t\tcase \"append\":\n\t\t\tstate.push(change.value);\n\t\t\treturn;\n\t\tcase \"appendMany\":\n\t\t\tstate.push(...change.values);\n\t\t\treturn;\n\t\tcase \"trimHead\":\n\t\t\tif (change.n > state.length) throw new Error(\"reactiveLog trimHead change is out of range\");\n\t\t\tstate.splice(0, change.n);\n\t\t\treturn;\n\t\tcase \"clear\":\n\t\t\tif (change.count !== state.length) {\n\t\t\t\tthrow new Error(\"reactiveLog clear change count does not match current state\");\n\t\t\t}\n\t\t\tstate.length = 0;\n\t\t\treturn;\n\t}\n}\n\nfunction applyMapChange<K, V>(state: Array<readonly [K, V]>, change: MapChange<K, V>): void {\n\tswitch (change.kind) {\n\t\tcase \"set\": {\n\t\t\tconst index = findJsonIndex(state, ([key]) => key, change.key, \"reactiveMap\");\n\t\t\tif (index === -1) state.push([change.key, change.value] as const);\n\t\t\telse state[index] = [change.key, change.value] as const;\n\t\t\treturn;\n\t\t}\n\t\tcase \"delete\": {\n\t\t\tconst index = findJsonIndex(state, ([key]) => key, change.key, \"reactiveMap\");\n\t\t\tif (index === -1) throw new Error(\"reactiveMap delete change key is missing\");\n\t\t\tif (!strictJsonEquals(state[index]?.[1], change.previous)) {\n\t\t\t\tthrow new Error(\"reactiveMap delete change previous value does not match current state\");\n\t\t\t}\n\t\t\tstate.splice(index, 1);\n\t\t\treturn;\n\t\t}\n\t\tcase \"clear\":\n\t\t\tif (change.count !== state.length) {\n\t\t\t\tthrow new Error(\"reactiveMap clear change count does not match current state\");\n\t\t\t}\n\t\t\tstate.length = 0;\n\t\t\treturn;\n\t}\n}\n\nfunction sortIndexRows<K, V>(state: Array<IndexRow<K, V>>): void {\n\tstate.sort((a, b) => {\n\t\tconst bySecondary = cmpOrd(a.secondary, b.secondary);\n\t\treturn bySecondary === 0 ? cmpOrd(a.primary, b.primary) : bySecondary;\n\t});\n}\n\nfunction applyIndexChange<K, V>(state: Array<IndexRow<K, V>>, change: IndexChange<K, V>): void {\n\tswitch (change.kind) {\n\t\tcase \"upsert\": {\n\t\t\tconst index = findJsonIndex(state, (row) => row.primary, change.primary, \"reactiveIndex\");\n\t\t\tconst row: IndexRow<K, V> = {\n\t\t\t\tprimary: change.primary,\n\t\t\t\tsecondary: change.secondary,\n\t\t\t\tvalue: change.value,\n\t\t\t};\n\t\t\tif (index === -1) state.push(row);\n\t\t\telse state[index] = row;\n\t\t\tsortIndexRows(state);\n\t\t\treturn;\n\t\t}\n\t\tcase \"delete\": {\n\t\t\tconst index = findJsonIndex(state, (row) => row.primary, change.primary, \"reactiveIndex\");\n\t\t\tif (index === -1) throw new Error(\"reactiveIndex delete change primary is missing\");\n\t\t\tstate.splice(index, 1);\n\t\t\treturn;\n\t\t}\n\t\tcase \"deleteMany\": {\n\t\t\tfor (const primary of change.primaries) {\n\t\t\t\tconst index = findJsonIndex(state, (row) => row.primary, primary, \"reactiveIndex\");\n\t\t\t\tif (index === -1) {\n\t\t\t\t\tthrow new Error(\"reactiveIndex deleteMany change primary is missing\");\n\t\t\t\t}\n\t\t\t\tstate.splice(index, 1);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tcase \"clear\":\n\t\t\tif (change.count !== state.length) {\n\t\t\t\tthrow new Error(\"reactiveIndex clear change count does not match current state\");\n\t\t\t}\n\t\t\tstate.length = 0;\n\t\t\treturn;\n\t}\n}\n\nfunction finishState<K extends ReactiveCollectionStorageKind, T>(\n\tkind: K,\n\tstate: T[],\n\tsnapshotFound: boolean,\n\tsnapshotCursor: number,\n\tapplied: number,\n\tcursor: number,\n): ReactiveCollectionRestoreState<K, readonly T[]> {\n\treturn {\n\t\tkind,\n\t\tstate,\n\t\tsource: snapshotFound\n\t\t\t? applied > 0\n\t\t\t\t? \"snapshot+changes\"\n\t\t\t\t: \"snapshot\"\n\t\t\t: applied > 0\n\t\t\t\t? \"changes\"\n\t\t\t\t: \"empty\",\n\t\tsnapshot: { found: snapshotFound, changeCursor: snapshotCursor },\n\t\tchanges: { applied, cursor },\n\t};\n}\n\nfunction loadState<K extends ReactiveCollectionStorageKind, T, C>(\n\tkind: K,\n\topts: LoadReactiveCollectionStateOptions,\n\tassertSnapshot: (value: unknown) => readonly T[],\n\tassertChange: (value: unknown) => C,\n\tapplyChange: (state: T[], change: C) => void,\n): Promise<ReactiveCollectionRestoreState<K, readonly T[]>> {\n\tconst key = opts.snapshotKey ?? collectionSnapshotKey(opts.storagePrefix);\n\treturn opts.snapshotStore.get(key).then((snapshotValue) => {\n\t\tlet snapshotFound = false;\n\t\tlet snapshotCursor = -1;\n\t\tlet state: T[] = [];\n\n\t\tif (snapshotValue !== undefined) {\n\t\t\tconst frame = assertReactiveCollectionSnapshotFrame<K, readonly T[]>(snapshotValue, kind);\n\t\t\tstate = [...assertSnapshot(frame.snapshot)];\n\t\t\tsnapshotFound = true;\n\t\t\tsnapshotCursor = frame.changeCursor;\n\t\t}\n\n\t\tif (opts.changeLog === undefined) {\n\t\t\treturn finishState(kind, state, snapshotFound, snapshotCursor, 0, snapshotCursor);\n\t\t}\n\n\t\treturn opts.changeLog.read({ after: snapshotCursor }).then((entries) => {\n\t\t\tlet applied = 0;\n\t\t\tlet cursor = snapshotCursor;\n\t\t\tfor (const entry of entries) {\n\t\t\t\tconst expectedSeq = cursor + 1;\n\t\t\t\tif (!Number.isSafeInteger(entry.seq) || entry.seq !== expectedSeq) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`reactive collection change log is non-contiguous: expected seq ${expectedSeq}, got ${entry.seq}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst frame = assertReactiveCollectionChangeFrame<K, C>(entry.value, kind);\n\t\t\t\tconst change = assertChange(frame.change);\n\t\t\t\tapplyChange(state, change);\n\t\t\t\tapplied += 1;\n\t\t\t\tcursor = entry.seq;\n\t\t\t}\n\t\t\treturn finishState(kind, state, snapshotFound, snapshotCursor, applied, cursor);\n\t\t});\n\t});\n}\n\n/** D161 passive load/fold for reactiveList; reads storage but never mutates graph topology. */\nexport function loadReactiveListState<T = unknown>(\n\topts: LoadReactiveCollectionStateOptions,\n): Promise<ReactiveListRestoreState<T>> {\n\treturn loadState<\"reactiveList\", T, ListChange<T>>(\n\t\t\"reactiveList\",\n\t\topts,\n\t\t(value) => assertArray<T>(value, \"reactiveList snapshot\"),\n\t\tassertListChange,\n\t\tapplyListChange,\n\t);\n}\n\n/** D161 passive load/fold for reactiveLog; reads storage but never mutates graph topology. */\nexport function loadReactiveLogState<T = unknown>(\n\topts: LoadReactiveCollectionStateOptions,\n): Promise<ReactiveLogRestoreState<T>> {\n\treturn loadState<\"reactiveLog\", T, LogChange<T>>(\n\t\t\"reactiveLog\",\n\t\topts,\n\t\t(value) => assertArray<T>(value, \"reactiveLog snapshot\"),\n\t\tassertLogChange,\n\t\tapplyLogChange,\n\t);\n}\n\n/** D161 passive load/fold scaffold for reactiveMap; synchronous policy restore is deferred. */\nexport function loadReactiveMapState<K = unknown, V = unknown>(\n\topts: LoadReactiveCollectionStateOptions,\n): Promise<ReactiveMapRestoreState<K, V>> {\n\treturn loadState<\"reactiveMap\", readonly [K, V], MapChange<K, V>>(\n\t\t\"reactiveMap\",\n\t\topts,\n\t\t(value) => assertEntryArray<K, V>(value, \"reactiveMap snapshot\"),\n\t\tassertMapChange,\n\t\tapplyMapChange,\n\t);\n}\n\n/** D161 passive load/fold scaffold for reactiveIndex; key-codec restore is deferred. */\nexport function loadReactiveIndexState<K = unknown, V = unknown>(\n\topts: LoadReactiveCollectionStateOptions,\n): Promise<ReactiveIndexRestoreState<K, V>> {\n\treturn loadState<\"reactiveIndex\", IndexRow<K, V>, IndexChange<K, V>>(\n\t\t\"reactiveIndex\",\n\t\topts,\n\t\t(value) => assertIndexRows<K, V>(value, \"reactiveIndex snapshot\"),\n\t\tassertIndexChange,\n\t\tapplyIndexChange,\n\t);\n}\n","import { hasKvVersioned, type KvGeneration, type KvStorageTier } from \"./kv.js\";\n\n/** Result tier for read-through output facts. */\nexport interface ReadThroughLookupTier {\n\t/** Tier index in the ordered lookup list. `-1` = optional loader fallback. */\n\treadonly index: number;\n\t/** Optional human-facing tier name. */\n\treadonly name?: string;\n}\n\n/** Ordered lookup result from a single tier or loader attempt. */\ntype ReadThroughOutcome = \"hit\" | \"miss\" | \"error\";\n\n/** Fact for one lookup attempt (one tier or the optional loader fallback). */\nexport interface ReadThroughLookupFact<T> {\n\treadonly kind: ReadThroughOutcome;\n\treadonly key: string;\n\treadonly tier: ReadThroughLookupTier;\n\treadonly value?: T;\n\treadonly generation?: KvGeneration;\n\treadonly error?: unknown;\n}\n\n/** Result of one promotion write attempt to an earlier tier. */\nexport interface ReadThroughPromotionFact {\n\treadonly tier: ReadThroughLookupTier;\n\treadonly ok: boolean;\n\treadonly error?: unknown;\n}\n\n/** Final read-through outcome, with explicit lookup facts and promotion facts. */\nexport interface TieredReadThroughResult<T> {\n\treadonly status: \"hit\" | \"miss\" | \"error\";\n\treadonly key: string;\n\treadonly value?: T;\n\treadonly hitTier?: ReadThroughLookupTier;\n\treadonly facts: readonly ReadThroughLookupFact<T>[];\n\treadonly promotions: readonly ReadThroughPromotionFact[];\n}\n\n/** Optional hook/context for lookup misses. */\nexport interface ReadThroughMissContext {\n\treadonly key: string;\n\treadonly tier: ReadThroughLookupTier;\n}\n\n/** Optional hook/context for get/load/promotion errors. */\nexport interface ReadThroughErrorContext {\n\treadonly key: string;\n\treadonly tier: ReadThroughLookupTier;\n\treadonly stage: \"lookup\" | \"promotion\";\n\treadonly error: unknown;\n}\n\n/** Configuration for `tieredReadThrough`. */\nexport interface TieredReadThroughOptions<T> {\n\t/** Lookup key for all tiers. */\n\treadonly key: string;\n\t/** Ordered lookup tiers, index 0 = hottest/fastest. */\n\treadonly tiers: readonly KvStorageTier<T>[];\n\t/** Optional friendly tier names, matched by index. */\n\treadonly tierNames?: readonly string[];\n\t/**\n\t * Optional loader fallback for cache-miss. If provided and no tier hits, this runs\n\t * after all tiers are checked and may write-through by promotion logic.\n\t */\n\treadonly load?: (key: string) => Promise<T | undefined> | T | undefined;\n\t/**\n\t * Optional promotion policy: set hit values to earlier (lower-index) tiers.\n\t * `false` disables promotion; default promotes to all earlier tiers on any hit.\n\t * Explicit indices can narrow promotion targets.\n\t */\n\treadonly promoteTo?: readonly number[] | false;\n\t/** Optional callbacks for control-plane observability. */\n\treadonly onMiss?: (context: ReadThroughMissContext) => void;\n\t/** Called for lookup/load errors and promotion failures by default. */\n\treadonly onError?: (context: ReadThroughErrorContext) => void;\n}\n\nfunction defer<T>(fn: () => T | PromiseLike<T>): Promise<T> {\n\treturn Promise.resolve().then(fn);\n}\n\n/** Alias for callers that prefer loader-oriented naming. */\nexport function readThroughKv<T>(\n\topts: TieredReadThroughOptions<T>,\n): Promise<TieredReadThroughResult<T>> {\n\treturn tieredReadThrough(opts);\n}\n\n/**\n * Build explicit lookup facts across tiers plus optional loader fallback (D104 layer 1).\n *\n * This is a passive storage/domain helper: it creates no graph nodes, performs no hydration or\n * restore, and treats promotion writes as facts rather than a graph commit barrier.\n */\nexport function tieredReadThrough<T>(\n\topts: TieredReadThroughOptions<T>,\n): Promise<TieredReadThroughResult<T>> {\n\tconst { key, tiers, tierNames = [], load, promoteTo, onMiss, onError } = opts;\n\n\tconst lookupFacts: ReadThroughLookupFact<T>[] = [];\n\tconst promotions: ReadThroughPromotionFact[] = [];\n\tlet hitTier: ReadThroughLookupTier | undefined;\n\tlet value: T | undefined;\n\n\tconst safeOnMiss = (tier: ReadThroughLookupTier): void => {\n\t\tif (!onMiss) return;\n\t\ttry {\n\t\t\tonMiss({ key, tier });\n\t\t} catch {\n\t\t\t/* no-op */\n\t\t}\n\t};\n\n\tconst safeOnError = (context: ReadThroughErrorContext): void => {\n\t\tif (!onError) return;\n\t\ttry {\n\t\t\tonError(context);\n\t\t} catch {\n\t\t\t/* no-op */\n\t\t}\n\t};\n\n\tconst addFact = (fact: ReadThroughLookupFact<T>): void => {\n\t\tlookupFacts.push(fact);\n\t};\n\n\tconst lookupTier = (index: number): ReadThroughLookupTier => ({\n\t\tindex,\n\t\tname: tierNames[index],\n\t});\n\n\tconst lookupNext = (index: number): Promise<void> => {\n\t\tif (hitTier !== undefined || index >= tiers.length) return defer(() => undefined);\n\t\tconst tier = tiers[index]!;\n\t\tconst info = lookupTier(index);\n\t\tconst read = hasKvVersioned(tier)\n\t\t\t? defer(() => tier.getVersioned(key)).then((result) => {\n\t\t\t\t\tif (result.kind === \"miss\") {\n\t\t\t\t\t\treturn { found: undefined, generation: result.generation } as const;\n\t\t\t\t\t}\n\t\t\t\t\treturn { found: result.value, generation: result.generation } as const;\n\t\t\t\t})\n\t\t\t: defer(() => tier.get(key)).then((found) => ({ found, generation: undefined }) as const);\n\t\treturn read\n\t\t\t.then(({ found, generation }) => {\n\t\t\t\tif (found === undefined) {\n\t\t\t\t\taddFact({ kind: \"miss\", key, tier: info, generation });\n\t\t\t\t\tsafeOnMiss(info);\n\t\t\t\t\treturn lookupNext(index + 1);\n\t\t\t\t}\n\t\t\t\taddFact({ kind: \"hit\", key, tier: info, value: found, generation });\n\t\t\t\thitTier = info;\n\t\t\t\tvalue = found;\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\taddFact({ kind: \"error\", key, tier: info, error });\n\t\t\t\tsafeOnError({ key, tier: info, stage: \"lookup\", error });\n\t\t\t\treturn lookupNext(index + 1);\n\t\t\t});\n\t};\n\n\tconst runLoader = (): Promise<void> => {\n\t\tif (hitTier !== undefined || typeof load !== \"function\") return defer(() => undefined);\n\t\tconst loaderTier: ReadThroughLookupTier = { index: -1, name: \"load\" };\n\t\treturn defer(() => load(key))\n\t\t\t.then((loaded) => {\n\t\t\t\tif (loaded === undefined) {\n\t\t\t\t\taddFact({ kind: \"miss\", key, tier: loaderTier });\n\t\t\t\t\tsafeOnMiss(loaderTier);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\taddFact({ kind: \"hit\", key, tier: loaderTier, value: loaded });\n\t\t\t\thitTier = loaderTier;\n\t\t\t\tvalue = loaded;\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\taddFact({ kind: \"error\", key, tier: loaderTier, error });\n\t\t\t\tsafeOnError({ key, tier: loaderTier, stage: \"lookup\", error });\n\t\t\t});\n\t};\n\n\tconst promoteNext = (targets: readonly number[], offset: number): Promise<void> => {\n\t\tif (offset >= targets.length || value === undefined) return defer(() => undefined);\n\t\tconst index = targets[offset]!;\n\t\tconst info = { index, name: tierNames[index] };\n\t\tconst tier = tiers[index]!;\n\t\tconst generation = generationForTier(lookupFacts, index);\n\t\tconst write = hasKvVersioned(tier)\n\t\t\t? generation === undefined\n\t\t\t\t? defer<boolean>(() => {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\"tieredReadThrough: versioned promotion target was not observed with a generation\",\n\t\t\t\t\t\t);\n\t\t\t\t\t})\n\t\t\t\t: defer(() => tier.setIfMatch(key, value as T, generation))\n\t\t\t: defer(() => tier.set(key, value as T)).then(() => true);\n\t\treturn write\n\t\t\t.then((ok) => {\n\t\t\t\tpromotions.push({ tier: info, ok });\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tpromotions.push({ tier: info, ok: false, error });\n\t\t\t\tsafeOnError({ key, tier: info, stage: \"promotion\", error });\n\t\t\t})\n\t\t\t.then(() => promoteNext(targets, offset + 1));\n\t};\n\n\tconst promote = (): Promise<void> => {\n\t\tif (hitTier === undefined || value === undefined) return defer(() => undefined);\n\t\tconst sourceIndex = hitTier.index === -1 ? tiers.length : hitTier.index;\n\t\tconst targets = buildPromotionTargets(tiers.length, sourceIndex, promoteTo);\n\t\treturn promoteNext(targets, 0);\n\t};\n\n\tconst result = (): TieredReadThroughResult<T> => {\n\t\tconst status: TieredReadThroughResult<T>[\"status\"] = (() => {\n\t\t\tif (hitTier !== undefined && hitTier.index >= -1 && value !== undefined) return \"hit\";\n\t\t\tif (lookupFacts.some((fact) => fact.kind === \"error\")) return \"error\";\n\t\t\treturn \"miss\";\n\t\t})();\n\n\t\treturn {\n\t\t\tstatus,\n\t\t\tkey,\n\t\t\tvalue,\n\t\t\thitTier,\n\t\t\tfacts: lookupFacts,\n\t\t\tpromotions,\n\t\t};\n\t};\n\n\treturn lookupNext(0).then(runLoader).then(promote).then(result);\n}\n\nfunction generationForTier<T>(\n\tfacts: readonly ReadThroughLookupFact<T>[],\n\tindex: number,\n): KvGeneration | undefined {\n\treturn facts.find((fact) => fact.tier.index === index)?.generation;\n}\n\nfunction buildPromotionTargets(\n\ttierCount: number,\n\thitIndex: number,\n\tpromoteTo?: readonly number[] | false,\n): number[] {\n\tif (promoteTo === false || tierCount <= 0) return [];\n\tconst maxPromote = Math.max(0, Math.min(hitIndex, tierCount));\n\tif (promoteTo === undefined) {\n\t\treturn [...Array(maxPromote).keys()];\n\t}\n\tconst normalized: number[] = [];\n\tconst seen = new Set<number>();\n\tfor (const index of promoteTo) {\n\t\tif (!Number.isSafeInteger(index) || index < 0 || index >= tierCount || index >= maxPromote) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (!seen.has(index)) {\n\t\t\tseen.add(index);\n\t\t\tnormalized.push(index);\n\t\t}\n\t}\n\treturn normalized;\n}\n","import { strictCanonicalJsonBytes, strictJsonCodecFor } from \"../json/codec.js\";\nimport type { ChangeLifecycle, StorageTimestampNs } from \"./change.js\";\nimport { nowNs } from \"./change.js\";\nimport type { Codec } from \"./codec.js\";\nimport {\n\tassertNonNegativeDecimalIntegerString,\n\ttype NonNegativeDecimalIntegerString,\n} from \"./scalar.js\";\n\n/** Storage key segment for passive WAL frame facts. */\nexport const WAL_KEY_SEGMENT = \"wal\";\n\n/** Decimal sequence padding for lexicographically ordered WAL frame keys. */\nexport const WAL_FRAME_SEQ_PAD = 20;\n\n/** First passive WAL frame format version. */\nexport const WAL_FORMAT_VERSION = 1;\n\n/** Passive WAL frame body; this is a storage fact, not graph restore input. */\nexport interface WalFrameBody<T = unknown> {\n\treadonly t: \"c\";\n\treadonly lifecycle: ChangeLifecycle;\n\treadonly path: string;\n\treadonly change: T;\n\treadonly frame_seq: number;\n\treadonly frame_t_ns: StorageTimestampNs;\n\treadonly format_version: typeof WAL_FORMAT_VERSION;\n}\n\n/** Checksummed passive WAL frame. */\nexport interface WalFrame<T = unknown> extends WalFrameBody<T> {\n\treadonly checksum: string;\n}\n\n/** Options for constructing a passive WAL frame. */\nexport interface WalFrameOptions<T = unknown> {\n\treadonly path: string;\n\treadonly change: T;\n\treadonly frame_seq: number;\n\treadonly lifecycle?: ChangeLifecycle;\n\treadonly frame_t_ns?: StorageTimestampNs;\n}\n\nconst SHA_256 = \"SHA-256\";\nconst HEX_TABLE = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, \"0\"));\nconst CHECKSUM_RE = /^[0-9a-f]{64}$/;\nconst WAL_BODY_KEYS = new Set([\n\t\"t\",\n\t\"lifecycle\",\n\t\"path\",\n\t\"change\",\n\t\"frame_seq\",\n\t\"frame_t_ns\",\n\t\"format_version\",\n]);\nconst WAL_FRAME_KEYS = new Set([...WAL_BODY_KEYS, \"checksum\"]);\n\nfunction bytesToHex(bytes: Uint8Array): string {\n\tlet out = \"\";\n\tfor (const byte of bytes) out += HEX_TABLE[byte];\n\treturn out;\n}\n\nfunction sha256Hex(data: Uint8Array): Promise<string> {\n\tconst digestInput = Uint8Array.from(data);\n\treturn globalThis.crypto.subtle\n\t\t.digest(SHA_256, digestInput)\n\t\t.then((buf) => bytesToHex(new Uint8Array(buf)));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isLifecycle(value: unknown): value is ChangeLifecycle {\n\treturn value === \"spec\" || value === \"data\" || value === \"ownership\";\n}\n\nfunction assertOnlyKeys(value: Record<string, unknown>, allowed: ReadonlySet<string>): void {\n\tfor (const key of Object.keys(value)) {\n\t\tif (!allowed.has(key)) throw new TypeError(`walFrameCodec: unknown field ${key}`);\n\t}\n}\n\nfunction assertFrameSeq(value: unknown, label: string): number {\n\tif (!Number.isSafeInteger(value) || (value as number) < 0) {\n\t\tthrow new TypeError(`${label} must be a non-negative safe integer`);\n\t}\n\treturn value as number;\n}\n\nfunction assertWalFrameBody<T = unknown>(\n\tvalue: unknown,\n\tallowedKeys: ReadonlySet<string> = WAL_BODY_KEYS,\n): WalFrameBody<T> {\n\tif (!isRecord(value)) throw new TypeError(\"walFrameCodec: frame must be an object\");\n\tassertOnlyKeys(value, allowedKeys);\n\tif (value.t !== \"c\") throw new TypeError(\"walFrameCodec: t must be c\");\n\tif (!isLifecycle(value.lifecycle)) {\n\t\tthrow new TypeError(\"walFrameCodec: lifecycle must be spec, data, or ownership\");\n\t}\n\tif (typeof value.path !== \"string\" || value.path.length === 0) {\n\t\tthrow new TypeError(\"walFrameCodec: path must be a non-empty string\");\n\t}\n\tif (!Object.hasOwn(value, \"change\")) {\n\t\tthrow new TypeError(\"walFrameCodec: change payload is required\");\n\t}\n\tconst frameSeq = assertFrameSeq(value.frame_seq, \"walFrameCodec: frame_seq\");\n\tconst frameTimestamp = assertNonNegativeDecimalIntegerString(\n\t\tvalue.frame_t_ns,\n\t\t\"walFrameCodec: frame_t_ns\",\n\t);\n\tif (value.format_version !== WAL_FORMAT_VERSION) {\n\t\tthrow new TypeError(`walFrameCodec: format_version must be ${WAL_FORMAT_VERSION}`);\n\t}\n\treturn {\n\t\tt: \"c\",\n\t\tlifecycle: value.lifecycle,\n\t\tpath: value.path,\n\t\tchange: value.change as T,\n\t\tframe_seq: frameSeq,\n\t\tframe_t_ns: frameTimestamp,\n\t\tformat_version: WAL_FORMAT_VERSION,\n\t};\n}\n\n/** Build the namespace prefix for passive WAL frame keys. */\nexport function walFramePrefix(namespace: string): string {\n\tif (namespace.length === 0) return WAL_KEY_SEGMENT;\n\treturn `${namespace}/${WAL_KEY_SEGMENT}`;\n}\n\n/** Build the deterministic storage key for a WAL frame sequence number. */\nexport function walFrameKey(prefix: string, frameSeq: number): string {\n\tif (!Number.isSafeInteger(frameSeq) || frameSeq < 0) {\n\t\tthrow new RangeError(\n\t\t\t`walFrameKey: frameSeq must be a non-negative safe integer, got ${frameSeq}`,\n\t\t);\n\t}\n\treturn `${prefix}/${frameSeq.toString().padStart(WAL_FRAME_SEQ_PAD, \"0\")}`;\n}\n\n/** Hash the canonical WAL frame body, excluding the checksum field itself. */\nexport function walFrameChecksum<T = unknown>(body: WalFrameBody<T>): Promise<string> {\n\tlet bytes: Uint8Array;\n\ttry {\n\t\tbytes = strictCanonicalJsonBytes(assertWalFrameBody<T>(body));\n\t} catch (err) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tthrow err;\n\t\t});\n\t}\n\treturn sha256Hex(bytes);\n}\n\n/** Construct a passive WAL frame with a canonical checksum. */\nexport function walFrame<T = unknown>(opts: WalFrameOptions<T>): Promise<WalFrame<T>> {\n\tconst body: WalFrameBody<T> = {\n\t\tt: \"c\",\n\t\tlifecycle: opts.lifecycle ?? \"data\",\n\t\tpath: opts.path,\n\t\tchange: opts.change,\n\t\tframe_seq: opts.frame_seq,\n\t\tframe_t_ns: opts.frame_t_ns ?? nowNs(),\n\t\tformat_version: WAL_FORMAT_VERSION,\n\t};\n\treturn walFrameChecksum(body).then((checksum) => ({ ...body, checksum }));\n}\n\n/** Validate a decoded passive WAL frame without verifying its checksum bytes. */\nexport function assertWalFrame<T = unknown>(value: unknown): WalFrame<T> {\n\tif (!isRecord(value)) throw new TypeError(\"walFrameCodec: frame must be an object\");\n\tassertOnlyKeys(value, WAL_FRAME_KEYS);\n\tconst body = assertWalFrameBody<T>(value, WAL_FRAME_KEYS);\n\tconst checksum = (value as Record<string, unknown>).checksum;\n\tif (typeof checksum !== \"string\" || !CHECKSUM_RE.test(checksum)) {\n\t\tthrow new TypeError(\"walFrameCodec: checksum must be a lowercase sha256 hex string\");\n\t}\n\treturn { ...body, checksum } as WalFrame<T>;\n}\n\n/** Verify that a passive WAL frame checksum matches its body. */\nexport function verifyWalFrameChecksum<T = unknown>(frame: WalFrame<T>): Promise<boolean> {\n\tlet checked: WalFrame<T>;\n\ttry {\n\t\tchecked = assertWalFrame<T>(frame);\n\t} catch (err) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tthrow err;\n\t\t});\n\t}\n\tconst { checksum, ...body } = checked;\n\treturn walFrameChecksum(body).then((expected) => expected === checksum);\n}\n\n/** Strict canonical JSON codec for passive WAL frames; this is not a restore codec. */\nexport function walFrameCodec<T = unknown>(): Codec<WalFrame<T>> {\n\tconst codec = strictJsonCodecFor<unknown>();\n\treturn {\n\t\tencode(value) {\n\t\t\treturn codec.encode(assertWalFrame(value));\n\t\t},\n\t\tdecode(bytes) {\n\t\t\treturn assertWalFrame<T>(codec.decode(bytes));\n\t\t},\n\t};\n}\n\nexport type WalFrameTimestampNs = NonNegativeDecimalIntegerString;\n"],"mappings":"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","names":["listByPrefix","out","listByPrefix","opts","HEX_TABLE","isRecord","row","defer","result","SHA_256","HEX_TABLE","bytesToHex","sha256Hex","isRecord","isLifecycle"]}
|