@nicia-ai/typegraph 0.55.0 → 0.56.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/backend/index.cjs +86 -86
  3. package/dist/backend/index.js +7 -7
  4. package/dist/backend/postgres/index.cjs +22 -22
  5. package/dist/backend/postgres/index.js +8 -8
  6. package/dist/backend/postgres/pglite-store.cjs +1 -1
  7. package/dist/backend/postgres/pglite-store.d.cts +2 -2
  8. package/dist/backend/postgres/pglite-store.d.ts +2 -2
  9. package/dist/backend/postgres/pglite-store.js +1 -1
  10. package/dist/backend/postgres/pglite.cjs +10 -10
  11. package/dist/backend/postgres/pglite.js +9 -9
  12. package/dist/backend/sqlite/index.cjs +21 -21
  13. package/dist/backend/sqlite/index.js +8 -8
  14. package/dist/backend/sqlite/libsql.cjs +12 -12
  15. package/dist/backend/sqlite/libsql.js +8 -8
  16. package/dist/backend/sqlite/local-store.cjs +1 -1
  17. package/dist/backend/sqlite/local-store.d.cts +2 -2
  18. package/dist/backend/sqlite/local-store.d.ts +2 -2
  19. package/dist/backend/sqlite/local-store.js +1 -1
  20. package/dist/backend/sqlite/local.cjs +10 -10
  21. package/dist/backend/sqlite/local.js +9 -9
  22. package/dist/{chunk-S5WG5AFG.cjs → chunk-2XUAUSMI.cjs} +12 -12
  23. package/dist/{chunk-S5WG5AFG.cjs.map → chunk-2XUAUSMI.cjs.map} +1 -1
  24. package/dist/{chunk-MTE255N3.cjs → chunk-36XLQHZA.cjs} +4 -4
  25. package/dist/{chunk-MTE255N3.cjs.map → chunk-36XLQHZA.cjs.map} +1 -1
  26. package/dist/{chunk-FWSGKOBN.js → chunk-6LTRZOUU.js} +6 -6
  27. package/dist/{chunk-FWSGKOBN.js.map → chunk-6LTRZOUU.js.map} +1 -1
  28. package/dist/{chunk-YVKPUSHS.js → chunk-75KH6Y2W.js} +16 -7
  29. package/dist/chunk-75KH6Y2W.js.map +1 -0
  30. package/dist/{chunk-MJXEO7YA.js → chunk-762VPGHN.js} +5 -5
  31. package/dist/{chunk-MJXEO7YA.js.map → chunk-762VPGHN.js.map} +1 -1
  32. package/dist/{chunk-GGDTMBNA.cjs → chunk-7CCVR2QF.cjs} +54 -54
  33. package/dist/{chunk-GGDTMBNA.cjs.map → chunk-7CCVR2QF.cjs.map} +1 -1
  34. package/dist/{chunk-7EOJO6QB.js → chunk-7MHENVRG.js} +3 -3
  35. package/dist/{chunk-7EOJO6QB.js.map → chunk-7MHENVRG.js.map} +1 -1
  36. package/dist/{chunk-7B3DSFX3.cjs → chunk-AUTRK6WM.cjs} +4 -4
  37. package/dist/{chunk-7B3DSFX3.cjs.map → chunk-AUTRK6WM.cjs.map} +1 -1
  38. package/dist/{chunk-SIQ4BFL5.js → chunk-AZP5CCHL.js} +4 -4
  39. package/dist/{chunk-SIQ4BFL5.js.map → chunk-AZP5CCHL.js.map} +1 -1
  40. package/dist/{chunk-WTW7RWAG.cjs → chunk-BYUIOM4L.cjs} +6 -6
  41. package/dist/{chunk-WTW7RWAG.cjs.map → chunk-BYUIOM4L.cjs.map} +1 -1
  42. package/dist/{chunk-74FNI3PT.js → chunk-C3TJU4KQ.js} +6 -6
  43. package/dist/chunk-C3TJU4KQ.js.map +1 -0
  44. package/dist/{chunk-7V2R4MH6.js → chunk-CEQOTZGB.js} +5 -5
  45. package/dist/{chunk-7V2R4MH6.js.map → chunk-CEQOTZGB.js.map} +1 -1
  46. package/dist/{chunk-TKFQLKH2.cjs → chunk-CYKHSH5O.cjs} +36 -36
  47. package/dist/{chunk-TKFQLKH2.cjs.map → chunk-CYKHSH5O.cjs.map} +1 -1
  48. package/dist/{chunk-D5TCKAQT.cjs → chunk-DGIA64DM.cjs} +4 -4
  49. package/dist/{chunk-D5TCKAQT.cjs.map → chunk-DGIA64DM.cjs.map} +1 -1
  50. package/dist/{chunk-FFR3YUY2.js → chunk-E4QYEWVH.js} +5 -5
  51. package/dist/{chunk-FFR3YUY2.js.map → chunk-E4QYEWVH.js.map} +1 -1
  52. package/dist/{chunk-467YITD4.cjs → chunk-ETU5IILQ.cjs} +13 -13
  53. package/dist/{chunk-467YITD4.cjs.map → chunk-ETU5IILQ.cjs.map} +1 -1
  54. package/dist/{chunk-HW3IX2RF.js → chunk-EWRLWI7W.js} +4 -4
  55. package/dist/{chunk-HW3IX2RF.js.map → chunk-EWRLWI7W.js.map} +1 -1
  56. package/dist/{chunk-KZ6OHFDV.js → chunk-F2S5JWCT.js} +3 -3
  57. package/dist/{chunk-KZ6OHFDV.js.map → chunk-F2S5JWCT.js.map} +1 -1
  58. package/dist/{chunk-45WPPI64.js → chunk-FMCPKMQI.js} +3 -3
  59. package/dist/{chunk-45WPPI64.js.map → chunk-FMCPKMQI.js.map} +1 -1
  60. package/dist/{chunk-QM6IQW7B.js → chunk-ILHVYKXJ.js} +7 -7
  61. package/dist/{chunk-QM6IQW7B.js.map → chunk-ILHVYKXJ.js.map} +1 -1
  62. package/dist/{chunk-ECYEWFEH.cjs → chunk-J34FSPSC.cjs} +16 -6
  63. package/dist/chunk-J34FSPSC.cjs.map +1 -0
  64. package/dist/{chunk-GFYCLCGU.cjs → chunk-KM3CLHDB.cjs} +9 -9
  65. package/dist/{chunk-GFYCLCGU.cjs.map → chunk-KM3CLHDB.cjs.map} +1 -1
  66. package/dist/{chunk-SLNH62T3.js → chunk-KQYUKOGX.js} +3 -3
  67. package/dist/{chunk-SLNH62T3.js.map → chunk-KQYUKOGX.js.map} +1 -1
  68. package/dist/{chunk-7I2PYI4U.cjs → chunk-KR3N6Y7O.cjs} +67 -67
  69. package/dist/{chunk-7I2PYI4U.cjs.map → chunk-KR3N6Y7O.cjs.map} +1 -1
  70. package/dist/{chunk-HZCOCNIX.cjs → chunk-L2REUAJB.cjs} +24 -24
  71. package/dist/{chunk-HZCOCNIX.cjs.map → chunk-L2REUAJB.cjs.map} +1 -1
  72. package/dist/{chunk-VU65FXEG.js → chunk-LFXBFPI2.js} +66 -29
  73. package/dist/chunk-LFXBFPI2.js.map +1 -0
  74. package/dist/{chunk-NXRSR6QG.js → chunk-MHM6OGZR.js} +9 -9
  75. package/dist/{chunk-NXRSR6QG.js.map → chunk-MHM6OGZR.js.map} +1 -1
  76. package/dist/{chunk-FCUSVSYX.js → chunk-MRGWM5LE.js} +10 -10
  77. package/dist/{chunk-FCUSVSYX.js.map → chunk-MRGWM5LE.js.map} +1 -1
  78. package/dist/{chunk-WXGMDROJ.js → chunk-QDNEXTON.js} +7 -7
  79. package/dist/{chunk-WXGMDROJ.js.map → chunk-QDNEXTON.js.map} +1 -1
  80. package/dist/{chunk-VYU5H4FO.js → chunk-RXA2D3UR.js} +3 -3
  81. package/dist/{chunk-VYU5H4FO.js.map → chunk-RXA2D3UR.js.map} +1 -1
  82. package/dist/{chunk-XODNY4QI.js → chunk-TIBSLFHR.js} +6 -6
  83. package/dist/{chunk-XODNY4QI.js.map → chunk-TIBSLFHR.js.map} +1 -1
  84. package/dist/{chunk-KZG7HQSN.cjs → chunk-UVMSWO6X.cjs} +173 -173
  85. package/dist/{chunk-KZG7HQSN.cjs.map → chunk-UVMSWO6X.cjs.map} +1 -1
  86. package/dist/{chunk-ORPT5EQW.cjs → chunk-UZ6CJUC5.cjs} +27 -27
  87. package/dist/chunk-UZ6CJUC5.cjs.map +1 -0
  88. package/dist/{chunk-GNF3PHEQ.cjs → chunk-VF2IMMZT.cjs} +17 -17
  89. package/dist/{chunk-GNF3PHEQ.cjs.map → chunk-VF2IMMZT.cjs.map} +1 -1
  90. package/dist/{chunk-PGZV3E3I.cjs → chunk-VXEHEPC4.cjs} +4 -4
  91. package/dist/{chunk-PGZV3E3I.cjs.map → chunk-VXEHEPC4.cjs.map} +1 -1
  92. package/dist/{chunk-OJ47LMOB.cjs → chunk-WIUHN6SZ.cjs} +669 -628
  93. package/dist/chunk-WIUHN6SZ.cjs.map +1 -0
  94. package/dist/{chunk-HNW5IDB3.js → chunk-WIZB5U6N.js} +7 -7
  95. package/dist/{chunk-HNW5IDB3.js.map → chunk-WIZB5U6N.js.map} +1 -1
  96. package/dist/{chunk-IDQZI6GL.js → chunk-XH75W3O5.js} +3 -3
  97. package/dist/{chunk-IDQZI6GL.js.map → chunk-XH75W3O5.js.map} +1 -1
  98. package/dist/{chunk-T7LSSV7J.cjs → chunk-XXEFDJHY.cjs} +45 -45
  99. package/dist/{chunk-T7LSSV7J.cjs.map → chunk-XXEFDJHY.cjs.map} +1 -1
  100. package/dist/{chunk-GORCU2GR.cjs → chunk-Z4NU4MYB.cjs} +123 -123
  101. package/dist/{chunk-GORCU2GR.cjs.map → chunk-Z4NU4MYB.cjs.map} +1 -1
  102. package/dist/{chunk-KFC3OUV4.cjs → chunk-ZHK3HEZ2.cjs} +130 -130
  103. package/dist/{chunk-KFC3OUV4.cjs.map → chunk-ZHK3HEZ2.cjs.map} +1 -1
  104. package/dist/{chunk-FYMYLZGX.cjs → chunk-ZXXGMQC3.cjs} +10 -10
  105. package/dist/{chunk-FYMYLZGX.cjs.map → chunk-ZXXGMQC3.cjs.map} +1 -1
  106. package/dist/graph-merge/index.cjs +577 -99
  107. package/dist/graph-merge/index.cjs.map +1 -1
  108. package/dist/graph-merge/index.d.cts +108 -4
  109. package/dist/graph-merge/index.d.ts +108 -4
  110. package/dist/graph-merge/index.js +495 -21
  111. package/dist/graph-merge/index.js.map +1 -1
  112. package/dist/{graph-templates-qraW63Ry.d.ts → graph-templates-BSA9VU_O.d.ts} +1 -1
  113. package/dist/{graph-templates--hp2U4kn.d.cts → graph-templates-Cg7DpEOF.d.cts} +1 -1
  114. package/dist/index.cjs +95 -95
  115. package/dist/index.d.cts +3 -3
  116. package/dist/index.d.ts +3 -3
  117. package/dist/index.js +16 -16
  118. package/dist/interchange/index.cjs +33 -33
  119. package/dist/interchange/index.d.cts +1 -1
  120. package/dist/interchange/index.d.ts +1 -1
  121. package/dist/interchange/index.js +10 -10
  122. package/dist/{local-store-impl-HXBO3VF4.js → local-store-impl-77DCLAAY.js} +18 -18
  123. package/dist/{local-store-impl-HXBO3VF4.js.map → local-store-impl-77DCLAAY.js.map} +1 -1
  124. package/dist/{local-store-impl-CUQKHHOZ.cjs → local-store-impl-NJCWM3KR.cjs} +22 -22
  125. package/dist/{local-store-impl-CUQKHHOZ.cjs.map → local-store-impl-NJCWM3KR.cjs.map} +1 -1
  126. package/dist/{pglite-store-impl-BD3AVOUH.js → pglite-store-impl-3VFSYLAJ.js} +18 -18
  127. package/dist/{pglite-store-impl-BD3AVOUH.js.map → pglite-store-impl-3VFSYLAJ.js.map} +1 -1
  128. package/dist/{pglite-store-impl-C3MQ72LT.cjs → pglite-store-impl-LHLJ3GBQ.cjs} +22 -22
  129. package/dist/{pglite-store-impl-C3MQ72LT.cjs.map → pglite-store-impl-LHLJ3GBQ.cjs.map} +1 -1
  130. package/dist/profiler/index.d.cts +1 -1
  131. package/dist/profiler/index.d.ts +1 -1
  132. package/dist/provenance/index.cjs +21 -21
  133. package/dist/provenance/index.d.cts +1 -1
  134. package/dist/provenance/index.d.ts +1 -1
  135. package/dist/provenance/index.js +5 -5
  136. package/dist/schema/index.cjs +36 -36
  137. package/dist/schema/index.d.cts +3 -3
  138. package/dist/schema/index.d.ts +3 -3
  139. package/dist/schema/index.js +6 -6
  140. package/dist/{store-stw2AEB4.d.ts → store-CQ3uzXla.d.ts} +58 -27
  141. package/dist/{store-DTEkUQ0k.d.cts → store-DbHAgVMH.d.cts} +58 -27
  142. package/package.json +1 -1
  143. package/dist/chunk-74FNI3PT.js.map +0 -1
  144. package/dist/chunk-ECYEWFEH.cjs.map +0 -1
  145. package/dist/chunk-OJ47LMOB.cjs.map +0 -1
  146. package/dist/chunk-ORPT5EQW.cjs.map +0 -1
  147. package/dist/chunk-VU65FXEG.js.map +0 -1
  148. package/dist/chunk-YVKPUSHS.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkHZCOCNIX_cjs = require('./chunk-HZCOCNIX.cjs');
3
+ var chunkL2REUAJB_cjs = require('./chunk-L2REUAJB.cjs');
4
4
  var chunkHAHNRASW_cjs = require('./chunk-HAHNRASW.cjs');
5
5
  var chunkASKXTVK5_cjs = require('./chunk-ASKXTVK5.cjs');
6
6
  var chunkBXHAPCQG_cjs = require('./chunk-BXHAPCQG.cjs');
