@nicia-ai/typegraph 0.65.0 → 0.66.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/{atomic-mutation-program-BznZQ06C.d.ts → atomic-mutation-program-BhP75Qn0.d.ts} +1 -1
  3. package/dist/{atomic-mutation-program-Bfu5z-je.d.cts → atomic-mutation-program-DMdmc4s0.d.cts} +1 -1
  4. package/dist/backend/drizzle/engine/index.cjs +13 -13
  5. package/dist/backend/drizzle/engine/index.d.cts +9 -9
  6. package/dist/backend/drizzle/engine/index.d.ts +9 -9
  7. package/dist/backend/drizzle/engine/index.js +8 -8
  8. package/dist/backend/drizzle/indexes.d.cts +1 -1
  9. package/dist/backend/drizzle/indexes.d.ts +1 -1
  10. package/dist/backend/index.cjs +91 -91
  11. package/dist/backend/index.d.cts +7 -7
  12. package/dist/backend/index.d.ts +7 -7
  13. package/dist/backend/index.js +8 -8
  14. package/dist/backend/postgres/index.cjs +23 -23
  15. package/dist/backend/postgres/index.d.cts +8 -8
  16. package/dist/backend/postgres/index.d.ts +8 -8
  17. package/dist/backend/postgres/index.js +8 -8
  18. package/dist/backend/postgres/pglite-store.cjs +1 -1
  19. package/dist/backend/postgres/pglite-store.d.cts +6 -6
  20. package/dist/backend/postgres/pglite-store.d.ts +6 -6
  21. package/dist/backend/postgres/pglite-store.js +1 -1
  22. package/dist/backend/postgres/pglite.cjs +10 -10
  23. package/dist/backend/postgres/pglite.d.cts +3 -3
  24. package/dist/backend/postgres/pglite.d.ts +3 -3
  25. package/dist/backend/postgres/pglite.js +9 -9
  26. package/dist/backend/sqlite/index.cjs +21 -21
  27. package/dist/backend/sqlite/index.d.cts +7 -7
  28. package/dist/backend/sqlite/index.d.ts +7 -7
  29. package/dist/backend/sqlite/index.js +8 -8
  30. package/dist/backend/sqlite/libsql.cjs +14 -14
  31. package/dist/backend/sqlite/libsql.d.cts +3 -3
  32. package/dist/backend/sqlite/libsql.d.ts +3 -3
  33. package/dist/backend/sqlite/libsql.js +8 -8
  34. package/dist/backend/sqlite/local-store.cjs +1 -1
  35. package/dist/backend/sqlite/local-store.d.cts +6 -6
  36. package/dist/backend/sqlite/local-store.d.ts +6 -6
  37. package/dist/backend/sqlite/local-store.js +1 -1
  38. package/dist/backend/sqlite/local.cjs +10 -10
  39. package/dist/backend/sqlite/local.d.cts +3 -3
  40. package/dist/backend/sqlite/local.d.ts +3 -3
  41. package/dist/backend/sqlite/local.js +9 -9
  42. package/dist/{chunk-337ONI2I.js → chunk-3SUZXB5X.js} +146 -80
  43. package/dist/chunk-3SUZXB5X.js.map +1 -0
  44. package/dist/{chunk-4VTCIEK3.js → chunk-4TQOIBWH.js} +3 -3
  45. package/dist/{chunk-4VTCIEK3.js.map → chunk-4TQOIBWH.js.map} +1 -1
  46. package/dist/{chunk-JRWKRBI5.cjs → chunk-5JOCIMQ3.cjs} +6 -6
  47. package/dist/{chunk-JRWKRBI5.cjs.map → chunk-5JOCIMQ3.cjs.map} +1 -1
  48. package/dist/{chunk-BWQA3POT.cjs → chunk-6B3LQUYG.cjs} +206 -138
  49. package/dist/chunk-6B3LQUYG.cjs.map +1 -0
  50. package/dist/{chunk-RQPCUHIH.js → chunk-6ECNYQDW.js} +3 -3
  51. package/dist/{chunk-RQPCUHIH.js.map → chunk-6ECNYQDW.js.map} +1 -1
  52. package/dist/{chunk-OLB75LRQ.js → chunk-6GKKAQMW.js} +5 -5
  53. package/dist/{chunk-OLB75LRQ.js.map → chunk-6GKKAQMW.js.map} +1 -1
  54. package/dist/{chunk-OC5ROP7V.cjs → chunk-6JRVV2SS.cjs} +8 -2
  55. package/dist/chunk-6JRVV2SS.cjs.map +1 -0
  56. package/dist/{chunk-JERQGJKG.cjs → chunk-732VS5PW.cjs} +18 -18
  57. package/dist/{chunk-JERQGJKG.cjs.map → chunk-732VS5PW.cjs.map} +1 -1
  58. package/dist/{chunk-DSX3P4S5.cjs → chunk-76OB5RSH.cjs} +6 -6
  59. package/dist/{chunk-DSX3P4S5.cjs.map → chunk-76OB5RSH.cjs.map} +1 -1
  60. package/dist/{chunk-DHRLOQLQ.cjs → chunk-7LQTDGV5.cjs} +11 -11
  61. package/dist/{chunk-DHRLOQLQ.cjs.map → chunk-7LQTDGV5.cjs.map} +1 -1
  62. package/dist/{chunk-Q25QYSOH.js → chunk-7YJHUY4T.js} +9 -9
  63. package/dist/{chunk-Q25QYSOH.js.map → chunk-7YJHUY4T.js.map} +1 -1
  64. package/dist/{chunk-BBOMNH44.js → chunk-BABP4D5B.js} +3 -3
  65. package/dist/{chunk-BBOMNH44.js.map → chunk-BABP4D5B.js.map} +1 -1
  66. package/dist/{chunk-EVGZ2TRQ.js → chunk-BE75G3M5.js} +3 -3
  67. package/dist/{chunk-EVGZ2TRQ.js.map → chunk-BE75G3M5.js.map} +1 -1
  68. package/dist/{chunk-FXGZT3WO.cjs → chunk-BX42F7IJ.cjs} +41 -41
  69. package/dist/{chunk-FXGZT3WO.cjs.map → chunk-BX42F7IJ.cjs.map} +1 -1
  70. package/dist/{chunk-VROJKWZ7.js → chunk-C3HNC3S6.js} +5 -5
  71. package/dist/{chunk-VROJKWZ7.js.map → chunk-C3HNC3S6.js.map} +1 -1
  72. package/dist/{chunk-G6T23JU7.js → chunk-CDKNGCE7.js} +3 -3
  73. package/dist/{chunk-G6T23JU7.js.map → chunk-CDKNGCE7.js.map} +1 -1
  74. package/dist/{chunk-BNTJ5YFO.cjs → chunk-EACDHXJL.cjs} +4 -4
  75. package/dist/{chunk-BNTJ5YFO.cjs.map → chunk-EACDHXJL.cjs.map} +1 -1
  76. package/dist/{chunk-SNDJUTMB.cjs → chunk-EBQX7MYL.cjs} +72 -72
  77. package/dist/{chunk-SNDJUTMB.cjs.map → chunk-EBQX7MYL.cjs.map} +1 -1
  78. package/dist/{chunk-GKSAEUX6.js → chunk-FXOFJ4FS.js} +7 -7
  79. package/dist/{chunk-GKSAEUX6.js.map → chunk-FXOFJ4FS.js.map} +1 -1
  80. package/dist/{chunk-ZOWRACZQ.cjs → chunk-G7OKJDMG.cjs} +5 -5
  81. package/dist/{chunk-ZOWRACZQ.cjs.map → chunk-G7OKJDMG.cjs.map} +1 -1
  82. package/dist/{chunk-VZRXXABW.js → chunk-HSLP6CVG.js} +5 -5
  83. package/dist/{chunk-VZRXXABW.js.map → chunk-HSLP6CVG.js.map} +1 -1
  84. package/dist/{chunk-MKJPBSID.cjs → chunk-I7SBZJI2.cjs} +4 -4
  85. package/dist/{chunk-MKJPBSID.cjs.map → chunk-I7SBZJI2.cjs.map} +1 -1
  86. package/dist/{chunk-H346QK3V.cjs → chunk-K7YACILO.cjs} +9 -9
  87. package/dist/{chunk-H346QK3V.cjs.map → chunk-K7YACILO.cjs.map} +1 -1
  88. package/dist/{chunk-L2GBVYRU.cjs → chunk-MGCPSR4C.cjs} +11 -11
  89. package/dist/{chunk-L2GBVYRU.cjs.map → chunk-MGCPSR4C.cjs.map} +1 -1
  90. package/dist/{chunk-KDNRACRG.cjs → chunk-MRUOOAIQ.cjs} +4 -4
  91. package/dist/{chunk-KDNRACRG.cjs.map → chunk-MRUOOAIQ.cjs.map} +1 -1
  92. package/dist/{chunk-PFXNQFFY.js → chunk-MUEPEWMQ.js} +67 -8
  93. package/dist/chunk-MUEPEWMQ.js.map +1 -0
  94. package/dist/{chunk-HTSJTWUT.js → chunk-OF63ZHSD.js} +4 -4
  95. package/dist/{chunk-HTSJTWUT.js.map → chunk-OF63ZHSD.js.map} +1 -1
  96. package/dist/{chunk-NGA3THGU.cjs → chunk-QR7W37HG.cjs} +14 -14
  97. package/dist/{chunk-NGA3THGU.cjs.map → chunk-QR7W37HG.cjs.map} +1 -1
  98. package/dist/{chunk-QFEO4M5W.js → chunk-RTPMG6LQ.js} +11 -11
  99. package/dist/{chunk-QFEO4M5W.js.map → chunk-RTPMG6LQ.js.map} +1 -1
  100. package/dist/{chunk-PFD4NUYV.js → chunk-SSDHR2C2.js} +3 -3
  101. package/dist/{chunk-PFD4NUYV.js.map → chunk-SSDHR2C2.js.map} +1 -1
  102. package/dist/{chunk-THK3SCQA.js → chunk-SYXTWPX6.js} +5 -5
  103. package/dist/{chunk-THK3SCQA.js.map → chunk-SYXTWPX6.js.map} +1 -1
  104. package/dist/{chunk-XSLQYGNR.cjs → chunk-T3VU3YRQ.cjs} +69 -69
  105. package/dist/{chunk-XSLQYGNR.cjs.map → chunk-T3VU3YRQ.cjs.map} +1 -1
  106. package/dist/{chunk-MIBWA6HX.js → chunk-TR7QTODF.js} +213 -33
  107. package/dist/chunk-TR7QTODF.js.map +1 -0
  108. package/dist/{chunk-AD3NLSV5.js → chunk-TU22BFMP.js} +8 -2
  109. package/dist/chunk-TU22BFMP.js.map +1 -0
  110. package/dist/{chunk-WTMSUIRO.js → chunk-UFKYMQJ5.js} +3 -3
  111. package/dist/{chunk-WTMSUIRO.js.map → chunk-UFKYMQJ5.js.map} +1 -1
  112. package/dist/{chunk-35LDKSMM.cjs → chunk-VNJMM2QQ.cjs} +30 -30
  113. package/dist/{chunk-35LDKSMM.cjs.map → chunk-VNJMM2QQ.cjs.map} +1 -1
  114. package/dist/{chunk-53ZEBIMD.js → chunk-WB55URNM.js} +6 -6
  115. package/dist/{chunk-53ZEBIMD.js.map → chunk-WB55URNM.js.map} +1 -1
  116. package/dist/{chunk-D2JPOFRZ.cjs → chunk-WY3IFEKV.cjs} +191 -191
  117. package/dist/{chunk-D2JPOFRZ.cjs.map → chunk-WY3IFEKV.cjs.map} +1 -1
  118. package/dist/{chunk-3KWF25MF.cjs → chunk-XQNKN3UF.cjs} +305 -246
  119. package/dist/chunk-XQNKN3UF.cjs.map +1 -0
  120. package/dist/{chunk-3RSFLZ7A.cjs → chunk-Y4X6ODVY.cjs} +943 -763
  121. package/dist/chunk-Y4X6ODVY.cjs.map +1 -0
  122. package/dist/core/index.d.cts +3 -3
  123. package/dist/core/index.d.ts +3 -3
  124. package/dist/{ddl-DvW9aobX.d.ts → ddl-2q7xLM1X.d.ts} +3 -3
  125. package/dist/{ddl-BjuXbPfw.d.cts → ddl-D_09BfbN.d.cts} +3 -3
  126. package/dist/graph-extension/index.d.cts +2 -2
  127. package/dist/graph-extension/index.d.ts +2 -2
  128. package/dist/graph-merge/index.cjs +156 -156
  129. package/dist/graph-merge/index.d.cts +7 -7
  130. package/dist/graph-merge/index.d.ts +7 -7
  131. package/dist/graph-merge/index.js +14 -14
  132. package/dist/{graph-templates-1vMqlPsu.d.cts → graph-templates-B5Q7oYAA.d.cts} +2 -2
  133. package/dist/{graph-templates-Y52w16dH.d.ts → graph-templates-D9N-Z9kw.d.ts} +2 -2
  134. package/dist/index.cjs +99 -99
  135. package/dist/index.d.cts +10 -10
  136. package/dist/index.d.ts +10 -10
  137. package/dist/index.js +18 -18
  138. package/dist/indexes/index.d.cts +4 -4
  139. package/dist/indexes/index.d.ts +4 -4
  140. package/dist/{ingestion-import-target-CCKeXZbW.d.ts → ingestion-import-target-B8EU6ug2.d.ts} +1 -1
  141. package/dist/{ingestion-import-target-774QRgkF.d.cts → ingestion-import-target-C5sHNFJF.d.cts} +1 -1
  142. package/dist/interchange/index.cjs +34 -34
  143. package/dist/interchange/index.d.cts +7 -7
  144. package/dist/interchange/index.d.ts +7 -7
  145. package/dist/interchange/index.js +11 -11
  146. package/dist/{local-store-impl-3E4VLFCI.cjs → local-store-impl-J6TJG45N.cjs} +22 -22
  147. package/dist/{local-store-impl-3E4VLFCI.cjs.map → local-store-impl-J6TJG45N.cjs.map} +1 -1
  148. package/dist/{local-store-impl-DFKS7QTV.js → local-store-impl-XKWR46WQ.js} +18 -18
  149. package/dist/{local-store-impl-DFKS7QTV.js.map → local-store-impl-XKWR46WQ.js.map} +1 -1
  150. package/dist/{pglite-store-impl-T75O3LVQ.cjs → pglite-store-impl-KXD5VWC5.cjs} +22 -22
  151. package/dist/{pglite-store-impl-T75O3LVQ.cjs.map → pglite-store-impl-KXD5VWC5.cjs.map} +1 -1
  152. package/dist/{pglite-store-impl-N63GGBU2.js → pglite-store-impl-LRZ4TO3H.js} +18 -18
  153. package/dist/{pglite-store-impl-N63GGBU2.js.map → pglite-store-impl-LRZ4TO3H.js.map} +1 -1
  154. package/dist/{postgres-2FYdVYCm.d.cts → postgres-BIm6TDfF.d.cts} +3 -3
  155. package/dist/{postgres-C9gitL71.d.ts → postgres-CRRB2qzy.d.ts} +3 -3
  156. package/dist/{postgres-BONrXHb4.d.cts → postgres-DOBXcZVg.d.cts} +1 -1
  157. package/dist/{postgres-DAFRdnTr.d.ts → postgres-DhZixg92.d.ts} +1 -1
  158. package/dist/{profile-Bmcg07Ki.d.cts → profile-CjAffcQt.d.cts} +2 -2
  159. package/dist/{profile-CAD65CqS.d.ts → profile-DVd70NA-.d.ts} +2 -2
  160. package/dist/profiler/index.d.cts +8 -8
  161. package/dist/profiler/index.d.ts +8 -8
  162. package/dist/provenance/index.cjs +22 -22
  163. package/dist/provenance/index.d.cts +6 -6
  164. package/dist/provenance/index.d.ts +6 -6
  165. package/dist/provenance/index.js +6 -6
  166. package/dist/{repair-validity-windows-CinP91t7.d.cts → repair-validity-windows-CpP_GpIx.d.cts} +1 -1
  167. package/dist/{repair-validity-windows-BJz4nffP.d.ts → repair-validity-windows-lfe275bY.d.ts} +1 -1
  168. package/dist/{resolve-DgOSlXx_.d.ts → resolve-CoYqHqno.d.cts} +7 -2
  169. package/dist/{resolve-DQXSEN_A.d.cts → resolve-DV0Iposp.d.ts} +7 -2
  170. package/dist/schema/index.cjs +37 -37
  171. package/dist/schema/index.d.cts +7 -7
  172. package/dist/schema/index.d.ts +7 -7
  173. package/dist/schema/index.js +7 -7
  174. package/dist/{searchable-DMdCwkXO.d.cts → searchable-C7Xt6g45.d.cts} +1 -1
  175. package/dist/{searchable-BPRF0Bah.d.ts → searchable-KKXrPet3.d.ts} +1 -1
  176. package/dist/{sqlite-DcDAAYow.d.ts → sqlite-BNwQ5pd7.d.ts} +3 -3
  177. package/dist/{sqlite-DgbYa-1Y.d.cts → sqlite-BkQM9ZeI.d.cts} +1 -1
  178. package/dist/{sqlite-UlG5prJQ.d.ts → sqlite-CcCSeXGg.d.ts} +1 -1
  179. package/dist/{sqlite-Co_uIpfs.d.cts → sqlite-DX9H3L7z.d.cts} +3 -3
  180. package/dist/{store-HxoFyQMu.d.cts → store-3nfPQK5j.d.cts} +30 -7
  181. package/dist/{store-C9T1c9Az.d.ts → store-C8ZPl7OW.d.ts} +30 -7
  182. package/dist/{types-CRCyg1fJ.d.cts → types-BynPp5kU.d.cts} +18 -2
  183. package/dist/{types-CRCyg1fJ.d.ts → types-BynPp5kU.d.ts} +18 -2
  184. package/dist/{types-Dg_prBqC.d.ts → types-C9YwrkSe.d.ts} +1 -1
  185. package/dist/{types-B5AUesS1.d.cts → types-JG-4CG6P.d.cts} +1 -1
  186. package/dist/{where-gRyc3jj_.d.cts → where-D1gBDqQ_.d.cts} +1 -1
  187. package/dist/{where-D-NDKMPw.d.ts → where-D2GqMFp-.d.ts} +1 -1
  188. package/package.json +1 -1
  189. package/dist/chunk-337ONI2I.js.map +0 -1
  190. package/dist/chunk-3KWF25MF.cjs.map +0 -1
  191. package/dist/chunk-3RSFLZ7A.cjs.map +0 -1
  192. package/dist/chunk-AD3NLSV5.js.map +0 -1
  193. package/dist/chunk-BWQA3POT.cjs.map +0 -1
  194. package/dist/chunk-MIBWA6HX.js.map +0 -1
  195. package/dist/chunk-OC5ROP7V.cjs.map +0 -1
  196. package/dist/chunk-PFXNQFFY.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { supportsAtomicBatch } from './chunk-AD3NLSV5.js';
