@nicia-ai/typegraph 0.65.0 → 0.66.1

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 +33 -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-PFXNQFFY.js → chunk-2DJKHZQ4.js} +75 -8
  43. package/dist/chunk-2DJKHZQ4.js.map +1 -0
  44. package/dist/{chunk-337ONI2I.js → chunk-3SUZXB5X.js} +146 -80
  45. package/dist/chunk-3SUZXB5X.js.map +1 -0
  46. package/dist/{chunk-4VTCIEK3.js → chunk-4TQOIBWH.js} +3 -3
  47. package/dist/{chunk-4VTCIEK3.js.map → chunk-4TQOIBWH.js.map} +1 -1
  48. package/dist/{chunk-JRWKRBI5.cjs → chunk-5JOCIMQ3.cjs} +6 -6
  49. package/dist/{chunk-JRWKRBI5.cjs.map → chunk-5JOCIMQ3.cjs.map} +1 -1
  50. package/dist/{chunk-BWQA3POT.cjs → chunk-6B3LQUYG.cjs} +206 -138
  51. package/dist/chunk-6B3LQUYG.cjs.map +1 -0
  52. package/dist/{chunk-RQPCUHIH.js → chunk-6ECNYQDW.js} +3 -3
  53. package/dist/{chunk-RQPCUHIH.js.map → chunk-6ECNYQDW.js.map} +1 -1
  54. package/dist/{chunk-OLB75LRQ.js → chunk-6GKKAQMW.js} +5 -5
  55. package/dist/{chunk-OLB75LRQ.js.map → chunk-6GKKAQMW.js.map} +1 -1
  56. package/dist/{chunk-OC5ROP7V.cjs → chunk-6JRVV2SS.cjs} +8 -2
  57. package/dist/chunk-6JRVV2SS.cjs.map +1 -0
  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-JERQGJKG.cjs → chunk-ANMCKLZQ.cjs} +18 -18
  65. package/dist/{chunk-JERQGJKG.cjs.map → chunk-ANMCKLZQ.cjs.map} +1 -1
  66. package/dist/{chunk-BBOMNH44.js → chunk-BABP4D5B.js} +3 -3
  67. package/dist/{chunk-BBOMNH44.js.map → chunk-BABP4D5B.js.map} +1 -1
  68. package/dist/{chunk-EVGZ2TRQ.js → chunk-BE75G3M5.js} +3 -3
  69. package/dist/{chunk-EVGZ2TRQ.js.map → chunk-BE75G3M5.js.map} +1 -1
  70. package/dist/{chunk-FXGZT3WO.cjs → chunk-BX42F7IJ.cjs} +41 -41
  71. package/dist/{chunk-FXGZT3WO.cjs.map → chunk-BX42F7IJ.cjs.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-MKJPBSID.cjs → chunk-I7SBZJI2.cjs} +4 -4
  83. package/dist/{chunk-MKJPBSID.cjs.map → chunk-I7SBZJI2.cjs.map} +1 -1
  84. package/dist/{chunk-H346QK3V.cjs → chunk-K7YACILO.cjs} +9 -9
  85. package/dist/{chunk-H346QK3V.cjs.map → chunk-K7YACILO.cjs.map} +1 -1
  86. package/dist/{chunk-3KWF25MF.cjs → chunk-MN325MG4.cjs} +313 -246
  87. package/dist/chunk-MN325MG4.cjs.map +1 -0
  88. package/dist/{chunk-KDNRACRG.cjs → chunk-MRUOOAIQ.cjs} +4 -4
  89. package/dist/{chunk-KDNRACRG.cjs.map → chunk-MRUOOAIQ.cjs.map} +1 -1
  90. package/dist/{chunk-HTSJTWUT.js → chunk-OF63ZHSD.js} +4 -4
  91. package/dist/{chunk-HTSJTWUT.js.map → chunk-OF63ZHSD.js.map} +1 -1
  92. package/dist/{chunk-NGA3THGU.cjs → chunk-QR7W37HG.cjs} +14 -14
  93. package/dist/{chunk-NGA3THGU.cjs.map → chunk-QR7W37HG.cjs.map} +1 -1
  94. package/dist/{chunk-QFEO4M5W.js → chunk-RTPMG6LQ.js} +11 -11
  95. package/dist/{chunk-QFEO4M5W.js.map → chunk-RTPMG6LQ.js.map} +1 -1
  96. package/dist/{chunk-PFD4NUYV.js → chunk-SSDHR2C2.js} +3 -3
  97. package/dist/{chunk-PFD4NUYV.js.map → chunk-SSDHR2C2.js.map} +1 -1
  98. package/dist/{chunk-THK3SCQA.js → chunk-SYXTWPX6.js} +5 -5
  99. package/dist/{chunk-THK3SCQA.js.map → chunk-SYXTWPX6.js.map} +1 -1
  100. package/dist/{chunk-XSLQYGNR.cjs → chunk-T3VU3YRQ.cjs} +69 -69
  101. package/dist/{chunk-XSLQYGNR.cjs.map → chunk-T3VU3YRQ.cjs.map} +1 -1
  102. package/dist/{chunk-MIBWA6HX.js → chunk-TR7QTODF.js} +213 -33
  103. package/dist/chunk-TR7QTODF.js.map +1 -0
  104. package/dist/{chunk-AD3NLSV5.js → chunk-TU22BFMP.js} +8 -2
  105. package/dist/chunk-TU22BFMP.js.map +1 -0
  106. package/dist/{chunk-WTMSUIRO.js → chunk-UFKYMQJ5.js} +3 -3
  107. package/dist/{chunk-WTMSUIRO.js.map → chunk-UFKYMQJ5.js.map} +1 -1
  108. package/dist/{chunk-35LDKSMM.cjs → chunk-VNJMM2QQ.cjs} +30 -30
  109. package/dist/{chunk-35LDKSMM.cjs.map → chunk-VNJMM2QQ.cjs.map} +1 -1
  110. package/dist/{chunk-53ZEBIMD.js → chunk-WB55URNM.js} +6 -6
  111. package/dist/{chunk-53ZEBIMD.js.map → chunk-WB55URNM.js.map} +1 -1
  112. package/dist/{chunk-L2GBVYRU.cjs → chunk-WWSYGZED.cjs} +11 -11
  113. package/dist/{chunk-L2GBVYRU.cjs.map → chunk-WWSYGZED.cjs.map} +1 -1
  114. package/dist/{chunk-D2JPOFRZ.cjs → chunk-WY3IFEKV.cjs} +191 -191
  115. package/dist/{chunk-D2JPOFRZ.cjs.map → chunk-WY3IFEKV.cjs.map} +1 -1
  116. package/dist/{chunk-3RSFLZ7A.cjs → chunk-Y4X6ODVY.cjs} +943 -763
  117. package/dist/chunk-Y4X6ODVY.cjs.map +1 -0
  118. package/dist/{chunk-VZRXXABW.js → chunk-YHMXF7OZ.js} +5 -5
  119. package/dist/{chunk-VZRXXABW.js.map → chunk-YHMXF7OZ.js.map} +1 -1
  120. package/dist/{chunk-VROJKWZ7.js → chunk-ZONDBN6H.js} +5 -5
  121. package/dist/{chunk-VROJKWZ7.js.map → chunk-ZONDBN6H.js.map} +1 -1
  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-DFKS7QTV.js → local-store-impl-ERPNYOCL.js} +18 -18
  147. package/dist/{local-store-impl-DFKS7QTV.js.map → local-store-impl-ERPNYOCL.js.map} +1 -1
  148. package/dist/{local-store-impl-3E4VLFCI.cjs → local-store-impl-OUINMCYI.cjs} +22 -22
  149. package/dist/{local-store-impl-3E4VLFCI.cjs.map → local-store-impl-OUINMCYI.cjs.map} +1 -1
  150. package/dist/{pglite-store-impl-N63GGBU2.js → pglite-store-impl-DUJBQZS5.js} +18 -18
  151. package/dist/{pglite-store-impl-N63GGBU2.js.map → pglite-store-impl-DUJBQZS5.js.map} +1 -1
  152. package/dist/{pglite-store-impl-T75O3LVQ.cjs → pglite-store-impl-Z3SOOP75.cjs} +22 -22
  153. package/dist/{pglite-store-impl-T75O3LVQ.cjs.map → pglite-store-impl-Z3SOOP75.cjs.map} +1 -1
  154. package/dist/{postgres-C9gitL71.d.ts → postgres-BbTYW3b_.d.ts} +3 -3
  155. package/dist/{postgres-BONrXHb4.d.cts → postgres-DOBXcZVg.d.cts} +1 -1
  156. package/dist/{postgres-DAFRdnTr.d.ts → postgres-DhZixg92.d.ts} +1 -1
  157. package/dist/{postgres-2FYdVYCm.d.cts → postgres-Dp3MpyJt.d.cts} +3 -3
  158. package/dist/{profile-CAD65CqS.d.ts → profile-Ch5SSewK.d.ts} +8 -8
  159. package/dist/{profile-Bmcg07Ki.d.cts → profile-DppApFgt.d.cts} +8 -8
  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-DgbYa-1Y.d.cts → sqlite-BkQM9ZeI.d.cts} +1 -1
  177. package/dist/{sqlite-Co_uIpfs.d.cts → sqlite-BpRtjC36.d.cts} +3 -3
  178. package/dist/{sqlite-DcDAAYow.d.ts → sqlite-CH0Zq0Qv.d.ts} +3 -3
  179. package/dist/{sqlite-UlG5prJQ.d.ts → sqlite-CcCSeXGg.d.ts} +1 -1
  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,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkOC5ROP7V_cjs = require('./chunk-OC5ROP7V.cjs');