@@ -35,7 +35,7 @@ function deserializeSchema(schema) {
35
35
  function buildRegistryFromRelations(schema) {
36
36
  const nodeKinds = /* @__PURE__ */ new Map();
37
37
  const edgeKinds = /* @__PURE__ */ new Map();
38
- return chunkHZCOCNIX_cjs.buildValidatedKindRegistry({
38
+ return chunkL2REUAJB_cjs.buildValidatedKindRegistry({
39
39
  nodeKinds,
40
40
  edgeKinds,
41
41
  ontology: schema.ontology.relations.map(
@@ -101,8 +101,8 @@ async function registerGraphTemplate(backend, params) {
101
101
  }
102
102
  );
103
103
  }
104
- const schemaDocument = chunkHZCOCNIX_cjs.serializeSchema(reconciled.graph, reconciled.version);
105
- const schemaHash = await chunkHZCOCNIX_cjs.computeSchemaHash(schemaDocument);
104
+ const schemaDocument = chunkL2REUAJB_cjs.serializeSchema(reconciled.graph, reconciled.version);
105
+ const schemaHash = await chunkL2REUAJB_cjs.computeSchemaHash(schemaDocument);
106
106
  if (schemaHash !== reconciled.hash) {
107
107
  throw new chunkASKXTVK5_cjs.ConfigurationError(
108
108
  "Reconciled schema hash does not match its graph snapshot.",
@@ -129,8 +129,8 @@ async function instantiateGraphTemplate(backend, params) {
129
129
  if (sourceVersion === void 0 || reconciledHash === void 0) {
130
130
  throw graphTemplateHandleMismatchError(params.template.id);
131
131
  }
132
- const sourceHash = await chunkHZCOCNIX_cjs.computeSchemaHash(
133
- chunkHZCOCNIX_cjs.serializeSchema(params.template.reconciled.graph, sourceVersion)
132
+ const sourceHash = await chunkL2REUAJB_cjs.computeSchemaHash(
133
+ chunkL2REUAJB_cjs.serializeSchema(params.template.reconciled.graph, sourceVersion)
134
134
  );
135
135
  if (sourceHash !== params.template.schemaHash || reconciledHash !== params.template.schemaHash) {
136
136
  throw graphTemplateHandleMismatchError(params.template.id);
@@ -139,7 +139,7 @@ async function instantiateGraphTemplate(backend, params) {
139
139
  ...params.template.reconciled.graph,
140
140
  id: params.graphId
141
141
  });
142
- const targetHash = await chunkHZCOCNIX_cjs.computeSchemaHash(chunkHZCOCNIX_cjs.serializeSchema(targetGraph, 1));
142
+ const targetHash = await chunkL2REUAJB_cjs.computeSchemaHash(chunkL2REUAJB_cjs.serializeSchema(targetGraph, 1));
143
143
  const result = await instantiate({
144
144
  templateId: params.template.id,
145
145
  templateSchemaHash: params.template.schemaHash,
@@ -192,5 +192,5 @@ exports.deserializeSchema = deserializeSchema;
192
192
  exports.instantiateGraph = instantiateGraph;
193
193
  exports.instantiateGraphTemplate = instantiateGraphTemplate;
194
194
  exports.registerGraphTemplate = registerGraphTemplate;
195
- //# sourceMappingURL=chunk-GFYCLCGU.cjs.map
196
- //# sourceMappingURL=chunk-GFYCLCGU.cjs.map
195
+ //# sourceMappingURL=chunk-KM3CLHDB.cjs.map
196
+ //# sourceMappingURL=chunk-KM3CLHDB.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schema/deserializer.ts","../src/schema/graph-templates.ts"],"names":["hasOwnKey","buildValidatedKindRegistry","ConfigurationError","resolveGraphVectorSlots","serializeSchema","computeSchemaHash"],"mappings":"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","file":"chunk-GFYCLCGU.cjs","sourcesContent":["/**\n * Schema deserializer for loading stored schemas.\n *\n * Reconstructs runtime objects from SerializedSchema.\n * Note: Zod schemas cannot be fully reconstructed from JSON Schema,\n * so this provides access to the serialized data for introspection.\n */\nimport { type AnyEdgeType, type NodeType } from \"../core/types\";\nimport { type NamedOntologyRelation } from \"../ontology/validation\";\nimport { buildValidatedKindRegistry } from \"../registry/build-validated\";\nimport type { KindRegistry } from \"../registry/kind-registry\";\nimport { type EdgeEndpointKinds } from \"../registry/validate-implies\";\nimport { hasOwnKey } from \"../utils/object\";\nimport {\n type SerializedClosures,\n type SerializedEdgeDef,\n type SerializedMetaEdge,\n type SerializedNodeDef,\n type SerializedOntologyRelation,\n type SerializedSchema,\n} from \"./types\";\n\n// ============================================================\n// Deserialized Schema\n// ============================================================\n\n/**\n * A deserialized schema provides read-only access to schema metadata.\n *\n * Note: Unlike the original GraphDef, this does not include Zod schemas\n * since those cannot be reconstructed from JSON Schema. Use this for\n * introspection and metadata access only.\n */\nexport type DeserializedSchema = Readonly<{\n graphId: string;\n version: number;\n generatedAt: string;\n\n /** Get node definition by name */\n getNode: (name: string) => SerializedNodeDef | undefined;\n\n /** Get all node names */\n getNodeNames: () => readonly string[];\n\n /** Get edge definition by name */\n getEdge: (name: string) => SerializedEdgeDef | undefined;\n\n /** Get all edge names */\n getEdgeNames: () => readonly string[];\n\n /** Get meta-edge definition by name */\n getMetaEdge: (name: string) => SerializedMetaEdge | undefined;\n\n /** Get all meta-edge names */\n getMetaEdgeNames: () => readonly string[];\n\n /** Get all ontology relations */\n getRelations: () => readonly SerializedOntologyRelation[];\n\n /** Get precomputed closures */\n getClosures: () => SerializedClosures;\n\n /** Get graph defaults */\n getDefaults: () => SerializedSchema[\"defaults\"];\n\n /** Get the durable TypeGraph Identity Profile configuration. */\n getIdentity: () => SerializedSchema[\"identity\"];\n\n /** Get the raw serialized schema */\n getRaw: () => SerializedSchema;\n\n /** Build a validated KindRegistry by recomputing closures from relations */\n buildRegistry: () => KindRegistry;\n}>;\n\n// ============================================================\n// Deserialization\n// ============================================================\n\n/**\n * Deserializes a SerializedSchema into a DeserializedSchema.\n *\n * @param schema - The serialized schema to deserialize\n * @returns A deserialized schema with accessor methods\n */\nexport function deserializeSchema(\n schema: SerializedSchema,\n): DeserializedSchema {\n const nodeNames = Object.keys(schema.nodes);\n const edgeNames = Object.keys(schema.edges);\n const metaEdgeNames = Object.keys(schema.ontology.metaEdges);\n\n return {\n graphId: schema.graphId,\n version: schema.version,\n generatedAt: schema.generatedAt,\n\n // Own-key reads, for the same reason {@link buildEdgeEndpointKinds} below\n // uses a `Map`: `schema` is parsed out of a stored JSON document and the\n // caller supplies the name, so a raw read hands back an `Object.prototype`\n // member typed as a definition for any name no kind is registered under.\n getNode: (name) =>\n hasOwnKey(schema.nodes, name) ? schema.nodes[name] : undefined,\n getNodeNames: () => nodeNames,\n\n getEdge: (name) =>\n hasOwnKey(schema.edges, name) ? schema.edges[name] : undefined,\n getEdgeNames: () => edgeNames,\n\n getMetaEdge: (name) =>\n hasOwnKey(schema.ontology.metaEdges, name) ?\n schema.ontology.metaEdges[name]\n : undefined,\n getMetaEdgeNames: () => metaEdgeNames,\n\n getRelations: () => schema.ontology.relations,\n getClosures: () => schema.ontology.closures,\n\n getDefaults: () => schema.defaults,\n getIdentity: () => schema.identity,\n getRaw: () => schema,\n\n buildRegistry: () => buildRegistryFromRelations(schema),\n };\n}\n\n// ============================================================\n// Registry Building\n// ============================================================\n\n/**\n * Builds a KindRegistry from serialized relations.\n *\n * Persisted closures are a legacy inspection artifact. Relations are validated\n * and closures are recomputed so old schemas gain current hardening rules.\n */\nfunction buildRegistryFromRelations(schema: SerializedSchema): KindRegistry {\n // Build empty node/edge kind maps (we don't have the actual Zod schemas)\n const nodeKinds = new Map<string, NodeType>();\n const edgeKinds = new Map<string, AnyEdgeType>();\n return buildValidatedKindRegistry({\n nodeKinds,\n edgeKinds,\n ontology: schema.ontology.relations.map(\n (relation): NamedOntologyRelation => ({\n metaEdge: relation.metaEdge,\n from: relation.from,\n to: relation.to,\n }),\n ),\n edgeEndpoints: buildEdgeEndpointKinds(schema.edges),\n ...(schema.identity === undefined ? {} : { identity: schema.identity }),\n });\n}\n\n/**\n * Maps each edge kind's serialized definition to its domain/range kind\n * names, for `validateImpliesEndpointCompatibility`. A `Map` (rather than\n * the plain `schema.edges` object) so a lookup for an edge kind literally\n * named \"toString\" or another `Object.prototype` member can't resolve to\n * an inherited member instead of `undefined`.\n */\nfunction buildEdgeEndpointKinds(\n edges: Record<string, SerializedEdgeDef>,\n): ReadonlyMap<string, EdgeEndpointKinds> {\n const result = new Map<string, EdgeEndpointKinds>();\n for (const [kind, def] of Object.entries(edges)) {\n const pairs: { from: string; to: string }[] = [];\n if (def.targetKindsBySource === undefined) {\n for (const fromKind of def.fromKinds) {\n for (const toKind of def.toKinds) {\n pairs.push({ from: fromKind, to: toKind });\n }\n }\n } else {\n for (const [sourceKind, targetKinds] of Object.entries(\n def.targetKindsBySource,\n )) {\n for (const targetKind of targetKinds) {\n pairs.push({ from: sourceKind, to: targetKind });\n }\n }\n }\n result.set(kind, {\n from: def.fromKinds,\n to: def.toKinds,\n pairs,\n });\n }\n return result;\n}\n","import type { GraphBackend, SchemaVersionRow } from \"../backend/types\";\nimport { type GraphDef } from \"../core/define-graph\";\nimport { resolveGraphVectorSlots } from \"../core/embedding\";\nimport { ConfigurationError } from \"../errors\";\nimport { type ReconciledSchema } from \"../store/store\";\nimport { computeSchemaHash, serializeSchema } from \"./serializer\";\n\n/** A locally held handle for a durable server-side graph template. */\nexport type GraphTemplate<G extends GraphDef> = Readonly<{\n id: string;\n reconciled: ReconciledSchema<G>;\n schemaHash: string;\n}>;\n\nexport type InstantiateGraphTemplateResult<G extends GraphDef> = Readonly<{\n status: \"ready\";\n reconciled: ReconciledSchema<G>;\n schema: SchemaVersionRow;\n}>;\n\n/**\n * Registers the fully materialized shape of a verified store as a durable\n * template. The original schema version is retained only as snapshot\n * provenance: every instantiated graph starts at v1 with that final shape.\n */\nexport async function registerGraphTemplate<G extends GraphDef>(\n backend: GraphBackend,\n params: Readonly<{ templateId: string; reconciled: ReconciledSchema<G> }>,\n): Promise<GraphTemplate<G>> {\n const register = backend.registerGraphTemplate;\n if (register === undefined) throw graphTemplatesUnsupportedError(backend);\n await backend.assertBaseSchemaCurrent?.();\n const { reconciled } = params;\n if (reconciled.version === undefined || reconciled.hash === undefined) {\n throw new ConfigurationError(\n \"A graph template requires a reconciled schema from a managed or verified Store.\",\n { code: \"GRAPH_TEMPLATE_REQUIRES_RECONCILED_SCHEMA\" },\n );\n }\n if (\n resolveGraphVectorSlots(reconciled.graph).length > 0 &&\n backend.capabilities.vector?.supported === true\n ) {\n throw new ConfigurationError(\n \"Graph templates do not support embedding fields because vector storage is graph-scoped and cannot be instantiated schema-only.\",\n {\n code: \"GRAPH_TEMPLATE_VECTOR_UNSUPPORTED\",\n graphId: reconciled.graph.id,\n },\n {\n suggestion:\n \"Provision the graph through createStoreWithSchema until template instantiation can atomically materialize vector contributions.\",\n },\n );\n }\n const schemaDocument = serializeSchema(reconciled.graph, reconciled.version);\n const schemaHash = await computeSchemaHash(schemaDocument);\n if (schemaHash !== reconciled.hash) {\n throw new ConfigurationError(\n \"Reconciled schema hash does not match its graph snapshot.\",\n { code: \"GRAPH_TEMPLATE_RECONCILED_HASH_MISMATCH\" },\n );\n }\n await register({\n templateId: params.templateId,\n schemaHash,\n schemaDoc: schemaDocument,\n });\n return Object.freeze({\n id: params.templateId,\n reconciled,\n schemaHash,\n });\n}\n\n/**\n * Instantiates the template's final graph shape as target schema v1. Only the\n * target hash crosses the wire; the durable source document stays in the\n * backend template registry and is rebound to `graphId` by one SQL statement.\n */\nexport async function instantiateGraphTemplate<G extends GraphDef>(\n backend: GraphBackend,\n params: Readonly<{ template: GraphTemplate<G>; graphId: string }>,\n): Promise<InstantiateGraphTemplateResult<G>> {\n const instantiate = backend.instantiateGraphTemplate;\n if (instantiate === undefined) throw graphTemplatesUnsupportedError(backend);\n await backend.assertBaseSchemaCurrent?.();\n const sourceVersion = params.template.reconciled.version;\n const reconciledHash = params.template.reconciled.hash;\n if (sourceVersion === undefined || reconciledHash === undefined) {\n throw graphTemplateHandleMismatchError(params.template.id);\n }\n const sourceHash = await computeSchemaHash(\n serializeSchema(params.template.reconciled.graph, sourceVersion),\n );\n if (\n sourceHash !== params.template.schemaHash ||\n reconciledHash !== params.template.schemaHash\n ) {\n throw graphTemplateHandleMismatchError(params.template.id);\n }\n const targetGraph: G = Object.freeze({\n ...params.template.reconciled.graph,\n id: params.graphId,\n });\n const targetHash = await computeSchemaHash(serializeSchema(targetGraph, 1));\n const result = await instantiate({\n templateId: params.template.id,\n templateSchemaHash: params.template.schemaHash,\n graphId: params.graphId,\n schemaHash: targetHash,\n });\n if (result.status === \"refused\") {\n throw new ConfigurationError(\n `Graph template instantiation was refused for graph \"${params.graphId}\". The template may be absent, or the graph already has a different schema.`,\n {\n code: \"GRAPH_TEMPLATE_INSTANTIATION_REFUSED\",\n graphId: params.graphId,\n templateId: params.template.id,\n },\n );\n }\n if (\n result.row.graph_id !== params.graphId ||\n result.row.version !== 1 ||\n result.row.schema_hash !== targetHash\n ) {\n throw new ConfigurationError(\n \"Graph template backend returned a schema row that does not match the requested target.\",\n { code: \"GRAPH_TEMPLATE_INVALID_RESULT\", graphId: params.graphId },\n );\n }\n return Object.freeze({\n status: \"ready\",\n reconciled: Object.freeze({\n graph: targetGraph,\n version: result.row.version,\n hash: result.row.schema_hash,\n }),\n schema: result.row,\n });\n}\n\nfunction graphTemplateHandleMismatchError(\n templateId: string,\n): ConfigurationError {\n return new ConfigurationError(\n `Graph template handle \"${templateId}\" does not match its reconciled schema snapshot.`,\n { code: \"GRAPH_TEMPLATE_HANDLE_MISMATCH\", templateId },\n );\n}\n\n/** Short public name for {@link instantiateGraphTemplate}. */\nexport function instantiateGraph<G extends GraphDef>(\n backend: GraphBackend,\n params: Readonly<{ template: GraphTemplate<G>; graphId: string }>,\n): Promise<InstantiateGraphTemplateResult<G>> {\n return instantiateGraphTemplate(backend, params);\n}\n\nfunction graphTemplatesUnsupportedError(\n backend: GraphBackend,\n): ConfigurationError {\n return new ConfigurationError(\n `The ${backend.dialect} backend does not support durable graph templates.`,\n { code: \"GRAPH_TEMPLATES_UNSUPPORTED\", dialect: backend.dialect },\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/schema/deserializer.ts","../src/schema/graph-templates.ts"],"names":["hasOwnKey","buildValidatedKindRegistry","ConfigurationError","resolveGraphVectorSlots","serializeSchema","computeSchemaHash"],"mappings":"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","file":"chunk-KM3CLHDB.cjs","sourcesContent":["/**\n * Schema deserializer for loading stored schemas.\n *\n * Reconstructs runtime objects from SerializedSchema.\n * Note: Zod schemas cannot be fully reconstructed from JSON Schema,\n * so this provides access to the serialized data for introspection.\n */\nimport { type AnyEdgeType, type NodeType } from \"../core/types\";\nimport { type NamedOntologyRelation } from \"../ontology/validation\";\nimport { buildValidatedKindRegistry } from \"../registry/build-validated\";\nimport type { KindRegistry } from \"../registry/kind-registry\";\nimport { type EdgeEndpointKinds } from \"../registry/validate-implies\";\nimport { hasOwnKey } from \"../utils/object\";\nimport {\n type SerializedClosures,\n type SerializedEdgeDef,\n type SerializedMetaEdge,\n type SerializedNodeDef,\n type SerializedOntologyRelation,\n type SerializedSchema,\n} from \"./types\";\n\n// ============================================================\n// Deserialized Schema\n// ============================================================\n\n/**\n * A deserialized schema provides read-only access to schema metadata.\n *\n * Note: Unlike the original GraphDef, this does not include Zod schemas\n * since those cannot be reconstructed from JSON Schema. Use this for\n * introspection and metadata access only.\n */\nexport type DeserializedSchema = Readonly<{\n graphId: string;\n version: number;\n generatedAt: string;\n\n /** Get node definition by name */\n getNode: (name: string) => SerializedNodeDef | undefined;\n\n /** Get all node names */\n getNodeNames: () => readonly string[];\n\n /** Get edge definition by name */\n getEdge: (name: string) => SerializedEdgeDef | undefined;\n\n /** Get all edge names */\n getEdgeNames: () => readonly string[];\n\n /** Get meta-edge definition by name */\n getMetaEdge: (name: string) => SerializedMetaEdge | undefined;\n\n /** Get all meta-edge names */\n getMetaEdgeNames: () => readonly string[];\n\n /** Get all ontology relations */\n getRelations: () => readonly SerializedOntologyRelation[];\n\n /** Get precomputed closures */\n getClosures: () => SerializedClosures;\n\n /** Get graph defaults */\n getDefaults: () => SerializedSchema[\"defaults\"];\n\n /** Get the durable TypeGraph Identity Profile configuration. */\n getIdentity: () => SerializedSchema[\"identity\"];\n\n /** Get the raw serialized schema */\n getRaw: () => SerializedSchema;\n\n /** Build a validated KindRegistry by recomputing closures from relations */\n buildRegistry: () => KindRegistry;\n}>;\n\n// ============================================================\n// Deserialization\n// ============================================================\n\n/**\n * Deserializes a SerializedSchema into a DeserializedSchema.\n *\n * @param schema - The serialized schema to deserialize\n * @returns A deserialized schema with accessor methods\n */\nexport function deserializeSchema(\n schema: SerializedSchema,\n): DeserializedSchema {\n const nodeNames = Object.keys(schema.nodes);\n const edgeNames = Object.keys(schema.edges);\n const metaEdgeNames = Object.keys(schema.ontology.metaEdges);\n\n return {\n graphId: schema.graphId,\n version: schema.version,\n generatedAt: schema.generatedAt,\n\n // Own-key reads, for the same reason {@link buildEdgeEndpointKinds} below\n // uses a `Map`: `schema` is parsed out of a stored JSON document and the\n // caller supplies the name, so a raw read hands back an `Object.prototype`\n // member typed as a definition for any name no kind is registered under.\n getNode: (name) =>\n hasOwnKey(schema.nodes, name) ? schema.nodes[name] : undefined,\n getNodeNames: () => nodeNames,\n\n getEdge: (name) =>\n hasOwnKey(schema.edges, name) ? schema.edges[name] : undefined,\n getEdgeNames: () => edgeNames,\n\n getMetaEdge: (name) =>\n hasOwnKey(schema.ontology.metaEdges, name) ?\n schema.ontology.metaEdges[name]\n : undefined,\n getMetaEdgeNames: () => metaEdgeNames,\n\n getRelations: () => schema.ontology.relations,\n getClosures: () => schema.ontology.closures,\n\n getDefaults: () => schema.defaults,\n getIdentity: () => schema.identity,\n getRaw: () => schema,\n\n buildRegistry: () => buildRegistryFromRelations(schema),\n };\n}\n\n// ============================================================\n// Registry Building\n// ============================================================\n\n/**\n * Builds a KindRegistry from serialized relations.\n *\n * Persisted closures are a legacy inspection artifact. Relations are validated\n * and closures are recomputed so old schemas gain current hardening rules.\n */\nfunction buildRegistryFromRelations(schema: SerializedSchema): KindRegistry {\n // Build empty node/edge kind maps (we don't have the actual Zod schemas)\n const nodeKinds = new Map<string, NodeType>();\n const edgeKinds = new Map<string, AnyEdgeType>();\n return buildValidatedKindRegistry({\n nodeKinds,\n edgeKinds,\n ontology: schema.ontology.relations.map(\n (relation): NamedOntologyRelation => ({\n metaEdge: relation.metaEdge,\n from: relation.from,\n to: relation.to,\n }),\n ),\n edgeEndpoints: buildEdgeEndpointKinds(schema.edges),\n ...(schema.identity === undefined ? {} : { identity: schema.identity }),\n });\n}\n\n/**\n * Maps each edge kind's serialized definition to its domain/range kind\n * names, for `validateImpliesEndpointCompatibility`. A `Map` (rather than\n * the plain `schema.edges` object) so a lookup for an edge kind literally\n * named \"toString\" or another `Object.prototype` member can't resolve to\n * an inherited member instead of `undefined`.\n */\nfunction buildEdgeEndpointKinds(\n edges: Record<string, SerializedEdgeDef>,\n): ReadonlyMap<string, EdgeEndpointKinds> {\n const result = new Map<string, EdgeEndpointKinds>();\n for (const [kind, def] of Object.entries(edges)) {\n const pairs: { from: string; to: string }[] = [];\n if (def.targetKindsBySource === undefined) {\n for (const fromKind of def.fromKinds) {\n for (const toKind of def.toKinds) {\n pairs.push({ from: fromKind, to: toKind });\n }\n }\n } else {\n for (const [sourceKind, targetKinds] of Object.entries(\n def.targetKindsBySource,\n )) {\n for (const targetKind of targetKinds) {\n pairs.push({ from: sourceKind, to: targetKind });\n }\n }\n }\n result.set(kind, {\n from: def.fromKinds,\n to: def.toKinds,\n pairs,\n });\n }\n return result;\n}\n","import type { GraphBackend, SchemaVersionRow } from \"../backend/types\";\nimport { type GraphDef } from \"../core/define-graph\";\nimport { resolveGraphVectorSlots } from \"../core/embedding\";\nimport { ConfigurationError } from \"../errors\";\nimport { type ReconciledSchema } from \"../store/store\";\nimport { computeSchemaHash, serializeSchema } from \"./serializer\";\n\n/** A locally held handle for a durable server-side graph template. */\nexport type GraphTemplate<G extends GraphDef> = Readonly<{\n id: string;\n reconciled: ReconciledSchema<G>;\n schemaHash: string;\n}>;\n\nexport type InstantiateGraphTemplateResult<G extends GraphDef> = Readonly<{\n status: \"ready\";\n reconciled: ReconciledSchema<G>;\n schema: SchemaVersionRow;\n}>;\n\n/**\n * Registers the fully materialized shape of a verified store as a durable\n * template. The original schema version is retained only as snapshot\n * provenance: every instantiated graph starts at v1 with that final shape.\n */\nexport async function registerGraphTemplate<G extends GraphDef>(\n backend: GraphBackend,\n params: Readonly<{ templateId: string; reconciled: ReconciledSchema<G> }>,\n): Promise<GraphTemplate<G>> {\n const register = backend.registerGraphTemplate;\n if (register === undefined) throw graphTemplatesUnsupportedError(backend);\n await backend.assertBaseSchemaCurrent?.();\n const { reconciled } = params;\n if (reconciled.version === undefined || reconciled.hash === undefined) {\n throw new ConfigurationError(\n \"A graph template requires a reconciled schema from a managed or verified Store.\",\n { code: \"GRAPH_TEMPLATE_REQUIRES_RECONCILED_SCHEMA\" },\n );\n }\n if (\n resolveGraphVectorSlots(reconciled.graph).length > 0 &&\n backend.capabilities.vector?.supported === true\n ) {\n throw new ConfigurationError(\n \"Graph templates do not support embedding fields because vector storage is graph-scoped and cannot be instantiated schema-only.\",\n {\n code: \"GRAPH_TEMPLATE_VECTOR_UNSUPPORTED\",\n graphId: reconciled.graph.id,\n },\n {\n suggestion:\n \"Provision the graph through createStoreWithSchema until template instantiation can atomically materialize vector contributions.\",\n },\n );\n }\n const schemaDocument = serializeSchema(reconciled.graph, reconciled.version);\n const schemaHash = await computeSchemaHash(schemaDocument);\n if (schemaHash !== reconciled.hash) {\n throw new ConfigurationError(\n \"Reconciled schema hash does not match its graph snapshot.\",\n { code: \"GRAPH_TEMPLATE_RECONCILED_HASH_MISMATCH\" },\n );\n }\n await register({\n templateId: params.templateId,\n schemaHash,\n schemaDoc: schemaDocument,\n });\n return Object.freeze({\n id: params.templateId,\n reconciled,\n schemaHash,\n });\n}\n\n/**\n * Instantiates the template's final graph shape as target schema v1. Only the\n * target hash crosses the wire; the durable source document stays in the\n * backend template registry and is rebound to `graphId` by one SQL statement.\n */\nexport async function instantiateGraphTemplate<G extends GraphDef>(\n backend: GraphBackend,\n params: Readonly<{ template: GraphTemplate<G>; graphId: string }>,\n): Promise<InstantiateGraphTemplateResult<G>> {\n const instantiate = backend.instantiateGraphTemplate;\n if (instantiate === undefined) throw graphTemplatesUnsupportedError(backend);\n await backend.assertBaseSchemaCurrent?.();\n const sourceVersion = params.template.reconciled.version;\n const reconciledHash = params.template.reconciled.hash;\n if (sourceVersion === undefined || reconciledHash === undefined) {\n throw graphTemplateHandleMismatchError(params.template.id);\n }\n const sourceHash = await computeSchemaHash(\n serializeSchema(params.template.reconciled.graph, sourceVersion),\n );\n if (\n sourceHash !== params.template.schemaHash ||\n reconciledHash !== params.template.schemaHash\n ) {\n throw graphTemplateHandleMismatchError(params.template.id);\n }\n const targetGraph: G = Object.freeze({\n ...params.template.reconciled.graph,\n id: params.graphId,\n });\n const targetHash = await computeSchemaHash(serializeSchema(targetGraph, 1));\n const result = await instantiate({\n templateId: params.template.id,\n templateSchemaHash: params.template.schemaHash,\n graphId: params.graphId,\n schemaHash: targetHash,\n });\n if (result.status === \"refused\") {\n throw new ConfigurationError(\n `Graph template instantiation was refused for graph \"${params.graphId}\". The template may be absent, or the graph already has a different schema.`,\n {\n code: \"GRAPH_TEMPLATE_INSTANTIATION_REFUSED\",\n graphId: params.graphId,\n templateId: params.template.id,\n },\n );\n }\n if (\n result.row.graph_id !== params.graphId ||\n result.row.version !== 1 ||\n result.row.schema_hash !== targetHash\n ) {\n throw new ConfigurationError(\n \"Graph template backend returned a schema row that does not match the requested target.\",\n { code: \"GRAPH_TEMPLATE_INVALID_RESULT\", graphId: params.graphId },\n );\n }\n return Object.freeze({\n status: \"ready\",\n reconciled: Object.freeze({\n graph: targetGraph,\n version: result.row.version,\n hash: result.row.schema_hash,\n }),\n schema: result.row,\n });\n}\n\nfunction graphTemplateHandleMismatchError(\n templateId: string,\n): ConfigurationError {\n return new ConfigurationError(\n `Graph template handle \"${templateId}\" does not match its reconciled schema snapshot.`,\n { code: \"GRAPH_TEMPLATE_HANDLE_MISMATCH\", templateId },\n );\n}\n\n/** Short public name for {@link instantiateGraphTemplate}. */\nexport function instantiateGraph<G extends GraphDef>(\n backend: GraphBackend,\n params: Readonly<{ template: GraphTemplate<G>; graphId: string }>,\n): Promise<InstantiateGraphTemplateResult<G>> {\n return instantiateGraphTemplate(backend, params);\n}\n\nfunction graphTemplatesUnsupportedError(\n backend: GraphBackend,\n): ConfigurationError {\n return new ConfigurationError(\n `The ${backend.dialect} backend does not support durable graph templates.`,\n { code: \"GRAPH_TEMPLATES_UNSUPPORTED\", dialect: backend.dialect },\n );\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { supportsAtomicBatch } from './chunk-YVKPUSHS.js';
1
+ import { supportsAtomicBatch } from './chunk-75KH6Y2W.js';
2
2
  import { ConfigurationError, CompilerInvariantError } from './chunk-ADOABE3R.js';
3
3
 
4
4
  // src/backend/capabilities/atomic-sql-program.ts
@@ -560,5 +560,5 @@ function carryAtomicMutationSessionRegistration(base, derived) {
560
560
  }
561
561
 
562
562
  export { ATOMIC_EDGE_MUTATION_VARIANT_BY_KIND, ATOMIC_MUTATION_PROGRAM_VARIANTS, AtomicEdgeBatchCardinalityRefusalError, AtomicEdgeBatchEndpointRefusalError, AtomicEdgeConvergenceTombstoneRefusalError, AtomicEdgeDeleteIdentityRefusalError, AtomicNodeDeleteRestrictedRefusalError, atomicNodeClaimInputCost, carryAtomicMutationSessionRegistration, createAtomicSqlProgramExecutor, hasAtomicMutationProgramRegistration, hasAtomicSqlProgramRegistration, reachableAtomicMutationProgramVariants, registerAtomicMutationPrograms, registerAtomicSqlProgram, resolveAtomicMutationPrograms, resolveRegisteredAtomicSqlBatchExecutor, supportsAtomicNodeClaimFamily, supportsAtomicNodeClaims, supportsAtomicNodeProjections, withAtomicMutationProgramDispatchObserver };
563
- //# sourceMappingURL=chunk-SLNH62T3.js.map
564
- //# sourceMappingURL=chunk-SLNH62T3.js.map
563
+ //# sourceMappingURL=chunk-KQYUKOGX.js.map
564
+ //# sourceMappingURL=chunk-KQYUKOGX.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/backend/capabilities/atomic-sql-program.ts","../src/backend/capabilities/atomic-mutation-program.ts"],"names":[],"mappings":"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","file":"chunk-SLNH62T3.js","sourcesContent":["/**\n * Internal execution boundary for a closed, precompiled SQL write program.\n *\n * This is deliberately an out-of-band exact-resource capability. An author\n * registers either a root that owns the atomic boundary or an already-open\n * transaction session. Derived backends and other transaction objects do not\n * inherit the registration. A static batch is therefore never forwarded\n * through a wrapper whose behavior has not been audited for the program\n * contract.\n */\nimport { CompilerInvariantError, ConfigurationError } from \"../../errors\";\nimport type { GraphBackend, TransactionBackend } from \"../types\";\n\nexport type AtomicSqlRow = Readonly<Record<string, unknown>>;\n\n/** A transport-ready statement in the portable atomic-program protocol. */\nexport type CompiledAtomicSqlStatement = Readonly<{\n params: readonly unknown[];\n sql: string;\n}>;\n\n/** A native all-or-nothing dispatch for a closed statement sequence. */\nexport type AtomicSqlBatchExecutor = <TRow>(\n statements: readonly CompiledAtomicSqlStatement[],\n) => Promise<readonly (readonly TRow[])[]>;\n\nexport type AtomicSqlProgramAdapter = Readonly<{\n executeAtomicBatch?: AtomicSqlBatchExecutor;\n}>;\n\n/** The transport forms accepted by an atomic program author. */\nexport type AtomicSqlProgramRegistration =\n AtomicSqlBatchExecutor | AtomicSqlProgramAdapter;\n\ntype AtomicSqlResultCardinality = \"none\" | \"one\" | \"many\";\n\n/** One closed statement and the typed decoder for its result slot. */\ntype AtomicSqlProgramSlot<TResult> = Readonly<{\n statement: CompiledAtomicSqlStatement;\n cardinality: AtomicSqlResultCardinality;\n decode: (rows: readonly AtomicSqlRow[]) => TResult;\n}>;\n\n/**\n * A statically closed program. Every slot uses the same result union so a\n * heterogeneous node/edge program can still preserve a typed result at the\n * program boundary without introducing `any` into the erased executor.\n */\nexport type AtomicSqlProgram<TRowResult, TResult> = Readonly<{\n slots: readonly AtomicSqlProgramSlot<TRowResult>[];\n assemble: (results: readonly TRowResult[]) => TResult;\n}>;\n\nexport type AtomicSqlProgramExecutor = Readonly<{\n execute: <TRowResult, TResult>(\n program: AtomicSqlProgram<TRowResult, TResult>,\n ) => Promise<TResult>;\n}>;\n\ntype RegisteredAtomicSqlProgram = Readonly<{\n executeAtomicBatch: AtomicSqlBatchExecutor;\n executor: AtomicSqlProgramExecutor;\n}>;\n\nconst ATOMIC_SQL_PROGRAM_EXECUTORS = new WeakMap<\n object,\n RegisteredAtomicSqlProgram\n>();\n\nfunction assertResultCardinality(\n slot: Readonly<{ cardinality: AtomicSqlResultCardinality }>,\n index: number,\n rows: readonly AtomicSqlRow[],\n): void {\n const valid =\n slot.cardinality === \"none\" ? rows.length === 0\n : slot.cardinality === \"one\" ? rows.length === 1\n : true;\n if (valid) return;\n throw new CompilerInvariantError(\n `Atomic SQL program slot ${index} returned ${rows.length} rows, ` +\n `expected ${slot.cardinality}.`,\n {\n slot: index,\n cardinality: slot.cardinality,\n rowCount: rows.length,\n },\n );\n}\n\nfunction assertResultSlotCount(\n expected: number,\n actual: readonly (readonly AtomicSqlRow[])[],\n): void {\n if (expected === actual.length) return;\n throw new CompilerInvariantError(\n `Atomic SQL program returned ${actual.length} result slots, ` +\n `expected ${expected}.`,\n { expected, actual: actual.length },\n );\n}\n\nfunction isAtomicSqlResultSlots(\n value: unknown,\n): value is readonly (readonly AtomicSqlRow[])[] {\n return Array.isArray(value) && value.every((slot) => Array.isArray(slot));\n}\n\n/** Executes the one canonical closed-program protocol. */\nasync function executeAtomicSqlProgram<TRowResult, TResult>(\n executeAtomicBatch: AtomicSqlBatchExecutor,\n program: AtomicSqlProgram<TRowResult, TResult>,\n): Promise<TResult> {\n if (program.slots.length === 0) return program.assemble([]);\n\n const statements = program.slots.map((slot) => slot.statement);\n const result: unknown = await executeAtomicBatch<AtomicSqlRow>(statements);\n if (!isAtomicSqlResultSlots(result)) {\n throw new CompilerInvariantError(\n \"Atomic SQL program executor returned malformed result slots.\",\n { resultType: typeof result },\n );\n }\n const rows = result;\n\n assertResultSlotCount(program.slots.length, rows);\n const decoded = program.slots.map((slot, index) => {\n const slotRows = rows[index];\n if (slotRows === undefined) {\n throw new CompilerInvariantError(\n `Atomic SQL program result slot ${index} is missing.`,\n { slot: index },\n );\n }\n assertResultCardinality(slot, index, slotRows);\n return slot.decode(slotRows);\n });\n\n return program.assemble(decoded);\n}\n\nfunction createExecutor(\n executeAtomicBatch: AtomicSqlBatchExecutor,\n): AtomicSqlProgramExecutor {\n return {\n async execute<TRowResult, TResult>(\n program: AtomicSqlProgram<TRowResult, TResult>,\n ): Promise<TResult> {\n return executeAtomicSqlProgram(executeAtomicBatch, program);\n },\n };\n}\n\n/** @internal Creates the executor shared by lowering and root registration. */\nexport function createAtomicSqlProgramExecutor(\n adapter: AtomicSqlProgramAdapter,\n): AtomicSqlProgramExecutor | undefined {\n const executeAtomicBatch = adapter.executeAtomicBatch;\n return typeof executeAtomicBatch === \"function\" ?\n createExecutor(executeAtomicBatch)\n : undefined;\n}\n\nfunction normalizeAtomicSqlProgramRegistration(\n registration: AtomicSqlProgramRegistration,\n): RegisteredAtomicSqlProgram | undefined {\n const adapter: AtomicSqlProgramAdapter =\n typeof registration === \"function\" ?\n { executeAtomicBatch: registration }\n : registration;\n const executeAtomicBatch = adapter.executeAtomicBatch;\n const executor = createAtomicSqlProgramExecutor(adapter);\n return executeAtomicBatch === undefined || executor === undefined ?\n undefined\n : { executeAtomicBatch, executor };\n}\n\nfunction throwAtomicSqlProgramRegistrationMismatch(\n target: GraphBackend | TransactionBackend,\n registration: RegisteredAtomicSqlProgram | undefined,\n): never {\n const declaration = target.capabilities.execution.atomicBatch;\n throw new ConfigurationError(\n \"An atomic SQL program requires exact-session atomic-batch authority and a usable batch executor.\",\n {\n code: \"ATOMIC_SQL_PROGRAM_REGISTRATION_MISMATCH\",\n declared: declaration,\n registered: registration !== undefined,\n },\n {\n suggestion:\n 'Declare `atomicBatch: \"root\"` on an exact root executor or `\"session\"` on an already-open transaction session, then register that exact object.',\n },\n );\n}\n\nfunction declaredCommandSession(target: object): unknown {\n const commands = Reflect.get(target, \"commands\") as unknown;\n if (typeof commands !== \"object\" || commands === null) return;\n return Reflect.get(commands, \"session\") as unknown;\n}\n\n/**\n * Registers an atomic SQL program executor for one exact backend resource.\n *\n * The declaration and executable transport are checked together so a backend\n * cannot claim atomic execution while omitting the executor, nor expose\n * an executor without declaring the session on which it is valid. The\n * registration is keyed by object identity; derived backends and other\n * transaction sessions therefore do not resolve this program.\n */\nexport function registerAtomicSqlProgram<\n T extends GraphBackend | TransactionBackend,\n>(target: T, registration: AtomicSqlProgramRegistration): T {\n if (ATOMIC_SQL_PROGRAM_EXECUTORS.has(target)) {\n throw new ConfigurationError(\n \"An atomic SQL program is already registered for this exact backend resource.\",\n { code: \"ATOMIC_SQL_PROGRAM_ALREADY_REGISTERED\" },\n );\n }\n const executor = normalizeAtomicSqlProgramRegistration(registration);\n const declaration = target.capabilities.execution.atomicBatch;\n const declaredSession = declaredCommandSession(target);\n const sessionMatches =\n (declaration === \"root\" && declaredSession === \"root\") ||\n (declaration === \"session\" && declaredSession === \"transaction\");\n if (declaration === \"none\" || !sessionMatches || executor === undefined) {\n throwAtomicSqlProgramRegistrationMismatch(target, executor);\n }\n ATOMIC_SQL_PROGRAM_EXECUTORS.set(target, executor);\n return target;\n}\n\n/**\n * Resolves the static program executor for an exact registered resource.\n * Other transaction sessions and derived/projected backends return `undefined`.\n */\nexport function resolveAtomicSqlProgramExecutor(\n target: GraphBackend | TransactionBackend,\n): AtomicSqlProgramExecutor | undefined {\n return ATOMIC_SQL_PROGRAM_EXECUTORS.get(target)?.executor;\n}\n\n/** @internal Resolves the exact batch function registered on one resource. */\nexport function resolveRegisteredAtomicSqlBatchExecutor(\n target: GraphBackend | TransactionBackend,\n): AtomicSqlBatchExecutor | undefined {\n return ATOMIC_SQL_PROGRAM_EXECUTORS.get(target)?.executeAtomicBatch;\n}\n\n/** Returns whether this exact object owns a registered atomic SQL transport. */\nexport function hasAtomicSqlProgramRegistration(\n target: GraphBackend | TransactionBackend,\n): boolean {\n return ATOMIC_SQL_PROGRAM_EXECUTORS.has(target);\n}\n","/**\n * Exact-resource execution profile for closed semantic mutation programs.\n *\n * The transport-level atomic SQL executor answers only \"can this exact resource\n * submit a closed statement sequence atomically?\" This profile is the next\n * layer up: it names the TypeGraph mutations the backend can lower onto that\n * transport. Keeping every mutation family in one exact-resource registration\n * prevents each new operation from inventing another provenance WeakMap.\n */\nimport { ConfigurationError } from \"../../errors\";\nimport type {\n ClaimEdgeCardinalityParams,\n EdgeConvergenceMatch,\n EdgeRow,\n GraphBackend,\n InsertEdgeParams,\n InsertNodeParams,\n NodeInsertClaim,\n NodeInsertProjection,\n NodeRow,\n SchemaWriteFenceParams,\n TransactionBackend,\n} from \"../types\";\nimport { supportsAtomicBatch } from \"../types\";\nimport {\n hasAtomicSqlProgramRegistration,\n registerAtomicSqlProgram,\n resolveRegisteredAtomicSqlBatchExecutor,\n} from \"./atomic-sql-program\";\n\n/** How a node batch member obtained the identifier stored by its program. */\nexport type AtomicNodeBatchIdSource = \"generated\" | \"caller\";\n/** Whether a node batch returns only its count or its ordered postimages. */\nexport type AtomicNodeBatchResultMode = \"count\" | \"rows\";\n\n/** Independently provable claim semantics accepted by a node mutation family. */\nexport type AtomicNodeClaimFamily = \"disjointness\" | \"uniqueness\";\n\n/** Independently provable derived-storage families in a node program. */\nexport type AtomicNodeProjectionFamily = \"embedding\" | \"fulltext\";\n\n/**\n * One complete derived-storage transition attached to a node postimage.\n *\n * Identity stays on the containing row entry so a projection cannot target a\n * different node. Embedding deletes are explicit because updates and\n * caller-id resurrection can remove a value that previously existed.\n */\nexport type AtomicNodeProjection =\n | Extract<NodeInsertProjection, { kind: \"fulltext\" }>\n | Readonly<{\n kind: \"embedding\";\n action: \"upsert\";\n fieldPath: string;\n embedding: readonly number[];\n dimensions: number;\n metric: Extract<NodeInsertProjection, { kind: \"embedding\" }>[\"metric\"];\n indexType: Extract<\n NodeInsertProjection,\n { kind: \"embedding\" }\n >[\"indexType\"];\n }>\n | Readonly<{\n kind: \"embedding\";\n action: \"delete\";\n fieldPath: string;\n dimensions: number;\n metric: Extract<NodeInsertProjection, { kind: \"embedding\" }>[\"metric\"];\n indexType: Extract<\n NodeInsertProjection,\n { kind: \"embedding\" }\n >[\"indexType\"];\n }>;\n\n/** Closed derived-storage envelope advertised by one node executor. */\nexport type AtomicNodeProjectionSupport = Readonly<{\n families: readonly AtomicNodeProjectionFamily[];\n}>;\n\n/** Closed claim envelope advertised by one node mutation executor. */\nexport type AtomicNodeClaimSupport = Readonly<{\n /** Independently proved claim families; an omitted family is unsupported. */\n families: readonly AtomicNodeClaimFamily[];\n /**\n * Maximum compiled claim/probe bind cost one member may contribute to its\n * write gate.\n * Compute a member's required value with {@link atomicNodeClaimInputCost};\n * backend implementations must not reproduce the SQL cost formula.\n * Total batch size is deliberately absent: the executor chunks statements\n * inside one atomic transport submission.\n */\n maxInputCostPerEntry: number;\n}>;\n\nfunction isAtomicNodeClaimFamily(\n value: unknown,\n): value is AtomicNodeClaimFamily {\n return value === \"disjointness\" || value === \"uniqueness\";\n}\n\nfunction assertAtomicNodeClaimFamilies(\n family: keyof AtomicMutationProgramRegistration,\n name: string,\n value: unknown,\n): void {\n if (\n Array.isArray(value) &&\n new Set(value).size === value.length &&\n value.every((claimFamily) => isAtomicNodeClaimFamily(claimFamily))\n ) {\n return;\n }\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires distinct ${name}.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: name,\n value,\n },\n );\n}\n\nfunction assertAtomicNodeClaimSupport(\n family: \"createNodes\" | \"mutateNodes\" | \"replaceNodes\",\n value: unknown,\n): void {\n if (value === undefined) return;\n if (typeof value !== \"object\" || value === null) {\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires claimSupport metadata.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"claimSupport\",\n value,\n },\n );\n }\n const support = value as Readonly<Record<PropertyKey, unknown>>;\n assertAtomicNodeClaimFamilies(\n family,\n \"claimSupport.families\",\n support[\"families\"],\n );\n assertNonnegativeIntegerLimit(\n family,\n \"claimSupport.maxInputCostPerEntry\",\n support[\"maxInputCostPerEntry\"],\n );\n}\n\nfunction isAtomicNodeProjectionFamily(\n value: unknown,\n): value is AtomicNodeProjectionFamily {\n return value === \"embedding\" || value === \"fulltext\";\n}\n\nfunction assertAtomicNodeProjectionSupport(\n family: \"createNodes\" | \"mutateNodes\" | \"replaceNodes\" | \"updateNodes\",\n value: unknown,\n): void {\n if (value === undefined) return;\n if (typeof value !== \"object\" || value === null) {\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires projectionSupport metadata.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"projectionSupport\",\n value,\n },\n );\n }\n const families = (value as Readonly<Record<PropertyKey, unknown>>)[\n \"families\"\n ];\n if (\n !Array.isArray(families) ||\n new Set(families).size !== families.length ||\n !families.every((projectionFamily) =>\n isAtomicNodeProjectionFamily(projectionFamily),\n )\n ) {\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires distinct projection families.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"projectionSupport.families\",\n value: families,\n },\n );\n }\n}\n\n/** The one owner of claim-verdict to advertised-family correlation. */\nfunction atomicNodeClaimFamily(claim: NodeInsertClaim): AtomicNodeClaimFamily {\n return claim.verdict.kind;\n}\n\n/** Bind cost of one canonical claim row in an atomic node write gate. */\nconst ATOMIC_NODE_CANONICAL_CLAIM_INPUT_COST = 6;\n\n/** Bind cost of one legacy uniqueness compatibility probe. */\nconst ATOMIC_NODE_UNIQUENESS_PROBE_INPUT_COST = 9;\n\n/** Bind cost of one legacy disjointness compatibility probe. */\nconst ATOMIC_NODE_DISJOINTNESS_PROBE_INPUT_COST = 6;\n\n/** Exact compiled claim/probe bind cost one member contributes to its write gate. */\nexport function atomicNodeClaimInputCost(\n claims: readonly NodeInsertClaim[],\n): number {\n let cost = 0;\n for (const claim of claims) {\n cost += ATOMIC_NODE_CANONICAL_CLAIM_INPUT_COST;\n cost +=\n claim.verdict.kind === \"uniqueness\" ?\n ATOMIC_NODE_UNIQUENESS_PROBE_INPUT_COST *\n claim.verdict.probeAxes.filter((axis) => axis !== claim.axis).length\n : ATOMIC_NODE_DISJOINTNESS_PROBE_INPUT_COST *\n claim.verdict.conflictingKinds.length;\n }\n return cost;\n}\n\n/** Whether one executor explicitly accepts one member's complete claim set. */\nexport function supportsAtomicNodeClaims(\n support: AtomicNodeClaimSupport | undefined,\n claims: readonly NodeInsertClaim[],\n): boolean {\n if (claims.length === 0) return true;\n if (support === undefined) return false;\n const families = new Set(support.families);\n return (\n claims.every((claim) => families.has(atomicNodeClaimFamily(claim))) &&\n atomicNodeClaimInputCost(claims) <= support.maxInputCostPerEntry\n );\n}\n\n/** Whether an executor can admit at least one member of a claim family. */\nexport function supportsAtomicNodeClaimFamily(\n support: AtomicNodeClaimSupport | undefined,\n family: AtomicNodeClaimFamily,\n): boolean {\n return (\n (support?.maxInputCostPerEntry ?? 0) > 0 &&\n support?.families.includes(family) === true\n );\n}\n\n/** Whether one executor explicitly accepts every normalized projection. */\nexport function supportsAtomicNodeProjections(\n support: AtomicNodeProjectionSupport | undefined,\n families: readonly AtomicNodeProjectionFamily[],\n): boolean {\n if (families.length === 0) return true;\n if (support === undefined) return false;\n const advertised = new Set(support.families);\n return families.every((family) => advertised.has(family));\n}\n\n/** One normalized node-create member supplied to a semantic executor. */\nexport type AtomicNodeBatchEntry = Readonly<{\n idSource: AtomicNodeBatchIdSource;\n params: InsertNodeParams;\n /** Complete canonically ordered claims this row owes. */\n claims?: readonly NodeInsertClaim[];\n /** Complete derived-storage transitions owed by the written postimage. */\n projections?: readonly AtomicNodeProjection[];\n}>;\n\n/** Complete schema-fenced input to an atomic node-create family. */\nexport type AtomicNodeBatchInput = Readonly<{\n entries: readonly AtomicNodeBatchEntry[];\n resultMode: AtomicNodeBatchResultMode;\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Executes the complete eligible node-create family for one exact root. */\nexport interface AtomicNodeBatchExecutor {\n /** Claim semantics this executor can prove, omitted for plain rows only. */\n readonly claimSupport?: AtomicNodeClaimSupport;\n /** Derived-storage families this executor carries inside its program. */\n readonly projectionSupport?: AtomicNodeProjectionSupport;\n (\n input: AtomicNodeBatchInput & Readonly<{ resultMode: \"count\" }>,\n ): Promise<number>;\n (\n input: AtomicNodeBatchInput & Readonly<{ resultMode: \"rows\" }>,\n ): Promise<readonly NodeRow[]>;\n}\n\n/** One complete, preimage-free replacement supplied to a semantic executor. */\nexport type AtomicNodeReplacementEntry = Readonly<{\n params: InsertNodeParams;\n /** Complete canonically ordered claims the replacement postimage owes. */\n claims?: readonly NodeInsertClaim[];\n /** Complete derived-storage transitions owed by the replacement postimage. */\n projections?: readonly AtomicNodeProjection[];\n}>;\n\n/** Any node entry whose complete postimage drives projections/assertions. */\nexport type AtomicNodePostimageEntry =\n AtomicNodeBatchEntry | AtomicNodeReplacementEntry;\n\n/** Executes complete blind node replacements for one exact resource. */\nexport interface AtomicNodeReplacementBatchExecutor {\n /** Maximum members accepted by one atomic submission, including internal chunks. */\n readonly maxEntries: Readonly<{ plain: number; claimed: number }>;\n /** Exact no-SQL admission proof for the prepared replacement work. */\n readonly accepts?: (\n entries: readonly AtomicNodeReplacementEntry[],\n ) => boolean;\n /** Claim semantics this executor can prove, omitted for plain rows only. */\n readonly claimSupport?: AtomicNodeClaimSupport;\n /** Claim families whose earlier owner rows this program releases. */\n readonly releasedClaimFamilies?: readonly AtomicNodeClaimFamily[];\n /** Derived-storage families this executor carries inside its program. */\n readonly projectionSupport?: AtomicNodeProjectionSupport;\n (\n input: Readonly<{\n entries: readonly AtomicNodeReplacementEntry[];\n /** Whether earlier owner claims must be released before acquisition. */\n releaseClaims: boolean;\n schemaFence: SchemaWriteFenceParams;\n }>,\n ): Promise<readonly NodeRow[]>;\n}\n\n/** Count-returning input to an atomic direct edge-create family. */\nexport type AtomicEdgeBatchCountInput = Readonly<{\n claims: readonly ClaimEdgeCardinalityParams[];\n params: readonly InsertEdgeParams[];\n resultMode: \"count\";\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Postimage-returning input to an atomic direct edge-create family. */\nexport type AtomicEdgeBatchRowsInput = Readonly<{\n claims: readonly ClaimEdgeCardinalityParams[];\n params: readonly InsertEdgeParams[];\n resultMode: \"rows\";\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Executes complete eligible direct edge creates for one exact root. */\nexport interface AtomicEdgeBatchExecutor {\n (input: AtomicEdgeBatchCountInput): Promise<number>;\n (input: AtomicEdgeBatchRowsInput): Promise<readonly EdgeRow[]>;\n}\n\n/** One normalized durable edge-convergence member. */\nexport type AtomicEdgeConvergenceEntry = Readonly<{\n params: InsertEdgeParams;\n match: EdgeConvergenceMatch;\n}>;\n\n/** Authoritative row and outcome returned by durable convergence. */\nexport type AtomicEdgeConvergenceResult = Readonly<{\n row: EdgeRow;\n outcome: \"created\" | \"found\";\n}>;\n\n/** Complete schema-fenced durable edge-convergence input. */\nexport type AtomicEdgeConvergenceInput = Readonly<{\n kind: \"durable-convergence\";\n entries: readonly AtomicEdgeConvergenceEntry[];\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Complete schema-fenced direct edge-delete input. */\nexport type AtomicEdgeDeleteBatchInput = Readonly<{\n graphId: string;\n expectedKind: string;\n ids: readonly string[];\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Delete count plus explicit evidence that the schema fence matched. */\nexport type AtomicDeleteBatchResult = Readonly<{\n affectedCount: number;\n schemaFenceMatched: boolean;\n}>;\n\n/** Executes complete eligible direct edge deletes for one exact root. */\nexport type AtomicEdgeDeleteBatchExecutor = (\n input: AtomicEdgeDeleteBatchInput,\n) => Promise<AtomicDeleteBatchResult>;\n\n/** Complete schema-fenced direct node-delete input. */\nexport type AtomicNodeDeleteBatchInput = Readonly<{\n graphId: string;\n kind: string;\n ids: readonly string[];\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/**\n * Executes complete eligible direct node deletes for one exact root.\n *\n * Keep the callable as a function type intersected with its metadata. The API\n * compatibility inventory follows function aliases into their input types;\n * changing this to a callable interface would hide that contravariant edge.\n */\nexport type AtomicNodeDeleteBatchExecutor = Readonly<{\n /** Claim families whose owned sidecars this program releases. */\n releasedClaimFamilies?: readonly AtomicNodeClaimFamily[];\n}> &\n ((input: AtomicNodeDeleteBatchInput) => Promise<AtomicDeleteBatchResult>);\n\n/** One authoritative node preimage and replacement used by a resolved set. */\nexport type AtomicNodeResolvedUpdateEntry = Readonly<{\n graphId: string;\n kind: string;\n id: string;\n props: Readonly<Record<string, unknown>>;\n expectedVersion: number;\n /** Complete derived-storage transitions owed by the written postimage. */\n projections?: readonly AtomicNodeProjection[];\n}>;\n\n/** Executes a complete eligible resolved node update set. */\nexport interface AtomicNodeResolvedUpdateBatchExecutor {\n /** Maximum members accepted by one atomic submission, including internal chunks. */\n readonly maxEntries: number;\n /** Derived-storage families this executor carries inside its program. */\n readonly projectionSupport?: AtomicNodeProjectionSupport;\n (\n input: Readonly<{\n entries: readonly AtomicNodeResolvedUpdateEntry[];\n schemaFence: SchemaWriteFenceParams;\n }>,\n ): Promise<readonly NodeRow[]>;\n}\n\n/** One authoritative edge preimage and replacement used by a resolved set. */\nexport type AtomicEdgeResolvedUpdateEntry = Readonly<{\n existing: EdgeRow;\n props: Readonly<Record<string, unknown>>;\n}>;\n\n/** Executes a complete eligible resolved edge update set. */\nexport interface AtomicEdgeResolvedUpdateBatchExecutor {\n /** Maximum members accepted by one atomic submission, including internal chunks. */\n readonly maxEntries: number;\n (\n input: Readonly<{\n entries: readonly AtomicEdgeResolvedUpdateEntry[];\n schemaFence: SchemaWriteFenceParams;\n }>,\n ): Promise<readonly EdgeRow[]>;\n}\n\n/** Ordered node postimages returned by a mixed resolved mutation set. */\nexport type AtomicNodeResolvedMutationSetResult = Readonly<{\n created: readonly NodeRow[];\n updated: readonly NodeRow[];\n}>;\n\n/** Executes a complete eligible mixed node create/update set. */\nexport interface AtomicNodeResolvedMutationSetExecutor {\n /** Maximum total members accepted across the program's terminal assertions. */\n readonly maxEntries: number;\n /** Derived-storage families this executor carries inside its program. */\n readonly projectionSupport?: AtomicNodeProjectionSupport;\n (\n input: Readonly<{\n creates: readonly AtomicNodeBatchEntry[];\n updates: readonly AtomicNodeResolvedUpdateEntry[];\n schemaFence: SchemaWriteFenceParams;\n }>,\n ): Promise<AtomicNodeResolvedMutationSetResult>;\n}\n\n/** Ordered edge postimages returned by a mixed resolved mutation set. */\nexport type AtomicEdgeResolvedMutationSetResult = Readonly<{\n created: readonly EdgeRow[];\n updated: readonly EdgeRow[];\n}>;\n\n/** Complete schema-fenced input to a mixed resolved edge mutation set. */\nexport type AtomicEdgeResolvedMutationSetInput = Readonly<{\n kind: \"resolved-set\";\n creates: readonly InsertEdgeParams[];\n updates: readonly AtomicEdgeResolvedUpdateEntry[];\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Executes resolved edge sets and durable convergence for one exact root. */\nexport interface AtomicEdgeMutationProgramExecutor {\n readonly maxEntries: Readonly<{\n resolvedSet: number;\n durableConvergence: number;\n }>;\n (\n input: AtomicEdgeResolvedMutationSetInput,\n ): Promise<AtomicEdgeResolvedMutationSetResult>;\n (\n input: AtomicEdgeConvergenceInput,\n ): Promise<readonly AtomicEdgeConvergenceResult[]>;\n}\n\n/** Internal proof that the closed SQL program rejected a missing endpoint. */\nexport class AtomicEdgeBatchEndpointRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic edge batch endpoint validation failed\", { cause });\n this.name = \"AtomicEdgeBatchEndpointRefusalError\";\n }\n}\n\n/** Internal proof that the closed SQL program refused a cardinality claim. */\nexport class AtomicEdgeBatchCardinalityRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic edge batch cardinality validation failed\", { cause });\n this.name = \"AtomicEdgeBatchCardinalityRefusalError\";\n }\n}\n\n/** Internal proof that native convergence encountered a tombstoned winner. */\nexport class AtomicEdgeConvergenceTombstoneRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic edge convergence requires portable resurrection\", { cause });\n this.name = \"AtomicEdgeConvergenceTombstoneRefusalError\";\n }\n}\n\n/** Internal proof that an edge-delete input belongs to another collection. */\nexport class AtomicEdgeDeleteIdentityRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic edge delete batch identity validation failed\", { cause });\n this.name = \"AtomicEdgeDeleteIdentityRefusalError\";\n }\n}\n\n/** Internal proof that a restricted node still has a live connected edge. */\nexport class AtomicNodeDeleteRestrictedRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic node delete batch restriction validation failed\", { cause });\n this.name = \"AtomicNodeDeleteRestrictedRefusalError\";\n }\n}\n\n/**\n * The semantic mutation families one exact bundled root can lower today.\n * New families extend this profile instead of adding another root registry.\n */\nexport type AtomicMutationProgramExecutor = Readonly<{\n createNodes?: AtomicNodeBatchExecutor;\n replaceNodes?: AtomicNodeReplacementBatchExecutor;\n createEdges?: AtomicEdgeBatchExecutor;\n deleteNodes?: AtomicNodeDeleteBatchExecutor;\n deleteEdges?: AtomicEdgeDeleteBatchExecutor;\n updateNodes?: AtomicNodeResolvedUpdateBatchExecutor;\n updateEdges?: AtomicEdgeResolvedUpdateBatchExecutor;\n mutateNodes?: AtomicNodeResolvedMutationSetExecutor;\n mutateEdges?: AtomicEdgeMutationProgramExecutor;\n}>;\n\n/** Every independently enabled semantic variant in a mutation profile. */\nexport const ATOMIC_MUTATION_PROGRAM_VARIANTS = [\n \"createNodes\",\n \"replaceNodes\",\n \"createEdges\",\n \"deleteNodes\",\n \"deleteEdges\",\n \"updateNodes\",\n \"updateEdges\",\n \"mutateNodes\",\n \"mutateEdges.resolvedSet\",\n \"mutateEdges.durableConvergence\",\n] as const;\n\n/** One independently enabled semantic variant in a mutation profile. */\nexport type AtomicMutationProgramVariant =\n (typeof ATOMIC_MUTATION_PROGRAM_VARIANTS)[number];\n\n/** One owner for the overloaded edge-mutation input/variant correlation. */\nexport const ATOMIC_EDGE_MUTATION_VARIANT_BY_KIND = {\n \"durable-convergence\": \"mutateEdges.durableConvergence\",\n \"resolved-set\": \"mutateEdges.resolvedSet\",\n} as const satisfies Readonly<\n Record<\n | AtomicEdgeConvergenceInput[\"kind\"]\n | AtomicEdgeResolvedMutationSetInput[\"kind\"],\n Extract<AtomicMutationProgramVariant, `mutateEdges.${string}`>\n >\n>;\n\n/**\n * Owns which semantic variants a normalized profile can reach independently.\n *\n * A zero limit is an honest opt-out. Singleton updates reach the update-only\n * families directly on every exact root. Mixed resolved sets move their\n * collection-level read/partition/write unit into an interactive transaction;\n * an interactive root therefore cannot reach them, while an exact registered\n * `atomicBatch: \"session\"` target can. Conformance consumes this owner instead\n * of inferring session reachability from transaction availability.\n */\nexport function reachableAtomicMutationProgramVariants(\n profile: AtomicMutationProgramExecutor,\n execution: Pick<\n GraphBackend[\"capabilities\"][\"execution\"],\n \"atomicBatch\" | \"interactiveTransactions\"\n >,\n): readonly AtomicMutationProgramVariant[] {\n const variants: AtomicMutationProgramVariant[] = [];\n const resolvedMutationSetsReachable =\n !execution.interactiveTransactions || execution.atomicBatch === \"session\";\n if (profile.createNodes !== undefined) variants.push(\"createNodes\");\n if (\n (profile.replaceNodes?.maxEntries.plain ?? 0) > 0 ||\n (profile.replaceNodes?.maxEntries.claimed ?? 0) > 0\n ) {\n variants.push(\"replaceNodes\");\n }\n if (profile.createEdges !== undefined) variants.push(\"createEdges\");\n if (profile.deleteNodes !== undefined) variants.push(\"deleteNodes\");\n if (profile.deleteEdges !== undefined) variants.push(\"deleteEdges\");\n if ((profile.updateNodes?.maxEntries ?? 0) > 0) {\n variants.push(\"updateNodes\");\n }\n if ((profile.updateEdges?.maxEntries ?? 0) > 0) {\n variants.push(\"updateEdges\");\n }\n if (\n resolvedMutationSetsReachable &&\n (profile.mutateNodes?.maxEntries ?? 0) > 0\n ) {\n variants.push(\"mutateNodes\");\n }\n if (\n resolvedMutationSetsReachable &&\n (profile.mutateEdges?.maxEntries.resolvedSet ?? 0) > 0\n ) {\n variants.push(\"mutateEdges.resolvedSet\");\n }\n if ((profile.mutateEdges?.maxEntries.durableConvergence ?? 0) > 0) {\n variants.push(\"mutateEdges.durableConvergence\");\n }\n return variants;\n}\n\n/**\n * Semantic mutation families implemented by one exact backend root.\n *\n * Registering this profile is an explicit claim about TypeGraph write\n * semantics, not merely transport mechanics. Each optional member authorizes\n * only that family; omitted families retain the complete portable path.\n */\nexport type AtomicMutationProgramRegistration = Readonly<{\n createNodes?: AtomicNodeBatchExecutor | undefined;\n replaceNodes?: AtomicNodeReplacementBatchExecutor | undefined;\n createEdges?: AtomicEdgeBatchExecutor | undefined;\n deleteNodes?: AtomicNodeDeleteBatchExecutor | undefined;\n deleteEdges?: AtomicEdgeDeleteBatchExecutor | undefined;\n updateNodes?: AtomicNodeResolvedUpdateBatchExecutor | undefined;\n updateEdges?: AtomicEdgeResolvedUpdateBatchExecutor | undefined;\n mutateNodes?: AtomicNodeResolvedMutationSetExecutor | undefined;\n mutateEdges?: AtomicEdgeMutationProgramExecutor | undefined;\n}>;\n\nconst ATOMIC_MUTATION_PROGRAM_EXECUTORS = new WeakMap<\n object,\n AtomicMutationProgramExecutor\n>();\n\ntype AtomicMutationProgramDispatchObserver = (\n variant: AtomicMutationProgramVariant,\n) => void;\n\nconst ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS = new WeakMap<\n object,\n AtomicMutationProgramDispatchObserver\n>();\nconst INSTRUMENTED_ATOMIC_MUTATION_EXECUTOR_TARGETS = new WeakMap<\n object,\n object\n>();\n\nfunction reportAtomicMutationProgramDispatch(\n target: object,\n variant: AtomicMutationProgramVariant,\n): void {\n ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS.get(target)?.(variant);\n}\n\nfunction instrumentAtomicMutationProgramExecutors(\n target: object,\n profile: AtomicMutationProgramRegistration,\n): AtomicMutationProgramExecutor {\n type Descriptor = Readonly<{\n variant: (input: unknown) => AtomicMutationProgramVariant;\n }>;\n const descriptors = {\n createEdges: { variant: () => \"createEdges\" },\n createNodes: { variant: () => \"createNodes\" },\n replaceNodes: { variant: () => \"replaceNodes\" },\n deleteEdges: { variant: () => \"deleteEdges\" },\n deleteNodes: { variant: () => \"deleteNodes\" },\n mutateEdges: {\n variant: (input: unknown) =>\n ATOMIC_EDGE_MUTATION_VARIANT_BY_KIND[\n (\n input as\n AtomicEdgeConvergenceInput | AtomicEdgeResolvedMutationSetInput\n ).kind\n ],\n },\n mutateNodes: { variant: () => \"mutateNodes\" },\n updateEdges: { variant: () => \"updateEdges\" },\n updateNodes: { variant: () => \"updateNodes\" },\n } as const satisfies Record<\n keyof AtomicMutationProgramRegistration,\n Descriptor\n >;\n\n function instrument<TExecutor extends object>(\n source: TExecutor,\n descriptor: Descriptor,\n ): TExecutor {\n if (INSTRUMENTED_ATOMIC_MUTATION_EXECUTOR_TARGETS.get(source) === target) {\n return source;\n }\n const callable = source as unknown as (\n ...arguments_: readonly unknown[]\n ) => unknown;\n const instrumented = new Proxy(callable, {\n apply(sourceExecutor, thisArgument, argumentsList) {\n reportAtomicMutationProgramDispatch(\n target,\n descriptor.variant(argumentsList[0]),\n );\n return Reflect.apply(sourceExecutor, thisArgument, argumentsList);\n },\n });\n INSTRUMENTED_ATOMIC_MUTATION_EXECUTOR_TARGETS.set(instrumented, target);\n return instrumented as unknown as TExecutor;\n }\n\n const entries = ATOMIC_MUTATION_PROGRAM_FAMILIES.flatMap((family) => {\n const executor = profile[family];\n return executor === undefined ?\n []\n : [[family, instrument(executor, descriptors[family])] as const];\n });\n return Object.freeze(\n Object.fromEntries(entries) as AtomicMutationProgramExecutor,\n );\n}\n\n/** @internal Runs work while observing dispatches from this exact resource. */\nexport async function withAtomicMutationProgramDispatchObserver<TResult>(\n target: object,\n observer: AtomicMutationProgramDispatchObserver,\n run: () => TResult | PromiseLike<TResult>,\n): Promise<TResult> {\n if (ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS.has(target)) {\n throw new ConfigurationError(\n \"Atomic mutation program dispatch observation is already active for this exact resource.\",\n { code: \"ATOMIC_MUTATION_PROGRAM_OBSERVER_ALREADY_ACTIVE\" },\n );\n }\n ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS.set(target, observer);\n try {\n return await run();\n } finally {\n ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS.delete(target);\n }\n}\n\nconst ATOMIC_MUTATION_PROGRAM_FAMILIES = [\n \"createNodes\",\n \"replaceNodes\",\n \"createEdges\",\n \"deleteNodes\",\n \"deleteEdges\",\n \"updateNodes\",\n \"updateEdges\",\n \"mutateNodes\",\n \"mutateEdges\",\n] as const satisfies readonly (keyof AtomicMutationProgramRegistration)[];\n\nfunction assertNonnegativeIntegerLimit(\n family: keyof AtomicMutationProgramRegistration,\n name: string,\n value: unknown,\n): void {\n if (typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0) {\n return;\n }\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires a nonnegative integer ${name}.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: name,\n value,\n },\n );\n}\n\nfunction assertAtomicMutationProgramLimits(\n family: keyof AtomicMutationProgramRegistration,\n executor: AtomicMutationProgramRegistration[typeof family],\n): void {\n if (executor === undefined) return;\n if (family === \"createNodes\" || family === \"replaceNodes\") {\n const nodeExecutor = executor as\n AtomicNodeBatchExecutor | AtomicNodeReplacementBatchExecutor;\n assertAtomicNodeClaimSupport(family, nodeExecutor.claimSupport);\n assertAtomicNodeProjectionSupport(family, nodeExecutor.projectionSupport);\n if (family === \"replaceNodes\") {\n const replacementExecutor =\n nodeExecutor as AtomicNodeReplacementBatchExecutor;\n const releasedClaimFamilies = replacementExecutor.releasedClaimFamilies;\n if (releasedClaimFamilies !== undefined) {\n assertAtomicNodeClaimFamilies(\n family,\n \"releasedClaimFamilies\",\n releasedClaimFamilies,\n );\n }\n const maxEntries = (\n replacementExecutor as unknown as Readonly<Record<string, unknown>>\n )[\"maxEntries\"];\n if (typeof maxEntries !== \"object\" || maxEntries === null) {\n throw new ConfigurationError(\n \"Atomic mutation program family replaceNodes requires maxEntries metadata.\",\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"maxEntries\",\n value: maxEntries,\n },\n );\n }\n const limits = maxEntries as Readonly<Record<string, unknown>>;\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries.plain\",\n limits[\"plain\"],\n );\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries.claimed\",\n limits[\"claimed\"],\n );\n const accepts = (executor as AtomicNodeReplacementBatchExecutor).accepts;\n if (accepts !== undefined && typeof accepts !== \"function\") {\n throw new ConfigurationError(\n \"Atomic mutation program family replaceNodes requires a callable accepts predicate.\",\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"accepts\",\n value: accepts,\n },\n );\n }\n }\n return;\n }\n if (family === \"deleteNodes\") {\n const releasedClaimFamilies: unknown = (\n executor as AtomicNodeDeleteBatchExecutor\n ).releasedClaimFamilies;\n if (releasedClaimFamilies !== undefined) {\n assertAtomicNodeClaimFamilies(\n family,\n \"releasedClaimFamilies\",\n releasedClaimFamilies,\n );\n }\n return;\n }\n if (\n family === \"updateNodes\" ||\n family === \"updateEdges\" ||\n family === \"mutateNodes\"\n ) {\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries\",\n (executor as Readonly<{ maxEntries: unknown }>).maxEntries,\n );\n if (family === \"updateNodes\" || family === \"mutateNodes\") {\n assertAtomicNodeProjectionSupport(\n family,\n (\n executor as\n | AtomicNodeResolvedMutationSetExecutor\n | AtomicNodeResolvedUpdateBatchExecutor\n ).projectionSupport,\n );\n }\n return;\n }\n if (family === \"mutateEdges\") {\n const limits: unknown = (executor as AtomicEdgeMutationProgramExecutor)\n .maxEntries;\n if (typeof limits !== \"object\" || limits === null) {\n throw new ConfigurationError(\n \"Atomic mutation program family mutateEdges requires maxEntries limits.\",\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"maxEntries\",\n value: limits,\n },\n );\n }\n const edgeLimits = limits as Readonly<Record<PropertyKey, unknown>>;\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries.resolvedSet\",\n edgeLimits[\"resolvedSet\"],\n );\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries.durableConvergence\",\n edgeLimits[\"durableConvergence\"],\n );\n }\n}\n\nfunction normalizeAtomicMutationProgramRegistration(\n registration: AtomicMutationProgramRegistration,\n): AtomicMutationProgramExecutor {\n const uncheckedRegistration: unknown = registration;\n if (\n typeof uncheckedRegistration !== \"object\" ||\n uncheckedRegistration === null\n ) {\n throw new ConfigurationError(\n \"An atomic mutation program registration must be an object.\",\n { code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\" },\n );\n }\n const entries: [\n keyof AtomicMutationProgramRegistration,\n NonNullable<\n AtomicMutationProgramRegistration[keyof AtomicMutationProgramRegistration]\n >,\n ][] = [];\n for (const family of ATOMIC_MUTATION_PROGRAM_FAMILIES) {\n const executor = registration[family];\n if (executor === undefined) continue;\n if (typeof executor !== \"function\") {\n throw new ConfigurationError(\n `Atomic mutation program family ${family} must be callable.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n },\n );\n }\n assertAtomicMutationProgramLimits(family, executor);\n entries.push([family, executor]);\n }\n if (entries.length === 0) {\n throw new ConfigurationError(\n \"An atomic mutation program registration must implement at least one semantic family.\",\n { code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\" },\n );\n }\n return Object.freeze(\n Object.fromEntries(entries) as AtomicMutationProgramExecutor,\n );\n}\n\nfunction throwAtomicMutationProgramRegistrationMismatch(\n target: GraphBackend | TransactionBackend,\n): never {\n throw new ConfigurationError(\n \"Atomic mutation programs require an exact backend session with a registered atomic SQL transport.\",\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n atomicBatch: target.capabilities.execution.atomicBatch,\n transportRegistered: hasAtomicSqlProgramRegistration(target),\n },\n {\n suggestion:\n \"Register and validate the exact-session atomic SQL transport before registering only the TypeGraph mutation families this backend implements.\",\n },\n );\n}\n\n/**\n * Registers TypeGraph semantic mutation programs for one exact backend resource.\n *\n * Transport registration proves atomic statement dispatch only. This second,\n * explicit profile declares which graph mutation families preserve their\n * complete schema-fence, validation, side-effect, refusal, and result-ordering\n * contracts. Object-identity registration prevents derived, projected, and\n * other transaction sessions from inheriting execution evidence.\n */\nexport function registerAtomicMutationPrograms<\n T extends GraphBackend | TransactionBackend,\n>(target: T, registration: AtomicMutationProgramRegistration): T {\n if (\n !supportsAtomicBatch(target) ||\n !hasAtomicSqlProgramRegistration(target)\n ) {\n throwAtomicMutationProgramRegistrationMismatch(target);\n }\n if (ATOMIC_MUTATION_PROGRAM_EXECUTORS.has(target)) {\n throw new ConfigurationError(\n \"Atomic mutation programs are already registered for this exact backend resource.\",\n { code: \"ATOMIC_MUTATION_PROGRAM_ALREADY_REGISTERED\" },\n );\n }\n ATOMIC_MUTATION_PROGRAM_EXECUTORS.set(\n target,\n instrumentAtomicMutationProgramExecutors(\n target,\n normalizeAtomicMutationProgramRegistration(registration),\n ),\n );\n return target;\n}\n\n/** Returns whether this exact resource owns a semantic program profile. */\nexport function hasAtomicMutationProgramRegistration(\n target: GraphBackend | TransactionBackend,\n): boolean {\n return ATOMIC_MUTATION_PROGRAM_EXECUTORS.has(target);\n}\n\n/** Resolves semantic mutation programs only for their exact registered resource. */\nexport function resolveAtomicMutationPrograms(\n target: GraphBackend | TransactionBackend,\n): AtomicMutationProgramExecutor | undefined {\n return ATOMIC_MUTATION_PROGRAM_EXECUTORS.get(target);\n}\n\n/**\n * Re-registers exact-session evidence on a transparent transaction wrapper.\n *\n * Session authority is never inherited implicitly: the wrapper seam calls\n * this only after deriving a backend that forwards to the same pinned command\n * session. Root registrations remain non-transferable.\n *\n * @internal\n */\nexport function carryAtomicMutationSessionRegistration<\n T extends TransactionBackend,\n>(base: TransactionBackend, derived: T): T {\n if (\n base.capabilities.execution.atomicBatch !== \"session\" ||\n derived.capabilities.execution.atomicBatch !== \"session\"\n ) {\n return derived;\n }\n const executeAtomicBatch = resolveRegisteredAtomicSqlBatchExecutor(base);\n const profile = resolveAtomicMutationPrograms(base);\n if (executeAtomicBatch === undefined || profile === undefined) return derived;\n registerAtomicSqlProgram(derived, executeAtomicBatch);\n registerAtomicMutationPrograms(derived, profile);\n return derived;\n}\n\n/**\n * @internal Test-only compatibility seam.\n *\n * Production factories must use registerAtomicMutationPrograms() so transport,\n * declaration, shape, and duplicate-registration validation cannot be skipped.\n */\nexport function markBundledRootAtomicMutationPrograms<T extends object>(\n target: T,\n executor: Readonly<{\n createNodes?: AtomicNodeBatchExecutor | undefined;\n replaceNodes?: AtomicNodeReplacementBatchExecutor | undefined;\n createEdges?: AtomicEdgeBatchExecutor | undefined;\n deleteNodes?: AtomicNodeDeleteBatchExecutor | undefined;\n deleteEdges?: AtomicEdgeDeleteBatchExecutor | undefined;\n updateNodes?: AtomicNodeResolvedUpdateBatchExecutor | undefined;\n updateEdges?: AtomicEdgeResolvedUpdateBatchExecutor | undefined;\n mutateNodes?: AtomicNodeResolvedMutationSetExecutor | undefined;\n mutateEdges?: AtomicEdgeMutationProgramExecutor | undefined;\n }>,\n): T {\n ATOMIC_MUTATION_PROGRAM_EXECUTORS.set(\n target,\n instrumentAtomicMutationProgramExecutors(target, executor),\n );\n return target;\n}\n\n/** @internal Compatibility seam for bundled-factory and backend tests. */\nexport function resolveBundledRootAtomicMutationPrograms(\n target: GraphBackend | TransactionBackend,\n): AtomicMutationProgramExecutor | undefined {\n return resolveAtomicMutationPrograms(target);\n}\n\n/** @internal Narrow test seam over the single mutation-program registry. */\nexport function markBundledRootAtomicNodeBatch<T extends object>(\n target: T,\n executor: AtomicNodeBatchExecutor,\n): T {\n const existing = ATOMIC_MUTATION_PROGRAM_EXECUTORS.get(target);\n return markBundledRootAtomicMutationPrograms(target, {\n ...existing,\n createNodes: executor,\n });\n}\n\n/** @internal Narrow test seam over the single mutation-program registry. */\nexport function markBundledRootAtomicEdgeBatch<T extends object>(\n target: T,\n executor: AtomicEdgeBatchExecutor,\n): T {\n const existing = ATOMIC_MUTATION_PROGRAM_EXECUTORS.get(target);\n return markBundledRootAtomicMutationPrograms(target, {\n ...existing,\n createEdges: executor,\n });\n}\n\n/** @internal Narrow test seam over the single mutation-program registry. */\nexport function resolveBundledRootAtomicNodeBatch(\n target: GraphBackend | TransactionBackend,\n): AtomicNodeBatchExecutor | undefined {\n return resolveAtomicMutationPrograms(target)?.createNodes;\n}\n\n/** @internal Narrow test seam over the single mutation-program registry. */\nexport function resolveBundledRootAtomicEdgeBatch(\n target: GraphBackend | TransactionBackend,\n): AtomicEdgeBatchExecutor | undefined {\n return resolveAtomicMutationPrograms(target)?.createEdges;\n}\n"]}
1
+ {"version":3,"sources":["../src/backend/capabilities/atomic-sql-program.ts","../src/backend/capabilities/atomic-mutation-program.ts"],"names":[],"mappings":"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","file":"chunk-KQYUKOGX.js","sourcesContent":["/**\n * Internal execution boundary for a closed, precompiled SQL write program.\n *\n * This is deliberately an out-of-band exact-resource capability. An author\n * registers either a root that owns the atomic boundary or an already-open\n * transaction session. Derived backends and other transaction objects do not\n * inherit the registration. A static batch is therefore never forwarded\n * through a wrapper whose behavior has not been audited for the program\n * contract.\n */\nimport { CompilerInvariantError, ConfigurationError } from \"../../errors\";\nimport type { GraphBackend, TransactionBackend } from \"../types\";\n\nexport type AtomicSqlRow = Readonly<Record<string, unknown>>;\n\n/** A transport-ready statement in the portable atomic-program protocol. */\nexport type CompiledAtomicSqlStatement = Readonly<{\n params: readonly unknown[];\n sql: string;\n}>;\n\n/** A native all-or-nothing dispatch for a closed statement sequence. */\nexport type AtomicSqlBatchExecutor = <TRow>(\n statements: readonly CompiledAtomicSqlStatement[],\n) => Promise<readonly (readonly TRow[])[]>;\n\nexport type AtomicSqlProgramAdapter = Readonly<{\n executeAtomicBatch?: AtomicSqlBatchExecutor;\n}>;\n\n/** The transport forms accepted by an atomic program author. */\nexport type AtomicSqlProgramRegistration =\n AtomicSqlBatchExecutor | AtomicSqlProgramAdapter;\n\ntype AtomicSqlResultCardinality = \"none\" | \"one\" | \"many\";\n\n/** One closed statement and the typed decoder for its result slot. */\ntype AtomicSqlProgramSlot<TResult> = Readonly<{\n statement: CompiledAtomicSqlStatement;\n cardinality: AtomicSqlResultCardinality;\n decode: (rows: readonly AtomicSqlRow[]) => TResult;\n}>;\n\n/**\n * A statically closed program. Every slot uses the same result union so a\n * heterogeneous node/edge program can still preserve a typed result at the\n * program boundary without introducing `any` into the erased executor.\n */\nexport type AtomicSqlProgram<TRowResult, TResult> = Readonly<{\n slots: readonly AtomicSqlProgramSlot<TRowResult>[];\n assemble: (results: readonly TRowResult[]) => TResult;\n}>;\n\nexport type AtomicSqlProgramExecutor = Readonly<{\n execute: <TRowResult, TResult>(\n program: AtomicSqlProgram<TRowResult, TResult>,\n ) => Promise<TResult>;\n}>;\n\ntype RegisteredAtomicSqlProgram = Readonly<{\n executeAtomicBatch: AtomicSqlBatchExecutor;\n executor: AtomicSqlProgramExecutor;\n}>;\n\nconst ATOMIC_SQL_PROGRAM_EXECUTORS = new WeakMap<\n object,\n RegisteredAtomicSqlProgram\n>();\n\nfunction assertResultCardinality(\n slot: Readonly<{ cardinality: AtomicSqlResultCardinality }>,\n index: number,\n rows: readonly AtomicSqlRow[],\n): void {\n const valid =\n slot.cardinality === \"none\" ? rows.length === 0\n : slot.cardinality === \"one\" ? rows.length === 1\n : true;\n if (valid) return;\n throw new CompilerInvariantError(\n `Atomic SQL program slot ${index} returned ${rows.length} rows, ` +\n `expected ${slot.cardinality}.`,\n {\n slot: index,\n cardinality: slot.cardinality,\n rowCount: rows.length,\n },\n );\n}\n\nfunction assertResultSlotCount(\n expected: number,\n actual: readonly (readonly AtomicSqlRow[])[],\n): void {\n if (expected === actual.length) return;\n throw new CompilerInvariantError(\n `Atomic SQL program returned ${actual.length} result slots, ` +\n `expected ${expected}.`,\n { expected, actual: actual.length },\n );\n}\n\nfunction isAtomicSqlResultSlots(\n value: unknown,\n): value is readonly (readonly AtomicSqlRow[])[] {\n return Array.isArray(value) && value.every((slot) => Array.isArray(slot));\n}\n\n/** Executes the one canonical closed-program protocol. */\nasync function executeAtomicSqlProgram<TRowResult, TResult>(\n executeAtomicBatch: AtomicSqlBatchExecutor,\n program: AtomicSqlProgram<TRowResult, TResult>,\n): Promise<TResult> {\n if (program.slots.length === 0) return program.assemble([]);\n\n const statements = program.slots.map((slot) => slot.statement);\n const result: unknown = await executeAtomicBatch<AtomicSqlRow>(statements);\n if (!isAtomicSqlResultSlots(result)) {\n throw new CompilerInvariantError(\n \"Atomic SQL program executor returned malformed result slots.\",\n { resultType: typeof result },\n );\n }\n const rows = result;\n\n assertResultSlotCount(program.slots.length, rows);\n const decoded = program.slots.map((slot, index) => {\n const slotRows = rows[index];\n if (slotRows === undefined) {\n throw new CompilerInvariantError(\n `Atomic SQL program result slot ${index} is missing.`,\n { slot: index },\n );\n }\n assertResultCardinality(slot, index, slotRows);\n return slot.decode(slotRows);\n });\n\n return program.assemble(decoded);\n}\n\nfunction createExecutor(\n executeAtomicBatch: AtomicSqlBatchExecutor,\n): AtomicSqlProgramExecutor {\n return {\n async execute<TRowResult, TResult>(\n program: AtomicSqlProgram<TRowResult, TResult>,\n ): Promise<TResult> {\n return executeAtomicSqlProgram(executeAtomicBatch, program);\n },\n };\n}\n\n/** @internal Creates the executor shared by lowering and root registration. */\nexport function createAtomicSqlProgramExecutor(\n adapter: AtomicSqlProgramAdapter,\n): AtomicSqlProgramExecutor | undefined {\n const executeAtomicBatch = adapter.executeAtomicBatch;\n return typeof executeAtomicBatch === \"function\" ?\n createExecutor(executeAtomicBatch)\n : undefined;\n}\n\nfunction normalizeAtomicSqlProgramRegistration(\n registration: AtomicSqlProgramRegistration,\n): RegisteredAtomicSqlProgram | undefined {\n const adapter: AtomicSqlProgramAdapter =\n typeof registration === \"function\" ?\n { executeAtomicBatch: registration }\n : registration;\n const executeAtomicBatch = adapter.executeAtomicBatch;\n const executor = createAtomicSqlProgramExecutor(adapter);\n return executeAtomicBatch === undefined || executor === undefined ?\n undefined\n : { executeAtomicBatch, executor };\n}\n\nfunction throwAtomicSqlProgramRegistrationMismatch(\n target: GraphBackend | TransactionBackend,\n registration: RegisteredAtomicSqlProgram | undefined,\n): never {\n const declaration = target.capabilities.execution.atomicBatch;\n throw new ConfigurationError(\n \"An atomic SQL program requires exact-session atomic-batch authority and a usable batch executor.\",\n {\n code: \"ATOMIC_SQL_PROGRAM_REGISTRATION_MISMATCH\",\n declared: declaration,\n registered: registration !== undefined,\n },\n {\n suggestion:\n 'Declare `atomicBatch: \"root\"` on an exact root executor or `\"session\"` on an already-open transaction session, then register that exact object.',\n },\n );\n}\n\nfunction declaredCommandSession(target: object): unknown {\n const commands = Reflect.get(target, \"commands\") as unknown;\n if (typeof commands !== \"object\" || commands === null) return;\n return Reflect.get(commands, \"session\") as unknown;\n}\n\n/**\n * Registers an atomic SQL program executor for one exact backend resource.\n *\n * The declaration and executable transport are checked together so a backend\n * cannot claim atomic execution while omitting the executor, nor expose\n * an executor without declaring the session on which it is valid. The\n * registration is keyed by object identity; derived backends and other\n * transaction sessions therefore do not resolve this program.\n */\nexport function registerAtomicSqlProgram<\n T extends GraphBackend | TransactionBackend,\n>(target: T, registration: AtomicSqlProgramRegistration): T {\n if (ATOMIC_SQL_PROGRAM_EXECUTORS.has(target)) {\n throw new ConfigurationError(\n \"An atomic SQL program is already registered for this exact backend resource.\",\n { code: \"ATOMIC_SQL_PROGRAM_ALREADY_REGISTERED\" },\n );\n }\n const executor = normalizeAtomicSqlProgramRegistration(registration);\n const declaration = target.capabilities.execution.atomicBatch;\n const declaredSession = declaredCommandSession(target);\n const sessionMatches =\n (declaration === \"root\" && declaredSession === \"root\") ||\n (declaration === \"session\" && declaredSession === \"transaction\");\n if (declaration === \"none\" || !sessionMatches || executor === undefined) {\n throwAtomicSqlProgramRegistrationMismatch(target, executor);\n }\n ATOMIC_SQL_PROGRAM_EXECUTORS.set(target, executor);\n return target;\n}\n\n/**\n * Resolves the static program executor for an exact registered resource.\n * Other transaction sessions and derived/projected backends return `undefined`.\n */\nexport function resolveAtomicSqlProgramExecutor(\n target: GraphBackend | TransactionBackend,\n): AtomicSqlProgramExecutor | undefined {\n return ATOMIC_SQL_PROGRAM_EXECUTORS.get(target)?.executor;\n}\n\n/** @internal Resolves the exact batch function registered on one resource. */\nexport function resolveRegisteredAtomicSqlBatchExecutor(\n target: GraphBackend | TransactionBackend,\n): AtomicSqlBatchExecutor | undefined {\n return ATOMIC_SQL_PROGRAM_EXECUTORS.get(target)?.executeAtomicBatch;\n}\n\n/** Returns whether this exact object owns a registered atomic SQL transport. */\nexport function hasAtomicSqlProgramRegistration(\n target: GraphBackend | TransactionBackend,\n): boolean {\n return ATOMIC_SQL_PROGRAM_EXECUTORS.has(target);\n}\n","/**\n * Exact-resource execution profile for closed semantic mutation programs.\n *\n * The transport-level atomic SQL executor answers only \"can this exact resource\n * submit a closed statement sequence atomically?\" This profile is the next\n * layer up: it names the TypeGraph mutations the backend can lower onto that\n * transport. Keeping every mutation family in one exact-resource registration\n * prevents each new operation from inventing another provenance WeakMap.\n */\nimport { ConfigurationError } from \"../../errors\";\nimport type {\n ClaimEdgeCardinalityParams,\n EdgeConvergenceMatch,\n EdgeRow,\n GraphBackend,\n InsertEdgeParams,\n InsertNodeParams,\n NodeInsertClaim,\n NodeInsertProjection,\n NodeRow,\n SchemaWriteFenceParams,\n TransactionBackend,\n} from \"../types\";\nimport { supportsAtomicBatch } from \"../types\";\nimport {\n hasAtomicSqlProgramRegistration,\n registerAtomicSqlProgram,\n resolveRegisteredAtomicSqlBatchExecutor,\n} from \"./atomic-sql-program\";\n\n/** How a node batch member obtained the identifier stored by its program. */\nexport type AtomicNodeBatchIdSource = \"generated\" | \"caller\";\n/** Whether a node batch returns only its count or its ordered postimages. */\nexport type AtomicNodeBatchResultMode = \"count\" | \"rows\";\n\n/** Independently provable claim semantics accepted by a node mutation family. */\nexport type AtomicNodeClaimFamily = \"disjointness\" | \"uniqueness\";\n\n/** Independently provable derived-storage families in a node program. */\nexport type AtomicNodeProjectionFamily = \"embedding\" | \"fulltext\";\n\n/**\n * One complete derived-storage transition attached to a node postimage.\n *\n * Identity stays on the containing row entry so a projection cannot target a\n * different node. Embedding deletes are explicit because updates and\n * caller-id resurrection can remove a value that previously existed.\n */\nexport type AtomicNodeProjection =\n | Extract<NodeInsertProjection, { kind: \"fulltext\" }>\n | Readonly<{\n kind: \"embedding\";\n action: \"upsert\";\n fieldPath: string;\n embedding: readonly number[];\n dimensions: number;\n metric: Extract<NodeInsertProjection, { kind: \"embedding\" }>[\"metric\"];\n indexType: Extract<\n NodeInsertProjection,\n { kind: \"embedding\" }\n >[\"indexType\"];\n }>\n | Readonly<{\n kind: \"embedding\";\n action: \"delete\";\n fieldPath: string;\n dimensions: number;\n metric: Extract<NodeInsertProjection, { kind: \"embedding\" }>[\"metric\"];\n indexType: Extract<\n NodeInsertProjection,\n { kind: \"embedding\" }\n >[\"indexType\"];\n }>;\n\n/** Closed derived-storage envelope advertised by one node executor. */\nexport type AtomicNodeProjectionSupport = Readonly<{\n families: readonly AtomicNodeProjectionFamily[];\n}>;\n\n/** Closed claim envelope advertised by one node mutation executor. */\nexport type AtomicNodeClaimSupport = Readonly<{\n /** Independently proved claim families; an omitted family is unsupported. */\n families: readonly AtomicNodeClaimFamily[];\n /**\n * Maximum compiled claim/probe bind cost one member may contribute to its\n * write gate.\n * Compute a member's required value with {@link atomicNodeClaimInputCost};\n * backend implementations must not reproduce the SQL cost formula.\n * Total batch size is deliberately absent: the executor chunks statements\n * inside one atomic transport submission.\n */\n maxInputCostPerEntry: number;\n}>;\n\nfunction isAtomicNodeClaimFamily(\n value: unknown,\n): value is AtomicNodeClaimFamily {\n return value === \"disjointness\" || value === \"uniqueness\";\n}\n\nfunction assertAtomicNodeClaimFamilies(\n family: keyof AtomicMutationProgramRegistration,\n name: string,\n value: unknown,\n): void {\n if (\n Array.isArray(value) &&\n new Set(value).size === value.length &&\n value.every((claimFamily) => isAtomicNodeClaimFamily(claimFamily))\n ) {\n return;\n }\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires distinct ${name}.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: name,\n value,\n },\n );\n}\n\nfunction assertAtomicNodeClaimSupport(\n family: \"createNodes\" | \"mutateNodes\" | \"replaceNodes\",\n value: unknown,\n): void {\n if (value === undefined) return;\n if (typeof value !== \"object\" || value === null) {\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires claimSupport metadata.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"claimSupport\",\n value,\n },\n );\n }\n const support = value as Readonly<Record<PropertyKey, unknown>>;\n assertAtomicNodeClaimFamilies(\n family,\n \"claimSupport.families\",\n support[\"families\"],\n );\n assertNonnegativeIntegerLimit(\n family,\n \"claimSupport.maxInputCostPerEntry\",\n support[\"maxInputCostPerEntry\"],\n );\n}\n\nfunction isAtomicNodeProjectionFamily(\n value: unknown,\n): value is AtomicNodeProjectionFamily {\n return value === \"embedding\" || value === \"fulltext\";\n}\n\nfunction assertAtomicNodeProjectionSupport(\n family: \"createNodes\" | \"mutateNodes\" | \"replaceNodes\" | \"updateNodes\",\n value: unknown,\n): void {\n if (value === undefined) return;\n if (typeof value !== \"object\" || value === null) {\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires projectionSupport metadata.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"projectionSupport\",\n value,\n },\n );\n }\n const families = (value as Readonly<Record<PropertyKey, unknown>>)[\n \"families\"\n ];\n if (\n !Array.isArray(families) ||\n new Set(families).size !== families.length ||\n !families.every((projectionFamily) =>\n isAtomicNodeProjectionFamily(projectionFamily),\n )\n ) {\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires distinct projection families.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"projectionSupport.families\",\n value: families,\n },\n );\n }\n}\n\n/** The one owner of claim-verdict to advertised-family correlation. */\nfunction atomicNodeClaimFamily(claim: NodeInsertClaim): AtomicNodeClaimFamily {\n return claim.verdict.kind;\n}\n\n/** Bind cost of one canonical claim row in an atomic node write gate. */\nconst ATOMIC_NODE_CANONICAL_CLAIM_INPUT_COST = 6;\n\n/** Bind cost of one legacy uniqueness compatibility probe. */\nconst ATOMIC_NODE_UNIQUENESS_PROBE_INPUT_COST = 9;\n\n/** Bind cost of one legacy disjointness compatibility probe. */\nconst ATOMIC_NODE_DISJOINTNESS_PROBE_INPUT_COST = 6;\n\n/** Exact compiled claim/probe bind cost one member contributes to its write gate. */\nexport function atomicNodeClaimInputCost(\n claims: readonly NodeInsertClaim[],\n): number {\n let cost = 0;\n for (const claim of claims) {\n cost += ATOMIC_NODE_CANONICAL_CLAIM_INPUT_COST;\n cost +=\n claim.verdict.kind === \"uniqueness\" ?\n ATOMIC_NODE_UNIQUENESS_PROBE_INPUT_COST *\n claim.verdict.probeAxes.filter((axis) => axis !== claim.axis).length\n : ATOMIC_NODE_DISJOINTNESS_PROBE_INPUT_COST *\n claim.verdict.conflictingKinds.length;\n }\n return cost;\n}\n\n/** Whether one executor explicitly accepts one member's complete claim set. */\nexport function supportsAtomicNodeClaims(\n support: AtomicNodeClaimSupport | undefined,\n claims: readonly NodeInsertClaim[],\n): boolean {\n if (claims.length === 0) return true;\n if (support === undefined) return false;\n const families = new Set(support.families);\n return (\n claims.every((claim) => families.has(atomicNodeClaimFamily(claim))) &&\n atomicNodeClaimInputCost(claims) <= support.maxInputCostPerEntry\n );\n}\n\n/** Whether an executor can admit at least one member of a claim family. */\nexport function supportsAtomicNodeClaimFamily(\n support: AtomicNodeClaimSupport | undefined,\n family: AtomicNodeClaimFamily,\n): boolean {\n return (\n (support?.maxInputCostPerEntry ?? 0) > 0 &&\n support?.families.includes(family) === true\n );\n}\n\n/** Whether one executor explicitly accepts every normalized projection. */\nexport function supportsAtomicNodeProjections(\n support: AtomicNodeProjectionSupport | undefined,\n families: readonly AtomicNodeProjectionFamily[],\n): boolean {\n if (families.length === 0) return true;\n if (support === undefined) return false;\n const advertised = new Set(support.families);\n return families.every((family) => advertised.has(family));\n}\n\n/** One normalized node-create member supplied to a semantic executor. */\nexport type AtomicNodeBatchEntry = Readonly<{\n idSource: AtomicNodeBatchIdSource;\n params: InsertNodeParams;\n /** Complete canonically ordered claims this row owes. */\n claims?: readonly NodeInsertClaim[];\n /** Complete derived-storage transitions owed by the written postimage. */\n projections?: readonly AtomicNodeProjection[];\n}>;\n\n/** Complete schema-fenced input to an atomic node-create family. */\nexport type AtomicNodeBatchInput = Readonly<{\n entries: readonly AtomicNodeBatchEntry[];\n resultMode: AtomicNodeBatchResultMode;\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Executes the complete eligible node-create family for one exact root. */\nexport interface AtomicNodeBatchExecutor {\n /** Claim semantics this executor can prove, omitted for plain rows only. */\n readonly claimSupport?: AtomicNodeClaimSupport;\n /** Derived-storage families this executor carries inside its program. */\n readonly projectionSupport?: AtomicNodeProjectionSupport;\n (\n input: AtomicNodeBatchInput & Readonly<{ resultMode: \"count\" }>,\n ): Promise<number>;\n (\n input: AtomicNodeBatchInput & Readonly<{ resultMode: \"rows\" }>,\n ): Promise<readonly NodeRow[]>;\n}\n\n/** One complete, preimage-free replacement supplied to a semantic executor. */\nexport type AtomicNodeReplacementEntry = Readonly<{\n params: InsertNodeParams;\n /** Complete canonically ordered claims the replacement postimage owes. */\n claims?: readonly NodeInsertClaim[];\n /** Complete derived-storage transitions owed by the replacement postimage. */\n projections?: readonly AtomicNodeProjection[];\n}>;\n\n/** Any node entry whose complete postimage drives projections/assertions. */\nexport type AtomicNodePostimageEntry =\n AtomicNodeBatchEntry | AtomicNodeReplacementEntry;\n\n/** Executes complete blind node replacements for one exact resource. */\nexport interface AtomicNodeReplacementBatchExecutor {\n /** Maximum members accepted by one atomic submission, including internal chunks. */\n readonly maxEntries: Readonly<{ plain: number; claimed: number }>;\n /** Exact no-SQL admission proof for the prepared replacement work. */\n readonly accepts?: (\n entries: readonly AtomicNodeReplacementEntry[],\n ) => boolean;\n /** Claim semantics this executor can prove, omitted for plain rows only. */\n readonly claimSupport?: AtomicNodeClaimSupport;\n /** Claim families whose earlier owner rows this program releases. */\n readonly releasedClaimFamilies?: readonly AtomicNodeClaimFamily[];\n /** Derived-storage families this executor carries inside its program. */\n readonly projectionSupport?: AtomicNodeProjectionSupport;\n (\n input: Readonly<{\n entries: readonly AtomicNodeReplacementEntry[];\n /** Whether earlier owner claims must be released before acquisition. */\n releaseClaims: boolean;\n schemaFence: SchemaWriteFenceParams;\n }>,\n ): Promise<readonly NodeRow[]>;\n}\n\n/** Count-returning input to an atomic direct edge-create family. */\nexport type AtomicEdgeBatchCountInput = Readonly<{\n claims: readonly ClaimEdgeCardinalityParams[];\n params: readonly InsertEdgeParams[];\n resultMode: \"count\";\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Postimage-returning input to an atomic direct edge-create family. */\nexport type AtomicEdgeBatchRowsInput = Readonly<{\n claims: readonly ClaimEdgeCardinalityParams[];\n params: readonly InsertEdgeParams[];\n resultMode: \"rows\";\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Executes complete eligible direct edge creates for one exact root. */\nexport interface AtomicEdgeBatchExecutor {\n (input: AtomicEdgeBatchCountInput): Promise<number>;\n (input: AtomicEdgeBatchRowsInput): Promise<readonly EdgeRow[]>;\n}\n\n/** One normalized durable edge-convergence member. */\nexport type AtomicEdgeConvergenceEntry = Readonly<{\n params: InsertEdgeParams;\n match: EdgeConvergenceMatch;\n}>;\n\n/** Authoritative row and outcome returned by durable convergence. */\nexport type AtomicEdgeConvergenceResult = Readonly<{\n row: EdgeRow;\n outcome: \"created\" | \"found\";\n}>;\n\n/** Complete schema-fenced durable edge-convergence input. */\nexport type AtomicEdgeConvergenceInput = Readonly<{\n kind: \"durable-convergence\";\n entries: readonly AtomicEdgeConvergenceEntry[];\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Complete schema-fenced direct edge-delete input. */\nexport type AtomicEdgeDeleteBatchInput = Readonly<{\n graphId: string;\n expectedKind: string;\n ids: readonly string[];\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Delete count plus explicit evidence that the schema fence matched. */\nexport type AtomicDeleteBatchResult = Readonly<{\n affectedCount: number;\n schemaFenceMatched: boolean;\n}>;\n\n/** Executes complete eligible direct edge deletes for one exact root. */\nexport type AtomicEdgeDeleteBatchExecutor = (\n input: AtomicEdgeDeleteBatchInput,\n) => Promise<AtomicDeleteBatchResult>;\n\n/** Complete schema-fenced direct node-delete input. */\nexport type AtomicNodeDeleteBatchInput = Readonly<{\n graphId: string;\n kind: string;\n ids: readonly string[];\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/**\n * Executes complete eligible direct node deletes for one exact root.\n *\n * Keep the callable as a function type intersected with its metadata. The API\n * compatibility inventory follows function aliases into their input types;\n * changing this to a callable interface would hide that contravariant edge.\n */\nexport type AtomicNodeDeleteBatchExecutor = Readonly<{\n /** Claim families whose owned sidecars this program releases. */\n releasedClaimFamilies?: readonly AtomicNodeClaimFamily[];\n}> &\n ((input: AtomicNodeDeleteBatchInput) => Promise<AtomicDeleteBatchResult>);\n\n/** One authoritative node preimage and replacement used by a resolved set. */\nexport type AtomicNodeResolvedUpdateEntry = Readonly<{\n graphId: string;\n kind: string;\n id: string;\n props: Readonly<Record<string, unknown>>;\n expectedVersion: number;\n /** Complete derived-storage transitions owed by the written postimage. */\n projections?: readonly AtomicNodeProjection[];\n}>;\n\n/** Executes a complete eligible resolved node update set. */\nexport interface AtomicNodeResolvedUpdateBatchExecutor {\n /** Maximum members accepted by one atomic submission, including internal chunks. */\n readonly maxEntries: number;\n /** Derived-storage families this executor carries inside its program. */\n readonly projectionSupport?: AtomicNodeProjectionSupport;\n (\n input: Readonly<{\n entries: readonly AtomicNodeResolvedUpdateEntry[];\n schemaFence: SchemaWriteFenceParams;\n }>,\n ): Promise<readonly NodeRow[]>;\n}\n\n/** One authoritative edge preimage and replacement used by a resolved set. */\nexport type AtomicEdgeResolvedUpdateEntry = Readonly<{\n existing: EdgeRow;\n props: Readonly<Record<string, unknown>>;\n}>;\n\n/** Executes a complete eligible resolved edge update set. */\nexport interface AtomicEdgeResolvedUpdateBatchExecutor {\n /** Maximum members accepted by one atomic submission, including internal chunks. */\n readonly maxEntries: number;\n (\n input: Readonly<{\n entries: readonly AtomicEdgeResolvedUpdateEntry[];\n schemaFence: SchemaWriteFenceParams;\n }>,\n ): Promise<readonly EdgeRow[]>;\n}\n\n/** Ordered node postimages returned by a mixed resolved mutation set. */\nexport type AtomicNodeResolvedMutationSetResult = Readonly<{\n created: readonly NodeRow[];\n updated: readonly NodeRow[];\n}>;\n\n/** Executes a complete eligible mixed node create/update set. */\nexport interface AtomicNodeResolvedMutationSetExecutor {\n /** Maximum total members accepted across the program's terminal assertions. */\n readonly maxEntries: number;\n /** Derived-storage families this executor carries inside its program. */\n readonly projectionSupport?: AtomicNodeProjectionSupport;\n (\n input: Readonly<{\n creates: readonly AtomicNodeBatchEntry[];\n updates: readonly AtomicNodeResolvedUpdateEntry[];\n schemaFence: SchemaWriteFenceParams;\n }>,\n ): Promise<AtomicNodeResolvedMutationSetResult>;\n}\n\n/** Ordered edge postimages returned by a mixed resolved mutation set. */\nexport type AtomicEdgeResolvedMutationSetResult = Readonly<{\n created: readonly EdgeRow[];\n updated: readonly EdgeRow[];\n}>;\n\n/** Complete schema-fenced input to a mixed resolved edge mutation set. */\nexport type AtomicEdgeResolvedMutationSetInput = Readonly<{\n kind: \"resolved-set\";\n creates: readonly InsertEdgeParams[];\n updates: readonly AtomicEdgeResolvedUpdateEntry[];\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Executes resolved edge sets and durable convergence for one exact root. */\nexport interface AtomicEdgeMutationProgramExecutor {\n readonly maxEntries: Readonly<{\n resolvedSet: number;\n durableConvergence: number;\n }>;\n (\n input: AtomicEdgeResolvedMutationSetInput,\n ): Promise<AtomicEdgeResolvedMutationSetResult>;\n (\n input: AtomicEdgeConvergenceInput,\n ): Promise<readonly AtomicEdgeConvergenceResult[]>;\n}\n\n/** Internal proof that the closed SQL program rejected a missing endpoint. */\nexport class AtomicEdgeBatchEndpointRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic edge batch endpoint validation failed\", { cause });\n this.name = \"AtomicEdgeBatchEndpointRefusalError\";\n }\n}\n\n/** Internal proof that the closed SQL program refused a cardinality claim. */\nexport class AtomicEdgeBatchCardinalityRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic edge batch cardinality validation failed\", { cause });\n this.name = \"AtomicEdgeBatchCardinalityRefusalError\";\n }\n}\n\n/** Internal proof that native convergence encountered a tombstoned winner. */\nexport class AtomicEdgeConvergenceTombstoneRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic edge convergence requires portable resurrection\", { cause });\n this.name = \"AtomicEdgeConvergenceTombstoneRefusalError\";\n }\n}\n\n/** Internal proof that an edge-delete input belongs to another collection. */\nexport class AtomicEdgeDeleteIdentityRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic edge delete batch identity validation failed\", { cause });\n this.name = \"AtomicEdgeDeleteIdentityRefusalError\";\n }\n}\n\n/** Internal proof that a restricted node still has a live connected edge. */\nexport class AtomicNodeDeleteRestrictedRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic node delete batch restriction validation failed\", { cause });\n this.name = \"AtomicNodeDeleteRestrictedRefusalError\";\n }\n}\n\n/**\n * The semantic mutation families one exact bundled root can lower today.\n * New families extend this profile instead of adding another root registry.\n */\nexport type AtomicMutationProgramExecutor = Readonly<{\n createNodes?: AtomicNodeBatchExecutor;\n replaceNodes?: AtomicNodeReplacementBatchExecutor;\n createEdges?: AtomicEdgeBatchExecutor;\n deleteNodes?: AtomicNodeDeleteBatchExecutor;\n deleteEdges?: AtomicEdgeDeleteBatchExecutor;\n updateNodes?: AtomicNodeResolvedUpdateBatchExecutor;\n updateEdges?: AtomicEdgeResolvedUpdateBatchExecutor;\n mutateNodes?: AtomicNodeResolvedMutationSetExecutor;\n mutateEdges?: AtomicEdgeMutationProgramExecutor;\n}>;\n\n/** Every independently enabled semantic variant in a mutation profile. */\nexport const ATOMIC_MUTATION_PROGRAM_VARIANTS = [\n \"createNodes\",\n \"replaceNodes\",\n \"createEdges\",\n \"deleteNodes\",\n \"deleteEdges\",\n \"updateNodes\",\n \"updateEdges\",\n \"mutateNodes\",\n \"mutateEdges.resolvedSet\",\n \"mutateEdges.durableConvergence\",\n] as const;\n\n/** One independently enabled semantic variant in a mutation profile. */\nexport type AtomicMutationProgramVariant =\n (typeof ATOMIC_MUTATION_PROGRAM_VARIANTS)[number];\n\n/** One owner for the overloaded edge-mutation input/variant correlation. */\nexport const ATOMIC_EDGE_MUTATION_VARIANT_BY_KIND = {\n \"durable-convergence\": \"mutateEdges.durableConvergence\",\n \"resolved-set\": \"mutateEdges.resolvedSet\",\n} as const satisfies Readonly<\n Record<\n | AtomicEdgeConvergenceInput[\"kind\"]\n | AtomicEdgeResolvedMutationSetInput[\"kind\"],\n Extract<AtomicMutationProgramVariant, `mutateEdges.${string}`>\n >\n>;\n\n/**\n * Owns which semantic variants a normalized profile can reach independently.\n *\n * A zero limit is an honest opt-out. Singleton updates reach the update-only\n * families directly on every exact root. Mixed resolved sets move their\n * collection-level read/partition/write unit into an interactive transaction;\n * an interactive root therefore cannot reach them, while an exact registered\n * `atomicBatch: \"session\"` target can. Conformance consumes this owner instead\n * of inferring session reachability from transaction availability.\n */\nexport function reachableAtomicMutationProgramVariants(\n profile: AtomicMutationProgramExecutor,\n execution: Pick<\n GraphBackend[\"capabilities\"][\"execution\"],\n \"atomicBatch\" | \"interactiveTransactions\"\n >,\n): readonly AtomicMutationProgramVariant[] {\n const variants: AtomicMutationProgramVariant[] = [];\n const resolvedMutationSetsReachable =\n !execution.interactiveTransactions || execution.atomicBatch === \"session\";\n if (profile.createNodes !== undefined) variants.push(\"createNodes\");\n if (\n (profile.replaceNodes?.maxEntries.plain ?? 0) > 0 ||\n (profile.replaceNodes?.maxEntries.claimed ?? 0) > 0\n ) {\n variants.push(\"replaceNodes\");\n }\n if (profile.createEdges !== undefined) variants.push(\"createEdges\");\n if (profile.deleteNodes !== undefined) variants.push(\"deleteNodes\");\n if (profile.deleteEdges !== undefined) variants.push(\"deleteEdges\");\n if ((profile.updateNodes?.maxEntries ?? 0) > 0) {\n variants.push(\"updateNodes\");\n }\n if ((profile.updateEdges?.maxEntries ?? 0) > 0) {\n variants.push(\"updateEdges\");\n }\n if (\n resolvedMutationSetsReachable &&\n (profile.mutateNodes?.maxEntries ?? 0) > 0\n ) {\n variants.push(\"mutateNodes\");\n }\n if (\n resolvedMutationSetsReachable &&\n (profile.mutateEdges?.maxEntries.resolvedSet ?? 0) > 0\n ) {\n variants.push(\"mutateEdges.resolvedSet\");\n }\n if ((profile.mutateEdges?.maxEntries.durableConvergence ?? 0) > 0) {\n variants.push(\"mutateEdges.durableConvergence\");\n }\n return variants;\n}\n\n/**\n * Semantic mutation families implemented by one exact backend root.\n *\n * Registering this profile is an explicit claim about TypeGraph write\n * semantics, not merely transport mechanics. Each optional member authorizes\n * only that family; omitted families retain the complete portable path.\n */\nexport type AtomicMutationProgramRegistration = Readonly<{\n createNodes?: AtomicNodeBatchExecutor | undefined;\n replaceNodes?: AtomicNodeReplacementBatchExecutor | undefined;\n createEdges?: AtomicEdgeBatchExecutor | undefined;\n deleteNodes?: AtomicNodeDeleteBatchExecutor | undefined;\n deleteEdges?: AtomicEdgeDeleteBatchExecutor | undefined;\n updateNodes?: AtomicNodeResolvedUpdateBatchExecutor | undefined;\n updateEdges?: AtomicEdgeResolvedUpdateBatchExecutor | undefined;\n mutateNodes?: AtomicNodeResolvedMutationSetExecutor | undefined;\n mutateEdges?: AtomicEdgeMutationProgramExecutor | undefined;\n}>;\n\nconst ATOMIC_MUTATION_PROGRAM_EXECUTORS = new WeakMap<\n object,\n AtomicMutationProgramExecutor\n>();\n\ntype AtomicMutationProgramDispatchObserver = (\n variant: AtomicMutationProgramVariant,\n) => void;\n\nconst ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS = new WeakMap<\n object,\n AtomicMutationProgramDispatchObserver\n>();\nconst INSTRUMENTED_ATOMIC_MUTATION_EXECUTOR_TARGETS = new WeakMap<\n object,\n object\n>();\n\nfunction reportAtomicMutationProgramDispatch(\n target: object,\n variant: AtomicMutationProgramVariant,\n): void {\n ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS.get(target)?.(variant);\n}\n\nfunction instrumentAtomicMutationProgramExecutors(\n target: object,\n profile: AtomicMutationProgramRegistration,\n): AtomicMutationProgramExecutor {\n type Descriptor = Readonly<{\n variant: (input: unknown) => AtomicMutationProgramVariant;\n }>;\n const descriptors = {\n createEdges: { variant: () => \"createEdges\" },\n createNodes: { variant: () => \"createNodes\" },\n replaceNodes: { variant: () => \"replaceNodes\" },\n deleteEdges: { variant: () => \"deleteEdges\" },\n deleteNodes: { variant: () => \"deleteNodes\" },\n mutateEdges: {\n variant: (input: unknown) =>\n ATOMIC_EDGE_MUTATION_VARIANT_BY_KIND[\n (\n input as\n AtomicEdgeConvergenceInput | AtomicEdgeResolvedMutationSetInput\n ).kind\n ],\n },\n mutateNodes: { variant: () => \"mutateNodes\" },\n updateEdges: { variant: () => \"updateEdges\" },\n updateNodes: { variant: () => \"updateNodes\" },\n } as const satisfies Record<\n keyof AtomicMutationProgramRegistration,\n Descriptor\n >;\n\n function instrument<TExecutor extends object>(\n source: TExecutor,\n descriptor: Descriptor,\n ): TExecutor {\n if (INSTRUMENTED_ATOMIC_MUTATION_EXECUTOR_TARGETS.get(source) === target) {\n return source;\n }\n const callable = source as unknown as (\n ...arguments_: readonly unknown[]\n ) => unknown;\n const instrumented = new Proxy(callable, {\n apply(sourceExecutor, thisArgument, argumentsList) {\n reportAtomicMutationProgramDispatch(\n target,\n descriptor.variant(argumentsList[0]),\n );\n return Reflect.apply(sourceExecutor, thisArgument, argumentsList);\n },\n });\n INSTRUMENTED_ATOMIC_MUTATION_EXECUTOR_TARGETS.set(instrumented, target);\n return instrumented as unknown as TExecutor;\n }\n\n const entries = ATOMIC_MUTATION_PROGRAM_FAMILIES.flatMap((family) => {\n const executor = profile[family];\n return executor === undefined ?\n []\n : [[family, instrument(executor, descriptors[family])] as const];\n });\n return Object.freeze(\n Object.fromEntries(entries) as AtomicMutationProgramExecutor,\n );\n}\n\n/** @internal Runs work while observing dispatches from this exact resource. */\nexport async function withAtomicMutationProgramDispatchObserver<TResult>(\n target: object,\n observer: AtomicMutationProgramDispatchObserver,\n run: () => TResult | PromiseLike<TResult>,\n): Promise<TResult> {\n if (ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS.has(target)) {\n throw new ConfigurationError(\n \"Atomic mutation program dispatch observation is already active for this exact resource.\",\n { code: \"ATOMIC_MUTATION_PROGRAM_OBSERVER_ALREADY_ACTIVE\" },\n );\n }\n ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS.set(target, observer);\n try {\n return await run();\n } finally {\n ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS.delete(target);\n }\n}\n\nconst ATOMIC_MUTATION_PROGRAM_FAMILIES = [\n \"createNodes\",\n \"replaceNodes\",\n \"createEdges\",\n \"deleteNodes\",\n \"deleteEdges\",\n \"updateNodes\",\n \"updateEdges\",\n \"mutateNodes\",\n \"mutateEdges\",\n] as const satisfies readonly (keyof AtomicMutationProgramRegistration)[];\n\nfunction assertNonnegativeIntegerLimit(\n family: keyof AtomicMutationProgramRegistration,\n name: string,\n value: unknown,\n): void {\n if (typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0) {\n return;\n }\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires a nonnegative integer ${name}.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: name,\n value,\n },\n );\n}\n\nfunction assertAtomicMutationProgramLimits(\n family: keyof AtomicMutationProgramRegistration,\n executor: AtomicMutationProgramRegistration[typeof family],\n): void {\n if (executor === undefined) return;\n if (family === \"createNodes\" || family === \"replaceNodes\") {\n const nodeExecutor = executor as\n AtomicNodeBatchExecutor | AtomicNodeReplacementBatchExecutor;\n assertAtomicNodeClaimSupport(family, nodeExecutor.claimSupport);\n assertAtomicNodeProjectionSupport(family, nodeExecutor.projectionSupport);\n if (family === \"replaceNodes\") {\n const replacementExecutor =\n nodeExecutor as AtomicNodeReplacementBatchExecutor;\n const releasedClaimFamilies = replacementExecutor.releasedClaimFamilies;\n if (releasedClaimFamilies !== undefined) {\n assertAtomicNodeClaimFamilies(\n family,\n \"releasedClaimFamilies\",\n releasedClaimFamilies,\n );\n }\n const maxEntries = (\n replacementExecutor as unknown as Readonly<Record<string, unknown>>\n )[\"maxEntries\"];\n if (typeof maxEntries !== \"object\" || maxEntries === null) {\n throw new ConfigurationError(\n \"Atomic mutation program family replaceNodes requires maxEntries metadata.\",\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"maxEntries\",\n value: maxEntries,\n },\n );\n }\n const limits = maxEntries as Readonly<Record<string, unknown>>;\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries.plain\",\n limits[\"plain\"],\n );\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries.claimed\",\n limits[\"claimed\"],\n );\n const accepts = (executor as AtomicNodeReplacementBatchExecutor).accepts;\n if (accepts !== undefined && typeof accepts !== \"function\") {\n throw new ConfigurationError(\n \"Atomic mutation program family replaceNodes requires a callable accepts predicate.\",\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"accepts\",\n value: accepts,\n },\n );\n }\n }\n return;\n }\n if (family === \"deleteNodes\") {\n const releasedClaimFamilies: unknown = (\n executor as AtomicNodeDeleteBatchExecutor\n ).releasedClaimFamilies;\n if (releasedClaimFamilies !== undefined) {\n assertAtomicNodeClaimFamilies(\n family,\n \"releasedClaimFamilies\",\n releasedClaimFamilies,\n );\n }\n return;\n }\n if (\n family === \"updateNodes\" ||\n family === \"updateEdges\" ||\n family === \"mutateNodes\"\n ) {\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries\",\n (executor as Readonly<{ maxEntries: unknown }>).maxEntries,\n );\n if (family === \"updateNodes\" || family === \"mutateNodes\") {\n assertAtomicNodeProjectionSupport(\n family,\n (\n executor as\n | AtomicNodeResolvedMutationSetExecutor\n | AtomicNodeResolvedUpdateBatchExecutor\n ).projectionSupport,\n );\n }\n return;\n }\n if (family === \"mutateEdges\") {\n const limits: unknown = (executor as AtomicEdgeMutationProgramExecutor)\n .maxEntries;\n if (typeof limits !== \"object\" || limits === null) {\n throw new ConfigurationError(\n \"Atomic mutation program family mutateEdges requires maxEntries limits.\",\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"maxEntries\",\n value: limits,\n },\n );\n }\n const edgeLimits = limits as Readonly<Record<PropertyKey, unknown>>;\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries.resolvedSet\",\n edgeLimits[\"resolvedSet\"],\n );\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries.durableConvergence\",\n edgeLimits[\"durableConvergence\"],\n );\n }\n}\n\nfunction normalizeAtomicMutationProgramRegistration(\n registration: AtomicMutationProgramRegistration,\n): AtomicMutationProgramExecutor {\n const uncheckedRegistration: unknown = registration;\n if (\n typeof uncheckedRegistration !== \"object\" ||\n uncheckedRegistration === null\n ) {\n throw new ConfigurationError(\n \"An atomic mutation program registration must be an object.\",\n { code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\" },\n );\n }\n const entries: [\n keyof AtomicMutationProgramRegistration,\n NonNullable<\n AtomicMutationProgramRegistration[keyof AtomicMutationProgramRegistration]\n >,\n ][] = [];\n for (const family of ATOMIC_MUTATION_PROGRAM_FAMILIES) {\n const executor = registration[family];\n if (executor === undefined) continue;\n if (typeof executor !== \"function\") {\n throw new ConfigurationError(\n `Atomic mutation program family ${family} must be callable.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n },\n );\n }\n assertAtomicMutationProgramLimits(family, executor);\n entries.push([family, executor]);\n }\n if (entries.length === 0) {\n throw new ConfigurationError(\n \"An atomic mutation program registration must implement at least one semantic family.\",\n { code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\" },\n );\n }\n return Object.freeze(\n Object.fromEntries(entries) as AtomicMutationProgramExecutor,\n );\n}\n\nfunction throwAtomicMutationProgramRegistrationMismatch(\n target: GraphBackend | TransactionBackend,\n): never {\n throw new ConfigurationError(\n \"Atomic mutation programs require an exact backend session with a registered atomic SQL transport.\",\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n atomicBatch: target.capabilities.execution.atomicBatch,\n transportRegistered: hasAtomicSqlProgramRegistration(target),\n },\n {\n suggestion:\n \"Register and validate the exact-session atomic SQL transport before registering only the TypeGraph mutation families this backend implements.\",\n },\n );\n}\n\n/**\n * Registers TypeGraph semantic mutation programs for one exact backend resource.\n *\n * Transport registration proves atomic statement dispatch only. This second,\n * explicit profile declares which graph mutation families preserve their\n * complete schema-fence, validation, side-effect, refusal, and result-ordering\n * contracts. Object-identity registration prevents derived, projected, and\n * other transaction sessions from inheriting execution evidence.\n */\nexport function registerAtomicMutationPrograms<\n T extends GraphBackend | TransactionBackend,\n>(target: T, registration: AtomicMutationProgramRegistration): T {\n if (\n !supportsAtomicBatch(target) ||\n !hasAtomicSqlProgramRegistration(target)\n ) {\n throwAtomicMutationProgramRegistrationMismatch(target);\n }\n if (ATOMIC_MUTATION_PROGRAM_EXECUTORS.has(target)) {\n throw new ConfigurationError(\n \"Atomic mutation programs are already registered for this exact backend resource.\",\n { code: \"ATOMIC_MUTATION_PROGRAM_ALREADY_REGISTERED\" },\n );\n }\n ATOMIC_MUTATION_PROGRAM_EXECUTORS.set(\n target,\n instrumentAtomicMutationProgramExecutors(\n target,\n normalizeAtomicMutationProgramRegistration(registration),\n ),\n );\n return target;\n}\n\n/** Returns whether this exact resource owns a semantic program profile. */\nexport function hasAtomicMutationProgramRegistration(\n target: GraphBackend | TransactionBackend,\n): boolean {\n return ATOMIC_MUTATION_PROGRAM_EXECUTORS.has(target);\n}\n\n/** Resolves semantic mutation programs only for their exact registered resource. */\nexport function resolveAtomicMutationPrograms(\n target: GraphBackend | TransactionBackend,\n): AtomicMutationProgramExecutor | undefined {\n return ATOMIC_MUTATION_PROGRAM_EXECUTORS.get(target);\n}\n\n/**\n * Re-registers exact-session evidence on a transparent transaction wrapper.\n *\n * Session authority is never inherited implicitly: the wrapper seam calls\n * this only after deriving a backend that forwards to the same pinned command\n * session. Root registrations remain non-transferable.\n *\n * @internal\n */\nexport function carryAtomicMutationSessionRegistration<\n T extends TransactionBackend,\n>(base: TransactionBackend, derived: T): T {\n if (\n base.capabilities.execution.atomicBatch !== \"session\" ||\n derived.capabilities.execution.atomicBatch !== \"session\"\n ) {\n return derived;\n }\n const executeAtomicBatch = resolveRegisteredAtomicSqlBatchExecutor(base);\n const profile = resolveAtomicMutationPrograms(base);\n if (executeAtomicBatch === undefined || profile === undefined) return derived;\n registerAtomicSqlProgram(derived, executeAtomicBatch);\n registerAtomicMutationPrograms(derived, profile);\n return derived;\n}\n\n/**\n * @internal Test-only compatibility seam.\n *\n * Production factories must use registerAtomicMutationPrograms() so transport,\n * declaration, shape, and duplicate-registration validation cannot be skipped.\n */\nexport function markBundledRootAtomicMutationPrograms<T extends object>(\n target: T,\n executor: Readonly<{\n createNodes?: AtomicNodeBatchExecutor | undefined;\n replaceNodes?: AtomicNodeReplacementBatchExecutor | undefined;\n createEdges?: AtomicEdgeBatchExecutor | undefined;\n deleteNodes?: AtomicNodeDeleteBatchExecutor | undefined;\n deleteEdges?: AtomicEdgeDeleteBatchExecutor | undefined;\n updateNodes?: AtomicNodeResolvedUpdateBatchExecutor | undefined;\n updateEdges?: AtomicEdgeResolvedUpdateBatchExecutor | undefined;\n mutateNodes?: AtomicNodeResolvedMutationSetExecutor | undefined;\n mutateEdges?: AtomicEdgeMutationProgramExecutor | undefined;\n }>,\n): T {\n ATOMIC_MUTATION_PROGRAM_EXECUTORS.set(\n target,\n instrumentAtomicMutationProgramExecutors(target, executor),\n );\n return target;\n}\n\n/** @internal Compatibility seam for bundled-factory and backend tests. */\nexport function resolveBundledRootAtomicMutationPrograms(\n target: GraphBackend | TransactionBackend,\n): AtomicMutationProgramExecutor | undefined {\n return resolveAtomicMutationPrograms(target);\n}\n\n/** @internal Narrow test seam over the single mutation-program registry. */\nexport function markBundledRootAtomicNodeBatch<T extends object>(\n target: T,\n executor: AtomicNodeBatchExecutor,\n): T {\n const existing = ATOMIC_MUTATION_PROGRAM_EXECUTORS.get(target);\n return markBundledRootAtomicMutationPrograms(target, {\n ...existing,\n createNodes: executor,\n });\n}\n\n/** @internal Narrow test seam over the single mutation-program registry. */\nexport function markBundledRootAtomicEdgeBatch<T extends object>(\n target: T,\n executor: AtomicEdgeBatchExecutor,\n): T {\n const existing = ATOMIC_MUTATION_PROGRAM_EXECUTORS.get(target);\n return markBundledRootAtomicMutationPrograms(target, {\n ...existing,\n createEdges: executor,\n });\n}\n\n/** @internal Narrow test seam over the single mutation-program registry. */\nexport function resolveBundledRootAtomicNodeBatch(\n target: GraphBackend | TransactionBackend,\n): AtomicNodeBatchExecutor | undefined {\n return resolveAtomicMutationPrograms(target)?.createNodes;\n}\n\n/** @internal Narrow test seam over the single mutation-program registry. */\nexport function resolveBundledRootAtomicEdgeBatch(\n target: GraphBackend | TransactionBackend,\n): AtomicEdgeBatchExecutor | undefined {\n return resolveAtomicMutationPrograms(target)?.createEdges;\n}\n"]}