1
+ import { supportsAtomicBatch } from './chunk-TU22BFMP.js';
2
2
  import { ConfigurationError, CompilerInvariantError } from './chunk-GMKPIYHY.js';
3
3
 
4
4
  // src/backend/capabilities/atomic-sql-program.ts
@@ -560,5 +560,5 @@ function carryAtomicMutationSessionRegistration(base, derived) {
560
560
  }
561
561
 
562
562
  export { ATOMIC_EDGE_MUTATION_VARIANT_BY_KIND, ATOMIC_MUTATION_PROGRAM_VARIANTS, AtomicEdgeBatchCardinalityRefusalError, AtomicEdgeBatchEndpointRefusalError, AtomicEdgeConvergenceTombstoneRefusalError, AtomicEdgeDeleteIdentityRefusalError, AtomicNodeDeleteRestrictedRefusalError, atomicNodeClaimInputCost, carryAtomicMutationSessionRegistration, createAtomicSqlProgramExecutor, hasAtomicMutationProgramRegistration, hasAtomicSqlProgramRegistration, reachableAtomicMutationProgramVariants, registerAtomicMutationPrograms, registerAtomicSqlProgram, resolveAtomicMutationPrograms, resolveRegisteredAtomicSqlBatchExecutor, supportsAtomicNodeClaimFamily, supportsAtomicNodeClaims, supportsAtomicNodeProjections, withAtomicMutationProgramDispatchObserver };