3
+ var chunk6JRVV2SS_cjs = require('./chunk-6JRVV2SS.cjs');
4
4
  var chunk7XYPLAPL_cjs = require('./chunk-7XYPLAPL.cjs');
5
5
 
6
6
  // src/backend/capabilities/atomic-sql-program.ts
@@ -525,7 +525,7 @@ function throwAtomicMutationProgramRegistrationMismatch(target) {
525
525
  );
526
526
  }
527
527
  function registerAtomicMutationPrograms(target, registration) {
528
- if (!chunkOC5ROP7V_cjs.supportsAtomicBatch(target) || !hasAtomicSqlProgramRegistration(target)) {
528
+ if (!chunk6JRVV2SS_cjs.supportsAtomicBatch(target) || !hasAtomicSqlProgramRegistration(target)) {
529
529
  throwAtomicMutationProgramRegistrationMismatch(target);
530
530
  }
531
531
  if (ATOMIC_MUTATION_PROGRAM_EXECUTORS.has(target)) {
@@ -582,5 +582,5 @@ exports.supportsAtomicNodeClaimFamily = supportsAtomicNodeClaimFamily;
582
582
  exports.supportsAtomicNodeClaims = supportsAtomicNodeClaims;
583
583
  exports.supportsAtomicNodeProjections = supportsAtomicNodeProjections;
584
584
  exports.withAtomicMutationProgramDispatchObserver = withAtomicMutationProgramDispatchObserver;
585
- //# sourceMappingURL=chunk-KDNRACRG.cjs.map
586
- //# sourceMappingURL=chunk-KDNRACRG.cjs.map
585
+ //# sourceMappingURL=chunk-MRUOOAIQ.cjs.map
586
+ //# sourceMappingURL=chunk-MRUOOAIQ.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/backend/capabilities/atomic-sql-program.ts","../src/backend/capabilities/atomic-mutation-program.ts"],"names":["CompilerInvariantError","ConfigurationError","supportsAtomicBatch"],"mappings":"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","file":"chunk-KDNRACRG.cjs","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":["CompilerInvariantError","ConfigurationError","supportsAtomicBatch"],"mappings":"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","file":"chunk-MRUOOAIQ.cjs","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,5 +1,5 @@
1
- import { edgeCardinalityAxesForKind } from './chunk-G6T23JU7.js';
2
- import { rowPropsToJsonText } from './chunk-AD3NLSV5.js';
1
+ import { edgeCardinalityAxesForKind } from './chunk-CDKNGCE7.js';
2
+ import { rowPropsToJsonText } from './chunk-TU22BFMP.js';
3
3
  import { canonicalizeDatabaseTimestamp } from './chunk-CY657YYY.js';
4
4
  import { sql } from './chunk-XDTDSEAE.js';
5
5
  import { DatabaseOperationError } from './chunk-GMKPIYHY.js';
@@ -189,5 +189,5 @@ function buildHardDeleteEdgeClaimsByNodeKind(edgeClaimsTableName, edgesTableName
189
189
  }
190
190
 
191
191
  export { POSTGRES_ROW_MAPPER_CONFIG, SQLITE_ROW_MAPPER_CONFIG, buildHardDeleteEdgeClaimsByEdgeKind, buildHardDeleteEdgeClaimsByNodeKind, buildHardDeleteUniquesByConcreteKind, coerceNumericScore, createEdgeRowMapper, createNodeRowMapper, createSchemaVersionRowMapper, createUniqueRowMapper, formatPostgresTimestamp, normalizeRequiredRowTimestamp, normalizeRowTimestamp, nowIso };
192
- //# sourceMappingURL=chunk-HTSJTWUT.js.map
193
- //# sourceMappingURL=chunk-HTSJTWUT.js.map
192
+ //# sourceMappingURL=chunk-OF63ZHSD.js.map
193
+ //# sourceMappingURL=chunk-OF63ZHSD.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/backend/row-mappers.ts","../src/store/claims/removal-sql.ts"],"names":[],"mappings":"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","file":"chunk-HTSJTWUT.js","sourcesContent":["/**\n * Shared database row-mapping utilities.\n */\n\nimport { DatabaseOperationError } from \"../errors\";\nimport { canonicalizeDatabaseTimestamp } from \"../utils/date\";\nimport {\n type EdgeRow,\n type NodeRow,\n rowPropsToJsonText,\n type SchemaVersionRow,\n type UniqueRow,\n} from \"./types\";\n\nfunction asString(value: unknown, field: string): string {\n if (typeof value !== \"string\") {\n throw new DatabaseOperationError(\n `Expected ${field} to be string, got ${typeof value}`,\n { operation: \"select\", entity: \"row\" },\n );\n }\n return value;\n}\n\nfunction asOptionalString(value: unknown, field: string): string | undefined {\n if (value === null || value === undefined) return undefined;\n return asString(value, field);\n}\n\nfunction asNumber(value: unknown, field: string): number {\n if (typeof value !== \"number\") {\n throw new DatabaseOperationError(\n `Expected ${field} to be number, got ${typeof value}`,\n { operation: \"select\", entity: \"row\" },\n );\n }\n return value;\n}\n\nexport function nowIso(): string {\n return new Date().toISOString();\n}\n\n/**\n * Formats PostgreSQL timestamps used by internal status-table adapters.\n * Row metadata uses the stricter {@link normalizeRowTimestamp} contract.\n */\nexport function formatPostgresTimestamp(value: unknown): string | undefined {\n if (value === null || value === undefined) return undefined;\n if (value instanceof Date) return value.toISOString();\n if (typeof value === \"string\") {\n if (value.includes(\"T\")) return value;\n const date = new Date(value);\n if (!Number.isNaN(date.getTime())) return date.toISOString();\n return value;\n }\n return undefined;\n}\n\n/**\n * Canonicalizes database-driver timestamp values at the row-mapping boundary.\n * Every store and compiled-query metadata projection uses this owner so driver\n * rendering differences cannot become public values.\n */\nexport function normalizeRowTimestamp(\n value: unknown,\n field: string,\n): string | undefined {\n if (value === null || value === undefined) return undefined;\n const canonical = canonicalizeDatabaseTimestamp(value);\n if (canonical === undefined) {\n throw new DatabaseOperationError(\n `Expected ${field} to be a database timestamp, got ${typeof value}`,\n { operation: \"select\", entity: \"row\" },\n );\n }\n return canonical;\n}\n\nexport function normalizeRequiredRowTimestamp(\n value: unknown,\n field: string,\n): string {\n const timestamp = normalizeRowTimestamp(value, field);\n if (timestamp === undefined) {\n throw new DatabaseOperationError(`Expected non-null ${field} timestamp`, {\n operation: \"select\",\n entity: \"row\",\n });\n }\n return timestamp;\n}\n\n/**\n * Coerce a fulltext relevance score to `number` at the backend\n * boundary. Postgres returns `numeric` as a string to preserve\n * precision; a custom `FulltextStrategy` on either dialect could\n * likewise yield a string. Shared so both backends enforce the same\n * `FulltextSearchResult.score: number` contract and reject garbage\n * loudly instead of propagating `NaN`.\n */\nexport function coerceNumericScore(value: number | string): number {\n if (typeof value === \"number\") return value;\n const parsed = Number.parseFloat(value);\n if (Number.isNaN(parsed)) {\n throw new TypeError(\n `Backend returned non-numeric fulltext score: ${JSON.stringify(value)}`,\n );\n }\n return parsed;\n}\n\n/**\n * Normalizes a JSON column that may be returned as a parsed object (JSONB)\n * or string. PostgreSQL drivers hand jsonb back already parsed — keep the\n * object instead of re-stringifying it, so the read path pays zero JSON\n * work per row (consumers normalize via rowPropsToObject /\n * rowPropsToJsonText at the point of use). SQLite text passes through.\n */\nfunction normalizeJsonColumn(value: unknown): string | Record<string, unknown> {\n if (typeof value === \"string\") return value;\n if (value !== null && typeof value === \"object\") {\n return value as Record<string, unknown>;\n }\n return JSON.stringify(value ?? {});\n}\n\n/**\n * Dialect-specific configuration for row mappers.\n *\n * Row mapper factories accept this config to produce dialect-appropriate\n * mappers. Timestamp normalization is dialect-independent and owned by\n * {@link normalizeRowTimestamp}; only JSON columns need dialect configuration.\n */\ntype DialectRowMapperConfig = Readonly<{\n normalizeJson: (value: unknown) => string | Record<string, unknown>;\n}>;\n\n/**\n * SQLite row mapper config. JSON is stored as TEXT.\n */\nexport const SQLITE_ROW_MAPPER_CONFIG: DialectRowMapperConfig = {\n normalizeJson: (value) => {\n if (typeof value !== \"string\") {\n throw new DatabaseOperationError(\n `Expected JSON column to be string, got ${typeof value}`,\n { operation: \"select\", entity: \"row\" },\n );\n }\n return value;\n },\n};\n\n/**\n * PostgreSQL row mapper config. JSONB is returned as parsed objects.\n */\nexport const POSTGRES_ROW_MAPPER_CONFIG: DialectRowMapperConfig = {\n normalizeJson: normalizeJsonColumn,\n};\n\n// Trust boundary: Drizzle raw SQL returns Record<string, unknown> rows.\n// The field access patterns below are intentional unsafe casts at the\n// database driver boundary where we know the column shapes.\n\nexport function createNodeRowMapper(\n config: DialectRowMapperConfig,\n): (row: Record<string, unknown>) => NodeRow {\n return (row) => ({\n graph_id: asString(row[\"graph_id\"], \"graph_id\"),\n kind: asString(row[\"kind\"], \"kind\"),\n id: asString(row[\"id\"], \"id\"),\n props: config.normalizeJson(row[\"props\"]),\n version: asNumber(row[\"version\"], \"version\"),\n valid_from: normalizeRowTimestamp(row[\"valid_from\"], \"valid_from\"),\n valid_to: normalizeRowTimestamp(row[\"valid_to\"], \"valid_to\"),\n created_at: normalizeRequiredRowTimestamp(row[\"created_at\"], \"created_at\"),\n updated_at: normalizeRequiredRowTimestamp(row[\"updated_at\"], \"updated_at\"),\n deleted_at: normalizeRowTimestamp(row[\"deleted_at\"], \"deleted_at\"),\n });\n}\n\nexport function createEdgeRowMapper(\n config: DialectRowMapperConfig,\n): (row: Record<string, unknown>) => EdgeRow {\n return (row) => {\n const matchIdentityName = asOptionalString(\n row[\"match_identity_name\"],\n \"match_identity_name\",\n );\n const matchIdentityKey = asOptionalString(\n row[\"match_identity_key\"],\n \"match_identity_key\",\n );\n return {\n graph_id: asString(row[\"graph_id\"], \"graph_id\"),\n id: asString(row[\"id\"], \"id\"),\n kind: asString(row[\"kind\"], \"kind\"),\n from_kind: asString(row[\"from_kind\"], \"from_kind\"),\n from_id: asString(row[\"from_id\"], \"from_id\"),\n to_kind: asString(row[\"to_kind\"], \"to_kind\"),\n to_id: asString(row[\"to_id\"], \"to_id\"),\n props: config.normalizeJson(row[\"props\"]),\n ...(matchIdentityName === undefined ?\n {}\n : { match_identity_name: matchIdentityName }),\n ...(matchIdentityKey === undefined ?\n {}\n : { match_identity_key: matchIdentityKey }),\n valid_from: normalizeRowTimestamp(row[\"valid_from\"], \"valid_from\"),\n valid_to: normalizeRowTimestamp(row[\"valid_to\"], \"valid_to\"),\n created_at: normalizeRequiredRowTimestamp(\n row[\"created_at\"],\n \"created_at\",\n ),\n updated_at: normalizeRequiredRowTimestamp(\n row[\"updated_at\"],\n \"updated_at\",\n ),\n deleted_at: normalizeRowTimestamp(row[\"deleted_at\"], \"deleted_at\"),\n };\n };\n}\n\nfunction mapUniqueRow(row: Record<string, unknown>): UniqueRow {\n return {\n graph_id: asString(row[\"graph_id\"], \"graph_id\"),\n node_kind: asString(row[\"node_kind\"], \"node_kind\"),\n constraint_name: asString(row[\"constraint_name\"], \"constraint_name\"),\n key: asString(row[\"key\"], \"key\"),\n node_id: asString(row[\"node_id\"], \"node_id\"),\n concrete_kind: asString(row[\"concrete_kind\"], \"concrete_kind\"),\n deleted_at: normalizeRowTimestamp(row[\"deleted_at\"], \"deleted_at\"),\n };\n}\n\nexport function createUniqueRowMapper(\n _config: DialectRowMapperConfig,\n): (row: Record<string, unknown>) => UniqueRow {\n return mapUniqueRow;\n}\n\nexport function createSchemaVersionRowMapper(\n config: DialectRowMapperConfig,\n): (row: Record<string, unknown>) => SchemaVersionRow {\n return (row) => {\n const isActiveValue = row[\"is_active\"];\n const isActive =\n isActiveValue === true || isActiveValue === 1 || isActiveValue === \"1\";\n\n return {\n graph_id: asString(row[\"graph_id\"], \"graph_id\"),\n version: asNumber(row[\"version\"], \"version\"),\n schema_hash: asString(row[\"schema_hash\"], \"schema_hash\"),\n schema_doc: rowPropsToJsonText(config.normalizeJson(row[\"schema_doc\"])),\n created_at: normalizeRequiredRowTimestamp(\n row[\"created_at\"],\n \"created_at\",\n ),\n is_active: isActive,\n };\n };\n}\n","/**\n * Statement builders for the claim relations' bulk-removal paths.\n *\n * These are statements over the claim relations — the uniqueness claims a\n * kind's nodes own, and the edge-cardinality claims an edge kind's edges\n * hold — so their owner is `src/store/claims/`, exactly like every other\n * claim decision. `edgeCardinalityAxesForKind` already lives here (see\n * `./edge-claims`), so this module reads it directly instead of reaching\n * back out to an adapter that reaches back in.\n *\n * `src/backend/drizzle/operations/uniques.ts` and\n * `src/backend/drizzle/operations/edge-claims.ts` re-export these three\n * builders from their previous addresses, so `CommonOperationStrategy` and\n * `operation-backend-core.ts` see no change: one owner, two addresses, no\n * duplicate.\n */\nimport type { HardDeleteUniquesByConcreteKindParams } from \"../../backend/types\";\nimport { sql as fragmentSql, type SqlFragment } from \"../../query/sql-fragment\";\nimport { edgeCardinalityAxesForKind } from \"./edge-claims\";\n\n/**\n * THE definition of \"the uniqueness claims nodes of this kind own\": every row\n * whose `concrete_kind` is the kind, at whatever axis the row sits on.\n *\n * Kind reaping is a different predicate from a lifecycle release — \"every claim\n * this kind's nodes own\" rather than \"this node's claim for one constraint and\n * key\" — and it is a hard delete rather than a tombstone, so it is its own\n * builder. It is nonetheless the ONLY spelling of that predicate: both the\n * `hardDeleteUniquesByConcreteKind` backend member and `materializeRemovals`'\n * removed-kind cleanup compile this fragment. Keying on `node_kind` instead\n * would leak a claim whose axis is a sibling kind, delete a surviving sibling's\n * claim when the removed kind IS the axis, and never match a claim whose axis\n * is not a kind at all.\n *\n * Takes the relation NAME rather than the Drizzle table so the store-side\n * caller, which knows only its configured table names, can build the same\n * statement; the fragment renders on either dialect.\n */\nexport function buildHardDeleteUniquesByConcreteKind(\n uniquesTableName: string,\n params: HardDeleteUniquesByConcreteKindParams,\n): SqlFragment {\n return fragmentSql`DELETE FROM ${fragmentSql.identifier(uniquesTableName)} WHERE ${fragmentSql.identifier(\"graph_id\")} = ${params.graphId} AND ${fragmentSql.identifier(\"concrete_kind\")} = ${params.concreteKind}`;\n}\n\n/**\n * THE definition of \"the cardinality claims an edge kind owns\": every row at\n * one of the kind's declared-cardinality axes.\n *\n * Keyed on the axis rather than on the holder's id because a removed kind's\n * edges are deleted in the same pass, which would leave a claim naming a row\n * that no longer exists — takeable, but never reaped. Takes the relation NAME\n * rather than the Drizzle table so `materializeRemovals`, which knows only its\n * configured table names, compiles the same statement.\n */\nexport function buildHardDeleteEdgeClaimsByEdgeKind(\n edgeClaimsTableName: string,\n params: Readonly<{ graphId: string; edgeKind: string }>,\n): SqlFragment {\n const axes = edgeCardinalityAxesForKind(params.edgeKind).map(\n (axis) => fragmentSql`${axis}`,\n );\n return fragmentSql`DELETE FROM ${fragmentSql.identifier(edgeClaimsTableName)} WHERE ${fragmentSql.identifier(\"graph_id\")} = ${params.graphId} AND ${fragmentSql.identifier(\"axis\")} IN (${fragmentSql.join(axes, fragmentSql`, `)})`;\n}\n\n/**\n * Housekeeping for node-kind removal: deletes every claim held by an edge whose\n * source or target has the removed kind.\n *\n * The holder ids are selected before those edges are deleted. Filtering claim\n * axes cannot express this ownership: an edge kind may connect several node\n * kinds, while its claim axis names only its cardinality and edge kind.\n */\nexport function buildHardDeleteEdgeClaimsByNodeKind(\n edgeClaimsTableName: string,\n edgesTableName: string,\n params: Readonly<{ graphId: string; nodeKind: string }>,\n): SqlFragment {\n return fragmentSql`DELETE FROM ${fragmentSql.identifier(edgeClaimsTableName)} WHERE ${fragmentSql.identifier(\"graph_id\")} = ${params.graphId} AND ${fragmentSql.identifier(\"edge_id\")} IN (SELECT ${fragmentSql.identifier(\"id\")} FROM ${fragmentSql.identifier(edgesTableName)} WHERE ${fragmentSql.identifier(\"graph_id\")} = ${params.graphId} AND (${fragmentSql.identifier(\"from_kind\")} = ${params.nodeKind} OR ${fragmentSql.identifier(\"to_kind\")} = ${params.nodeKind}))`;\n}\n"]}
1
+ {"version":3,"sources":["../src/backend/row-mappers.ts","../src/store/claims/removal-sql.ts"],"names":[],"mappings":"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","file":"chunk-OF63ZHSD.js","sourcesContent":["/**\n * Shared database row-mapping utilities.\n */\n\nimport { DatabaseOperationError } from \"../errors\";\nimport { canonicalizeDatabaseTimestamp } from \"../utils/date\";\nimport {\n type EdgeRow,\n type NodeRow,\n rowPropsToJsonText,\n type SchemaVersionRow,\n type UniqueRow,\n} from \"./types\";\n\nfunction asString(value: unknown, field: string): string {\n if (typeof value !== \"string\") {\n throw new DatabaseOperationError(\n `Expected ${field} to be string, got ${typeof value}`,\n { operation: \"select\", entity: \"row\" },\n );\n }\n return value;\n}\n\nfunction asOptionalString(value: unknown, field: string): string | undefined {\n if (value === null || value === undefined) return undefined;\n return asString(value, field);\n}\n\nfunction asNumber(value: unknown, field: string): number {\n if (typeof value !== \"number\") {\n throw new DatabaseOperationError(\n `Expected ${field} to be number, got ${typeof value}`,\n { operation: \"select\", entity: \"row\" },\n );\n }\n return value;\n}\n\nexport function nowIso(): string {\n return new Date().toISOString();\n}\n\n/**\n * Formats PostgreSQL timestamps used by internal status-table adapters.\n * Row metadata uses the stricter {@link normalizeRowTimestamp} contract.\n */\nexport function formatPostgresTimestamp(value: unknown): string | undefined {\n if (value === null || value === undefined) return undefined;\n if (value instanceof Date) return value.toISOString();\n if (typeof value === \"string\") {\n if (value.includes(\"T\")) return value;\n const date = new Date(value);\n if (!Number.isNaN(date.getTime())) return date.toISOString();\n return value;\n }\n return undefined;\n}\n\n/**\n * Canonicalizes database-driver timestamp values at the row-mapping boundary.\n * Every store and compiled-query metadata projection uses this owner so driver\n * rendering differences cannot become public values.\n */\nexport function normalizeRowTimestamp(\n value: unknown,\n field: string,\n): string | undefined {\n if (value === null || value === undefined) return undefined;\n const canonical = canonicalizeDatabaseTimestamp(value);\n if (canonical === undefined) {\n throw new DatabaseOperationError(\n `Expected ${field} to be a database timestamp, got ${typeof value}`,\n { operation: \"select\", entity: \"row\" },\n );\n }\n return canonical;\n}\n\nexport function normalizeRequiredRowTimestamp(\n value: unknown,\n field: string,\n): string {\n const timestamp = normalizeRowTimestamp(value, field);\n if (timestamp === undefined) {\n throw new DatabaseOperationError(`Expected non-null ${field} timestamp`, {\n operation: \"select\",\n entity: \"row\",\n });\n }\n return timestamp;\n}\n\n/**\n * Coerce a fulltext relevance score to `number` at the backend\n * boundary. Postgres returns `numeric` as a string to preserve\n * precision; a custom `FulltextStrategy` on either dialect could\n * likewise yield a string. Shared so both backends enforce the same\n * `FulltextSearchResult.score: number` contract and reject garbage\n * loudly instead of propagating `NaN`.\n */\nexport function coerceNumericScore(value: number | string): number {\n if (typeof value === \"number\") return value;\n const parsed = Number.parseFloat(value);\n if (Number.isNaN(parsed)) {\n throw new TypeError(\n `Backend returned non-numeric fulltext score: ${JSON.stringify(value)}`,\n );\n }\n return parsed;\n}\n\n/**\n * Normalizes a JSON column that may be returned as a parsed object (JSONB)\n * or string. PostgreSQL drivers hand jsonb back already parsed — keep the\n * object instead of re-stringifying it, so the read path pays zero JSON\n * work per row (consumers normalize via rowPropsToObject /\n * rowPropsToJsonText at the point of use). SQLite text passes through.\n */\nfunction normalizeJsonColumn(value: unknown): string | Record<string, unknown> {\n if (typeof value === \"string\") return value;\n if (value !== null && typeof value === \"object\") {\n return value as Record<string, unknown>;\n }\n return JSON.stringify(value ?? {});\n}\n\n/**\n * Dialect-specific configuration for row mappers.\n *\n * Row mapper factories accept this config to produce dialect-appropriate\n * mappers. Timestamp normalization is dialect-independent and owned by\n * {@link normalizeRowTimestamp}; only JSON columns need dialect configuration.\n */\ntype DialectRowMapperConfig = Readonly<{\n normalizeJson: (value: unknown) => string | Record<string, unknown>;\n}>;\n\n/**\n * SQLite row mapper config. JSON is stored as TEXT.\n */\nexport const SQLITE_ROW_MAPPER_CONFIG: DialectRowMapperConfig = {\n normalizeJson: (value) => {\n if (typeof value !== \"string\") {\n throw new DatabaseOperationError(\n `Expected JSON column to be string, got ${typeof value}`,\n { operation: \"select\", entity: \"row\" },\n );\n }\n return value;\n },\n};\n\n/**\n * PostgreSQL row mapper config. JSONB is returned as parsed objects.\n */\nexport const POSTGRES_ROW_MAPPER_CONFIG: DialectRowMapperConfig = {\n normalizeJson: normalizeJsonColumn,\n};\n\n// Trust boundary: Drizzle raw SQL returns Record<string, unknown> rows.\n// The field access patterns below are intentional unsafe casts at the\n// database driver boundary where we know the column shapes.\n\nexport function createNodeRowMapper(\n config: DialectRowMapperConfig,\n): (row: Record<string, unknown>) => NodeRow {\n return (row) => ({\n graph_id: asString(row[\"graph_id\"], \"graph_id\"),\n kind: asString(row[\"kind\"], \"kind\"),\n id: asString(row[\"id\"], \"id\"),\n props: config.normalizeJson(row[\"props\"]),\n version: asNumber(row[\"version\"], \"version\"),\n valid_from: normalizeRowTimestamp(row[\"valid_from\"], \"valid_from\"),\n valid_to: normalizeRowTimestamp(row[\"valid_to\"], \"valid_to\"),\n created_at: normalizeRequiredRowTimestamp(row[\"created_at\"], \"created_at\"),\n updated_at: normalizeRequiredRowTimestamp(row[\"updated_at\"], \"updated_at\"),\n deleted_at: normalizeRowTimestamp(row[\"deleted_at\"], \"deleted_at\"),\n });\n}\n\nexport function createEdgeRowMapper(\n config: DialectRowMapperConfig,\n): (row: Record<string, unknown>) => EdgeRow {\n return (row) => {\n const matchIdentityName = asOptionalString(\n row[\"match_identity_name\"],\n \"match_identity_name\",\n );\n const matchIdentityKey = asOptionalString(\n row[\"match_identity_key\"],\n \"match_identity_key\",\n );\n return {\n graph_id: asString(row[\"graph_id\"], \"graph_id\"),\n id: asString(row[\"id\"], \"id\"),\n kind: asString(row[\"kind\"], \"kind\"),\n from_kind: asString(row[\"from_kind\"], \"from_kind\"),\n from_id: asString(row[\"from_id\"], \"from_id\"),\n to_kind: asString(row[\"to_kind\"], \"to_kind\"),\n to_id: asString(row[\"to_id\"], \"to_id\"),\n props: config.normalizeJson(row[\"props\"]),\n ...(matchIdentityName === undefined ?\n {}\n : { match_identity_name: matchIdentityName }),\n ...(matchIdentityKey === undefined ?\n {}\n : { match_identity_key: matchIdentityKey }),\n valid_from: normalizeRowTimestamp(row[\"valid_from\"], \"valid_from\"),\n valid_to: normalizeRowTimestamp(row[\"valid_to\"], \"valid_to\"),\n created_at: normalizeRequiredRowTimestamp(\n row[\"created_at\"],\n \"created_at\",\n ),\n updated_at: normalizeRequiredRowTimestamp(\n row[\"updated_at\"],\n \"updated_at\",\n ),\n deleted_at: normalizeRowTimestamp(row[\"deleted_at\"], \"deleted_at\"),\n };\n };\n}\n\nfunction mapUniqueRow(row: Record<string, unknown>): UniqueRow {\n return {\n graph_id: asString(row[\"graph_id\"], \"graph_id\"),\n node_kind: asString(row[\"node_kind\"], \"node_kind\"),\n constraint_name: asString(row[\"constraint_name\"], \"constraint_name\"),\n key: asString(row[\"key\"], \"key\"),\n node_id: asString(row[\"node_id\"], \"node_id\"),\n concrete_kind: asString(row[\"concrete_kind\"], \"concrete_kind\"),\n deleted_at: normalizeRowTimestamp(row[\"deleted_at\"], \"deleted_at\"),\n };\n}\n\nexport function createUniqueRowMapper(\n _config: DialectRowMapperConfig,\n): (row: Record<string, unknown>) => UniqueRow {\n return mapUniqueRow;\n}\n\nexport function createSchemaVersionRowMapper(\n config: DialectRowMapperConfig,\n): (row: Record<string, unknown>) => SchemaVersionRow {\n return (row) => {\n const isActiveValue = row[\"is_active\"];\n const isActive =\n isActiveValue === true || isActiveValue === 1 || isActiveValue === \"1\";\n\n return {\n graph_id: asString(row[\"graph_id\"], \"graph_id\"),\n version: asNumber(row[\"version\"], \"version\"),\n schema_hash: asString(row[\"schema_hash\"], \"schema_hash\"),\n schema_doc: rowPropsToJsonText(config.normalizeJson(row[\"schema_doc\"])),\n created_at: normalizeRequiredRowTimestamp(\n row[\"created_at\"],\n \"created_at\",\n ),\n is_active: isActive,\n };\n };\n}\n","/**\n * Statement builders for the claim relations' bulk-removal paths.\n *\n * These are statements over the claim relations — the uniqueness claims a\n * kind's nodes own, and the edge-cardinality claims an edge kind's edges\n * hold — so their owner is `src/store/claims/`, exactly like every other\n * claim decision. `edgeCardinalityAxesForKind` already lives here (see\n * `./edge-claims`), so this module reads it directly instead of reaching\n * back out to an adapter that reaches back in.\n *\n * `src/backend/drizzle/operations/uniques.ts` and\n * `src/backend/drizzle/operations/edge-claims.ts` re-export these three\n * builders from their previous addresses, so `CommonOperationStrategy` and\n * `operation-backend-core.ts` see no change: one owner, two addresses, no\n * duplicate.\n */\nimport type { HardDeleteUniquesByConcreteKindParams } from \"../../backend/types\";\nimport { sql as fragmentSql, type SqlFragment } from \"../../query/sql-fragment\";\nimport { edgeCardinalityAxesForKind } from \"./edge-claims\";\n\n/**\n * THE definition of \"the uniqueness claims nodes of this kind own\": every row\n * whose `concrete_kind` is the kind, at whatever axis the row sits on.\n *\n * Kind reaping is a different predicate from a lifecycle release — \"every claim\n * this kind's nodes own\" rather than \"this node's claim for one constraint and\n * key\" — and it is a hard delete rather than a tombstone, so it is its own\n * builder. It is nonetheless the ONLY spelling of that predicate: both the\n * `hardDeleteUniquesByConcreteKind` backend member and `materializeRemovals`'\n * removed-kind cleanup compile this fragment. Keying on `node_kind` instead\n * would leak a claim whose axis is a sibling kind, delete a surviving sibling's\n * claim when the removed kind IS the axis, and never match a claim whose axis\n * is not a kind at all.\n *\n * Takes the relation NAME rather than the Drizzle table so the store-side\n * caller, which knows only its configured table names, can build the same\n * statement; the fragment renders on either dialect.\n */\nexport function buildHardDeleteUniquesByConcreteKind(\n uniquesTableName: string,\n params: HardDeleteUniquesByConcreteKindParams,\n): SqlFragment {\n return fragmentSql`DELETE FROM ${fragmentSql.identifier(uniquesTableName)} WHERE ${fragmentSql.identifier(\"graph_id\")} = ${params.graphId} AND ${fragmentSql.identifier(\"concrete_kind\")} = ${params.concreteKind}`;\n}\n\n/**\n * THE definition of \"the cardinality claims an edge kind owns\": every row at\n * one of the kind's declared-cardinality axes.\n *\n * Keyed on the axis rather than on the holder's id because a removed kind's\n * edges are deleted in the same pass, which would leave a claim naming a row\n * that no longer exists — takeable, but never reaped. Takes the relation NAME\n * rather than the Drizzle table so `materializeRemovals`, which knows only its\n * configured table names, compiles the same statement.\n */\nexport function buildHardDeleteEdgeClaimsByEdgeKind(\n edgeClaimsTableName: string,\n params: Readonly<{ graphId: string; edgeKind: string }>,\n): SqlFragment {\n const axes = edgeCardinalityAxesForKind(params.edgeKind).map(\n (axis) => fragmentSql`${axis}`,\n );\n return fragmentSql`DELETE FROM ${fragmentSql.identifier(edgeClaimsTableName)} WHERE ${fragmentSql.identifier(\"graph_id\")} = ${params.graphId} AND ${fragmentSql.identifier(\"axis\")} IN (${fragmentSql.join(axes, fragmentSql`, `)})`;\n}\n\n/**\n * Housekeeping for node-kind removal: deletes every claim held by an edge whose\n * source or target has the removed kind.\n *\n * The holder ids are selected before those edges are deleted. Filtering claim\n * axes cannot express this ownership: an edge kind may connect several node\n * kinds, while its claim axis names only its cardinality and edge kind.\n */\nexport function buildHardDeleteEdgeClaimsByNodeKind(\n edgeClaimsTableName: string,\n edgesTableName: string,\n params: Readonly<{ graphId: string; nodeKind: string }>,\n): SqlFragment {\n return fragmentSql`DELETE FROM ${fragmentSql.identifier(edgeClaimsTableName)} WHERE ${fragmentSql.identifier(\"graph_id\")} = ${params.graphId} AND ${fragmentSql.identifier(\"edge_id\")} IN (SELECT ${fragmentSql.identifier(\"id\")} FROM ${fragmentSql.identifier(edgesTableName)} WHERE ${fragmentSql.identifier(\"graph_id\")} = ${params.graphId} AND (${fragmentSql.identifier(\"from_kind\")} = ${params.nodeKind} OR ${fragmentSql.identifier(\"to_kind\")} = ${params.nodeKind}))`;\n}\n"]}
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
3
  var chunk2XQYRCPM_cjs = require('./chunk-2XQYRCPM.cjs');
4
- var chunkBNTJ5YFO_cjs = require('./chunk-BNTJ5YFO.cjs');
5
- var chunkDHRLOQLQ_cjs = require('./chunk-DHRLOQLQ.cjs');
6
- var chunkOC5ROP7V_cjs = require('./chunk-OC5ROP7V.cjs');
4
+ var chunkEACDHXJL_cjs = require('./chunk-EACDHXJL.cjs');
5
+ var chunk7LQTDGV5_cjs = require('./chunk-7LQTDGV5.cjs');
6
+ var chunk6JRVV2SS_cjs = require('./chunk-6JRVV2SS.cjs');
7
7
  var chunkL4L4AV6F_cjs = require('./chunk-L4L4AV6F.cjs');
8
8
  var chunkSBAN4CHK_cjs = require('./chunk-SBAN4CHK.cjs');
9
9
  var chunkXPSPDFKO_cjs = require('./chunk-XPSPDFKO.cjs');
@@ -59,7 +59,7 @@ function shortenedIdentifier(value) {
59
59
  }
60
60
  function mappingTableName(tables, override) {
61
61
  const candidate = override ?? `${tables.recordedClock}_${MIGRATION_SUFFIX}`;
62
- return chunkOC5ROP7V_cjs.createSqlSchema({
62
+ return chunk6JRVV2SS_cjs.createSqlSchema({
63
63
  recordedClock: shortenedIdentifier(candidate)
64
64
  }).tables.recordedClock;
65
65
  }
@@ -103,7 +103,7 @@ function safeRevision(value) {
103
103
  return revision;
104
104
  }
105
105
  async function columnNames(target, tableName) {
106
- const catalog = chunkDHRLOQLQ_cjs.requireCatalog(target, "migrateLegacyRecordedTime");
106
+ const catalog = chunk7LQTDGV5_cjs.requireCatalog(target, "migrateLegacyRecordedTime");
107
107
  const columns = await catalog.columnTypes(tableName);
108
108
  return new Set(columns.map((column) => column.name));
109
109
  }
@@ -476,7 +476,7 @@ async function migrateLegacyRecordedTime(options) {
476
476
  }
477
477
  );
478
478
  }
479
- const tables = chunkBNTJ5YFO_cjs.resolvedTableNames(options.backend, options.tableNames);
479
+ const tables = chunkEACDHXJL_cjs.resolvedTableNames(options.backend, options.tableNames);
480
480
  const mapTable = mappingTableName(tables, options.mappingTableName);
481
481
  const recordedTableDdl = options.backend.recordedTableDdl;
482
482
  return options.backend.transaction(async (target) => {
@@ -549,7 +549,7 @@ async function migrateRecordedAnchor(options) {
549
549
  if (!(error instanceof chunk7XYPLAPL_cjs.ValidationError)) throw error;
550
550
  }
551
551
  const legacyRecordedAt = canonicalLegacyInstant(options.anchor);
552
- const tables = chunkBNTJ5YFO_cjs.resolvedTableNames(options.backend, options.tableNames);
552
+ const tables = chunkEACDHXJL_cjs.resolvedTableNames(options.backend, options.tableNames);
553
553
  const mapTable = mappingTableName(tables, options.mappingTableName);
554
554
  const rows = await options.backend.execute(
555
555
  chunkXPSPDFKO_cjs.asCompiledRowsSql(chunkXPSPDFKO_cjs.sql`
@@ -576,7 +576,7 @@ async function migrateRecordedAnchor(options) {
576
576
  }
577
577
  async function deleteLegacyRecordedAnchorMap(options) {
578
578
  requireStatements(options.backend);
579
- const tables = chunkBNTJ5YFO_cjs.resolvedTableNames(options.backend, options.tableNames);
579
+ const tables = chunkEACDHXJL_cjs.resolvedTableNames(options.backend, options.tableNames);
580
580
  const mapTable = mappingTableName(tables, options.mappingTableName);
581
581
  await options.backend.transaction(async (target) => {
582
582
  await executeStatement(
@@ -712,7 +712,7 @@ async function repairRelation(target, verdict, table, predicate) {
712
712
  throw statementExecutionRequiredError(target.dialect);
713
713
  }
714
714
  try {
715
- await chunkOC5ROP7V_cjs.statementExecutionMembers(target, verdict).executeStatement(
715
+ await chunk6JRVV2SS_cjs.statementExecutionMembers(target, verdict).executeStatement(
716
716
  chunkXPSPDFKO_cjs.asCompiledStatementSql(chunkXPSPDFKO_cjs.sql`
717
717
  UPDATE ${chunkXPSPDFKO_cjs.sql.identifier(table)}
718
718
  SET valid_from = NULL
@@ -746,13 +746,13 @@ function relationRecord(counts) {
746
746
  };
747
747
  }
748
748
  async function repairInvertedValidityWindows(options) {
749
- const tables = chunkBNTJ5YFO_cjs.resolvedTableNames(options.backend, options.tableNames);
749
+ const tables = chunkEACDHXJL_cjs.resolvedTableNames(options.backend, options.tableNames);
750
750
  const relations = scopedRelations(options.relations);
751
- const verdict = chunkDHRLOQLQ_cjs.statementExecutionVerdict(options.backend);
751
+ const verdict = chunk7LQTDGV5_cjs.statementExecutionVerdict(options.backend);
752
752
  if (options.mode === "apply" && !verdict.supported) {
753
753
  throw statementExecutionRequiredError(options.backend.dialect);
754
754
  }
755
- return chunkOC5ROP7V_cjs.runOptionallyInTransaction(
755
+ return chunk6JRVV2SS_cjs.runOptionallyInTransaction(
756
756
  options.backend,
757
757
  async (target, execution) => {
758
758
  const predicate = invertedValidityWindowPredicate({
@@ -803,5 +803,5 @@ exports.deleteLegacyRecordedAnchorMap = deleteLegacyRecordedAnchorMap;
803
803
  exports.migrateLegacyRecordedTime = migrateLegacyRecordedTime;
804
804
  exports.migrateRecordedAnchor = migrateRecordedAnchor;
805
805
  exports.repairInvertedValidityWindows = repairInvertedValidityWindows;
806
- //# sourceMappingURL=chunk-NGA3THGU.cjs.map
807
- //# sourceMappingURL=chunk-NGA3THGU.cjs.map
806
+ //# sourceMappingURL=chunk-QR7W37HG.cjs.map
807
+ //# sourceMappingURL=chunk-QR7W37HG.cjs.map