563
- //# sourceMappingURL=chunk-WTMSUIRO.js.map
564
- //# sourceMappingURL=chunk-WTMSUIRO.js.map
563
+ //# sourceMappingURL=chunk-UFKYMQJ5.js.map
564
+ //# sourceMappingURL=chunk-UFKYMQJ5.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/backend/capabilities/atomic-sql-program.ts","../src/backend/capabilities/atomic-mutation-program.ts"],"names":[],"mappings":"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","file":"chunk-WTMSUIRO.js","sourcesContent":["/**\n * Internal execution boundary for a closed, precompiled SQL write program.\n *\n * This is deliberately an out-of-band exact-resource capability. An author\n * registers either a root that owns the atomic boundary or an already-open\n * transaction session. Derived backends and other transaction objects do not\n * inherit the registration. A static batch is therefore never forwarded\n * through a wrapper whose behavior has not been audited for the program\n * contract.\n */\nimport { CompilerInvariantError, ConfigurationError } from \"../../errors\";\nimport type { GraphBackend, TransactionBackend } from \"../types\";\n\nexport type AtomicSqlRow = Readonly<Record<string, unknown>>;\n\n/** A transport-ready statement in the portable atomic-program protocol. */\nexport type CompiledAtomicSqlStatement = Readonly<{\n params: readonly unknown[];\n sql: string;\n}>;\n\n/** A native all-or-nothing dispatch for a closed statement sequence. */\nexport type AtomicSqlBatchExecutor = <TRow>(\n statements: readonly CompiledAtomicSqlStatement[],\n) => Promise<readonly (readonly TRow[])[]>;\n\nexport type AtomicSqlProgramAdapter = Readonly<{\n executeAtomicBatch?: AtomicSqlBatchExecutor;\n}>;\n\n/** The transport forms accepted by an atomic program author. */\nexport type AtomicSqlProgramRegistration =\n AtomicSqlBatchExecutor | AtomicSqlProgramAdapter;\n\ntype AtomicSqlResultCardinality = \"none\" | \"one\" | \"many\";\n\n/** One closed statement and the typed decoder for its result slot. */\ntype AtomicSqlProgramSlot<TResult> = Readonly<{\n statement: CompiledAtomicSqlStatement;\n cardinality: AtomicSqlResultCardinality;\n decode: (rows: readonly AtomicSqlRow[]) => TResult;\n}>;\n\n/**\n * A statically closed program. Every slot uses the same result union so a\n * heterogeneous node/edge program can still preserve a typed result at the\n * program boundary without introducing `any` into the erased executor.\n */\nexport type AtomicSqlProgram<TRowResult, TResult> = Readonly<{\n slots: readonly AtomicSqlProgramSlot<TRowResult>[];\n assemble: (results: readonly TRowResult[]) => TResult;\n}>;\n\nexport type AtomicSqlProgramExecutor = Readonly<{\n execute: <TRowResult, TResult>(\n program: AtomicSqlProgram<TRowResult, TResult>,\n ) => Promise<TResult>;\n}>;\n\ntype RegisteredAtomicSqlProgram = Readonly<{\n executeAtomicBatch: AtomicSqlBatchExecutor;\n executor: AtomicSqlProgramExecutor;\n}>;\n\nconst ATOMIC_SQL_PROGRAM_EXECUTORS = new WeakMap<\n object,\n RegisteredAtomicSqlProgram\n>();\n\nfunction assertResultCardinality(\n slot: Readonly<{ cardinality: AtomicSqlResultCardinality }>,\n index: number,\n rows: readonly AtomicSqlRow[],\n): void {\n const valid =\n slot.cardinality === \"none\" ? rows.length === 0\n : slot.cardinality === \"one\" ? rows.length === 1\n : true;\n if (valid) return;\n throw new CompilerInvariantError(\n `Atomic SQL program slot ${index} returned ${rows.length} rows, ` +\n `expected ${slot.cardinality}.`,\n {\n slot: index,\n cardinality: slot.cardinality,\n rowCount: rows.length,\n },\n );\n}\n\nfunction assertResultSlotCount(\n expected: number,\n actual: readonly (readonly AtomicSqlRow[])[],\n): void {\n if (expected === actual.length) return;\n throw new CompilerInvariantError(\n `Atomic SQL program returned ${actual.length} result slots, ` +\n `expected ${expected}.`,\n { expected, actual: actual.length },\n );\n}\n\nfunction isAtomicSqlResultSlots(\n value: unknown,\n): value is readonly (readonly AtomicSqlRow[])[] {\n return Array.isArray(value) && value.every((slot) => Array.isArray(slot));\n}\n\n/** Executes the one canonical closed-program protocol. */\nasync function executeAtomicSqlProgram<TRowResult, TResult>(\n executeAtomicBatch: AtomicSqlBatchExecutor,\n program: AtomicSqlProgram<TRowResult, TResult>,\n): Promise<TResult> {\n if (program.slots.length === 0) return program.assemble([]);\n\n const statements = program.slots.map((slot) => slot.statement);\n const result: unknown = await executeAtomicBatch<AtomicSqlRow>(statements);\n if (!isAtomicSqlResultSlots(result)) {\n throw new CompilerInvariantError(\n \"Atomic SQL program executor returned malformed result slots.\",\n { resultType: typeof result },\n );\n }\n const rows = result;\n\n assertResultSlotCount(program.slots.length, rows);\n const decoded = program.slots.map((slot, index) => {\n const slotRows = rows[index];\n if (slotRows === undefined) {\n throw new CompilerInvariantError(\n `Atomic SQL program result slot ${index} is missing.`,\n { slot: index },\n );\n }\n assertResultCardinality(slot, index, slotRows);\n return slot.decode(slotRows);\n });\n\n return program.assemble(decoded);\n}\n\nfunction createExecutor(\n executeAtomicBatch: AtomicSqlBatchExecutor,\n): AtomicSqlProgramExecutor {\n return {\n async execute<TRowResult, TResult>(\n program: AtomicSqlProgram<TRowResult, TResult>,\n ): Promise<TResult> {\n return executeAtomicSqlProgram(executeAtomicBatch, program);\n },\n };\n}\n\n/** @internal Creates the executor shared by lowering and root registration. */\nexport function createAtomicSqlProgramExecutor(\n adapter: AtomicSqlProgramAdapter,\n): AtomicSqlProgramExecutor | undefined {\n const executeAtomicBatch = adapter.executeAtomicBatch;\n return typeof executeAtomicBatch === \"function\" ?\n createExecutor(executeAtomicBatch)\n : undefined;\n}\n\nfunction normalizeAtomicSqlProgramRegistration(\n registration: AtomicSqlProgramRegistration,\n): RegisteredAtomicSqlProgram | undefined {\n const adapter: AtomicSqlProgramAdapter =\n typeof registration === \"function\" ?\n { executeAtomicBatch: registration }\n : registration;\n const executeAtomicBatch = adapter.executeAtomicBatch;\n const executor = createAtomicSqlProgramExecutor(adapter);\n return executeAtomicBatch === undefined || executor === undefined ?\n undefined\n : { executeAtomicBatch, executor };\n}\n\nfunction throwAtomicSqlProgramRegistrationMismatch(\n target: GraphBackend | TransactionBackend,\n registration: RegisteredAtomicSqlProgram | undefined,\n): never {\n const declaration = target.capabilities.execution.atomicBatch;\n throw new ConfigurationError(\n \"An atomic SQL program requires exact-session atomic-batch authority and a usable batch executor.\",\n {\n code: \"ATOMIC_SQL_PROGRAM_REGISTRATION_MISMATCH\",\n declared: declaration,\n registered: registration !== undefined,\n },\n {\n suggestion:\n 'Declare `atomicBatch: \"root\"` on an exact root executor or `\"session\"` on an already-open transaction session, then register that exact object.',\n },\n );\n}\n\nfunction declaredCommandSession(target: object): unknown {\n const commands = Reflect.get(target, \"commands\") as unknown;\n if (typeof commands !== \"object\" || commands === null) return;\n return Reflect.get(commands, \"session\") as unknown;\n}\n\n/**\n * Registers an atomic SQL program executor for one exact backend resource.\n *\n * The declaration and executable transport are checked together so a backend\n * cannot claim atomic execution while omitting the executor, nor expose\n * an executor without declaring the session on which it is valid. The\n * registration is keyed by object identity; derived backends and other\n * transaction sessions therefore do not resolve this program.\n */\nexport function registerAtomicSqlProgram<\n T extends GraphBackend | TransactionBackend,\n>(target: T, registration: AtomicSqlProgramRegistration): T {\n if (ATOMIC_SQL_PROGRAM_EXECUTORS.has(target)) {\n throw new ConfigurationError(\n \"An atomic SQL program is already registered for this exact backend resource.\",\n { code: \"ATOMIC_SQL_PROGRAM_ALREADY_REGISTERED\" },\n );\n }\n const executor = normalizeAtomicSqlProgramRegistration(registration);\n const declaration = target.capabilities.execution.atomicBatch;\n const declaredSession = declaredCommandSession(target);\n const sessionMatches =\n (declaration === \"root\" && declaredSession === \"root\") ||\n (declaration === \"session\" && declaredSession === \"transaction\");\n if (declaration === \"none\" || !sessionMatches || executor === undefined) {\n throwAtomicSqlProgramRegistrationMismatch(target, executor);\n }\n ATOMIC_SQL_PROGRAM_EXECUTORS.set(target, executor);\n return target;\n}\n\n/**\n * Resolves the static program executor for an exact registered resource.\n * Other transaction sessions and derived/projected backends return `undefined`.\n */\nexport function resolveAtomicSqlProgramExecutor(\n target: GraphBackend | TransactionBackend,\n): AtomicSqlProgramExecutor | undefined {\n return ATOMIC_SQL_PROGRAM_EXECUTORS.get(target)?.executor;\n}\n\n/** @internal Resolves the exact batch function registered on one resource. */\nexport function resolveRegisteredAtomicSqlBatchExecutor(\n target: GraphBackend | TransactionBackend,\n): AtomicSqlBatchExecutor | undefined {\n return ATOMIC_SQL_PROGRAM_EXECUTORS.get(target)?.executeAtomicBatch;\n}\n\n/** Returns whether this exact object owns a registered atomic SQL transport. */\nexport function hasAtomicSqlProgramRegistration(\n target: GraphBackend | TransactionBackend,\n): boolean {\n return ATOMIC_SQL_PROGRAM_EXECUTORS.has(target);\n}\n","/**\n * Exact-resource execution profile for closed semantic mutation programs.\n *\n * The transport-level atomic SQL executor answers only \"can this exact resource\n * submit a closed statement sequence atomically?\" This profile is the next\n * layer up: it names the TypeGraph mutations the backend can lower onto that\n * transport. Keeping every mutation family in one exact-resource registration\n * prevents each new operation from inventing another provenance WeakMap.\n */\nimport { ConfigurationError } from \"../../errors\";\nimport type {\n ClaimEdgeCardinalityParams,\n EdgeConvergenceMatch,\n EdgeRow,\n GraphBackend,\n InsertEdgeParams,\n InsertNodeParams,\n NodeInsertClaim,\n NodeInsertProjection,\n NodeRow,\n SchemaWriteFenceParams,\n TransactionBackend,\n} from \"../types\";\nimport { supportsAtomicBatch } from \"../types\";\nimport {\n hasAtomicSqlProgramRegistration,\n registerAtomicSqlProgram,\n resolveRegisteredAtomicSqlBatchExecutor,\n} from \"./atomic-sql-program\";\n\n/** How a node batch member obtained the identifier stored by its program. */\nexport type AtomicNodeBatchIdSource = \"generated\" | \"caller\";\n/** Whether a node batch returns only its count or its ordered postimages. */\nexport type AtomicNodeBatchResultMode = \"count\" | \"rows\";\n\n/** Independently provable claim semantics accepted by a node mutation family. */\nexport type AtomicNodeClaimFamily = \"disjointness\" | \"uniqueness\";\n\n/** Independently provable derived-storage families in a node program. */\nexport type AtomicNodeProjectionFamily = \"embedding\" | \"fulltext\";\n\n/**\n * One complete derived-storage transition attached to a node postimage.\n *\n * Identity stays on the containing row entry so a projection cannot target a\n * different node. Embedding deletes are explicit because updates and\n * caller-id resurrection can remove a value that previously existed.\n */\nexport type AtomicNodeProjection =\n | Extract<NodeInsertProjection, { kind: \"fulltext\" }>\n | Readonly<{\n kind: \"embedding\";\n action: \"upsert\";\n fieldPath: string;\n embedding: readonly number[];\n dimensions: number;\n metric: Extract<NodeInsertProjection, { kind: \"embedding\" }>[\"metric\"];\n indexType: Extract<\n NodeInsertProjection,\n { kind: \"embedding\" }\n >[\"indexType\"];\n }>\n | Readonly<{\n kind: \"embedding\";\n action: \"delete\";\n fieldPath: string;\n dimensions: number;\n metric: Extract<NodeInsertProjection, { kind: \"embedding\" }>[\"metric\"];\n indexType: Extract<\n NodeInsertProjection,\n { kind: \"embedding\" }\n >[\"indexType\"];\n }>;\n\n/** Closed derived-storage envelope advertised by one node executor. */\nexport type AtomicNodeProjectionSupport = Readonly<{\n families: readonly AtomicNodeProjectionFamily[];\n}>;\n\n/** Closed claim envelope advertised by one node mutation executor. */\nexport type AtomicNodeClaimSupport = Readonly<{\n /** Independently proved claim families; an omitted family is unsupported. */\n families: readonly AtomicNodeClaimFamily[];\n /**\n * Maximum compiled claim/probe bind cost one member may contribute to its\n * write gate.\n * Compute a member's required value with {@link atomicNodeClaimInputCost};\n * backend implementations must not reproduce the SQL cost formula.\n * Total batch size is deliberately absent: the executor chunks statements\n * inside one atomic transport submission.\n */\n maxInputCostPerEntry: number;\n}>;\n\nfunction isAtomicNodeClaimFamily(\n value: unknown,\n): value is AtomicNodeClaimFamily {\n return value === \"disjointness\" || value === \"uniqueness\";\n}\n\nfunction assertAtomicNodeClaimFamilies(\n family: keyof AtomicMutationProgramRegistration,\n name: string,\n value: unknown,\n): void {\n if (\n Array.isArray(value) &&\n new Set(value).size === value.length &&\n value.every((claimFamily) => isAtomicNodeClaimFamily(claimFamily))\n ) {\n return;\n }\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires distinct ${name}.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: name,\n value,\n },\n );\n}\n\nfunction assertAtomicNodeClaimSupport(\n family: \"createNodes\" | \"mutateNodes\" | \"replaceNodes\",\n value: unknown,\n): void {\n if (value === undefined) return;\n if (typeof value !== \"object\" || value === null) {\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires claimSupport metadata.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"claimSupport\",\n value,\n },\n );\n }\n const support = value as Readonly<Record<PropertyKey, unknown>>;\n assertAtomicNodeClaimFamilies(\n family,\n \"claimSupport.families\",\n support[\"families\"],\n );\n assertNonnegativeIntegerLimit(\n family,\n \"claimSupport.maxInputCostPerEntry\",\n support[\"maxInputCostPerEntry\"],\n );\n}\n\nfunction isAtomicNodeProjectionFamily(\n value: unknown,\n): value is AtomicNodeProjectionFamily {\n return value === \"embedding\" || value === \"fulltext\";\n}\n\nfunction assertAtomicNodeProjectionSupport(\n family: \"createNodes\" | \"mutateNodes\" | \"replaceNodes\" | \"updateNodes\",\n value: unknown,\n): void {\n if (value === undefined) return;\n if (typeof value !== \"object\" || value === null) {\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires projectionSupport metadata.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"projectionSupport\",\n value,\n },\n );\n }\n const families = (value as Readonly<Record<PropertyKey, unknown>>)[\n \"families\"\n ];\n if (\n !Array.isArray(families) ||\n new Set(families).size !== families.length ||\n !families.every((projectionFamily) =>\n isAtomicNodeProjectionFamily(projectionFamily),\n )\n ) {\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires distinct projection families.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"projectionSupport.families\",\n value: families,\n },\n );\n }\n}\n\n/** The one owner of claim-verdict to advertised-family correlation. */\nfunction atomicNodeClaimFamily(claim: NodeInsertClaim): AtomicNodeClaimFamily {\n return claim.verdict.kind;\n}\n\n/** Bind cost of one canonical claim row in an atomic node write gate. */\nconst ATOMIC_NODE_CANONICAL_CLAIM_INPUT_COST = 6;\n\n/** Bind cost of one legacy uniqueness compatibility probe. */\nconst ATOMIC_NODE_UNIQUENESS_PROBE_INPUT_COST = 9;\n\n/** Bind cost of one legacy disjointness compatibility probe. */\nconst ATOMIC_NODE_DISJOINTNESS_PROBE_INPUT_COST = 6;\n\n/** Exact compiled claim/probe bind cost one member contributes to its write gate. */\nexport function atomicNodeClaimInputCost(\n claims: readonly NodeInsertClaim[],\n): number {\n let cost = 0;\n for (const claim of claims) {\n cost += ATOMIC_NODE_CANONICAL_CLAIM_INPUT_COST;\n cost +=\n claim.verdict.kind === \"uniqueness\" ?\n ATOMIC_NODE_UNIQUENESS_PROBE_INPUT_COST *\n claim.verdict.probeAxes.filter((axis) => axis !== claim.axis).length\n : ATOMIC_NODE_DISJOINTNESS_PROBE_INPUT_COST *\n claim.verdict.conflictingKinds.length;\n }\n return cost;\n}\n\n/** Whether one executor explicitly accepts one member's complete claim set. */\nexport function supportsAtomicNodeClaims(\n support: AtomicNodeClaimSupport | undefined,\n claims: readonly NodeInsertClaim[],\n): boolean {\n if (claims.length === 0) return true;\n if (support === undefined) return false;\n const families = new Set(support.families);\n return (\n claims.every((claim) => families.has(atomicNodeClaimFamily(claim))) &&\n atomicNodeClaimInputCost(claims) <= support.maxInputCostPerEntry\n );\n}\n\n/** Whether an executor can admit at least one member of a claim family. */\nexport function supportsAtomicNodeClaimFamily(\n support: AtomicNodeClaimSupport | undefined,\n family: AtomicNodeClaimFamily,\n): boolean {\n return (\n (support?.maxInputCostPerEntry ?? 0) > 0 &&\n support?.families.includes(family) === true\n );\n}\n\n/** Whether one executor explicitly accepts every normalized projection. */\nexport function supportsAtomicNodeProjections(\n support: AtomicNodeProjectionSupport | undefined,\n families: readonly AtomicNodeProjectionFamily[],\n): boolean {\n if (families.length === 0) return true;\n if (support === undefined) return false;\n const advertised = new Set(support.families);\n return families.every((family) => advertised.has(family));\n}\n\n/** One normalized node-create member supplied to a semantic executor. */\nexport type AtomicNodeBatchEntry = Readonly<{\n idSource: AtomicNodeBatchIdSource;\n params: InsertNodeParams;\n /** Complete canonically ordered claims this row owes. */\n claims?: readonly NodeInsertClaim[];\n /** Complete derived-storage transitions owed by the written postimage. */\n projections?: readonly AtomicNodeProjection[];\n}>;\n\n/** Complete schema-fenced input to an atomic node-create family. */\nexport type AtomicNodeBatchInput = Readonly<{\n entries: readonly AtomicNodeBatchEntry[];\n resultMode: AtomicNodeBatchResultMode;\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Executes the complete eligible node-create family for one exact root. */\nexport interface AtomicNodeBatchExecutor {\n /** Claim semantics this executor can prove, omitted for plain rows only. */\n readonly claimSupport?: AtomicNodeClaimSupport;\n /** Derived-storage families this executor carries inside its program. */\n readonly projectionSupport?: AtomicNodeProjectionSupport;\n (\n input: AtomicNodeBatchInput & Readonly<{ resultMode: \"count\" }>,\n ): Promise<number>;\n (\n input: AtomicNodeBatchInput & Readonly<{ resultMode: \"rows\" }>,\n ): Promise<readonly NodeRow[]>;\n}\n\n/** One complete, preimage-free replacement supplied to a semantic executor. */\nexport type AtomicNodeReplacementEntry = Readonly<{\n params: InsertNodeParams;\n /** Complete canonically ordered claims the replacement postimage owes. */\n claims?: readonly NodeInsertClaim[];\n /** Complete derived-storage transitions owed by the replacement postimage. */\n projections?: readonly AtomicNodeProjection[];\n}>;\n\n/** Any node entry whose complete postimage drives projections/assertions. */\nexport type AtomicNodePostimageEntry =\n AtomicNodeBatchEntry | AtomicNodeReplacementEntry;\n\n/** Executes complete blind node replacements for one exact resource. */\nexport interface AtomicNodeReplacementBatchExecutor {\n /** Maximum members accepted by one atomic submission, including internal chunks. */\n readonly maxEntries: Readonly<{ plain: number; claimed: number }>;\n /** Exact no-SQL admission proof for the prepared replacement work. */\n readonly accepts?: (\n entries: readonly AtomicNodeReplacementEntry[],\n ) => boolean;\n /** Claim semantics this executor can prove, omitted for plain rows only. */\n readonly claimSupport?: AtomicNodeClaimSupport;\n /** Claim families whose earlier owner rows this program releases. */\n readonly releasedClaimFamilies?: readonly AtomicNodeClaimFamily[];\n /** Derived-storage families this executor carries inside its program. */\n readonly projectionSupport?: AtomicNodeProjectionSupport;\n (\n input: Readonly<{\n entries: readonly AtomicNodeReplacementEntry[];\n /** Whether earlier owner claims must be released before acquisition. */\n releaseClaims: boolean;\n schemaFence: SchemaWriteFenceParams;\n }>,\n ): Promise<readonly NodeRow[]>;\n}\n\n/** Count-returning input to an atomic direct edge-create family. */\nexport type AtomicEdgeBatchCountInput = Readonly<{\n claims: readonly ClaimEdgeCardinalityParams[];\n params: readonly InsertEdgeParams[];\n resultMode: \"count\";\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Postimage-returning input to an atomic direct edge-create family. */\nexport type AtomicEdgeBatchRowsInput = Readonly<{\n claims: readonly ClaimEdgeCardinalityParams[];\n params: readonly InsertEdgeParams[];\n resultMode: \"rows\";\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Executes complete eligible direct edge creates for one exact root. */\nexport interface AtomicEdgeBatchExecutor {\n (input: AtomicEdgeBatchCountInput): Promise<number>;\n (input: AtomicEdgeBatchRowsInput): Promise<readonly EdgeRow[]>;\n}\n\n/** One normalized durable edge-convergence member. */\nexport type AtomicEdgeConvergenceEntry = Readonly<{\n params: InsertEdgeParams;\n match: EdgeConvergenceMatch;\n}>;\n\n/** Authoritative row and outcome returned by durable convergence. */\nexport type AtomicEdgeConvergenceResult = Readonly<{\n row: EdgeRow;\n outcome: \"created\" | \"found\";\n}>;\n\n/** Complete schema-fenced durable edge-convergence input. */\nexport type AtomicEdgeConvergenceInput = Readonly<{\n kind: \"durable-convergence\";\n entries: readonly AtomicEdgeConvergenceEntry[];\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Complete schema-fenced direct edge-delete input. */\nexport type AtomicEdgeDeleteBatchInput = Readonly<{\n graphId: string;\n expectedKind: string;\n ids: readonly string[];\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Delete count plus explicit evidence that the schema fence matched. */\nexport type AtomicDeleteBatchResult = Readonly<{\n affectedCount: number;\n schemaFenceMatched: boolean;\n}>;\n\n/** Executes complete eligible direct edge deletes for one exact root. */\nexport type AtomicEdgeDeleteBatchExecutor = (\n input: AtomicEdgeDeleteBatchInput,\n) => Promise<AtomicDeleteBatchResult>;\n\n/** Complete schema-fenced direct node-delete input. */\nexport type AtomicNodeDeleteBatchInput = Readonly<{\n graphId: string;\n kind: string;\n ids: readonly string[];\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/**\n * Executes complete eligible direct node deletes for one exact root.\n *\n * Keep the callable as a function type intersected with its metadata. The API\n * compatibility inventory follows function aliases into their input types;\n * changing this to a callable interface would hide that contravariant edge.\n */\nexport type AtomicNodeDeleteBatchExecutor = Readonly<{\n /** Claim families whose owned sidecars this program releases. */\n releasedClaimFamilies?: readonly AtomicNodeClaimFamily[];\n}> &\n ((input: AtomicNodeDeleteBatchInput) => Promise<AtomicDeleteBatchResult>);\n\n/** One authoritative node preimage and replacement used by a resolved set. */\nexport type AtomicNodeResolvedUpdateEntry = Readonly<{\n graphId: string;\n kind: string;\n id: string;\n props: Readonly<Record<string, unknown>>;\n expectedVersion: number;\n /** Complete derived-storage transitions owed by the written postimage. */\n projections?: readonly AtomicNodeProjection[];\n}>;\n\n/** Executes a complete eligible resolved node update set. */\nexport interface AtomicNodeResolvedUpdateBatchExecutor {\n /** Maximum members accepted by one atomic submission, including internal chunks. */\n readonly maxEntries: number;\n /** Derived-storage families this executor carries inside its program. */\n readonly projectionSupport?: AtomicNodeProjectionSupport;\n (\n input: Readonly<{\n entries: readonly AtomicNodeResolvedUpdateEntry[];\n schemaFence: SchemaWriteFenceParams;\n }>,\n ): Promise<readonly NodeRow[]>;\n}\n\n/** One authoritative edge preimage and replacement used by a resolved set. */\nexport type AtomicEdgeResolvedUpdateEntry = Readonly<{\n existing: EdgeRow;\n props: Readonly<Record<string, unknown>>;\n}>;\n\n/** Executes a complete eligible resolved edge update set. */\nexport interface AtomicEdgeResolvedUpdateBatchExecutor {\n /** Maximum members accepted by one atomic submission, including internal chunks. */\n readonly maxEntries: number;\n (\n input: Readonly<{\n entries: readonly AtomicEdgeResolvedUpdateEntry[];\n schemaFence: SchemaWriteFenceParams;\n }>,\n ): Promise<readonly EdgeRow[]>;\n}\n\n/** Ordered node postimages returned by a mixed resolved mutation set. */\nexport type AtomicNodeResolvedMutationSetResult = Readonly<{\n created: readonly NodeRow[];\n updated: readonly NodeRow[];\n}>;\n\n/** Executes a complete eligible mixed node create/update set. */\nexport interface AtomicNodeResolvedMutationSetExecutor {\n /** Maximum total members accepted across the program's terminal assertions. */\n readonly maxEntries: number;\n /** Derived-storage families this executor carries inside its program. */\n readonly projectionSupport?: AtomicNodeProjectionSupport;\n (\n input: Readonly<{\n creates: readonly AtomicNodeBatchEntry[];\n updates: readonly AtomicNodeResolvedUpdateEntry[];\n schemaFence: SchemaWriteFenceParams;\n }>,\n ): Promise<AtomicNodeResolvedMutationSetResult>;\n}\n\n/** Ordered edge postimages returned by a mixed resolved mutation set. */\nexport type AtomicEdgeResolvedMutationSetResult = Readonly<{\n created: readonly EdgeRow[];\n updated: readonly EdgeRow[];\n}>;\n\n/** Complete schema-fenced input to a mixed resolved edge mutation set. */\nexport type AtomicEdgeResolvedMutationSetInput = Readonly<{\n kind: \"resolved-set\";\n creates: readonly InsertEdgeParams[];\n updates: readonly AtomicEdgeResolvedUpdateEntry[];\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Executes resolved edge sets and durable convergence for one exact root. */\nexport interface AtomicEdgeMutationProgramExecutor {\n readonly maxEntries: Readonly<{\n resolvedSet: number;\n durableConvergence: number;\n }>;\n (\n input: AtomicEdgeResolvedMutationSetInput,\n ): Promise<AtomicEdgeResolvedMutationSetResult>;\n (\n input: AtomicEdgeConvergenceInput,\n ): Promise<readonly AtomicEdgeConvergenceResult[]>;\n}\n\n/** Internal proof that the closed SQL program rejected a missing endpoint. */\nexport class AtomicEdgeBatchEndpointRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic edge batch endpoint validation failed\", { cause });\n this.name = \"AtomicEdgeBatchEndpointRefusalError\";\n }\n}\n\n/** Internal proof that the closed SQL program refused a cardinality claim. */\nexport class AtomicEdgeBatchCardinalityRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic edge batch cardinality validation failed\", { cause });\n this.name = \"AtomicEdgeBatchCardinalityRefusalError\";\n }\n}\n\n/** Internal proof that native convergence encountered a tombstoned winner. */\nexport class AtomicEdgeConvergenceTombstoneRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic edge convergence requires portable resurrection\", { cause });\n this.name = \"AtomicEdgeConvergenceTombstoneRefusalError\";\n }\n}\n\n/** Internal proof that an edge-delete input belongs to another collection. */\nexport class AtomicEdgeDeleteIdentityRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic edge delete batch identity validation failed\", { cause });\n this.name = \"AtomicEdgeDeleteIdentityRefusalError\";\n }\n}\n\n/** Internal proof that a restricted node still has a live connected edge. */\nexport class AtomicNodeDeleteRestrictedRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic node delete batch restriction validation failed\", { cause });\n this.name = \"AtomicNodeDeleteRestrictedRefusalError\";\n }\n}\n\n/**\n * The semantic mutation families one exact bundled root can lower today.\n * New families extend this profile instead of adding another root registry.\n */\nexport type AtomicMutationProgramExecutor = Readonly<{\n createNodes?: AtomicNodeBatchExecutor;\n replaceNodes?: AtomicNodeReplacementBatchExecutor;\n createEdges?: AtomicEdgeBatchExecutor;\n deleteNodes?: AtomicNodeDeleteBatchExecutor;\n deleteEdges?: AtomicEdgeDeleteBatchExecutor;\n updateNodes?: AtomicNodeResolvedUpdateBatchExecutor;\n updateEdges?: AtomicEdgeResolvedUpdateBatchExecutor;\n mutateNodes?: AtomicNodeResolvedMutationSetExecutor;\n mutateEdges?: AtomicEdgeMutationProgramExecutor;\n}>;\n\n/** Every independently enabled semantic variant in a mutation profile. */\nexport const ATOMIC_MUTATION_PROGRAM_VARIANTS = [\n \"createNodes\",\n \"replaceNodes\",\n \"createEdges\",\n \"deleteNodes\",\n \"deleteEdges\",\n \"updateNodes\",\n \"updateEdges\",\n \"mutateNodes\",\n \"mutateEdges.resolvedSet\",\n \"mutateEdges.durableConvergence\",\n] as const;\n\n/** One independently enabled semantic variant in a mutation profile. */\nexport type AtomicMutationProgramVariant =\n (typeof ATOMIC_MUTATION_PROGRAM_VARIANTS)[number];\n\n/** One owner for the overloaded edge-mutation input/variant correlation. */\nexport const ATOMIC_EDGE_MUTATION_VARIANT_BY_KIND = {\n \"durable-convergence\": \"mutateEdges.durableConvergence\",\n \"resolved-set\": \"mutateEdges.resolvedSet\",\n} as const satisfies Readonly<\n Record<\n | AtomicEdgeConvergenceInput[\"kind\"]\n | AtomicEdgeResolvedMutationSetInput[\"kind\"],\n Extract<AtomicMutationProgramVariant, `mutateEdges.${string}`>\n >\n>;\n\n/**\n * Owns which semantic variants a normalized profile can reach independently.\n *\n * A zero limit is an honest opt-out. Singleton updates reach the update-only\n * families directly on every exact root. Mixed resolved sets move their\n * collection-level read/partition/write unit into an interactive transaction;\n * an interactive root therefore cannot reach them, while an exact registered\n * `atomicBatch: \"session\"` target can. Conformance consumes this owner instead\n * of inferring session reachability from transaction availability.\n */\nexport function reachableAtomicMutationProgramVariants(\n profile: AtomicMutationProgramExecutor,\n execution: Pick<\n GraphBackend[\"capabilities\"][\"execution\"],\n \"atomicBatch\" | \"interactiveTransactions\"\n >,\n): readonly AtomicMutationProgramVariant[] {\n const variants: AtomicMutationProgramVariant[] = [];\n const resolvedMutationSetsReachable =\n !execution.interactiveTransactions || execution.atomicBatch === \"session\";\n if (profile.createNodes !== undefined) variants.push(\"createNodes\");\n if (\n (profile.replaceNodes?.maxEntries.plain ?? 0) > 0 ||\n (profile.replaceNodes?.maxEntries.claimed ?? 0) > 0\n ) {\n variants.push(\"replaceNodes\");\n }\n if (profile.createEdges !== undefined) variants.push(\"createEdges\");\n if (profile.deleteNodes !== undefined) variants.push(\"deleteNodes\");\n if (profile.deleteEdges !== undefined) variants.push(\"deleteEdges\");\n if ((profile.updateNodes?.maxEntries ?? 0) > 0) {\n variants.push(\"updateNodes\");\n }\n if ((profile.updateEdges?.maxEntries ?? 0) > 0) {\n variants.push(\"updateEdges\");\n }\n if (\n resolvedMutationSetsReachable &&\n (profile.mutateNodes?.maxEntries ?? 0) > 0\n ) {\n variants.push(\"mutateNodes\");\n }\n if (\n resolvedMutationSetsReachable &&\n (profile.mutateEdges?.maxEntries.resolvedSet ?? 0) > 0\n ) {\n variants.push(\"mutateEdges.resolvedSet\");\n }\n if ((profile.mutateEdges?.maxEntries.durableConvergence ?? 0) > 0) {\n variants.push(\"mutateEdges.durableConvergence\");\n }\n return variants;\n}\n\n/**\n * Semantic mutation families implemented by one exact backend root.\n *\n * Registering this profile is an explicit claim about TypeGraph write\n * semantics, not merely transport mechanics. Each optional member authorizes\n * only that family; omitted families retain the complete portable path.\n */\nexport type AtomicMutationProgramRegistration = Readonly<{\n createNodes?: AtomicNodeBatchExecutor | undefined;\n replaceNodes?: AtomicNodeReplacementBatchExecutor | undefined;\n createEdges?: AtomicEdgeBatchExecutor | undefined;\n deleteNodes?: AtomicNodeDeleteBatchExecutor | undefined;\n deleteEdges?: AtomicEdgeDeleteBatchExecutor | undefined;\n updateNodes?: AtomicNodeResolvedUpdateBatchExecutor | undefined;\n updateEdges?: AtomicEdgeResolvedUpdateBatchExecutor | undefined;\n mutateNodes?: AtomicNodeResolvedMutationSetExecutor | undefined;\n mutateEdges?: AtomicEdgeMutationProgramExecutor | undefined;\n}>;\n\nconst ATOMIC_MUTATION_PROGRAM_EXECUTORS = new WeakMap<\n object,\n AtomicMutationProgramExecutor\n>();\n\ntype AtomicMutationProgramDispatchObserver = (\n variant: AtomicMutationProgramVariant,\n) => void;\n\nconst ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS = new WeakMap<\n object,\n AtomicMutationProgramDispatchObserver\n>();\nconst INSTRUMENTED_ATOMIC_MUTATION_EXECUTOR_TARGETS = new WeakMap<\n object,\n object\n>();\n\nfunction reportAtomicMutationProgramDispatch(\n target: object,\n variant: AtomicMutationProgramVariant,\n): void {\n ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS.get(target)?.(variant);\n}\n\nfunction instrumentAtomicMutationProgramExecutors(\n target: object,\n profile: AtomicMutationProgramRegistration,\n): AtomicMutationProgramExecutor {\n type Descriptor = Readonly<{\n variant: (input: unknown) => AtomicMutationProgramVariant;\n }>;\n const descriptors = {\n createEdges: { variant: () => \"createEdges\" },\n createNodes: { variant: () => \"createNodes\" },\n replaceNodes: { variant: () => \"replaceNodes\" },\n deleteEdges: { variant: () => \"deleteEdges\" },\n deleteNodes: { variant: () => \"deleteNodes\" },\n mutateEdges: {\n variant: (input: unknown) =>\n ATOMIC_EDGE_MUTATION_VARIANT_BY_KIND[\n (\n input as\n AtomicEdgeConvergenceInput | AtomicEdgeResolvedMutationSetInput\n ).kind\n ],\n },\n mutateNodes: { variant: () => \"mutateNodes\" },\n updateEdges: { variant: () => \"updateEdges\" },\n updateNodes: { variant: () => \"updateNodes\" },\n } as const satisfies Record<\n keyof AtomicMutationProgramRegistration,\n Descriptor\n >;\n\n function instrument<TExecutor extends object>(\n source: TExecutor,\n descriptor: Descriptor,\n ): TExecutor {\n if (INSTRUMENTED_ATOMIC_MUTATION_EXECUTOR_TARGETS.get(source) === target) {\n return source;\n }\n const callable = source as unknown as (\n ...arguments_: readonly unknown[]\n ) => unknown;\n const instrumented = new Proxy(callable, {\n apply(sourceExecutor, thisArgument, argumentsList) {\n reportAtomicMutationProgramDispatch(\n target,\n descriptor.variant(argumentsList[0]),\n );\n return Reflect.apply(sourceExecutor, thisArgument, argumentsList);\n },\n });\n INSTRUMENTED_ATOMIC_MUTATION_EXECUTOR_TARGETS.set(instrumented, target);\n return instrumented as unknown as TExecutor;\n }\n\n const entries = ATOMIC_MUTATION_PROGRAM_FAMILIES.flatMap((family) => {\n const executor = profile[family];\n return executor === undefined ?\n []\n : [[family, instrument(executor, descriptors[family])] as const];\n });\n return Object.freeze(\n Object.fromEntries(entries) as AtomicMutationProgramExecutor,\n );\n}\n\n/** @internal Runs work while observing dispatches from this exact resource. */\nexport async function withAtomicMutationProgramDispatchObserver<TResult>(\n target: object,\n observer: AtomicMutationProgramDispatchObserver,\n run: () => TResult | PromiseLike<TResult>,\n): Promise<TResult> {\n if (ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS.has(target)) {\n throw new ConfigurationError(\n \"Atomic mutation program dispatch observation is already active for this exact resource.\",\n { code: \"ATOMIC_MUTATION_PROGRAM_OBSERVER_ALREADY_ACTIVE\" },\n );\n }\n ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS.set(target, observer);\n try {\n return await run();\n } finally {\n ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS.delete(target);\n }\n}\n\nconst ATOMIC_MUTATION_PROGRAM_FAMILIES = [\n \"createNodes\",\n \"replaceNodes\",\n \"createEdges\",\n \"deleteNodes\",\n \"deleteEdges\",\n \"updateNodes\",\n \"updateEdges\",\n \"mutateNodes\",\n \"mutateEdges\",\n] as const satisfies readonly (keyof AtomicMutationProgramRegistration)[];\n\nfunction assertNonnegativeIntegerLimit(\n family: keyof AtomicMutationProgramRegistration,\n name: string,\n value: unknown,\n): void {\n if (typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0) {\n return;\n }\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires a nonnegative integer ${name}.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: name,\n value,\n },\n );\n}\n\nfunction assertAtomicMutationProgramLimits(\n family: keyof AtomicMutationProgramRegistration,\n executor: AtomicMutationProgramRegistration[typeof family],\n): void {\n if (executor === undefined) return;\n if (family === \"createNodes\" || family === \"replaceNodes\") {\n const nodeExecutor = executor as\n AtomicNodeBatchExecutor | AtomicNodeReplacementBatchExecutor;\n assertAtomicNodeClaimSupport(family, nodeExecutor.claimSupport);\n assertAtomicNodeProjectionSupport(family, nodeExecutor.projectionSupport);\n if (family === \"replaceNodes\") {\n const replacementExecutor =\n nodeExecutor as AtomicNodeReplacementBatchExecutor;\n const releasedClaimFamilies = replacementExecutor.releasedClaimFamilies;\n if (releasedClaimFamilies !== undefined) {\n assertAtomicNodeClaimFamilies(\n family,\n \"releasedClaimFamilies\",\n releasedClaimFamilies,\n );\n }\n const maxEntries = (\n replacementExecutor as unknown as Readonly<Record<string, unknown>>\n )[\"maxEntries\"];\n if (typeof maxEntries !== \"object\" || maxEntries === null) {\n throw new ConfigurationError(\n \"Atomic mutation program family replaceNodes requires maxEntries metadata.\",\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"maxEntries\",\n value: maxEntries,\n },\n );\n }\n const limits = maxEntries as Readonly<Record<string, unknown>>;\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries.plain\",\n limits[\"plain\"],\n );\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries.claimed\",\n limits[\"claimed\"],\n );\n const accepts = (executor as AtomicNodeReplacementBatchExecutor).accepts;\n if (accepts !== undefined && typeof accepts !== \"function\") {\n throw new ConfigurationError(\n \"Atomic mutation program family replaceNodes requires a callable accepts predicate.\",\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"accepts\",\n value: accepts,\n },\n );\n }\n }\n return;\n }\n if (family === \"deleteNodes\") {\n const releasedClaimFamilies: unknown = (\n executor as AtomicNodeDeleteBatchExecutor\n ).releasedClaimFamilies;\n if (releasedClaimFamilies !== undefined) {\n assertAtomicNodeClaimFamilies(\n family,\n \"releasedClaimFamilies\",\n releasedClaimFamilies,\n );\n }\n return;\n }\n if (\n family === \"updateNodes\" ||\n family === \"updateEdges\" ||\n family === \"mutateNodes\"\n ) {\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries\",\n (executor as Readonly<{ maxEntries: unknown }>).maxEntries,\n );\n if (family === \"updateNodes\" || family === \"mutateNodes\") {\n assertAtomicNodeProjectionSupport(\n family,\n (\n executor as\n | AtomicNodeResolvedMutationSetExecutor\n | AtomicNodeResolvedUpdateBatchExecutor\n ).projectionSupport,\n );\n }\n return;\n }\n if (family === \"mutateEdges\") {\n const limits: unknown = (executor as AtomicEdgeMutationProgramExecutor)\n .maxEntries;\n if (typeof limits !== \"object\" || limits === null) {\n throw new ConfigurationError(\n \"Atomic mutation program family mutateEdges requires maxEntries limits.\",\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"maxEntries\",\n value: limits,\n },\n );\n }\n const edgeLimits = limits as Readonly<Record<PropertyKey, unknown>>;\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries.resolvedSet\",\n edgeLimits[\"resolvedSet\"],\n );\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries.durableConvergence\",\n edgeLimits[\"durableConvergence\"],\n );\n }\n}\n\nfunction normalizeAtomicMutationProgramRegistration(\n registration: AtomicMutationProgramRegistration,\n): AtomicMutationProgramExecutor {\n const uncheckedRegistration: unknown = registration;\n if (\n typeof uncheckedRegistration !== \"object\" ||\n uncheckedRegistration === null\n ) {\n throw new ConfigurationError(\n \"An atomic mutation program registration must be an object.\",\n { code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\" },\n );\n }\n const entries: [\n keyof AtomicMutationProgramRegistration,\n NonNullable<\n AtomicMutationProgramRegistration[keyof AtomicMutationProgramRegistration]\n >,\n ][] = [];\n for (const family of ATOMIC_MUTATION_PROGRAM_FAMILIES) {\n const executor = registration[family];\n if (executor === undefined) continue;\n if (typeof executor !== \"function\") {\n throw new ConfigurationError(\n `Atomic mutation program family ${family} must be callable.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n },\n );\n }\n assertAtomicMutationProgramLimits(family, executor);\n entries.push([family, executor]);\n }\n if (entries.length === 0) {\n throw new ConfigurationError(\n \"An atomic mutation program registration must implement at least one semantic family.\",\n { code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\" },\n );\n }\n return Object.freeze(\n Object.fromEntries(entries) as AtomicMutationProgramExecutor,\n );\n}\n\nfunction throwAtomicMutationProgramRegistrationMismatch(\n target: GraphBackend | TransactionBackend,\n): never {\n throw new ConfigurationError(\n \"Atomic mutation programs require an exact backend session with a registered atomic SQL transport.\",\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n atomicBatch: target.capabilities.execution.atomicBatch,\n transportRegistered: hasAtomicSqlProgramRegistration(target),\n },\n {\n suggestion:\n \"Register and validate the exact-session atomic SQL transport before registering only the TypeGraph mutation families this backend implements.\",\n },\n );\n}\n\n/**\n * Registers TypeGraph semantic mutation programs for one exact backend resource.\n *\n * Transport registration proves atomic statement dispatch only. This second,\n * explicit profile declares which graph mutation families preserve their\n * complete schema-fence, validation, side-effect, refusal, and result-ordering\n * contracts. Object-identity registration prevents derived, projected, and\n * other transaction sessions from inheriting execution evidence.\n */\nexport function registerAtomicMutationPrograms<\n T extends GraphBackend | TransactionBackend,\n>(target: T, registration: AtomicMutationProgramRegistration): T {\n if (\n !supportsAtomicBatch(target) ||\n !hasAtomicSqlProgramRegistration(target)\n ) {\n throwAtomicMutationProgramRegistrationMismatch(target);\n }\n if (ATOMIC_MUTATION_PROGRAM_EXECUTORS.has(target)) {\n throw new ConfigurationError(\n \"Atomic mutation programs are already registered for this exact backend resource.\",\n { code: \"ATOMIC_MUTATION_PROGRAM_ALREADY_REGISTERED\" },\n );\n }\n ATOMIC_MUTATION_PROGRAM_EXECUTORS.set(\n target,\n instrumentAtomicMutationProgramExecutors(\n target,\n normalizeAtomicMutationProgramRegistration(registration),\n ),\n );\n return target;\n}\n\n/** Returns whether this exact resource owns a semantic program profile. */\nexport function hasAtomicMutationProgramRegistration(\n target: GraphBackend | TransactionBackend,\n): boolean {\n return ATOMIC_MUTATION_PROGRAM_EXECUTORS.has(target);\n}\n\n/** Resolves semantic mutation programs only for their exact registered resource. */\nexport function resolveAtomicMutationPrograms(\n target: GraphBackend | TransactionBackend,\n): AtomicMutationProgramExecutor | undefined {\n return ATOMIC_MUTATION_PROGRAM_EXECUTORS.get(target);\n}\n\n/**\n * Re-registers exact-session evidence on a transparent transaction wrapper.\n *\n * Session authority is never inherited implicitly: the wrapper seam calls\n * this only after deriving a backend that forwards to the same pinned command\n * session. Root registrations remain non-transferable.\n *\n * @internal\n */\nexport function carryAtomicMutationSessionRegistration<\n T extends TransactionBackend,\n>(base: TransactionBackend, derived: T): T {\n if (\n base.capabilities.execution.atomicBatch !== \"session\" ||\n derived.capabilities.execution.atomicBatch !== \"session\"\n ) {\n return derived;\n }\n const executeAtomicBatch = resolveRegisteredAtomicSqlBatchExecutor(base);\n const profile = resolveAtomicMutationPrograms(base);\n if (executeAtomicBatch === undefined || profile === undefined) return derived;\n registerAtomicSqlProgram(derived, executeAtomicBatch);\n registerAtomicMutationPrograms(derived, profile);\n return derived;\n}\n\n/**\n * @internal Test-only compatibility seam.\n *\n * Production factories must use registerAtomicMutationPrograms() so transport,\n * declaration, shape, and duplicate-registration validation cannot be skipped.\n */\nexport function markBundledRootAtomicMutationPrograms<T extends object>(\n target: T,\n executor: Readonly<{\n createNodes?: AtomicNodeBatchExecutor | undefined;\n replaceNodes?: AtomicNodeReplacementBatchExecutor | undefined;\n createEdges?: AtomicEdgeBatchExecutor | undefined;\n deleteNodes?: AtomicNodeDeleteBatchExecutor | undefined;\n deleteEdges?: AtomicEdgeDeleteBatchExecutor | undefined;\n updateNodes?: AtomicNodeResolvedUpdateBatchExecutor | undefined;\n updateEdges?: AtomicEdgeResolvedUpdateBatchExecutor | undefined;\n mutateNodes?: AtomicNodeResolvedMutationSetExecutor | undefined;\n mutateEdges?: AtomicEdgeMutationProgramExecutor | undefined;\n }>,\n): T {\n ATOMIC_MUTATION_PROGRAM_EXECUTORS.set(\n target,\n instrumentAtomicMutationProgramExecutors(target, executor),\n );\n return target;\n}\n\n/** @internal Compatibility seam for bundled-factory and backend tests. */\nexport function resolveBundledRootAtomicMutationPrograms(\n target: GraphBackend | TransactionBackend,\n): AtomicMutationProgramExecutor | undefined {\n return resolveAtomicMutationPrograms(target);\n}\n\n/** @internal Narrow test seam over the single mutation-program registry. */\nexport function markBundledRootAtomicNodeBatch<T extends object>(\n target: T,\n executor: AtomicNodeBatchExecutor,\n): T {\n const existing = ATOMIC_MUTATION_PROGRAM_EXECUTORS.get(target);\n return markBundledRootAtomicMutationPrograms(target, {\n ...existing,\n createNodes: executor,\n });\n}\n\n/** @internal Narrow test seam over the single mutation-program registry. */\nexport function markBundledRootAtomicEdgeBatch<T extends object>(\n target: T,\n executor: AtomicEdgeBatchExecutor,\n): T {\n const existing = ATOMIC_MUTATION_PROGRAM_EXECUTORS.get(target);\n return markBundledRootAtomicMutationPrograms(target, {\n ...existing,\n createEdges: executor,\n });\n}\n\n/** @internal Narrow test seam over the single mutation-program registry. */\nexport function resolveBundledRootAtomicNodeBatch(\n target: GraphBackend | TransactionBackend,\n): AtomicNodeBatchExecutor | undefined {\n return resolveAtomicMutationPrograms(target)?.createNodes;\n}\n\n/** @internal Narrow test seam over the single mutation-program registry. */\nexport function resolveBundledRootAtomicEdgeBatch(\n target: GraphBackend | TransactionBackend,\n): AtomicEdgeBatchExecutor | undefined {\n return resolveAtomicMutationPrograms(target)?.createEdges;\n}\n"]}
1
+ {"version":3,"sources":["../src/backend/capabilities/atomic-sql-program.ts","../src/backend/capabilities/atomic-mutation-program.ts"],"names":[],"mappings":"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","file":"chunk-UFKYMQJ5.js","sourcesContent":["/**\n * Internal execution boundary for a closed, precompiled SQL write program.\n *\n * This is deliberately an out-of-band exact-resource capability. An author\n * registers either a root that owns the atomic boundary or an already-open\n * transaction session. Derived backends and other transaction objects do not\n * inherit the registration. A static batch is therefore never forwarded\n * through a wrapper whose behavior has not been audited for the program\n * contract.\n */\nimport { CompilerInvariantError, ConfigurationError } from \"../../errors\";\nimport type { GraphBackend, TransactionBackend } from \"../types\";\n\nexport type AtomicSqlRow = Readonly<Record<string, unknown>>;\n\n/** A transport-ready statement in the portable atomic-program protocol. */\nexport type CompiledAtomicSqlStatement = Readonly<{\n params: readonly unknown[];\n sql: string;\n}>;\n\n/** A native all-or-nothing dispatch for a closed statement sequence. */\nexport type AtomicSqlBatchExecutor = <TRow>(\n statements: readonly CompiledAtomicSqlStatement[],\n) => Promise<readonly (readonly TRow[])[]>;\n\nexport type AtomicSqlProgramAdapter = Readonly<{\n executeAtomicBatch?: AtomicSqlBatchExecutor;\n}>;\n\n/** The transport forms accepted by an atomic program author. */\nexport type AtomicSqlProgramRegistration =\n AtomicSqlBatchExecutor | AtomicSqlProgramAdapter;\n\ntype AtomicSqlResultCardinality = \"none\" | \"one\" | \"many\";\n\n/** One closed statement and the typed decoder for its result slot. */\ntype AtomicSqlProgramSlot<TResult> = Readonly<{\n statement: CompiledAtomicSqlStatement;\n cardinality: AtomicSqlResultCardinality;\n decode: (rows: readonly AtomicSqlRow[]) => TResult;\n}>;\n\n/**\n * A statically closed program. Every slot uses the same result union so a\n * heterogeneous node/edge program can still preserve a typed result at the\n * program boundary without introducing `any` into the erased executor.\n */\nexport type AtomicSqlProgram<TRowResult, TResult> = Readonly<{\n slots: readonly AtomicSqlProgramSlot<TRowResult>[];\n assemble: (results: readonly TRowResult[]) => TResult;\n}>;\n\nexport type AtomicSqlProgramExecutor = Readonly<{\n execute: <TRowResult, TResult>(\n program: AtomicSqlProgram<TRowResult, TResult>,\n ) => Promise<TResult>;\n}>;\n\ntype RegisteredAtomicSqlProgram = Readonly<{\n executeAtomicBatch: AtomicSqlBatchExecutor;\n executor: AtomicSqlProgramExecutor;\n}>;\n\nconst ATOMIC_SQL_PROGRAM_EXECUTORS = new WeakMap<\n object,\n RegisteredAtomicSqlProgram\n>();\n\nfunction assertResultCardinality(\n slot: Readonly<{ cardinality: AtomicSqlResultCardinality }>,\n index: number,\n rows: readonly AtomicSqlRow[],\n): void {\n const valid =\n slot.cardinality === \"none\" ? rows.length === 0\n : slot.cardinality === \"one\" ? rows.length === 1\n : true;\n if (valid) return;\n throw new CompilerInvariantError(\n `Atomic SQL program slot ${index} returned ${rows.length} rows, ` +\n `expected ${slot.cardinality}.`,\n {\n slot: index,\n cardinality: slot.cardinality,\n rowCount: rows.length,\n },\n );\n}\n\nfunction assertResultSlotCount(\n expected: number,\n actual: readonly (readonly AtomicSqlRow[])[],\n): void {\n if (expected === actual.length) return;\n throw new CompilerInvariantError(\n `Atomic SQL program returned ${actual.length} result slots, ` +\n `expected ${expected}.`,\n { expected, actual: actual.length },\n );\n}\n\nfunction isAtomicSqlResultSlots(\n value: unknown,\n): value is readonly (readonly AtomicSqlRow[])[] {\n return Array.isArray(value) && value.every((slot) => Array.isArray(slot));\n}\n\n/** Executes the one canonical closed-program protocol. */\nasync function executeAtomicSqlProgram<TRowResult, TResult>(\n executeAtomicBatch: AtomicSqlBatchExecutor,\n program: AtomicSqlProgram<TRowResult, TResult>,\n): Promise<TResult> {\n if (program.slots.length === 0) return program.assemble([]);\n\n const statements = program.slots.map((slot) => slot.statement);\n const result: unknown = await executeAtomicBatch<AtomicSqlRow>(statements);\n if (!isAtomicSqlResultSlots(result)) {\n throw new CompilerInvariantError(\n \"Atomic SQL program executor returned malformed result slots.\",\n { resultType: typeof result },\n );\n }\n const rows = result;\n\n assertResultSlotCount(program.slots.length, rows);\n const decoded = program.slots.map((slot, index) => {\n const slotRows = rows[index];\n if (slotRows === undefined) {\n throw new CompilerInvariantError(\n `Atomic SQL program result slot ${index} is missing.`,\n { slot: index },\n );\n }\n assertResultCardinality(slot, index, slotRows);\n return slot.decode(slotRows);\n });\n\n return program.assemble(decoded);\n}\n\nfunction createExecutor(\n executeAtomicBatch: AtomicSqlBatchExecutor,\n): AtomicSqlProgramExecutor {\n return {\n async execute<TRowResult, TResult>(\n program: AtomicSqlProgram<TRowResult, TResult>,\n ): Promise<TResult> {\n return executeAtomicSqlProgram(executeAtomicBatch, program);\n },\n };\n}\n\n/** @internal Creates the executor shared by lowering and root registration. */\nexport function createAtomicSqlProgramExecutor(\n adapter: AtomicSqlProgramAdapter,\n): AtomicSqlProgramExecutor | undefined {\n const executeAtomicBatch = adapter.executeAtomicBatch;\n return typeof executeAtomicBatch === \"function\" ?\n createExecutor(executeAtomicBatch)\n : undefined;\n}\n\nfunction normalizeAtomicSqlProgramRegistration(\n registration: AtomicSqlProgramRegistration,\n): RegisteredAtomicSqlProgram | undefined {\n const adapter: AtomicSqlProgramAdapter =\n typeof registration === \"function\" ?\n { executeAtomicBatch: registration }\n : registration;\n const executeAtomicBatch = adapter.executeAtomicBatch;\n const executor = createAtomicSqlProgramExecutor(adapter);\n return executeAtomicBatch === undefined || executor === undefined ?\n undefined\n : { executeAtomicBatch, executor };\n}\n\nfunction throwAtomicSqlProgramRegistrationMismatch(\n target: GraphBackend | TransactionBackend,\n registration: RegisteredAtomicSqlProgram | undefined,\n): never {\n const declaration = target.capabilities.execution.atomicBatch;\n throw new ConfigurationError(\n \"An atomic SQL program requires exact-session atomic-batch authority and a usable batch executor.\",\n {\n code: \"ATOMIC_SQL_PROGRAM_REGISTRATION_MISMATCH\",\n declared: declaration,\n registered: registration !== undefined,\n },\n {\n suggestion:\n 'Declare `atomicBatch: \"root\"` on an exact root executor or `\"session\"` on an already-open transaction session, then register that exact object.',\n },\n );\n}\n\nfunction declaredCommandSession(target: object): unknown {\n const commands = Reflect.get(target, \"commands\") as unknown;\n if (typeof commands !== \"object\" || commands === null) return;\n return Reflect.get(commands, \"session\") as unknown;\n}\n\n/**\n * Registers an atomic SQL program executor for one exact backend resource.\n *\n * The declaration and executable transport are checked together so a backend\n * cannot claim atomic execution while omitting the executor, nor expose\n * an executor without declaring the session on which it is valid. The\n * registration is keyed by object identity; derived backends and other\n * transaction sessions therefore do not resolve this program.\n */\nexport function registerAtomicSqlProgram<\n T extends GraphBackend | TransactionBackend,\n>(target: T, registration: AtomicSqlProgramRegistration): T {\n if (ATOMIC_SQL_PROGRAM_EXECUTORS.has(target)) {\n throw new ConfigurationError(\n \"An atomic SQL program is already registered for this exact backend resource.\",\n { code: \"ATOMIC_SQL_PROGRAM_ALREADY_REGISTERED\" },\n );\n }\n const executor = normalizeAtomicSqlProgramRegistration(registration);\n const declaration = target.capabilities.execution.atomicBatch;\n const declaredSession = declaredCommandSession(target);\n const sessionMatches =\n (declaration === \"root\" && declaredSession === \"root\") ||\n (declaration === \"session\" && declaredSession === \"transaction\");\n if (declaration === \"none\" || !sessionMatches || executor === undefined) {\n throwAtomicSqlProgramRegistrationMismatch(target, executor);\n }\n ATOMIC_SQL_PROGRAM_EXECUTORS.set(target, executor);\n return target;\n}\n\n/**\n * Resolves the static program executor for an exact registered resource.\n * Other transaction sessions and derived/projected backends return `undefined`.\n */\nexport function resolveAtomicSqlProgramExecutor(\n target: GraphBackend | TransactionBackend,\n): AtomicSqlProgramExecutor | undefined {\n return ATOMIC_SQL_PROGRAM_EXECUTORS.get(target)?.executor;\n}\n\n/** @internal Resolves the exact batch function registered on one resource. */\nexport function resolveRegisteredAtomicSqlBatchExecutor(\n target: GraphBackend | TransactionBackend,\n): AtomicSqlBatchExecutor | undefined {\n return ATOMIC_SQL_PROGRAM_EXECUTORS.get(target)?.executeAtomicBatch;\n}\n\n/** Returns whether this exact object owns a registered atomic SQL transport. */\nexport function hasAtomicSqlProgramRegistration(\n target: GraphBackend | TransactionBackend,\n): boolean {\n return ATOMIC_SQL_PROGRAM_EXECUTORS.has(target);\n}\n","/**\n * Exact-resource execution profile for closed semantic mutation programs.\n *\n * The transport-level atomic SQL executor answers only \"can this exact resource\n * submit a closed statement sequence atomically?\" This profile is the next\n * layer up: it names the TypeGraph mutations the backend can lower onto that\n * transport. Keeping every mutation family in one exact-resource registration\n * prevents each new operation from inventing another provenance WeakMap.\n */\nimport { ConfigurationError } from \"../../errors\";\nimport type {\n ClaimEdgeCardinalityParams,\n EdgeConvergenceMatch,\n EdgeRow,\n GraphBackend,\n InsertEdgeParams,\n InsertNodeParams,\n NodeInsertClaim,\n NodeInsertProjection,\n NodeRow,\n SchemaWriteFenceParams,\n TransactionBackend,\n} from \"../types\";\nimport { supportsAtomicBatch } from \"../types\";\nimport {\n hasAtomicSqlProgramRegistration,\n registerAtomicSqlProgram,\n resolveRegisteredAtomicSqlBatchExecutor,\n} from \"./atomic-sql-program\";\n\n/** How a node batch member obtained the identifier stored by its program. */\nexport type AtomicNodeBatchIdSource = \"generated\" | \"caller\";\n/** Whether a node batch returns only its count or its ordered postimages. */\nexport type AtomicNodeBatchResultMode = \"count\" | \"rows\";\n\n/** Independently provable claim semantics accepted by a node mutation family. */\nexport type AtomicNodeClaimFamily = \"disjointness\" | \"uniqueness\";\n\n/** Independently provable derived-storage families in a node program. */\nexport type AtomicNodeProjectionFamily = \"embedding\" | \"fulltext\";\n\n/**\n * One complete derived-storage transition attached to a node postimage.\n *\n * Identity stays on the containing row entry so a projection cannot target a\n * different node. Embedding deletes are explicit because updates and\n * caller-id resurrection can remove a value that previously existed.\n */\nexport type AtomicNodeProjection =\n | Extract<NodeInsertProjection, { kind: \"fulltext\" }>\n | Readonly<{\n kind: \"embedding\";\n action: \"upsert\";\n fieldPath: string;\n embedding: readonly number[];\n dimensions: number;\n metric: Extract<NodeInsertProjection, { kind: \"embedding\" }>[\"metric\"];\n indexType: Extract<\n NodeInsertProjection,\n { kind: \"embedding\" }\n >[\"indexType\"];\n }>\n | Readonly<{\n kind: \"embedding\";\n action: \"delete\";\n fieldPath: string;\n dimensions: number;\n metric: Extract<NodeInsertProjection, { kind: \"embedding\" }>[\"metric\"];\n indexType: Extract<\n NodeInsertProjection,\n { kind: \"embedding\" }\n >[\"indexType\"];\n }>;\n\n/** Closed derived-storage envelope advertised by one node executor. */\nexport type AtomicNodeProjectionSupport = Readonly<{\n families: readonly AtomicNodeProjectionFamily[];\n}>;\n\n/** Closed claim envelope advertised by one node mutation executor. */\nexport type AtomicNodeClaimSupport = Readonly<{\n /** Independently proved claim families; an omitted family is unsupported. */\n families: readonly AtomicNodeClaimFamily[];\n /**\n * Maximum compiled claim/probe bind cost one member may contribute to its\n * write gate.\n * Compute a member's required value with {@link atomicNodeClaimInputCost};\n * backend implementations must not reproduce the SQL cost formula.\n * Total batch size is deliberately absent: the executor chunks statements\n * inside one atomic transport submission.\n */\n maxInputCostPerEntry: number;\n}>;\n\nfunction isAtomicNodeClaimFamily(\n value: unknown,\n): value is AtomicNodeClaimFamily {\n return value === \"disjointness\" || value === \"uniqueness\";\n}\n\nfunction assertAtomicNodeClaimFamilies(\n family: keyof AtomicMutationProgramRegistration,\n name: string,\n value: unknown,\n): void {\n if (\n Array.isArray(value) &&\n new Set(value).size === value.length &&\n value.every((claimFamily) => isAtomicNodeClaimFamily(claimFamily))\n ) {\n return;\n }\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires distinct ${name}.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: name,\n value,\n },\n );\n}\n\nfunction assertAtomicNodeClaimSupport(\n family: \"createNodes\" | \"mutateNodes\" | \"replaceNodes\",\n value: unknown,\n): void {\n if (value === undefined) return;\n if (typeof value !== \"object\" || value === null) {\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires claimSupport metadata.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"claimSupport\",\n value,\n },\n );\n }\n const support = value as Readonly<Record<PropertyKey, unknown>>;\n assertAtomicNodeClaimFamilies(\n family,\n \"claimSupport.families\",\n support[\"families\"],\n );\n assertNonnegativeIntegerLimit(\n family,\n \"claimSupport.maxInputCostPerEntry\",\n support[\"maxInputCostPerEntry\"],\n );\n}\n\nfunction isAtomicNodeProjectionFamily(\n value: unknown,\n): value is AtomicNodeProjectionFamily {\n return value === \"embedding\" || value === \"fulltext\";\n}\n\nfunction assertAtomicNodeProjectionSupport(\n family: \"createNodes\" | \"mutateNodes\" | \"replaceNodes\" | \"updateNodes\",\n value: unknown,\n): void {\n if (value === undefined) return;\n if (typeof value !== \"object\" || value === null) {\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires projectionSupport metadata.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"projectionSupport\",\n value,\n },\n );\n }\n const families = (value as Readonly<Record<PropertyKey, unknown>>)[\n \"families\"\n ];\n if (\n !Array.isArray(families) ||\n new Set(families).size !== families.length ||\n !families.every((projectionFamily) =>\n isAtomicNodeProjectionFamily(projectionFamily),\n )\n ) {\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires distinct projection families.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"projectionSupport.families\",\n value: families,\n },\n );\n }\n}\n\n/** The one owner of claim-verdict to advertised-family correlation. */\nfunction atomicNodeClaimFamily(claim: NodeInsertClaim): AtomicNodeClaimFamily {\n return claim.verdict.kind;\n}\n\n/** Bind cost of one canonical claim row in an atomic node write gate. */\nconst ATOMIC_NODE_CANONICAL_CLAIM_INPUT_COST = 6;\n\n/** Bind cost of one legacy uniqueness compatibility probe. */\nconst ATOMIC_NODE_UNIQUENESS_PROBE_INPUT_COST = 9;\n\n/** Bind cost of one legacy disjointness compatibility probe. */\nconst ATOMIC_NODE_DISJOINTNESS_PROBE_INPUT_COST = 6;\n\n/** Exact compiled claim/probe bind cost one member contributes to its write gate. */\nexport function atomicNodeClaimInputCost(\n claims: readonly NodeInsertClaim[],\n): number {\n let cost = 0;\n for (const claim of claims) {\n cost += ATOMIC_NODE_CANONICAL_CLAIM_INPUT_COST;\n cost +=\n claim.verdict.kind === \"uniqueness\" ?\n ATOMIC_NODE_UNIQUENESS_PROBE_INPUT_COST *\n claim.verdict.probeAxes.filter((axis) => axis !== claim.axis).length\n : ATOMIC_NODE_DISJOINTNESS_PROBE_INPUT_COST *\n claim.verdict.conflictingKinds.length;\n }\n return cost;\n}\n\n/** Whether one executor explicitly accepts one member's complete claim set. */\nexport function supportsAtomicNodeClaims(\n support: AtomicNodeClaimSupport | undefined,\n claims: readonly NodeInsertClaim[],\n): boolean {\n if (claims.length === 0) return true;\n if (support === undefined) return false;\n const families = new Set(support.families);\n return (\n claims.every((claim) => families.has(atomicNodeClaimFamily(claim))) &&\n atomicNodeClaimInputCost(claims) <= support.maxInputCostPerEntry\n );\n}\n\n/** Whether an executor can admit at least one member of a claim family. */\nexport function supportsAtomicNodeClaimFamily(\n support: AtomicNodeClaimSupport | undefined,\n family: AtomicNodeClaimFamily,\n): boolean {\n return (\n (support?.maxInputCostPerEntry ?? 0) > 0 &&\n support?.families.includes(family) === true\n );\n}\n\n/** Whether one executor explicitly accepts every normalized projection. */\nexport function supportsAtomicNodeProjections(\n support: AtomicNodeProjectionSupport | undefined,\n families: readonly AtomicNodeProjectionFamily[],\n): boolean {\n if (families.length === 0) return true;\n if (support === undefined) return false;\n const advertised = new Set(support.families);\n return families.every((family) => advertised.has(family));\n}\n\n/** One normalized node-create member supplied to a semantic executor. */\nexport type AtomicNodeBatchEntry = Readonly<{\n idSource: AtomicNodeBatchIdSource;\n params: InsertNodeParams;\n /** Complete canonically ordered claims this row owes. */\n claims?: readonly NodeInsertClaim[];\n /** Complete derived-storage transitions owed by the written postimage. */\n projections?: readonly AtomicNodeProjection[];\n}>;\n\n/** Complete schema-fenced input to an atomic node-create family. */\nexport type AtomicNodeBatchInput = Readonly<{\n entries: readonly AtomicNodeBatchEntry[];\n resultMode: AtomicNodeBatchResultMode;\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Executes the complete eligible node-create family for one exact root. */\nexport interface AtomicNodeBatchExecutor {\n /** Claim semantics this executor can prove, omitted for plain rows only. */\n readonly claimSupport?: AtomicNodeClaimSupport;\n /** Derived-storage families this executor carries inside its program. */\n readonly projectionSupport?: AtomicNodeProjectionSupport;\n (\n input: AtomicNodeBatchInput & Readonly<{ resultMode: \"count\" }>,\n ): Promise<number>;\n (\n input: AtomicNodeBatchInput & Readonly<{ resultMode: \"rows\" }>,\n ): Promise<readonly NodeRow[]>;\n}\n\n/** One complete, preimage-free replacement supplied to a semantic executor. */\nexport type AtomicNodeReplacementEntry = Readonly<{\n params: InsertNodeParams;\n /** Complete canonically ordered claims the replacement postimage owes. */\n claims?: readonly NodeInsertClaim[];\n /** Complete derived-storage transitions owed by the replacement postimage. */\n projections?: readonly AtomicNodeProjection[];\n}>;\n\n/** Any node entry whose complete postimage drives projections/assertions. */\nexport type AtomicNodePostimageEntry =\n AtomicNodeBatchEntry | AtomicNodeReplacementEntry;\n\n/** Executes complete blind node replacements for one exact resource. */\nexport interface AtomicNodeReplacementBatchExecutor {\n /** Maximum members accepted by one atomic submission, including internal chunks. */\n readonly maxEntries: Readonly<{ plain: number; claimed: number }>;\n /** Exact no-SQL admission proof for the prepared replacement work. */\n readonly accepts?: (\n entries: readonly AtomicNodeReplacementEntry[],\n ) => boolean;\n /** Claim semantics this executor can prove, omitted for plain rows only. */\n readonly claimSupport?: AtomicNodeClaimSupport;\n /** Claim families whose earlier owner rows this program releases. */\n readonly releasedClaimFamilies?: readonly AtomicNodeClaimFamily[];\n /** Derived-storage families this executor carries inside its program. */\n readonly projectionSupport?: AtomicNodeProjectionSupport;\n (\n input: Readonly<{\n entries: readonly AtomicNodeReplacementEntry[];\n /** Whether earlier owner claims must be released before acquisition. */\n releaseClaims: boolean;\n schemaFence: SchemaWriteFenceParams;\n }>,\n ): Promise<readonly NodeRow[]>;\n}\n\n/** Count-returning input to an atomic direct edge-create family. */\nexport type AtomicEdgeBatchCountInput = Readonly<{\n claims: readonly ClaimEdgeCardinalityParams[];\n params: readonly InsertEdgeParams[];\n resultMode: \"count\";\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Postimage-returning input to an atomic direct edge-create family. */\nexport type AtomicEdgeBatchRowsInput = Readonly<{\n claims: readonly ClaimEdgeCardinalityParams[];\n params: readonly InsertEdgeParams[];\n resultMode: \"rows\";\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Executes complete eligible direct edge creates for one exact root. */\nexport interface AtomicEdgeBatchExecutor {\n (input: AtomicEdgeBatchCountInput): Promise<number>;\n (input: AtomicEdgeBatchRowsInput): Promise<readonly EdgeRow[]>;\n}\n\n/** One normalized durable edge-convergence member. */\nexport type AtomicEdgeConvergenceEntry = Readonly<{\n params: InsertEdgeParams;\n match: EdgeConvergenceMatch;\n}>;\n\n/** Authoritative row and outcome returned by durable convergence. */\nexport type AtomicEdgeConvergenceResult = Readonly<{\n row: EdgeRow;\n outcome: \"created\" | \"found\";\n}>;\n\n/** Complete schema-fenced durable edge-convergence input. */\nexport type AtomicEdgeConvergenceInput = Readonly<{\n kind: \"durable-convergence\";\n entries: readonly AtomicEdgeConvergenceEntry[];\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Complete schema-fenced direct edge-delete input. */\nexport type AtomicEdgeDeleteBatchInput = Readonly<{\n graphId: string;\n expectedKind: string;\n ids: readonly string[];\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Delete count plus explicit evidence that the schema fence matched. */\nexport type AtomicDeleteBatchResult = Readonly<{\n affectedCount: number;\n schemaFenceMatched: boolean;\n}>;\n\n/** Executes complete eligible direct edge deletes for one exact root. */\nexport type AtomicEdgeDeleteBatchExecutor = (\n input: AtomicEdgeDeleteBatchInput,\n) => Promise<AtomicDeleteBatchResult>;\n\n/** Complete schema-fenced direct node-delete input. */\nexport type AtomicNodeDeleteBatchInput = Readonly<{\n graphId: string;\n kind: string;\n ids: readonly string[];\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/**\n * Executes complete eligible direct node deletes for one exact root.\n *\n * Keep the callable as a function type intersected with its metadata. The API\n * compatibility inventory follows function aliases into their input types;\n * changing this to a callable interface would hide that contravariant edge.\n */\nexport type AtomicNodeDeleteBatchExecutor = Readonly<{\n /** Claim families whose owned sidecars this program releases. */\n releasedClaimFamilies?: readonly AtomicNodeClaimFamily[];\n}> &\n ((input: AtomicNodeDeleteBatchInput) => Promise<AtomicDeleteBatchResult>);\n\n/** One authoritative node preimage and replacement used by a resolved set. */\nexport type AtomicNodeResolvedUpdateEntry = Readonly<{\n graphId: string;\n kind: string;\n id: string;\n props: Readonly<Record<string, unknown>>;\n expectedVersion: number;\n /** Complete derived-storage transitions owed by the written postimage. */\n projections?: readonly AtomicNodeProjection[];\n}>;\n\n/** Executes a complete eligible resolved node update set. */\nexport interface AtomicNodeResolvedUpdateBatchExecutor {\n /** Maximum members accepted by one atomic submission, including internal chunks. */\n readonly maxEntries: number;\n /** Derived-storage families this executor carries inside its program. */\n readonly projectionSupport?: AtomicNodeProjectionSupport;\n (\n input: Readonly<{\n entries: readonly AtomicNodeResolvedUpdateEntry[];\n schemaFence: SchemaWriteFenceParams;\n }>,\n ): Promise<readonly NodeRow[]>;\n}\n\n/** One authoritative edge preimage and replacement used by a resolved set. */\nexport type AtomicEdgeResolvedUpdateEntry = Readonly<{\n existing: EdgeRow;\n props: Readonly<Record<string, unknown>>;\n}>;\n\n/** Executes a complete eligible resolved edge update set. */\nexport interface AtomicEdgeResolvedUpdateBatchExecutor {\n /** Maximum members accepted by one atomic submission, including internal chunks. */\n readonly maxEntries: number;\n (\n input: Readonly<{\n entries: readonly AtomicEdgeResolvedUpdateEntry[];\n schemaFence: SchemaWriteFenceParams;\n }>,\n ): Promise<readonly EdgeRow[]>;\n}\n\n/** Ordered node postimages returned by a mixed resolved mutation set. */\nexport type AtomicNodeResolvedMutationSetResult = Readonly<{\n created: readonly NodeRow[];\n updated: readonly NodeRow[];\n}>;\n\n/** Executes a complete eligible mixed node create/update set. */\nexport interface AtomicNodeResolvedMutationSetExecutor {\n /** Maximum total members accepted across the program's terminal assertions. */\n readonly maxEntries: number;\n /** Derived-storage families this executor carries inside its program. */\n readonly projectionSupport?: AtomicNodeProjectionSupport;\n (\n input: Readonly<{\n creates: readonly AtomicNodeBatchEntry[];\n updates: readonly AtomicNodeResolvedUpdateEntry[];\n schemaFence: SchemaWriteFenceParams;\n }>,\n ): Promise<AtomicNodeResolvedMutationSetResult>;\n}\n\n/** Ordered edge postimages returned by a mixed resolved mutation set. */\nexport type AtomicEdgeResolvedMutationSetResult = Readonly<{\n created: readonly EdgeRow[];\n updated: readonly EdgeRow[];\n}>;\n\n/** Complete schema-fenced input to a mixed resolved edge mutation set. */\nexport type AtomicEdgeResolvedMutationSetInput = Readonly<{\n kind: \"resolved-set\";\n creates: readonly InsertEdgeParams[];\n updates: readonly AtomicEdgeResolvedUpdateEntry[];\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Executes resolved edge sets and durable convergence for one exact root. */\nexport interface AtomicEdgeMutationProgramExecutor {\n readonly maxEntries: Readonly<{\n resolvedSet: number;\n durableConvergence: number;\n }>;\n (\n input: AtomicEdgeResolvedMutationSetInput,\n ): Promise<AtomicEdgeResolvedMutationSetResult>;\n (\n input: AtomicEdgeConvergenceInput,\n ): Promise<readonly AtomicEdgeConvergenceResult[]>;\n}\n\n/** Internal proof that the closed SQL program rejected a missing endpoint. */\nexport class AtomicEdgeBatchEndpointRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic edge batch endpoint validation failed\", { cause });\n this.name = \"AtomicEdgeBatchEndpointRefusalError\";\n }\n}\n\n/** Internal proof that the closed SQL program refused a cardinality claim. */\nexport class AtomicEdgeBatchCardinalityRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic edge batch cardinality validation failed\", { cause });\n this.name = \"AtomicEdgeBatchCardinalityRefusalError\";\n }\n}\n\n/** Internal proof that native convergence encountered a tombstoned winner. */\nexport class AtomicEdgeConvergenceTombstoneRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic edge convergence requires portable resurrection\", { cause });\n this.name = \"AtomicEdgeConvergenceTombstoneRefusalError\";\n }\n}\n\n/** Internal proof that an edge-delete input belongs to another collection. */\nexport class AtomicEdgeDeleteIdentityRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic edge delete batch identity validation failed\", { cause });\n this.name = \"AtomicEdgeDeleteIdentityRefusalError\";\n }\n}\n\n/** Internal proof that a restricted node still has a live connected edge. */\nexport class AtomicNodeDeleteRestrictedRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic node delete batch restriction validation failed\", { cause });\n this.name = \"AtomicNodeDeleteRestrictedRefusalError\";\n }\n}\n\n/**\n * The semantic mutation families one exact bundled root can lower today.\n * New families extend this profile instead of adding another root registry.\n */\nexport type AtomicMutationProgramExecutor = Readonly<{\n createNodes?: AtomicNodeBatchExecutor;\n replaceNodes?: AtomicNodeReplacementBatchExecutor;\n createEdges?: AtomicEdgeBatchExecutor;\n deleteNodes?: AtomicNodeDeleteBatchExecutor;\n deleteEdges?: AtomicEdgeDeleteBatchExecutor;\n updateNodes?: AtomicNodeResolvedUpdateBatchExecutor;\n updateEdges?: AtomicEdgeResolvedUpdateBatchExecutor;\n mutateNodes?: AtomicNodeResolvedMutationSetExecutor;\n mutateEdges?: AtomicEdgeMutationProgramExecutor;\n}>;\n\n/** Every independently enabled semantic variant in a mutation profile. */\nexport const ATOMIC_MUTATION_PROGRAM_VARIANTS = [\n \"createNodes\",\n \"replaceNodes\",\n \"createEdges\",\n \"deleteNodes\",\n \"deleteEdges\",\n \"updateNodes\",\n \"updateEdges\",\n \"mutateNodes\",\n \"mutateEdges.resolvedSet\",\n \"mutateEdges.durableConvergence\",\n] as const;\n\n/** One independently enabled semantic variant in a mutation profile. */\nexport type AtomicMutationProgramVariant =\n (typeof ATOMIC_MUTATION_PROGRAM_VARIANTS)[number];\n\n/** One owner for the overloaded edge-mutation input/variant correlation. */\nexport const ATOMIC_EDGE_MUTATION_VARIANT_BY_KIND = {\n \"durable-convergence\": \"mutateEdges.durableConvergence\",\n \"resolved-set\": \"mutateEdges.resolvedSet\",\n} as const satisfies Readonly<\n Record<\n | AtomicEdgeConvergenceInput[\"kind\"]\n | AtomicEdgeResolvedMutationSetInput[\"kind\"],\n Extract<AtomicMutationProgramVariant, `mutateEdges.${string}`>\n >\n>;\n\n/**\n * Owns which semantic variants a normalized profile can reach independently.\n *\n * A zero limit is an honest opt-out. Singleton updates reach the update-only\n * families directly on every exact root. Mixed resolved sets move their\n * collection-level read/partition/write unit into an interactive transaction;\n * an interactive root therefore cannot reach them, while an exact registered\n * `atomicBatch: \"session\"` target can. Conformance consumes this owner instead\n * of inferring session reachability from transaction availability.\n */\nexport function reachableAtomicMutationProgramVariants(\n profile: AtomicMutationProgramExecutor,\n execution: Pick<\n GraphBackend[\"capabilities\"][\"execution\"],\n \"atomicBatch\" | \"interactiveTransactions\"\n >,\n): readonly AtomicMutationProgramVariant[] {\n const variants: AtomicMutationProgramVariant[] = [];\n const resolvedMutationSetsReachable =\n !execution.interactiveTransactions || execution.atomicBatch === \"session\";\n if (profile.createNodes !== undefined) variants.push(\"createNodes\");\n if (\n (profile.replaceNodes?.maxEntries.plain ?? 0) > 0 ||\n (profile.replaceNodes?.maxEntries.claimed ?? 0) > 0\n ) {\n variants.push(\"replaceNodes\");\n }\n if (profile.createEdges !== undefined) variants.push(\"createEdges\");\n if (profile.deleteNodes !== undefined) variants.push(\"deleteNodes\");\n if (profile.deleteEdges !== undefined) variants.push(\"deleteEdges\");\n if ((profile.updateNodes?.maxEntries ?? 0) > 0) {\n variants.push(\"updateNodes\");\n }\n if ((profile.updateEdges?.maxEntries ?? 0) > 0) {\n variants.push(\"updateEdges\");\n }\n if (\n resolvedMutationSetsReachable &&\n (profile.mutateNodes?.maxEntries ?? 0) > 0\n ) {\n variants.push(\"mutateNodes\");\n }\n if (\n resolvedMutationSetsReachable &&\n (profile.mutateEdges?.maxEntries.resolvedSet ?? 0) > 0\n ) {\n variants.push(\"mutateEdges.resolvedSet\");\n }\n if ((profile.mutateEdges?.maxEntries.durableConvergence ?? 0) > 0) {\n variants.push(\"mutateEdges.durableConvergence\");\n }\n return variants;\n}\n\n/**\n * Semantic mutation families implemented by one exact backend root.\n *\n * Registering this profile is an explicit claim about TypeGraph write\n * semantics, not merely transport mechanics. Each optional member authorizes\n * only that family; omitted families retain the complete portable path.\n */\nexport type AtomicMutationProgramRegistration = Readonly<{\n createNodes?: AtomicNodeBatchExecutor | undefined;\n replaceNodes?: AtomicNodeReplacementBatchExecutor | undefined;\n createEdges?: AtomicEdgeBatchExecutor | undefined;\n deleteNodes?: AtomicNodeDeleteBatchExecutor | undefined;\n deleteEdges?: AtomicEdgeDeleteBatchExecutor | undefined;\n updateNodes?: AtomicNodeResolvedUpdateBatchExecutor | undefined;\n updateEdges?: AtomicEdgeResolvedUpdateBatchExecutor | undefined;\n mutateNodes?: AtomicNodeResolvedMutationSetExecutor | undefined;\n mutateEdges?: AtomicEdgeMutationProgramExecutor | undefined;\n}>;\n\nconst ATOMIC_MUTATION_PROGRAM_EXECUTORS = new WeakMap<\n object,\n AtomicMutationProgramExecutor\n>();\n\ntype AtomicMutationProgramDispatchObserver = (\n variant: AtomicMutationProgramVariant,\n) => void;\n\nconst ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS = new WeakMap<\n object,\n AtomicMutationProgramDispatchObserver\n>();\nconst INSTRUMENTED_ATOMIC_MUTATION_EXECUTOR_TARGETS = new WeakMap<\n object,\n object\n>();\n\nfunction reportAtomicMutationProgramDispatch(\n target: object,\n variant: AtomicMutationProgramVariant,\n): void {\n ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS.get(target)?.(variant);\n}\n\nfunction instrumentAtomicMutationProgramExecutors(\n target: object,\n profile: AtomicMutationProgramRegistration,\n): AtomicMutationProgramExecutor {\n type Descriptor = Readonly<{\n variant: (input: unknown) => AtomicMutationProgramVariant;\n }>;\n const descriptors = {\n createEdges: { variant: () => \"createEdges\" },\n createNodes: { variant: () => \"createNodes\" },\n replaceNodes: { variant: () => \"replaceNodes\" },\n deleteEdges: { variant: () => \"deleteEdges\" },\n deleteNodes: { variant: () => \"deleteNodes\" },\n mutateEdges: {\n variant: (input: unknown) =>\n ATOMIC_EDGE_MUTATION_VARIANT_BY_KIND[\n (\n input as\n AtomicEdgeConvergenceInput | AtomicEdgeResolvedMutationSetInput\n ).kind\n ],\n },\n mutateNodes: { variant: () => \"mutateNodes\" },\n updateEdges: { variant: () => \"updateEdges\" },\n updateNodes: { variant: () => \"updateNodes\" },\n } as const satisfies Record<\n keyof AtomicMutationProgramRegistration,\n Descriptor\n >;\n\n function instrument<TExecutor extends object>(\n source: TExecutor,\n descriptor: Descriptor,\n ): TExecutor {\n if (INSTRUMENTED_ATOMIC_MUTATION_EXECUTOR_TARGETS.get(source) === target) {\n return source;\n }\n const callable = source as unknown as (\n ...arguments_: readonly unknown[]\n ) => unknown;\n const instrumented = new Proxy(callable, {\n apply(sourceExecutor, thisArgument, argumentsList) {\n reportAtomicMutationProgramDispatch(\n target,\n descriptor.variant(argumentsList[0]),\n );\n return Reflect.apply(sourceExecutor, thisArgument, argumentsList);\n },\n });\n INSTRUMENTED_ATOMIC_MUTATION_EXECUTOR_TARGETS.set(instrumented, target);\n return instrumented as unknown as TExecutor;\n }\n\n const entries = ATOMIC_MUTATION_PROGRAM_FAMILIES.flatMap((family) => {\n const executor = profile[family];\n return executor === undefined ?\n []\n : [[family, instrument(executor, descriptors[family])] as const];\n });\n return Object.freeze(\n Object.fromEntries(entries) as AtomicMutationProgramExecutor,\n );\n}\n\n/** @internal Runs work while observing dispatches from this exact resource. */\nexport async function withAtomicMutationProgramDispatchObserver<TResult>(\n target: object,\n observer: AtomicMutationProgramDispatchObserver,\n run: () => TResult | PromiseLike<TResult>,\n): Promise<TResult> {\n if (ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS.has(target)) {\n throw new ConfigurationError(\n \"Atomic mutation program dispatch observation is already active for this exact resource.\",\n { code: \"ATOMIC_MUTATION_PROGRAM_OBSERVER_ALREADY_ACTIVE\" },\n );\n }\n ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS.set(target, observer);\n try {\n return await run();\n } finally {\n ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS.delete(target);\n }\n}\n\nconst ATOMIC_MUTATION_PROGRAM_FAMILIES = [\n \"createNodes\",\n \"replaceNodes\",\n \"createEdges\",\n \"deleteNodes\",\n \"deleteEdges\",\n \"updateNodes\",\n \"updateEdges\",\n \"mutateNodes\",\n \"mutateEdges\",\n] as const satisfies readonly (keyof AtomicMutationProgramRegistration)[];\n\nfunction assertNonnegativeIntegerLimit(\n family: keyof AtomicMutationProgramRegistration,\n name: string,\n value: unknown,\n): void {\n if (typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0) {\n return;\n }\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires a nonnegative integer ${name}.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: name,\n value,\n },\n );\n}\n\nfunction assertAtomicMutationProgramLimits(\n family: keyof AtomicMutationProgramRegistration,\n executor: AtomicMutationProgramRegistration[typeof family],\n): void {\n if (executor === undefined) return;\n if (family === \"createNodes\" || family === \"replaceNodes\") {\n const nodeExecutor = executor as\n AtomicNodeBatchExecutor | AtomicNodeReplacementBatchExecutor;\n assertAtomicNodeClaimSupport(family, nodeExecutor.claimSupport);\n assertAtomicNodeProjectionSupport(family, nodeExecutor.projectionSupport);\n if (family === \"replaceNodes\") {\n const replacementExecutor =\n nodeExecutor as AtomicNodeReplacementBatchExecutor;\n const releasedClaimFamilies = replacementExecutor.releasedClaimFamilies;\n if (releasedClaimFamilies !== undefined) {\n assertAtomicNodeClaimFamilies(\n family,\n \"releasedClaimFamilies\",\n releasedClaimFamilies,\n );\n }\n const maxEntries = (\n replacementExecutor as unknown as Readonly<Record<string, unknown>>\n )[\"maxEntries\"];\n if (typeof maxEntries !== \"object\" || maxEntries === null) {\n throw new ConfigurationError(\n \"Atomic mutation program family replaceNodes requires maxEntries metadata.\",\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"maxEntries\",\n value: maxEntries,\n },\n );\n }\n const limits = maxEntries as Readonly<Record<string, unknown>>;\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries.plain\",\n limits[\"plain\"],\n );\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries.claimed\",\n limits[\"claimed\"],\n );\n const accepts = (executor as AtomicNodeReplacementBatchExecutor).accepts;\n if (accepts !== undefined && typeof accepts !== \"function\") {\n throw new ConfigurationError(\n \"Atomic mutation program family replaceNodes requires a callable accepts predicate.\",\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"accepts\",\n value: accepts,\n },\n );\n }\n }\n return;\n }\n if (family === \"deleteNodes\") {\n const releasedClaimFamilies: unknown = (\n executor as AtomicNodeDeleteBatchExecutor\n ).releasedClaimFamilies;\n if (releasedClaimFamilies !== undefined) {\n assertAtomicNodeClaimFamilies(\n family,\n \"releasedClaimFamilies\",\n releasedClaimFamilies,\n );\n }\n return;\n }\n if (\n family === \"updateNodes\" ||\n family === \"updateEdges\" ||\n family === \"mutateNodes\"\n ) {\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries\",\n (executor as Readonly<{ maxEntries: unknown }>).maxEntries,\n );\n if (family === \"updateNodes\" || family === \"mutateNodes\") {\n assertAtomicNodeProjectionSupport(\n family,\n (\n executor as\n | AtomicNodeResolvedMutationSetExecutor\n | AtomicNodeResolvedUpdateBatchExecutor\n ).projectionSupport,\n );\n }\n return;\n }\n if (family === \"mutateEdges\") {\n const limits: unknown = (executor as AtomicEdgeMutationProgramExecutor)\n .maxEntries;\n if (typeof limits !== \"object\" || limits === null) {\n throw new ConfigurationError(\n \"Atomic mutation program family mutateEdges requires maxEntries limits.\",\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"maxEntries\",\n value: limits,\n },\n );\n }\n const edgeLimits = limits as Readonly<Record<PropertyKey, unknown>>;\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries.resolvedSet\",\n edgeLimits[\"resolvedSet\"],\n );\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries.durableConvergence\",\n edgeLimits[\"durableConvergence\"],\n );\n }\n}\n\nfunction normalizeAtomicMutationProgramRegistration(\n registration: AtomicMutationProgramRegistration,\n): AtomicMutationProgramExecutor {\n const uncheckedRegistration: unknown = registration;\n if (\n typeof uncheckedRegistration !== \"object\" ||\n uncheckedRegistration === null\n ) {\n throw new ConfigurationError(\n \"An atomic mutation program registration must be an object.\",\n { code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\" },\n );\n }\n const entries: [\n keyof AtomicMutationProgramRegistration,\n NonNullable<\n AtomicMutationProgramRegistration[keyof AtomicMutationProgramRegistration]\n >,\n ][] = [];\n for (const family of ATOMIC_MUTATION_PROGRAM_FAMILIES) {\n const executor = registration[family];\n if (executor === undefined) continue;\n if (typeof executor !== \"function\") {\n throw new ConfigurationError(\n `Atomic mutation program family ${family} must be callable.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n },\n );\n }\n assertAtomicMutationProgramLimits(family, executor);\n entries.push([family, executor]);\n }\n if (entries.length === 0) {\n throw new ConfigurationError(\n \"An atomic mutation program registration must implement at least one semantic family.\",\n { code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\" },\n );\n }\n return Object.freeze(\n Object.fromEntries(entries) as AtomicMutationProgramExecutor,\n );\n}\n\nfunction throwAtomicMutationProgramRegistrationMismatch(\n target: GraphBackend | TransactionBackend,\n): never {\n throw new ConfigurationError(\n \"Atomic mutation programs require an exact backend session with a registered atomic SQL transport.\",\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n atomicBatch: target.capabilities.execution.atomicBatch,\n transportRegistered: hasAtomicSqlProgramRegistration(target),\n },\n {\n suggestion:\n \"Register and validate the exact-session atomic SQL transport before registering only the TypeGraph mutation families this backend implements.\",\n },\n );\n}\n\n/**\n * Registers TypeGraph semantic mutation programs for one exact backend resource.\n *\n * Transport registration proves atomic statement dispatch only. This second,\n * explicit profile declares which graph mutation families preserve their\n * complete schema-fence, validation, side-effect, refusal, and result-ordering\n * contracts. Object-identity registration prevents derived, projected, and\n * other transaction sessions from inheriting execution evidence.\n */\nexport function registerAtomicMutationPrograms<\n T extends GraphBackend | TransactionBackend,\n>(target: T, registration: AtomicMutationProgramRegistration): T {\n if (\n !supportsAtomicBatch(target) ||\n !hasAtomicSqlProgramRegistration(target)\n ) {\n throwAtomicMutationProgramRegistrationMismatch(target);\n }\n if (ATOMIC_MUTATION_PROGRAM_EXECUTORS.has(target)) {\n throw new ConfigurationError(\n \"Atomic mutation programs are already registered for this exact backend resource.\",\n { code: \"ATOMIC_MUTATION_PROGRAM_ALREADY_REGISTERED\" },\n );\n }\n ATOMIC_MUTATION_PROGRAM_EXECUTORS.set(\n target,\n instrumentAtomicMutationProgramExecutors(\n target,\n normalizeAtomicMutationProgramRegistration(registration),\n ),\n );\n return target;\n}\n\n/** Returns whether this exact resource owns a semantic program profile. */\nexport function hasAtomicMutationProgramRegistration(\n target: GraphBackend | TransactionBackend,\n): boolean {\n return ATOMIC_MUTATION_PROGRAM_EXECUTORS.has(target);\n}\n\n/** Resolves semantic mutation programs only for their exact registered resource. */\nexport function resolveAtomicMutationPrograms(\n target: GraphBackend | TransactionBackend,\n): AtomicMutationProgramExecutor | undefined {\n return ATOMIC_MUTATION_PROGRAM_EXECUTORS.get(target);\n}\n\n/**\n * Re-registers exact-session evidence on a transparent transaction wrapper.\n *\n * Session authority is never inherited implicitly: the wrapper seam calls\n * this only after deriving a backend that forwards to the same pinned command\n * session. Root registrations remain non-transferable.\n *\n * @internal\n */\nexport function carryAtomicMutationSessionRegistration<\n T extends TransactionBackend,\n>(base: TransactionBackend, derived: T): T {\n if (\n base.capabilities.execution.atomicBatch !== \"session\" ||\n derived.capabilities.execution.atomicBatch !== \"session\"\n ) {\n return derived;\n }\n const executeAtomicBatch = resolveRegisteredAtomicSqlBatchExecutor(base);\n const profile = resolveAtomicMutationPrograms(base);\n if (executeAtomicBatch === undefined || profile === undefined) return derived;\n registerAtomicSqlProgram(derived, executeAtomicBatch);\n registerAtomicMutationPrograms(derived, profile);\n return derived;\n}\n\n/**\n * @internal Test-only compatibility seam.\n *\n * Production factories must use registerAtomicMutationPrograms() so transport,\n * declaration, shape, and duplicate-registration validation cannot be skipped.\n */\nexport function markBundledRootAtomicMutationPrograms<T extends object>(\n target: T,\n executor: Readonly<{\n createNodes?: AtomicNodeBatchExecutor | undefined;\n replaceNodes?: AtomicNodeReplacementBatchExecutor | undefined;\n createEdges?: AtomicEdgeBatchExecutor | undefined;\n deleteNodes?: AtomicNodeDeleteBatchExecutor | undefined;\n deleteEdges?: AtomicEdgeDeleteBatchExecutor | undefined;\n updateNodes?: AtomicNodeResolvedUpdateBatchExecutor | undefined;\n updateEdges?: AtomicEdgeResolvedUpdateBatchExecutor | undefined;\n mutateNodes?: AtomicNodeResolvedMutationSetExecutor | undefined;\n mutateEdges?: AtomicEdgeMutationProgramExecutor | undefined;\n }>,\n): T {\n ATOMIC_MUTATION_PROGRAM_EXECUTORS.set(\n target,\n instrumentAtomicMutationProgramExecutors(target, executor),\n );\n return target;\n}\n\n/** @internal Compatibility seam for bundled-factory and backend tests. */\nexport function resolveBundledRootAtomicMutationPrograms(\n target: GraphBackend | TransactionBackend,\n): AtomicMutationProgramExecutor | undefined {\n return resolveAtomicMutationPrograms(target);\n}\n\n/** @internal Narrow test seam over the single mutation-program registry. */\nexport function markBundledRootAtomicNodeBatch<T extends object>(\n target: T,\n executor: AtomicNodeBatchExecutor,\n): T {\n const existing = ATOMIC_MUTATION_PROGRAM_EXECUTORS.get(target);\n return markBundledRootAtomicMutationPrograms(target, {\n ...existing,\n createNodes: executor,\n });\n}\n\n/** @internal Narrow test seam over the single mutation-program registry. */\nexport function markBundledRootAtomicEdgeBatch<T extends object>(\n target: T,\n executor: AtomicEdgeBatchExecutor,\n): T {\n const existing = ATOMIC_MUTATION_PROGRAM_EXECUTORS.get(target);\n return markBundledRootAtomicMutationPrograms(target, {\n ...existing,\n createEdges: executor,\n });\n}\n\n/** @internal Narrow test seam over the single mutation-program registry. */\nexport function resolveBundledRootAtomicNodeBatch(\n target: GraphBackend | TransactionBackend,\n): AtomicNodeBatchExecutor | undefined {\n return resolveAtomicMutationPrograms(target)?.createNodes;\n}\n\n/** @internal Narrow test seam over the single mutation-program registry. */\nexport function resolveBundledRootAtomicEdgeBatch(\n target: GraphBackend | TransactionBackend,\n): AtomicEdgeBatchExecutor | undefined {\n return resolveAtomicMutationPrograms(target)?.createEdges;\n}\n"]}
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var chunkZOWRACZQ_cjs = require('./chunk-ZOWRACZQ.cjs');
3
+ var chunkG7OKJDMG_cjs = require('./chunk-G7OKJDMG.cjs');
4
4
  var chunkR255UE5U_cjs = require('./chunk-R255UE5U.cjs');
5
- var chunkBWQA3POT_cjs = require('./chunk-BWQA3POT.cjs');
6
- var chunkJRWKRBI5_cjs = require('./chunk-JRWKRBI5.cjs');
7
- var chunkDHRLOQLQ_cjs = require('./chunk-DHRLOQLQ.cjs');
8
- var chunkOC5ROP7V_cjs = require('./chunk-OC5ROP7V.cjs');
5
+ var chunk6B3LQUYG_cjs = require('./chunk-6B3LQUYG.cjs');
6
+ var chunk5JOCIMQ3_cjs = require('./chunk-5JOCIMQ3.cjs');
7
+ var chunk7LQTDGV5_cjs = require('./chunk-7LQTDGV5.cjs');
8
+ var chunk6JRVV2SS_cjs = require('./chunk-6JRVV2SS.cjs');
9
9
  var chunk5ICDVLI3_cjs = require('./chunk-5ICDVLI3.cjs');
10
10
  var chunkL4L4AV6F_cjs = require('./chunk-L4L4AV6F.cjs');
11
11
  var chunkHAHNRASW_cjs = require('./chunk-HAHNRASW.cjs');
@@ -111,7 +111,7 @@ async function issuingClaims(entries, issue) {
111
111
  function claimFenceRefusal(ctx, backend, entries) {
112
112
  const gating = entries.find((entry) => entry.placement === "pre-insert");
113
113
  if (gating === void 0) return void 0;
114
- return chunkBWQA3POT_cjs.constraintFenceRefusal(ctx, backend, gating.refusalReason);
114
+ return chunk6B3LQUYG_cjs.constraintFenceRefusal(ctx, backend, gating.refusalReason);
115
115
  }
116
116
  function isUniquenessClaimEntry(entry) {
117
117
  return entry.refusal.kind === "uniqueness";
@@ -294,10 +294,10 @@ async function issueClaimsIndividually(ctx, claims, onIssued) {
294
294
  }
295
295
  async function issueClaimsBatched(ctx, claims, onIssued) {
296
296
  if (claims.length === 0) return;
297
- const bound = chunkOC5ROP7V_cjs.bindExtraIfReachable(
297
+ const bound = chunk6JRVV2SS_cjs.bindExtraIfReachable(
298
298
  ctx.backend,
299
299
  ctx.uniqueSidecarBatch.extras.insertUniqueBatch,
300
- chunkOC5ROP7V_cjs.UNIQUE_SIDECAR_BATCH.id
300
+ chunk6JRVV2SS_cjs.UNIQUE_SIDECAR_BATCH.id
301
301
  );
302
302
  if (bound === void 0) {
303
303
  await issueClaimsIndividually(ctx, claims, onIssued);
@@ -390,10 +390,10 @@ async function deleteUniquenessEntries(ctx, kind, id, props, constraints) {
390
390
  }
391
391
  async function hardDeleteClaimsByNodeIds(ctx, concreteKind, nodeIds) {
392
392
  await chunkBXHAPCQG_cjs.requireDefined(
393
- chunkOC5ROP7V_cjs.bindExtraIfReachable(
393
+ chunk6JRVV2SS_cjs.bindExtraIfReachable(
394
394
  ctx.backend,
395
395
  ctx.uniqueSidecarBatch.extras.hardDeleteUniquesByNodeIds,
396
- chunkOC5ROP7V_cjs.UNIQUE_SIDECAR_BATCH.id
396
+ chunk6JRVV2SS_cjs.UNIQUE_SIDECAR_BATCH.id
397
397
  )?.hardDeleteUniquesByNodeIds
398
398
  )({
399
399
  graphId: ctx.graphId,
@@ -532,8 +532,8 @@ function resolvedNodeUniquenessOperationsRefusal() {
532
532
  );
533
533
  }
534
534
  function resolvedNodeUniqueSidecarBatchIsReachable(ctx) {
535
- if (chunkDHRLOQLQ_cjs.missingRequiredExtras(
536
- chunkOC5ROP7V_cjs.UNIQUE_SIDECAR_BATCH,
535
+ if (chunk7LQTDGV5_cjs.missingRequiredExtras(
536
+ chunk6JRVV2SS_cjs.UNIQUE_SIDECAR_BATCH,
537
537
  ctx.uniqueSidecarBatch,
538
538
  "resolved node write"
539
539
  ).length > 0) {
@@ -544,7 +544,7 @@ function resolvedNodeUniqueSidecarBatchIsReachable(ctx) {
544
544
  ctx.uniqueSidecarBatch.extras.hardDeleteUniquesByNodeIds,
545
545
  ctx.uniqueSidecarBatch.extras.insertUniqueBatch
546
546
  ].every(
547
- (extra) => chunkOC5ROP7V_cjs.bindExtraIfReachable(ctx.backend, extra, chunkOC5ROP7V_cjs.UNIQUE_SIDECAR_BATCH.id) !== void 0
547
+ (extra) => chunk6JRVV2SS_cjs.bindExtraIfReachable(ctx.backend, extra, chunk6JRVV2SS_cjs.UNIQUE_SIDECAR_BATCH.id) !== void 0
548
548
  );
549
549
  }
550
550
  function resolvedNodeUpdatePreservesClaimKeys(registry, kind, id, previousProps, nextProps, constraints) {
@@ -627,10 +627,10 @@ function groupClaimsForProbe(claims) {
627
627
  return [...groups.values()];
628
628
  }
629
629
  function requireBatchProbe(ctx) {
630
- const bound = chunkOC5ROP7V_cjs.bindExtraIfReachable(
630
+ const bound = chunk6JRVV2SS_cjs.bindExtraIfReachable(
631
631
  ctx.backend,
632
632
  ctx.uniqueSidecarBatch.extras.checkUniqueBatch,
633
- chunkOC5ROP7V_cjs.UNIQUE_SIDECAR_BATCH.id
633
+ chunk6JRVV2SS_cjs.UNIQUE_SIDECAR_BATCH.id
634
634
  );
635
635
  if (bound === void 0) {
636
636
  throw new chunk7XYPLAPL_cjs.ConfigurationError(
@@ -684,10 +684,10 @@ async function prepareResolvedNodeClaims(ctx, upserts, releases) {
684
684
  if (!resolvedNodeUniqueSidecarBatchIsReachable(ctx)) {
685
685
  throw resolvedNodeUniquenessOperationsRefusal();
686
686
  }
687
- const boundHardDelete = chunkOC5ROP7V_cjs.bindExtraIfReachable(
687
+ const boundHardDelete = chunk6JRVV2SS_cjs.bindExtraIfReachable(
688
688
  ctx.backend,
689
689
  ctx.uniqueSidecarBatch.extras.hardDeleteUniquesByNodeIds,
690
- chunkOC5ROP7V_cjs.UNIQUE_SIDECAR_BATCH.id
690
+ chunk6JRVV2SS_cjs.UNIQUE_SIDECAR_BATCH.id
691
691
  );
692
692
  const { hardDeleteUniquesByNodeIds } = chunkBXHAPCQG_cjs.requireDefined(boundHardDelete);
693
693
  await validateResolvedNodeClaims(ctx, upserts, releases);
@@ -1109,7 +1109,7 @@ async function enforceNodeDeleteBehavior(ctx, args, backend, policy) {
1109
1109
  });
1110
1110
  }
1111
1111
  if (args.mode === "hard") {
1112
- await chunkZOWRACZQ_cjs.purgeEdgeClaims(
1112
+ await chunkG7OKJDMG_cjs.purgeEdgeClaims(
1113
1113
  backend,
1114
1114
  ctx.claimsVerdict(),
1115
1115
  ctx.graphId,
@@ -1147,7 +1147,7 @@ async function applyNodeInsertSyncFansBatch(ctx, items, backend) {
1147
1147
  );
1148
1148
  }
1149
1149
  function parseRowProps(row) {
1150
- return chunkOC5ROP7V_cjs.rowPropsToObject(row.props);
1150
+ return chunk6JRVV2SS_cjs.rowPropsToObject(row.props);
1151
1151
  }
1152
1152
  async function planNodeUpdateUniqueness(ctx, args, backend) {
1153
1153
  const { kind, id } = args.existing;
@@ -1244,8 +1244,8 @@ async function applyResolvedNodeUpdateBatch(ctx, args, backend) {
1244
1244
  { operation: "updateResolvedNodesBatch", rowId: row.id }
1245
1245
  );
1246
1246
  }
1247
- const props = chunkOC5ROP7V_cjs.rowPropsToObject(row.props);
1248
- if (!chunkJRWKRBI5_cjs.canonicalEqual(entry.props, props)) {
1247
+ const props = chunk6JRVV2SS_cjs.rowPropsToObject(row.props);
1248
+ if (!chunk5JOCIMQ3_cjs.canonicalEqual(entry.props, props)) {
1249
1249
  throw new chunk7XYPLAPL_cjs.ConfigurationError(
1250
1250
  "Resolved node update batch returned props that differ from its input",
1251
1251
  { operation: "updateResolvedNodesBatch", rowId: row.id }
@@ -1390,8 +1390,8 @@ async function applyNodeSetUpdate(ctx, args, backend) {
1390
1390
  }
1391
1391
  executeNodeSetUpdate = () => updateNodeSet({ ...commonParams, operation: "updateWhere" });
1392
1392
  }
1393
- if (uniqueConstraints.length > 0 && chunkDHRLOQLQ_cjs.missingRequiredExtras(
1394
- chunkOC5ROP7V_cjs.UNIQUE_SIDECAR_BATCH,
1393
+ if (uniqueConstraints.length > 0 && chunk7LQTDGV5_cjs.missingRequiredExtras(
1394
+ chunk6JRVV2SS_cjs.UNIQUE_SIDECAR_BATCH,
1395
1395
  ctx.uniqueSidecarBatch,
1396
1396
  "set-based node update"
1397
1397
  ).length > 0) {
@@ -1426,13 +1426,13 @@ async function applyNodeSetUpdate(ctx, args, backend) {
1426
1426
  const result = await executeNodeSetUpdate();
1427
1427
  if (result.affectedCount === 0) return { affectedCount: 0 };
1428
1428
  const sidecarItems = result.rows.map((row) => {
1429
- const props = chunkOC5ROP7V_cjs.rowPropsToObject(row.props);
1430
- const validatedProps = chunkBWQA3POT_cjs.validateNodeProps(schema, props, {
1429
+ const props = chunk6JRVV2SS_cjs.rowPropsToObject(row.props);
1430
+ const validatedProps = chunk6B3LQUYG_cjs.validateNodeProps(schema, props, {
1431
1431
  kind,
1432
1432
  operation: "update",
1433
1433
  id: row.id
1434
1434
  });
1435
- if (!chunkJRWKRBI5_cjs.canonicalEqual(validatedProps, props)) {
1435
+ if (!chunk5JOCIMQ3_cjs.canonicalEqual(validatedProps, props)) {
1436
1436
  throw new chunk7XYPLAPL_cjs.ValidationError(
1437
1437
  `Set update would persist a non-canonical ${kind} row`,
1438
1438
  {
@@ -1464,10 +1464,10 @@ async function applyNodeSetUpdate(ctx, args, backend) {
1464
1464
  constraints: item.uniqueConstraints
1465
1465
  }));
1466
1466
  if (uniqueConstraints.length > 0) {
1467
- if (chunkOC5ROP7V_cjs.bindExtraIfReachable(
1467
+ if (chunk6JRVV2SS_cjs.bindExtraIfReachable(
1468
1468
  backend,
1469
1469
  ctx.uniqueSidecarBatch.extras.insertUniqueBatch,
1470
- chunkOC5ROP7V_cjs.UNIQUE_SIDECAR_BATCH.id
1470
+ chunk6JRVV2SS_cjs.UNIQUE_SIDECAR_BATCH.id
1471
1471
  ) === void 0) {
1472
1472
  throw new chunk7XYPLAPL_cjs.ConfigurationError(
1473
1473
  "The transaction backend lacks batched uniqueness operations",
@@ -1530,5 +1530,5 @@ exports.resolvedNodeUniqueSidecarBatchIsReachable = resolvedNodeUniqueSidecarBat
1530
1530
  exports.resolvedNodeUpdatePreservesClaimKeys = resolvedNodeUpdatePreservesClaimKeys;
1531
1531
  exports.withNodeCreateClaims = withNodeCreateClaims;
1532
1532
  exports.withNodeCreateClaimsBatch = withNodeCreateClaimsBatch;
1533
- //# sourceMappingURL=chunk-35LDKSMM.cjs.map
1534
- //# sourceMappingURL=chunk-35LDKSMM.cjs.map
1533
+ //# sourceMappingURL=chunk-VNJMM2QQ.cjs.map
1534
+ //# sourceMappingURL=chunk-VNJMM2QQ.cjs.map