{"version":3,"sources":["../src/backend/member-classes.ts","../src/store/operations/write-members.ts","../src/backend/serialized-execution-queue.ts","../src/backend/drizzle/base-schema.ts","../src/backend/drizzle/columns/fulltext.ts","../src/backend/drizzle/schema/postgres.ts","../src/backend/drizzle/schema/sqlite.ts","../src/backend/drizzle/ddl.ts","../src/backend/drizzle/contribution-materializations.ts","../src/backend/drizzle/engine/assembly.ts","../src/backend/capabilities/declarations.ts","../src/backend/drizzle/engine/capabilities.ts","../src/backend/drizzle/engine/marks.ts","../src/backend/drizzle/engine/members/base-schema-members.ts","../src/backend/drizzle/postgres-schema-write-fence.ts","../src/backend/drizzle/operations/shared.ts","../src/backend/drizzle/operations/atomic-node-claims.ts","../src/backend/drizzle/operations/clear.ts","../src/backend/drizzle/operations/collections.ts","../src/backend/drizzle/operations/constraint-fence-audit.ts","../src/backend/drizzle/operations/edge-claims.ts","../src/backend/drizzle/operations/edges.ts","../src/backend/drizzle/operations/fulltext.ts","../src/backend/drizzle/operations/hybrid.ts","../src/backend/drizzle/operations/nodes.ts","../src/backend/drizzle/operations/uniques.ts","../src/backend/drizzle/operations/node-projections.ts","../src/backend/drizzle/operations/schema.ts","../src/backend/drizzle/operations/strategy.ts","../src/backend/drizzle/engine/members/contribution-members.ts","../src/backend/drizzle/engine/members/graph-template-members.ts","../src/backend/drizzle/engine/members/identity-members.ts","../src/backend/drizzle/index-materializations.ts","../src/backend/drizzle/engine/members/index-materialization-members.ts","../src/backend/drizzle/kind-removals.ts","../src/backend/drizzle/engine/members/kind-removal-members.ts","../src/backend/edge-endpoint-sets.ts","../src/backend/drizzle/operations/contribution-evidence.ts","../src/backend/drizzle/operation-backend-core.ts","../src/backend/drizzle/engine/members/schema-version-members.ts","../src/backend/drizzle/engine/create-sql-backend.ts","../src/backend/drizzle/engine/derive-profile.ts","../src/backend/live-node-candidates.ts","../src/backend/drizzle/engine/members/fulltext-members.ts","../src/backend/drizzle/vector-runtime.ts","../src/backend/drizzle/engine/members/vector-members.ts","../src/backend/drizzle/engine/operation-layer.ts","../src/backend/drizzle/engine/profile.ts","../src/backend/drizzle/execution/lru.ts","../src/backend/drizzle/execution/postgres-execution.ts","../src/backend/drizzle/execution/session-atomic-batch.ts","../src/backend/drizzle/execution/statement-queue.ts","../src/backend/drizzle/graph-template-sql.ts","../src/backend/drizzle/trusted-import.ts","../src/backend/drizzle/postgres.ts","../src/backend/drizzle/libsql-client.ts","../src/backend/drizzle/execution/sqlite-execution.ts","../src/backend/drizzle/sqlite.ts"],"names":["createAsyncContextLoader","ConfigurationError","BackendDisposedError","CompilerInvariantError","BaseSchemaMigrationError","index","customType","assertNoSystemIndexNameCollision","nodes","pgTable","text","jsonb","integer","timestamp","primaryKey","buildPostgresSystemIndexBuilders","buildPostgresNodeIndexBuilders","edges","uniqueIndex","systemIndexName","check","sql","buildPostgresEdgeIndexBuilders","recordedNodes","bigint","recordedEdges","recordedClock","uniques","edgeClaims","schemaVersions","boolean","fulltext","DEFAULT_TABLE_NAMES","sqliteTable","buildSqliteSystemIndexBuilders","buildSqliteNodeIndexBuilders","buildSqliteEdgeIndexBuilders","tables","getSqliteTableConfig","chunk","is","SQLiteTable","fts5Strategy","BASE_CONTRIBUTION_OWNER","getPgTableConfig","PgTable","tsvectorStrategy","formatPostgresTimestamp","sortedReplacer","DEPLOYMENT_CONTRIBUTION_GRAPH_ID","quotedTableName","errorChain","deriveTransactionSessionBackend","sha256Hex","StoreNotInitializedError","nowIso","isMissingTableError","ContributionUnavailableError","resolveWriteFencePlan","requireWriteFence","asCompiledRowsSql","asCompiledStatementSql","requireFenceLockTables","buildForeignFulltextGraphProbe","ContributionRebuildUnsupportedError","stamps","rebuilt","buildFulltextGraphDelete","isOptimisticRetryTier","runRetriedUnit","OPTIMISTIC_RETRY_ATTEMPTS","createAtomicSqlProgramExecutor","deriveUnitOfWork","buildVectorCapabilities","buildFulltextCapabilities","markFirstPartyFactory","markSchemaFencedInsertEligibleUnderFence","markBundledRootAutocommitEligible","supportsRootAtomicBatch","registerAtomicSqlProgram","registerAtomicMutationPrograms","requireDefined","toDrizzleSql","getTableName","getDialect","existingColumn","claimOwnerMatchesSql","EDGE_CARDINALITY_SPECS","qualified","edgeCardinalityClaimTarget","schemaFenceCte","resolveStampedValidityLowerBound","resolveStatedValidityLowerBound","rowPropsToJsonText","isSqlFragment","toNodeRow","coerceNumericScore","qualifiedColumn","jsonPointer","drizzleSqlTag","ownerColumnNames","excludedColumn","encodeTupleKey","key","group","CLAIM_INPUT_COLUMNS","claimInputCte","nodeInserted","buildHardDeleteUniquesByConcreteKind","isPresent","and","eq","toSchemaVersionRow","atomicNodeClaimInputCost","DatabaseOperationError","isDuplicatePrimaryKeyError","isDuplicateUniqueIndexError","EdgeMatchIdentityConflictError","isNotNullColumnViolation","AtomicEdgeBatchEndpointRefusalError","AtomicEdgeBatchCardinalityRefusalError","AtomicEdgeDeleteIdentityRefusalError","AtomicNodeDeleteRestrictedRefusalError","edgeClaimRelationMissing","isEdgeMatchIdentityStorageUnavailableError","StaleVersionError","countSchemaKindRows","compareClaimTargets","isSameClaimOwner","DisjointError","UniquenessError","claimGateForChunk","supportsAtomicNodeClaims","projectionSlots","projectionEvidenceSlots","assertionSlots","nodeSlots","program","rows","slots","edgeSlotIndexes","AtomicEdgeConvergenceTombstoneRefusalError","buildLockSchemaVersionAndGraphWrite","normalizeGraphCommandIsolation","executeEdgeCardinalityInsert","buildInsertNodeWithProjections","rephaseNonTransactionalNodeClaimPlan","query","drizzleSql","row","assertGraphCommandExecutionContext","assertGraphCommandCoordination","assertGraphCommandConvergenceIsolation","resolvedNodeUpdateBatchFitsBindBudget","SchemaContentConflictError","MigrationError","deriveBackend","writeFenceDeclarationLine","isFirstPartyProfile","auditBackendResource","registerSerializationFailureClassifier","parseDimensionMismatch","EmbeddingDimensionChangedError","assertVectorSearchLimit","entityKind","compileQueryWithDialect","executeNeonAtomicBatch","executeInteractiveAtomicBatch","executeCompiled","shouldForceCustomPlan","TransactionClosedError","advisoryLockSingleExpression","TrustedImportError","isPostgresConcurrentDdlRaceError","sqlValueList","isInsufficientResourcesError","pgvectorStrategy","createNodeRowMapper","POSTGRES_ROW_MAPPER_CONFIG","createEdgeRowMapper","createUniqueRowMapper","createSchemaVersionRowMapper","resolveDeclaredBackendResource","POSTGRES_CAPABILITIES","POSTGRES_MAX_BIND_PARAMETERS","normalizeGraphAnalyticsCapabilities","DATABASE_EXTENSION_NAMES","lte","sinceIndexAdoptionDdl","inArray","isNull","resolveBatchWriteVerdict","batchRefusalSuffix","batchRefusalDetails","carryAtomicMutationSessionRegistration","options","INTERNAL_TEMPORARY_WRITES","PgTransaction","SchemaFenceTimeoutError","postgresFenceSql","registerFirstPartyProfile","resolveEfSearchOverride","vectorSearchFrontierTuning","RECORDED_GRAPH_WRITE_ADVISORY_LOCK_NAMESPACE","assertPgvectorEfSearch","annIndexScanTypes","scopeAtomicBatchToSession","DURABLE_OBJECT_MAX_BIND_PARAMETERS","D1_MAX_BIND_PARAMETERS","SQLITE_MAX_BIND_PARAMETERS","MODERN_SQLITE_MAX_BIND_PARAMETERS","executeDrizzleQuery","executeCompiledRun","executePreparedRunBatch","NODE_INSERT_PARAM_COUNT","SCHEMA_FENCE_PARAM_COUNT","SCHEMA_COMMIT_FENCE_NAMESPACE","EDGE_INSERT_PARAM_COUNT","GET_NODES_FIXED_PARAM_COUNT","GET_EDGES_FIXED_PARAM_COUNT","CHECK_UNIQUE_BATCH_FIXED_PARAM_COUNT","FULLTEXT_UPSERT_PARAM_COUNT","FULLTEXT_DELETE_FIXED_PARAM_COUNT","UNIQUE_DELETE_FIXED_PARAM_COUNT","UNIQUE_INSERT_PARAM_COUNT","SQLITE_ROW_MAPPER_CONFIG","toEdgeRow","toUniqueRow","SQLITE_CAPABILITIES","isSqliteDuplicateEdgeMatchIdentityColumnError","createTransactionBackend","BaseSQLiteDatabase","SQLiteTransaction","engineSerializedWriterSlotStatement","isSqliteWriterSlotBusy","isSqliteNotAuthorizedError","downgradeAtomicBatch"],"mappings":"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","file":"chunk-7MQL7FEN.cjs","sourcesContent":["/**\n * The TOTAL, DISJOINT classification of every {@link GraphBackend} member.\n *\n * The write pipeline bans a set of backend members outside the sanctioned\n * seam, and that ban is only as honest as the list it is computed from. A\n * hand-kept list drifts (a new sidecar write is added and nobody adds it to\n * the ban); a list derived from parameter shapes derives the wrong answers\n * (`CheckUniqueParams` is structurally assignable to `DeleteUniqueParams`, so\n * `checkUnique` — a READ that `WriteTarget` deliberately exposes — comes out\n * classified as a mutation, while `insertUniqueBatch`, a live sidecar write,\n * is missed). Structural assignability cannot express \"this exact parameter\n * shape\", so the derivation is abandoned in favour of an explicit partition\n * whose two defining properties are pinned at compile time:\n *\n * - **Totality.** Every `keyof GraphBackend` is in some class. Adding a\n *   backend member without classifying it fails `pnpm typecheck`, so whoever\n *   adds the member is the one who decides whether it is a write.\n * - **Disjointness.** No member is in two classes, so \"the union of the three\n *   write classes\" is a partition of the write surface rather than an\n *   over-count.\n *\n * This lives beside the type it classifies rather than beside its consumer:\n * `src/backend/**` is outside every write-pipeline lint scope (it *is* the\n * backend, and its files legitimately call these members), so the module is\n * data, not a call site.\n *\n * The existing facet types are not a substitute. They cover a strict subset of\n * the members and they deliberately overlap (`compileSql` is in both\n * `RawQueryExecutionBackend` and `SqlCompilationBackend`): a facet is a\n * capability PROJECTION, this is a PARTITION. Different jobs, different\n * module.\n */\nimport {\n  type Assert,\n  type ContainsAll,\n  type Equal,\n} from \"../utils/type-assert\";\nimport type { CLAIMS } from \"./capabilities/bundle-registry\";\nimport { type GraphBackend } from \"./types\";\n\n/** Static description of the backend, not an operation. */\nconst IDENTITY_MEMBERS = [\n  \"dialect\",\n  \"capabilities\",\n  \"tableNames\",\n  \"fulltextStrategy\",\n  \"vectorStrategy\",\n  \"fenceSql\",\n] as const satisfies readonly (keyof GraphBackend)[];\n\n/**\n * Reads. `checkUnique` / `checkUniqueBatch` are here on purpose: they PROBE a\n * uniqueness key and write nothing, which is what makes `WriteTarget`'s\n * `Pick<UniqueConstraintBackend, \"checkUnique\" | \"checkUniqueBatch\">` coherent\n * with the ban instead of contradicting it.\n */\nconst READ_MEMBERS = [\n  \"getNode\",\n  \"getNodes\",\n  \"findNodesByKind\",\n  \"countNodesByKind\",\n  \"getEdge\",\n  \"getEdges\",\n  \"countEdgesFrom\",\n  \"countEdgesByKind\",\n  \"edgeExistsBetween\",\n  \"findEdgesConnectedTo\",\n  \"findEdgesByKind\",\n  \"findEdgesByEndpointSet\",\n  \"findEdgesByHeterogeneousEndpointSet\",\n  \"checkUnique\",\n  \"checkUniqueBatch\",\n  \"vectorSearch\",\n  \"fulltextSearch\",\n  \"hybridSearch\",\n  \"getActiveSchema\",\n  \"getSchemaVersion\",\n  \"getIndexMaterialization\",\n  \"getIndexMaterializations\",\n  \"getContributionMaterialization\",\n  \"getReconciliationMarker\",\n  \"getAllKindRemovals\",\n  \"getPendingKindRemovals\",\n  \"probeContributions\",\n  \"verifyContributions\",\n  // The constraint-fence AUDIT read. `verifyConstraintFences()` reports\n  // contended claim axes without touching them, so it is a probe like\n  // `checkUnique` — and for the same reason it must NOT be a write member: the\n  // audit runs from `store.ts`, outside any write frame.\n  \"readConstraintFenceViolations\",\n] as const satisfies readonly (keyof GraphBackend)[];\n\n/**\n * Graph-entity writes: the node and edge rows themselves. Pinned equal to the\n * recorded-capture write checklist in `write-members.ts` — one owner for \"what\n * is a graph-entity write\", so the capture overlay and the pipeline ban cannot\n * disagree about it.\n */\nexport const ENTITY_WRITE_MEMBERS = [\n  \"insertNode\",\n  \"insertNodeIfAbsent\",\n  \"insertNodeIfAbsentWithSchemaFence\",\n  \"insertNodeWithSchemaFence\",\n  \"commands\",\n  \"insertNodeNoReturn\",\n  \"insertNodesBatch\",\n  \"insertNodesBatchReturning\",\n  \"updateNode\",\n  \"upsertHeterogeneousNodes\",\n  \"updateResolvedNodesBatch\",\n  \"compareAndSetNode\",\n  \"updateNodeSet\",\n  \"deleteNode\",\n  \"hardDeleteNode\",\n  \"insertEdge\",\n  \"insertEdgeNoReturn\",\n  \"insertEdgesBatch\",\n  \"insertEdgesBatchReturning\",\n  \"insertEdgesDurableBatchReturning\",\n  \"updateEdge\",\n  \"deleteEdge\",\n  \"deleteEdgesBatch\",\n  \"hardDeleteEdge\",\n  \"hardDeleteEdgesBatch\",\n] as const satisfies readonly (keyof GraphBackend)[];\n\n/**\n * Derived-data writes a graph-entity write obliges: CLAIM reservations,\n * embeddings, fulltext. These are the sidecars the fused session methods apply\n * — never something a write path may issue on its own.\n *\n * The claim relations are here, not in a class of their own, because a claim IS\n * derived data a row write obliges: the row and the claim rows that fence it are\n * written as one unit, at placements the claim entry decides, and a path that\n * issued one without the other is precisely the defect the seam closes. Both\n * relations are covered — the `uniques` relation (node uniqueness and\n * `disjointWith` claims) and the `edge_claims` relation (edge cardinality) — so\n * neither family can be written from outside a step or sidecar module.\n */\nexport const SIDECAR_WRITE_MEMBERS = [\n  \"insertUnique\",\n  \"insertUniqueBatch\",\n  \"deleteUnique\",\n  \"hardDeleteUniquesByNodeIds\",\n  \"hardDeleteUniquesByConcreteKind\",\n  \"claimEdgeCardinality\",\n  \"claimEdgeCardinalityGuarded\",\n  \"claimEdgeCardinalityBatch\",\n  \"purgeEdgeClaims\",\n  \"upsertEmbedding\",\n  \"upsertEmbeddingBatch\",\n  \"deleteEmbedding\",\n  \"deleteEmbeddingBatch\",\n  \"upsertFulltext\",\n  \"upsertFulltextBatch\",\n  \"deleteFulltext\",\n  \"deleteFulltextBatch\",\n] as const satisfies readonly (keyof GraphBackend)[];\n\n/**\n * Backend-owned bulk ingestion. `trustedImport` writes graph rows, so it IS a\n * write and is banned outside its declared exemption — leaving it unclassified\n * as a write would make the ban's coverage a lie. It gets its own class\n * because it is an all-or-nothing session that takes the managed-write fence\n * itself and requires empty tables, so no `WritePlan` applies to it.\n */\nexport const BULK_WRITE_MEMBERS = [\n  \"trustedImport\",\n] as const satisfies readonly (keyof GraphBackend)[];\n\n/**\n * Projection maintenance. `rebuildContribution` / `repairContributions`\n * rebuild a whole projection from the rows, take their own fences, and are\n * reached from `store.*` maintenance APIs — never from a row write.\n */\nconst MAINTENANCE_MEMBERS = [\n  \"recordIndexMaterialization\",\n  \"claimIndexMaterialization\",\n  \"releaseIndexMaterializationClaim\",\n  \"recordContributionMaterialization\",\n  \"rebuildContribution\",\n  \"repairContributions\",\n  \"recordKindRemoval\",\n  \"setReconciliationMarker\",\n  \"refreshStatistics\",\n] as const satisfies readonly (keyof GraphBackend)[];\n\n/** Schema-version lifecycle, owned by the schema manager. */\nconst SCHEMA_MEMBERS = [\n  \"commitSchemaVersion\",\n  \"commitSchemaVersionIfKindsEmpty\",\n  \"commitSchemaVersionWithPreflight\",\n  \"instantiateGraphTemplate\",\n  \"registerGraphTemplate\",\n  \"setActiveVersion\",\n  \"lockSchemaVersionForWrite\",\n  \"lockSchemaVersionAndGraphWrite\",\n  \"schemaWriteTransaction\",\n] as const satisfies readonly (keyof GraphBackend)[];\n\n/**\n * Table/index provisioning and DDL — the backend-setup carve-out.\n *\n * `ensureExtension` (and its deprecated `ensureTrigramExtension` alias) install\n * a database-global extension under a per-extension advisory lock. That is DDL\n * provisioning, not a graph write: it precedes every index build, takes its own\n * fence, and no `WritePlan` applies to it.\n */\nconst PROVISIONING_MEMBERS = [\n  \"adoptBaseSchema\",\n  \"assertBaseSchemaCurrent\",\n  \"bootstrapTables\",\n  \"catalog\",\n  \"lineage\",\n  \"recordedTime\",\n  \"ensureExtension\",\n  \"ensureTrigramExtension\",\n  \"ensureFulltextTable\",\n  \"ensureIdentityTables\",\n  \"ensureIndexMaterializationsTable\",\n  \"ensureContributionMaterializationsTable\",\n  \"ensureKindRemovalsTable\",\n  \"ensureReconciliationMarkersTable\",\n  \"ensureRevisionOriginsTable\",\n  \"ensureEdgeMatchIdentityStorage\",\n  \"ensureRuntimeContributions\",\n  \"ensureVectorSlotContribution\",\n  \"ensureVectorSlotContributions\",\n  \"deleteVectorSlotContribution\",\n  \"createVectorIndex\",\n  \"dropVectorIndex\",\n  \"executeDdl\",\n  \"identityTableDdl\",\n  \"recordedTableDdl\",\n  \"assertRuntimeContributionsInitialized\",\n  \"assertVectorSlotInitialized\",\n  \"assertVectorSlotsInitialized\",\n] as const satisfies readonly (keyof GraphBackend)[];\n\n/**\n * The raw-SQL seam. Deliberately NOT write members: their uses in scope are\n * raw identity DML, kind-removal materialization and a bare `LOCK TABLE` — no\n * graph-entity or sidecar write, and no sensible `WritePlan`. Banning the\n * names would buy permanent exemptions while still not covering `execute` /\n * `executeRaw`; the raw-SQL seam has its own owner (`identity/sql-target.ts`).\n */\nconst RAW_SQL_MEMBERS = [\n  \"execute\",\n  \"executeRaw\",\n  \"compileSql\",\n  \"executeStatement\",\n  \"executeTemporaryStatement\",\n] as const satisfies readonly (keyof GraphBackend)[];\n\n/**\n * Connection and graph lifecycle. `clearGraph` destroys a graph rather than\n * writing one: it has no `WritePlan`, and its one caller is `store.clear()`.\n */\nconst LIFECYCLE_MEMBERS = [\n  \"transaction\",\n  \"close\",\n  \"clearGraph\",\n] as const satisfies readonly (keyof GraphBackend)[];\n\n/**\n * The partition itself, as data: ten classes whose union is\n * `keyof GraphBackend` and whose pairwise intersections are empty. The two\n * properties are pinned at compile time below; this record is what lets a test\n * witness them at runtime as well, and what keeps a class from being written\n * and then never referenced.\n */\nexport const GRAPH_BACKEND_MEMBER_CLASSES = {\n  identity: IDENTITY_MEMBERS,\n  read: READ_MEMBERS,\n  entityWrite: ENTITY_WRITE_MEMBERS,\n  sidecarWrite: SIDECAR_WRITE_MEMBERS,\n  bulkWrite: BULK_WRITE_MEMBERS,\n  maintenance: MAINTENANCE_MEMBERS,\n  schema: SCHEMA_MEMBERS,\n  provisioning: PROVISIONING_MEMBERS,\n  rawSql: RAW_SQL_MEMBERS,\n  lifecycle: LIFECYCLE_MEMBERS,\n} as const;\n\ntype IdentityMember = (typeof IDENTITY_MEMBERS)[number];\ntype ReadMember = (typeof READ_MEMBERS)[number];\ntype EntityWriteMember = (typeof ENTITY_WRITE_MEMBERS)[number];\ntype SidecarWriteMember = (typeof SIDECAR_WRITE_MEMBERS)[number];\ntype BulkWriteMember = (typeof BULK_WRITE_MEMBERS)[number];\ntype MaintenanceMember = (typeof MAINTENANCE_MEMBERS)[number];\ntype SchemaMember = (typeof SCHEMA_MEMBERS)[number];\ntype ProvisioningMember = (typeof PROVISIONING_MEMBERS)[number];\ntype RawSqlMember = (typeof RAW_SQL_MEMBERS)[number];\ntype LifecycleMember = (typeof LIFECYCLE_MEMBERS)[number];\n\n/** Every member this module claims to have classified. */\ntype ClassifiedMember =\n  | IdentityMember\n  | ReadMember\n  | EntityWriteMember\n  | SidecarWriteMember\n  | BulkWriteMember\n  | MaintenanceMember\n  | SchemaMember\n  | ProvisioningMember\n  | RawSqlMember\n  | LifecycleMember;\n\n// TOTALITY. A backend member that no class names is UNCLASSIFIED, and this\n// line is where that is reported: `pnpm typecheck` fails until someone decides\n// which class the new member belongs to — in particular whether it is a write.\n// eslint-disable-next-line @typescript-eslint/no-unused-vars -- compile-time assertion\ntype _everyMemberIsClassified = Assert<\n  Equal<ClassifiedMember, keyof GraphBackend>\n>;\n\n/**\n * DISJOINTNESS, written to REPORT the offender.\n *\n * `Assert<Equal<Extract<A, B>, never>>` looks like the obvious spelling and is\n * useless here: inside a generic alias `Equal` defers to `boolean`, which\n * satisfies neither `true` nor `false`, so the assertion passes whatever it is\n * given. Returning a tuple that carries the doubly-classified member makes the\n * failure name it.\n */\ntype Disjoint<A, B> =\n  [Extract<A, B>] extends [never] ? true\n  : [\"MEMBER CLASSIFIED TWICE\", Extract<A, B>];\n\n/* eslint-disable @typescript-eslint/no-unused-vars -- compile-time assertions */\ntype _d1 = Assert<\n  Disjoint<\n    IdentityMember,\n    | ReadMember\n    | EntityWriteMember\n    | SidecarWriteMember\n    | BulkWriteMember\n    | MaintenanceMember\n    | SchemaMember\n    | ProvisioningMember\n    | RawSqlMember\n    | LifecycleMember\n  >\n>;\ntype _d2 = Assert<\n  Disjoint<\n    ReadMember,\n    | EntityWriteMember\n    | SidecarWriteMember\n    | BulkWriteMember\n    | MaintenanceMember\n    | SchemaMember\n    | ProvisioningMember\n    | RawSqlMember\n    | LifecycleMember\n  >\n>;\ntype _d3 = Assert<\n  Disjoint<\n    EntityWriteMember,\n    | SidecarWriteMember\n    | BulkWriteMember\n    | MaintenanceMember\n    | SchemaMember\n    | ProvisioningMember\n    | RawSqlMember\n    | LifecycleMember\n  >\n>;\ntype _d4 = Assert<\n  Disjoint<\n    SidecarWriteMember,\n    | BulkWriteMember\n    | MaintenanceMember\n    | SchemaMember\n    | ProvisioningMember\n    | RawSqlMember\n    | LifecycleMember\n  >\n>;\ntype _d5 = Assert<\n  Disjoint<\n    BulkWriteMember,\n    | MaintenanceMember\n    | SchemaMember\n    | ProvisioningMember\n    | RawSqlMember\n    | LifecycleMember\n  >\n>;\ntype _d6 = Assert<\n  Disjoint<\n    MaintenanceMember,\n    SchemaMember | ProvisioningMember | RawSqlMember | LifecycleMember\n  >\n>;\ntype _d7 = Assert<\n  Disjoint<SchemaMember, ProvisioningMember | RawSqlMember | LifecycleMember>\n>;\ntype _d8 = Assert<Disjoint<ProvisioningMember, RawSqlMember | LifecycleMember>>;\ntype _d9 = Assert<Disjoint<RawSqlMember, LifecycleMember>>;\n\n// I13: every `claims` core member is classified `sidecarWrite`, or a class\n// list that dropped one of the four would silently narrow the write pipeline's\n// own view of which members a claim write may call.\ntype _sidecarWriteContainsClaimsCore = Assert<\n  ContainsAll<typeof SIDECAR_WRITE_MEMBERS, (typeof CLAIMS)[\"core\"][number]>\n>;\n/* eslint-enable @typescript-eslint/no-unused-vars */\n","/**\n * The backend members no module outside the sanctioned write seam may call.\n *\n * `WRITE_MEMBER_KEYS` is the union of the three WRITE classes of the member\n * classification (`src/backend/member-classes.ts`) — graph-entity writes,\n * their sidecars, and backend-owned bulk ingestion. It is re-exported here,\n * store-side, rather than consumed straight from the classification so this\n * module can carry the pin that ties the entity-write class to the\n * recorded-capture checklist: the capture overlay must wrap exactly the\n * members the pipeline calls graph-entity writes, or one of the two lists is\n * lying about the same surface.\n *\n * The `eslint/write-pipeline-inventory.mjs` mirror of these names is asserted\n * equal to this list by `write-pipeline-ratchet.test.ts`. Neither side is\n * hand-copied from the other: this one is derived from the type, the ESLint\n * one is data the flat config can import, and the ratchet fails on drift in\n * either direction.\n */\nimport {\n  BULK_WRITE_MEMBERS,\n  ENTITY_WRITE_MEMBERS,\n  SIDECAR_WRITE_MEMBERS,\n} from \"../../backend/member-classes\";\nimport { type Assert, type Equal } from \"../../utils/type-assert\";\nimport {\n  type RECORDED_OPTIONAL_WRITE_METHODS,\n  type RECORDED_REQUIRED_WRITE_METHODS,\n} from \"../recorded-capture/write-surface\";\n\nexport const WRITE_MEMBER_KEYS = [\n  ...ENTITY_WRITE_MEMBERS,\n  ...SIDECAR_WRITE_MEMBERS,\n  ...BULK_WRITE_MEMBERS,\n] as const;\n\nexport type WriteMemberKey = (typeof WRITE_MEMBER_KEYS)[number];\n\n// ONE OWNER for \"what is a graph-entity write\". The recorded-capture factories\n// wrap the members on their checklist; the write pipeline bans the members in\n// its entity-write class. If those two sets ever differ, one of them is\n// wrapping (or banning) a surface the other does not recognise — so they are\n// the same names or the build fails.\n// eslint-disable-next-line @typescript-eslint/no-unused-vars -- compile-time assertion\ntype _entityWritesMatchCaptureChecklist = Assert<\n  Equal<\n    (typeof ENTITY_WRITE_MEMBERS)[number],\n    | (typeof RECORDED_REQUIRED_WRITE_METHODS)[number]\n    | (typeof RECORDED_OPTIONAL_WRITE_METHODS)[number]\n  >\n>;\n","/**\n * The in-process half of a write-fence promise: a FIFO queue that runs one\n * task at a time on the same JavaScript process, used wherever a backend (or\n * a `caller-serialized` write-fence declaration built on top of one) needs to\n * serialize the top-level operations it issues rather than relying on a\n * database-side lock.\n *\n * Moved out of `./drizzle/sqlite.ts` (SQLite's own per-connection queue is\n * still built by calling {@link createSerializedExecutionQueue} from there)\n * so `src/backend/drizzle/engine/create-sql-backend.ts` can build a second,\n * independent instance for a `caller-serialized` backend without importing a\n * Drizzle-specific module to get it.\n */\nimport { BackendDisposedError, ConfigurationError } from \"../errors\";\nimport {\n  type AsyncContextStore,\n  createAsyncContextLoader,\n} from \"./async-context\";\n\nexport type SerializedExecutionQueue = Readonly<{\n  dispose: () => void;\n  runExclusive: <T>(task: () => Promise<T>) => Promise<T>;\n}>;\n\n/**\n * How a queue behaves when the AsyncLocalStorage-based reentrancy detection\n * below is unavailable (or has not finished loading yet):\n *\n * - `\"detect\"` — best-effort. If the context is unavailable, the queue runs\n *   the task WITHOUT detection, exactly as it always has. SQLite's own\n *   per-connection queue (`sqlite.ts`) uses this: undetected reentrancy there\n *   is a quality-of-life deadlock guard, not a correctness promise a caller\n *   is relying on to hold.\n * - `\"require\"` — reentrancy detection IS part of the promise this queue\n *   makes. A `caller-serialized` write-fence declaration says every write\n *   unit this backend issues is serialized in-process; a transaction that\n *   silently deadlocks on a nested root write (because detection happened to\n *   be unavailable on this runtime, or the loader had not yet resolved on a\n *   cold start) would falsify that promise instead of merely degrading it.\n *   Under `\"require\"`, an unavailable context refuses EVERY submission with\n *   `CALLER_SERIALIZED_REQUIRES_ASYNC_CONTEXT` instead of running undetected.\n */\ntype ReentrancyMode = \"detect\" | \"require\";\n\nexport type SerializedExecutionQueueOptions = Readonly<{\n  reentrancy: ReentrancyMode;\n  /**\n   * Names this queue in the reentrancy / async-context refusal's message and\n   * structured details — a SQLite dialect string for SQLite's own queue, or\n   * `\"caller-serialized\"` for the in-process write-unit queue\n   * `createSqlBackend` builds from a `caller-serialized` write-fence\n   * declaration. Replaces a hardcoded `\"sqlite\"` the refusal used to report\n   * regardless of which queue actually rejected the submission.\n   */\n  subject: string;\n}>;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noop(): void {}\n\n/** A shared promise that never settles — used to absorb post-dispose work. */\nconst PENDING_FOREVER: Promise<never> = new Promise<never>(noop);\n\nfunction pendingForever<T>(): Promise<T> {\n  return PENDING_FOREVER;\n}\n\n/**\n * Tracks every serialized queue (if any) the current async execution is\n * running a task FOR — every enclosing `runExclusive` call, not only the\n * innermost one — so a re-entrant submission to ANY of them can be rejected\n * with a typed error instead of deadlocking (the enclosing task holds the\n * queue slot until it completes, so the inner operation can never run).\n *\n * A `caller-serialized` backend built on top of SQLite nests two queue\n * instances: this module's own, and SQLite's per-connection one\n * (`sqlite.ts`'s `transaction`/`transactionWithNative` run inside BOTH).\n * `AsyncLocalStorage.run` replaces the ambient store for the DURATION of its\n * own callback — it does not merge with whatever the enclosing `run` already\n * set — so storing a single marker (as this module used to) would let the\n * inner queue's `run` shadow the outer one's marker for exactly the window a\n * reentrant submission to the OUTER queue needs it visible. Storing the SET\n * of every marker still on the stack, accumulated as each `run` nests, is\n * what keeps every enclosing queue's own reentrancy check correct regardless\n * of how many other queues are nested inside it.\n *\n * AsyncLocalStorage is loaded lazily and optionally, through the shared\n * {@link createAsyncContextLoader} — it is available on Node and on\n * Cloudflare workers with the `nodejs_als` compatibility flag. Under\n * `reentrancy: \"detect\"`, a runtime without it simply skips the detection\n * (the queue behaves as before); under `\"require\"`, its absence is refused —\n * see {@link ReentrancyMode}.\n */\ntype QueueTaskContext = AsyncContextStore<ReadonlySet<object>>;\n\nconst queueTaskContextLoader = createAsyncContextLoader<ReadonlySet<object>>();\n\n/**\n * @internal Test seam for `tests/caller-serialized-queue.test.ts`: replaces\n * the module's cached AsyncLocalStorage context and readiness state with a\n * caller-controlled value, so a test can simulate a runtime with no\n * AsyncLocalStorage (`context: undefined`) or a cold start where the loader\n * has not resolved yet (a `readyDelayMs` the test's own assertions run\n * within) deterministically, instead of racing the real dynamic\n * `import(\"node:async_hooks\")`. Not reachable from published entrypoints.\n */\nexport function __setQueueTaskContextForTesting(\n  context: QueueTaskContext | undefined,\n  readyDelayMs = 0,\n): void {\n  queueTaskContextLoader.setForTesting(context, readyDelayMs);\n}\n\n/** @internal Restores the real loader after a test uses the seam above. */\nexport function __restoreQueueTaskContextForTesting(): void {\n  queueTaskContextLoader.restoreForTesting();\n}\n\nfunction rejectReentrantQueueSubmission(subject: string): Promise<never> {\n  return Promise.reject(\n    new ConfigurationError(\n      \"This operation was awaited from inside a transaction running on the \" +\n        `same ${subject} backend and would deadlock: the transaction holds ` +\n        \"the backend's serialized execution slot until it completes, so \" +\n        \"the operation could never run.\",\n      { code: \"SERIALIZED_QUEUE_REENTRANT_SUBMISSION\", subject },\n      {\n        suggestion:\n          \"Inside a store.transaction callback, use the transaction-scoped \" +\n          \"context (tx.nodes / tx.edges / tx.backend) instead of the root \" +\n          \"store or backend, or move the operation outside the transaction.\",\n      },\n    ),\n  );\n}\n\n/**\n * THE refusal `runExclusive` throws under `reentrancy: \"require\"` when the\n * AsyncLocalStorage context this queue's promise depends on never became\n * available (an unsupported runtime) or had not resolved by the time this\n * submission's turn came up. Refusing beats running without detection: a\n * `caller-serialized` in-process promise with no working reentrancy guard is\n * a promise this queue cannot actually keep.\n */\nfunction rejectAsyncContextUnavailable(subject: string): Promise<never> {\n  return Promise.reject(\n    new ConfigurationError(\n      `The ${subject} write-unit queue requires AsyncLocalStorage ` +\n        \"(node:async_hooks) to detect a reentrant submission, but it is \" +\n        \"unavailable on this runtime, so this submission is refused rather \" +\n        \"than run without the detection this queue's caller-serialized \" +\n        \"promise depends on.\",\n      { code: \"CALLER_SERIALIZED_REQUIRES_ASYNC_CONTEXT\", subject },\n      {\n        suggestion:\n          \"Run on a runtime that supports node:async_hooks' \" +\n          \"AsyncLocalStorage (Node.js, or Cloudflare Workers with the \" +\n          \"nodejs_als compatibility flag), or avoid declaring \" +\n          '`writeFence.mechanism: \"caller-serialized\"` on this runtime.',\n      },\n    ),\n  );\n}\n\nexport function createSerializedExecutionQueue(\n  options: SerializedExecutionQueueOptions,\n): SerializedExecutionQueue {\n  let tail: Promise<unknown> = Promise.resolve();\n  let disposed = false;\n  // Unique per queue: a task running on THIS queue must not submit back to it,\n  // but may freely submit to a different backend's queue.\n  const taskMarker: object = {};\n\n  function isDisposed(): boolean {\n    return disposed;\n  }\n\n  return {\n    dispose() {\n      disposed = true;\n    },\n\n    runExclusive<T>(task: () => Promise<T>): Promise<T> {\n      if (isDisposed()) return Promise.reject(new BackendDisposedError());\n      // Synchronous, at call time, deliberately NOT deferred behind\n      // `queueTaskContextLoader.ready()`: a submission made from INSIDE a\n      // task this same queue is currently running only ever reaches this\n      // point after `runTask` (below) already awaited that readiness promise\n      // for the ENCLOSING task, so the loader's context is already resolved\n      // by then. Waiting here too would let two concurrent top-level\n      // submissions race the promise instead of strictly ordering by call\n      // time, which is what keeps the FIFO guarantee below correct.\n      if (\n        queueTaskContextLoader.current()?.getStore()?.has(taskMarker) === true\n      ) {\n        return rejectReentrantQueueSubmission(options.subject);\n      }\n\n      // When disposed, runTask returns a never-settling promise so that no\n      // rejection propagates through the 7+ async wrappers between this\n      // queue and the store-level caller. A rejection here would become an\n      // unhandled rejection if the caller abandoned the promise during\n      // teardown — and JavaScript offers no way to `.catch()` a rejection\n      // at the bottom of a chain without every async wrapper above it also\n      // creating an independently-unhandled rejected promise.\n      //\n      // The tradeoff: an active caller whose operation was queued before\n      // dispose() will see a permanently-pending promise rather than a\n      // BackendDisposedError. Post-dispose submissions (the check above)\n      // still reject immediately since the caller actively holds that\n      // promise.\n      const runTask = async (): Promise<T> => {\n        if (isDisposed()) return pendingForever<T>();\n        try {\n          // Awaited before the context is read (on BOTH reentrancy modes),\n          // so a nested submission made from inside `task()` — whether this\n          // queue was constructed a microtask ago or a minute ago — always\n          // observes the loader's FINAL value rather than a still-loading\n          // `undefined`. See the module doc above.\n          await queueTaskContextLoader.ready();\n          if (isDisposed()) return await pendingForever<T>();\n          const context = queueTaskContextLoader.current();\n          if (context === undefined) {\n            if (options.reentrancy === \"require\") {\n              return await rejectAsyncContextUnavailable(options.subject);\n            }\n            return await task();\n          }\n          const activeMarkers = new Set(context.getStore());\n          activeMarkers.add(taskMarker);\n          return await context.run(activeMarkers, () => task());\n        } catch (error) {\n          if (isDisposed()) return pendingForever<T>();\n          throw error;\n        }\n      };\n      const result = tail.then(runTask, runTask);\n      tail = result.then(\n        () => 0,\n        () => 0,\n      );\n      return result;\n    },\n  };\n}\n\nexport function runWithSerializedQueue<T>(\n  queue: SerializedExecutionQueue | undefined,\n  task: () => Promise<T>,\n): Promise<T> {\n  if (queue === undefined) return task();\n  return queue.runExclusive(task);\n}\n","import { BaseSchemaMigrationError, CompilerInvariantError } from \"../../errors\";\n\n/**\n * Immutable release ledger for TypeGraph-owned physical storage.\n *\n * A new base-table shape replaces neither an older entry nor its digests: add\n * the next version here and add the corresponding adoption step to every\n * bundled backend. The ordered-shape ratchet tests compare the latest entry\n * with generated base DDL, while the lifecycle refuses a backend whose step\n * registry does not reach the same version.\n */\nexport const BASE_SCHEMA_RELEASES = [\n  {\n    version: 1,\n    id: \"versioned-base-storage\",\n    orderedShapeDigests: {\n      postgres:\n        \"b8f25c291cc75a36102ba7160c25923926f263f61ed1d3d05619708936d0246f\",\n      sqlite:\n        \"68363b5bf1c91c5f3e7528ebd255b542a1cd26677a01c7b2271e100e08a1e354\",\n    },\n  },\n  {\n    version: 2,\n    id: \"fence-rows\",\n    orderedShapeDigests: {\n      postgres:\n        \"6ceed53669691b9eb8974d0ef371dd86cab3cb33d187a328b3dd3d905776b024\",\n      sqlite:\n        \"1b7ef8370ac366e48d1517a5eb98a3d4d6a1c71c2d8e74e77bd78367af0cc042\",\n    },\n  },\n  {\n    version: 3,\n    id: \"lineage-since-index\",\n    orderedShapeDigests: {\n      postgres:\n        \"3566f85b41ee4139e580fb6964ef6258ba9fa1d3756dcc42b47a5235690d6375\",\n      sqlite:\n        \"4bd7e6a5caeb3b5e54933b26f6697e53fc7a9aa916c0606c77006fdc93080981\",\n    },\n  },\n] as const;\n\nfunction currentBaseSchemaVersion(): number {\n  const release = BASE_SCHEMA_RELEASES.at(-1);\n  if (release === undefined) {\n    throw new CompilerInvariantError(\n      \"The base schema release ledger must not be empty.\",\n    );\n  }\n  return release.version;\n}\n\nexport const CURRENT_BASE_SCHEMA_VERSION = currentBaseSchemaVersion();\n\nexport type BaseSchemaLifecycle = Readonly<{\n  adopt(): Promise<void>;\n  /** Read and refuse a newer marker before bootstrap emits any DDL. */\n  prepareBootstrap(): Promise<number | undefined>;\n  /** Repair existing relations before bootstrap creates dependent indexes. */\n  adoptBeforeBootstrap(startingVersion: number | undefined): Promise<void>;\n  /** Complete adoption after the adapter's full current-schema DDL ran. */\n  adoptAfterBootstrap(startingVersion: number | undefined): Promise<void>;\n  assertCurrent(): Promise<void>;\n}>;\n\ntype BaseSchemaBootstrapStrategy =\n  | Readonly<{ phase: \"covered-by-generated-ddl\" }>\n  | Readonly<{ phase: \"before\"; adopt(): Promise<void> }>\n  | Readonly<{ phase: \"after\"; adopt(): Promise<void> }>;\n\ntype BaseSchemaStep = Readonly<{\n  version: number;\n  /** Steps may be retried or raced by concurrent adopters and must be idempotent. */\n  adopt(): Promise<void>;\n  bootstrap: BaseSchemaBootstrapStrategy;\n}>;\n\ntype BaseSchemaLifecycleOptions = Readonly<{\n  /** Override only for isolated state-machine tests. Bundled backends omit it. */\n  currentVersion?: number;\n  readVersion(): Promise<number | undefined>;\n  ensureVersionTable(): Promise<void>;\n  /** Monotonically stamp `version` and return the version observed afterward. */\n  writeVersion(version: number): Promise<number | undefined>;\n  steps: readonly BaseSchemaStep[];\n}>;\n\nfunction classifyVersion(\n  installedVersion: number | undefined,\n  currentVersion: number,\n): \"current\" | \"missing\" | \"newer\" | \"stale\" {\n  if (installedVersion === undefined) return \"missing\";\n  if (installedVersion === currentVersion) return \"current\";\n  if (installedVersion > currentVersion) return \"newer\";\n  return \"stale\";\n}\n\nfunction migrationError(\n  installedVersion: number | undefined,\n  requiredVersion: number,\n  reason: \"missing\" | \"newer\" | \"stale\",\n): BaseSchemaMigrationError {\n  return new BaseSchemaMigrationError({\n    installedVersion,\n    requiredVersion,\n    reason,\n  });\n}\n\n/**\n * One owner for deployment-wide physical schema adoption.\n *\n * The ordered registry is deliberately separate from per-graph schema\n * versions: a base relation added by a library release must be adopted once\n * per database, regardless of how many graph documents it stores. Every\n * not-yet-adopted step runs, in order, publishing the marker after each step\n * (see `runSteps`) — a step that throws aborts before that step's write, so a\n * failed upgrade is retried from the last durably stamped version rather\n * than published as current.\n */\nexport function createBaseSchemaLifecycle(\n  options: BaseSchemaLifecycleOptions,\n): BaseSchemaLifecycle {\n  const currentVersion = options.currentVersion ?? CURRENT_BASE_SCHEMA_VERSION;\n  if (!Number.isSafeInteger(currentVersion) || currentVersion < 1) {\n    throw new CompilerInvariantError(\n      \"The current base schema version must be a positive safe integer.\",\n      { currentVersion },\n    );\n  }\n  const steps = options.steps.toSorted(\n    (left, right) => left.version - right.version,\n  );\n  for (const [index, step] of steps.entries()) {\n    if (step.version !== index + 1) {\n      throw new CompilerInvariantError(\n        \"Base schema adoption steps must be contiguous and start at version 1.\",\n        { expectedVersion: index + 1, actualVersion: step.version },\n      );\n    }\n  }\n  if (steps.length !== currentVersion) {\n    throw new CompilerInvariantError(\n      \"The base schema adoption registry must end at the current version.\",\n      {\n        currentVersion,\n        registeredSteps: steps.length,\n      },\n    );\n  }\n\n  function requireCurrent(installedVersion: number | undefined): void {\n    const state = classifyVersion(installedVersion, currentVersion);\n    if (state === \"current\") return;\n    throw migrationError(installedVersion, currentVersion, state);\n  }\n\n  async function assertCurrent(): Promise<void> {\n    requireCurrent(await options.readVersion());\n  }\n\n  async function writeVersion(version: number): Promise<number> {\n    const observedVersion = await options.writeVersion(version);\n    if (observedVersion === undefined) {\n      throw migrationError(observedVersion, currentVersion, \"missing\");\n    }\n    if (observedVersion < version) {\n      throw migrationError(observedVersion, currentVersion, \"stale\");\n    }\n    return observedVersion;\n  }\n\n  /**\n   * Runs every not-yet-adopted step's `adoptStep` in order, publishing the\n   * marker after each one. A step whose `adoptStep` throws aborts before its\n   * marker write, so a retry re-adopts from the last durably published\n   * version, including the step that threw. Publishing after every step\n   * (rather than once at the end) lets a concurrent adopter's observed\n   * version short-circuit the remaining steps: once `writeVersion` reports a\n   * version another process already published, every later step in this\n   * call is superseded and skipped — a process on an older release must\n   * never keep applying steps against a database a newer release already\n   * brought current.\n   */\n  async function runSteps(\n    startingVersion: number,\n    adoptStep: (step: BaseSchemaStep) => Promise<void>,\n  ): Promise<void> {\n    let observedVersion = startingVersion;\n    for (const step of steps) {\n      if (step.version <= observedVersion) continue;\n      await adoptStep(step);\n      observedVersion = await writeVersion(step.version);\n    }\n    requireCurrent(observedVersion);\n  }\n\n  async function adopt(): Promise<void> {\n    const installedVersion = await options.readVersion();\n    const state = classifyVersion(installedVersion, currentVersion);\n    if (state === \"current\") return;\n    if (state === \"newer\") {\n      throw migrationError(installedVersion, currentVersion, state);\n    }\n\n    if (installedVersion === undefined) await options.ensureVersionTable();\n    await runSteps(installedVersion ?? 0, async (step) => step.adopt());\n  }\n\n  async function prepareBootstrap(): Promise<number | undefined> {\n    const installedVersion = await options.readVersion();\n    const state = classifyVersion(installedVersion, currentVersion);\n    if (state === \"newer\") {\n      throw migrationError(installedVersion, currentVersion, state);\n    }\n    return installedVersion;\n  }\n\n  async function adoptAfterBootstrap(\n    startingVersion: number | undefined,\n  ): Promise<void> {\n    // Generated DDL owns explicitly covered steps. Before/after strategies own\n    // only upgrades that CREATE TABLE cannot apply to a pre-existing relation.\n    const state = classifyVersion(startingVersion, currentVersion);\n    if (state === \"current\") return;\n    if (state === \"newer\") {\n      throw migrationError(startingVersion, currentVersion, state);\n    }\n    await runSteps(startingVersion ?? 0, async (step) => {\n      if (step.bootstrap.phase === \"after\") await step.bootstrap.adopt();\n    });\n  }\n\n  async function adoptBeforeBootstrap(\n    startingVersion: number | undefined = 0,\n  ): Promise<void> {\n    const state = classifyVersion(startingVersion, currentVersion);\n    if (state === \"newer\") {\n      throw migrationError(startingVersion, currentVersion, state);\n    }\n    for (const step of steps) {\n      if (step.version <= startingVersion) continue;\n      if (step.bootstrap.phase === \"before\") await step.bootstrap.adopt();\n    }\n  }\n\n  return {\n    adopt,\n    prepareBootstrap,\n    adoptBeforeBootstrap,\n    adoptAfterBootstrap,\n    assertCurrent,\n  };\n}\n","/**\n * Custom Drizzle column types for the PostgreSQL `tsvectorStrategy`\n * fulltext table (`tsvector` + `regconfig`). Lets drizzle-kit\n * introspect the typed fulltext table the same way it introspects\n * `nodes`, `edges`, etc. Alternate strategies (pg_trgm, ParadeDB,\n * pgroonga) carry their own DDL via `FulltextStrategy.ownedTables()`\n * and don't use these columns.\n */\nimport { customType } from \"drizzle-orm/pg-core\";\n\n/**\n * PostgreSQL `regconfig` column type — a registered text-search\n * configuration name (e.g. `'english'::regconfig`). Identical wire\n * format to `text`, but the `regconfig` SQL type lets a generated\n * column reference it inside `to_tsvector(\"language\", \"content\")`\n * as an immutable expression.\n */\nexport const regconfig = customType<{\n  data: string;\n  driverData: string;\n}>({\n  dataType: () => \"regconfig\",\n});\n\n/**\n * PostgreSQL `tsvector` column type. Represents a parsed,\n * dictionary-normalized document; the GIN index that\n * `tsvectorFulltextTable` declares makes `@@ tsquery` lookups cheap.\n *\n * The on-the-wire driver representation is the canonical text form\n * (`'word1':1 'word2':2`); this type is read-only in practice — the\n * value is computed by a `GENERATED ALWAYS AS (...) STORED` clause —\n * so no `toDriver` mapping is provided.\n */\nexport const tsvector = customType<{\n  data: string;\n  driverData: string;\n}>({\n  dataType: () => \"tsvector\",\n});\n","/**\n * Drizzle PostgreSQL schema for TypeGraph.\n *\n * Provides table definitions that can be customized via the factory function.\n * Uses PostgreSQL-native types: JSONB, TIMESTAMPTZ, BOOLEAN, VECTOR.\n *\n * The embeddings table uses pgvector's native VECTOR type. Ensure the\n * extension is enabled before creating tables:\n *\n * ```sql\n * CREATE EXTENSION IF NOT EXISTS vector;\n * ```\n *\n * @example\n * ```typescript\n * // Default table names\n * import { tables } from \"@nicia-ai/typegraph/adapters/drizzle/postgres\";\n *\n * // Custom table names\n * import { createPostgresTables } from \"@nicia-ai/typegraph/adapters/drizzle/postgres\";\n * const tables = createPostgresTables({\n *   nodes: \"myapp_nodes\",\n *   edges: \"myapp_edges\",\n * });\n * ```\n */\nimport { sql } from \"drizzle-orm\";\nimport {\n  bigint,\n  boolean,\n  check,\n  index,\n  integer,\n  jsonb,\n  pgTable,\n  primaryKey,\n  text,\n  timestamp,\n  uniqueIndex,\n} from \"drizzle-orm/pg-core\";\n\nimport {\n  buildPostgresEdgeIndexBuilders,\n  buildPostgresNodeIndexBuilders,\n  buildPostgresSystemIndexBuilders,\n} from \"../../../indexes/drizzle\";\nimport {\n  assertNoSystemIndexNameCollision,\n  systemIndexName,\n} from \"../../../indexes/system\";\nimport { type IndexDeclaration } from \"../../../indexes/types\";\nimport { regconfig, tsvector } from \"../columns/fulltext\";\n\n/**\n * Table name configuration.\n */\nexport type PostgresTableNames = Readonly<{\n  nodes: string;\n  edges: string;\n  recordedNodes: string;\n  recordedEdges: string;\n  recordedClock: string;\n  revisionOrigins: string;\n  identityAssertions: string;\n  recordedIdentityAssertions: string;\n  identityClosure: string;\n  identitySeparation: string;\n  uniques: string;\n  edgeClaims: string;\n  baseSchemaVersions: string;\n  schemaVersions: string;\n  graphTemplates: string;\n  fulltext: string;\n  indexMaterializations: string;\n  contributionMaterializations: string;\n  kindRemovals: string;\n  reconciliationMarkers: string;\n  fences: string;\n}>;\n\nexport type CreatePostgresTablesOptions = Readonly<{\n  /**\n   * Additional TypeGraph indexes to include in the Drizzle schema.\n   *\n   * These become first-class Drizzle indexes, so drizzle-kit migrations will\n   * pick them up automatically.\n   */\n  indexes?: readonly IndexDeclaration[] | undefined;\n}>;\n\nconst DEFAULT_TABLE_NAMES: PostgresTableNames = {\n  nodes: \"typegraph_nodes\",\n  edges: \"typegraph_edges\",\n  recordedNodes: \"typegraph_recorded_nodes\",\n  recordedEdges: \"typegraph_recorded_edges\",\n  recordedClock: \"typegraph_recorded_clock\",\n  revisionOrigins: \"typegraph_revision_origins\",\n  identityAssertions: \"typegraph_identity_assertions\",\n  recordedIdentityAssertions: \"typegraph_recorded_identity_assertions\",\n  identityClosure: \"typegraph_identity_closure\",\n  identitySeparation: \"typegraph_identity_separation\",\n  uniques: \"typegraph_node_uniques\",\n  edgeClaims: \"typegraph_edge_claims\",\n  baseSchemaVersions: \"typegraph_base_schema_versions\",\n  schemaVersions: \"typegraph_schema_versions\",\n  graphTemplates: \"typegraph_graph_templates\",\n  fulltext: \"typegraph_node_fulltext\",\n  indexMaterializations: \"typegraph_index_materializations\",\n  contributionMaterializations: \"typegraph_contribution_materializations\",\n  kindRemovals: \"typegraph_kind_removals\",\n  reconciliationMarkers: \"typegraph_reconciliation_markers\",\n  fences: \"typegraph_fences\",\n};\n\n/**\n * Creates PostgreSQL table definitions with customizable table names.\n * Index names are derived from table names.\n */\nexport function createPostgresTables(\n  names: Partial<PostgresTableNames> = {},\n  options: CreatePostgresTablesOptions = {},\n) {\n  const n: PostgresTableNames = { ...DEFAULT_TABLE_NAMES, ...names };\n  const indexes = options.indexes ?? [];\n  assertNoSystemIndexNameCollision(indexes, n);\n\n  const nodes = pgTable(\n    n.nodes,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      kind: text(\"kind\").notNull(),\n      id: text(\"id\").notNull(),\n      props: jsonb(\"props\").notNull(),\n      version: integer(\"version\").notNull().default(1),\n      validFrom: timestamp(\"valid_from\", { withTimezone: true }),\n      validTo: timestamp(\"valid_to\", { withTimezone: true }),\n      createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull(),\n      updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull(),\n      deletedAt: timestamp(\"deleted_at\", { withTimezone: true }),\n    },\n    (t) => [\n      primaryKey({ columns: [t.graphId, t.kind, t.id] }),\n      // System indexes come from SYSTEM_INDEX_DECLARATIONS (single source\n      // for both dialects + the runtime materializer).\n      ...buildPostgresSystemIndexBuilders(\"nodes\", n.nodes, t),\n      ...buildPostgresNodeIndexBuilders(t, indexes),\n    ],\n  );\n\n  const edges = pgTable(\n    n.edges,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      id: text(\"id\").notNull(),\n      kind: text(\"kind\").notNull(),\n      fromKind: text(\"from_kind\").notNull(),\n      fromId: text(\"from_id\").notNull(),\n      toKind: text(\"to_kind\").notNull(),\n      toId: text(\"to_id\").notNull(),\n      props: jsonb(\"props\").notNull(),\n      matchIdentityName: text(\"match_identity_name\"),\n      matchIdentityKey: text(\"match_identity_key\"),\n      validFrom: timestamp(\"valid_from\", { withTimezone: true }),\n      validTo: timestamp(\"valid_to\", { withTimezone: true }),\n      createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull(),\n      updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull(),\n      deletedAt: timestamp(\"deleted_at\", { withTimezone: true }),\n    },\n    (t) => [\n      primaryKey({ columns: [t.graphId, t.id] }),\n      uniqueIndex(systemIndexName(n.edges, \"match_identity_uq\")).on(\n        t.graphId,\n        t.kind,\n        t.matchIdentityName,\n        t.matchIdentityKey,\n      ),\n      check(\n        systemIndexName(n.edges, \"match_identity_pair_check\"),\n        sql`(${t.matchIdentityName} IS NULL) = (${t.matchIdentityKey} IS NULL)`,\n      ),\n      ...buildPostgresSystemIndexBuilders(\"edges\", n.edges, t),\n      ...buildPostgresEdgeIndexBuilders(t, indexes),\n    ],\n  );\n\n  const recordedNodes = pgTable(\n    n.recordedNodes,\n    {\n      historyId: text(\"history_id\").notNull(),\n      graphId: text(\"graph_id\").notNull(),\n      kind: text(\"kind\").notNull(),\n      id: text(\"id\").notNull(),\n      props: jsonb(\"props\").notNull(),\n      version: integer(\"version\").notNull(),\n      validFrom: timestamp(\"valid_from\", { withTimezone: true }),\n      validTo: timestamp(\"valid_to\", { withTimezone: true }),\n      createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull(),\n      updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull(),\n      deletedAt: timestamp(\"deleted_at\", { withTimezone: true }),\n      recordedFrom: bigint(\"recorded_from\", { mode: \"number\" }).notNull(),\n      recordedTo: bigint(\"recorded_to\", { mode: \"number\" }).notNull(),\n      op: text(\"op\").notNull(),\n      schemaVersion: integer(\"schema_version\"),\n      txId: text(\"tx_id\"),\n      meta: jsonb(\"meta\"),\n    },\n    (t) => [\n      primaryKey({ columns: [t.historyId] }),\n      ...buildPostgresSystemIndexBuilders(\"recordedNodes\", n.recordedNodes, t),\n    ],\n  );\n\n  const recordedEdges = pgTable(\n    n.recordedEdges,\n    {\n      historyId: text(\"history_id\").notNull(),\n      graphId: text(\"graph_id\").notNull(),\n      id: text(\"id\").notNull(),\n      kind: text(\"kind\").notNull(),\n      fromKind: text(\"from_kind\").notNull(),\n      fromId: text(\"from_id\").notNull(),\n      toKind: text(\"to_kind\").notNull(),\n      toId: text(\"to_id\").notNull(),\n      props: jsonb(\"props\").notNull(),\n      validFrom: timestamp(\"valid_from\", { withTimezone: true }),\n      validTo: timestamp(\"valid_to\", { withTimezone: true }),\n      createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull(),\n      updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull(),\n      deletedAt: timestamp(\"deleted_at\", { withTimezone: true }),\n      recordedFrom: bigint(\"recorded_from\", { mode: \"number\" }).notNull(),\n      recordedTo: bigint(\"recorded_to\", { mode: \"number\" }).notNull(),\n      op: text(\"op\").notNull(),\n      schemaVersion: integer(\"schema_version\"),\n      txId: text(\"tx_id\"),\n      meta: jsonb(\"meta\"),\n    },\n    (t) => [\n      primaryKey({ columns: [t.historyId] }),\n      ...buildPostgresSystemIndexBuilders(\"recordedEdges\", n.recordedEdges, t),\n    ],\n  );\n\n  const recordedClock = pgTable(\n    n.recordedClock,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      revision: bigint(\"revision\", { mode: \"number\" }).notNull(),\n      recordedAt: timestamp(\"recorded_at\", { withTimezone: true }).notNull(),\n    },\n    (t) => [primaryKey({ columns: [t.graphId] })],\n  );\n\n  const revisionOrigins = pgTable(\n    n.revisionOrigins,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      origin: text(\"origin\").notNull(),\n    },\n    (t) => [primaryKey({ columns: [t.graphId] })],\n  );\n\n  // The identity assertion ledger. `ended_by_kind` / `ended_by_id` record WHY\n  // an assertion stopped being current: NULL for an explicit retraction,\n  // populated with the deleted endpoint's `(kind, id)` when a node soft-delete\n  // cascaded onto it. The CHECK holds the two invariants the writers rely on —\n  // the pair is set or unset together, and a cause only ever names an ENDED\n  // row's own endpoint.\n  const identityAssertions = pgTable(\n    n.identityAssertions,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      id: text(\"id\").notNull(),\n      relation: text(\"rel\").notNull(),\n      aKind: text(\"a_kind\").notNull(),\n      aId: text(\"a_id\").notNull(),\n      bKind: text(\"b_kind\").notNull(),\n      bId: text(\"b_id\").notNull(),\n      validFrom: timestamp(\"valid_from\", { withTimezone: true }).notNull(),\n      validTo: timestamp(\"valid_to\", { withTimezone: true }),\n      createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull(),\n      updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull(),\n      deletedAt: timestamp(\"deleted_at\", { withTimezone: true }),\n      endedByKind: text(\"ended_by_kind\"),\n      endedById: text(\"ended_by_id\"),\n    },\n    (t) => [\n      primaryKey({ columns: [t.graphId, t.id] }),\n      index(`${n.identityAssertions}_a_idx`).on(\n        t.graphId,\n        t.aKind,\n        t.aId,\n        t.validTo,\n      ),\n      index(`${n.identityAssertions}_b_idx`).on(\n        t.graphId,\n        t.bKind,\n        t.bId,\n        t.validTo,\n      ),\n      uniqueIndex(`${n.identityAssertions}_current_pair_idx`)\n        .on(t.graphId, t.relation, t.aKind, t.aId, t.bKind, t.bId)\n        .where(sql`${t.validTo} IS NULL`),\n      check(\n        `${n.identityAssertions}_ended_by_check`,\n        sql`(ended_by_kind IS NULL) = (ended_by_id IS NULL) AND (ended_by_kind IS NULL OR (valid_to IS NOT NULL AND ((ended_by_kind = a_kind AND ended_by_id = a_id) OR (ended_by_kind = b_kind AND ended_by_id = b_id))))`,\n      ),\n    ],\n  );\n\n  const recordedIdentityAssertions = pgTable(\n    n.recordedIdentityAssertions,\n    {\n      historyId: text(\"history_id\").notNull(),\n      graphId: text(\"graph_id\").notNull(),\n      id: text(\"id\").notNull(),\n      relation: text(\"rel\").notNull(),\n      aKind: text(\"a_kind\").notNull(),\n      aId: text(\"a_id\").notNull(),\n      bKind: text(\"b_kind\").notNull(),\n      bId: text(\"b_id\").notNull(),\n      validFrom: timestamp(\"valid_from\", { withTimezone: true }).notNull(),\n      validTo: timestamp(\"valid_to\", { withTimezone: true }),\n      createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull(),\n      updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull(),\n      deletedAt: timestamp(\"deleted_at\", { withTimezone: true }),\n      endedByKind: text(\"ended_by_kind\"),\n      endedById: text(\"ended_by_id\"),\n      recordedFrom: bigint(\"recorded_from\", { mode: \"number\" }).notNull(),\n      recordedTo: bigint(\"recorded_to\", { mode: \"number\" }).notNull(),\n      op: text(\"op\").notNull(),\n      schemaVersion: integer(\"schema_version\"),\n      txId: text(\"tx_id\"),\n      meta: jsonb(\"meta\"),\n    },\n    (t) => [\n      primaryKey({ columns: [t.historyId] }),\n      index(`${n.recordedIdentityAssertions}_entity_idx`).on(\n        t.graphId,\n        t.id,\n        t.recordedFrom,\n        t.recordedTo,\n      ),\n      index(`${n.recordedIdentityAssertions}_a_idx`).on(\n        t.graphId,\n        t.aKind,\n        t.aId,\n        t.recordedFrom,\n        t.recordedTo,\n      ),\n      index(`${n.recordedIdentityAssertions}_b_idx`).on(\n        t.graphId,\n        t.bKind,\n        t.bId,\n        t.recordedFrom,\n        t.recordedTo,\n      ),\n      // `recorded_from`-led lookup, same rationale as the two recorded\n      // relations' `since_idx` (`../../../indexes/system.ts`): `entity_idx`/\n      // `a_idx`/`b_idx` all lead with an endpoint, not `recorded_from`\n      // alone, so none can serve `changesSince`'s per-revision completeness\n      // scan (`store/recorded-capture/lineage.ts`) without a full table scan.\n      index(systemIndexName(n.recordedIdentityAssertions, \"since_idx\")).on(\n        t.graphId,\n        t.recordedFrom,\n      ),\n    ],\n  );\n\n  const identityClosure = pgTable(\n    n.identityClosure,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      memberKind: text(\"member_kind\").notNull(),\n      memberId: text(\"member_id\").notNull(),\n      classKind: text(\"class_kind\").notNull(),\n      classId: text(\"class_id\").notNull(),\n    },\n    (t) => [\n      primaryKey({ columns: [t.graphId, t.memberKind, t.memberId] }),\n      index(`${n.identityClosure}_class_idx`).on(\n        t.graphId,\n        t.classKind,\n        t.classId,\n      ),\n    ],\n  );\n\n  // The identity separation relation: the `different` ledger lifted to whole\n  // identity classes, one row per separated class pair. `class_key_low` /\n  // `class_key_high` hold the persisted class-key encoding (see\n  // `identity/separation.ts`), ordered by code point. The CHECK pins `COLLATE\n  // \"C\"` because a database whose default collation is linguistic orders text\n  // differently from the writer, which would reject legitimate pairs; under\n  // `C` the comparison is byte order, which is exactly code-point order.\n  // Fusing two separated classes relabels both sides of their shared row to\n  // one key, so the contradiction cannot commit.\n  const identitySeparation = pgTable(\n    n.identitySeparation,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      classKeyLow: text(\"class_key_low\").notNull(),\n      classKeyHigh: text(\"class_key_high\").notNull(),\n    },\n    (t) => [\n      primaryKey({ columns: [t.graphId, t.classKeyLow, t.classKeyHigh] }),\n      index(`${n.identitySeparation}_high_idx`).on(t.graphId, t.classKeyHigh),\n      check(\n        `${n.identitySeparation}_ordered_pair_check`,\n        sql`class_key_low COLLATE \"C\" < class_key_high COLLATE \"C\"`,\n      ),\n    ],\n  );\n\n  const uniques = pgTable(\n    n.uniques,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      nodeKind: text(\"node_kind\").notNull(),\n      constraintName: text(\"constraint_name\").notNull(),\n      key: text(\"key\").notNull(),\n      nodeId: text(\"node_id\").notNull(),\n      concreteKind: text(\"concrete_kind\").notNull(),\n      deletedAt: timestamp(\"deleted_at\", { withTimezone: true }),\n    },\n    (t) => [\n      primaryKey({\n        columns: [t.graphId, t.nodeKind, t.constraintName, t.key],\n      }),\n      index(`${n.uniques}_node_idx`).on(t.graphId, t.concreteKind, t.nodeId),\n    ],\n  );\n\n  // The edge cardinality claim relation: one row per claim AXIS\n  // (`<cardinality>:<edgeKind>`) and endpoint KEY, naming the edge that holds\n  // it. Declared edge cardinality is a predicate over `(kind, from)` or\n  // `(kind, from, to)`, which the edges primary key `(graph_id, id)` cannot\n  // fence, so this relation's own primary key is what refuses a second\n  // concurrent claimant. A claim whose holder is no longer live (or, for\n  // `oneActive`, no longer active) is taken over in place, which is why the\n  // relation needs no release path — see `store/claims/edge-claims.ts`.\n  const edgeClaims = pgTable(\n    n.edgeClaims,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      axis: text(\"axis\").notNull(),\n      key: text(\"key\").notNull(),\n      edgeId: text(\"edge_id\").notNull(),\n      updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull(),\n    },\n    (t) => [\n      primaryKey({ columns: [t.graphId, t.axis, t.key] }),\n      index(`${n.edgeClaims}_edge_idx`).on(t.graphId, t.edgeId),\n    ],\n  );\n\n  // The write-fence rows relation: one row per keyed exclusion a `row`\n  // mechanism has ever acquired, keyed on `<namespace>:<key>` (the existing\n  // advisory namespaces, verbatim). Never dropped, never row-deleted, never\n  // touched by `clear()` — the same never-dropped posture as\n  // `schema_versions`, `recorded_clock`. `generation` is the acquire\n  // statement's own monotonically increasing counter (see\n  // `resolveFenceStatements`'s `row` derivation); it is not consumed here,\n  // only stored.\n  const fences = pgTable(\n    n.fences,\n    {\n      key: text(\"key\").notNull(),\n      generation: bigint(\"generation\", { mode: \"number\" }).notNull(),\n    },\n    (t) => [primaryKey({ columns: [t.key] })],\n  );\n\n  const baseSchemaVersions = pgTable(\n    n.baseSchemaVersions,\n    {\n      installation: integer(\"installation\").notNull(),\n      version: integer(\"version\").notNull(),\n      updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull(),\n    },\n    (t) => [\n      primaryKey({ columns: [t.installation] }),\n      check(\n        systemIndexName(n.baseSchemaVersions, \"singleton_check\"),\n        sql`${t.installation} = 1`,\n      ),\n    ],\n  );\n\n  const schemaVersions = pgTable(\n    n.schemaVersions,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      version: integer(\"version\").notNull(),\n      schemaHash: text(\"schema_hash\").notNull(),\n      schemaDoc: jsonb(\"schema_doc\").notNull(),\n      createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull(),\n      isActive: boolean(\"is_active\").notNull().default(false),\n    },\n    (t) => [\n      primaryKey({ columns: [t.graphId, t.version] }),\n      index(`${n.schemaVersions}_active_idx`).on(t.graphId, t.isActive),\n      // Partial unique index enforcing the \"at most one active version\n      // per graph\" invariant at the storage layer. Defense in depth\n      // against buggy backend implementations or out-of-band writes.\n      // Forces the deactivate-then-activate ordering used by\n      // `commitSchemaVersion` and `setActiveVersion`.\n      uniqueIndex(`${n.schemaVersions}_one_active_per_graph_idx`)\n        .on(t.graphId)\n        .where(sql`${t.isActive} = TRUE`),\n    ],\n  );\n\n  const graphTemplates = pgTable(\n    n.graphTemplates,\n    {\n      templateId: text(\"template_id\").notNull(),\n      schemaHash: text(\"schema_hash\").notNull(),\n      schemaDoc: jsonb(\"schema_doc\").notNull(),\n      createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull(),\n    },\n    (t) => [primaryKey({ columns: [t.templateId] })],\n  );\n\n  /**\n   * Per-deployment record of which declared indexes have been\n   * materialized against this database. Owned and written by\n   * `store.materializeIndexes()`. Keyed on `index_name` because SQL\n   * index names are physical, database-global identifiers — `graphId`\n   * is provenance, not identity.\n   */\n  const indexMaterializations = pgTable(\n    n.indexMaterializations,\n    {\n      indexName: text(\"index_name\").notNull(),\n      graphId: text(\"graph_id\").notNull(),\n      entity: text(\"entity\").notNull(),\n      kind: text(\"kind\").notNull(),\n      signature: text(\"signature\").notNull(),\n      schemaVersion: integer(\"schema_version\").notNull(),\n      materializedAt: timestamp(\"materialized_at\", { withTimezone: true }),\n      lastAttemptedAt: timestamp(\"last_attempted_at\", {\n        withTimezone: true,\n      }).notNull(),\n      lastError: text(\"last_error\"),\n      // Cross-caller build claim: while `building_since` is fresh (within\n      // the lease), exactly one materializer owns this index's CREATE\n      // INDEX CONCURRENTLY. Serializes same-index CIC across processes —\n      // two concurrent expression-index CICs deadlock each other (no\n      // safe-snapshot exemption). NULL when no build is in flight.\n      buildingSince: timestamp(\"building_since\", { withTimezone: true }),\n      claimToken: text(\"claim_token\"),\n    },\n    (t) => [primaryKey({ columns: [t.indexName] })],\n  );\n\n  /**\n   * Per-deployment record of extension kinds removed via\n   * `store.removeKinds()` whose data has not yet been cleaned up by\n   * `store.materializeRemovals()`. Same per-deployment rationale as\n   * `indexMaterializations`: two replicas of the same `schema_doc` may\n   * be at different stages of the data-cleanup phase. Keyed on\n   * `(graph_id, kind_name, entity, schema_version)` — each remove\n   * operation is its own row. `entity` separates a node and an edge\n   * that share a kind name; the `schema_version` discriminator keeps a\n   * re-add-then-re-remove cycle from collapsing onto the prior row,\n   * where the COALESCE-on-failure rule would preserve the earlier\n   * `removed_at` and silently skip the new pending cleanup.\n   */\n  const kindRemovals = pgTable(\n    n.kindRemovals,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      kindName: text(\"kind_name\").notNull(),\n      entity: text(\"entity\").notNull(),\n      schemaVersion: integer(\"schema_version\").notNull(),\n      removedAt: timestamp(\"removed_at\", { withTimezone: true }),\n      lastAttemptedAt: timestamp(\"last_attempted_at\", {\n        withTimezone: true,\n      }).notNull(),\n      lastError: text(\"last_error\"),\n    },\n    (t) => [\n      primaryKey({\n        columns: [t.graphId, t.kindName, t.entity, t.schemaVersion],\n      }),\n    ],\n  );\n\n  /**\n   * Per-deployment high-water mark for `materializeRemovals`\n   * reconciliation: the schema version up to which the historical\n   * \"did every removal land in `kindRemovals`?\" walk has been\n   * verified. Subsequent calls walk only versions newer than this\n   * marker, instead of re-walking from version 1 every time.\n   */\n  const reconciliationMarkers = pgTable(\n    n.reconciliationMarkers,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      reconciledToVersion: integer(\"reconciled_to_version\").notNull(),\n    },\n    (t) => [primaryKey({ columns: [t.graphId] })],\n  );\n\n  /**\n   * Durable markers for strategy-owned table contributions (#129). A\n   * deployment-scoped physical contribution uses the reserved deployment\n   * graph id, while a graph row records logical activation. Keyed on\n   * `(graph_id, logical_name, owner, table_name)`; `signature` is\n   * deliberately NOT in the key so same-identity drift is detectable\n   * rather than silently re-materialized.\n   */\n  const contributionMaterializations = pgTable(\n    n.contributionMaterializations,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      logicalName: text(\"logical_name\").notNull(),\n      owner: text(\"owner\").notNull(),\n      tableName: text(\"table_name\").notNull(),\n      signature: text(\"signature\").notNull(),\n      materializedAt: timestamp(\"materialized_at\", { withTimezone: true }),\n      lastAttemptedAt: timestamp(\"last_attempted_at\", {\n        withTimezone: true,\n      }).notNull(),\n      lastError: text(\"last_error\"),\n    },\n    (t) => [\n      primaryKey({\n        columns: [t.graphId, t.logicalName, t.owner, t.tableName],\n      }),\n    ],\n  );\n\n  /**\n   * Drizzle pg-core table for the default `tsvectorStrategy` so\n   * drizzle-kit can introspect the fulltext table alongside the\n   * others. Mirrors `tsvectorStrategy.ownedTables(...).createDdl` —\n   * the typed shape and the strategy DDL must stay in sync (drift\n   * sentinel lives in `tests/typed-fulltext-table.test.ts`).\n   *\n   * Why `regconfig` + GENERATED: `to_tsvector(\"language\", \"content\")`\n   * needs an immutable language to qualify for use inside a\n   * `STORED` generated column, so Postgres can own the\n   * `content → tsv` invariant.\n   *\n   * Alternate strategies (pg_trgm, ParadeDB, pgroonga) bring their\n   * own DDL; `generatePostgresDDL` skips this typed table for them\n   * and defers to the active strategy's `ownedTables(...).createDdl`.\n   * Drizzle-kit consumers on non-default strategies must override\n   * `tables.fulltext` in their schema barrel.\n   */\n  const fulltext = pgTable(\n    n.fulltext,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      nodeKind: text(\"node_kind\").notNull(),\n      nodeId: text(\"node_id\").notNull(),\n      content: text(\"content\").notNull(),\n      language: regconfig(\"language\").notNull(),\n      tsv: tsvector(\"tsv\")\n        .generatedAlwaysAs(sql`to_tsvector(\"language\", \"content\")`)\n        .notNull(),\n      updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull(),\n    },\n    (t) => [\n      primaryKey({ columns: [t.graphId, t.nodeKind, t.nodeId] }),\n      index(`${n.fulltext}_tsv_idx`).using(\"gin\", t.tsv),\n      index(`${n.fulltext}_kind_idx`).on(t.graphId, t.nodeKind),\n    ],\n  );\n\n  return {\n    nodes,\n    edges,\n    recordedNodes,\n    recordedEdges,\n    recordedClock,\n    revisionOrigins,\n    identityAssertions,\n    recordedIdentityAssertions,\n    identityClosure,\n    identitySeparation,\n    uniques,\n    edgeClaims,\n    fences,\n    baseSchemaVersions,\n    schemaVersions,\n    graphTemplates,\n    indexMaterializations,\n    contributionMaterializations,\n    kindRemovals,\n    reconciliationMarkers,\n    fulltext,\n    fulltextTableName: n.fulltext,\n  } as const;\n}\n\n/**\n * Default tables with standard TypeGraph table names.\n */\nexport const tables = createPostgresTables();\n\n/**\n * Convenience exports for default tables.\n */\nexport const {\n  nodes,\n  edges,\n  recordedNodes,\n  recordedEdges,\n  recordedClock,\n  uniques,\n  edgeClaims,\n  schemaVersions,\n  fulltext,\n} = tables;\n\n/**\n * Type representing the tables object returned by createPostgresTables.\n */\nexport type PostgresTables = ReturnType<typeof createPostgresTables>;\n","/**\n * Drizzle SQLite schema for TypeGraph.\n *\n * Provides table definitions that can be customized via the factory function.\n * Users import these tables into their Drizzle schema and use drizzle-kit\n * for migrations.\n *\n * @example\n * ```typescript\n * // Default table names\n * import { tables } from \"@nicia-ai/typegraph/adapters/drizzle/sqlite\";\n *\n * // Custom table names\n * import { createSqliteTables } from \"@nicia-ai/typegraph/adapters/drizzle/sqlite\";\n * const tables = createSqliteTables({\n *   nodes: \"myapp_nodes\",\n *   edges: \"myapp_edges\",\n * });\n * ```\n */\nimport { sql } from \"drizzle-orm\";\nimport {\n  check,\n  index,\n  integer,\n  primaryKey,\n  sqliteTable,\n  text,\n  uniqueIndex,\n} from \"drizzle-orm/sqlite-core\";\n\nimport {\n  buildSqliteEdgeIndexBuilders,\n  buildSqliteNodeIndexBuilders,\n  buildSqliteSystemIndexBuilders,\n} from \"../../../indexes/drizzle\";\nimport {\n  assertNoSystemIndexNameCollision,\n  systemIndexName,\n} from \"../../../indexes/system\";\nimport { type IndexDeclaration } from \"../../../indexes/types\";\n\n/**\n * Table name configuration.\n */\nexport type SqliteTableNames = Readonly<{\n  nodes: string;\n  edges: string;\n  recordedNodes: string;\n  recordedEdges: string;\n  recordedClock: string;\n  revisionOrigins: string;\n  identityAssertions: string;\n  recordedIdentityAssertions: string;\n  identityClosure: string;\n  identitySeparation: string;\n  uniques: string;\n  edgeClaims: string;\n  baseSchemaVersions: string;\n  schemaVersions: string;\n  graphTemplates: string;\n  fulltext: string;\n  indexMaterializations: string;\n  contributionMaterializations: string;\n  kindRemovals: string;\n  reconciliationMarkers: string;\n  fences: string;\n}>;\n\n// Moved to `../../table-names` (the module that owns physical table-name\n// resolution for the backend layer). Re-exported here so this module's own\n// callers and any external importer of `./adapters/drizzle/sqlite` see no\n// change. Resolved only by `tests/migrate-vectors.test.ts` — that import is\n// what keeps knip from reporting this re-export as unused.\nexport { LEGACY_EMBEDDINGS_TABLE_NAME } from \"../../table-names\";\n\nexport type CreateSqliteTablesOptions = Readonly<{\n  /**\n   * Additional TypeGraph indexes to include in the Drizzle schema.\n   *\n   * These become first-class Drizzle indexes, so drizzle-kit migrations will\n   * pick them up automatically.\n   */\n  indexes?: readonly IndexDeclaration[] | undefined;\n}>;\n\nconst DEFAULT_TABLE_NAMES: SqliteTableNames = {\n  nodes: \"typegraph_nodes\",\n  edges: \"typegraph_edges\",\n  recordedNodes: \"typegraph_recorded_nodes\",\n  recordedEdges: \"typegraph_recorded_edges\",\n  recordedClock: \"typegraph_recorded_clock\",\n  revisionOrigins: \"typegraph_revision_origins\",\n  identityAssertions: \"typegraph_identity_assertions\",\n  recordedIdentityAssertions: \"typegraph_recorded_identity_assertions\",\n  identityClosure: \"typegraph_identity_closure\",\n  identitySeparation: \"typegraph_identity_separation\",\n  uniques: \"typegraph_node_uniques\",\n  edgeClaims: \"typegraph_edge_claims\",\n  baseSchemaVersions: \"typegraph_base_schema_versions\",\n  schemaVersions: \"typegraph_schema_versions\",\n  graphTemplates: \"typegraph_graph_templates\",\n  fulltext: \"typegraph_node_fulltext\",\n  indexMaterializations: \"typegraph_index_materializations\",\n  contributionMaterializations: \"typegraph_contribution_materializations\",\n  kindRemovals: \"typegraph_kind_removals\",\n  reconciliationMarkers: \"typegraph_reconciliation_markers\",\n  fences: \"typegraph_fences\",\n};\n\n/**\n * Creates SQLite table definitions with customizable table names.\n * Index names are derived from table names.\n */\nexport function createSqliteTables(\n  names: Partial<SqliteTableNames> = {},\n  options: CreateSqliteTablesOptions = {},\n) {\n  const n: SqliteTableNames = { ...DEFAULT_TABLE_NAMES, ...names };\n  const indexes = options.indexes ?? [];\n  assertNoSystemIndexNameCollision(indexes, n);\n\n  const nodes = sqliteTable(\n    n.nodes,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      kind: text(\"kind\").notNull(),\n      id: text(\"id\").notNull(),\n      props: text(\"props\").notNull(),\n      version: integer(\"version\").notNull().default(1),\n      validFrom: text(\"valid_from\"),\n      validTo: text(\"valid_to\"),\n      createdAt: text(\"created_at\").notNull(),\n      updatedAt: text(\"updated_at\").notNull(),\n      deletedAt: text(\"deleted_at\"),\n    },\n    (t) => [\n      primaryKey({ columns: [t.graphId, t.kind, t.id] }),\n      // System indexes come from SYSTEM_INDEX_DECLARATIONS (single source\n      // for both dialects + the runtime materializer).\n      ...buildSqliteSystemIndexBuilders(\"nodes\", n.nodes, t),\n      ...buildSqliteNodeIndexBuilders(t, indexes),\n    ],\n  );\n\n  const edges = sqliteTable(\n    n.edges,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      id: text(\"id\").notNull(),\n      kind: text(\"kind\").notNull(),\n      fromKind: text(\"from_kind\").notNull(),\n      fromId: text(\"from_id\").notNull(),\n      toKind: text(\"to_kind\").notNull(),\n      toId: text(\"to_id\").notNull(),\n      props: text(\"props\").notNull(),\n      matchIdentityName: text(\"match_identity_name\"),\n      matchIdentityKey: text(\"match_identity_key\"),\n      validFrom: text(\"valid_from\"),\n      validTo: text(\"valid_to\"),\n      createdAt: text(\"created_at\").notNull(),\n      updatedAt: text(\"updated_at\").notNull(),\n      deletedAt: text(\"deleted_at\"),\n    },\n    (t) => [\n      primaryKey({ columns: [t.graphId, t.id] }),\n      uniqueIndex(systemIndexName(n.edges, \"match_identity_uq\")).on(\n        t.graphId,\n        t.kind,\n        t.matchIdentityName,\n        t.matchIdentityKey,\n      ),\n      check(\n        systemIndexName(n.edges, \"match_identity_pair_check\"),\n        sql`(${t.matchIdentityName} IS NULL) = (${t.matchIdentityKey} IS NULL)`,\n      ),\n      ...buildSqliteSystemIndexBuilders(\"edges\", n.edges, t),\n      ...buildSqliteEdgeIndexBuilders(t, indexes),\n    ],\n  );\n\n  const recordedNodes = sqliteTable(\n    n.recordedNodes,\n    {\n      historyId: text(\"history_id\").notNull(),\n      graphId: text(\"graph_id\").notNull(),\n      kind: text(\"kind\").notNull(),\n      id: text(\"id\").notNull(),\n      props: text(\"props\").notNull(),\n      version: integer(\"version\").notNull(),\n      validFrom: text(\"valid_from\"),\n      validTo: text(\"valid_to\"),\n      createdAt: text(\"created_at\").notNull(),\n      updatedAt: text(\"updated_at\").notNull(),\n      deletedAt: text(\"deleted_at\"),\n      recordedFrom: integer(\"recorded_from\").notNull(),\n      recordedTo: integer(\"recorded_to\").notNull(),\n      op: text(\"op\").notNull(),\n      schemaVersion: integer(\"schema_version\"),\n      txId: text(\"tx_id\"),\n      meta: text(\"meta\"),\n    },\n    (t) => [\n      primaryKey({ columns: [t.historyId] }),\n      ...buildSqliteSystemIndexBuilders(\"recordedNodes\", n.recordedNodes, t),\n    ],\n  );\n\n  const recordedEdges = sqliteTable(\n    n.recordedEdges,\n    {\n      historyId: text(\"history_id\").notNull(),\n      graphId: text(\"graph_id\").notNull(),\n      id: text(\"id\").notNull(),\n      kind: text(\"kind\").notNull(),\n      fromKind: text(\"from_kind\").notNull(),\n      fromId: text(\"from_id\").notNull(),\n      toKind: text(\"to_kind\").notNull(),\n      toId: text(\"to_id\").notNull(),\n      props: text(\"props\").notNull(),\n      validFrom: text(\"valid_from\"),\n      validTo: text(\"valid_to\"),\n      createdAt: text(\"created_at\").notNull(),\n      updatedAt: text(\"updated_at\").notNull(),\n      deletedAt: text(\"deleted_at\"),\n      recordedFrom: integer(\"recorded_from\").notNull(),\n      recordedTo: integer(\"recorded_to\").notNull(),\n      op: text(\"op\").notNull(),\n      schemaVersion: integer(\"schema_version\"),\n      txId: text(\"tx_id\"),\n      meta: text(\"meta\"),\n    },\n    (t) => [\n      primaryKey({ columns: [t.historyId] }),\n      ...buildSqliteSystemIndexBuilders(\"recordedEdges\", n.recordedEdges, t),\n    ],\n  );\n\n  const recordedClock = sqliteTable(\n    n.recordedClock,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      revision: integer(\"revision\").notNull(),\n      recordedAt: text(\"recorded_at\").notNull(),\n    },\n    (t) => [primaryKey({ columns: [t.graphId] })],\n  );\n\n  const revisionOrigins = sqliteTable(\n    n.revisionOrigins,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      origin: text(\"origin\").notNull(),\n    },\n    (t) => [primaryKey({ columns: [t.graphId] })],\n  );\n\n  // The identity assertion ledger. `ended_by_kind` / `ended_by_id` record WHY\n  // an assertion stopped being current: NULL for an explicit retraction,\n  // populated with the deleted endpoint's `(kind, id)` when a node soft-delete\n  // cascaded onto it. The CHECK holds the two invariants the writers rely on —\n  // the pair is set or unset together, and a cause only ever names an ENDED\n  // row's own endpoint.\n  const identityAssertions = sqliteTable(\n    n.identityAssertions,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      id: text(\"id\").notNull(),\n      relation: text(\"rel\").notNull(),\n      aKind: text(\"a_kind\").notNull(),\n      aId: text(\"a_id\").notNull(),\n      bKind: text(\"b_kind\").notNull(),\n      bId: text(\"b_id\").notNull(),\n      validFrom: text(\"valid_from\").notNull(),\n      validTo: text(\"valid_to\"),\n      createdAt: text(\"created_at\").notNull(),\n      updatedAt: text(\"updated_at\").notNull(),\n      deletedAt: text(\"deleted_at\"),\n      endedByKind: text(\"ended_by_kind\"),\n      endedById: text(\"ended_by_id\"),\n    },\n    (t) => [\n      primaryKey({ columns: [t.graphId, t.id] }),\n      index(`${n.identityAssertions}_a_idx`).on(\n        t.graphId,\n        t.aKind,\n        t.aId,\n        t.validTo,\n      ),\n      index(`${n.identityAssertions}_b_idx`).on(\n        t.graphId,\n        t.bKind,\n        t.bId,\n        t.validTo,\n      ),\n      uniqueIndex(`${n.identityAssertions}_current_pair_idx`)\n        .on(t.graphId, t.relation, t.aKind, t.aId, t.bKind, t.bId)\n        .where(sql`${t.validTo} IS NULL`),\n      check(\n        `${n.identityAssertions}_ended_by_check`,\n        sql`(ended_by_kind IS NULL) = (ended_by_id IS NULL) AND (ended_by_kind IS NULL OR (valid_to IS NOT NULL AND ((ended_by_kind = a_kind AND ended_by_id = a_id) OR (ended_by_kind = b_kind AND ended_by_id = b_id))))`,\n      ),\n    ],\n  );\n\n  const recordedIdentityAssertions = sqliteTable(\n    n.recordedIdentityAssertions,\n    {\n      historyId: text(\"history_id\").notNull(),\n      graphId: text(\"graph_id\").notNull(),\n      id: text(\"id\").notNull(),\n      relation: text(\"rel\").notNull(),\n      aKind: text(\"a_kind\").notNull(),\n      aId: text(\"a_id\").notNull(),\n      bKind: text(\"b_kind\").notNull(),\n      bId: text(\"b_id\").notNull(),\n      validFrom: text(\"valid_from\").notNull(),\n      validTo: text(\"valid_to\"),\n      createdAt: text(\"created_at\").notNull(),\n      updatedAt: text(\"updated_at\").notNull(),\n      deletedAt: text(\"deleted_at\"),\n      endedByKind: text(\"ended_by_kind\"),\n      endedById: text(\"ended_by_id\"),\n      recordedFrom: integer(\"recorded_from\").notNull(),\n      recordedTo: integer(\"recorded_to\").notNull(),\n      op: text(\"op\").notNull(),\n      schemaVersion: integer(\"schema_version\"),\n      txId: text(\"tx_id\"),\n      meta: text(\"meta\"),\n    },\n    (t) => [\n      primaryKey({ columns: [t.historyId] }),\n      index(`${n.recordedIdentityAssertions}_entity_idx`).on(\n        t.graphId,\n        t.id,\n        t.recordedFrom,\n        t.recordedTo,\n      ),\n      index(`${n.recordedIdentityAssertions}_a_idx`).on(\n        t.graphId,\n        t.aKind,\n        t.aId,\n        t.recordedFrom,\n        t.recordedTo,\n      ),\n      index(`${n.recordedIdentityAssertions}_b_idx`).on(\n        t.graphId,\n        t.bKind,\n        t.bId,\n        t.recordedFrom,\n        t.recordedTo,\n      ),\n      // `recorded_from`-led lookup, same rationale as the two recorded\n      // relations' `since_idx` (`../../../indexes/system.ts`): `entity_idx`/\n      // `a_idx`/`b_idx` all lead with an endpoint, not `recorded_from`\n      // alone, so none can serve `changesSince`'s per-revision completeness\n      // scan (`store/recorded-capture/lineage.ts`) without a full table scan.\n      index(systemIndexName(n.recordedIdentityAssertions, \"since_idx\")).on(\n        t.graphId,\n        t.recordedFrom,\n      ),\n    ],\n  );\n\n  const identityClosure = sqliteTable(\n    n.identityClosure,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      memberKind: text(\"member_kind\").notNull(),\n      memberId: text(\"member_id\").notNull(),\n      classKind: text(\"class_kind\").notNull(),\n      classId: text(\"class_id\").notNull(),\n    },\n    (t) => [\n      primaryKey({ columns: [t.graphId, t.memberKind, t.memberId] }),\n      index(`${n.identityClosure}_class_idx`).on(\n        t.graphId,\n        t.classKind,\n        t.classId,\n      ),\n    ],\n  );\n\n  // The identity separation relation: the `different` ledger lifted to whole\n  // identity classes, one row per separated class pair. `class_key_low` /\n  // `class_key_high` hold the persisted class-key encoding (see\n  // `identity/separation.ts`), ordered by code point so the CHECK below —\n  // SQLite compares TEXT with the BINARY collation, which is code-point order\n  // — rejects `low = high`. Fusing two separated classes relabels both sides\n  // of their shared row to one key, so the contradiction cannot commit.\n  const identitySeparation = sqliteTable(\n    n.identitySeparation,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      classKeyLow: text(\"class_key_low\").notNull(),\n      classKeyHigh: text(\"class_key_high\").notNull(),\n    },\n    (t) => [\n      primaryKey({ columns: [t.graphId, t.classKeyLow, t.classKeyHigh] }),\n      index(`${n.identitySeparation}_high_idx`).on(t.graphId, t.classKeyHigh),\n      check(\n        `${n.identitySeparation}_ordered_pair_check`,\n        sql`class_key_low < class_key_high`,\n      ),\n    ],\n  );\n\n  const uniques = sqliteTable(\n    n.uniques,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      nodeKind: text(\"node_kind\").notNull(),\n      constraintName: text(\"constraint_name\").notNull(),\n      key: text(\"key\").notNull(),\n      nodeId: text(\"node_id\").notNull(),\n      concreteKind: text(\"concrete_kind\").notNull(),\n      deletedAt: text(\"deleted_at\"),\n    },\n    (t) => [\n      primaryKey({\n        columns: [t.graphId, t.nodeKind, t.constraintName, t.key],\n      }),\n      index(`${n.uniques}_node_idx`).on(t.graphId, t.concreteKind, t.nodeId),\n    ],\n  );\n\n  // The edge cardinality claim relation — same shape and same role as the\n  // PostgreSQL table, with a text timestamp, mirroring `uniques`. See\n  // `store/claims/edge-claims.ts` for why it needs no release path.\n  const edgeClaims = sqliteTable(\n    n.edgeClaims,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      axis: text(\"axis\").notNull(),\n      key: text(\"key\").notNull(),\n      edgeId: text(\"edge_id\").notNull(),\n      updatedAt: text(\"updated_at\").notNull(),\n    },\n    (t) => [\n      primaryKey({ columns: [t.graphId, t.axis, t.key] }),\n      index(`${n.edgeClaims}_edge_idx`).on(t.graphId, t.edgeId),\n    ],\n  );\n\n  // The write-fence rows relation: one row per keyed exclusion a `row`\n  // mechanism has ever acquired, keyed on `<namespace>:<key>` (the existing\n  // advisory namespaces, verbatim). Never dropped, never row-deleted, never\n  // touched by `clear()` — the same never-dropped posture as\n  // `schema_versions`, `recorded_clock`. `generation` is the acquire\n  // statement's own monotonically increasing counter (see\n  // `resolveFenceStatements`'s `row` derivation); it is not consumed here,\n  // only stored.\n  const fences = sqliteTable(\n    n.fences,\n    {\n      key: text(\"key\").notNull(),\n      generation: integer(\"generation\").notNull(),\n    },\n    (t) => [primaryKey({ columns: [t.key] })],\n  );\n\n  const baseSchemaVersions = sqliteTable(\n    n.baseSchemaVersions,\n    {\n      installation: integer(\"installation\").notNull(),\n      version: integer(\"version\").notNull(),\n      updatedAt: text(\"updated_at\").notNull(),\n    },\n    (t) => [\n      primaryKey({ columns: [t.installation] }),\n      check(\n        systemIndexName(n.baseSchemaVersions, \"singleton_check\"),\n        sql`${t.installation} = 1`,\n      ),\n    ],\n  );\n\n  const schemaVersions = sqliteTable(\n    n.schemaVersions,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      version: integer(\"version\").notNull(),\n      schemaHash: text(\"schema_hash\").notNull(),\n      schemaDoc: text(\"schema_doc\").notNull(),\n      createdAt: text(\"created_at\").notNull(),\n      isActive: integer(\"is_active\", { mode: \"boolean\" })\n        .notNull()\n        .default(false),\n    },\n    (t) => [\n      primaryKey({ columns: [t.graphId, t.version] }),\n      index(`${n.schemaVersions}_active_idx`).on(t.graphId, t.isActive),\n      // Partial unique index enforcing the \"at most one active version\n      // per graph\" invariant at the storage layer. Defense in depth\n      // against buggy backend implementations or out-of-band writes.\n      // Forces the deactivate-then-activate ordering used by\n      // `commitSchemaVersion` and `setActiveVersion`.\n      uniqueIndex(`${n.schemaVersions}_one_active_per_graph_idx`)\n        .on(t.graphId)\n        .where(sql`${t.isActive} = 1`),\n    ],\n  );\n\n  const graphTemplates = sqliteTable(\n    n.graphTemplates,\n    {\n      templateId: text(\"template_id\").notNull(),\n      schemaHash: text(\"schema_hash\").notNull(),\n      schemaDoc: text(\"schema_doc\").notNull(),\n      createdAt: text(\"created_at\").notNull(),\n    },\n    (t) => [primaryKey({ columns: [t.templateId] })],\n  );\n\n  /**\n   * Per-deployment record of which declared indexes have been\n   * materialized against this database. Owned and written by\n   * `store.materializeIndexes()`. Keyed on `index_name` because SQL\n   * index names are physical, database-global identifiers — `graphId`\n   * is provenance, not identity.\n   */\n  const indexMaterializations = sqliteTable(\n    n.indexMaterializations,\n    {\n      indexName: text(\"index_name\").notNull(),\n      graphId: text(\"graph_id\").notNull(),\n      entity: text(\"entity\").notNull(),\n      kind: text(\"kind\").notNull(),\n      signature: text(\"signature\").notNull(),\n      schemaVersion: integer(\"schema_version\").notNull(),\n      materializedAt: text(\"materialized_at\"),\n      lastAttemptedAt: text(\"last_attempted_at\").notNull(),\n      lastError: text(\"last_error\"),\n    },\n    (t) => [primaryKey({ columns: [t.indexName] })],\n  );\n\n  /**\n   * Per-deployment record of extension kinds removed via\n   * `store.removeKinds()` whose data has not yet been cleaned up by\n   * `store.materializeRemovals()`. Keyed on `(graph_id, kind_name,\n   * entity, schema_version)` — each remove operation is its own row.\n   * `entity` separates a node and an edge that share a kind name; the\n   * `schema_version` discriminator keeps a re-add-then-re-remove cycle\n   * (Foo removed at v=N, re-added, then removed again at v=N+2) from\n   * collapsing onto the prior row, where the COALESCE-on-failure rule\n   * would preserve the earlier `removed_at` and silently skip the new\n   * pending cleanup. `removed_at` is null until the data-cleanup pass\n   * succeeds; the pending set is \"rows where removed_at IS NULL\".\n   */\n  const kindRemovals = sqliteTable(\n    n.kindRemovals,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      kindName: text(\"kind_name\").notNull(),\n      entity: text(\"entity\").notNull(),\n      schemaVersion: integer(\"schema_version\").notNull(),\n      removedAt: text(\"removed_at\"),\n      lastAttemptedAt: text(\"last_attempted_at\").notNull(),\n      lastError: text(\"last_error\"),\n    },\n    (t) => [\n      primaryKey({\n        columns: [t.graphId, t.kindName, t.entity, t.schemaVersion],\n      }),\n    ],\n  );\n\n  /**\n   * Per-deployment high-water mark for the `materializeRemovals`\n   * reconciliation walk. One row per `graph_id` carrying the schema\n   * version up to which the historical \"did every removal land in\n   * `kindRemovals`?\" walk has been verified. Lets subsequent calls\n   * skip already-checked transitions instead of re-walking from\n   * version 1 every time.\n   */\n  const reconciliationMarkers = sqliteTable(\n    n.reconciliationMarkers,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      reconciledToVersion: integer(\"reconciled_to_version\").notNull(),\n    },\n    (t) => [primaryKey({ columns: [t.graphId] })],\n  );\n\n  /**\n   * Durable markers for strategy-owned table contributions (#129). A\n   * deployment-scoped physical contribution uses the reserved deployment\n   * graph id, while a graph row records logical activation. Keyed on\n   * `(graph_id, logical_name, owner, table_name)`; `signature` stays out of\n   * the key so same-identity drift is a loud error, not a silent\n   * re-materialize.\n   */\n  const contributionMaterializations = sqliteTable(\n    n.contributionMaterializations,\n    {\n      graphId: text(\"graph_id\").notNull(),\n      logicalName: text(\"logical_name\").notNull(),\n      owner: text(\"owner\").notNull(),\n      tableName: text(\"table_name\").notNull(),\n      signature: text(\"signature\").notNull(),\n      materializedAt: text(\"materialized_at\"),\n      lastAttemptedAt: text(\"last_attempted_at\").notNull(),\n      lastError: text(\"last_error\"),\n    },\n    (t) => [\n      primaryKey({\n        columns: [t.graphId, t.logicalName, t.owner, t.tableName],\n      }),\n    ],\n  );\n\n  return {\n    nodes,\n    edges,\n    recordedNodes,\n    recordedEdges,\n    recordedClock,\n    revisionOrigins,\n    identityAssertions,\n    recordedIdentityAssertions,\n    identityClosure,\n    identitySeparation,\n    uniques,\n    edgeClaims,\n    fences,\n    baseSchemaVersions,\n    schemaVersions,\n    graphTemplates,\n    indexMaterializations,\n    contributionMaterializations,\n    kindRemovals,\n    reconciliationMarkers,\n    /**\n     * The fulltext storage is a FTS5 virtual table which Drizzle cannot\n     * represent. DDL is emitted as raw SQL and operations query it via\n     * `sql.raw()`.\n     */\n    fulltextTableName: n.fulltext,\n  } as const;\n}\n\n/**\n * Default tables with standard TypeGraph table names.\n */\nexport const tables = createSqliteTables();\n\n/**\n * Convenience exports for default tables.\n */\nexport const {\n  nodes,\n  edges,\n  recordedNodes,\n  recordedEdges,\n  recordedClock,\n  uniques,\n  edgeClaims,\n  schemaVersions,\n} = tables;\n\n/**\n * Type representing the tables object returned by createSqliteTables.\n */\nexport type SqliteTables = ReturnType<typeof createSqliteTables>;\n","/**\n * DDL generation utilities for TypeGraph backends.\n *\n * Provides utilities for generating DDL statements from Drizzle\n * table definitions. This ensures migrations match production schema.\n */\nimport { is } from \"drizzle-orm\";\nimport {\n  getTableConfig as getPgTableConfig,\n  type PgColumn,\n  PgTable,\n  type PgTableWithColumns,\n} from \"drizzle-orm/pg-core\";\nimport {\n  getTableConfig as getSqliteTableConfig,\n  type SQLiteColumn,\n  SQLiteTable,\n  type SQLiteTableWithColumns,\n} from \"drizzle-orm/sqlite-core\";\n\nimport { systemIndexName } from \"../../indexes/system\";\nimport {\n  fts5Strategy,\n  type FulltextStrategy,\n  tsvectorStrategy,\n} from \"../../query/dialect/fulltext-strategy\";\nimport {\n  BASE_CONTRIBUTION_OWNER,\n  type StrategyTableContribution,\n  type TableContribution,\n} from \"../table-contribution\";\nimport { CURRENT_BASE_SCHEMA_VERSION } from \"./base-schema\";\nimport {\n  type PostgresTables,\n  tables as postgresTables,\n} from \"./schema/postgres\";\nimport { type SqliteTables, tables as sqliteTables } from \"./schema/sqlite\";\n\n// Narrow interfaces for Drizzle column internals not exposed in public types.\n// These are accessed only in DDL generation for migration scripts.\ntype TimestampColumnConfig = Readonly<{\n  config?: Readonly<{ withTimezone?: boolean }>;\n}>;\ntype CustomColumnType = Readonly<{\n  getSQLType?: () => string;\n}>;\n\nconst EDGE_MATCH_IDENTITY_NAME_COLUMN = \"match_identity_name\";\nconst EDGE_MATCH_IDENTITY_KEY_COLUMN = \"match_identity_key\";\n\nexport function quoteDdlIdentifier(identifier: string): string {\n  return `\"${identifier.replaceAll('\"', '\"\"')}\"`;\n}\n\ntype BaseSchemaVersionMarkerTable = Readonly<{\n  installation: Readonly<{ name: string }>;\n  updatedAt: Readonly<{ name: string }>;\n  version: Readonly<{ name: string }>;\n}>;\n\n/** Publishes the lifecycle version owned by a complete fresh installation. */\nfunction generateBaseSchemaVersionMarkerSQL(\n  tableName: string,\n  columns: BaseSchemaVersionMarkerTable,\n): string {\n  const table = quoteDdlIdentifier(tableName);\n  const installation = quoteDdlIdentifier(columns.installation.name);\n  const version = quoteDdlIdentifier(columns.version.name);\n  const updatedAt = quoteDdlIdentifier(columns.updatedAt.name);\n  // DO NOTHING is deliberate: this generator is a fresh-installation tool,\n  // not an upgrade planner. Replaying it must never advance a stale marker\n  // without running the numbered adoption steps that marker certifies.\n  return `INSERT INTO ${table} (${installation}, ${version}, ${updatedAt})\nVALUES (1, ${String(CURRENT_BASE_SCHEMA_VERSION)}, CURRENT_TIMESTAMP)\nON CONFLICT (${installation}) DO NOTHING;`;\n}\n\n/** Identifier-preserving text accepted by PostgreSQL's `regclass` input. */\nexport function postgresIdentifierRegclassName(identifier: string): string {\n  return quoteDdlIdentifier(identifier);\n}\n\n/** Names shared by schema DDL and the additive bootstrap upgrade. */\nexport function edgeMatchIdentityUniqueIndexName(tableName: string): string {\n  return systemIndexName(tableName, \"match_identity_uq\");\n}\n\nexport function edgeMatchIdentityPairCheckName(tableName: string): string {\n  return systemIndexName(tableName, \"match_identity_pair_check\");\n}\n\n/** Generates idempotent PostgreSQL DDL for adopting an existing edge table. */\nexport function generatePostgresEdgeMatchIdentityUpgradeDDL(\n  tableName: string,\n): readonly string[] {\n  const table = quoteDdlIdentifier(tableName);\n  const nameColumn = quoteDdlIdentifier(EDGE_MATCH_IDENTITY_NAME_COLUMN);\n  const keyColumn = quoteDdlIdentifier(EDGE_MATCH_IDENTITY_KEY_COLUMN);\n  const checkName = edgeMatchIdentityPairCheckName(tableName);\n  const indexName = edgeMatchIdentityUniqueIndexName(tableName);\n  const escapedTableName = postgresIdentifierRegclassName(tableName).replaceAll(\n    \"'\",\n    \"''\",\n  );\n  return [\n    `ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${nameColumn} TEXT;`,\n    `ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${keyColumn} TEXT;`,\n    `DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conrelid = to_regclass('${escapedTableName}') AND conname = '${checkName.replaceAll(\"'\", \"''\")}') THEN ALTER TABLE ${table} ADD CONSTRAINT ${quoteDdlIdentifier(checkName)} CHECK ((${nameColumn} IS NULL) = (${keyColumn} IS NULL)); END IF; END $$;`,\n    `CREATE UNIQUE INDEX IF NOT EXISTS ${quoteDdlIdentifier(indexName)} ON ${table} (${quoteDdlIdentifier(\"graph_id\")}, ${quoteDdlIdentifier(\"kind\")}, ${nameColumn}, ${keyColumn});`,\n  ];\n}\n\n/**\n * SQLite has no `ADD COLUMN IF NOT EXISTS`; the adapter checks PRAGMA\n * table_info before running this statement. The pair check is placed on the\n * second added column so old edge tables receive the invariant without a\n * destructive table rebuild.\n */\nfunction generateSqliteEdgeMatchIdentityColumnDDL(\n  tableName: string,\n  column: \"match_identity_name\" | \"match_identity_key\",\n  withPairCheck = false,\n): string {\n  const pairCheck =\n    withPairCheck ?\n      ` CHECK ((${quoteDdlIdentifier(EDGE_MATCH_IDENTITY_NAME_COLUMN)} IS NULL) = (${quoteDdlIdentifier(EDGE_MATCH_IDENTITY_KEY_COLUMN)} IS NULL))`\n    : \"\";\n  return `ALTER TABLE ${quoteDdlIdentifier(tableName)} ADD COLUMN ${quoteDdlIdentifier(column)} TEXT${pairCheck};`;\n}\n\nfunction generateSqliteEdgeMatchIdentityIndexDDL(\n  tableName: string,\n): string {\n  return `CREATE UNIQUE INDEX IF NOT EXISTS ${quoteDdlIdentifier(edgeMatchIdentityUniqueIndexName(tableName))} ON ${quoteDdlIdentifier(tableName)} (${quoteDdlIdentifier(\"graph_id\")}, ${quoteDdlIdentifier(\"kind\")}, ${quoteDdlIdentifier(EDGE_MATCH_IDENTITY_NAME_COLUMN)}, ${quoteDdlIdentifier(EDGE_MATCH_IDENTITY_KEY_COLUMN)});`;\n}\n\n/**\n * Plans the focused SQLite v1 adoption from one authoritative column\n * inventory. Factories and backend lifecycle hooks share this owner so a\n * bootstrap retry cannot drift from privileged adoption.\n */\nexport function planSqliteEdgeMatchIdentityAdoption(\n  tableName: string,\n  existingColumns: ReadonlySet<string>,\n): readonly string[] {\n  // A real SQLite table always has at least one column; an empty PRAGMA result\n  // means the edge table does not exist and current generated DDL will create it.\n  if (existingColumns.size === 0) return [];\n  const nameMissing = !existingColumns.has(EDGE_MATCH_IDENTITY_NAME_COLUMN);\n  const keyMissing = !existingColumns.has(EDGE_MATCH_IDENTITY_KEY_COLUMN);\n  const columnStatements = [\n    nameMissing ?\n      generateSqliteEdgeMatchIdentityColumnDDL(\n        tableName,\n        EDGE_MATCH_IDENTITY_NAME_COLUMN,\n        !keyMissing,\n      )\n    : undefined,\n    keyMissing ?\n      generateSqliteEdgeMatchIdentityColumnDDL(\n        tableName,\n        EDGE_MATCH_IDENTITY_KEY_COLUMN,\n        true,\n      )\n    : undefined,\n  ].filter((statement): statement is string => statement !== undefined);\n  return [\n    ...columnStatements,\n    generateSqliteEdgeMatchIdentityIndexDDL(tableName),\n  ];\n}\n\n// ============================================================\n// SQLite DDL Generation\n// ============================================================\n\n/**\n * Maps Drizzle column types to SQLite types.\n */\nfunction getSqliteColumnType(column: SQLiteColumn): string {\n  switch (column.columnType) {\n    case \"SQLiteText\": {\n      return \"TEXT\";\n    }\n    case \"SQLiteInteger\": {\n      return \"INTEGER\";\n    }\n    case \"SQLiteReal\": {\n      return \"REAL\";\n    }\n    case \"SQLiteBlob\": {\n      return \"BLOB\";\n    }\n    default: {\n      return \"TEXT\";\n    }\n  }\n}\n\n/**\n * Formats a default value for SQLite.\n */\nfunction formatDefaultValue(value: unknown): string {\n  if (value === null) return \"NULL\";\n  if (typeof value === \"string\") return `'${value}'`;\n  if (typeof value === \"number\") return String(value);\n  if (typeof value === \"boolean\") return value ? \"1\" : \"0\";\n  // For other types, use JSON.stringify to avoid [object Object]\n  return JSON.stringify(value);\n}\n\n/**\n * Generates CREATE TABLE SQL from a Drizzle SQLite table definition.\n */\nexport function generateSqliteCreateTableSQL(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  table: SQLiteTableWithColumns<any>,\n): string {\n  const config = getSqliteTableConfig(table);\n  const columnDefs: string[] = [];\n\n  // Generate column definitions\n  for (const column of config.columns) {\n    const parts: string[] = [\n      `\"${column.name}\"`,\n      getSqliteColumnType(column as SQLiteColumn),\n    ];\n\n    if (column.notNull) {\n      parts.push(\"NOT NULL\");\n    }\n\n    if (column.hasDefault && column.default !== undefined) {\n      parts.push(`DEFAULT ${formatDefaultValue(column.default)}`);\n    }\n\n    columnDefs.push(parts.join(\" \"));\n  }\n\n  // Add primary key constraint\n  const pk = config.primaryKeys[0];\n  if (pk) {\n    const pkColumns = pk.columns.map((c) => `\"${c.name}\"`).join(\", \");\n    columnDefs.push(`PRIMARY KEY (${pkColumns})`);\n  }\n\n  columnDefs.push(...renderTableChecks(config.checks, config.name));\n\n  return `CREATE TABLE IF NOT EXISTS \"${config.name}\" (\\n  ${columnDefs.join(\",\\n  \")}\\n);`;\n}\n\n/**\n * Renders a Drizzle table's CHECK constraints as CREATE TABLE clauses.\n *\n * A CHECK is a correctness barrier, not a hint: the identity separation\n * relation relies on one to abort a contradictory transaction. Dropping it\n * from the emitted DDL would leave the barrier declared in the Drizzle schema\n * and absent from every runtime-provisioned database, so an unrenderable\n * expression throws rather than degrading to a table without it.\n */\nfunction renderTableChecks(\n  checks: readonly Readonly<{ name: string; value: unknown }>[],\n  tableName: string,\n): readonly string[] {\n  return checks.map(\n    (check) =>\n      `CONSTRAINT \"${check.name}\" CHECK (${inlineSqlOrThrow(\n        check.value,\n        `table \"${tableName}\" CHECK constraint \"${check.name}\"`,\n      )})`,\n  );\n}\n\n/**\n * Gets the column name from an index column, handling both Column and SQL types.\n */\nfunction renderIndexColumn(col: unknown): string {\n  if (col && typeof col === \"object\" && \"name\" in col) {\n    return `\"${(col as { name: string }).name}\"`;\n  }\n\n  const sql = tryInlineSql(col);\n  if (sql !== undefined) {\n    return sql;\n  }\n\n  return \"unknown\";\n}\n\nfunction tryInlineSql(value: unknown): string | undefined {\n  if (value && typeof value === \"object\" && \"getSQL\" in value) {\n    const maybe = value as { getSQL?: () => unknown };\n    if (typeof maybe.getSQL === \"function\") {\n      return inlineSql(maybe.getSQL());\n    }\n  }\n\n  return inlineSql(value);\n}\n\nfunction flattenSqlChunk(chunk: unknown): string {\n  if (typeof chunk === \"string\") {\n    return chunk;\n  }\n\n  if (typeof chunk === \"object\" && chunk !== null) {\n    // Drizzle column references (SQLiteText, PgText, etc.) carry the\n    // column name directly. Match these BEFORE the `getSQL` fallback —\n    // a column's `.getSQL()` wraps the column back inside a SQL object\n    // that points to itself, which would recurse infinitely.\n    if (\"name\" in chunk && typeof chunk.name === \"string\") {\n      return `\"${(chunk as { name: string }).name}\"`;\n    }\n\n    // Drizzle's StringChunk stores its literal as `.value`, usually as a\n    // one-element array ([\"\"], [\"SELECT \"]) but sometimes as a plain string.\n    if (\"value\" in chunk) {\n      const value = chunk.value;\n      if (typeof value === \"string\") {\n        return value;\n      }\n      if (Array.isArray(value)) {\n        return value.map((part) => flattenSqlChunk(part)).join(\"\");\n      }\n    }\n\n    if (\"queryChunks\" in chunk && Array.isArray(chunk.queryChunks)) {\n      return (chunk as { queryChunks: readonly unknown[] }).queryChunks\n        .map((part) => flattenSqlChunk(part))\n        .join(\"\");\n    }\n\n    if (\"getSQL\" in chunk) {\n      const maybe = chunk as { getSQL?: () => unknown };\n      if (typeof maybe.getSQL === \"function\") {\n        return flattenSqlChunk(maybe.getSQL());\n      }\n    }\n  }\n\n  throw new Error(`Unable to inline SQL chunk: ${String(chunk)}`);\n}\n\nfunction inlineSql(value: unknown): string | undefined {\n  try {\n    return flattenSqlChunk(value);\n  } catch {\n    return undefined;\n  }\n}\n\nfunction inlineSqlOrThrow(value: unknown, context: string): string {\n  const inlined = inlineSql(value);\n  if (inlined === undefined) {\n    throw new Error(`Unable to inline SQL for ${context}`);\n  }\n  return inlined;\n}\n\n/**\n * Generates CREATE INDEX SQL statements from a Drizzle SQLite table definition.\n */\nexport function generateSqliteCreateIndexSQL(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  table: SQLiteTableWithColumns<any>,\n): string[] {\n  const config = getSqliteTableConfig(table);\n  const statements: string[] = [];\n\n  for (const index of config.indexes) {\n    const indexConfig = index.config;\n    const columns = indexConfig.columns\n      .map((c) => renderIndexColumn(c))\n      .join(\", \");\n    const unique = indexConfig.unique ? \"UNIQUE \" : \"\";\n    const where =\n      indexConfig.where ?\n        ` WHERE ${inlineSqlOrThrow(indexConfig.where, `SQLite index \"${indexConfig.name}\" WHERE clause`)}`\n      : \"\";\n\n    statements.push(\n      `CREATE ${unique}INDEX IF NOT EXISTS \"${indexConfig.name}\" ON \"${config.name}\" (${columns})${where};`,\n    );\n  }\n\n  return statements;\n}\n\n/**\n * Whether a schema-barrel value is a Drizzle SQLite table. The barrel\n * exposes non-table values (e.g. `fulltextTableName: string`) the DDL\n * generators must skip — and a contribution's barrel key is its\n * materialization identity, so a misclassified non-table would corrupt\n * that identity, not just emit stray DDL.\n */\nfunction isSqliteTable(\n  value: unknown,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): value is SQLiteTableWithColumns<any> {\n  return is(value, SQLiteTable);\n}\n\n/**\n * Strategy-declared contributions flagged `runtimeEnsure`. Per the\n * `runtimeEnsure` invariant only strategy contributions can be runtime\n * (base tables never are), so this is the complete runtime set without\n * walking base tables.\n */\nexport function runtimeStrategyContributions(\n  fulltextStrategy: FulltextStrategy | false,\n  fulltextTableName: string,\n): readonly StrategyTableContribution[] {\n  if (fulltextStrategy === false) return [];\n  return fulltextStrategy\n    .ownedTables(fulltextTableName)\n    .filter((contribution) => contribution.runtimeEnsure);\n}\n\n/**\n * The authoritative set of tables the SQLite backend owns: every\n * base/status Drizzle table plus the resolved fulltext-strategy\n * contribution(s). Single source of truth for DDL generation, the\n * bootstrap ensure, and drizzle-kit visibility (#129).\n */\nexport function sqliteContributions(\n  tables: SqliteTables = sqliteTables,\n  fulltextStrategy: FulltextStrategy | false = fts5Strategy,\n): readonly TableContribution[] {\n  const contributions: TableContribution[] = [];\n  for (const [key, table] of Object.entries(tables)) {\n    if (!isSqliteTable(table)) continue;\n    // Stable factory key (`nodes`, `edges`, …) is the logicalName so\n    // the #135 materialization identity survives custom table-name\n    // overrides; the resolved SQL name is only the physical tableName.\n    contributions.push({\n      logicalName: key,\n      owner: BASE_CONTRIBUTION_OWNER,\n      tableName: getSqliteTableConfig(table).name,\n      createDdl: [\n        generateSqliteCreateTableSQL(table),\n        ...generateSqliteCreateIndexSQL(table),\n      ],\n      runtimeEnsure: false,\n    });\n  }\n  // Strategy declarations are already authoritative contributions;\n  // emitted last (after base tables). `false` (`fulltext: false`)\n  // contributes no fulltext table at all.\n  if (fulltextStrategy !== false) {\n    for (const declared of fulltextStrategy.ownedTables(\n      tables.fulltextTableName,\n    )) {\n      contributions.push(declared);\n    }\n  }\n  return contributions;\n}\n\n/**\n * Generates all DDL statements for the given SQLite tables.\n *\n * Iterates the unified contribution set (#129) — base tables first,\n * then strategy-owned tables. Per-contribution ordering is\n * table-then-its-own-indexes; safe because TypeGraph's tables carry no\n * cross-table foreign keys. This low-level array deliberately omits the\n * deployment-wide version marker; use generateSqliteMigrationSQL for a\n * complete fresh installation.\n */\nexport function generateSqliteDDL(\n  tables: SqliteTables = sqliteTables,\n  fulltextStrategy: FulltextStrategy | false = fts5Strategy,\n): string[] {\n  return sqliteContributions(tables, fulltextStrategy).flatMap(\n    (contribution) => [...contribution.createDdl],\n  );\n}\n\n/**\n * Generates complete SQLite installation DDL for a fresh database.\n * This is not an incremental upgrade planner.\n */\nexport function generateSqliteMigrationSQL(\n  tables: SqliteTables = sqliteTables,\n  fulltextStrategy: FulltextStrategy | false = fts5Strategy,\n): string {\n  const ddlSql = generateSqliteDDL(tables, fulltextStrategy).join(\"\\n\\n\");\n  const markerSql = generateBaseSchemaVersionMarkerSQL(\n    getSqliteTableConfig(tables.baseSchemaVersions).name,\n    tables.baseSchemaVersions,\n  );\n  return `${ddlSql}\\n\\n${markerSql}`;\n}\n\n// ============================================================\n// PostgreSQL DDL Generation\n// ============================================================\n\n/**\n * Maps Drizzle column types to PostgreSQL types.\n */\nfunction getPgColumnType(column: PgColumn): string {\n  switch (column.columnType) {\n    case \"PgText\": {\n      return \"TEXT\";\n    }\n    case \"PgInteger\": {\n      return \"INTEGER\";\n    }\n    case \"PgBigInt53\":\n    case \"PgBigInt64\": {\n      return \"BIGINT\";\n    }\n    case \"PgBoolean\": {\n      return \"BOOLEAN\";\n    }\n    case \"PgJsonb\": {\n      return \"JSONB\";\n    }\n    case \"PgTimestamp\": {\n      return (column as unknown as TimestampColumnConfig).config?.withTimezone ?\n          \"TIMESTAMPTZ\"\n        : \"TIMESTAMP\";\n    }\n    case \"PgReal\": {\n      return \"REAL\";\n    }\n    case \"PgDoublePrecision\": {\n      return \"DOUBLE PRECISION\";\n    }\n    case \"PgCustomColumn\": {\n      const dataType = (column as unknown as CustomColumnType).getSQLType?.();\n      return dataType ?? \"TEXT\";\n    }\n    default: {\n      return \"TEXT\";\n    }\n  }\n}\n\n/**\n * Formats a default value for PostgreSQL.\n */\nfunction formatPgDefaultValue(value: unknown): string {\n  if (value === null) return \"NULL\";\n  if (typeof value === \"string\") return `'${value}'`;\n  if (typeof value === \"number\") return String(value);\n  if (typeof value === \"boolean\") return value ? \"TRUE\" : \"FALSE\";\n  // For other types, use JSON.stringify to avoid [object Object]\n  return JSON.stringify(value);\n}\n\n/**\n * Generates CREATE TABLE SQL from a Drizzle PostgreSQL table definition.\n */\nexport function generatePgCreateTableSQL(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  table: PgTableWithColumns<any>,\n): string {\n  const config = getPgTableConfig(table);\n  const columnDefs: string[] = [];\n\n  // Generate column definitions\n  for (const column of config.columns) {\n    const parts: string[] = [`\"${column.name}\"`, getPgColumnType(column)];\n\n    if (column.notNull) {\n      parts.push(\"NOT NULL\");\n    }\n\n    if (column.hasDefault && column.default !== undefined) {\n      parts.push(`DEFAULT ${formatPgDefaultValue(column.default)}`);\n    }\n\n    columnDefs.push(parts.join(\" \"));\n  }\n\n  // Add primary key constraint\n  const pk = config.primaryKeys[0];\n  if (pk) {\n    const pkColumns = pk.columns.map((c) => `\"${c.name}\"`).join(\", \");\n    columnDefs.push(`PRIMARY KEY (${pkColumns})`);\n  }\n\n  columnDefs.push(...renderTableChecks(config.checks, config.name));\n\n  return `CREATE TABLE IF NOT EXISTS \"${config.name}\" (\\n  ${columnDefs.join(\",\\n  \")}\\n);`;\n}\n\n/**\n * Generates CREATE INDEX SQL statements from a Drizzle PostgreSQL table definition.\n */\nexport function generatePgCreateIndexSQL(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  table: PgTableWithColumns<any>,\n): string[] {\n  const config = getPgTableConfig(table);\n  const statements: string[] = [];\n\n  for (const index of config.indexes) {\n    const indexConfig = index.config;\n    const columns = indexConfig.columns\n      .map((c) => renderIndexColumn(c))\n      .join(\", \");\n    const unique = indexConfig.unique ? \"UNIQUE \" : \"\";\n    const method =\n      indexConfig.method && indexConfig.method !== \"btree\" ?\n        ` USING ${indexConfig.method}`\n      : \"\";\n    const where =\n      indexConfig.where ?\n        ` WHERE ${inlineSqlOrThrow(indexConfig.where, `PostgreSQL index \"${indexConfig.name}\" WHERE clause`)}`\n      : \"\";\n\n    statements.push(\n      `CREATE ${unique}INDEX IF NOT EXISTS \"${indexConfig.name}\" ON \"${config.name}\"${method} (${columns})${where};`,\n    );\n  }\n\n  return statements;\n}\n\n/**\n * Whether a schema-barrel value is a Drizzle Postgres table. See\n * {@link isSqliteTable} for why this uses Drizzle's brand check.\n */\nfunction isPgTable(\n  value: unknown,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): value is PgTableWithColumns<any> {\n  return is(value, PgTable);\n}\n\n/**\n * The authoritative set of tables the PostgreSQL backend owns: every\n * base/status Drizzle table plus the resolved fulltext-strategy\n * contribution(s). Single source of truth for DDL generation, the\n * bootstrap ensure, and drizzle-kit visibility (#129).\n *\n * The typed `tables.fulltext` object is **not** emitted via the\n * column-walker (it can't reproduce `GENERATED ALWAYS AS … STORED`);\n * instead the strategy's canonical DDL is carried as the fulltext\n * contribution's `createDdl`. drizzle-kit visibility for the default\n * tsvector strategy comes from `schema/postgres.ts` exporting that\n * same `tables.fulltext` object through the barrel — one object, not\n * two. (Non-default Postgres strategies must export their own table\n * for drizzle-kit; see `FulltextStrategy.ownedTables`.)\n */\nexport function postgresContributions(\n  tables: PostgresTables = postgresTables,\n  fulltextStrategy: FulltextStrategy | false = tsvectorStrategy,\n): readonly TableContribution[] {\n  const contributions: TableContribution[] = [];\n  for (const [key, table] of Object.entries(tables)) {\n    if (!isPgTable(table)) continue;\n    // The strategy owns the fulltext slot's DDL (the column-walker\n    // can't reproduce its generated tsvector column); the strategy\n    // declaration below is the authoritative fulltext contribution.\n    if (table === tables.fulltext) continue;\n    // Stable factory key (`nodes`, `edges`, …) is the logicalName so\n    // the #135 materialization identity survives custom table-name\n    // overrides; the resolved SQL name is only the physical tableName.\n    contributions.push({\n      logicalName: key,\n      owner: BASE_CONTRIBUTION_OWNER,\n      tableName: getPgTableConfig(table).name,\n      createDdl: [\n        generatePgCreateTableSQL(table),\n        ...generatePgCreateIndexSQL(table),\n      ],\n      runtimeEnsure: false,\n    });\n  }\n  // `false` (`fulltext: false`) contributes no fulltext table at all.\n  if (fulltextStrategy !== false) {\n    for (const declared of fulltextStrategy.ownedTables(\n      tables.fulltextTableName,\n    )) {\n      contributions.push(declared);\n    }\n  }\n  return contributions;\n}\n\n/**\n * Generates all DDL statements for the given PostgreSQL tables.\n *\n * Iterates the unified contribution set (#129) — base tables first,\n * then strategy-owned tables. Per-contribution ordering is\n * table-then-its-own-indexes; safe because TypeGraph's tables carry no\n * cross-table foreign keys. This low-level array deliberately omits the\n * deployment-wide version marker; use generatePostgresMigrationSQL for a\n * complete fresh installation.\n */\nexport function generatePostgresDDL(\n  tables: PostgresTables = postgresTables,\n  fulltextStrategy: FulltextStrategy | false = tsvectorStrategy,\n): string[] {\n  return postgresContributions(tables, fulltextStrategy).flatMap(\n    (contribution) => [...contribution.createDdl],\n  );\n}\n\n/** Builds complete PostgreSQL installation SQL for a bundled factory profile. */\nfunction generatePostgresInstallationSQL(\n  tables: PostgresTables = postgresTables,\n  fulltextStrategy: FulltextStrategy | false = tsvectorStrategy,\n  includeVectorExtension: boolean,\n): string {\n  // pgvector extension is required for the per-field embedding tables\n  const extensionSql =\n    includeVectorExtension ?\n      \"-- Enable pgvector extension for vector similarity search\\nCREATE EXTENSION IF NOT EXISTS vector;\"\n    : undefined;\n  const ddlSql = generatePostgresDDL(tables, fulltextStrategy).join(\"\\n\\n\");\n  const markerSql = generateBaseSchemaVersionMarkerSQL(\n    getPgTableConfig(tables.baseSchemaVersions).name,\n    tables.baseSchemaVersions,\n  );\n  return [extensionSql, ddlSql, markerSql]\n    .filter((statement) => statement !== undefined)\n    .join(\"\\n\\n\");\n}\n\n/**\n * Generates complete PostgreSQL installation DDL for a fresh database.\n * This is not an incremental upgrade planner.\n *\n * Includes CREATE EXTENSION for pgvector since the per-`(kind, field)`\n * embedding tables `pgvectorStrategy` materializes at runtime use the\n * native VECTOR type.\n */\nexport function generatePostgresMigrationSQL(\n  tables: PostgresTables = postgresTables,\n  fulltextStrategy: FulltextStrategy | false = tsvectorStrategy,\n): string {\n  return generatePostgresInstallationSQL(tables, fulltextStrategy, true);\n}\n\n/** @internal Complete installation SQL for the vector-disabled PGlite factory. */\nexport function generateVectorlessPostgresMigrationSQL(\n  tables: PostgresTables = postgresTables,\n  fulltextStrategy: FulltextStrategy | false = tsvectorStrategy,\n): string {\n  return generatePostgresInstallationSQL(tables, fulltextStrategy, false);\n}\n","/**\n * Shared building blocks for the\n * `typegraph_contribution_materializations` durable-marker table on\n * both SQLite and Postgres backends (#135).\n *\n * Independent sibling of `index-materializations.ts`. It deliberately\n * mirrors that module's shape — dialect timestamp adapter, raw-row\n * mapper, insert/upsert value builders, the `materialized_at` COALESCE\n * preservation rule for failed re-attempts — but stays a separate\n * module because the two status tables have different identities:\n * declared indexes key on a database-global physical index name,\n * #129 contributions key on `(graph_id, logical_name, owner,\n * table_name)`. The declared-index path is untouched by #135; a future\n * PR may migrate it onto this contribution model.\n */\n\nimport { sql } from \"drizzle-orm\";\n\nimport {\n  ConfigurationError,\n  ContributionRebuildUnsupportedError,\n  ContributionUnavailableError,\n  StoreNotInitializedError,\n  type StoreNotInitializedReason,\n} from \"../../errors\";\nimport {\n  buildForeignFulltextGraphProbe,\n  buildFulltextGraphDelete,\n  type FulltextStrategy,\n} from \"../../query/dialect/fulltext-strategy\";\nimport { type SqlDialect } from \"../../query/dialect/types\";\nimport {\n  type VectorSlot,\n  type VectorStrategy,\n} from \"../../query/dialect/vector-strategy\";\nimport { sql as portableSql } from \"../../query/sql-fragment\";\nimport {\n  asCompiledRowsSql,\n  asCompiledStatementSql,\n} from \"../../query/sql-intent\";\nimport { sortedReplacer } from \"../../schema/canonical\";\nimport { sha256Hex } from \"../../utils/hash\";\nimport { errorChain, isMissingTableError } from \"../../utils/sql-errors\";\nimport {\n  isOptimisticRetryTier,\n  OPTIMISTIC_RETRY_ATTEMPTS,\n  runRetriedUnit,\n} from \"../capabilities/retried-unit\";\nimport {\n  requireFenceLockTables,\n  requireWriteFence,\n  resolveWriteFencePlan,\n  type WriteFenceTarget,\n} from \"../capabilities/write-fence\";\nimport { deriveTransactionSessionBackend } from \"../derive-backend\";\nimport { formatPostgresTimestamp, nowIso } from \"../row-mappers\";\nimport {\n  DEPLOYMENT_CONTRIBUTION_GRAPH_ID,\n  type StrategyTableContribution,\n} from \"../table-contribution\";\nimport {\n  type ContributionDiagnostic,\n  type ContributionDiagnosticState,\n  type ContributionMaterializationIdentity,\n  type ContributionMaterializationRow,\n  type ContributionProbeContribution,\n  type ContributionProbeEntry,\n  type ContributionRebuildResult,\n  type ContributionRebuildScope,\n  type ContributionRepairEntry,\n  type ContributionRepairResult,\n  type ContributionRepopulationStats,\n  type RecordContributionMaterializationParams,\n  type SchemaWriteTransactionBackend,\n  type TransactionBackend,\n} from \"../types\";\nimport { runtimeStrategyContributions } from \"./ddl\";\nimport type { AtomicContributionEvidence } from \"./operations/contribution-evidence\";\n\n/**\n * Bridges the dialect-specific timestamp column representation to the\n * canonical ISO-8601 strings used by the row/param types. `string` for\n * SQLite TEXT, `Date` for Postgres TIMESTAMPTZ — identical contract to\n * the index-materialization adapter, kept separate so the two status\n * subsystems stay independent.\n */\ntype ContributionMaterializationTimestampAdapter<TEncoded> = Readonly<{\n  /** Convert a stored column value to ISO-8601 (or `undefined`). */\n  decode(value: unknown): string | undefined;\n  /** Convert an ISO-8601 string to the value Drizzle expects on insert. */\n  encode(value: string): TEncoded;\n}>;\n\nexport const SQLITE_CONTRIBUTION_MAT_TIMESTAMPS: ContributionMaterializationTimestampAdapter<string> =\n  {\n    decode: (value) => (typeof value === \"string\" ? value : undefined),\n    encode: (value) => value,\n  };\n\nexport const POSTGRES_CONTRIBUTION_MAT_TIMESTAMPS: ContributionMaterializationTimestampAdapter<Date> =\n  {\n    decode: formatPostgresTimestamp,\n    encode: (value) => new Date(value),\n  };\n\n/**\n * Raw shape Drizzle returns for one row of\n * `typegraph_contribution_materializations`. The caller has already\n * narrowed via the typed table query; this just spells out the\n * dialect-shared field set so `mapContributionMaterializationRow` can\n * decode it.\n */\nexport type RawContributionMaterializationRow = Readonly<{\n  graphId: string;\n  logicalName: string;\n  owner: string;\n  tableName: string;\n  signature: string;\n  materializedAt: unknown;\n  lastAttemptedAt: unknown;\n  lastError: string | null;\n}>;\n\nexport function mapContributionMaterializationRow(\n  row: RawContributionMaterializationRow,\n  decode: (value: unknown) => string | undefined,\n): ContributionMaterializationRow {\n  const lastAttemptedAt = decode(row.lastAttemptedAt);\n  if (lastAttemptedAt === undefined) {\n    throw new Error(\n      `contribution materialization row missing required ` +\n        `last_attempted_at: ${row.graphId}/${row.logicalName}`,\n    );\n  }\n  return {\n    graphId: row.graphId,\n    logicalName: row.logicalName,\n    owner: row.owner,\n    tableName: row.tableName,\n    signature: row.signature,\n    materializedAt: decode(row.materializedAt),\n    lastAttemptedAt,\n    lastError: row.lastError ?? undefined,\n  };\n}\n\n/**\n * Build the column values for the upsert. Timestamp columns are encoded\n * through the adapter so the dialect's Drizzle column type gets the\n * value-shape it expects.\n */\nexport function buildContributionInsertValues<TEncoded>(\n  params: RecordContributionMaterializationParams,\n  encode: (value: string) => TEncoded,\n): Readonly<{\n  graphId: string;\n  logicalName: string;\n  owner: string;\n  tableName: string;\n  signature: string;\n  materializedAt: TEncoded | undefined;\n  lastAttemptedAt: TEncoded;\n  lastError: string | undefined;\n}> {\n  return {\n    graphId: params.graphId,\n    logicalName: params.logicalName,\n    owner: params.owner,\n    tableName: params.tableName,\n    signature: params.signature,\n    materializedAt:\n      params.materializedAt === undefined ?\n        undefined\n      : encode(params.materializedAt),\n    lastAttemptedAt: encode(params.attemptedAt),\n    lastError: params.error,\n  };\n}\n\n/**\n * Build the `set` clause for the upsert's ON CONFLICT DO UPDATE.\n *\n * The identity columns are the conflict target (composite primary key)\n * so they are never in the set clause. `materializedAt` uses `COALESCE`\n * to preserve any prior successful timestamp when this attempt failed\n * (`materializedAt === undefined`); on success the new timestamp wins.\n * Identical preservation rule to `buildMaterializationOnConflictSet`,\n * keeping a stale/failed boot retry from erasing the historical\n * success another replica recorded.\n */\nexport function buildContributionOnConflictSet(\n  materializedAtColumn: unknown,\n  paramsMaterializedAt: string | undefined,\n): Readonly<Record<string, ReturnType<typeof sql>>> {\n  const materializedAtSet =\n    paramsMaterializedAt === undefined ?\n      sql`COALESCE(excluded.${sql.identifier(\"materialized_at\")}, ${materializedAtColumn})`\n    : sql`excluded.${sql.identifier(\"materialized_at\")}`;\n  return {\n    signature: sql`excluded.${sql.identifier(\"signature\")}`,\n    materializedAt: materializedAtSet,\n    lastAttemptedAt: sql`excluded.${sql.identifier(\"last_attempted_at\")}`,\n    lastError: sql`excluded.${sql.identifier(\"last_error\")}`,\n  };\n}\n\n/**\n * Canonical hash of a resolved contribution's drift surface:\n * `{ dialect, owner, logicalName, tableName, createDdl }`. #129\n * guarantees `createDdl` is deterministic for a given resolved\n * configuration, so this hash is a meaningful staleness discriminant.\n * A strategy swap (different `owner`) or a DDL change on the same\n * logical slot changes the signature → detectable drift. 32 hex chars\n * because it is compared against an externally-stored signature.\n */\nfunction contributionSignatureInput(\n  dialect: SqlDialect,\n  identity: Readonly<{\n    owner: string;\n    logicalName: string;\n    tableName: string;\n  }>,\n  createDdl: readonly string[],\n): string {\n  const hashable = {\n    dialect,\n    owner: identity.owner,\n    logicalName: identity.logicalName,\n    tableName: identity.tableName,\n    createDdl,\n  };\n  return JSON.stringify(hashable, sortedReplacer);\n}\n\n/**\n * Whether a contribution is usable on the current connection, derived\n * from its durable marker row and the freshly-computed signature.\n *\n * - `missing`: no row — never initialized.\n * - `failed`: the last recorded attempt errored. Boot may retry; the\n *   hot path must refuse.\n * - `stale`: a row exists but its recorded signature no longer matches\n *   (strategy swap / DDL drift). Refuse rather than silently\n *   re-materialize on a hot path.\n * - `initialized`: signature matches, a successful `materializedAt` is\n *   recorded, and the last attempt did not error.\n */\ntype ContributionMaterializationState =\n  \"initialized\" | StoreNotInitializedReason;\n\nfunction evaluateContributionState(\n  row: ContributionMaterializationRow | undefined,\n  signature: string,\n): ContributionMaterializationState {\n  if (row === undefined) return \"missing\";\n  if (row.lastError !== undefined) return \"failed\";\n  if (row.signature !== signature) return \"stale\";\n  if (row.materializedAt === undefined) return \"missing\";\n  return \"initialized\";\n}\n\n/**\n * Cross the durable marker verdict with physical-catalog reality and\n * name why the contribution is unusable, or `undefined` when it is fine.\n *\n * With the table ABSENT there are three cases, and only one of them is\n * silence:\n * - a marker recording a prior success is an `orphaned-marker`. Table\n *   absence dominates whatever the marker claims about shape: once the\n *   storage is gone the recorded signature is moot and the repair\n *   (recreate, then re-stamp) is the same either way.\n * - a marker recording a FAILED attempt is `failed-materialization`.\n *   Marker and catalog agree — provisioning was tried and it broke —\n *   but agreement is not health, and staying silent here would hide the\n *   exact state an operator is looking for.\n * - no marker row at all is genuinely silent: nothing has been\n *   attempted, and boot will provision it on the next privileged run.\n *\n * With the table PRESENT, `missing` and same-signature `failed` collapse to\n * `missing-marker`: both mean \"storage exists but no marker attests it\", and\n * both are repaired by re-running the ensure. A prior success at another\n * signature stays `stale` even when the latest attempt failed, because its\n * repair is a shape change, not a re-stamp.\n */\nfunction diagnoseContribution(\n  row: ContributionMaterializationRow | undefined,\n  signature: string,\n  tableExists: boolean,\n): ContributionDiagnosticState | undefined {\n  if (!tableExists) {\n    if (row === undefined) return undefined;\n    if (row.materializedAt !== undefined) return \"orphaned-marker\";\n    return row.lastError === undefined ? undefined : \"failed-materialization\";\n  }\n  // A prior success at another signature means the existing table has the old\n  // physical shape. That remains `stale` even when a later failed attempt also\n  // recorded an error: classifying it as `missing-marker` would invite an\n  // idempotent CREATE + marker re-stamp to bless the unchanged stale table.\n  if (row?.materializedAt !== undefined && row.signature !== signature) {\n    return \"stale\";\n  }\n  const state = evaluateContributionState(row, signature);\n  switch (state) {\n    case \"initialized\": {\n      return undefined;\n    }\n    case \"stale\": {\n      return \"stale\";\n    }\n    case \"missing\":\n    case \"failed\": {\n      return \"missing-marker\";\n    }\n    default: {\n      return state satisfies never;\n    }\n  }\n}\n\n/**\n * A contribution `verifyContributions` will check, tagged with the\n * vector-slot coordinates that produced it. Both tags are absent for the\n * runtime (fulltext) contributions, which are not per-`(kind, field)`.\n *\n * `projection` records which enumeration loop produced the target rather\n * than being re-derived from the contribution's `logicalName` later. The\n * probe groups by it, and reconstructing the grouping from a name\n * convention would put a second, silently divergent classifier next to\n * the one that actually built the set.\n */\ntype VerificationTarget = Readonly<{\n  contribution: StrategyTableContribution;\n  projection: ContributionProbeContribution;\n  kind?: string;\n  fieldPath?: string;\n}>;\n\ntype DiagnosedContribution = Readonly<{\n  graphId: string;\n  contribution: StrategyTableContribution;\n  projection: ContributionProbeContribution;\n  diagnostic: ContributionDiagnostic;\n}>;\n\n/**\n * Order probe entries are reported in. Fixed rather than derived from\n * declaration order so a result is stable enough to assert on and to\n * diff between two probes of the same store.\n */\nconst PROBE_PROJECTION_ORDER: readonly ContributionProbeContribution[] = [\n  \"fulltext\",\n  \"vector\",\n] as const;\n\n/** Why the projection is unusable, in one operator-facing clause. */\nconst PROBE_DETAIL_PHRASE: Readonly<\n  Record<ContributionDiagnosticState, string>\n> = {\n  \"orphaned-marker\": \"storage is missing\",\n  \"missing-marker\": \"storage is not attested by a durable marker\",\n  \"failed-materialization\": \"provisioning failed and produced no storage\",\n  stale: \"storage exists at a different shape than the current declaration\",\n};\n\n/**\n * Names the affected contribution the way an operator would look for it:\n * a vector slot by its `(kind, field)` coordinates, fulltext by the\n * physical table, since fulltext has exactly one table per graph and its\n * name is what a caller would have dropped or renamed.\n */\nfunction describeProbeDiagnostic(diagnostic: ContributionDiagnostic): string {\n  const subject =\n    diagnostic.kind === undefined || diagnostic.fieldPath === undefined ?\n      `table \"${diagnostic.physicalName}\"`\n    : `${diagnostic.kind}.${diagnostic.fieldPath}`;\n  return (\n    `${subject}: ${PROBE_DETAIL_PHRASE[diagnostic.state]} ` +\n    `(${diagnostic.state})`\n  );\n}\n\nfunction identityOf(\n  graphId: string,\n  contribution: StrategyTableContribution,\n): ContributionMaterializationIdentity {\n  return {\n    graphId:\n      contribution.scope === \"deployment\" ?\n        DEPLOYMENT_CONTRIBUTION_GRAPH_ID\n      : graphId,\n    logicalName: contribution.logicalName,\n    owner: contribution.owner,\n    tableName: contribution.tableName,\n  };\n}\n\nfunction markerGraphId(\n  graphId: string,\n  contribution: StrategyTableContribution,\n): string {\n  return identityOf(graphId, contribution).graphId;\n}\n\n/**\n * The fulltext-touching methods the durable-marker gate wraps. The five\n * `upsert*`/`delete*`/`fulltextSearch` are optional (a graph with no\n * `searchable()` fields has none); `hardDeleteNode` is always present\n * because its cascade unconditionally deletes from the fulltext table.\n */\nexport type GatableFulltextBackend = Pick<\n  TransactionBackend,\n  | \"upsertFulltext\"\n  | \"deleteFulltext\"\n  | \"upsertFulltextBatch\"\n  | \"deleteFulltextBatch\"\n  | \"fulltextSearch\"\n  | \"hardDeleteNode\"\n>;\n\ntype RefuseUnavailableFulltext = (\n  graphId: string,\n  error: unknown,\n) => Promise<never>;\n\nfunction missingTableErrorNames(error: unknown, tableName: string): boolean {\n  const quotedTableName = `\"${tableName.replaceAll('\"', '\"\"')}\"`;\n  for (const link of errorChain(error)) {\n    const message = errorMessage(link);\n    if (typeof message !== \"string\") continue;\n\n    // workerd appends `: SQLITE_ERROR` to SQLite's missing-table message.\n    // Keep that diagnostic delimiter out of the physical identifier so the\n    // exact-name check below sees the declared table, not `<table>:`.\n    const sqliteMatch = /\\bno such table:\\s*([^\\s;:]+)/i.exec(message);\n    const sqliteName = unquoteSqliteIdentifier(sqliteMatch?.[1]);\n    if (sqliteName === tableName) return true;\n\n    const namesPostgresTable =\n      message.includes(`relation ${quotedTableName} does not exist`) ||\n      message.includes(`table ${quotedTableName} does not exist`);\n    if (namesPostgresTable) return true;\n  }\n  return false;\n}\n\nfunction errorMessage(error: unknown): string | undefined {\n  if (typeof error === \"string\") return error;\n  if (error instanceof Error) return error.message;\n  if (typeof error !== \"object\" || error === null || !(\"message\" in error)) {\n    return undefined;\n  }\n  return typeof error.message === \"string\" ? error.message : undefined;\n}\n\nfunction unquoteSqliteIdentifier(\n  identifier: string | undefined,\n): string | undefined {\n  if (identifier === undefined) return undefined;\n  const first = identifier.at(0);\n  const last = identifier.at(-1);\n  const isQuoted =\n    (first === '\"' && last === '\"') ||\n    (first === \"'\" && last === \"'\") ||\n    (first === \"`\" && last === \"`\") ||\n    (first === \"[\" && last === \"]\");\n  return isQuoted ? identifier.slice(1, -1) : identifier;\n}\n\nasync function executeGatedFulltext<T>(\n  graphId: string,\n  assert: (graphId: string) => Promise<void>,\n  refuseUnavailable: RefuseUnavailableFulltext,\n  execute: () => Promise<T>,\n): Promise<T> {\n  await assert(graphId);\n  try {\n    return await execute();\n  } catch (error) {\n    return refuseUnavailable(graphId, error);\n  }\n}\n\n/**\n * The fulltext point-of-use gate, as the wrapped overrides only. Each\n * method asserts the durable contribution marker before delegating; an\n * optional method is wrapped only when present. `assert` performs only\n * a (cached) SELECT — never DDL — so it is safe inside an open\n * transaction. The single source of the gating contract: both the\n * non-tx backend and the tx-scoped {@link gateFulltext} consume it.\n */\nexport function gateFulltextMethods(\n  source: GatableFulltextBackend,\n  assert: (graphId: string) => Promise<void>,\n  refuseUnavailable: RefuseUnavailableFulltext,\n): Partial<GatableFulltextBackend> {\n  // Only assign an override when the raw method exists, so the \"wrap\n  // only what's defined\" rule stays obvious instead of hiding behind\n  // conditional spreads.\n  const gated: {\n    -readonly [K in keyof GatableFulltextBackend]?: GatableFulltextBackend[K];\n  } = {};\n\n  if (source.upsertFulltext) {\n    const raw = source.upsertFulltext;\n    gated.upsertFulltext = async (params) => {\n      await executeGatedFulltext(\n        params.graphId,\n        assert,\n        refuseUnavailable,\n        () => raw(params),\n      );\n    };\n  }\n  if (source.deleteFulltext) {\n    const raw = source.deleteFulltext;\n    gated.deleteFulltext = async (params) => {\n      await executeGatedFulltext(\n        params.graphId,\n        assert,\n        refuseUnavailable,\n        () => raw(params),\n      );\n    };\n  }\n  if (source.upsertFulltextBatch) {\n    const raw = source.upsertFulltextBatch;\n    gated.upsertFulltextBatch = async (params) => {\n      // A genuine no-op call asserts nothing — the \"empty input is\n      // harmless\" contract.\n      if (params.rows.length === 0) return;\n      await executeGatedFulltext(\n        params.graphId,\n        assert,\n        refuseUnavailable,\n        () => raw(params),\n      );\n    };\n  }\n  if (source.deleteFulltextBatch) {\n    const raw = source.deleteFulltextBatch;\n    gated.deleteFulltextBatch = async (params) => {\n      if (params.nodeIds.length === 0) return;\n      await executeGatedFulltext(\n        params.graphId,\n        assert,\n        refuseUnavailable,\n        () => raw(params),\n      );\n    };\n  }\n  if (source.fulltextSearch) {\n    const raw = source.fulltextSearch;\n    gated.fulltextSearch = async (params) => {\n      return executeGatedFulltext(\n        params.graphId,\n        assert,\n        refuseUnavailable,\n        () => raw(params),\n      );\n    };\n  }\n  // Unconditional: the hard-delete cascade deletes from the fulltext\n  // table even for graphs that declare no `searchable()` fields.\n  const rawHardDelete = source.hardDeleteNode;\n  gated.hardDeleteNode = async (params) => {\n    await executeGatedFulltext(params.graphId, assert, refuseUnavailable, () =>\n      rawHardDelete(params),\n    );\n  };\n  return gated;\n}\n\n/**\n * Tx-scoped variant: a {@link TransactionBackend} with its fulltext\n * methods gated. The tx-scoped backend exposes RAW fulltext methods (no\n * self-ensure); a transaction that never touches fulltext never\n * asserts, so non-fulltext transactions stay free of any fulltext-init\n * requirement.\n */\nexport function gateFulltext(\n  tx: TransactionBackend,\n  assert: (graphId: string) => Promise<void>,\n  refuseUnavailable: RefuseUnavailableFulltext,\n): TransactionBackend {\n  return deriveTransactionSessionBackend<TransactionBackend>(\n    tx,\n    gateFulltextMethods(tx, assert, refuseUnavailable),\n  );\n}\n\n// ============================================================\n// Materializer (#135) — the one place orchestration lives\n// ============================================================\n\n/**\n * The dialect-specific seams the materializer needs. Mirrors how the\n * index-materialization subsystem keeps orchestration dialect-agnostic\n * (`store/materialize-indexes.ts`) and leaves only thin primitives in\n * each backend.\n */\nexport type ContributionMaterializerDeps = Readonly<{\n  dialect: SqlDialect;\n  /** A caller-owned PostgreSQL transaction cannot write diagnostics after a failed DDL statement aborts its session. */\n  recordFailedAttempts?: boolean;\n  /**\n   * The write-fence target `lockContributionDdl` / `lockSharedFulltextTable`\n   * resolve a plan from — a small first-party-marked object rather than the\n   * whole backend, so this module needs no more of `GraphBackend` than the\n   * lock decision itself.\n   */\n  fenceTarget: WriteFenceTarget;\n  /**\n   * Active fulltext strategy, or `undefined` when fulltext support is\n   * disabled (`fulltext: false`). Mirrors `vectorStrategy` below: with no\n   * strategy there is no fulltext contribution to materialize, assert, or\n   * rebuild.\n   */\n  fulltextStrategy: FulltextStrategy | undefined;\n  fulltextTableName: string;\n  /**\n   * Active vector strategy, or `undefined` when vector support is\n   * disabled. When present, its per-`(kind, field)` `ownedTables(slot)`\n   * contributions ride this same durable-marker machinery — boot\n   * materializes them under the privileged role, the runtime hot path\n   * asserts them with a SELECT (never DDL), exactly like fulltext.\n   */\n  vectorStrategy: VectorStrategy | undefined;\n  /** Run one raw DDL statement (dialect's `execute`/`run` of `sql.raw`). */\n  execDdl: (statement: string) => Promise<void>;\n  /** Idempotently create the `contribution_materializations` table. */\n  ensureMarkerTable: () => Promise<void>;\n  /** Read every contribution marker for one graph in a single query. */\n  getMarkers: (\n    graphId: string,\n  ) => Promise<readonly ContributionMaterializationRow[]>;\n  recordMarker: (\n    params: RecordContributionMaterializationParams,\n  ) => Promise<void>;\n  /**\n   * Delete a marker row by identity. Used when a contribution's physical\n   * table is torn down out-of-band (vector-field reclaim) so a later\n   * re-provision sees \"missing\" and re-creates the table rather than\n   * trusting an orphaned \"initialized\" marker.\n   */\n  deleteMarker: (\n    identity: ContributionMaterializationIdentity,\n  ) => Promise<void>;\n  /**\n   * Whether `tableName` exists in the connection's catalog right now.\n   * The dialect-specific half of `verifyContributions`; the backend\n   * supplies its `buildTableExists` probe. Must NOT be cached across\n   * calls — a table confirmed present earlier is exactly the table this\n   * diagnostic has to re-check.\n   */\n  tableExists: (tableName: string) => Promise<boolean>;\n  /**\n   * Run an administrative callback under the same per-graph fence as a\n   * schema commit, with transaction-scoped DDL available. The destructive\n   * rebuild's only seam: it makes drop → recreate → refill → stamp one\n   * atomic unit, so an interrupted rebuild rolls back to the state it\n   * started from instead of leaving storage attested but empty.\n   *\n   * Absent on a backend with no transactional schema fence, which\n   * declines the rebuild rather than running it unfenced.\n   */\n  schemaWriteTransaction?: <T>(\n    graphId: string,\n    fn: (tx: SchemaWriteTransactionBackend) => Promise<T>,\n  ) => Promise<T>;\n}>;\n\nexport type ContributionMaterializer = Readonly<{\n  /** Canonical durable-marker writer: every `runtimeEnsure` contribution. */\n  ensureRuntimeContributions: (graphId: string) => Promise<void>;\n  /**\n   * Hot-path / transaction gate: resolve the durable markers once per\n   * backend instance (cached) and throw `StoreNotInitializedError` on\n   * the first missing/stale/failed contribution. Zero DDL, zero writes.\n   */\n  assertInitialized: (graphId: string) => Promise<void>;\n  /**\n   * Error-path classification for a gated fulltext operation. Translates only\n   * a missing-relation failure that names the declared fulltext table; every\n   * other failure is rethrown unchanged.\n   */\n  refuseUnavailableFulltext: RefuseUnavailableFulltext;\n  /** Classifies missing storage named by a fused node projection statement. */\n  refuseUnavailableNodeInsertProjections: (\n    graphId: string,\n    projections: Readonly<{\n      fulltext: boolean;\n      vectorSlots: readonly VectorSlot[];\n    }>,\n    error: unknown,\n  ) => Promise<never>;\n  /**\n   * Privileged materializer for one vector slot's `ownedTables`\n   * contribution(s): creates the per-`(kind, field)` table and records\n   * its durable marker, idempotently. Pass `{ force: true }` to bypass\n   * the drift-guard and overwrite the marker at the current signature —\n   * the sanctioned path for `reembedVectorField`'s deliberate\n   * dimension change. Pass `{ onDrift: \"skip\" }` to leave a drifted slot\n   * untouched (warn, no marker write, no throw) instead of refusing —\n   * the boot/evolve path, where the declared shape may have moved ahead\n   * of a `reembedVectorField` the operator has not run yet. No-op when\n   * vector support is disabled.\n   */\n  ensureVectorSlot: (\n    slot: VectorSlot,\n    options?: Readonly<{ force?: boolean; onDrift?: \"throw\" | \"skip\" }>,\n  ) => Promise<void>;\n  /** Batch form used by boot to share marker reads across every vector slot. */\n  ensureVectorSlots: (\n    slots: readonly VectorSlot[],\n    options?: Readonly<{ force?: boolean; onDrift?: \"throw\" | \"skip\" }>,\n  ) => Promise<void>;\n  /**\n   * Hot-path gate for one vector slot: SELECT-only marker assert over\n   * the slot's `ownedTables` contribution(s), cached per backend\n   * instance. Throws `StoreNotInitializedError` when the slot is\n   * missing/stale/failed. No-op when vector support is disabled.\n   */\n  assertVectorSlot: (slot: VectorSlot) => Promise<void>;\n  /** Batch form used by verified attach to perform one marker read. */\n  assertVectorSlots: (slots: readonly VectorSlot[]) => Promise<void>;\n  /**\n   * One marker gate for every projection a fused node insert will write.\n   * Fulltext and all vector slots share the same marker read on a cold cache.\n   */\n  assertNodeInsertProjections: (\n    graphId: string,\n    projections: Readonly<{\n      fulltext: boolean;\n      vectorSlots: readonly VectorSlot[];\n    }>,\n  ) => Promise<void>;\n  /**\n   * Resolves the exact marker rows an atomic projection program must prove.\n   * This computes only strategy signatures; it performs no database read.\n   */\n  resolveNodeProjectionEvidence: (\n    graphId: string,\n    projections: Readonly<{\n      fulltext: boolean;\n      vectorSlots: readonly VectorSlot[];\n    }>,\n  ) => Promise<readonly AtomicContributionEvidence[]>;\n  /**\n   * Failure-only read-through diagnosis after an in-program marker assertion\n   * refused. The program's database evidence supersedes any process cache.\n   */\n  diagnoseNodeProjectionEvidence: (\n    graphId: string,\n    projections: Readonly<{\n      fulltext: boolean;\n      vectorSlots: readonly VectorSlot[];\n    }>,\n  ) => Promise<void>;\n  /**\n   * Forget a vector slot: delete its `ownedTables` contribution\n   * marker(s) and evict the per-instance cache. Called after the slot's\n   * physical table is dropped (vector-field reclaim) so a future\n   * `ensureVectorSlot` re-creates the table instead of trusting an\n   * orphaned marker. No-op when vector support is disabled.\n   */\n  dropVectorSlot: (slot: VectorSlot) => Promise<void>;\n  /** Conservatively evict one slot from the process-local marker cache. */\n  evictVectorSlot: (slot: VectorSlot) => void;\n  /**\n   * Diagnostic: cross each currently declared runtime contribution and each\n   * supplied vector slot's `ownedTables` contribution against its durable\n   * marker and the physical catalog. This includes a recorded failed\n   * materialization even when marker and catalog agree that no table exists.\n   * Contributions with neither marker nor table and marker rows outside this\n   * declaration set are omitted. Read-only: no DDL, no marker writes, and no\n   * effect on the per-instance caches the hot path relies on.\n   */\n  verifyContributions: (\n    graphId: string,\n    vectorSlots: readonly VectorSlot[],\n  ) => Promise<readonly ContributionDiagnostic[]>;\n  /**\n   * Privileged repair pass over declarations resolved inside this\n   * materializer. Only non-destructive states are repaired automatically.\n   */\n  repairContributions: (\n    graphId: string,\n    vectorSlots: readonly VectorSlot[],\n  ) => Promise<ContributionRepairResult>;\n  /**\n   * Read-only readiness projection over the same audit\n   * `verifyContributions` runs, one entry per search projection.\n   */\n  probeContributions: (\n    graphId: string,\n    vectorSlots: readonly VectorSlot[],\n  ) => Promise<readonly ContributionProbeEntry[]>;\n  /**\n   * Destructive rebuild of one projection's storage: drop, recreate from\n   * the current `createDdl`, refill through `repopulate`, stamp the\n   * marker. Atomic under the backend's schema fence. Refuses rather than\n   * destroying anything it cannot reconstruct.\n   */\n  rebuildContribution: (\n    graphId: string,\n    scope: ContributionRebuildScope,\n    repopulate: (\n      target: TransactionBackend,\n    ) => Promise<ContributionRepopulationStats>,\n  ) => Promise<ContributionRebuildResult>;\n}>;\n\n/**\n * Whether a fulltext rebuild can be served, given the active strategy and\n * whether the backend has a transactional schema fence to run it under.\n *\n * Exported so `capabilities.contributions.rebuild` and the runtime\n * refusal inside `rebuildContribution` are two readings of one predicate\n * rather than two predicates that have to be kept in step. A backend\n * whose advertised capability disagrees with what the call actually does\n * is worse than one that declines.\n */\nexport function contributionRebuildSupported(\n  fulltextStrategy: FulltextStrategy | undefined,\n  fulltextTableName: string,\n  transactional: boolean,\n): boolean {\n  return (\n    transactional &&\n    runtimeStrategyContributions(\n      fulltextStrategy ?? false,\n      fulltextTableName,\n    ).every((contribution) => contribution.dropDdl !== undefined)\n  );\n}\n\n/**\n * Advisory-lock key serializing contribution DDL across every graph in one\n * database. See `lockContributionDdl`.\n */\nconst CONTRIBUTION_DDL_LOCK_KEY = \"typegraph:contribution-ddl\";\n\n/**\n * How many other graph ids a refusal names. The probe only has to decide\n * whether the set is empty; the ids are there so an operator knows which\n * deployments share the table, and a full list of them would be unbounded.\n */\nconst FOREIGN_GRAPH_REPORT_LIMIT = 5;\n\n// NUL separator for the per-instance contribution cache key: collision-safe\n// across arbitrary graph ids / names (a printable delimiter could appear in a\n// caller-supplied graph id).\nconst CONTRIBUTION_KEY_SEPARATOR = String.fromCodePoint(0);\n\nfunction contributionKey(\n  graphId: string,\n  contribution: Readonly<{\n    owner: string;\n    logicalName: string;\n    tableName: string;\n  }>,\n): string {\n  return [\n    graphId,\n    contribution.owner,\n    contribution.logicalName,\n    contribution.tableName,\n  ].join(CONTRIBUTION_KEY_SEPARATOR);\n}\n\nexport function createContributionMaterializer(\n  deps: ContributionMaterializerDeps,\n): ContributionMaterializer {\n  const { dialect, fulltextStrategy, fulltextTableName } = deps;\n\n  // Positive-only cache keyed per contribution identity\n  // (`graphId | owner | logicalName | tableName`), holding the SIGNATURE the\n  // marker was last observed materialized at on this connection. A cache hit\n  // requires the freshly-computed signature to match the cached one, so a\n  // changed shape (dimension, metric, storage DDL) on the same instance\n  // misses the cache and falls through to the drift-guard / stale verdict —\n  // the warm cache can never bless a contribution whose shape moved.\n  // Per-contribution (not per-graph) so each per-`(kind, field)` vector slot\n  // caches independently and the hot-path assert stays a small DDL-string\n  // comparison plus `Map.get` after the first SELECT. Missing/stale/failed\n  // verdicts are never cached, so a concurrent boot that fixes the state is\n  // picked up on the next call.\n  const initializedSignatures = new Map<string, string>();\n  // Every cache-producing operation captures the key's revision before its\n  // durable read. Diagnosis advances the revision before reading, so an older\n  // in-flight assertion cannot repopulate a positive verdict after diagnosis\n  // has invalidated it. This keeps the race barrier per contribution instead\n  // of permanently disabling healthy siblings in the same projection set.\n  const cacheRevisions = new Map<string, number>();\n  // A vector slot evicted during transactional cleanup cannot safely become a\n  // positive cache hit again on this materializer: another request may read\n  // the old marker before the cleanup commits, then finish after commit. Keep\n  // evicted keys permanently read-through for this backend instance so such a\n  // stale snapshot can never repopulate the positive cache. Re-added slots are\n  // rare; their gates pay one marker SELECT instead of risking a silent pass.\n  const uncacheableKeys = new Set<string>();\n  // Computing the durable signature requires WebCrypto. Keep the canonical\n  // DDL beside its digest so the hot path only compares the current DDL\n  // strings. A same-instance shape change produces a mismatch and therefore\n  // a fresh canonical input + digest; unchanged contributions reuse the\n  // settled promise without serialization or new crypto work. The cache key\n  // already covers every non-DDL signature field (owner/logical/table), while\n  // dialect is fixed for the lifetime of this materializer.\n  const computedSignatures = new Map<\n    string,\n    Readonly<{ createDdl: readonly string[]; signature: Promise<string> }>\n  >();\n\n  async function resolveContributionSignature(\n    key: string,\n    contribution: StrategyTableContribution,\n  ): Promise<string> {\n    const cached = computedSignatures.get(key);\n    const cachedCreateDdl = cached?.createDdl;\n    const cachedSignature = cached?.signature;\n    if (\n      cachedCreateDdl?.length === contribution.createDdl.length &&\n      cachedSignature !== undefined &&\n      contribution.createDdl.every(\n        (statement, index) => cachedCreateDdl[index] === statement,\n      )\n    ) {\n      return cachedSignature;\n    }\n\n    const input = contributionSignatureInput(\n      dialect,\n      contribution,\n      contribution.createDdl,\n    );\n    const entry = {\n      createDdl: [...contribution.createDdl],\n      signature: sha256Hex(input, 16),\n    } as const;\n    computedSignatures.set(key, entry);\n    try {\n      return await entry.signature;\n    } catch (error) {\n      if (computedSignatures.get(key) === entry) {\n        computedSignatures.delete(key);\n      }\n      throw error;\n    }\n  }\n\n  function runtimeContributions(): readonly StrategyTableContribution[] {\n    return runtimeStrategyContributions(\n      fulltextStrategy ?? false,\n      fulltextTableName,\n    );\n  }\n\n  /** Read graph-local and deployment-wide markers explicitly. */\n  async function getMarkerRowsForGraph(\n    graphId: string,\n    includeDeployment = false,\n  ): Promise<readonly ContributionMaterializationRow[]> {\n    const graphRows = await deps.getMarkers(graphId);\n    if (!includeDeployment || graphId === DEPLOYMENT_CONTRIBUTION_GRAPH_ID) {\n      return graphRows;\n    }\n    const deploymentRows = await deps.getMarkers(\n      DEPLOYMENT_CONTRIBUTION_GRAPH_ID,\n    );\n    return [\n      ...graphRows,\n      ...deploymentRows.filter(\n        (row) => row.graphId === DEPLOYMENT_CONTRIBUTION_GRAPH_ID,\n      ),\n    ];\n  }\n\n  type ResolvedContribution = Readonly<{\n    contribution: StrategyTableContribution;\n    key: string;\n    markerGraphId: string;\n    signature: string;\n    cacheRevision: number;\n  }>;\n\n  function currentCacheRevision(key: string): number {\n    return cacheRevisions.get(key) ?? 0;\n  }\n\n  function invalidateContributionCache(\n    keys: readonly string[],\n    permanentlyReadThrough: boolean,\n  ): void {\n    for (const key of keys) {\n      cacheRevisions.set(key, currentCacheRevision(key) + 1);\n      if (permanentlyReadThrough) uncacheableKeys.add(key);\n      initializedSignatures.delete(key);\n    }\n  }\n\n  async function resolveContributionEntries(\n    graphId: string,\n    contributions: readonly StrategyTableContribution[],\n  ): Promise<readonly ResolvedContribution[]> {\n    return Promise.all(\n      contributions.map(async (contribution) => {\n        const markerId = markerGraphId(graphId, contribution);\n        const key = contributionKey(markerId, contribution);\n        const cacheRevision = currentCacheRevision(key);\n        return {\n          contribution,\n          key,\n          markerGraphId: markerId,\n          signature: await resolveContributionSignature(key, contribution),\n          cacheRevision,\n        };\n      }),\n    );\n  }\n\n  function cacheInitializedSignature(entry: ResolvedContribution): void {\n    if (\n      !uncacheableKeys.has(entry.key) &&\n      currentCacheRevision(entry.key) === entry.cacheRevision\n    ) {\n      initializedSignatures.set(entry.key, entry.signature);\n    }\n  }\n\n  function contributionRefusalError(\n    graphId: string,\n    entry: ResolvedContribution,\n    state: Exclude<ReturnType<typeof evaluateContributionState>, \"initialized\">,\n    cause?: unknown,\n  ): StoreNotInitializedError {\n    return new StoreNotInitializedError(graphId, state, {\n      ...(cause === undefined ? {} : { cause }),\n      details: { logicalName: entry.contribution.logicalName },\n    });\n  }\n\n  async function materializeOne(\n    graphId: string,\n    contribution: StrategyTableContribution,\n    signature: string,\n    existing: ContributionMaterializationRow | undefined,\n    options?: Readonly<{ force?: boolean; onDrift?: \"throw\" | \"skip\" }>,\n  ): Promise<\"materialized\" | \"drift-skipped\"> {\n    const force = options?.force === true;\n    const identity = identityOf(graphId, contribution);\n\n    // Already materialized at this exact shape — nothing to do. `force`\n    // re-runs the DDL and re-stamps the marker even on a match: the path\n    // `reembedVectorField` relies on after it has recreated the table.\n    if (\n      !force &&\n      evaluateContributionState(existing, signature) === \"initialized\"\n    ) {\n      return \"materialized\";\n    }\n    const priorSuccess = existing?.materializedAt !== undefined;\n\n    // Drift after a *recorded success*: the table physically exists with\n    // the OLD shape, so the idempotent `CREATE ... IF NOT EXISTS` would\n    // no-op and we'd silently bless the new signature against a stale\n    // table. Refuse loudly instead — mirrors the index materializer's\n    // signature-drift handling. (A row with no prior success, or one\n    // whose last attempt errored, falls through and re-runs the DDL.)\n    // `force` deliberately bypasses this — the caller has already dropped\n    // and recreated the table at the new shape (`reembedVectorField`).\n    if (!force && priorSuccess && existing.signature !== signature) {\n      // `onDrift: \"skip\"` (boot/evolve): leave the slot exactly as it is —\n      // marker untouched (so old-shape reads keep their verdict), nothing\n      // cached, no throw. Writes to the new shape fail as `stale` until\n      // `store.reembedVectorField` recreates storage and force-restamps.\n      if (options?.onDrift === \"skip\") {\n        console.warn(\n          `[typegraph] contribution \"${contribution.logicalName}\" (table ` +\n            `\"${contribution.tableName}\") is provisioned at a different ` +\n            `shape than the current declaration — left untouched. Writes ` +\n            `to it will fail until store.reembedVectorField(kind, ` +\n            `fieldPath) recreates the storage at the new shape.`,\n        );\n        return \"drift-skipped\";\n      }\n      const error = new Error(\n        `Contribution \"${contribution.logicalName}\" (owner ` +\n          `\"${contribution.owner}\", table \"${contribution.tableName}\") was ` +\n          `already materialized with a different signature. The recorded ` +\n          `physical shape is stale relative to the current strategy/DDL — ` +\n          `migrate or drop the table and retry, or restore the original ` +\n          `strategy.`,\n      );\n      // Record the failed attempt but keep the RECORDED signature: it is\n      // the only evidence of the shape the table actually has. Stamping\n      // the shape we just refused to provision would leave a row matching\n      // the current declaration with `last_error` set, which\n      // `diagnoseContribution` reads as `missing-marker` — pointing the\n      // operator at the idempotent re-stamp repair that blesses the\n      // unchanged old-shape table, and letting the next attempt skip this\n      // guard. Staying `stale` points at `store.rebuildContribution()`.\n      if (deps.recordFailedAttempts !== false) await deps.recordMarker({\n        ...identity,\n        signature: existing.signature,\n        attemptedAt: nowIso(),\n        materializedAt: undefined,\n        error: error.message,\n      });\n      throw error;\n    }\n\n    const attemptedAt = nowIso();\n    try {\n      for (const statement of contribution.createDdl) {\n        await deps.execDdl(statement);\n      }\n    } catch (error) {\n      if (deps.recordFailedAttempts !== false) await deps.recordMarker({\n        ...identity,\n        signature,\n        attemptedAt,\n        materializedAt: undefined,\n        error: error instanceof Error ? error.message : String(error),\n      });\n      throw error;\n    }\n    await deps.recordMarker({\n      ...identity,\n      signature,\n      attemptedAt,\n      materializedAt: attemptedAt,\n      error: undefined,\n    });\n    return \"materialized\";\n  }\n\n  function indexMarkerRows(\n    rows: readonly ContributionMaterializationRow[],\n  ): ReadonlyMap<string, ContributionMaterializationRow> {\n    return new Map(\n      rows.map((row) => [contributionKey(row.graphId, row), row] as const),\n    );\n  }\n\n  /**\n   * Read every marker for a graph in one round trip. A missing marker table\n   * is its own verdict so boot can create it while hot-path asserts translate\n   * it to `StoreNotInitializedError`. All other database faults propagate.\n   */\n  async function readMarkerRows(\n    graphId: string,\n    includeDeployment = false,\n  ): Promise<\n    | Readonly<{\n        kind: \"rows\";\n        rows: ReadonlyMap<string, ContributionMaterializationRow>;\n      }>\n    | Readonly<{ kind: \"missing-table\"; error: unknown }>\n  > {\n    try {\n      return {\n        kind: \"rows\",\n        rows: indexMarkerRows(\n          await getMarkerRowsForGraph(graphId, includeDeployment),\n        ),\n      };\n    } catch (error) {\n      if (!isMissingTableError(error)) throw error;\n      return { kind: \"missing-table\", error };\n    }\n  }\n\n  /**\n   * Privileged materialize over an arbitrary contribution set. Per\n   * contribution: skip if cached at the current signature; else (unless\n   * `force`) a read-only\n   * pre-check short-circuits the whole pending set when every marker is\n   * already initialized at its current signature, so a warm graph stays\n   * DDL-free — the marker `CREATE TABLE IF NOT EXISTS` itself would fail\n   * on a connection that can't run DDL (#149). Otherwise ensure the\n   * marker table and `materializeOne` each pending contribution. `force`\n   * re-runs the DDL and re-stamps the marker unconditionally (drift-guard\n   * bypassed) — the `reembedVectorField` recreate path.\n   */\n  async function ensureContributions(\n    graphId: string,\n    contributions: readonly StrategyTableContribution[],\n    options?: Readonly<{\n      force?: boolean;\n      onDrift?: \"throw\" | \"skip\";\n      bypassCache?: boolean;\n    }>,\n    physicalOnly = false,\n  ): Promise<void> {\n    if (\n      !physicalOnly &&\n      graphId === DEPLOYMENT_CONTRIBUTION_GRAPH_ID\n    ) {\n      throw new ConfigurationError(\n        `Graph id \"${graphId}\" is reserved for deployment contribution markers.`,\n        { code: \"RESERVED_GRAPH_ID\" },\n      );\n    }\n    // Deployment-scoped contributions have one physical marker shared by all\n    // graphs, plus a graph-local activation marker. Materialize the physical\n    // artifact under the deployment key first, then activate this graph with\n    // a marker write that performs no DDL. This keeps DML-only graph opens\n    // independent of CREATE privileges while retaining graph-local evidence.\n    if (!physicalOnly) {\n      const deploymentContributions = contributions.filter(\n        (contribution) => contribution.scope === \"deployment\",\n      );\n      const graphContributions = contributions.filter(\n        (contribution) => contribution.scope !== \"deployment\",\n      );\n      if (deploymentContributions.length > 0) {\n        const deploymentReady =\n          options?.force !== true && options?.bypassCache !== true &&\n          await Promise.all(\n            deploymentContributions.map(async (contribution) => {\n              const signature = await resolveContributionSignature(\n                contributionKey(graphId, contribution),\n                contribution,\n              );\n              return (\n                initializedSignatures.get(\n                  contributionKey(\n                    DEPLOYMENT_CONTRIBUTION_GRAPH_ID,\n                    contribution,\n                  ),\n                ) === signature &&\n                initializedSignatures.get(\n                  contributionKey(graphId, contribution),\n                ) === signature\n              );\n            }),\n          ).then((states) => states.every(Boolean));\n        if (deploymentReady) {\n          if (graphContributions.length === 0) return;\n          await ensureContributions(graphId, graphContributions, options, true);\n          return;\n        }\n        // Adopt the pre-scope marker written by older TypeGraph releases.\n        // Its successful timestamp is already a physical-storage attestation;\n        // copy only that durable fact to the deployment key. A stale legacy\n        // signature is copied too, so the normal drift guard refuses instead\n        // of blindly CREATE-ing over an unknown physical shape.\n        const legacyRead = await readMarkerRows(graphId, true);\n        if (legacyRead.kind === \"rows\") {\n          for (const contribution of deploymentContributions) {\n            const legacy = legacyRead.rows.get(\n              contributionKey(graphId, contribution),\n            );\n            const deployment = legacyRead.rows.get(\n              contributionKey(\n                DEPLOYMENT_CONTRIBUTION_GRAPH_ID,\n                contribution,\n              ),\n            );\n            if (\n              legacy?.materializedAt !== undefined &&\n              deployment === undefined\n            ) {\n              await deps.recordMarker({\n                ...identityOf(\n                  DEPLOYMENT_CONTRIBUTION_GRAPH_ID,\n                  contribution,\n                ),\n                signature: legacy.signature,\n                attemptedAt: legacy.lastAttemptedAt,\n                materializedAt: legacy.materializedAt,\n                error: legacy.lastError,\n              });\n            }\n          }\n        }\n        await ensureContributions(\n          DEPLOYMENT_CONTRIBUTION_GRAPH_ID,\n          deploymentContributions,\n          options,\n          true,\n        );\n        const physicalRows = indexMarkerRows(\n          await getMarkerRowsForGraph(graphId, true),\n        );\n        const attemptedAt = nowIso();\n        for (const contribution of deploymentContributions) {\n          const physicalKey = contributionKey(\n            DEPLOYMENT_CONTRIBUTION_GRAPH_ID,\n            contribution,\n          );\n          const key = contributionKey(graphId, contribution);\n          const signature = await resolveContributionSignature(key, contribution);\n          const physical = physicalRows.get(physicalKey);\n          if (evaluateContributionState(physical, signature) !== \"initialized\") {\n            continue;\n          }\n          const logical = physicalRows.get(key);\n          if (evaluateContributionState(logical, signature) === \"initialized\") {\n            cacheInitializedSignature({\n              contribution,\n              key,\n              markerGraphId: graphId,\n              signature,\n              cacheRevision: currentCacheRevision(key),\n            });\n            continue;\n          }\n          await deps.recordMarker({\n            ...identityOf(graphId, { ...contribution, scope: \"graph\" }),\n            signature,\n            attemptedAt,\n            materializedAt: attemptedAt,\n            error: undefined,\n          });\n          cacheInitializedSignature({\n            contribution,\n            key,\n            markerGraphId: graphId,\n            signature,\n            cacheRevision: currentCacheRevision(key),\n          });\n        }\n      }\n      if (graphContributions.length === 0) return;\n      await ensureContributions(graphId, graphContributions, options, true);\n      return;\n    }\n    const force = options?.force === true;\n    const bypassCache = options?.bypassCache === true;\n    const entries = await resolveContributionEntries(graphId, contributions);\n    if (bypassCache) {\n      // Repair is invoked precisely when durable state may have changed behind\n      // this materializer's positive cache. Keep every touched key read-through\n      // from now on: deleting only the current entry would still let an assert\n      // that started before the repair repopulate stale success after a failed\n      // repair recorded the contribution as unusable.\n      invalidateContributionCache(\n        entries.map((entry) => entry.key),\n        true,\n      );\n    }\n    // A cache hit requires the signature to match — a contribution whose\n    // shape changed on this instance falls through to the drift-guard.\n    const pending =\n      force || bypassCache ? entries : (\n        entries.filter(\n          (entry) =>\n            uncacheableKeys.has(entry.key) ||\n            initializedSignatures.get(entry.key) !== entry.signature,\n        )\n      );\n    if (pending.length === 0) return;\n\n    const initialRead = force ? undefined : await readMarkerRows(graphId);\n    if (\n      !force &&\n      initialRead?.kind === \"rows\" &&\n      pending.every(\n        (entry) =>\n          evaluateContributionState(\n            initialRead.rows.get(entry.key),\n            entry.signature,\n          ) === \"initialized\",\n      )\n    ) {\n      for (const entry of pending) {\n        cacheInitializedSignature(entry);\n      }\n      return;\n    }\n\n    await deps.ensureMarkerTable();\n    // Preserve the original race check after marker-table bootstrap, but\n    // refresh every pending contribution in one query rather than one query\n    // per slot.\n    const existingRows = indexMarkerRows(\n      await getMarkerRowsForGraph(graphId),\n    );\n    for (const entry of pending) {\n      const outcome = await materializeOne(\n        graphId,\n        entry.contribution,\n        entry.signature,\n        existingRows.get(entry.key),\n        {\n          force,\n          ...(options?.onDrift === undefined ?\n            {}\n          : { onDrift: options.onDrift }),\n        },\n      );\n      // A drift-skipped contribution is deliberately NOT cached: nothing\n      // was materialized at this signature, and asserts must keep reading\n      // it as stale until reembedVectorField restamps it.\n      if (outcome === \"materialized\") {\n        cacheInitializedSignature(entry);\n      }\n    }\n  }\n\n  /**\n   * SELECT-only gate over an arbitrary contribution set: throws\n   * `StoreNotInitializedError` on the first missing/stale/failed\n   * contribution (or a never-bootstrapped marker table). Caches each\n   * confirmed-initialized contribution BY SIGNATURE so the steady state is a\n   * crypto-free DDL-string comparison + `Map.get`. A shape change on the same\n   * instance computes a fresh signature, misses the initialized cache, and\n   * surfaces as `stale`. Never runs DDL or writes.\n   */\n  async function assertContributions(\n    graphId: string,\n    contributions: readonly StrategyTableContribution[],\n  ): Promise<void> {\n    const entries = await resolveContributionEntries(graphId, contributions);\n    const pending = entries.filter(\n      (entry) =>\n        uncacheableKeys.has(entry.key) ||\n        initializedSignatures.get(entry.key) !== entry.signature,\n    );\n    if (pending.length === 0) return;\n\n    const read = await readMarkerRows(\n      graphId,\n      contributions.some((contribution) => contribution.scope === \"deployment\"),\n    );\n    if (read.kind === \"missing-table\") {\n      const first = pending[0];\n      if (first === undefined) return;\n      throw contributionRefusalError(graphId, first, \"missing\", read.error);\n    }\n\n    for (const entry of pending) {\n      const { key, signature } = entry;\n      const physicalState = evaluateContributionState(\n        read.rows.get(key),\n        signature,\n      );\n      const state =\n        entry.contribution.scope === \"deployment\" &&\n        physicalState === \"initialized\" ?\n          evaluateContributionState(\n            read.rows.get(contributionKey(graphId, entry.contribution)),\n            signature,\n          )\n        : physicalState;\n      if (state !== \"initialized\") {\n        throw contributionRefusalError(graphId, entry, state);\n      }\n      cacheInitializedSignature(entry);\n    }\n  }\n\n  async function ensureRuntimeContributions(graphId: string): Promise<void> {\n    if (graphId === DEPLOYMENT_CONTRIBUTION_GRAPH_ID) {\n      throw new ConfigurationError(\n        `Graph id \"${graphId}\" is reserved for deployment contribution markers.`,\n        { code: \"RESERVED_GRAPH_ID\" },\n      );\n    }\n    await ensureContributions(graphId, runtimeContributions());\n  }\n\n  async function assertInitialized(graphId: string): Promise<void> {\n    if (graphId === DEPLOYMENT_CONTRIBUTION_GRAPH_ID) {\n      throw new ConfigurationError(\n        `Graph id \"${graphId}\" is reserved for deployment contribution markers.`,\n        { code: \"RESERVED_GRAPH_ID\" },\n      );\n    }\n    await assertContributions(graphId, runtimeContributions());\n  }\n\n  async function refuseUnavailableFulltext(\n    graphId: string,\n    error: unknown,\n  ): Promise<never> {\n    await Promise.resolve();\n    if (!isMissingTableError(error)) throw error;\n\n    // A failed transaction cannot run the uncached catalog audit on every\n    // backend (Postgres marks it aborted; PGlite shares that one session).\n    // The failed statement still names the missing physical table. That is\n    // transaction-safe proof that the declared physical storage is\n    // missing and avoids any healthy-path query. It does not prove the marker\n    // still exists because the preceding assertion may have hit its cache.\n    const missingContribution = runtimeContributions().find(\n      (contribution) =>\n        contribution.logicalName === \"fulltext\" &&\n        missingTableErrorNames(error, contribution.tableName),\n    );\n    if (missingContribution !== undefined) {\n      throw new ContributionUnavailableError(\n        graphId,\n        missingContribution.tableName,\n        { cause: error },\n      );\n    }\n    throw error;\n  }\n\n  async function refuseUnavailableNodeInsertProjections(\n    graphId: string,\n    projections: Readonly<{\n      fulltext: boolean;\n      vectorSlots: readonly VectorSlot[];\n    }>,\n    error: unknown,\n  ): Promise<never> {\n    await Promise.resolve();\n    if (!isMissingTableError(error)) throw error;\n    const vectorContributions =\n      groupVectorContributions(projections.vectorSlots).get(graphId) ?? [];\n    const missingContribution = [\n      ...(projections.fulltext ? runtimeContributions() : []),\n      ...vectorContributions,\n    ].find((contribution) =>\n      missingTableErrorNames(error, contribution.tableName),\n    );\n    if (missingContribution !== undefined) {\n      throw new ContributionUnavailableError(\n        graphId,\n        missingContribution.tableName,\n        { cause: error },\n      );\n    }\n    throw error;\n  }\n\n  async function ensureVectorSlot(\n    slot: VectorSlot,\n    options?: Readonly<{ force?: boolean; onDrift?: \"throw\" | \"skip\" }>,\n  ): Promise<void> {\n    await ensureVectorSlots([slot], options);\n  }\n\n  async function assertVectorSlot(slot: VectorSlot): Promise<void> {\n    await assertVectorSlots([slot]);\n  }\n\n  function groupVectorContributions(\n    slots: readonly VectorSlot[],\n  ): ReadonlyMap<string, readonly StrategyTableContribution[]> {\n    const grouped = new Map<string, readonly StrategyTableContribution[]>();\n    if (deps.vectorStrategy === undefined) return grouped;\n    for (const slot of slots) {\n      grouped.set(slot.graphId, [\n        ...(grouped.get(slot.graphId) ?? []),\n        ...deps.vectorStrategy.ownedTables(slot),\n      ]);\n    }\n    return grouped;\n  }\n\n  async function ensureVectorSlots(\n    slots: readonly VectorSlot[],\n    options?: Readonly<{ force?: boolean; onDrift?: \"throw\" | \"skip\" }>,\n  ): Promise<void> {\n    for (const [graphId, contributions] of groupVectorContributions(slots)) {\n      await ensureContributions(graphId, contributions, options);\n    }\n  }\n\n  async function assertVectorSlots(\n    slots: readonly VectorSlot[],\n  ): Promise<void> {\n    for (const [graphId, contributions] of groupVectorContributions(slots)) {\n      await assertContributions(graphId, contributions);\n    }\n  }\n\n  async function assertNodeInsertProjections(\n    graphId: string,\n    projections: Readonly<{\n      fulltext: boolean;\n      vectorSlots: readonly VectorSlot[];\n    }>,\n  ): Promise<void> {\n    await assertContributions(\n      graphId,\n      nodeProjectionContributions(graphId, projections),\n    );\n  }\n\n  function nodeProjectionContributions(\n    graphId: string,\n    projections: Readonly<{\n      fulltext: boolean;\n      vectorSlots: readonly VectorSlot[];\n    }>,\n  ): readonly StrategyTableContribution[] {\n    const vectorContributions =\n      groupVectorContributions(projections.vectorSlots).get(graphId) ?? [];\n    const contributions = [\n      ...(projections.fulltext ? runtimeContributions() : []),\n      ...vectorContributions,\n    ];\n    return [\n      ...new Map(\n        contributions.map((contribution) => [\n          contributionKey(graphId, contribution),\n          contribution,\n        ]),\n      ).values(),\n    ];\n  }\n\n  async function resolveNodeProjectionEvidence(\n    graphId: string,\n    projections: Readonly<{\n      fulltext: boolean;\n      vectorSlots: readonly VectorSlot[];\n    }>,\n  ): Promise<readonly AtomicContributionEvidence[]> {\n    const evidence: AtomicContributionEvidence[] = [];\n    for (const contribution of nodeProjectionContributions(\n      graphId,\n      projections,\n    )) {\n      const key = contributionKey(graphId, contribution);\n      const signature = await resolveContributionSignature(key, contribution);\n      if (contribution.scope === \"deployment\") {\n        evidence.push({\n          ...identityOf(DEPLOYMENT_CONTRIBUTION_GRAPH_ID, contribution),\n          signature,\n        });\n      }\n      evidence.push({\n        ...identityOf(\n          graphId,\n          contribution.scope === \"deployment\" ?\n            { ...contribution, scope: \"graph\" }\n          : contribution,\n        ),\n        signature,\n      });\n    }\n    return evidence;\n  }\n\n  async function diagnoseNodeProjectionEvidence(\n    graphId: string,\n    projections: Readonly<{\n      fulltext: boolean;\n      vectorSlots: readonly VectorSlot[];\n    }>,\n  ): Promise<void> {\n    const contributions = nodeProjectionContributions(graphId, projections);\n    const keys = contributions.flatMap((contribution) => [\n      contributionKey(graphId, contribution),\n      contributionKey(markerGraphId(graphId, contribution), contribution),\n    ]);\n    invalidateContributionCache(keys, false);\n    const entries = await resolveContributionEntries(graphId, contributions);\n    const read = await readMarkerRows(\n      graphId,\n      contributions.some((contribution) => contribution.scope === \"deployment\"),\n    );\n    if (read.kind === \"missing-table\") {\n      invalidateContributionCache(keys, true);\n      const first = entries[0];\n      if (first === undefined) return;\n      throw contributionRefusalError(graphId, first, \"missing\", read.error);\n    }\n\n    let firstRefusal:\n      | Readonly<{\n          entry: ResolvedContribution;\n          state: Exclude<\n            ReturnType<typeof evaluateContributionState>,\n            \"initialized\"\n          >;\n        }>\n      | undefined;\n    for (const entry of entries) {\n      const physicalState = evaluateContributionState(\n        read.rows.get(entry.key),\n        entry.signature,\n      );\n      const state =\n        entry.contribution.scope === \"deployment\" &&\n        physicalState === \"initialized\" ?\n          evaluateContributionState(\n            read.rows.get(contributionKey(graphId, entry.contribution)),\n            entry.signature,\n          )\n        : physicalState;\n      if (state === \"initialized\") {\n        cacheInitializedSignature(entry);\n        if (entry.contribution.scope === \"deployment\") {\n          cacheInitializedSignature({\n            ...entry,\n            key: contributionKey(graphId, entry.contribution),\n            markerGraphId: graphId,\n            cacheRevision: currentCacheRevision(\n              contributionKey(graphId, entry.contribution),\n            ),\n          });\n        }\n        continue;\n      }\n      invalidateContributionCache(\n        [\n          entry.key,\n          ...(entry.contribution.scope === \"deployment\" ?\n            [contributionKey(graphId, entry.contribution)]\n          : []),\n        ],\n        true,\n      );\n      firstRefusal ??= { entry, state };\n    }\n    if (firstRefusal !== undefined) {\n      throw contributionRefusalError(\n        graphId,\n        firstRefusal.entry,\n        firstRefusal.state,\n      );\n    }\n  }\n\n  function verificationTargetsByGraph(\n    graphId: string,\n    vectorSlots: readonly VectorSlot[],\n  ): ReadonlyMap<string, readonly VerificationTarget[]> {\n    const targets = new Map<string, VerificationTarget[]>();\n    function addTarget(id: string, target: VerificationTarget): void {\n      const existing = targets.get(id);\n      if (existing === undefined) targets.set(id, [target]);\n      else existing.push(target);\n    }\n\n    for (const contribution of runtimeContributions()) {\n      addTarget(graphId, { contribution, projection: \"fulltext\" });\n    }\n    const { vectorStrategy } = deps;\n    if (vectorStrategy !== undefined) {\n      for (const slot of vectorSlots) {\n        for (const contribution of vectorStrategy.ownedTables(slot)) {\n          addTarget(slot.graphId, {\n            contribution,\n            projection: \"vector\",\n            kind: slot.nodeKind,\n            fieldPath: slot.fieldPath,\n          });\n        }\n      }\n    }\n    return targets;\n  }\n\n  /**\n   * The single detection pass every rung of the health ladder consults.\n   * Takes the resolved target map rather than re-enumerating, so the\n   * probe can group by the same declaration set this diagnosed — a second\n   * enumeration would be free to disagree with the one that produced the\n   * verdicts.\n   */\n  async function diagnoseTargets(\n    targetsByGraph: ReadonlyMap<string, readonly VerificationTarget[]>,\n  ): Promise<readonly DiagnosedContribution[]> {\n    // One probe per distinct physical table, scoped to THIS call: a\n    // strategy may own several contributions over one table, and paying a\n    // round trip per contribution would be waste. Deliberately not the\n    // backend's long-lived `createCachedTableExistence` — a cache that\n    // outlived the call would answer from the very state this diagnostic\n    // exists to re-check.\n    const probes = new Map<string, Promise<boolean>>();\n    function tableExists(tableName: string): Promise<boolean> {\n      const pending = probes.get(tableName);\n      if (pending !== undefined) return pending;\n      const probe = deps.tableExists(tableName);\n      probes.set(tableName, probe);\n      return probe;\n    }\n\n    const diagnosed: DiagnosedContribution[] = [];\n    for (const [id, targets] of targetsByGraph) {\n      // A never-bootstrapped marker table means no contribution is marked,\n      // which the per-target verdict already models as an empty row set.\n      const read = await readMarkerRows(\n        id,\n        targets.some(\n          (target) => target.contribution.scope === \"deployment\",\n        ),\n      );\n      const rows =\n        read.kind === \"rows\" ?\n          read.rows\n        : new Map<string, ContributionMaterializationRow>();\n      for (const { contribution, projection, kind, fieldPath } of targets) {\n        const key = contributionKey(id, contribution);\n        const signature = await resolveContributionSignature(key, contribution);\n        const physicalKey = contributionKey(\n          markerGraphId(id, contribution),\n          contribution,\n        );\n        const physicalRow = rows.get(physicalKey);\n        const row =\n          contribution.scope === \"deployment\" ? physicalRow : rows.get(key);\n        const physicalExists = await tableExists(contribution.tableName);\n        const physicalState = diagnoseContribution(\n          row,\n          signature,\n          physicalExists,\n        );\n        const state =\n          physicalState === undefined && contribution.scope === \"deployment\" &&\n          physicalExists &&\n          evaluateContributionState(rows.get(key), signature) !==\n            \"initialized\" ?\n            \"missing-marker\"\n          : physicalState;\n        if (state === undefined) continue;\n        diagnosed.push({\n          graphId: id,\n          contribution,\n          projection,\n          diagnostic: {\n            owner: contribution.owner,\n            logicalName: contribution.logicalName,\n            physicalName: contribution.tableName,\n            ...(kind === undefined ? {} : { kind }),\n            ...(fieldPath === undefined ? {} : { fieldPath }),\n            state,\n            // The recorded reason, carried through verbatim. `state` folds\n            // several marker verdicts together because they share a repair;\n            // this is what keeps the fold from also discarding the one thing\n            // the catalog can never tell the operator.\n            ...(row?.lastError === undefined ?\n              {}\n            : { lastError: row.lastError }),\n          },\n        });\n      }\n    }\n    return diagnosed;\n  }\n\n  /**\n   * Vector slots carry their own graph id, exactly as `ensureVectorSlots`\n   * reads them, so the marker read stays one query per distinct graph.\n   */\n  async function diagnoseContributions(\n    graphId: string,\n    vectorSlots: readonly VectorSlot[],\n  ): Promise<readonly DiagnosedContribution[]> {\n    return diagnoseTargets(verificationTargetsByGraph(graphId, vectorSlots));\n  }\n\n  async function verifyContributions(\n    graphId: string,\n    vectorSlots: readonly VectorSlot[],\n  ): Promise<readonly ContributionDiagnostic[]> {\n    const diagnosed = await diagnoseContributions(graphId, vectorSlots);\n    return diagnosed.map((entry) => entry.diagnostic);\n  }\n\n  async function probeContributions(\n    graphId: string,\n    vectorSlots: readonly VectorSlot[],\n  ): Promise<readonly ContributionProbeEntry[]> {\n    // One target enumeration shared with the diagnosis: a projection is\n    // reported only when this graph actually declares contributions for\n    // it, so an empty result reads as \"nothing to assess\" and never as\n    // \"assessed and healthy\".\n    const targetsByGraph = verificationTargetsByGraph(graphId, vectorSlots);\n    const declared = new Set<ContributionProbeContribution>();\n    for (const targets of targetsByGraph.values()) {\n      for (const target of targets) declared.add(target.projection);\n    }\n\n    const diagnosed = await diagnoseTargets(targetsByGraph);\n    const entries: ContributionProbeEntry[] = [];\n    for (const projection of PROBE_PROJECTION_ORDER) {\n      if (!declared.has(projection)) continue;\n      const problems = diagnosed.filter(\n        (entry) => entry.projection === projection,\n      );\n      if (problems.length === 0) {\n        entries.push({ contribution: projection, state: \"ready\" });\n        continue;\n      }\n      entries.push({\n        contribution: projection,\n        state: \"degraded\",\n        detail: problems\n          .map((entry) => describeProbeDiagnostic(entry.diagnostic))\n          .join(\"; \"),\n      });\n    }\n    return entries;\n  }\n\n  async function repairContributions(\n    graphId: string,\n    vectorSlots: readonly VectorSlot[],\n  ): Promise<ContributionRepairResult> {\n    const diagnosed = await diagnoseContributions(graphId, vectorSlots);\n    const results: ContributionRepairEntry[] = [];\n    for (const {\n      graphId: targetGraphId,\n      contribution,\n      diagnostic,\n    } of diagnosed) {\n      if (\n        diagnostic.state === \"stale\" ||\n        diagnostic.state === \"orphaned-marker\"\n      ) {\n        results.push({ diagnostic, status: \"requires-rebuild\" });\n        continue;\n      }\n\n      try {\n        // A repair must bypass the positive process-local cache because the\n        // marker may have been removed or failed after this backend cached a\n        // healthy signature. This is intentionally NOT `force`: the normal\n        // drift guard must still refuse to re-stamp stale physical storage.\n        await ensureContributions(targetGraphId, [contribution], {\n          bypassCache: true,\n        });\n        results.push({ diagnostic, status: \"repaired\" });\n      } catch (error) {\n        results.push({\n          diagnostic,\n          status: \"failed\",\n          error: error instanceof Error ? error.message : String(error),\n        });\n      }\n    }\n\n    return {\n      results,\n      remaining: await verifyContributions(graphId, vectorSlots),\n    };\n  }\n\n  /**\n   * The DATABASE-scoped critical section for the contribution ITSELF —\n   * the logical slot, not the relation currently backing it.\n   *\n   * The schema-write fence is per GRAPH, but the fulltext table is one\n   * physical table shared by every graph in the database, so two graphs\n   * rebuilding at once are not serialized by that fence at all: they would\n   * race the drop, the recreate, and each other's reading of \"does another\n   * graph still have rows here?\". One constant-keyed transaction-scoped\n   * advisory lock removes the race instead of recovering from it.\n   *\n   * It is NOT interchangeable with the relation lock\n   * {@link lockSharedFulltextTable} takes, and neither replaces the other:\n   *\n   * - A relation lock cannot be taken when the relation does not exist, and\n   *   \"the table is missing\" is one of the states a rebuild resolves. Two\n   *   rebuilds racing that state have no relation to serialize on.\n   * - A relation lock dies with its relation. The recreate path DROPs the\n   *   table and CREATEs a new one with a new oid, so a second rebuild\n   *   waiting on the old relation is released onto an object that no longer\n   *   exists. An advisory key survives the drop because it names the\n   *   contribution, not the object.\n   *\n   * ORDER: taken FIRST, before any relation lock, on every path that takes\n   * both — and inside the per-graph schema fence, matching the identity DDL\n   * lock's convention (per-graph fence → constant-keyed DDL lock → relation\n   * locks). Nothing else in the system takes this key at all: ordinary\n   * fulltext DML takes only relation-level locks and never an advisory one,\n   * so no path can hold a fulltext relation lock while waiting for this key,\n   * and the wait graph stays acyclic. Keyed distinctly from\n   * `typegraph:identity-ddl`, in the two-argument lock space every\n   * namespaced TypeGraph lock uses — the per-graph fence deliberately\n   * occupies the one-argument space.\n   *\n   * SQLite needs nothing: `BEGIN IMMEDIATE` already holds the database's\n   * single writer slot for the whole fence.\n   */\n  async function lockContributionDdl(\n    tx: SchemaWriteTransactionBackend,\n  ): Promise<void> {\n    const plan = resolveWriteFencePlan(deps.fenceTarget);\n    const fence = requireWriteFence(plan, \"contribution DDL\", \"keyed\");\n    switch (fence.kind) {\n      case \"lock\":\n      case \"row\": {\n        await tx.execute(\n          asCompiledRowsSql(\n            fence.sql.acquireKeyed(CONTRIBUTION_DDL_LOCK_KEY, 0),\n          ),\n        );\n        return;\n      }\n      case \"engine-serialized\":\n      case \"caller-serialized\": {\n        // SQLite needs nothing: `BEGIN IMMEDIATE` already holds the\n        // database's single writer slot for the whole fence. Under\n        // `caller-serialized`, the deployment's own promise plays the same\n        // role.\n        return;\n      }\n      default: {\n        fence satisfies never;\n      }\n    }\n  }\n\n  /**\n   * Excludes every writer from the shared fulltext table for the rest of the\n   * rebuild's transaction.\n   *\n   * The teardown VERDICT — \"no other graph has rows here, so dropping this\n   * table destroys nothing\" — is only as good as the exclusion it was\n   * computed under. Ordinary fulltext DML takes no advisory lock, so the\n   * contribution lock above excludes other REBUILDS and nothing else: a\n   * neighbouring graph's INSERT could commit between an unlocked probe and\n   * the `DROP TABLE`, and be destroyed by a rebuild that had already decided\n   * it was alone. `ACCESS EXCLUSIVE` is the lock scope that matches the\n   * decision's resource — a writer that committed first is visible to the\n   * re-probe (each statement takes a fresh snapshot; the fence sets no\n   * isolation level, so it runs at the session default of READ COMMITTED),\n   * and one that has not committed blocks until this rebuild does.\n   *\n   * Taken only on the path that may drop, and only after the contribution\n   * advisory lock. The graph-scoped path needs nothing: its\n   * `DELETE ... WHERE graph_id` touches only rows this graph owns and is\n   * transactional, so it must not make every other graph's writers wait.\n   *\n   * Same shape as `lockPostgresTrustedImportTables`. SQLite has no relation\n   * lock and needs none: `BEGIN IMMEDIATE` took the database's single writer\n   * slot when the fence opened, so probe, drop and refill already run with\n   * every other writer excluded.\n   */\n  async function lockSharedFulltextTable(\n    tx: SchemaWriteTransactionBackend,\n    tableName: string,\n  ): Promise<void> {\n    const plan = resolveWriteFencePlan(deps.fenceTarget);\n    const fence = requireWriteFence(\n      plan,\n      \"shared fulltext table lock\",\n      \"drain\",\n    );\n    switch (fence.kind) {\n      case \"lock\":\n      case \"row\": {\n        if (fence.drain !== \"table-lock\") {\n          // `drain: \"quiescent\"`: the declaration already excludes\n          // concurrent writers by some other means, so this site takes no\n          // statement.\n          return;\n        }\n        await tx.executeStatement(\n          asCompiledStatementSql(\n            requireFenceLockTables(fence, \"lockSharedFulltextTable\")(\n              [tableName],\n              \"access-exclusive\",\n            ),\n          ),\n        );\n        return;\n      }\n      case \"engine-serialized\":\n      case \"caller-serialized\": {\n        // SQLite has no relation lock and needs none: `BEGIN IMMEDIATE` took\n        // the database's single writer slot when the fence opened, so probe,\n        // drop and refill already run with every other writer excluded.\n        // `caller-serialized` reads the same way through the deployment's\n        // own promise.\n        return;\n      }\n      default: {\n        fence satisfies never;\n      }\n    }\n  }\n\n  /**\n   * Graph ids other than `graphId` with rows in the shared fulltext table.\n   * Read inside the rebuild's transaction so the verdict cannot change\n   * between the check and the teardown it authorizes.\n   */\n  async function readForeignGraphIds(\n    tx: SchemaWriteTransactionBackend,\n    tableName: string,\n    graphId: string,\n  ): Promise<readonly string[]> {\n    const rows = await tx.execute<Readonly<{ graph_id: unknown }>>(\n      asCompiledRowsSql(\n        buildForeignFulltextGraphProbe(\n          tableName,\n          graphId,\n          FOREIGN_GRAPH_REPORT_LIMIT,\n        ),\n      ),\n    );\n    return rows.map((row) => String(row.graph_id));\n  }\n\n  async function rebuildContribution(\n    graphId: string,\n    scope: ContributionRebuildScope,\n    repopulate: (\n      target: TransactionBackend,\n    ) => Promise<ContributionRepopulationStats>,\n  ): Promise<ContributionRebuildResult> {\n    // Refuse before anything is dropped. Every precondition is checked\n    // here rather than inside the fence so a refusal can never be\n    // confused with a half-finished rebuild.\n    if (scope === \"vector\") {\n      throw new ContributionRebuildUnsupportedError(\n        \"vector-source-unavailable\",\n        { graphId, contribution: scope },\n      );\n    }\n    if (fulltextStrategy === undefined) {\n      throw new ContributionRebuildUnsupportedError(\"fulltext-unavailable\", {\n        graphId,\n        contribution: scope,\n      });\n    }\n    const contributions = runtimeContributions();\n    const withoutTeardown = contributions.find(\n      (contribution) => contribution.dropDdl === undefined,\n    );\n    if (withoutTeardown !== undefined) {\n      throw new ContributionRebuildUnsupportedError(\"no-drop-ddl\", {\n        graphId,\n        contribution: scope,\n        owner: withoutTeardown.owner,\n        logicalName: withoutTeardown.logicalName,\n        physicalName: withoutTeardown.tableName,\n      });\n    }\n    const fence = deps.schemaWriteTransaction;\n    if (fence === undefined) {\n      throw new ContributionRebuildUnsupportedError(\"no-schema-fence\", {\n        graphId,\n        contribution: scope,\n        backend: dialect,\n      });\n    }\n\n    // One attempt: resolves `stamps`, this graph's durable `markers`, and\n    // `sharedTableExisted` fresh, then runs the fenced rebuild against them.\n    // All three moved INSIDE this closure (rather than read once, above)\n    // because under the `\"optimistic-retry\"` tier the whole attempt below\n    // is replayed on a commit-time conflict — a stale read taken before a\n    // rolled-back attempt's retry would drive the second attempt's DDL and\n    // stamps off state a committed writer may have already changed.\n    const attempt = async (): Promise<\n      Readonly<{\n        rebuilt: ContributionRebuildResult;\n        stamps: readonly ResolvedContribution[];\n      }>\n    > => {\n      // Hashing is async WebCrypto and independent of the fence, so the\n      // signatures the stamps will carry are resolved before the schema\n      // lock is taken rather than while it is held.\n      const stamps = await resolveContributionEntries(graphId, contributions);\n      // The stamp below writes to the marker table; a database that has\n      // never bootstrapped it would fail after the drop had already run.\n      await deps.ensureMarkerTable();\n\n      // This graph's durable markers, and whether the shared storage is on\n      // disk at all. Both are read before the fence — the marker read decides\n      // whether a rebuild that may not recreate the storage owes a refusal,\n      // and a catalog probe cannot run inside the fence against a table that\n      // may not exist without aborting the transaction on PostgreSQL.\n      const markers = indexMarkerRows(\n        await getMarkerRowsForGraph(graphId, true),\n      );\n      const sharedTable = deps.fulltextTableName;\n      const sharedTableExisted = await deps.tableExists(sharedTable);\n\n      const rebuilt = await fence(graphId, async (tx) => {\n        const record = tx.recordContributionMaterialization;\n        if (record === undefined) {\n          throw new ConfigurationError(\n            \"rebuildContribution requires a transaction-scoped backend that \" +\n              \"can write contribution markers; without it the drop, recreate, \" +\n              \"and stamp could not commit together.\",\n            {\n              backend: dialect,\n              capability: \"contributions\",\n              operation: \"rebuild\",\n            },\n          );\n        }\n\n        // Database-scoped, because what follows may be database-global DDL\n        // that the per-graph fence does not serialize at all.\n        await lockContributionDdl(tx);\n\n        // The decision this whole path turns on: `dropDdl` is a `DROP TABLE`\n        // on ONE physical table that holds every graph's fulltext rows, so\n        // running it under a per-graph fence would destroy content belonging\n        // to graphs this process cannot even name — let alone rebuild, since\n        // fulltext content is reconstructed from a graph's own nodes through\n        // its own schema. The teardown is therefore graph-scoped by default\n        // and only escalates to the drop when the drop takes nothing with it.\n        //\n        // Storage that was already absent is never dropped either: there is\n        // nothing to tear down, and a table that appeared between the\n        // pre-fence catalog probe and this lock would belong to whoever\n        // created it. Recreating from `createDdl` and clearing this graph's\n        // rows serves that state without betting on the probe.\n        const unlockedForeignGraphIds =\n          sharedTableExisted ?\n            await readForeignGraphIds(tx, sharedTable, graphId)\n          : [];\n        // Two probes, deliberately. The first is unlocked and cheap, and its\n        // only job is to keep the common case off the relation lock: a\n        // \"another graph has rows\" verdict can only become MORE true while\n        // this transaction runs, since nothing here deletes another graph's\n        // rows, so acting on it without exclusion is safe. The drop verdict\n        // is the unsafe direction — a writer committing after an unlocked\n        // probe would be destroyed by the drop that probe authorized — so it\n        // is never acted on until it has been re-established while holding\n        // ACCESS EXCLUSIVE. A verdict that flips under the lock loses the\n        // drop and keeps the lock, because PostgreSQL holds locks until\n        // commit: that rebuild then serializes fulltext writers for its\n        // duration, which is the rare and safe direction to be wrong in.\n        const mayRecreate =\n          sharedTableExisted && unlockedForeignGraphIds.length === 0;\n        if (mayRecreate) await lockSharedFulltextTable(tx, sharedTable);\n        const foreignGraphIds =\n          mayRecreate ?\n            await readForeignGraphIds(tx, sharedTable, graphId)\n          : unlockedForeignGraphIds;\n        const recreateStorage = mayRecreate && foreignGraphIds.length === 0;\n\n        if (!recreateStorage) {\n          // `stale` means the physical table is at a shape the current\n          // declaration no longer produces, and the only repair for that is\n          // the drop this rebuild just declined to run. Deleting this graph's\n          // rows and re-stamping instead would publish the current signature\n          // over a shape nothing verified — precisely the blessing the drift\n          // guard exists to prevent. Refuse, before any DDL runs.\n          const staleStamp = stamps.find(\n            ({ key, signature }) =>\n              diagnoseContribution(\n                markers.get(key),\n                signature,\n                sharedTableExisted,\n              ) === \"stale\",\n          );\n          if (staleStamp !== undefined) {\n            throw new ContributionRebuildUnsupportedError(\n              \"shared-storage-in-use\",\n              {\n                graphId,\n                contribution: scope,\n                owner: staleStamp.contribution.owner,\n                logicalName: staleStamp.contribution.logicalName,\n                physicalName: staleStamp.contribution.tableName,\n                otherGraphIds: foreignGraphIds,\n              },\n            );\n          }\n        }\n\n        for (const { contribution } of stamps) {\n          if (recreateStorage) {\n            // `dropDdl` is present on every entry — the refusal above\n            // rejected the whole rebuild otherwise.\n            for (const statement of contribution.dropDdl ?? []) {\n              await tx.executeSchemaDdl(statement);\n            }\n          }\n          for (const statement of contribution.createDdl) {\n            await tx.executeSchemaDdl(statement);\n          }\n        }\n\n        // Graph-scoped teardown when the storage was kept: the same\n        // `DELETE ... WHERE graph_id` `clearGraph` owns, so the rebuild\n        // removes exactly this graph's index content and nothing else. Only\n        // the table the fulltext rows are keyed by `graph_id` in can be\n        // scoped this way; a strategy that owns further tables keeps them\n        // (they are recreated, never dropped, on this path).\n        if (!recreateStorage) {\n          await tx.executeStatement(\n            asCompiledStatementSql(\n              buildFulltextGraphDelete(sharedTable, graphId),\n            ),\n          );\n        }\n\n        // Refill before stamping, inside the same transaction. The order is\n        // not cosmetic: a stamp that committed ahead of the content would\n        // publish storage the hot-path gate considers healthy and that\n        // answers every query with nothing.\n        const stats = await repopulate(tx);\n\n        for (const { contribution, signature } of stamps) {\n          const now = nowIso();\n          await record({\n            ...identityOf(graphId, contribution),\n            signature,\n            attemptedAt: now,\n            materializedAt: now,\n            error: undefined,\n          });\n          if (contribution.scope === \"deployment\") {\n            // Rebuild stamps the shared physical attestation and refreshes\n            // this graph's logical activation separately.\n            await record({\n              ...identityOf(graphId, { ...contribution, scope: \"graph\" }),\n              signature,\n              attemptedAt: now,\n              materializedAt: now,\n              error: undefined,\n            });\n          }\n        }\n        return {\n          rebuilt: stamps.map(({ contribution }) => contribution.tableName),\n          processed: stats.processed,\n          repopulated: stats.repopulated,\n          skipped: stats.skipped,\n        } satisfies ContributionRebuildResult;\n      });\n\n      return { rebuilt, stamps };\n    };\n\n    // Retried as one unit under `\"optimistic-retry\"`: `deps.fenceTarget` is\n    // the only backend reference this closure holds — the real backend\n    // object `write-executor.ts`'s helpers read `capabilities.execution\n    // .unitOfWork` off is not in scope here — and `deps.fenceTarget\n    // .capabilities` is guaranteed the FINALIZED value (`createSqlBackend`\n    // builds it from the capabilities after its own capability tail runs),\n    // so `isOptimisticRetryTier` reads the real, derived tier here exactly\n    // as it does from a full backend. `target: deps.fenceTarget` lets a\n    // profile-declared `serializationFailure` classifier (registered on\n    // this same object by `createSqlBackend`) classify this unit's\n    // conflicts, rather than falling back to the SQLSTATE/message rules.\n    const { rebuilt, stamps } =\n      isOptimisticRetryTier(deps.fenceTarget) ?\n        await runRetriedUnit(\n          {\n            operation: \"rebuildContribution\",\n            attempts: OPTIMISTIC_RETRY_ATTEMPTS,\n            target: deps.fenceTarget,\n          },\n          attempt,\n        )\n      : await attempt();\n\n    // Only after the fence commits: a positive cache entry written for a\n    // rebuild that rolled back would bless a shape that is not on disk.\n    for (const stamp of stamps) {\n      cacheInitializedSignature(stamp);\n    }\n    return rebuilt;\n  }\n\n  function evictVectorSlot(slot: VectorSlot): void {\n    if (deps.vectorStrategy === undefined) return;\n    for (const contribution of deps.vectorStrategy.ownedTables(slot)) {\n      const key = contributionKey(slot.graphId, contribution);\n      invalidateContributionCache([key], true);\n      computedSignatures.delete(key);\n    }\n  }\n\n  async function dropVectorSlot(slot: VectorSlot): Promise<void> {\n    if (deps.vectorStrategy === undefined) return;\n    try {\n      for (const contribution of deps.vectorStrategy.ownedTables(slot)) {\n        await deps.deleteMarker(identityOf(slot.graphId, contribution));\n      }\n    } finally {\n      // Cache eviction is conservative even when marker deletion fails: a\n      // subsequent assertion re-reads durable state instead of trusting a\n      // positive entry for a marker that may already have been deleted.\n      evictVectorSlot(slot);\n    }\n  }\n\n  return {\n    ensureRuntimeContributions,\n    assertInitialized,\n    refuseUnavailableFulltext,\n    refuseUnavailableNodeInsertProjections,\n    ensureVectorSlot,\n    ensureVectorSlots,\n    assertVectorSlot,\n    assertVectorSlots,\n    assertNodeInsertProjections,\n    resolveNodeProjectionEvidence,\n    diagnoseNodeProjectionEvidence,\n    dropVectorSlot,\n    evictVectorSlot,\n    verifyContributions,\n    repairContributions,\n    probeContributions,\n    rebuildContribution,\n  };\n}\n\n/**\n * Provision vector slots on the literal caller-owned schema session. A fresh\n * materializer keeps provisional marker facts out of the root backend's cache:\n * the caller can still roll this transaction back after this method returns.\n */\nexport async function ensureAdoptedVectorSlots(\n  target: SchemaWriteTransactionBackend,\n  slots: readonly VectorSlot[],\n  options: Readonly<{ onDrift?: \"throw\" | \"skip\" }> | undefined,\n  deps: Readonly<{\n    dialect: SqlDialect;\n    fenceTarget: WriteFenceTarget;\n    vectorStrategy: VectorStrategy | undefined;\n    fulltextStrategy: FulltextStrategy | undefined;\n    fulltextTableName: string;\n    markerTableName: string;\n    decodeMarkerTimestamp: (value: unknown) => string | undefined;\n  }>,\n): Promise<void> {\n  if (slots.length === 0) return;\n  if (deps.vectorStrategy === undefined) {\n    throw new ConfigurationError(\n      \"Adopted vector provisioning requires an active vector strategy.\",\n      { capability: \"schemaProvisioning.vectorStrategy\" },\n    );\n  }\n  const recordMarker = target.recordContributionMaterialization;\n  if (recordMarker === undefined || !(await target.tableExists(deps.markerTableName))) {\n    throw new ConfigurationError(\n      \"Adopted vector provisioning requires existing contribution-marker storage and transaction-scoped marker writes.\",\n      { capability: \"schemaProvisioning.vectorMarkers\", markerTableName: deps.markerTableName },\n    );\n  }\n  const markerTable = portableSql.identifier(deps.markerTableName);\n  const materializer = createContributionMaterializer({\n    dialect: deps.dialect,\n    recordFailedAttempts: false,\n    fenceTarget: deps.fenceTarget,\n    vectorStrategy: deps.vectorStrategy,\n    fulltextStrategy: deps.fulltextStrategy,\n    fulltextTableName: deps.fulltextTableName,\n    execDdl: (statement) => target.executeSchemaDdl(statement),\n    ensureMarkerTable: async () => {\n      if (!(await target.tableExists(deps.markerTableName))) {\n        throw new ConfigurationError(\n          \"Adopted vector provisioning requires contribution-marker storage before schema evolution.\",\n          { capability: \"schemaProvisioning.vectorMarkers\", markerTableName: deps.markerTableName },\n        );\n      }\n    },\n    getMarkers: async (graphId) => {\n      const rows = await target.execute<RawContributionMaterializationRow>(\n        asCompiledRowsSql(portableSql`\n          SELECT graph_id AS \"graphId\", logical_name AS \"logicalName\",\n            owner, table_name AS \"tableName\", signature,\n            materialized_at AS \"materializedAt\",\n            last_attempted_at AS \"lastAttemptedAt\",\n            last_error AS \"lastError\"\n          FROM ${markerTable} WHERE graph_id = ${graphId}\n        `),\n      );\n      return rows.map((row) => mapContributionMaterializationRow(row, deps.decodeMarkerTimestamp));\n    },\n    recordMarker: (params) => recordMarker.call(undefined, params),\n    deleteMarker: async () => {\n      await Promise.resolve();\n      throw new ConfigurationError(\n        \"Adopted vector provisioning does not delete contribution markers.\",\n        { capability: \"schemaProvisioning.vectorMarkerDelete\" },\n      );\n    },\n    tableExists: (tableName) => target.tableExists(tableName),\n  });\n  await materializer.ensureVectorSlots(slots, options);\n}\n","/**\n * The engine profile's opaque operation assembly.\n *\n * `SqlEngineProfile.assembly` (`./profile`) carries a dialect's\n * `buildOperations`/`lateMembers` pair without exposing either closure's\n * type on the profile itself: {@link assembleEngine} wraps the pair into one\n * {@link EngineAssembly} value, storing the pair in a module-private\n * `WeakMap` keyed by the assembly object rather than on the object as an\n * inspectable property, and {@link resolveEngineAssembly} is the only way\n * `createSqlBackend` (`./create-sql-backend`) reads them back out. A profile\n * assembled by hand — including one that copies every other field off a\n * bundled builder's result but builds its own `assembly` value — resolves to\n * nothing, because nothing outside this module can add an entry to the map.\n *\n * This is what keeps `EngineOperationsContext`, `EngineAssemblyContext`,\n * `EngineLateMembers`, and everything reachable only through them\n * (`InternalOperationBackend`, `ContributionMaterializer`, `WriteFenceTarget`,\n * …) off `SqlEngineProfile`'s public shape: those types describe the\n * closures this module hides, not the field a consumer reads.\n * `deriveEngineProfile` (`./derive-profile`) treats `assembly` as\n * non-derivable and carries the base profile's assembly object forward by\n * reference, so a derived profile resolves to the SAME wrapped pair the base\n * builder closed over.\n */\nimport { ConfigurationError } from \"../../../errors\";\nimport type { InternalOperationBackend } from \"../operation-backend-core\";\nimport type {\n  EngineAssemblyContext,\n  EngineLateMembers,\n  EngineOperationsContext,\n} from \"./profile\";\n\n// A `unique symbol` brand key, declared but never assigned a runtime value —\n// the property it names is never actually present on an assembly object, so\n// nothing structurally shaped like `{ [ENGINE_ASSEMBLY_BRAND]: ... }` can\n// exist by accident. Not exported: like `RECORDED_INSTANT_BRAND`\n// (`../../../core/temporal.ts`), a brand used only as a computed property\n// key on an otherwise-exported type does not need its own export for\n// api-extractor to resolve the type it brands.\ndeclare const ENGINE_ASSEMBLY_BRAND: unique symbol;\n\n/**\n * An opaque handle for one dialect's `buildOperations`/`lateMembers` pair.\n * {@link assembleEngine} is the only constructor, called once by each\n * bundled builder (`buildSqliteEngineProfile`, `buildPostgresEngineProfile`)\n * on its own closures; {@link resolveEngineAssembly} is the only way to read\n * one back out. No other operation on this type is public — an author\n * deriving a profile carries the base's `assembly` forward by reference\n * (`deriveEngineProfile`) rather than constructing a new one.\n */\nexport type EngineAssembly<TTx> = Readonly<{\n  readonly [ENGINE_ASSEMBLY_BRAND]: (transaction: TTx) => TTx;\n}>;\n\n/** The pair {@link assembleEngine} wraps and {@link resolveEngineAssembly} returns. */\ntype EngineAssemblyParts<TTx> = Readonly<{\n  buildOperations: (ctx: EngineOperationsContext) => InternalOperationBackend;\n  lateMembers: (ctx: EngineAssemblyContext<TTx>) => EngineLateMembers<TTx>;\n}>;\n\n/**\n * Every {@link EngineAssembly} {@link assembleEngine} has ever minted, keyed\n * by object identity. Module-private for the same reason the write-fence\n * first-party registry (`../../capabilities/write-fence`) is: an assembly\n * built anywhere else — or a plain object cast to the type — is a key this\n * map has never seen, so it resolves to nothing.\n *\n * The stored value type parameter is fixed at `never` because a `WeakMap`\n * cannot itself be generic per entry; `assembleEngine` and\n * `resolveEngineAssembly` are each responsible for the one cast at their own\n * boundary that recovers the caller's actual `TTx`.\n */\nconst ENGINE_ASSEMBLIES = new WeakMap<object, EngineAssemblyParts<never>>();\n\n/**\n * The only constructor for {@link EngineAssembly}. Exported from this module\n * for the two bundled builders and from no entrypoint — building one is\n * authoring a new engine, not deriving a variant of an existing profile.\n */\nexport function assembleEngine<TTx>(\n  parts: EngineAssemblyParts<TTx>,\n): EngineAssembly<TTx> {\n  // A frozen, prototype-less handle: it carries no properties of its own\n  // (the brand is type-level only) and can never acquire any, so identity in\n  // the map above is the whole of what an assembly value is.\n  const assembly = Object.freeze(Object.create(null) as EngineAssembly<TTx>);\n  ENGINE_ASSEMBLIES.set(\n    assembly,\n    parts as unknown as EngineAssemblyParts<never>,\n  );\n  return assembly;\n}\n\n/**\n * Resolves `assembly` back to the `buildOperations`/`lateMembers` pair\n * {@link assembleEngine} wrapped it into. `createSqlBackend` calls this\n * exactly once per assembly.\n *\n * @throws {ConfigurationError} with code `ENGINE_ASSEMBLY_UNRECOGNIZED` when\n * `assembly` is not a value this module has minted — a profile built by hand\n * rather than obtained from a bundled builder (and, when adapted, through\n * `deriveEngineProfile`).\n */\nexport function resolveEngineAssembly<TTx>(\n  assembly: EngineAssembly<TTx>,\n): EngineAssemblyParts<TTx> {\n  const parts = ENGINE_ASSEMBLIES.get(assembly);\n  if (parts === undefined) {\n    throw new ConfigurationError(\n      \"This engine profile's assembly was not produced by a bundled \" +\n        \"builder: a profile is obtained from buildPostgresEngineProfile / \" +\n        \"buildSqliteEngineProfile and adapted with deriveEngineProfile.\",\n      { code: \"ENGINE_ASSEMBLY_UNRECOGNIZED\" },\n      {\n        suggestion:\n          \"Build this profile with buildSqliteEngineProfile or \" +\n          \"buildPostgresEngineProfile, optionally adapted with \" +\n          \"deriveEngineProfile, rather than constructing its assembly field \" +\n          \"directly.\",\n      },\n    );\n  }\n  return parts as unknown as EngineAssemblyParts<TTx>;\n}\n","/**\n * Validates the bundled capability declarations a factory assembles before\n * exposing them, then clones and deep-freezes the object so nothing\n * downstream can mutate a capability sub-object after the fact (I14) without\n * freezing objects owned by the caller.\n */\nimport { ConfigurationError } from \"../../errors\";\nimport { type BackendCapabilities } from \"../types\";\n\nfunction deepFreeze<T>(value: T): T {\n  if (typeof value !== \"object\" || value === null || Object.isFrozen(value)) {\n    return value;\n  }\n  Object.freeze(value);\n  for (const propertyValue of Object.values(value as Record<string, unknown>)) {\n    deepFreeze(propertyValue);\n  }\n  return value;\n}\n\n/**\n * Refuses the pre-execution-profile transaction override at bundled factory\n * boundaries. JavaScript and previously compiled callers can still supply the\n * removed member even though the current TypeScript surface excludes it; a\n * shallow capability merge would preserve it as inert data while leaving\n * interactive transactions enabled.\n *\n * Mapping it silently would also be dishonest: the old boolean cannot state\n * the independent root atomic-batch capability introduced by the replacement\n * execution profile.\n *\n * @internal\n */\nexport function assertNoLegacyTransactionCapability(\n  capabilities: unknown,\n): void {\n  if (\n    typeof capabilities !== \"object\" ||\n    capabilities === null ||\n    !Object.hasOwn(capabilities, \"transactions\")\n  ) {\n    return;\n  }\n  throw new ConfigurationError(\n    \"The capabilities.transactions override was removed; use capabilities.execution.interactiveTransactions instead.\",\n    {\n      code: \"LEGACY_CAPABILITY_OVERRIDE\",\n      member: \"transactions\",\n      replacement: \"execution.interactiveTransactions\",\n    },\n    {\n      suggestion:\n        \"Move the transaction availability override under `capabilities.execution.interactiveTransactions`; declare root atomic batching separately through a supported backend transport.\",\n    },\n  );\n}\n\n/**\n * Refuses a bundled capability declaration that contradicts its own shape,\n * then returns a deep-frozen, backend-owned clone.\n *\n * Two contradictions are refused:\n *\n * 1. `recursiveTraversal.supported === false` with no `reason` — the\n *    declaration claims the engine cannot recurse but does not say why.\n * 2. `recursiveTraversal.supported === true` with a dangling `reason` — the\n *    declaration claims support while also carrying an explanation for a\n *    lack of it.\n *\n * Deliberately narrow: no `writeFence` / `graphAnalytics` / surface\n * cross-checks here — declaration-vs-surface consistency is a different\n * concern (a resolved bundle's job, not a bundled declaration's).\n *\n * @throws {ConfigurationError} when a declaration contradicts its own shape.\n */\nexport function assertBundledCapabilityDeclarations(\n  capabilities: BackendCapabilities,\n): BackendCapabilities {\n  const { recursiveTraversal } = capabilities;\n  if (\n    recursiveTraversal?.supported === false &&\n    recursiveTraversal.reason === undefined\n  ) {\n    throw new ConfigurationError(\n      \"Backend capability declaration is contradictory: recursiveTraversal.supported is false but no reason is given.\",\n      {\n        code: \"CAPABILITY_DECLARATION_CONTRADICTION\",\n        member: \"recursiveTraversal\",\n        missing: \"reason\",\n      },\n      {\n        suggestion:\n          \"Supply a `reason` explaining why this backend cannot perform recursive traversal.\",\n      },\n    );\n  }\n  if (\n    recursiveTraversal?.supported === true &&\n    recursiveTraversal.reason !== undefined\n  ) {\n    throw new ConfigurationError(\n      \"Backend capability declaration is contradictory: recursiveTraversal.supported is true but a dangling reason is present.\",\n      {\n        code: \"CAPABILITY_DECLARATION_CONTRADICTION\",\n        member: \"recursiveTraversal\",\n        danglingReason: recursiveTraversal.reason,\n      },\n      {\n        suggestion:\n          \"Remove `reason` when recursiveTraversal.supported is true — it is only meaningful alongside `supported: false`.\",\n      },\n    );\n  }\n  return sealCapabilityDeclaration(capabilities);\n}\n\n/**\n * THE one way a capability declaration becomes immutable: a structured clone\n * (so nothing the caller passed in is retained or frozen — I14) that is then\n * deep-frozen. `assertBundledCapabilityDeclarations` seals the finalized\n * capabilities every backend exposes; the two bundled profile builders seal\n * their `declaredCapabilities` the same way before the profile exists, so a\n * profile derived from a bundled one shares an immutable bag rather than a\n * mutable alias of the builder's own declaration.\n */\nexport function sealCapabilityDeclaration(\n  capabilities: BackendCapabilities,\n): BackendCapabilities {\n  return deepFreeze(structuredClone(capabilities));\n}\n","/**\n * The capability tail every SQL engine profile's declared capabilities pass\n * through before {@link createSqlBackend} (`./create-sql-backend`) builds a\n * backend from them: derive `execution.atomicBatch` from whether the\n * profile's own execution adapter exposes a native atomic-batch primitive,\n * derive `vector` from `profile.vector` and `fulltext` from `profile.fulltext`\n * (each omitted when its strategy is absent, and each deferring to a value\n * already present on `declared` when its strategy IS present — see below),\n * derive `contributions` from `contributionRebuildSupported`\n * (`../contribution-materializations`), derive `execution.unitOfWork` —\n * `\"optimistic-retry\"` when interactive AND the caller's resolved\n * write-fence plan is `row` with `conflict: \"commit-time\"`, `\"interactive\"`\n * when interactive alone, else from `atomicBatch` — then validate and freeze\n * the result with `assertBundledCapabilityDeclarations`.\n *\n * Everything dialect-specific about capability declaration — HTTP-only\n * driver overrides, the PGlite bind-parameter cap, the pessimistic-lock\n * override validation, SQLite's execution-profile hints and graph-analytics\n * resolution — stays in `buildPostgresEngineProfile` / `buildSqliteEngineProfile`\n * and feeds `declaredCapabilities`. Neither dialect builder bakes a DEFAULT\n * `vector` or `fulltext` value into that declaration itself: this module owns\n * the whole tail `createSqlBackend` runs once on top of `declaredCapabilities`,\n * for every dialect alike, so a profile variant built by overriding `vector`\n * or `fulltext` (as `tests/engine-profile-refusals.test.ts` does) changes\n * members and capabilities together instead of leaving one behind. The one\n * exception is a caller-supplied `capabilities.fulltext` /\n * `capabilities.vector` override (`BundledBackendCapabilityOverrides`, an\n * accepted public factory option both dialect builders forward verbatim into\n * `declaredCapabilities`): that value is data the caller asked to be applied,\n * not a stale leftover, so it wins over the strategy-derived default rather\n * than being silently dropped — an accepted option is applied or refused,\n * never ignored.\n *\n * `contributionRebuildSupported` is imported directly rather than threaded\n * through as a profile dep: `create-sql-backend.ts` (this module's only\n * caller) already imports `contribution-materializations.ts` for its\n * contribution-marker and fulltext-gate member construction, so this import\n * adds no new reach into a real Drizzle package that was not already there.\n */\nimport type { FulltextStrategy } from \"../../../query/dialect/fulltext-strategy\";\nimport { buildFulltextCapabilities } from \"../../../query/dialect/fulltext-strategy\";\nimport type { VectorStrategy } from \"../../../query/dialect/vector-strategy\";\nimport { buildVectorCapabilities } from \"../../../query/dialect/vector-strategy\";\nimport { createAtomicSqlProgramExecutor } from \"../../capabilities/atomic-sql-program\";\nimport { assertBundledCapabilityDeclarations } from \"../../capabilities/declarations\";\nimport { deriveUnitOfWork } from \"../../capabilities/execution\";\nimport type { BackendCapabilities } from \"../../types\";\nimport { contributionRebuildSupported } from \"../contribution-materializations\";\nimport type { SqlExecutionAdapter } from \"../execution/types\";\n\nexport type FinalizeEngineCapabilitiesDeps = Readonly<{\n  /**\n   * The profile's root execution adapter. Whether it exposes a native\n   * `executeAtomicBatch` decides `execution.atomicBatch`: `\"root\"` when a\n   * static program can run against this connection with no transaction\n   * wrapper, `\"none\"` otherwise.\n   */\n  execution: SqlExecutionAdapter;\n  /**\n   * The profile's vector strategy — `SqlEngineProfile.vector` verbatim.\n   * Derives `capabilities.vector`, omitted when this is `undefined`.\n   */\n  vectorStrategy: VectorStrategy | undefined;\n  /**\n   * The profile's full-text strategy — `SqlEngineProfile.fulltext` verbatim.\n   * Derives `capabilities.fulltext`, omitted when this is `undefined`, and\n   * feeds `contributionRebuildSupported` alongside `fulltextTableName`.\n   * A profile built with `fulltext: false` supplies `undefined`, which is\n   * how the omit arm is reached.\n   */\n  fulltextStrategy: FulltextStrategy | undefined;\n  /** The profile's physical fulltext table name, the other input `contributionRebuildSupported` needs. */\n  fulltextTableName: string;\n  /**\n   * The `conflict` fact off the write-fence plan `createSqlBackend` already\n   * resolved once for this backend, when that plan's `kind` is `\"row\"`;\n   * `undefined` for every other plan kind. Feeds `execution.unitOfWork`'s\n   * `\"optimistic-retry\"` derivation below — handed in, never re-resolved\n   * here, so the plan is decided exactly once per backend.\n   */\n  writeFenceConflict: \"wait\" | \"commit-time\" | undefined;\n}>;\n\n/**\n * Runs the capability tail shared by every SQL engine profile: derives\n * `execution.atomicBatch`, `vector`, `fulltext`, and `contributions` from\n * `declared` and `deps`, then validates and freezes the result.\n *\n * `createSqlBackend` is the ONE caller, on `profile.declaredCapabilities`;\n * the resulting value reaches every member group, mark site, and dialect\n * `buildOperations` closure through `EngineOperationsContext.capabilities` /\n * `EngineAssemblyContext.capabilities` rather than a second derivation, so a\n * profile variant built by overriding `declaredCapabilities`, `vector`, or\n * `fulltext` (as `tests/engine-profile-refusals.test.ts` does) is re-derived\n * correctly the one place this runs, and nothing downstream can hold a\n * stale copy.\n */\nexport function finalizeEngineCapabilities(\n  declared: BackendCapabilities,\n  deps: FinalizeEngineCapabilitiesDeps,\n): BackendCapabilities {\n  // Pulled out rather than left in `...declared` below: whether each\n  // survives depends on whether its strategy is present, not on whether\n  // `declared` happens to carry one, so the decision has to run explicitly\n  // for both fields instead of riding along on a spread.\n  const {\n    vector: declaredVector,\n    fulltext: declaredFulltext,\n    ...declaredWithoutStrategyCapabilities\n  } = declared;\n  const atomicBatch =\n    createAtomicSqlProgramExecutor(deps.execution) === undefined ? \"none\" : (\n      \"root\"\n    );\n  return assertBundledCapabilityDeclarations({\n    ...declaredWithoutStrategyCapabilities,\n    execution: {\n      ...declared.execution,\n      atomicBatch,\n      // Derived from the facts above, never taken from `declared`: a profile\n      // that hand-set this field would drift the moment one of them changed\n      // underneath it. `deriveUnitOfWork` (`../../capabilities/execution`)\n      // is the one owner of this decision; `writeFenceConflict` is the extra\n      // input only the root capability tail can supply — two acquirers of a\n      // `row`/`commit-time` fence both proceed and the loser's COMMIT fails,\n      // so on that fence the interactive transaction alone is not enough and\n      // every store-owned unit must be a retried one.\n      unitOfWork: deriveUnitOfWork({\n        interactiveTransactions: declared.execution.interactiveTransactions,\n        atomicBatch,\n        fenceConflict: deps.writeFenceConflict,\n      }),\n    },\n    // Absent strategy: omit outright, regardless of what `declared` carried\n    // — a value left over from a builder that (wrongly) baked one in, or a\n    // caller who set `capabilities.vector`/`capabilities.fulltext` for a\n    // strategy this profile does not have, can never survive an absent\n    // strategy by riding along on `declared`. Present strategy: a value the\n    // caller actually declared wins over the strategy-derived default (an\n    // accepted `BundledBackendCapabilityOverrides.vector` /\n    // `.fulltext` option is applied, never silently dropped); otherwise\n    // derive it fresh from the strategy.\n    ...(deps.vectorStrategy === undefined ?\n      {}\n    : {\n        vector: declaredVector ?? buildVectorCapabilities(deps.vectorStrategy),\n      }),\n    ...(deps.fulltextStrategy === undefined ?\n      {}\n    : {\n        fulltext:\n          declaredFulltext ?? buildFulltextCapabilities(deps.fulltextStrategy),\n      }),\n    contributions: {\n      supported: true,\n      probe: true,\n      // One owner for the rebuild answer, absent strategy included: with no\n      // fulltext contribution there is nothing to tear down, so the answer\n      // reduces to the transactional-fence condition inside that function.\n      rebuild: contributionRebuildSupported(\n        deps.fulltextStrategy,\n        deps.fulltextTableName,\n        declared.execution.interactiveTransactions,\n      ),\n    },\n  });\n}\n","/**\n * The trust marks and atomic-program registrations `createSqlBackend`\n * applies to a freshly assembled backend, once the resource audit\n * (`create-sql-backend.ts`, the only audit writer) has already run.\n *\n * Every gate here mirrors the profile-refusal reasoning in\n * `create-sql-backend.ts`'s own doc comment: `markFirstPartyFactory` trusts\n * only the exact profile object `isFirstPartyProfile` recognizes, never a\n * copy, spread, or otherwise derived profile that merely resembles a\n * bundled one; `markBundledRootAutocommitEligible` trusts the profile's own\n * `autocommit.singleStatementDurable` declaration, never construction site\n * alone, because it is a durability claim; and `markSchemaFencedInsertEligible`\n * trusts the resolved fence plan actually fencing something\n * (`kind !== \"unfenced\"`), since the fused insert's lock clause is\n * profile-supplied and an empty clause is only correct when the profile's\n * own plan says writers are serialized.\n */\nimport {\n  type AtomicMutationProgramRegistration,\n  registerAtomicMutationPrograms,\n} from \"../../capabilities/atomic-mutation-program\";\nimport { registerAtomicSqlProgram } from \"../../capabilities/atomic-sql-program\";\nimport { markBundledRootAutocommitEligible } from \"../../capabilities/autocommit-single-statement\";\nimport { markSchemaFencedInsertEligibleUnderFence } from \"../../capabilities/schema-fenced-insert\";\nimport {\n  markFirstPartyFactory,\n  type WriteFencePlan,\n} from \"../../capabilities/write-fence\";\nimport {\n  type AdapterBackend,\n  type BackendCapabilities,\n  supportsRootAtomicBatch,\n} from \"../../types\";\nimport type { SqlExecutionAdapter } from \"../execution/types\";\n\nexport type ApplyEngineMarksDeps = Readonly<{\n  /**\n   * Whether `profile` is the exact object `isFirstPartyProfile` recognizes\n   * (resolved once by `createSqlBackend`) — the sole gate on\n   * `markFirstPartyFactory`.\n   */\n  isFirstParty: boolean;\n  /** The backend's capabilities after `finalizeEngineCapabilities` runs — what `supportsRootAtomicBatch` gates the atomic-program registrations on. */\n  capabilities: BackendCapabilities;\n  /** The write-fence decision resolved once in `createSqlBackend`, gating `markSchemaFencedInsertEligible`. */\n  fencePlan: WriteFencePlan;\n  /** The profile's own durability declaration, gating `markBundledRootAutocommitEligible`. */\n  autocommit: Readonly<{ singleStatementDurable: boolean }>;\n  /** The profile's root execution adapter, registered as the atomic SQL program when the backend supports root atomic batching. */\n  execution: SqlExecutionAdapter;\n  /** The per-mutation-family atomic programs, assembled from the profile's operation-backend layer. */\n  atomicMutationPrograms: AtomicMutationProgramRegistration;\n}>;\n\n/**\n * Applies every mark and registration a profile-built backend earns, in the\n * same order and under the same gates `createSqlBackend` always has.\n */\nexport function applyEngineMarks<TTx>(\n  backend: AdapterBackend<TTx>,\n  deps: ApplyEngineMarksDeps,\n): void {\n  if (deps.isFirstParty) {\n    markFirstPartyFactory(backend);\n  }\n  markSchemaFencedInsertEligibleUnderFence(backend, deps.fencePlan);\n  if (deps.autocommit.singleStatementDurable) {\n    markBundledRootAutocommitEligible(backend);\n  }\n  if (supportsRootAtomicBatch(deps.capabilities)) {\n    registerAtomicSqlProgram(backend, deps.execution);\n    registerAtomicMutationPrograms(backend, deps.atomicMutationPrograms);\n  }\n}\n","/**\n * The base-schema lifecycle members every SQL engine profile exposes:\n * `adoptBaseSchema`, `assertBaseSchemaCurrent`, `bootstrapTables`, and\n * `executeDdl`. All four wrap one `BaseSchemaLifecycle` (`../../base-schema`)\n * built from this dialect's own version-marker access and adoption steps.\n *\n * `executeDdl` is not wrapped at all — the `GraphBackend` member IS the\n * profile's own `EngineProvisioning.executeDdl`, unchanged, so it arrives\n * here as a dep and is exposed verbatim rather than re-wrapped in a new\n * closure.\n *\n * `bootstrapTables` runs every statement `generateDdl` produces through\n * `ensureTable` rather than `executeDdl`: cold boot is the single most\n * contended DDL path there is — two replicas starting at once run exactly\n * this loop against the same database — so PostgreSQL's `ensureTable` takes\n * its concurrent-create retry here rather than trusting `IF NOT EXISTS`\n * (see `EngineProvisioning.ensureTable`'s own doc comment). SQLite's\n * `ensureTable` has no such retry to take, so this loop is byte-identical\n * to what it ran inline before this extraction.\n *\n * The version-marker access (`readVersion`, `writeVersion`) and the\n * edge-match-identity adoption step (`ensureEdgeMatchIdentityStorage`) stay\n * dialect-owned deps rather than shared bodies: both query or migrate\n * through Drizzle's typed table API or `executionAdapter`/`db` directly\n * (`PgTable` and `SQLiteTable` share no common supertype, and the two\n * migrations use unrelated introspection — `pg_attribute`/`pg_constraint`\n * on PostgreSQL, a `PRAGMA table_info` duplicate-column retry loop on\n * SQLite). Ensuring the version-marker table itself needs no such dep: it\n * is one idempotent `CREATE TABLE`, so it is built here from the\n * `ensureTable` primitive plus the caller's own rendered DDL string, the\n * same way `graph-template-members.ts` builds `ensureGraphTemplatesTable`.\n */\nimport {\n  type BaseSchemaLifecycle,\n  createBaseSchemaLifecycle,\n} from \"../../base-schema\";\n\nexport type CreateBaseSchemaMembersDeps = Readonly<{\n  /** Idempotent `CREATE TABLE ...` for the base-schema-version marker table, rendered once by the caller from its own dialect's table-DDL generator. */\n  baseSchemaVersionsTableDdl: string;\n  /** Runs one idempotent CREATE-shaped DDL statement — the same closure the profile's own `EngineProvisioning.ensureTable` uses. */\n  ensureTable: (ddl: string) => Promise<void>;\n  /** Runs one DDL statement with no concurrency handling — the profile's own `EngineProvisioning.executeDdl`, exposed here verbatim as the `GraphBackend` member of the same name. */\n  executeDdl: (ddl: string) => Promise<void>;\n  /** The full set of base-schema DDL statements for a fresh bootstrap — the profile's own `EngineProvisioning.generateDdl`. */\n  generateDdl: () => readonly string[];\n  /**\n   * Reads the installed base-schema-version marker, or `undefined` when\n   * none is installed yet. Dialect-owned: it selects through Drizzle's\n   * typed table API directly, and `PgTable`/`SQLiteTable` share no common\n   * supertype.\n   */\n  readVersion: () => Promise<number | undefined>;\n  /**\n   * Monotonically stamps `version` and returns the version observed\n   * afterward. Dialect-owned for the same reason as `readVersion`, and\n   * because the marker row's timestamp column type differs (a `Date` for\n   * PostgreSQL, an ISO-8601 string for SQLite).\n   */\n  writeVersion: (version: number) => Promise<number | undefined>;\n  /** The graph-templates table's own idempotent CREATE, the version-1 adoption step's other half — `graph-template-members.ts`'s `ensureGraphTemplatesTable`. */\n  ensureGraphTemplatesTable: () => Promise<void>;\n  /**\n   * Idempotent `CREATE TABLE ...` for the write-fence rows relation, the\n   * version-2 adoption step — rendered once by the caller from its own\n   * dialect's table-DDL generator, the same way `baseSchemaVersionsTableDdl`\n   * is. A brand-new relation needs no ALTER-shaped migration, so this step's\n   * `bootstrap` is `\"covered-by-generated-ddl\"`; `adopt()` still ensures it\n   * for the OFFLINE adoption path, which never calls `generateDdl()`.\n   */\n  fencesTableDdl: string;\n  /**\n   * Ensures the edge table's match-identity columns, check constraint, and\n   * unique index exist. Dialect-owned: PostgreSQL introspects\n   * `pg_attribute`/`pg_constraint` and runs an additive migration; SQLite\n   * re-reads `PRAGMA table_info` under a duplicate-column retry loop, since\n   * it has no `ADD COLUMN IF NOT EXISTS`. Neither body goes through\n   * `execution.execAll`/`execGet`/`execRun` or `EngineProvisioning`.\n   */\n  ensureEdgeMatchIdentityStorage: () => Promise<void>;\n  /**\n   * DDL for version-3 adoption: ensure recorded node, edge, and identity-assertion\n   * storage and its structural indexes before creating the changed-since indexes.\n   * Older installations can lack these relations even with a version-1 or\n   * version-2 marker: they originally shipped only in bootstrap DDL.\n   * Dialect factories generate their table and index DDL from the same schema\n   * definitions as bootstrap, then append `sinceIndexAdoptionDdl` for the\n   * `(recordedNodes, recordedEdges, recordedIdentityAssertions)` since indexes.\n   * Fresh bootstrap already creates all of this storage, so the statements\n   * are only exercised by offline `adopt()`.\n   */\n  sinceIndexDdl: readonly string[];\n}>;\n\nexport type BaseSchemaMembers = Readonly<{\n  adoptBaseSchema: () => Promise<void>;\n  assertBaseSchemaCurrent: () => Promise<void>;\n  bootstrapTables: () => Promise<void>;\n  executeDdl: (ddl: string) => Promise<void>;\n}>;\n\n/**\n * Builds the base-schema member group. Moved out of the two dialect files\n * unchanged: version 1 (the graph-templates table plus edge-match-identity\n * adoption, run before bootstrap's generated DDL), version 2 (the fence\n * rows table) and version 3 (the recorded-relations' and recorded\n * identity-assertions relation's `since_idx` indexes) all follow the same\n * prepare/adopt-before/adopt-after bootstrap sequencing.\n */\nexport function createBaseSchemaMembers(\n  deps: CreateBaseSchemaMembersDeps,\n): BaseSchemaMembers {\n  const {\n    baseSchemaVersionsTableDdl,\n    ensureTable,\n    executeDdl,\n    generateDdl,\n    readVersion,\n    writeVersion,\n    ensureGraphTemplatesTable,\n    ensureEdgeMatchIdentityStorage,\n    fencesTableDdl,\n    sinceIndexDdl,\n  } = deps;\n\n  const baseSchemaLifecycle: BaseSchemaLifecycle = createBaseSchemaLifecycle({\n    readVersion,\n    async ensureVersionTable(): Promise<void> {\n      await ensureTable(baseSchemaVersionsTableDdl);\n    },\n    writeVersion,\n    steps: [\n      {\n        version: 1,\n        async adopt(): Promise<void> {\n          await ensureGraphTemplatesTable();\n          await ensureEdgeMatchIdentityStorage();\n        },\n        bootstrap: {\n          phase: \"before\",\n          adopt: ensureEdgeMatchIdentityStorage,\n        },\n      },\n      {\n        version: 2,\n        async adopt(): Promise<void> {\n          await ensureTable(fencesTableDdl);\n        },\n        bootstrap: { phase: \"covered-by-generated-ddl\" },\n      },\n      {\n        version: 3,\n        async adopt(): Promise<void> {\n          for (const ddl of sinceIndexDdl) {\n            await ensureTable(ddl);\n          }\n        },\n        bootstrap: { phase: \"covered-by-generated-ddl\" },\n      },\n    ],\n  });\n\n  return {\n    adoptBaseSchema: baseSchemaLifecycle.adopt,\n    assertBaseSchemaCurrent: baseSchemaLifecycle.assertCurrent,\n\n    async bootstrapTables(): Promise<void> {\n      const startingBaseSchemaVersion =\n        await baseSchemaLifecycle.prepareBootstrap();\n      await baseSchemaLifecycle.adoptBeforeBootstrap(\n        startingBaseSchemaVersion,\n      );\n      const statements = generateDdl();\n      for (const statement of statements) {\n        await ensureTable(statement);\n      }\n      await baseSchemaLifecycle.adoptAfterBootstrap(startingBaseSchemaVersion);\n    },\n\n    executeDdl,\n  };\n}\n","/**\n * PostgreSQL's fused schema-version + graph-advisory write fence: a single\n * statement whose graph lock only acquires once the expected active schema\n * row has been read `FOR SHARE`, so a stale schema version can never win the\n * advisory lock ahead of the read that would have diagnosed it as stale.\n * `createPostgresOperationStrategy`'s only PostgreSQL-only strategy\n * override.\n *\n * This needs `drizzle-orm` to reach the schema table, so — unlike every\n * other write-fence site — it cannot be built from a `FenceSql` bag's\n * standalone-statement members directly; `./postgres-fence-sql` stays\n * outside the Drizzle zone so portable code can import it. Instead this\n * statement takes the resolved `FenceSql` it is composing a statement for as\n * a parameter and calls its `advisoryLockExpression` / `isolationFactExpression`\n * members — the composable, no-`SELECT` forms every `FenceSql` declares —\n * converting each to Drizzle's own `SQL` at the embedding boundary. That is\n * what keeps this fused statement locking the SAME key a derived profile's\n * portable lock sites take: both read `fenceSql.advisoryLockExpression`, so\n * neither can drift to a different spelling than the other.\n */\nimport { type SQL, sql } from \"drizzle-orm\";\n\nimport { requireDefined } from \"../../utils/presence\";\nimport type { FenceSql } from \"../capabilities/write-fence\";\nimport type { SchemaWriteFenceParams } from \"../types\";\nimport { toDrizzleSql } from \"./execution/types\";\nimport type { PostgresTables } from \"./schema/postgres\";\n\n/**\n * PostgreSQL's successful schema + graph write fence in one statement.\n *\n * Both CTEs are `MATERIALIZED`, and `graph_write_lock` reads exclusively from\n * `schema_fence`: PostgreSQL therefore must finish the expected active-row\n * `FOR SHARE` lock before it may acquire the advisory lock. A stale fence\n * yields no rows and cannot acquire the graph lock. The caller interprets that\n * zero-row result through the ordinary active-version diagnostic.\n *\n * `fenceSql` is the resolved fence target's OWN spelling — the bundled\n * `postgresFenceSql` for a bundled backend, or a derived profile's own\n * `FenceSql` override — never imported directly, so a derived profile's\n * fused write and its portable lock sites always exclude on the same key.\n */\nexport function buildLockSchemaVersionAndGraphWrite(\n  tables: PostgresTables,\n  params: SchemaWriteFenceParams,\n  advisoryLockNamespace: string,\n  fenceSql: FenceSql,\n): SQL {\n  const { schemaVersions } = tables;\n  // Both members are optional on `FenceSql` in general (a `row`-mechanism\n  // target supplies neither), but this statement is only ever composed\n  // behind a resolved `mechanism: \"advisory\"` plan — `postgres.ts` gates\n  // threading `fenceSql` into `fusion` on `schemaFenceFusionPlan.kind ===\n  // \"lock\"`, and `planFromWriteFenceDeclaration`'s `\"advisory\"` arm already\n  // refused construction if either were missing. Asserted here, not\n  // silently narrowed, so a caller that ever reaches this with a `row`\n  // target's incomplete `fenceSql` fails loudly instead of embedding\n  // `undefined` in the CTE.\n  const advisoryLockExpression = requireDefined(\n    fenceSql.advisoryLockExpression,\n    \"buildLockSchemaVersionAndGraphWrite: advisoryLockExpression was validated present by the resolved advisory plan\",\n  );\n  const isolationFactExpression = requireDefined(\n    fenceSql.isolationFactExpression,\n    \"buildLockSchemaVersionAndGraphWrite: isolationFactExpression was validated present by the resolved advisory plan\",\n  );\n  return sql`\n    WITH \"schema_fence\" AS MATERIALIZED (\n      SELECT ${schemaVersions.version}\n      FROM ${schemaVersions}\n      WHERE ${schemaVersions.graphId} = ${params.graphId}\n        AND ${schemaVersions.version} = ${params.expectedVersion}\n        AND ${schemaVersions.isActive} = TRUE\n      FOR SHARE\n    ),\n    \"graph_write_lock\" AS MATERIALIZED (\n      SELECT ${toDrizzleSql(advisoryLockExpression(advisoryLockNamespace, params.graphId), \"postgres\")} AS \"lock_token\"\n      FROM \"schema_fence\"\n    )\n    SELECT\n      TRUE AS \"fence_acquired\",\n      ${toDrizzleSql(isolationFactExpression(), \"postgres\")} AS \"transaction_isolation\"\n    FROM \"graph_write_lock\"\n  `;\n}\n","import { getTableName, type SQL, sql, type SQLWrapper } from \"drizzle-orm\";\n\nimport { getDialect } from \"../../../query/dialect\";\nimport type { SqlFragment } from \"../../../query/sql-fragment\";\nimport type { PrimaryKeyRelation } from \"../../../utils/sql-errors\";\nimport type { SqlDialect } from \"../../types\";\nimport { toDrizzleSql } from \"../execution/types\";\nimport type { PostgresTables } from \"../schema/postgres\";\nimport type { SqliteTables } from \"../schema/sqlite\";\n\nexport type Tables = SqliteTables | PostgresTables;\n\n/**\n * The names a relation's PRIMARY KEY constraint can carry, given the relation\n * name and its key columns.\n *\n * Two, because TypeGraph supports two provisioning paths for the same schema\n * and they name the constraint differently:\n *\n *  - TypeGraph's own DDL (`generatePostgresCreateTableSQL`) emits an UNNAMED\n *    `PRIMARY KEY (...)` clause, which PostgreSQL names `<relation>_pkey`;\n *  - `drizzle-kit` renders the Drizzle `primaryKey({ columns })` builder with\n *    its explicit name, `<relation>_<column>_..._pk`.\n *\n * Both are derived rather than hardcoded so a custom table name is covered\n * too. Accepting only these two — never\n * an arbitrary unique constraint on the relation — is what keeps a declared\n * `unique: true` index violation out of the duplicate-identity classification.\n *\n * One declared bound: PostgreSQL clips every identifier to 63 bytes, and clips\n * the RELATION part to make room for the `_pkey` it appends, so a custom\n * relation name long enough to overflow that (58+ bytes) is named something\n * neither of these matches. Classification then simply does not happen and the\n * driver failure surfaces as it did before — no misattribution, just no\n * translation.\n */\nfunction primaryKeyConstraintNames(\n  relation: string,\n  keyColumns: readonly string[],\n): readonly string[] {\n  return [`${relation}_pkey`, `${relation}_${keyColumns.join(\"_\")}_pk`];\n}\n\n/**\n * The nodes relation's identity constraint: `(graph_id, kind, id)`, the tuple\n * every node read also filters on.\n */\nexport function nodePrimaryKeyConstraint(\n  nodes: Tables[\"nodes\"],\n): PrimaryKeyRelation {\n  const relation = getTableName(nodes);\n  const sqliteColumns = [nodes.graphId.name, nodes.kind.name, nodes.id.name];\n  return {\n    table: relation,\n    constraintNames: primaryKeyConstraintNames(relation, sqliteColumns),\n    sqliteColumns,\n  };\n}\n\n/**\n * The edges relation's identity constraint: `(graph_id, id)`. An edge id is\n * unique per graph without its kind, so the key is one column shorter than a\n * node's.\n */\nexport function edgePrimaryKeyConstraint(\n  edges: Tables[\"edges\"],\n): PrimaryKeyRelation {\n  const relation = getTableName(edges);\n  const sqliteColumns = [edges.graphId.name, edges.id.name];\n  return {\n    table: relation,\n    constraintNames: primaryKeyConstraintNames(relation, sqliteColumns),\n    sqliteColumns,\n  };\n}\n\n/**\n * Converts undefined to SQL NULL for use in template literals.\n * Drizzle doesn't handle undefined in sql`` templates correctly.\n */\nexport function sqlNull(value: string | undefined): SQL | string {\n  return value ?? sql.raw(\"NULL\");\n}\n\n/**\n * Gives a bound value the destination column's declared SQL type before it\n * enters a CTE. PostgreSQL otherwise resolves JSON and timestamp parameters in\n * a standalone `VALUES` relation as text, then refuses to assign them to their\n * typed destination columns. SQLite's declared types make the same lowering a\n * no-op in practice, so write programs keep one shared statement shape.\n */\nexport function castBoundValueForColumn(\n  column: Readonly<{ getSQLType: () => string }>,\n  value: unknown,\n): SQL {\n  return sql`CAST(${value} AS ${sql.raw(column.getSQLType())})`;\n}\n\n/**\n * The `AND valid_from …` conjunction a write carries when its caller ASSERTED\n * the lower bound the target row already holds (see\n * {@link UpdateNodeParams.expectedValidFrom} /\n * {@link UpdateEdgeParams.expectedValidFrom}).\n *\n * NULL-SAFE by construction, and that is the whole point of routing both\n * entities through one builder: `valid_from` is nullable (an open-left window),\n * and `col = NULL` is UNKNOWN in SQL, so the obvious `AND col = ?` spelling\n * turns \"I checked that this row has no lower bound\" into a predicate that\n * matches NOTHING — an assertion that always fails is as wrong as one that\n * never runs. The three states are therefore distinct:\n *\n *  - `undefined` — the caller asserted nothing; no predicate is emitted.\n *  - `null` — the caller read an OPEN-LEFT window; emits `IS NULL`.\n *  - a string — the caller read that bound; emits `= <bound>`.\n *\n * One owner: nodes and edges share this function so the two statements cannot\n * drift into disagreeing about what \"the bound I read\" means.\n */\nexport function expectedValidFromPredicate(\n  column: SQLWrapper,\n  expected: string | null | undefined,\n): SQL {\n  if (expected === undefined) return sql.empty();\n  if (expected === null) return sql` AND ${column} IS NULL`;\n  return sql` AND ${column} = ${expected}`;\n}\n\nexport function quotedColumn(column: { name: string }): SQL {\n  return sql.raw(`\"${column.name.replaceAll('\"', '\"\"')}\"`);\n}\n\n/**\n * Returns a quoted SQL identifier for a bare table name string.\n * Use when the operation targets a table that isn't represented as a\n * Drizzle table object (e.g. the FTS5 virtual table).\n */\nexport function quotedTableName(tableName: string): SQL {\n  return sql.raw(`\"${tableName.replaceAll('\"', '\"\"')}\"`);\n}\n\nconst EXISTING_COLUMN_QUALIFIERS = {\n  postgres: (tableName: string, columnName: string) =>\n    sql`${quotedTableName(tableName)}.${quotedColumn({ name: columnName })}`,\n  sqlite: (_tableName: string, columnName: string) =>\n    quotedColumn({ name: columnName }),\n} satisfies Record<SqlDialect, (tableName: string, columnName: string) => SQL>;\n\n/**\n * The EXISTING row's column inside an `ON CONFLICT ... DO UPDATE`, as\n * opposed to `excluded.<column>` (the row that was proposed for insertion).\n * PostgreSQL requires this reference qualified with the table name to\n * disambiguate it from `excluded`; SQLite takes the bare column. Every\n * upsert builder that reads the conflicting row routes through this one\n * owner instead of re-spelling the qualification: `buildInsertUnique`,\n * `buildInsertUniqueBatch`, and `buildInsertUniqueFromSource` (all in\n * `operations/uniques.ts`), plus the atomic node claim upsert in\n * `operations/atomic-node-claims.ts` — four call sites.\n */\nexport function existingColumn(\n  dialect: SqlDialect,\n  tableName: string,\n  columnName: string,\n): SQL {\n  return EXISTING_COLUMN_QUALIFIERS[dialect](tableName, columnName);\n}\n\n/**\n * `column` (an identifier or raw fragment, e.g. `sql.identifier(\"node_id\")`\n * or `sql.raw(\"node_id\")`) rendered so that ORDER BY sorts it by code point\n * on both engines.\n *\n * Relevance-ranking SQL breaks score ties on `node_id`. Left bare, Postgres\n * sorts it under the column's collation — a linguistic collation such as\n * `en_US.UTF-8` orders `a, A, b, B` where byte order gives `A, B, a, b`, so\n * the same query returns different pages on two databases whose `datcollate`\n * differs. SQLite's default `BINARY` collation is already code-point order,\n * as is the store's `compareCodePoints`, which ranks the same rows whenever a\n * search falls back to fusing in JavaScript.\n *\n * `DialectAdapter.binaryText` is the repo's one owner of this decision\n * (`COLLATE \"C\"` on Postgres, identity on SQLite — the same seam\n * `src/store/algorithms/**` and `identity/interchange-read.ts` already\n * consume), so this reaches it instead of re-spelling the collation choice.\n * Forcing the `C` collation on Postgres makes all three agree. The ranking is\n * sorted anyway (no index supplies the order), so this costs nothing.\n */\nexport function codePointOrderKey(column: SqlFragment, dialect: SqlDialect): SQL {\n  return toDrizzleSql(getDialect(dialect).binaryText(column), dialect);\n}\n\n/**\n * Subquery yielding the ids of CURRENT nodes of one kind — the candidate\n * set a facade search statement is allowed to return. Passed into the\n * fulltext and vector search builders so top-k is computed over current\n * rows in SQL, instead of ranking side-table rows first and dropping\n * tombstoned/expired nodes after (which silently shrinks results below\n * `limit` under index drift).\n *\n * Currency matches a `current` read: non-tombstoned AND inside the\n * validity window. The instant is BOUND as a parameter (the backend's\n * clock, same source as its write timestamps) rather than compiled as a\n * per-row SQL now() call — on SQLite a per-row strftime() across two\n * search legs dominated unfiltered facade searches.\n */\nexport function liveNodeIdsSubquery(\n  nodes: Tables[\"nodes\"],\n  graphId: string,\n  nodeKind: string,\n  nowIso: string,\n): SQL {\n  return sql`SELECT ${nodes.id} AS node_id FROM ${nodes} WHERE ${nodes.graphId} = ${graphId} AND ${nodes.kind} = ${nodeKind} AND ${nodes.deletedAt} IS NULL AND (${nodes.validFrom} IS NULL OR ${nodes.validFrom} <= ${nowIso}) AND (${nodes.validTo} IS NULL OR ${nodes.validTo} > ${nowIso})`;\n}\n\nexport function nodeColumnList(nodes: Tables[\"nodes\"]): SQL {\n  return sql.raw(\n    `\"${nodes.graphId.name}\", \"${nodes.kind.name}\", \"${nodes.id.name}\", \"${nodes.props.name}\", \"${nodes.version.name}\", \"${nodes.validFrom.name}\", \"${nodes.validTo.name}\", \"${nodes.createdAt.name}\", \"${nodes.updatedAt.name}\"`,\n  );\n}\n\nexport function edgeColumnList(edges: Tables[\"edges\"]): SQL {\n  return sql.raw(\n    `\"${edges.graphId.name}\", \"${edges.id.name}\", \"${edges.kind.name}\", \"${edges.fromKind.name}\", \"${edges.fromId.name}\", \"${edges.toKind.name}\", \"${edges.toId.name}\", \"${edges.props.name}\", \"${edges.matchIdentityName.name}\", \"${edges.matchIdentityKey.name}\", \"${edges.validFrom.name}\", \"${edges.validTo.name}\", \"${edges.createdAt.name}\", \"${edges.updatedAt.name}\"`,\n  );\n}\n","import { getTableName, type SQL, sql } from \"drizzle-orm\";\n\nimport { CompilerInvariantError } from \"../../../errors\";\nimport {\n  type ClaimOwnerColumnNames,\n  claimOwnerMatchesSql,\n} from \"../../../store/claims/axis\";\nimport type {\n  AtomicNodeBatchEntry,\n  AtomicNodePostimageEntry,\n} from \"../../capabilities/atomic-mutation-program\";\nimport type {\n  InsertNodeParams,\n  NodeInsertClaim,\n  SchemaWriteFenceParams,\n  SqlDialect,\n} from \"../../types\";\nimport {\n  castBoundValueForColumn,\n  existingColumn as existingColumnFor,\n  quotedColumn,\n  type Tables,\n} from \"./shared\";\n\n/** One node batch member, carrying its stable ordinal into claim SQL. */\nexport type AtomicNodeClaimEntry<\n  TEntry extends AtomicNodePostimageEntry = AtomicNodeBatchEntry,\n> = Readonly<{\n  memberOrdinal: number;\n  claimOrdinal: number;\n  entry: TEntry;\n  claim: NodeInsertClaim;\n}>;\n\n/** The owner pair returned by the claim upsert for each target. */\nexport type AtomicNodeClaimOwnerRow = Readonly<{\n  node_kind: string;\n  constraint_name: string;\n  key: string;\n  node_id: string;\n  concrete_kind: string;\n}>;\n\nconst CLAIM_INPUT_ALIAS = \"atomic_node_claim_input\";\nconst SCHEMA_FENCE_ALIAS = \"atomic_node_claim_schema_fence\";\n\nconst CLAIM_INPUT_COLUMNS = [\n  \"graph_id\",\n  \"axis\",\n  \"constraint_name\",\n  \"key\",\n  \"node_id\",\n  \"concrete_kind\",\n] as const;\n\nfunction drizzleSqlTag(\n  strings: TemplateStringsArray,\n  ...expressions: readonly SQL[]\n): SQL {\n  return sql(strings, ...expressions);\n}\n\nfunction ownerColumnNames(uniques: Tables[\"uniques\"]): ClaimOwnerColumnNames {\n  return {\n    nodeId: uniques.nodeId.name,\n    concreteKind: uniques.concreteKind.name,\n  };\n}\n\n/** Binds the uniques table name into `operations/shared.ts`'s `existingColumn`, this file's one caller of that owner. */\nfunction existingColumn(\n  tables: Tables,\n  dialect: SqlDialect,\n  columnName: string,\n): SQL {\n  return existingColumnFor(dialect, getTableName(tables.uniques), columnName);\n}\n\nfunction excludedColumn(columnName: string): SQL {\n  return sql`excluded.${quotedColumn({ name: columnName })}`;\n}\n\nfunction assertClaimEntries(\n  entries: readonly AtomicNodeClaimEntry<AtomicNodePostimageEntry>[],\n  schemaFence: SchemaWriteFenceParams,\n): void {\n  if (entries.length === 0) {\n    throw new CompilerInvariantError(\n      \"An atomic node claim statement needs at least one claim.\",\n    );\n  }\n\n  const ordinals = entries.map(\n    (item) => `${item.memberOrdinal}:${item.claimOrdinal}`,\n  );\n  if (\n    entries.some(\n      (item) =>\n        !Number.isSafeInteger(item.memberOrdinal) ||\n        item.memberOrdinal < 0 ||\n        !Number.isSafeInteger(item.claimOrdinal) ||\n        item.claimOrdinal < 0,\n    ) ||\n    new Set(ordinals).size !== ordinals.length\n  ) {\n    throw new CompilerInvariantError(\n      \"Atomic node claim coordinates must be unique non-negative safe integers.\",\n    );\n  }\n\n  const first = entries[0];\n  for (const item of entries) {\n    const { entry } = item;\n    const claim = item.claim;\n    const uniquenessSupported =\n      claim.verdict.kind === \"uniqueness\" &&\n      claim.verdict.probeAxes.length > 0 &&\n      claim.verdict.probeAxes[0] === claim.axis;\n    const disjointnessSupported =\n      claim.verdict.kind === \"disjointness\" &&\n      claim.key === entry.params.id &&\n      claim.verdict.conflictingKinds.length > 0;\n    if (\n      claim.placement !== \"pre-insert\" ||\n      (!uniquenessSupported && !disjointnessSupported) ||\n      entry.params.graphId !== schemaFence.graphId\n    ) {\n      throw new CompilerInvariantError(\n        \"Atomic node claims require a supported pre-insert claim.\",\n        {\n          memberOrdinal: item.memberOrdinal,\n          claimOrdinal: item.claimOrdinal,\n        },\n      );\n    }\n    if (\n      first !== undefined &&\n      entry.params.graphId !== first.entry.params.graphId\n    ) {\n      throw new CompilerInvariantError(\n        \"Atomic node claim entries must belong to one graph.\",\n        {\n          memberOrdinal: item.memberOrdinal,\n          claimOrdinal: item.claimOrdinal,\n        },\n      );\n    }\n  }\n}\n\nfunction ordinalLiteral(value: number): SQL {\n  return sql.raw(String(value));\n}\n\n/** Complete legacy-storage conflict reads for one normalized claim set. */\nfunction claimConflictQueries(\n  tables: Tables,\n  entries: readonly AtomicNodeClaimEntry<AtomicNodePostimageEntry>[],\n  schemaFence: SchemaWriteFenceParams,\n): readonly SQL[] {\n  return entries.flatMap((item) => {\n    const { claim, entry } = item;\n    const base = sql`\n      ${ordinalLiteral(item.memberOrdinal)} AS member_ordinal,\n      ${ordinalLiteral(item.claimOrdinal)} AS claim_ordinal\n    `;\n    if (claim.verdict.kind === \"uniqueness\") {\n      return claim.verdict.probeAxes.flatMap((probeAxis, probeOrdinal) =>\n        probeAxis === claim.axis ?\n          []\n        : [\n            sql`\n              SELECT\n                ${base},\n                ${ordinalLiteral(probeOrdinal)} AS probe_ordinal,\n                ${probeAxis} AS axis,\n                ${claim.constraintName} AS constraint_name,\n                ${claim.key} AS key,\n                ${tables.uniques.nodeId} AS holder_id,\n                ${tables.uniques.concreteKind} AS holder_kind\n              FROM ${tables.uniques}\n              WHERE ${tables.uniques.graphId} = ${schemaFence.graphId}\n                AND ${tables.uniques.nodeKind} = ${probeAxis}\n                AND ${tables.uniques.constraintName} = ${claim.constraintName}\n                AND ${tables.uniques.key} = ${claim.key}\n                AND ${tables.uniques.deletedAt} IS NULL\n                AND NOT (\n                  ${tables.uniques.nodeId} = ${entry.params.id}\n                  AND ${tables.uniques.concreteKind} = ${entry.params.kind}\n                )\n            `,\n          ],\n      );\n    }\n    return claim.verdict.conflictingKinds.map(\n      (conflictingKind, probeOrdinal) => sql`\n        SELECT\n          ${base},\n          ${ordinalLiteral(probeOrdinal)} AS probe_ordinal,\n          ${claim.axis} AS axis,\n          ${claim.constraintName} AS constraint_name,\n          ${claim.key} AS key,\n          ${tables.nodes.id} AS holder_id,\n          ${tables.nodes.kind} AS holder_kind\n        FROM ${tables.nodes}\n        WHERE ${tables.nodes.graphId} = ${schemaFence.graphId}\n          AND ${tables.nodes.kind} = ${conflictingKind}\n          AND ${tables.nodes.id} = ${claim.key}\n          AND ${tables.nodes.deletedAt} IS NULL\n      `,\n    );\n  });\n}\n\nfunction claimOf(\n  item: AtomicNodeClaimEntry<AtomicNodePostimageEntry>,\n): NodeInsertClaim {\n  return item.claim;\n}\n\nfunction paramsOf(\n  item: AtomicNodeClaimEntry<AtomicNodePostimageEntry>,\n): InsertNodeParams {\n  return item.entry.params;\n}\n\nfunction claimInputValues(\n  tables: Tables,\n  entries: readonly AtomicNodeClaimEntry<AtomicNodePostimageEntry>[],\n): SQL {\n  const { uniques } = tables;\n  return sql.join(\n    entries.map((item) => {\n      const params = paramsOf(item);\n      const claim = claimOf(item);\n      return sql`\n        (\n                ${castBoundValueForColumn(uniques.graphId, params.graphId)},\n                ${castBoundValueForColumn(uniques.nodeKind, claim.axis)},\n                ${castBoundValueForColumn(uniques.constraintName, claim.constraintName)},\n                ${castBoundValueForColumn(uniques.key, claim.key)},\n                ${castBoundValueForColumn(uniques.nodeId, params.id)},\n                ${castBoundValueForColumn(uniques.concreteKind, params.kind)}\n              )\n      `;\n    }),\n    sql`, `,\n  );\n}\n\nfunction claimInputCte(\n  tables: Tables,\n  entries: readonly AtomicNodeClaimEntry<AtomicNodePostimageEntry>[],\n  alias: string,\n): SQL {\n  const columns = sql.join(\n    CLAIM_INPUT_COLUMNS.map((column) => sql.identifier(column)),\n    sql`, `,\n  );\n  return sql`${sql.identifier(alias)} (${columns}) AS (VALUES ${claimInputValues(tables, entries)})`;\n}\n\nfunction schemaFenceCte(\n  tables: Tables,\n  schemaFence: SchemaWriteFenceParams,\n  schemaLockClause: SQL,\n): SQL {\n  const { schemaVersions } = tables;\n  return sql`\n    ${sql.identifier(SCHEMA_FENCE_ALIAS)} AS (\n      SELECT ${schemaVersions.version}\n      FROM ${schemaVersions}\n      WHERE ${schemaVersions.graphId} = ${schemaFence.graphId}\n        AND ${schemaVersions.version} = ${schemaFence.expectedVersion}\n        AND ${schemaVersions.isActive} = TRUE\n      ${schemaLockClause}\n    )\n  `;\n}\n\nfunction claimOwnerMatches(tables: Tables, dialect: SqlDialect): SQL {\n  const uniques = tables.uniques;\n  return claimOwnerMatchesSql(\n    drizzleSqlTag,\n    (columnName) => existingColumn(tables, dialect, columnName),\n    (columnName) => excludedColumn(columnName),\n    ownerColumnNames(uniques),\n  );\n}\n\n/**\n * Builds the schema-fenced batch upsert for the narrow atomic node shape.\n *\n * The returned rows expose the target and the final owner pair for every input\n * claim. A foreign live owner is deliberately left untouched, exactly as the\n * ordinary uniqueness upsert does; the caller compares the returned owner pair\n * with the proposal and translates the refusal.\n */\nexport function buildAtomicNodeClaimUpsertWithSchemaFence(\n  tables: Tables,\n  dialect: SqlDialect,\n  entries: readonly AtomicNodeClaimEntry<AtomicNodePostimageEntry>[],\n  schemaFence: SchemaWriteFenceParams,\n  schemaLockClause: SQL,\n): SQL {\n  assertClaimEntries(entries, schemaFence);\n  const { uniques } = tables;\n  const columns = sql.raw(\n    `\"${uniques.graphId.name}\", \"${uniques.nodeKind.name}\", \"${uniques.constraintName.name}\", \"${uniques.key.name}\", \"${uniques.nodeId.name}\", \"${uniques.concreteKind.name}\", \"${uniques.deletedAt.name}\"`,\n  );\n  const conflictColumns = sql.raw(\n    `\"${uniques.graphId.name}\", \"${uniques.nodeKind.name}\", \"${uniques.constraintName.name}\", \"${uniques.key.name}\"`,\n  );\n  const existing = (column: Readonly<{ name: string }>): SQL =>\n    existingColumn(tables, dialect, column.name);\n  const ownerMatches = claimOwnerMatches(tables, dialect);\n  const input = sql.identifier(CLAIM_INPUT_ALIAS);\n  const inputColumn = (name: string): SQL =>\n    sql`${input}.${quotedColumn({ name })}`;\n\n  return sql`\n    WITH\n      ${schemaFenceCte(tables, schemaFence, schemaLockClause)},\n      ${claimInputCte(tables, entries, CLAIM_INPUT_ALIAS)}\n    INSERT INTO ${uniques} (${columns})\n    SELECT\n      ${inputColumn(\"graph_id\")},\n      ${inputColumn(\"axis\")},\n      ${inputColumn(\"constraint_name\")},\n      ${inputColumn(\"key\")},\n      ${inputColumn(\"node_id\")},\n      ${inputColumn(\"concrete_kind\")},\n      NULL\n    FROM ${input}\n    CROSS JOIN ${sql.identifier(SCHEMA_FENCE_ALIAS)}\n    WHERE TRUE\n    ON CONFLICT (${conflictColumns})\n    DO UPDATE SET\n      ${quotedColumn(uniques.nodeId)} = CASE\n        WHEN ${ownerMatches} THEN ${excludedColumn(uniques.nodeId.name)}\n        WHEN ${existing(uniques.deletedAt)} IS NOT NULL THEN ${excludedColumn(uniques.nodeId.name)}\n        ELSE ${existing(uniques.nodeId)}\n      END,\n      ${quotedColumn(uniques.concreteKind)} = CASE\n        WHEN ${ownerMatches} THEN ${excludedColumn(uniques.concreteKind.name)}\n        WHEN ${existing(uniques.deletedAt)} IS NOT NULL THEN ${excludedColumn(uniques.concreteKind.name)}\n        ELSE ${existing(uniques.concreteKind)}\n      END,\n      ${quotedColumn(uniques.deletedAt)} = CASE\n        WHEN ${ownerMatches} THEN NULL\n        WHEN ${existing(uniques.deletedAt)} IS NOT NULL THEN NULL\n        ELSE ${existing(uniques.deletedAt)}\n      END\n    RETURNING\n      ${quotedColumn(uniques.nodeKind)} AS node_kind,\n      ${quotedColumn(uniques.constraintName)} AS constraint_name,\n      ${quotedColumn(uniques.key)} AS key,\n      ${quotedColumn(uniques.nodeId)} AS node_id,\n      ${quotedColumn(uniques.concreteKind)} AS concrete_kind\n  `;\n}\n\n/**\n * Builds a schema-fenced predicate suitable for a node INSERT's `WHERE` or\n * gate CTE. It is true only when the fence exists and every exact claim target\n * is live and owned by the proposed `(concrete_kind, node_id)` pair.\n */\nexport function buildAtomicNodeClaimGatePredicateWithSchemaFence(\n  tables: Tables,\n  entries: readonly AtomicNodeClaimEntry<AtomicNodePostimageEntry>[],\n  schemaFence: SchemaWriteFenceParams,\n  schemaLockClause: SQL,\n): SQL {\n  assertClaimEntries(entries, schemaFence);\n  const { uniques } = tables;\n  const input = sql.identifier(CLAIM_INPUT_ALIAS);\n  const inputColumn = (name: string): SQL =>\n    sql`${input}.${quotedColumn({ name })}`;\n  const target = sql.identifier(\"candidate_claim\");\n  const targetColumn = (column: Readonly<{ name: string }>): SQL =>\n    sql`${target}.${quotedColumn(column)}`;\n  const legacyConflicts = claimConflictQueries(tables, entries, schemaFence);\n  const legacyGate =\n    legacyConflicts.length === 0 ?\n      sql``\n    : sql`AND NOT EXISTS (${sql.join([...legacyConflicts], sql` UNION ALL `)})`;\n\n  return sql`\n    EXISTS (\n      WITH\n        ${schemaFenceCte(tables, schemaFence, schemaLockClause)},\n        ${claimInputCte(tables, entries, CLAIM_INPUT_ALIAS)}\n      SELECT 1\n      FROM ${sql.identifier(SCHEMA_FENCE_ALIAS)}\n      WHERE NOT EXISTS (\n        SELECT 1\n        FROM ${input}\n        WHERE NOT EXISTS (\n          SELECT 1\n          FROM ${uniques} AS ${target}\n          WHERE ${targetColumn(uniques.graphId)} = ${inputColumn(\"graph_id\")}\n            AND ${targetColumn(uniques.nodeKind)} = ${inputColumn(\"axis\")}\n            AND ${targetColumn(uniques.constraintName)} = ${inputColumn(\"constraint_name\")}\n            AND ${targetColumn(uniques.key)} = ${inputColumn(\"key\")}\n            AND ${targetColumn(uniques.nodeId)} = ${inputColumn(\"node_id\")}\n            AND ${targetColumn(uniques.concreteKind)} = ${inputColumn(\"concrete_kind\")}\n            AND ${targetColumn(uniques.deletedAt)} IS NULL\n        )\n      )\n      ${legacyGate}\n    )\n  `;\n}\n\n/**\n * Builds precise claim cleanup for a failed generated node write. Only the\n * exact target rows owned by the proposal are removed, and only when the\n * proposed node is not live. A stale schema fence makes this a no-op.\n */\nexport function buildAtomicNodeClaimCleanupWithSchemaFence(\n  tables: Tables,\n  entries: readonly AtomicNodeClaimEntry<AtomicNodePostimageEntry>[],\n  schemaFence: SchemaWriteFenceParams,\n  schemaLockClause: SQL,\n): SQL {\n  assertClaimEntries(entries, schemaFence);\n  const { nodes, uniques } = tables;\n  const input = sql.identifier(CLAIM_INPUT_ALIAS);\n  const inputColumn = (name: string): SQL =>\n    sql`${input}.${quotedColumn({ name })}`;\n  const target = sql.identifier(\"claim_to_delete\");\n  const targetColumn = (column: Readonly<{ name: string }>): SQL =>\n    sql`${target}.${quotedColumn(column)}`;\n\n  return sql`\n    WITH\n      ${schemaFenceCte(tables, schemaFence, schemaLockClause)},\n      ${claimInputCte(tables, entries, CLAIM_INPUT_ALIAS)}\n    DELETE FROM ${uniques} AS ${target}\n    WHERE EXISTS (SELECT 1 FROM ${sql.identifier(SCHEMA_FENCE_ALIAS)})\n      AND EXISTS (\n        SELECT 1\n        FROM ${input}\n        WHERE ${targetColumn(uniques.graphId)} = ${inputColumn(\"graph_id\")}\n          AND ${targetColumn(uniques.nodeKind)} = ${inputColumn(\"axis\")}\n          AND ${targetColumn(uniques.constraintName)} = ${inputColumn(\"constraint_name\")}\n          AND ${targetColumn(uniques.key)} = ${inputColumn(\"key\")}\n          AND ${targetColumn(uniques.nodeId)} = ${inputColumn(\"node_id\")}\n          AND ${targetColumn(uniques.concreteKind)} = ${inputColumn(\"concrete_kind\")}\n      )\n      AND NOT EXISTS (\n        SELECT 1\n        FROM ${nodes}\n        WHERE ${nodes.graphId} = ${targetColumn(uniques.graphId)}\n          AND ${nodes.kind} = ${targetColumn(uniques.concreteKind)}\n          AND ${nodes.id} = ${targetColumn(uniques.nodeId)}\n          AND ${nodes.deletedAt} IS NULL\n      )\n  `;\n}\n\n/**\n * Releases every claim owned by nodes tombstoned by this exact atomic delete.\n *\n * Owner-based cleanup deliberately avoids reconstructing uniqueness keys from\n * preimages. The timestamp predicate binds the side effect to rows changed by\n * this program; a stale fence or an already-deleted input therefore removes no\n * claim.\n */\nexport function buildAtomicDeletedNodeClaimReleaseWithSchemaFence(\n  tables: Tables,\n  input: Readonly<{\n    graphId: string;\n    kind: string;\n    ids: readonly string[];\n    timestamp: string;\n  }>,\n  schemaFence: SchemaWriteFenceParams,\n  schemaLockClause: SQL,\n): SQL {\n  const { nodes, uniques } = tables;\n  const owner = sql.identifier(\"atomic_deleted_claim_owner\");\n  const ownerColumn = (column: Readonly<{ name: string }>): SQL =>\n    sql`${owner}.${quotedColumn(column)}`;\n  return sql`\n    WITH ${schemaFenceCte(tables, schemaFence, schemaLockClause)}\n    UPDATE ${uniques} AS ${owner}\n    SET ${quotedColumn(uniques.deletedAt)} = ${input.timestamp}\n    WHERE EXISTS (SELECT 1 FROM ${sql.identifier(SCHEMA_FENCE_ALIAS)})\n      AND ${ownerColumn(uniques.graphId)} = ${input.graphId}\n      AND ${ownerColumn(uniques.concreteKind)} = ${input.kind}\n      AND ${ownerColumn(uniques.deletedAt)} IS NULL\n      AND ${ownerColumn(uniques.nodeId)} IN (${sql.join(\n        input.ids.map((id) => sql`${id}`),\n        sql`, `,\n      )})\n      AND EXISTS (\n        SELECT 1\n        FROM ${nodes}\n        WHERE ${nodes.graphId} = ${ownerColumn(uniques.graphId)}\n          AND ${nodes.kind} = ${ownerColumn(uniques.concreteKind)}\n          AND ${nodes.id} = ${ownerColumn(uniques.nodeId)}\n          AND ${nodes.deletedAt} = ${input.timestamp}\n      )\n  `;\n}\n\n/**\n * Soft-releases every live claim owned by a blind-replacement member.\n *\n * Replacement has no preimage by contract, so it cannot diff old and new\n * claim keys. Releasing by exact owner before acquiring the postimage claims\n * makes omission and key changes complete without an extra read. The later\n * claim gate and terminal postimage assertion keep this cleanup in the same\n * all-or-nothing submission as the row replacement.\n */\nexport function buildAtomicNodeReplacementClaimReleaseWithSchemaFence(\n  tables: Tables,\n  input: Readonly<{\n    graphId: string;\n    kind: string;\n    ids: readonly string[];\n    timestamp: string;\n  }>,\n  schemaFence: SchemaWriteFenceParams,\n  schemaLockClause: SQL,\n): SQL {\n  const { uniques } = tables;\n  return sql`\n    WITH ${schemaFenceCte(tables, schemaFence, schemaLockClause)}\n    UPDATE ${uniques}\n    SET ${quotedColumn(uniques.deletedAt)} = ${input.timestamp}\n    WHERE EXISTS (SELECT 1 FROM ${sql.identifier(SCHEMA_FENCE_ALIAS)})\n      AND ${uniques.graphId} = ${input.graphId}\n      AND ${uniques.concreteKind} = ${input.kind}\n      AND ${uniques.deletedAt} IS NULL\n      AND ${uniques.nodeId} IN (${sql.join(\n        input.ids.map((id) => sql`${id}`),\n        sql`, `,\n      )})\n  `;\n}\n","import { getTableName, sql } from \"drizzle-orm\";\n\nimport {\n  buildFulltextGraphDelete,\n  type FulltextStrategy,\n} from \"../../../query/dialect/fulltext-strategy\";\nimport { type ExecutableSql } from \"../execution/types\";\nimport { type Tables } from \"./shared\";\n\nexport type ClearGraphStatement = Readonly<{\n  query: ExecutableSql;\n  ignoreMissingTable?: boolean;\n  requiredTableName?: string;\n}>;\n\n/**\n * Builds DELETE FROM statements for all per-graph base tables filtered by\n * graph_id. Delete order respects implicit FK-like dependencies:\n * fulltext → recorded identity/edges/nodes → identity closure/assertions →\n * recorded_clock → uniques → edge_claims → edges → nodes → schema_versions.\n * The fulltext delete is omitted entirely when `fulltextStrategy` is\n * `undefined` — the table does not exist on a backend with no fulltext\n * strategy.\n *\n * Embeddings are NOT cleared here: they live in per-`(nodeKind, fieldPath)`\n * strategy-owned tables that this graph-agnostic builder cannot enumerate.\n * The store's `clear()` drives their per-field cleanup through the active\n * vector strategy.\n *\n * Per-deployment status tables (`indexMaterializations`, `kindRemovals`,\n * `reconciliationMarkers`, `contributionMaterializations`) also get cleaned\n * because reuse of the same graphId after `clearGraph` would otherwise inherit\n * stale state. The reconciliation marker is the sharpest case: a stale\n * high-water mark would cause `materializeRemovals` to skip the recovery walk\n * entirely for the freshly-created graph. For the contribution markers the\n * graph-scoped delete removes the graph's own rows — full markers for\n * graph-scoped contributions and graph-local activation markers for\n * deployment-scoped ones — while a deployment contribution's physical marker\n * survives, because it is keyed by the reserved deployment graph id (which\n * `defineGraph` refuses for user graphs) and attests shared storage this\n * per-graph delete never touches. The next privileged boot re-records the\n * graph-local rows from that surviving physical marker.\n */\nexport function buildClearGraph(\n  tables: Tables,\n  graphId: string,\n  fulltextStrategy: FulltextStrategy | undefined,\n): readonly ClearGraphStatement[] {\n  return [\n    // The fulltext table is shared by every graph in the database, so its\n    // graph-scoped delete is owned by one builder the destructive\n    // contribution rebuild calls too — see `buildFulltextGraphDelete`. Omitted\n    // entirely when no fulltext strategy is active: the table was never\n    // created, so there is nothing to delete from.\n    ...(fulltextStrategy === undefined ?\n      []\n    : [{ query: buildFulltextGraphDelete(tables.fulltextTableName, graphId) }]),\n    {\n      query: sql`DELETE FROM ${tables.recordedIdentityAssertions} WHERE ${tables.recordedIdentityAssertions.graphId} = ${graphId}`,\n      ignoreMissingTable: true,\n      requiredTableName: getTableName(tables.recordedIdentityAssertions),\n    },\n    {\n      query: sql`DELETE FROM ${tables.recordedEdges} WHERE ${tables.recordedEdges.graphId} = ${graphId}`,\n      ignoreMissingTable: true,\n      requiredTableName: getTableName(tables.recordedEdges),\n    },\n    {\n      query: sql`DELETE FROM ${tables.recordedNodes} WHERE ${tables.recordedNodes.graphId} = ${graphId}`,\n      ignoreMissingTable: true,\n      requiredTableName: getTableName(tables.recordedNodes),\n    },\n    {\n      query: sql`DELETE FROM ${tables.recordedClock} WHERE ${tables.recordedClock.graphId} = ${graphId}`,\n      ignoreMissingTable: true,\n      requiredTableName: getTableName(tables.recordedClock),\n    },\n    {\n      query: sql`DELETE FROM ${tables.identitySeparation} WHERE ${tables.identitySeparation.graphId} = ${graphId}`,\n      ignoreMissingTable: true,\n      requiredTableName: getTableName(tables.identitySeparation),\n    },\n    {\n      query: sql`DELETE FROM ${tables.identityClosure} WHERE ${tables.identityClosure.graphId} = ${graphId}`,\n      ignoreMissingTable: true,\n      requiredTableName: getTableName(tables.identityClosure),\n    },\n    {\n      query: sql`DELETE FROM ${tables.identityAssertions} WHERE ${tables.identityAssertions.graphId} = ${graphId}`,\n      ignoreMissingTable: true,\n      requiredTableName: getTableName(tables.identityAssertions),\n    },\n    {\n      query: sql`DELETE FROM ${tables.uniques} WHERE ${tables.uniques.graphId} = ${graphId}`,\n    },\n    // Edge claims name the edges they are held by, so they are cleared\n    // BEFORE the edges — the same ordering `uniques` gets against `nodes`.\n    // Tolerates absence for the reason the recorded relations do: bootstrap DDL\n    // runs only on first boot, so a database initialized before this relation\n    // existed has no such table, and clearing a graph must not become the\n    // operation that fails on it.\n    {\n      query: sql`DELETE FROM ${tables.edgeClaims} WHERE ${tables.edgeClaims.graphId} = ${graphId}`,\n      ignoreMissingTable: true,\n      requiredTableName: getTableName(tables.edgeClaims),\n    },\n    {\n      query: sql`DELETE FROM ${tables.edges} WHERE ${tables.edges.graphId} = ${graphId}`,\n    },\n    {\n      query: sql`DELETE FROM ${tables.nodes} WHERE ${tables.nodes.graphId} = ${graphId}`,\n    },\n    {\n      query: sql`DELETE FROM ${tables.indexMaterializations} WHERE ${tables.indexMaterializations.graphId} = ${graphId}`,\n    },\n    {\n      query: sql`DELETE FROM ${tables.kindRemovals} WHERE ${tables.kindRemovals.graphId} = ${graphId}`,\n    },\n    {\n      query: sql`DELETE FROM ${tables.reconciliationMarkers} WHERE ${tables.reconciliationMarkers.graphId} = ${graphId}`,\n    },\n    // Tolerates absence for the same reason the recorded relations do: the\n    // marker table is provisioned lazily by the materializer's ensure, so a\n    // database that never materialized a contribution has no such table, and\n    // clearing a graph must not become the operation that fails on it.\n    {\n      query: sql`DELETE FROM ${tables.contributionMaterializations} WHERE ${tables.contributionMaterializations.graphId} = ${graphId}`,\n      ignoreMissingTable: true,\n      requiredTableName: getTableName(tables.contributionMaterializations),\n    },\n    {\n      query: sql`DELETE FROM ${tables.schemaVersions} WHERE ${tables.schemaVersions.graphId} = ${graphId}`,\n    },\n  ];\n}\n","import { type SQL, sql, type SQLWrapper } from \"drizzle-orm\";\n\nimport { type TemporalMode } from \"../../../core/types\";\nimport type {\n  CountEdgesByKindParams,\n  CountNodesByKindParams,\n  FindEdgesByEndpointSetParams,\n  FindEdgesByHeterogeneousEndpointSetParams,\n  FindEdgesByKindParams,\n  FindNodesByKindParams,\n} from \"../../types\";\nimport type { Tables } from \"./shared\";\n\n/**\n * Builds temporal and soft-delete SQL conditions.\n *\n * - `includeTombstones`: no filtering at all (overrides excludeDeleted)\n * - `current` / `asOf`: exclude deleted + filter by validity range\n * - `includeEnded`: exclude deleted only\n * - no temporalMode: just apply excludeDeleted (backward-compatible)\n */\nfunction buildTemporalConditions(\n  table: Pick<Tables[\"nodes\"], \"deletedAt\" | \"validFrom\" | \"validTo\">,\n  params: Readonly<{\n    temporalMode?: TemporalMode;\n    asOf?: string;\n    excludeDeleted?: boolean;\n  }>,\n): SQL[] {\n  const conditions: SQL[] = [];\n  const mode = params.temporalMode;\n\n  if (mode === \"includeTombstones\") return conditions;\n\n  if (params.excludeDeleted !== false) {\n    conditions.push(sql`${table.deletedAt} IS NULL`);\n  }\n\n  if (mode === \"current\" || mode === \"asOf\") {\n    if (params.asOf === undefined) {\n      throw new Error(`asOf timestamp is required for temporal mode \"${mode}\"`);\n    }\n    conditions.push(\n      sql`(${table.validFrom} IS NULL OR ${table.validFrom} <= ${params.asOf})`,\n      sql`(${table.validTo} IS NULL OR ${table.validTo} > ${params.asOf})`,\n    );\n  }\n\n  return conditions;\n}\n\n/**\n * Builds a query to find nodes by kind.\n *\n * Two pagination shapes are supported:\n * - Offset pagination (`limit` + `offset`): keeps the historical\n *   `ORDER BY created_at DESC` ordering and adds `id DESC` as a\n *   deterministic tiebreaker so shared timestamps don't shuffle rows.\n * - Keyset pagination (`orderBy: \"id\"` + optional `after`): iterates\n *   by `id ASC` for stability under concurrent writes and shared\n *   timestamps. Required by `rebuildFulltextIndex`.\n */\nexport function buildFindNodesByKind(\n  tables: Tables,\n  params: FindNodesByKindParams,\n): SQL {\n  const { nodes } = tables;\n\n  const conditions: SQL[] = [\n    sql`${nodes.graphId} = ${params.graphId}`,\n    sql`${nodes.kind} = ${params.kind}`,\n    ...buildTemporalConditions(nodes, params),\n  ];\n\n  if (params.orderBy === \"id\" && params.after !== undefined) {\n    conditions.push(sql`${nodes.id} > ${params.after}`);\n  }\n\n  const whereClause = sql.join(conditions, sql` AND `);\n\n  const orderByClause =\n    params.orderBy === \"id\" ?\n      sql`${nodes.id} ASC`\n    : sql`${nodes.createdAt} DESC, ${nodes.id} DESC`;\n\n  if (params.limit !== undefined && params.offset !== undefined) {\n    return sql`\n      SELECT * FROM ${nodes}\n      WHERE ${whereClause}\n      ORDER BY ${orderByClause}\n      LIMIT ${params.limit} OFFSET ${params.offset}\n    `;\n  }\n\n  if (params.limit !== undefined) {\n    return sql`\n      SELECT * FROM ${nodes}\n      WHERE ${whereClause}\n      ORDER BY ${orderByClause}\n      LIMIT ${params.limit}\n    `;\n  }\n\n  return sql`\n    SELECT * FROM ${nodes}\n    WHERE ${whereClause}\n    ORDER BY ${orderByClause}\n  `;\n}\n\n/**\n * Builds a query to count nodes by kind.\n */\nexport function buildCountNodesByKind(\n  tables: Tables,\n  params: CountNodesByKindParams,\n): SQL {\n  const { nodes } = tables;\n\n  const conditions: SQL[] = [\n    sql`${nodes.graphId} = ${params.graphId}`,\n    sql`${nodes.kind} = ${params.kind}`,\n    ...buildTemporalConditions(nodes, params),\n  ];\n\n  const whereClause = sql.join(conditions, sql` AND `);\n\n  return sql`\n    SELECT COUNT(*) as count FROM ${nodes}\n    WHERE ${whereClause}\n  `;\n}\n\n/** Builds an `IN (...)` membership predicate over a non-empty id list. */\nfunction buildIdSetCondition(\n  column: SQLWrapper,\n  ids: readonly string[],\n): SQL {\n  return sql`${column} IN (${sql.join(\n    ids.map((id) => sql`${id}`),\n    sql`, `,\n  )})`;\n}\n\n/**\n * The edge read ordering in its two equivalent forms. `qualified` addresses the\n * edges table directly; `bare` addresses the derived table the per-endpoint\n * `ROW_NUMBER()` wrapper selects from, which re-exposes the same column names\n * under a different relation name. Both come from here so the window's ordering\n * and the statement's final ordering cannot drift apart.\n */\nfunction buildEdgeOrdering(\n  tables: Tables,\n  orderBy: FindEdgesByKindParams[\"orderBy\"],\n): Readonly<{ qualified: SQL; bare: SQL }> {\n  const { edges } = tables;\n  return orderBy === \"id\" ?\n      { qualified: sql`${edges.id} ASC`, bare: sql.raw(`\"id\" ASC`) }\n    : {\n        qualified: sql`${edges.createdAt} DESC, ${edges.id} DESC`,\n        bare: sql.raw(`\"created_at\" DESC, \"id\" DESC`),\n      };\n}\n\n/**\n * Builds a query to find edges by kind with optional endpoint filters.\n *\n * Pagination mirrors {@link buildFindNodesByKind}:\n * - Offset pagination (`limit` + `offset`): keeps the historical\n *   `ORDER BY created_at DESC` and adds `id DESC` as a deterministic tiebreaker\n *   so a non-unique `created_at` can no longer shuffle rows across pages.\n * - Keyset pagination (`orderBy: \"id\"` + optional `after`): iterates by `id ASC`\n *   over the unique `id`, a TOTAL order, so a full enumeration can neither skip\n *   nor duplicate a row even when many edges share a `created_at`.\n */\nexport function buildFindEdgesByKind(\n  tables: Tables,\n  params: FindEdgesByKindParams,\n): SQL {\n  const { edges } = tables;\n\n  const conditions: SQL[] = [\n    sql`${edges.graphId} = ${params.graphId}`,\n    sql`${edges.kind} = ${params.kind}`,\n    ...buildTemporalConditions(edges, params),\n  ];\n\n  if (params.fromKind !== undefined) {\n    conditions.push(sql`${edges.fromKind} = ${params.fromKind}`);\n  }\n\n  if (params.fromId !== undefined) {\n    conditions.push(sql`${edges.fromId} = ${params.fromId}`);\n  }\n\n  if (params.toKind !== undefined) {\n    conditions.push(sql`${edges.toKind} = ${params.toKind}`);\n  }\n\n  if (params.toId !== undefined) {\n    conditions.push(sql`${edges.toId} = ${params.toId}`);\n  }\n\n  if (params.orderBy === \"id\" && params.after !== undefined) {\n    conditions.push(sql`${edges.id} > ${params.after}`);\n  }\n\n  const whereClause = sql.join(conditions, sql` AND `);\n\n  const { qualified: orderByClause } = buildEdgeOrdering(\n    tables,\n    params.orderBy,\n  );\n\n  if (params.limit !== undefined && params.offset !== undefined) {\n    return sql`\n      SELECT * FROM ${edges}\n      WHERE ${whereClause}\n      ORDER BY ${orderByClause}\n      LIMIT ${params.limit} OFFSET ${params.offset}\n    `;\n  }\n\n  if (params.limit !== undefined) {\n    return sql`\n      SELECT * FROM ${edges}\n      WHERE ${whereClause}\n      ORDER BY ${orderByClause}\n      LIMIT ${params.limit}\n    `;\n  }\n\n  return sql`\n    SELECT * FROM ${edges}\n    WHERE ${whereClause}\n    ORDER BY ${orderByClause}\n  `;\n}\n\n/**\n * Builds a query to read the edges of a SET of endpoints.\n *\n * The id list compiles to `IN (...)` on the fanned-out side, scoped to one\n * `endpointKind` so the predicate is a prefix seek on the edge relation's\n * system index rather than a scan. `limitPerEndpoint` wraps the read in a\n * `ROW_NUMBER()` partitioned by that same column, capping each endpoint's rows\n * inside the statement instead of in the caller.\n *\n * Ordering matches {@link buildFindEdgesByKind}'s default so a set read\n * returns each endpoint's edges in the same order the singleton read does.\n */\nexport function buildFindEdgesByEndpointSet(\n  tables: Tables,\n  params: FindEdgesByEndpointSetParams,\n  endpointIds: readonly string[],\n): SQL {\n  const { edges } = tables;\n  const fromSide = params.side === \"from\";\n  const kindColumn = fromSide ? edges.fromKind : edges.toKind;\n  const idColumn = fromSide ? edges.fromId : edges.toId;\n\n  const whereClause = sql.join(\n    [\n      sql`${edges.graphId} = ${params.graphId}`,\n      sql`${edges.kind} = ${params.kind}`,\n      ...buildTemporalConditions(edges, params),\n      sql`${kindColumn} = ${params.endpointKind}`,\n      buildIdSetCondition(idColumn, endpointIds),\n    ],\n    sql` AND `,\n  );\n\n  const { qualified: orderByClause, bare: derivedOrderByClause } =\n    buildEdgeOrdering(tables, undefined);\n\n  if (params.limitPerEndpoint === undefined) {\n    return sql`\n      SELECT * FROM ${edges}\n      WHERE ${whereClause}\n      ORDER BY ${orderByClause}\n    `;\n  }\n\n  const ranked = sql`\n    SELECT *, ROW_NUMBER() OVER (\n      PARTITION BY ${idColumn} ORDER BY ${orderByClause}\n    ) AS endpoint_rank\n    FROM ${edges}\n    WHERE ${whereClause}\n  `;\n  return sql`\n    SELECT * FROM (${ranked}) AS ranked_edges\n    WHERE endpoint_rank <= ${params.limitPerEndpoint}\n    ORDER BY ${derivedOrderByClause}\n  `;\n}\n\n/**\n * Builds a multi-kind edge read from a heterogeneous endpoint relation.\n *\n * Joining a `VALUES` relation lets both engines seek the composite endpoint\n * index without generating one SQL branch for every licensed edge/source-kind\n * combination.\n */\nexport function buildFindEdgesByHeterogeneousEndpointSet(\n  tables: Tables,\n  params: FindEdgesByHeterogeneousEndpointSetParams,\n  endpoints: FindEdgesByHeterogeneousEndpointSetParams[\"endpoints\"],\n  edgeKinds: readonly string[],\n): SQL {\n  const { edges } = tables;\n  const fromSide = params.side === \"from\";\n  const kindColumn = fromSide ? edges.fromKind : edges.toKind;\n  const idColumn = fromSide ? edges.fromId : edges.toId;\n  const requestedKind = sql.raw(`requested_endpoints.\"endpoint_kind\"`);\n  const requestedId = sql.raw(`requested_endpoints.\"endpoint_id\"`);\n  const requestedOppositeKind = sql.raw(\n    `requested_endpoints.\"opposite_kind\"`,\n  );\n  const requestedOppositeId = sql.raw(`requested_endpoints.\"opposite_id\"`);\n  const oppositeKindColumn = fromSide ? edges.toKind : edges.fromKind;\n  const oppositeIdColumn = fromSide ? edges.toId : edges.fromId;\n  const readsExactPairs = endpoints[0]?.opposite !== undefined;\n  const requestedRows = sql.join(\n    endpoints.map((endpoint) =>\n      endpoint.opposite === undefined ?\n        sql`(${endpoint.kind}, ${endpoint.id}, NULL, NULL)`\n      : sql`(${endpoint.kind}, ${endpoint.id}, ${endpoint.opposite.kind}, ${endpoint.opposite.id})`,\n    ),\n    sql`, `,\n  );\n  const whereClause = sql.join(\n    [\n      sql`${edges.graphId} = ${params.graphId}`,\n      buildIdSetCondition(edges.kind, edgeKinds),\n      ...buildTemporalConditions(edges, params),\n    ],\n    sql` AND `,\n  );\n  const oppositeJoinClause =\n    readsExactPairs ?\n      sql`\n        AND ${oppositeKindColumn} = ${requestedOppositeKind}\n        AND ${oppositeIdColumn} = ${requestedOppositeId}\n      `\n    : sql``;\n  const joinClause = sql`\n    FROM ${edges}\n    INNER JOIN requested_endpoints\n      ON ${kindColumn} = ${requestedKind}\n     AND ${idColumn} = ${requestedId}\n     ${oppositeJoinClause}\n    WHERE ${whereClause}\n  `;\n  const { qualified: orderByClause, bare: derivedOrderByClause } =\n    buildEdgeOrdering(tables, undefined);\n\n  if (params.limitPerEndpoint === undefined) {\n    return sql`\n      WITH requested_endpoints(endpoint_kind, endpoint_id, opposite_kind, opposite_id) AS (\n        VALUES ${requestedRows}\n      )\n      SELECT ${edges}.*\n      ${joinClause}\n      ORDER BY ${orderByClause}\n    `;\n  }\n\n  const ranked = sql`\n    SELECT ${edges}.*, ROW_NUMBER() OVER (\n      PARTITION BY ${requestedKind}, ${requestedId}, ${requestedOppositeKind}, ${requestedOppositeId}\n      ORDER BY ${orderByClause}\n    ) AS endpoint_rank\n    ${joinClause}\n  `;\n  return sql`\n    WITH requested_endpoints(endpoint_kind, endpoint_id, opposite_kind, opposite_id) AS (\n      VALUES ${requestedRows}\n    )\n    SELECT * FROM (${ranked}) AS ranked_edges\n    WHERE endpoint_rank <= ${params.limitPerEndpoint}\n    ORDER BY ${derivedOrderByClause}\n  `;\n}\n\n/**\n * Builds a query to count edges by kind with optional endpoint filters.\n */\nexport function buildCountEdgesByKind(\n  tables: Tables,\n  params: CountEdgesByKindParams,\n): SQL {\n  const { edges } = tables;\n\n  const conditions: SQL[] = [\n    sql`${edges.graphId} = ${params.graphId}`,\n    sql`${edges.kind} = ${params.kind}`,\n    ...buildTemporalConditions(edges, params),\n  ];\n\n  if (params.fromKind !== undefined) {\n    conditions.push(sql`${edges.fromKind} = ${params.fromKind}`);\n  }\n\n  if (params.fromId !== undefined) {\n    conditions.push(sql`${edges.fromId} = ${params.fromId}`);\n  }\n\n  if (params.toKind !== undefined) {\n    conditions.push(sql`${edges.toKind} = ${params.toKind}`);\n  }\n\n  if (params.toId !== undefined) {\n    conditions.push(sql`${edges.toId} = ${params.toId}`);\n  }\n\n  const whereClause = sql.join(conditions, sql` AND `);\n\n  return sql`\n    SELECT COUNT(*) as count FROM ${edges}\n    WHERE ${whereClause}\n  `;\n}\n","/**\n * The read-only audit behind `store.verifyConstraintFences()`.\n *\n * Every statement here reads a relation the constraint is DECLARED over, never\n * a claim relation's primary key: a claim key admits one row per axis by\n * construction, and a database written before the claim relations existed holds\n * no edge claims at all, so a claim scan reports zero violations on exactly the\n * pre-existing data this audit exists to find. Uniqueness is the one family\n * whose pre-upgrade duplicate IS a pair of claim rows — two live `uniques` rows\n * at two different `node_kind`s — so it reads that relation for the ROWS while\n * leaving \"do these two axes fold together?\" to the caller.\n *\n * Each family is one statement with a correlated `EXISTS` over the same\n * relation, rather than a `GROUP BY … HAVING count(*) > 1` followed by a\n * second fetch of the members: one round trip, no tuple-list `IN` to render,\n * and the same rows either way.\n */\nimport { getTableName, type SQL, sql } from \"drizzle-orm\";\n\nimport {\n  type ConstrainedCardinality,\n  EDGE_CARDINALITY_SPECS,\n} from \"../../../store/claims/edge-claims\";\nimport { quotedColumn, type Tables } from \"./shared\";\n\n/** The alias the correlated subquery reads the same relation under. */\nconst PEER = \"peer\";\n\n/** Qualifies a column with a relation name, the rendering both dialects read. */\nfunction qualified(\n  relation: string,\n  column: Readonly<{ name: string }>,\n): SQL {\n  return sql.raw(`\"${relation}\".\"${column.name}\"`);\n}\n\n/** A bound-parameter `IN (…)` list; callers never pass an empty one. */\nfunction inList(values: readonly string[]): SQL {\n  return sql.join(\n    values.map((value) => sql`${value}`),\n    sql`, `,\n  );\n}\n\n/**\n * Live `uniques` rows sharing a `(constraint_name, key)` with another live row,\n * restricted to constraint names the graph declares.\n *\n * The restriction is load-bearing, not a filter for speed: the same relation\n * holds disjointness claims under a reserved constraint name whose `node_kind`\n * is a PAIR label, and no uniqueness axis can be computed for one. Those rows\n * are audited from the nodes relation instead\n * ({@link buildDisjointOverlapAudit}).\n *\n * The peer test is `node_kind <> node_kind` because the relation's primary key\n * already makes two rows with equal `(graph_id, node_kind, constraint_name,\n * key)` impossible — so a peer is by definition a row at a DIFFERENT axis,\n * which is precisely the shape a pre-upgrade duplicate leaves behind.\n */\nexport function buildContendedUniqueRowAudit(\n  tables: Tables,\n  graphId: string,\n  constraintNames: readonly string[],\n): SQL {\n  const { uniques } = tables;\n  const relation = getTableName(uniques);\n  return sql`\n    SELECT\n      ${quotedColumn(uniques.nodeKind)} as node_kind,\n      ${quotedColumn(uniques.constraintName)} as constraint_name,\n      ${quotedColumn(uniques.key)} as key,\n      ${quotedColumn(uniques.concreteKind)} as concrete_kind,\n      ${quotedColumn(uniques.nodeId)} as node_id\n    FROM ${uniques}\n    WHERE ${qualified(relation, uniques.graphId)} = ${graphId}\n      AND ${qualified(relation, uniques.constraintName)} IN (${inList(constraintNames)})\n      AND ${qualified(relation, uniques.deletedAt)} IS NULL\n      AND EXISTS (\n        SELECT 1 FROM ${uniques} AS ${sql.raw(`\"${PEER}\"`)}\n        WHERE ${qualified(PEER, uniques.graphId)} = ${qualified(relation, uniques.graphId)}\n          AND ${qualified(PEER, uniques.constraintName)} = ${qualified(relation, uniques.constraintName)}\n          AND ${qualified(PEER, uniques.key)} = ${qualified(relation, uniques.key)}\n          AND ${qualified(PEER, uniques.deletedAt)} IS NULL\n          AND ${qualified(PEER, uniques.nodeKind)} <> ${qualified(relation, uniques.nodeKind)}\n      )\n  `;\n}\n\n/**\n * Live edges of the named kinds sharing one declared cardinality's population\n * with another live edge.\n *\n * Which endpoints the population is keyed by and what a member must still BE\n * are read from {@link EDGE_CARDINALITY_SPECS} — the same table the probe and\n * the claim's SQL read — so the audit cannot report a population the fence does\n * not fence, or miss one it does. One statement per cardinality, because that\n * is the granularity at which the spec differs.\n */\nexport function buildContendedEdgeRowAudit(\n  tables: Tables,\n  graphId: string,\n  cardinality: ConstrainedCardinality,\n  edgeKinds: readonly string[],\n): SQL {\n  const { edges } = tables;\n  const relation = getTableName(edges);\n  const spec = EDGE_CARDINALITY_SPECS[cardinality];\n  const activeOnly =\n    spec.holderLiveness === \"liveAndActive\" ?\n      sql` AND ${qualified(relation, edges.validTo)} IS NULL`\n    : sql.empty();\n  const peerActiveOnly =\n    spec.holderLiveness === \"liveAndActive\" ?\n      sql` AND ${qualified(PEER, edges.validTo)} IS NULL`\n    : sql.empty();\n  const peerToEndpoints =\n    spec.keyShape === \"fromAndTo\" ?\n      sql`\n        AND ${qualified(PEER, edges.toKind)} = ${qualified(relation, edges.toKind)}\n                  AND ${qualified(PEER, edges.toId)} = ${qualified(relation, edges.toId)}\n      `\n    : sql.empty();\n\n  return sql`\n    SELECT\n      ${quotedColumn(edges.id)} as edge_id,\n      ${quotedColumn(edges.kind)} as edge_kind,\n      ${quotedColumn(edges.fromKind)} as from_kind,\n      ${quotedColumn(edges.fromId)} as from_id,\n      ${quotedColumn(edges.toKind)} as to_kind,\n      ${quotedColumn(edges.toId)} as to_id\n    FROM ${edges}\n    WHERE ${qualified(relation, edges.graphId)} = ${graphId}\n      AND ${qualified(relation, edges.kind)} IN (${inList(edgeKinds)})\n      AND ${qualified(relation, edges.deletedAt)} IS NULL${activeOnly}\n      AND EXISTS (\n        SELECT 1 FROM ${edges} AS ${sql.raw(`\"${PEER}\"`)}\n        WHERE ${qualified(PEER, edges.graphId)} = ${qualified(relation, edges.graphId)}\n          AND ${qualified(PEER, edges.kind)} = ${qualified(relation, edges.kind)}\n          AND ${qualified(PEER, edges.fromKind)} = ${qualified(relation, edges.fromKind)}\n          AND ${qualified(PEER, edges.fromId)} = ${qualified(relation, edges.fromId)}${peerToEndpoints}\n          AND ${qualified(PEER, edges.deletedAt)} IS NULL${peerActiveOnly}\n          AND ${qualified(PEER, edges.id)} <> ${qualified(relation, edges.id)}\n      )\n  `;\n}\n\n/**\n * The ids live under BOTH kinds of one declared disjoint pair.\n *\n * The nodes relation, not the claim relation, for the same reason as the edge\n * families: a pre-upgrade overlap holds no disjointness claim. `INTERSECT`\n * rather than a self-join so the statement says what it means; one statement\n * per declared pair bounds the cost by the declaration, not by graph size.\n */\nexport function buildDisjointOverlapAudit(\n  tables: Tables,\n  graphId: string,\n  kinds: readonly [string, string],\n): SQL {\n  const { nodes } = tables;\n  const relation = getTableName(nodes);\n  const liveIdsOfKind = (kind: string): SQL => sql`\n    SELECT ${quotedColumn(nodes.id)} as node_id\n    FROM ${nodes}\n    WHERE ${qualified(relation, nodes.graphId)} = ${graphId}\n      AND ${qualified(relation, nodes.kind)} = ${kind}\n      AND ${qualified(relation, nodes.deletedAt)} IS NULL\n  `;\n  return sql`${liveIdsOfKind(kinds[0])} INTERSECT ${liveIdsOfKind(kinds[1])}`;\n}\n","import { getTableName, type SQL, sql } from \"drizzle-orm\";\n\nimport {\n  type ConstrainedCardinality,\n  EDGE_CARDINALITY_SPECS,\n  edgeCardinalityClaimTarget,\n  type EdgeCardinalitySpec,\n} from \"../../../store/claims/edge-claims\";\nimport { resolveStampedValidityLowerBound } from \"../../../utils/date\";\nimport type {\n  ClaimEdgeCardinalityParams,\n  InsertEdgeParams,\n  PurgeEdgeClaimsParams,\n  SchemaWriteFenceParams,\n} from \"../../types\";\nimport {\n  castBoundValueForColumn,\n  edgeColumnList,\n  quotedColumn,\n  quotedTableName,\n  sqlNull,\n  type Tables,\n} from \"./shared\";\n\n/**\n * Qualifies a column with its relation, the one rendering both dialects read\n * identically. The claim statements name TWO relations (the claim rows and the\n * edges their holders are), so a bare column name would be ambiguous in the\n * takeover statement's correlated subquery.\n */\nfunction qualified(tableName: string, column: Readonly<{ name: string }>): SQL {\n  return sql.raw(`\"${tableName}\".\"${column.name}\"`);\n}\n\nfunction qualifiedAlias(\n  alias: string,\n  column: Readonly<{ name: string }>,\n): SQL {\n  return sql.raw(`\"${alias}\".\"${column.name.replaceAll('\"', '\"\"')}\"`);\n}\n\n/**\n * WHERE a claim statement reads the per-edge values its predicates compare\n * against.\n *\n * A single-row statement binds them as parameters; a batch statement reads\n * them as columns of the `proposed` relation it drives from. Every claim\n * predicate below is rendered from this record and nothing else, so the two\n * families cannot decide an axis differently — the batch path is a change of\n * where the values come from, never of what they mean.\n */\ntype ClaimValueSource = Readonly<{\n  graphId: SQL;\n  edgeId: SQL;\n  edgeKind: SQL;\n  fromKind: SQL;\n  fromId: SQL;\n  toKind: SQL;\n  toId: SQL;\n}>;\n\nfunction boundClaimValues(params: ClaimEdgeCardinalityParams): ClaimValueSource {\n  return {\n    graphId: sql`${params.graphId}`,\n    edgeId: sql`${params.edgeId}`,\n    edgeKind: sql`${params.edgeKind}`,\n    fromKind: sql`${params.fromKind}`,\n    fromId: sql`${params.fromId}`,\n    toKind: sql`${params.toKind}`,\n    toId: sql`${params.toId}`,\n  };\n}\n\n/**\n * The relation a batch claim statement drives from: one row per proposed edge,\n * carrying its axis, its key, and every value the predicates compare against.\n *\n * This is the whole point of the batch shape. Spelling one predicate arm per\n * proposed row instead produces a statement whose executor state — two\n * `EXISTS` and one `NOT EXISTS` subplan per arm — grows with the chunk, so a\n * chunk the bind budget permits takes minutes and gigabytes and runs long\n * stretches without reaching a cancellation check. Driving from a relation\n * gives the planner ONE plan whose per-row work is an index probe.\n */\nconst PROPOSED_RELATION = \"proposed\";\n\nconst PROPOSED_COLUMNS = {\n  graphId: \"graph_id\",\n  axis: \"axis\",\n  key: \"key\",\n  edgeId: \"edge_id\",\n  edgeKind: \"edge_kind\",\n  fromKind: \"from_kind\",\n  fromId: \"from_id\",\n  toKind: \"to_kind\",\n  toId: \"to_id\",\n} as const;\n\ntype ProposedColumn = keyof typeof PROPOSED_COLUMNS;\n\nconst PROPOSED_RELATION_REF: SQL = sql.raw(`\"${PROPOSED_RELATION}\"`);\n\nconst PROPOSED_COLUMN_ORDER = [\n  \"graphId\",\n  \"axis\",\n  \"key\",\n  \"edgeId\",\n  \"edgeKind\",\n  \"fromKind\",\n  \"fromId\",\n  \"toKind\",\n  \"toId\",\n] as const satisfies readonly ProposedColumn[];\n\n/**\n * How many bind parameters one proposed row costs. Read by the caller that\n * chunks a claim batch against the backend's bind budget; asserted against the\n * rendered statements by `tests/atomic-edge-claim-relation.test.ts` so the two\n * cannot drift.\n */\nexport const ATOMIC_EDGE_CLAIM_PROPOSED_COLUMN_COUNT =\n  PROPOSED_COLUMN_ORDER.length;\n\nfunction proposedValue(column: ProposedColumn): SQL {\n  return qualifiedAlias(PROPOSED_RELATION, { name: PROPOSED_COLUMNS[column] });\n}\n\nconst PROPOSED_CLAIM_VALUES: ClaimValueSource = {\n  graphId: proposedValue(\"graphId\"),\n  edgeId: proposedValue(\"edgeId\"),\n  edgeKind: proposedValue(\"edgeKind\"),\n  fromKind: proposedValue(\"fromKind\"),\n  fromId: proposedValue(\"fromId\"),\n  toKind: proposedValue(\"toKind\"),\n  toId: proposedValue(\"toId\"),\n};\n\n/**\n * The column each proposed value is CAST to. PostgreSQL resolves a `VALUES`\n * relation's column types from its literals, and a bound parameter carries\n * none, so an uncast relation would compare `unknown` against a stored column\n * and lose every index probe this shape exists to gain.\n */\nfunction proposedColumnTypeSources(\n  tables: Tables,\n): Readonly<Record<ProposedColumn, Readonly<{ getSQLType: () => string }>>> {\n  const { edgeClaims, edges } = tables;\n  return {\n    graphId: edgeClaims.graphId,\n    axis: edgeClaims.axis,\n    key: edgeClaims.key,\n    edgeId: edgeClaims.edgeId,\n    edgeKind: edges.kind,\n    fromKind: edges.fromKind,\n    fromId: edges.fromId,\n    toKind: edges.toKind,\n    toId: edges.toId,\n  };\n}\n\nfunction proposedRelationCte(\n  tables: Tables,\n  entries: readonly ClaimEdgeCardinalityParams[],\n): SQL {\n  const columnTypes = proposedColumnTypeSources(tables);\n  const header = sql.raw(\n    PROPOSED_COLUMN_ORDER.map(\n      (column) => `\"${PROPOSED_COLUMNS[column]}\"`,\n    ).join(\", \"),\n  );\n  const rows = entries.map((entry) => {\n    const target = edgeCardinalityClaimTarget(entry);\n    const values: Readonly<Record<ProposedColumn, string>> = {\n      graphId: entry.graphId,\n      axis: target.axis,\n      key: target.key,\n      edgeId: entry.edgeId,\n      edgeKind: entry.edgeKind,\n      fromKind: entry.fromKind,\n      fromId: entry.fromId,\n      toKind: entry.toKind,\n      toId: entry.toId,\n    };\n    return sql`(${sql.join(\n      PROPOSED_COLUMN_ORDER.map((column) =>\n        castBoundValueForColumn(columnTypes[column], values[column]),\n      ),\n      sql`, `,\n    )})`;\n  });\n  return sql`\n    ${PROPOSED_RELATION_REF} (${header}) AS (\n      VALUES ${sql.join(rows, sql`, `)}\n    )\n  `;\n}\n\n/**\n * Splits a chunk into the groups that can share one statement.\n *\n * The claim predicates are shaped by {@link EdgeCardinalitySpec}: which\n * endpoints the axis key covers, and what a holder must still be. Those are\n * predicate SHAPE, not values, so they cannot ride in the `proposed` relation\n * without becoming OR-guarded terms the planner can no longer seek on — which\n * is the cost this rewrite exists to remove. One statement per distinct\n * cardinality keeps every term index-seekable; a chunk of one edge kind, the\n * ordinary case, still renders exactly one statement.\n *\n * First-appearance order, so a rendered program is deterministic.\n */\nfunction groupEntriesByCardinality(\n  entries: readonly ClaimEdgeCardinalityParams[],\n): readonly (readonly ClaimEdgeCardinalityParams[])[] {\n  const groups = new Map<ConstrainedCardinality, ClaimEdgeCardinalityParams[]>();\n  for (const entry of entries) {\n    const group = groups.get(entry.cardinality);\n    if (group === undefined) groups.set(entry.cardinality, [entry]);\n    else group.push(entry);\n  }\n  return [...groups.values()];\n}\n\nfunction specOf(\n  entries: readonly ClaimEdgeCardinalityParams[],\n): EdgeCardinalitySpec {\n  const [first] = entries;\n  if (first === undefined) {\n    throw new TypeError(\"A cardinality group is never empty.\");\n  }\n  return EDGE_CARDINALITY_SPECS[first.cardinality];\n}\n\n/**\n * The live entity predicate a claim guards, excluding the proposed holder.\n * Both the guarded lock and guarded takeover use this exact fragment so the\n * fast path cannot disagree about what constitutes a claimless incumbent.\n */\nfunction competingLiveEdgePredicate(\n  tables: Tables,\n  values: ClaimValueSource,\n  spec: EdgeCardinalitySpec,\n): SQL {\n  const { edges } = tables;\n  const edgesName = getTableName(edges);\n  const toEndpointTerms =\n    spec.keyShape === \"fromAndTo\" ?\n      sql` AND ${qualified(edgesName, edges.toKind)} = ${values.toKind} AND ${qualified(edgesName, edges.toId)} = ${values.toId}`\n    : sql``;\n  const activeTerm =\n    spec.holderLiveness === \"liveAndActive\" ?\n      sql` AND ${qualified(edgesName, edges.validTo)} IS NULL`\n    : sql``;\n\n  return sql`\n    ${qualified(edgesName, edges.graphId)} = ${values.graphId}\n      AND ${qualified(edgesName, edges.id)} <> ${values.edgeId}\n      AND ${qualified(edgesName, edges.deletedAt)} IS NULL\n      AND ${qualified(edgesName, edges.kind)} = ${values.edgeKind}\n      AND ${qualified(edgesName, edges.fromKind)} = ${values.fromKind}\n      AND ${qualified(edgesName, edges.fromId)} = ${values.fromId}${toEndpointTerms}${activeTerm}\n  `;\n}\n\nfunction proposedEndpointsLivePredicate(\n  tables: Tables,\n  values: ClaimValueSource,\n): SQL {\n  const { nodes } = tables;\n  return sql`\n    EXISTS (\n      SELECT 1 FROM ${nodes} AS \"from_node\"\n      WHERE ${qualifiedAlias(\"from_node\", nodes.graphId)} = ${values.graphId}\n        AND ${qualifiedAlias(\"from_node\", nodes.kind)} = ${values.fromKind}\n        AND ${qualifiedAlias(\"from_node\", nodes.id)} = ${values.fromId}\n        AND ${qualifiedAlias(\"from_node\", nodes.deletedAt)} IS NULL\n    )\n    AND EXISTS (\n      SELECT 1 FROM ${nodes} AS \"to_node\"\n      WHERE ${qualifiedAlias(\"to_node\", nodes.graphId)} = ${values.graphId}\n        AND ${qualifiedAlias(\"to_node\", nodes.kind)} = ${values.toKind}\n        AND ${qualifiedAlias(\"to_node\", nodes.id)} = ${values.toId}\n        AND ${qualifiedAlias(\"to_node\", nodes.deletedAt)} IS NULL\n    )\n  `;\n}\n\nfunction schemaFenceCte(\n  tables: Tables,\n  schemaFence: SchemaWriteFenceParams,\n  schemaLockClause: SQL,\n): SQL {\n  const { schemaVersions } = tables;\n  return sql`\n    \"schema_fence\" AS (\n      SELECT ${schemaVersions.version}\n      FROM ${schemaVersions}\n      WHERE ${schemaVersions.graphId} = ${schemaFence.graphId}\n        AND ${schemaVersions.version} = ${schemaFence.expectedVersion}\n        AND ${schemaVersions.isActive} = TRUE\n      ${schemaLockClause}\n    )\n  `;\n}\n\n/**\n * Whether the edge a claim row NAMES is still an edge that claim describes.\n *\n * Correlated to the claim relation, not to a bound id: a claim is stale\n * exactly when its recorded holder no longer satisfies this, which is what\n * makes an abandoned claim self-healing without any release path having run.\n */\nfunction recordedClaimHolderIsLivePredicate(\n  tables: Tables,\n  values: ClaimValueSource,\n  spec: EdgeCardinalitySpec,\n): SQL {\n  const { edgeClaims, edges } = tables;\n  const claimsName = getTableName(edgeClaims);\n  const edgesName = getTableName(edges);\n  const toEndpointTerms =\n    spec.keyShape === \"fromAndTo\" ?\n      sql` AND ${qualified(edgesName, edges.toKind)} = ${values.toKind} AND ${qualified(edgesName, edges.toId)} = ${values.toId}`\n    : sql``;\n  const activeTerm =\n    spec.holderLiveness === \"liveAndActive\" ?\n      sql` AND ${qualified(edgesName, edges.validTo)} IS NULL`\n    : sql``;\n  return sql`\n    ${qualified(edgesName, edges.graphId)} = ${qualified(claimsName, edgeClaims.graphId)}\n      AND ${qualified(edgesName, edges.id)} = ${qualified(claimsName, edgeClaims.edgeId)}\n      AND ${qualified(edgesName, edges.deletedAt)} IS NULL\n      AND ${qualified(edgesName, edges.kind)} = ${values.edgeKind}\n      AND ${qualified(edgesName, edges.fromKind)} = ${values.fromKind}\n      AND ${qualified(edgesName, edges.fromId)} = ${values.fromId}${toEndpointTerms}${activeTerm}\n  `;\n}\n\n/**\n * Removes stale foreign holders before the guarded edge rows are inserted.\n * The schema and endpoint gates ensure a stale fence remains a side-effect-free\n * no-op; a later edge refusal rolls this mutation back with the whole program.\n *\n * One statement per cardinality group; see {@link groupEntriesByCardinality}.\n *\n * The `stale` CTE names its projection distinctly (`stale_graph_id`, …): the\n * row-value comparison the DELETE ends with is against the target relation's\n * OWN columns, whatever a custom table calls them, and must not resolve to the\n * CTE's.\n */\nexport function buildDeleteStaleAtomicEdgeClaims(\n  tables: Tables,\n  entries: readonly ClaimEdgeCardinalityParams[],\n  schemaFence: SchemaWriteFenceParams,\n  schemaLockClause: SQL,\n): readonly SQL[] {\n  const { edgeClaims, edges } = tables;\n  const claimsName = getTableName(edgeClaims);\n  const values = PROPOSED_CLAIM_VALUES;\n  return groupEntriesByCardinality(entries).map((group) => {\n    const spec = specOf(group);\n    return sql`\n      WITH ${schemaFenceCte(tables, schemaFence, schemaLockClause)},\n      ${proposedRelationCte(tables, group)},\n      \"stale\" AS (\n        SELECT\n          ${qualified(claimsName, edgeClaims.graphId)} AS \"stale_graph_id\",\n          ${qualified(claimsName, edgeClaims.axis)} AS \"stale_axis\",\n          ${qualified(claimsName, edgeClaims.key)} AS \"stale_key\"\n        FROM ${edgeClaims}\n        JOIN ${PROPOSED_RELATION_REF}\n          ON ${qualified(claimsName, edgeClaims.graphId)} = ${values.graphId}\n          AND ${qualified(claimsName, edgeClaims.axis)} = ${proposedValue(\"axis\")}\n          AND ${qualified(claimsName, edgeClaims.key)} = ${proposedValue(\"key\")}\n        WHERE ${qualified(claimsName, edgeClaims.edgeId)} <> ${values.edgeId}\n          AND EXISTS (SELECT 1 FROM \"schema_fence\")\n          AND ${proposedEndpointsLivePredicate(tables, values)}\n          AND NOT EXISTS (\n            SELECT 1 FROM ${edges}\n            WHERE ${recordedClaimHolderIsLivePredicate(tables, values, spec)}\n          )\n      )\n      DELETE FROM ${edgeClaims}\n      WHERE (\n        ${quotedColumn(edgeClaims.graphId)},\n        ${quotedColumn(edgeClaims.axis)},\n        ${quotedColumn(edgeClaims.key)}\n      ) IN (SELECT \"stale_graph_id\", \"stale_axis\", \"stale_key\" FROM \"stale\")\n    `;\n  });\n}\n\n/**\n * Acquires every still-unowned axis before inserting the guarded edge rows.\n *\n * One statement per cardinality group; see {@link groupEntriesByCardinality}.\n */\nexport function buildAcquireAtomicEdgeClaims(\n  tables: Tables,\n  entries: readonly ClaimEdgeCardinalityParams[],\n  timestamp: string,\n  schemaFence: SchemaWriteFenceParams,\n  schemaLockClause: SQL,\n): readonly SQL[] {\n  const { edgeClaims, edges } = tables;\n  const columns = sql.raw(\n    `\"${edgeClaims.graphId.name}\", \"${edgeClaims.axis.name}\", \"${edgeClaims.key.name}\", \"${edgeClaims.edgeId.name}\", \"${edgeClaims.updatedAt.name}\"`,\n  );\n  const conflictColumns = sql.raw(\n    `\"${edgeClaims.graphId.name}\", \"${edgeClaims.axis.name}\", \"${edgeClaims.key.name}\"`,\n  );\n  const values = PROPOSED_CLAIM_VALUES;\n  return groupEntriesByCardinality(entries).map((group) => {\n    const spec = specOf(group);\n    return sql`\n      WITH ${schemaFenceCte(tables, schemaFence, schemaLockClause)},\n      ${proposedRelationCte(tables, group)}\n      INSERT INTO ${edgeClaims} (${columns})\n      SELECT\n        ${values.graphId},\n        ${proposedValue(\"axis\")},\n        ${proposedValue(\"key\")},\n        ${values.edgeId},\n        ${castBoundValueForColumn(edgeClaims.updatedAt, timestamp)}\n      FROM \"schema_fence\" CROSS JOIN ${PROPOSED_RELATION_REF}\n      WHERE ${proposedEndpointsLivePredicate(tables, values)}\n        AND NOT EXISTS (\n          SELECT 1 FROM ${edges}\n          WHERE ${competingLiveEdgePredicate(tables, values, spec)}\n        )\n      ON CONFLICT (${conflictColumns}) DO NOTHING\n    `;\n  });\n}\n\n/**\n * Aborts the atomic transport when any proposed edge does not own its declared\n * axis. The NULL axis is an internal sentinel classified at the backend seam;\n * the surrounding native transaction rolls the earlier claim mutations back.\n *\n * The projection aliases name the target columns. INSERT maps positionally and\n * ignores them, but they are what makes this statement identifiable as the\n * refusal leg in a rendered program — the backend tests discriminate the three\n * claim phases by them.\n *\n * One statement per cardinality group; see {@link groupEntriesByCardinality}.\n */\nexport function buildAssertAtomicEdgeClaimsOwned(\n  tables: Tables,\n  entries: readonly ClaimEdgeCardinalityParams[],\n  timestamp: string,\n  schemaFence: SchemaWriteFenceParams,\n  schemaLockClause: SQL,\n): readonly SQL[] {\n  const { edgeClaims } = tables;\n  const claimsName = getTableName(edgeClaims);\n  const columns = sql.raw(\n    `\"${edgeClaims.graphId.name}\", \"${edgeClaims.axis.name}\", \"${edgeClaims.key.name}\", \"${edgeClaims.edgeId.name}\", \"${edgeClaims.updatedAt.name}\"`,\n  );\n  const values = PROPOSED_CLAIM_VALUES;\n  return groupEntriesByCardinality(entries).map(\n    (group) => sql`\n      WITH ${schemaFenceCte(tables, schemaFence, schemaLockClause)},\n      ${proposedRelationCte(tables, group)}\n      INSERT INTO ${edgeClaims} (${columns})\n      SELECT\n        ${values.graphId} AS graph_id,\n        ${castBoundValueForColumn(edgeClaims.axis, sql.raw(\"NULL\"))} AS axis,\n        ${proposedValue(\"key\")} AS key,\n        ${values.edgeId} AS edge_id,\n        ${castBoundValueForColumn(edgeClaims.updatedAt, timestamp)} AS updated_at\n      FROM \"schema_fence\" CROSS JOIN ${PROPOSED_RELATION_REF}\n      WHERE ${proposedEndpointsLivePredicate(tables, values)}\n        AND NOT EXISTS (\n          SELECT 1 FROM ${edgeClaims}\n          WHERE ${qualified(claimsName, edgeClaims.graphId)} = ${values.graphId}\n            AND ${qualified(claimsName, edgeClaims.axis)} = ${proposedValue(\"axis\")}\n            AND ${qualified(claimsName, edgeClaims.key)} = ${proposedValue(\"key\")}\n            AND ${qualified(claimsName, edgeClaims.edgeId)} = ${values.edgeId}\n        )\n      LIMIT 1\n    `,\n  );\n}\n\n/**\n * Statement 1 — create-or-lock, decision-free.\n *\n * Its only job is to make the row exist, take its row lock, and report the\n * COMMITTED holder. The `DO UPDATE SET updated_at = <existing>.updated_at` is a\n * deliberate no-op write: it is what makes a conflicting row lock and report\n * itself through RETURNING, which a bare `DO NOTHING` would not. This is the\n * same statement shape `insertUnique` already uses, through the same\n * existing-row qualification, so it introduces no new dialect surface.\n *\n * A returned holder equal to the proposed edge means this writer owns the axis\n * and is done. Any other holder is decided by {@link buildTakeOverEdgeClaim},\n * against a FRESH snapshot — deciding inside this statement would read the\n * pre-lock snapshot of the edges relation and accept two concurrent writers.\n */\nexport function buildLockEdgeClaims(\n  tables: Tables,\n  entries: readonly ClaimEdgeCardinalityParams[],\n  timestamp: string,\n): SQL {\n  const { edgeClaims } = tables;\n  const claimsName = getTableName(edgeClaims);\n\n  const columns = sql.raw(\n    `\"${edgeClaims.graphId.name}\", \"${edgeClaims.axis.name}\", \"${edgeClaims.key.name}\", \"${edgeClaims.edgeId.name}\", \"${edgeClaims.updatedAt.name}\"`,\n  );\n  const conflictColumns = sql.raw(\n    `\"${edgeClaims.graphId.name}\", \"${edgeClaims.axis.name}\", \"${edgeClaims.key.name}\"`,\n  );\n  const valueRows = sql.join(\n    entries.map((entry) => {\n      const target = edgeCardinalityClaimTarget(entry);\n      return sql`(${entry.graphId}, ${target.axis}, ${target.key}, ${entry.edgeId}, ${timestamp})`;\n    }),\n    sql`, `,\n  );\n\n  return sql`\n    INSERT INTO ${edgeClaims} (${columns})\n    VALUES ${valueRows}\n    ON CONFLICT (${conflictColumns})\n    DO UPDATE SET ${quotedColumn(edgeClaims.updatedAt)} = ${qualified(claimsName, edgeClaims.updatedAt)}\n    RETURNING\n      ${quotedColumn(edgeClaims.axis)} as axis,\n      ${quotedColumn(edgeClaims.key)} as key,\n      ${quotedColumn(edgeClaims.edgeId)} as holder_edge_id\n  `;\n}\n\n/**\n * Single-row create-or-lock with an entity-relation guard in its RETURNING\n * projection. The upsert first establishes the cardinality-axis row lock; its\n * returned holder resolves concurrent claimants, while `has_incumbent`\n * catches rows imported or written before the claim relation existed.\n *\n * A matching row with the proposed id is excluded. That is the legitimate\n * resurrection/reopen case: the same edge is reclaiming the same axis.\n * PostgreSQL's READ COMMITTED snapshot does not refresh this `EXISTS` after an\n * `ON CONFLICT` wait. Managed constrained writes consume the probe-folding\n * contract only while holding TypeGraph's graph advisory lock, so committed\n * preexisting rows are visible and peers cannot publish a claimless row during\n * this statement. Claim-aware writers outside that lock still serialize on the\n * returned claim holder. A direct writer that bypasses both TypeGraph's lock\n * and its claim relation is outside the enforceable cardinality contract.\n */\nexport function buildLockEdgeClaimGuarded(\n  tables: Tables,\n  params: ClaimEdgeCardinalityParams,\n  timestamp: string,\n): SQL {\n  const { edgeClaims, edges } = tables;\n  const claimsName = getTableName(edgeClaims);\n  const target = edgeCardinalityClaimTarget(params);\n\n  return sql`\n    INSERT INTO ${edgeClaims} (\n      ${sql.identifier(edgeClaims.graphId.name)},\n      ${sql.identifier(edgeClaims.axis.name)},\n      ${sql.identifier(edgeClaims.key.name)},\n      ${sql.identifier(edgeClaims.edgeId.name)},\n      ${sql.identifier(edgeClaims.updatedAt.name)}\n    ) VALUES (\n      ${params.graphId}, ${target.axis}, ${target.key}, ${params.edgeId}, ${timestamp}\n    )\n    ON CONFLICT (\n      ${sql.identifier(edgeClaims.graphId.name)},\n      ${sql.identifier(edgeClaims.axis.name)},\n      ${sql.identifier(edgeClaims.key.name)}\n    ) DO UPDATE SET\n      ${quotedColumn(edgeClaims.updatedAt)} = ${qualified(claimsName, edgeClaims.updatedAt)}\n    RETURNING\n      ${quotedColumn(edgeClaims.edgeId)} AS holder_edge_id,\n      EXISTS (\n        SELECT 1 FROM ${edges}\n        WHERE ${competingLiveEdgePredicate(tables, boundClaimValues(params), EDGE_CARDINALITY_SPECS[params.cardinality])}\n      ) AS has_incumbent\n  `;\n}\n\n/**\n * Endpoint-dependent constrained edge write.\n *\n * The endpoint CTE is deliberately the dependency of the claim INSERT. An\n * unavailable endpoint therefore produces no claim row and no claim refresh.\n * A foreign claim is reported, not taken over: PostgreSQL data-modifying CTEs\n * share one snapshot, so stale-holder takeover remains a separate fresh\n * statement in the caller.\n */\nexport function buildInsertEdgeIfEndpointsLiveWithCardinalityClaim(\n  tables: Tables,\n  params: InsertEdgeParams,\n  claim: ClaimEdgeCardinalityParams,\n  timestamp: string,\n): SQL {\n  const { edgeClaims, edges, nodes } = tables;\n  const claimsName = getTableName(edgeClaims);\n  const nodeTable = quotedTableName(getTableName(nodes));\n  const propsJson = JSON.stringify(params.props);\n  const columns = edgeColumnList(edges);\n  const target = edgeCardinalityClaimTarget(claim);\n  const from = (column: Readonly<{ name: string }>): SQL =>\n    qualifiedAlias(\"from_node\", column);\n  const to = (column: Readonly<{ name: string }>): SQL =>\n    qualifiedAlias(\"to_node\", column);\n\n  return sql`\n    WITH live_endpoints AS MATERIALIZED (\n      SELECT 1 AS present\n      FROM ${nodeTable} AS \"from_node\"\n      CROSS JOIN ${nodeTable} AS \"to_node\"\n      WHERE ${from(nodes.graphId)} = ${params.graphId}\n        AND ${from(nodes.kind)} = ${params.fromKind}\n        AND ${from(nodes.id)} = ${params.fromId}\n        AND ${from(nodes.deletedAt)} IS NULL\n        AND ${to(nodes.graphId)} = ${params.graphId}\n        AND ${to(nodes.kind)} = ${params.toKind}\n        AND ${to(nodes.id)} = ${params.toId}\n        AND ${to(nodes.deletedAt)} IS NULL\n    ),\n    claimable_axis AS MATERIALIZED (\n      SELECT present\n      FROM live_endpoints\n      WHERE NOT EXISTS (\n        SELECT 1 FROM ${edges}\n        WHERE ${competingLiveEdgePredicate(tables, boundClaimValues(claim), EDGE_CARDINALITY_SPECS[claim.cardinality])}\n      )\n    ),\n    claim AS (\n      INSERT INTO ${edgeClaims} (\n        ${sql.identifier(edgeClaims.graphId.name)},\n        ${sql.identifier(edgeClaims.axis.name)},\n        ${sql.identifier(edgeClaims.key.name)},\n        ${sql.identifier(edgeClaims.edgeId.name)},\n        ${sql.identifier(edgeClaims.updatedAt.name)}\n      )\n      SELECT\n        ${claim.graphId}, ${target.axis}, ${target.key},\n        ${claim.edgeId}, ${timestamp}\n      FROM claimable_axis\n      ON CONFLICT (\n        ${sql.identifier(edgeClaims.graphId.name)},\n        ${sql.identifier(edgeClaims.axis.name)},\n        ${sql.identifier(edgeClaims.key.name)}\n      ) DO UPDATE SET\n        ${quotedColumn(edgeClaims.updatedAt)} = ${qualified(claimsName, edgeClaims.updatedAt)}\n      RETURNING\n        ${quotedColumn(edgeClaims.edgeId)} AS holder_edge_id\n    ),\n    inserted AS (\n      INSERT INTO ${edges} (${columns})\n      SELECT\n        ${params.graphId}, ${params.id}, ${params.kind},\n        ${params.fromKind}, ${params.fromId}, ${params.toKind}, ${params.toId},\n        ${propsJson},\n        ${sqlNull(params.matchIdentity?.name)},\n        ${sqlNull(params.matchIdentity?.key)},\n        ${sqlNull(resolveStampedValidityLowerBound(params.validFrom, params.validTo, timestamp))},\n        ${sqlNull(params.validTo)}, ${timestamp}, ${timestamp}\n      FROM live_endpoints\n      CROSS JOIN claim\n      WHERE claim.holder_edge_id = ${claim.edgeId}\n      RETURNING *\n    )\n    SELECT * FROM inserted\n  `;\n}\n\n/**\n * Statement 2 — conditional takeover, on a fresh snapshot.\n *\n * Issued only when statement 1 reported a different holder. It succeeds exactly\n * when that holder is no longer an edge this axis and key describe, which is\n * what makes an abandoned claim self-healing: no release path has to have run\n * for a dead holder's axis to be reusable.\n *\n * **The holder is identified by more than its id.** Edge ids are\n * caller-suppliable and graph-unique, so a hard-deleted id can be reused by a\n * DIFFERENT edge; a claim naming that id would otherwise read as a live holder\n * and block its axis forever. The extra terms are exactly the components the\n * axis and key were built from — and exactly the columns `countEdgesFrom` /\n * `edgeExistsBetween` filter on — so the fence's liveness predicate and the\n * probe's read the same shape.\n *\n * The `valid_to IS NULL` term and the to-endpoint terms are not spelled here:\n * they are read from {@link EDGE_CARDINALITY_SPECS}, the same table the\n * TypeScript probe reads.\n */\nexport function buildTakeOverEdgeClaim(\n  tables: Tables,\n  params: ClaimEdgeCardinalityParams,\n  timestamp: string,\n): SQL {\n  const { edgeClaims, edges } = tables;\n  const claimsName = getTableName(edgeClaims);\n  const spec = EDGE_CARDINALITY_SPECS[params.cardinality];\n  const target = edgeCardinalityClaimTarget(params);\n\n  return sql`\n    UPDATE ${edgeClaims}\n    SET ${quotedColumn(edgeClaims.edgeId)} = ${params.edgeId},\n        ${quotedColumn(edgeClaims.updatedAt)} = ${timestamp}\n    WHERE ${qualified(claimsName, edgeClaims.graphId)} = ${params.graphId}\n      AND ${qualified(claimsName, edgeClaims.axis)} = ${target.axis}\n      AND ${qualified(claimsName, edgeClaims.key)} = ${target.key}\n      AND ${qualified(claimsName, edgeClaims.edgeId)} <> ${params.edgeId}\n      AND NOT EXISTS (\n        SELECT 1 FROM ${edges}\n        WHERE ${recordedClaimHolderIsLivePredicate(tables, boundClaimValues(params), spec)}\n      )\n    RETURNING ${quotedColumn(edgeClaims.edgeId)} as holder_edge_id\n  `;\n}\n\n/**\n * Guarded takeover: a stale claim can move only when the whole declared axis,\n * not merely the recorded holder id, contains no competing live edge. This is\n * what makes takeover safe for legacy/imported rows that have no sidecar.\n */\nexport function buildTakeOverEdgeClaimGuarded(\n  tables: Tables,\n  params: ClaimEdgeCardinalityParams,\n  timestamp: string,\n): SQL {\n  const { edgeClaims, edges } = tables;\n  const claimsName = getTableName(edgeClaims);\n  const target = edgeCardinalityClaimTarget(params);\n\n  return sql`\n    UPDATE ${edgeClaims}\n    SET ${quotedColumn(edgeClaims.edgeId)} = ${params.edgeId},\n        ${quotedColumn(edgeClaims.updatedAt)} = ${timestamp}\n    WHERE ${qualified(claimsName, edgeClaims.graphId)} = ${params.graphId}\n      AND ${qualified(claimsName, edgeClaims.axis)} = ${target.axis}\n      AND ${qualified(claimsName, edgeClaims.key)} = ${target.key}\n      AND ${qualified(claimsName, edgeClaims.edgeId)} <> ${params.edgeId}\n      AND NOT EXISTS (\n        SELECT 1 FROM ${edges}\n        WHERE ${competingLiveEdgePredicate(tables, boundClaimValues(params), EDGE_CARDINALITY_SPECS[params.cardinality])}\n      )\n    RETURNING ${quotedColumn(edgeClaims.edgeId)} as holder_edge_id\n  `;\n}\n\n/**\n * Housekeeping: drops the claims named edges hold.\n *\n * A hard delete or a `clearGraph` removes the edges a claim's liveness\n * predicate reads, so the claim would already be takeable; this only stops the\n * relation from growing without bound.\n */\nexport function buildPurgeEdgeClaims(\n  tables: Tables,\n  params: PurgeEdgeClaimsParams,\n): SQL {\n  const { edgeClaims } = tables;\n  return sql`\n    DELETE FROM ${edgeClaims}\n    WHERE ${edgeClaims.graphId} = ${params.graphId}\n      AND ${edgeClaims.edgeId} IN (${sql.join(\n        params.edgeIds.map((edgeId) => sql`${edgeId}`),\n        sql`, `,\n      )})\n  `;\n}\n\n// Re-exported from their new owner. Resolved only by\n// `tests/claim-owner-sql-golden.test.ts` — that import is what keeps knip\n// from reporting these two re-exports as unused.\nexport {\n  buildHardDeleteEdgeClaimsByEdgeKind,\n  buildHardDeleteEdgeClaimsByNodeKind,\n} from \"../../../store/claims/removal-sql\";\n","import { getTableName, type SQL, sql } from \"drizzle-orm\";\n\nimport { CompilerInvariantError } from \"../../../errors\";\nimport {\n  resolveStampedValidityLowerBound,\n  resolveStatedValidityLowerBound,\n} from \"../../../utils/date\";\nimport { requireDefined } from \"../../../utils/presence\";\nimport type {\n  AtomicEdgeConvergenceEntry,\n  AtomicEdgeDeleteBatchInput,\n  AtomicEdgeResolvedUpdateEntry,\n} from \"../../capabilities/atomic-mutation-program\";\nimport type {\n  CountEdgesFromParams,\n  DeleteEdgeParams,\n  DeleteEdgesBatchParams,\n  EdgeConvergenceMatch,\n  EdgeExistsBetweenParams,\n  FindEdgesConnectedToParams,\n  HardDeleteEdgeParams,\n  InsertEdgeParams,\n  SchemaWriteFenceParams,\n  UpdateEdgeParams,\n} from \"../../types\";\nimport { rowPropsToJsonText } from \"../../types\";\nimport {\n  castBoundValueForColumn,\n  edgeColumnList,\n  expectedValidFromPredicate,\n  quotedColumn,\n  quotedTableName,\n  sqlNull,\n  type Tables,\n} from \"./shared\";\n\n// EdgeRow follows the public no-null convention, while the SQL predicate's\n// three-state input uses null to mean \"assert the stored column is SQL NULL.\"\n// eslint-disable-next-line unicorn/no-null\nconst EXPECTED_SQL_NULL = null;\n\n/**\n * Inputs for the dialect-specific edge convergence statement.\n *\n * `matchOn` is deliberately a call-level key: it is validated against the\n * edge schema by the store before it reaches this backend seam. The statement\n * still treats absent properties distinctly from JSON `null`, matching the\n * store's own-property comparison.\n */\nexport type ConvergeEdgeCreateParams = Readonly<{\n  params: InsertEdgeParams;\n  match: EdgeConvergenceMatch;\n  timestamp: string;\n  schemaFence?: SchemaWriteFenceParams;\n  schemaLockClause?: SQL;\n}>;\n\nexport type AtomicConvergeEdgesParams = Readonly<{\n  entries: readonly AtomicEdgeConvergenceEntry[];\n  timestamp: string;\n  schemaFence: SchemaWriteFenceParams;\n  schemaLockClause: SQL;\n}>;\n\nfunction qualifiedColumn(\n  alias: string,\n  column: Readonly<{ name: string }>,\n): SQL {\n  return sql.raw(`\"${alias}\".\"${column.name.replaceAll('\"', '\"\"')}\"`);\n}\n\nfunction atomicEdgeCreatePostimage(\n  params: InsertEdgeParams,\n  timestamp: string,\n) {\n  return {\n    graphId: params.graphId,\n    id: params.id,\n    kind: params.kind,\n    fromKind: params.fromKind,\n    fromId: params.fromId,\n    toKind: params.toKind,\n    toId: params.toId,\n    propsJson: JSON.stringify(params.props),\n    matchIdentityName: params.matchIdentity?.name,\n    matchIdentityKey: params.matchIdentity?.key,\n    // The temporal inventory requires the owner and its input on one line.\n    // prettier-ignore\n    storedLowerBound: resolveStampedValidityLowerBound(params.validFrom, params.validTo, timestamp),\n    storedUpperBound: params.validTo,\n    createdAt: timestamp,\n    updatedAt: timestamp,\n  } as const;\n}\n\nfunction atomicEdgeUpdatePostimage(\n  entry: AtomicEdgeResolvedUpdateEntry,\n  timestamp: string,\n) {\n  const existing = entry.existing;\n  return {\n    graphId: existing.graph_id,\n    id: existing.id,\n    kind: existing.kind,\n    fromKind: existing.from_kind,\n    fromId: existing.from_id,\n    toKind: existing.to_kind,\n    toId: existing.to_id,\n    propsJson: JSON.stringify(entry.props),\n    matchIdentityName: existing.match_identity_name,\n    matchIdentityKey: existing.match_identity_key,\n    storedLowerBound: existing.valid_from,\n    storedUpperBound: existing.valid_to,\n    createdAt: existing.created_at,\n    updatedAt: timestamp,\n  } as const;\n}\n\n/**\n * Requires the exact source and target nodes to be live. All endpoint-guarded\n * edge insert statements use this one predicate so their liveness semantics\n * cannot diverge.\n */\nfunction buildLiveEndpointPredicate(\n  nodes: Tables[\"nodes\"],\n  params: InsertEdgeParams,\n): SQL {\n  const from = (column: Readonly<{ name: string }>): SQL =>\n    qualifiedColumn(\"from_node\", column);\n  const to = (column: Readonly<{ name: string }>): SQL =>\n    qualifiedColumn(\"to_node\", column);\n\n  return sql`\n    ${from(nodes.graphId)} = ${params.graphId}\n    AND ${from(nodes.kind)} = ${params.fromKind}\n    AND ${from(nodes.id)} = ${params.fromId}\n    AND ${from(nodes.deletedAt)} IS NULL\n    AND ${to(nodes.graphId)} = ${params.graphId}\n    AND ${to(nodes.kind)} = ${params.toKind}\n    AND ${to(nodes.id)} = ${params.toId}\n    AND ${to(nodes.deletedAt)} IS NULL\n  `;\n}\n\nfunction buildMatchKeyPredicate(\n  propsColumn: SQL,\n  matchOn: readonly string[],\n  matchProps: Record<string, unknown>,\n): SQL {\n  if (matchOn.length === 0) return sql`TRUE`;\n\n  return sql.join(\n    matchOn.map((field) => {\n      const value =\n        Object.prototype.hasOwnProperty.call(matchProps, field) ?\n          matchProps[field]\n        : undefined;\n      if (value === undefined) {\n        return sql`NOT (${propsColumn} ? ${field})`;\n      }\n      return sql`(${propsColumn} -> ${field}) = ${JSON.stringify(value)}::jsonb`;\n    }),\n    sql` AND `,\n  );\n}\n\n/**\n * Builds an INSERT query for an edge.\n * Uses raw column names in the column list (required by SQL syntax).\n *\n * As for nodes, the stored lower bound is decided by\n * {@link resolveStampedValidityLowerBound} against the very `timestamp` this\n * statement binds into `created_at` / `updated_at` — see `buildInsertNode` for\n * why the decision lives in the builder rather than above it.\n */\nexport function buildInsertEdge(\n  tables: Tables,\n  params: InsertEdgeParams,\n  timestamp: string,\n): SQL {\n  const { edges } = tables;\n  const propsJson = JSON.stringify(params.props);\n  const columns = edgeColumnList(edges);\n\n  return sql`\n    INSERT INTO ${edges} (${columns})\n    VALUES (\n      ${params.graphId}, ${params.id}, ${params.kind},\n      ${params.fromKind}, ${params.fromId}, ${params.toKind}, ${params.toId},\n      ${propsJson}, ${sqlNull(params.matchIdentity?.name)}, ${sqlNull(params.matchIdentity?.key)},\n      ${sqlNull(resolveStampedValidityLowerBound(params.validFrom, params.validTo, timestamp))}, ${sqlNull(params.validTo)},\n      ${timestamp}, ${timestamp}\n    )\n    RETURNING *\n  `;\n}\n\n/**\n * Inserts an edge through two live-node predicates, so the usual endpoint\n * validation reads and row INSERT are one database statement on the success\n * path. A missing returned row is deliberately ambiguous: callers must run\n * their normal ordered endpoint diagnostics to preserve which public\n * `EndpointNotFoundError` wins when both endpoints are unavailable.\n *\n * The edge primary key remains an ordinary INSERT constraint. Consequently a\n * duplicate identity still raises the database error that the common backend\n * classifies, rather than being confused with a failed endpoint predicate.\n */\nexport function buildInsertEdgeIfEndpointsLive(\n  tables: Tables,\n  params: InsertEdgeParams,\n  timestamp: string,\n): SQL {\n  const { edges, nodes } = tables;\n  const propsJson = JSON.stringify(params.props);\n  const columns = edgeColumnList(edges);\n  const nodeTable = quotedTableName(getTableName(nodes));\n\n  return sql`\n    INSERT INTO ${edges} (${columns})\n    SELECT\n      ${params.graphId}, ${params.id}, ${params.kind},\n      ${params.fromKind}, ${params.fromId}, ${params.toKind}, ${params.toId},\n      ${propsJson}, ${sqlNull(params.matchIdentity?.name)}, ${sqlNull(params.matchIdentity?.key)},\n      ${sqlNull(resolveStampedValidityLowerBound(params.validFrom, params.validTo, timestamp))}, ${sqlNull(params.validTo)},\n      ${timestamp}, ${timestamp}\n    FROM ${nodeTable} AS \"from_node\"\n    CROSS JOIN ${nodeTable} AS \"to_node\"\n    WHERE ${buildLiveEndpointPredicate(nodes, params)}\n    RETURNING *\n  `;\n}\n\n/**\n * Atomically converges an edge create on its endpoint/match-key identity.\n *\n * The existing-row CTE is materialized so it chooses a live row before a\n * tombstone and is evaluated from the same statement snapshot as the insert.\n * When it is empty, the INSERT ... SELECT validates both endpoints and writes\n * the edge. The discriminator is intentionally returned as an extra column;\n * row mappers ignore it while the command executor can distinguish `found`\n * from `created` without a second round trip.\n *\n * The dialect adapter owns the JSON match predicate, so both bundled SQL\n * engines consume this common statement shape.\n */\nexport function buildConvergeEdgeCreate(\n  tables: Tables,\n  input: ConvergeEdgeCreateParams,\n): SQL {\n  const { edges, nodes } = tables;\n  const { params, match, timestamp } = input;\n  const propsJson = JSON.stringify(params.props);\n  const columns = edgeColumnList(edges);\n  const edgeTable = quotedTableName(getTableName(edges));\n  const nodeTable = quotedTableName(getTableName(nodes));\n  const edgeGraphId = qualifiedColumn(\"candidate\", edges.graphId);\n  const edgeKind = qualifiedColumn(\"candidate\", edges.kind);\n  const edgeFromKind = qualifiedColumn(\"candidate\", edges.fromKind);\n  const edgeFromId = qualifiedColumn(\"candidate\", edges.fromId);\n  const edgeToKind = qualifiedColumn(\"candidate\", edges.toKind);\n  const edgeToId = qualifiedColumn(\"candidate\", edges.toId);\n  const edgeProps = qualifiedColumn(\"candidate\", edges.props);\n  const edgeDeletedAt = qualifiedColumn(\"candidate\", edges.deletedAt);\n  const edgeCreatedAt = qualifiedColumn(\"candidate\", edges.createdAt);\n  const edgeId = qualifiedColumn(\"candidate\", edges.id);\n\n  if (match.kind === \"durable\") {\n    const matchIdentityName = sql.identifier(edges.matchIdentityName.name);\n    const matchIdentityKey = sql.identifier(edges.matchIdentityKey.name);\n    const schemaFenceJoin =\n      input.schemaFence === undefined ?\n        sql``\n      : sql`\n        CROSS JOIN (\n          SELECT ${tables.schemaVersions.version}\n          FROM ${tables.schemaVersions}\n          WHERE ${tables.schemaVersions.graphId} = ${input.schemaFence.graphId}\n            AND ${tables.schemaVersions.version} = ${input.schemaFence.expectedVersion}\n            AND ${tables.schemaVersions.isActive} = TRUE\n          ${input.schemaLockClause ?? sql``}\n        ) AS \"schema_fence\"\n      `;\n    return sql`\n      INSERT INTO ${edges} (${columns})\n      SELECT\n        ${params.graphId}, ${params.id}, ${params.kind},\n        ${params.fromKind}, ${params.fromId}, ${params.toKind}, ${params.toId},\n        ${propsJson}, ${match.identity.name}, ${match.identity.key},\n        ${sqlNull(resolveStampedValidityLowerBound(params.validFrom, params.validTo, timestamp))}, ${sqlNull(params.validTo)},\n        ${timestamp}, ${timestamp}\n      FROM (SELECT 1 AS present) AS \"candidate_write\"\n      ${schemaFenceJoin}\n      WHERE EXISTS (\n        SELECT 1\n        FROM ${nodeTable} AS \"from_node\"\n        CROSS JOIN ${nodeTable} AS \"to_node\"\n        WHERE ${buildLiveEndpointPredicate(nodes, params)}\n      ) OR EXISTS (\n        SELECT 1\n        FROM ${edges} AS \"identity_owner\"\n        WHERE ${qualifiedColumn(\"identity_owner\", edges.graphId)} = ${params.graphId}\n          AND ${qualifiedColumn(\"identity_owner\", edges.kind)} = ${params.kind}\n          AND ${qualifiedColumn(\"identity_owner\", edges.matchIdentityName)} = ${match.identity.name}\n          AND ${qualifiedColumn(\"identity_owner\", edges.matchIdentityKey)} = ${match.identity.key}\n      )\n      ON CONFLICT (${sql.identifier(edges.graphId.name)}, ${sql.identifier(edges.kind.name)}, ${matchIdentityName}, ${matchIdentityKey})\n      DO UPDATE SET ${matchIdentityKey} = excluded.${matchIdentityKey}\n      WHERE ${edges.id} <> ${params.id}\n      RETURNING *, CASE WHEN ${edges.id} = ${params.id} THEN 1 ELSE 0 END AS write_discriminator\n    `;\n  }\n\n  return sql`\n    WITH existing AS MATERIALIZED (\n      SELECT \"candidate\".*, 0::integer AS write_discriminator\n      FROM ${edgeTable} AS \"candidate\"\n      WHERE ${edgeGraphId} = ${params.graphId}\n        AND ${edgeKind} = ${params.kind}\n        AND ${edgeFromKind} = ${params.fromKind}\n        AND ${edgeFromId} = ${params.fromId}\n        AND ${edgeToKind} = ${params.toKind}\n        AND ${edgeToId} = ${params.toId}\n        AND ${buildMatchKeyPredicate(edgeProps, match.matchOn, match.props)}\n      ORDER BY ${edgeDeletedAt} IS NULL DESC, ${edgeCreatedAt} DESC, ${edgeId} DESC\n      LIMIT 1\n    ),\n    inserted AS (\n      INSERT INTO ${edges} (${columns})\n      SELECT\n        ${params.graphId}, ${params.id}, ${params.kind},\n        ${params.fromKind}, ${params.fromId}, ${params.toKind}, ${params.toId},\n        ${propsJson}, ${sqlNull(params.matchIdentity?.name)}, ${sqlNull(params.matchIdentity?.key)},\n        ${sqlNull(resolveStampedValidityLowerBound(params.validFrom, params.validTo, timestamp))}, ${sqlNull(params.validTo)},\n        ${timestamp}, ${timestamp}\n      FROM ${nodeTable} AS \"from_node\"\n      CROSS JOIN ${nodeTable} AS \"to_node\"\n      WHERE NOT EXISTS (SELECT 1 FROM existing)\n        AND ${buildLiveEndpointPredicate(nodes, params)}\n      RETURNING *, 1::integer AS write_discriminator\n    )\n    SELECT * FROM existing\n    UNION ALL\n    SELECT * FROM inserted\n    LIMIT 1\n  `;\n}\n\n/**\n * Builds the closed-program form of durable edge convergence.\n *\n * Unlike the interactive command above, an atomic program cannot turn an\n * empty RETURNING slot into an error after earlier slots have committed.  The\n * input therefore carries an explicit NULL-primary-key sentinel for a stale\n * endpoint, while the identity arbiter uses a NOT NULL created_at sentinel\n * for the impossible same-id conflict.  A conflict with another id is a\n * no-op update and returns that incumbent row. Tombstones are returned\n * unchanged; the paired refusal statement rolls the whole program back so the\n * Store can run its schema-aware resurrection path.\n */\nexport function buildAtomicConvergeEdges(\n  tables: Tables,\n  input: AtomicConvergeEdgesParams,\n): SQL {\n  const { edges, nodes, schemaVersions } = tables;\n  const { entries, timestamp, schemaFence, schemaLockClause } = input;\n  if (\n    entries.length === 0 ||\n    entries.some((entry) => entry.match.kind !== \"durable\")\n  ) {\n    throw new CompilerInvariantError(\n      \"Atomic edge convergence requires at least one durable identity.\",\n    );\n  }\n  const columns = edgeColumnList(edges);\n  const inputColumns = [\n    edges.graphId,\n    edges.id,\n    edges.kind,\n    edges.fromKind,\n    edges.fromId,\n    edges.toKind,\n    edges.toId,\n    edges.props,\n    edges.matchIdentityName,\n    edges.matchIdentityKey,\n    edges.validFrom,\n    edges.validTo,\n    edges.createdAt,\n    edges.updatedAt,\n  ];\n  const inputColumnList = sql.raw(\n    inputColumns\n      .map((column) => `\"${column.name.replaceAll('\"', '\"\"')}\"`)\n      .join(\", \"),\n  );\n  const values = sql.join(\n    entries.map((entry) => {\n      const { params, match } = entry;\n      if (match.kind !== \"durable\") {\n        throw new CompilerInvariantError(\n          \"Atomic edge convergence received a dynamic match key.\",\n        );\n      }\n      return sql`\n        (\n                ${castBoundValueForColumn(edges.graphId, params.graphId)},\n                ${castBoundValueForColumn(edges.id, params.id)},\n                ${castBoundValueForColumn(edges.kind, params.kind)},\n                ${castBoundValueForColumn(edges.fromKind, params.fromKind)},\n                ${castBoundValueForColumn(edges.fromId, params.fromId)},\n                ${castBoundValueForColumn(edges.toKind, params.toKind)},\n                ${castBoundValueForColumn(edges.toId, params.toId)},\n                ${castBoundValueForColumn(edges.props, JSON.stringify(params.props))},\n                ${castBoundValueForColumn(edges.matchIdentityName, match.identity.name)},\n                ${castBoundValueForColumn(edges.matchIdentityKey, match.identity.key)},\n                ${castBoundValueForColumn(edges.validFrom, sqlNull(resolveStampedValidityLowerBound(params.validFrom, params.validTo, timestamp)))},\n                ${castBoundValueForColumn(edges.validTo, sqlNull(params.validTo))},\n                ${castBoundValueForColumn(edges.createdAt, timestamp)},\n                ${castBoundValueForColumn(edges.updatedAt, timestamp)}\n              )\n      `;\n    }),\n    sql`, `,\n  );\n  const inputSelect = sql.join(\n    inputColumns.map((column) =>\n      sql.raw(`\"write_rows\".\"${column.name.replaceAll('\"', '\"\"')}\"`),\n    ),\n    sql`, `,\n  );\n  const sentinelSelect = sql.join(\n    inputColumns.map((column) =>\n      column === edges.id ?\n        castBoundValueForColumn(column, sql.raw(\"NULL\"))\n      : sql.raw(`\"input_rows\".\"${column.name.replaceAll('\"', '\"\"')}\"`),\n    ),\n    sql`, `,\n  );\n  const endpointPredicate = sql`\n    EXISTS (\n      SELECT 1 FROM ${nodes} AS \"from_node\"\n      CROSS JOIN ${nodes} AS \"to_node\"\n      WHERE ${qualifiedColumn(\"from_node\", nodes.graphId)} = ${qualifiedColumn(\"input_rows\", edges.graphId)}\n        AND ${qualifiedColumn(\"from_node\", nodes.kind)} = ${qualifiedColumn(\"input_rows\", edges.fromKind)}\n        AND ${qualifiedColumn(\"from_node\", nodes.id)} = ${qualifiedColumn(\"input_rows\", edges.fromId)}\n        AND ${qualifiedColumn(\"from_node\", nodes.deletedAt)} IS NULL\n        AND ${qualifiedColumn(\"to_node\", nodes.graphId)} = ${qualifiedColumn(\"input_rows\", edges.graphId)}\n        AND ${qualifiedColumn(\"to_node\", nodes.kind)} = ${qualifiedColumn(\"input_rows\", edges.toKind)}\n        AND ${qualifiedColumn(\"to_node\", nodes.id)} = ${qualifiedColumn(\"input_rows\", edges.toId)}\n        AND ${qualifiedColumn(\"to_node\", nodes.deletedAt)} IS NULL\n    )\n  `;\n  const identityOwnerPredicate = sql`\n    EXISTS (\n      SELECT 1\n      FROM ${edges} AS \"identity_owner\"\n      WHERE ${qualifiedColumn(\"identity_owner\", edges.graphId)} = ${qualifiedColumn(\"input_rows\", edges.graphId)}\n        AND ${qualifiedColumn(\"identity_owner\", edges.kind)} = ${qualifiedColumn(\"input_rows\", edges.kind)}\n        AND ${qualifiedColumn(\"identity_owner\", edges.matchIdentityName)} = ${qualifiedColumn(\"input_rows\", edges.matchIdentityName)}\n        AND ${qualifiedColumn(\"identity_owner\", edges.matchIdentityKey)} = ${qualifiedColumn(\"input_rows\", edges.matchIdentityKey)}\n    )\n  `;\n  const fence = sql`\n    SELECT ${schemaVersions.version}\n    FROM ${schemaVersions}\n    WHERE ${schemaVersions.graphId} = ${schemaFence.graphId}\n      AND ${schemaVersions.version} = ${schemaFence.expectedVersion}\n      AND ${schemaVersions.isActive} = TRUE\n    ${schemaLockClause}\n  `;\n  return sql`\n    WITH \"schema_fence\" AS (${fence}),\n    \"input_rows\" (${inputColumnList}) AS (VALUES ${values}),\n    \"valid_rows\" AS (\n      SELECT \"input_rows\".*\n      FROM \"input_rows\"\n      CROSS JOIN \"schema_fence\"\n      WHERE ${endpointPredicate} OR ${identityOwnerPredicate}\n    ),\n    \"invalid_rows\" AS (\n      SELECT \"input_rows\".*\n      FROM \"input_rows\"\n      CROSS JOIN \"schema_fence\"\n      WHERE NOT (${endpointPredicate} OR ${identityOwnerPredicate})\n    ), \"write_rows\" AS (\n      SELECT * FROM \"valid_rows\"\n      UNION ALL\n      SELECT ${sentinelSelect}\n      FROM \"invalid_rows\" AS \"input_rows\"\n    )\n    INSERT INTO ${edges} (${columns})\n    SELECT ${inputSelect} FROM \"write_rows\"\n    WHERE TRUE\n    ON CONFLICT (\n      ${sql.identifier(edges.graphId.name)},\n      ${sql.identifier(edges.kind.name)},\n      ${sql.identifier(edges.matchIdentityName.name)},\n      ${sql.identifier(edges.matchIdentityKey.name)}\n    ) DO UPDATE SET\n      ${sql.identifier(edges.matchIdentityKey.name)} = excluded.${sql.identifier(edges.matchIdentityKey.name)},\n      ${sql.identifier(edges.createdAt.name)} = CASE\n        WHEN ${edges.id} = excluded.${sql.identifier(edges.id.name)} THEN NULL\n        ELSE ${edges.createdAt}\n      END\n    RETURNING *\n  `;\n}\n\n/**\n * Forces a tombstoned winner to roll the native program back.\n *\n * Resurrection merges a partial input through the edge's Zod update schema.\n * SQL cannot reproduce arbitrary user transforms without first returning the\n * incumbent to the Store, so the closed path refuses that state and lets the\n * complete portable path own it.\n */\nexport function buildAtomicConvergeEdgesTombstoneRefusal(\n  tables: Tables,\n  input: Omit<AtomicConvergeEdgesParams, \"timestamp\">,\n): SQL {\n  const { edges, schemaVersions } = tables;\n  const { entries, schemaFence, schemaLockClause } = input;\n  if (\n    entries.length === 0 ||\n    entries.some((entry) => entry.match.kind !== \"durable\")\n  ) {\n    throw new CompilerInvariantError(\n      \"Atomic edge tombstone refusal requires at least one durable identity.\",\n    );\n  }\n  const requested = sql.join(\n    entries.map((entry) => {\n      if (entry.match.kind !== \"durable\") {\n        throw new CompilerInvariantError(\n          \"Atomic edge tombstone refusal received a dynamic match key.\",\n        );\n      }\n      return sql`\n        (\n                ${entry.params.graphId}, ${entry.params.kind},\n                ${entry.match.identity.name}, ${entry.match.identity.key}\n              )\n      `;\n    }),\n    sql`, `,\n  );\n  return sql`\n    WITH \"requested\" (\"graph_id\", \"kind\", \"identity_name\", \"identity_key\")\n    AS (VALUES ${requested})\n    UPDATE ${edges}\n    SET ${sql.identifier(edges.updatedAt.name)} = NULL\n    WHERE ${edges.deletedAt} IS NOT NULL\n      AND EXISTS (\n        SELECT 1 FROM \"requested\"\n        WHERE \"requested\".\"graph_id\" = ${edges.graphId}\n          AND \"requested\".\"kind\" = ${edges.kind}\n          AND \"requested\".\"identity_name\" = ${edges.matchIdentityName}\n          AND \"requested\".\"identity_key\" = ${edges.matchIdentityKey}\n      )\n      AND EXISTS (\n        SELECT 1\n        FROM ${schemaVersions}\n        WHERE ${schemaVersions.graphId} = ${schemaFence.graphId}\n          AND ${schemaVersions.version} = ${schemaFence.expectedVersion}\n          AND ${schemaVersions.isActive} = TRUE\n        ${schemaLockClause}\n      )\n  `;\n}\n\n/**\n * Combines the schema-version shared fence, both live endpoint predicates and\n * the edge insert. PostgreSQL supplies `FOR SHARE`; SQLite supplies an empty\n * clause because its surrounding `BEGIN IMMEDIATE` is the fence.\n */\nexport function buildInsertEdgeIfEndpointsLiveWithSchemaFence(\n  tables: Tables,\n  params: InsertEdgeParams,\n  timestamp: string,\n  schemaFence: SchemaWriteFenceParams,\n  schemaLockClause: SQL,\n): SQL {\n  const { edges, nodes, schemaVersions } = tables;\n  const propsJson = JSON.stringify(params.props);\n  const columns = edgeColumnList(edges);\n  const nodeTable = quotedTableName(getTableName(nodes));\n\n  return sql`\n    INSERT INTO ${edges} (${columns})\n    SELECT\n      ${params.graphId}, ${params.id}, ${params.kind},\n      ${params.fromKind}, ${params.fromId}, ${params.toKind}, ${params.toId},\n      ${propsJson}, ${sqlNull(params.matchIdentity?.name)}, ${sqlNull(params.matchIdentity?.key)},\n      ${sqlNull(resolveStampedValidityLowerBound(params.validFrom, params.validTo, timestamp))}, ${sqlNull(params.validTo)},\n      ${timestamp}, ${timestamp}\n    FROM ${nodeTable} AS \"from_node\"\n    CROSS JOIN ${nodeTable} AS \"to_node\"\n    CROSS JOIN (\n      SELECT ${schemaVersions.version}\n      FROM ${schemaVersions}\n      WHERE ${schemaVersions.graphId} = ${schemaFence.graphId}\n        AND ${schemaVersions.version} = ${schemaFence.expectedVersion}\n        AND ${schemaVersions.isActive} = TRUE\n      ${schemaLockClause}\n    ) AS \"schema_fence\"\n    WHERE ${buildLiveEndpointPredicate(nodes, params)}\n    RETURNING *\n  `;\n}\n\n/**\n * Builds an INSERT query for an edge without RETURNING payload.\n */\nexport function buildInsertEdgeNoReturn(\n  tables: Tables,\n  params: InsertEdgeParams,\n  timestamp: string,\n): SQL {\n  const { edges } = tables;\n  const columns = edgeColumnList(edges);\n\n  return sql`\n    INSERT INTO ${edges} (${columns})\n    VALUES ${edgeInsertValue(params, timestamp)}\n  `;\n}\n\nfunction edgeInsertValue(params: InsertEdgeParams, timestamp: string): SQL {\n  const propsJson = JSON.stringify(params.props);\n  return sql`(${params.graphId}, ${params.id}, ${params.kind}, ${params.fromKind}, ${params.fromId}, ${params.toKind}, ${params.toId}, ${propsJson}, ${sqlNull(params.matchIdentity?.name)}, ${sqlNull(params.matchIdentity?.key)}, ${sqlNull(resolveStampedValidityLowerBound(params.validFrom, params.validTo, timestamp))}, ${sqlNull(params.validTo)}, ${timestamp}, ${timestamp})`;\n}\n\nfunction edgeInsertValues(\n  params: readonly InsertEdgeParams[],\n  timestamp: string,\n): SQL[] {\n  return params.map((edgeParams) => edgeInsertValue(edgeParams, timestamp));\n}\n\n/**\n * Builds a batched INSERT query for edges without RETURNING payload.\n */\nexport function buildInsertEdgesBatch(\n  tables: Tables,\n  params: readonly InsertEdgeParams[],\n  timestamp: string,\n): SQL {\n  const { edges } = tables;\n  const columns = edgeColumnList(edges);\n  const values = edgeInsertValues(params, timestamp);\n\n  return sql`\n    INSERT INTO ${edges} (${columns})\n    VALUES ${sql.join(values, sql`, `)}\n  `;\n}\n\n/**\n * Builds a batched INSERT query for edges with RETURNING *.\n */\nexport function buildInsertEdgesBatchReturning(\n  tables: Tables,\n  params: readonly InsertEdgeParams[],\n  timestamp: string,\n): SQL {\n  const { edges } = tables;\n  const columns = edgeColumnList(edges);\n  const values = edgeInsertValues(params, timestamp);\n\n  return sql`\n    INSERT INTO ${edges} (${columns})\n    VALUES ${sql.join(values, sql`, `)}\n    RETURNING *\n  `;\n}\n\nfunction buildInsertEdgesBatchWithSchemaFenceStatement(\n  tables: Tables,\n  params: readonly InsertEdgeParams[],\n  timestamp: string,\n  schemaFence: SchemaWriteFenceParams,\n  schemaLockClause: SQL,\n  returning: boolean,\n): SQL {\n  const { edges, nodes, schemaVersions } = tables;\n  const inputColumns = [\n    edges.graphId,\n    edges.id,\n    edges.kind,\n    edges.fromKind,\n    edges.fromId,\n    edges.toKind,\n    edges.toId,\n    edges.props,\n    edges.matchIdentityName,\n    edges.matchIdentityKey,\n    edges.validFrom,\n    edges.validTo,\n    edges.createdAt,\n    edges.updatedAt,\n  ];\n  const inputColumnList = sql.raw(\n    inputColumns\n      .map((column) => `\"${column.name.replaceAll('\"', '\"\"')}\"`)\n      .join(\", \"),\n  );\n  const inputSelect = sql.join(\n    inputColumns.map((column) =>\n      sql.raw(`\"valid_rows\".\"${column.name.replaceAll('\"', '\"\"')}\"`),\n    ),\n    sql`, `,\n  );\n  const sentinelSelect = sql.join(\n    inputColumns.map((column) =>\n      column === edges.id ?\n        castBoundValueForColumn(column, sql.raw(\"NULL\"))\n      : sql.raw(`\"input_rows\".\"${column.name.replaceAll('\"', '\"\"')}\"`),\n    ),\n    sql`, `,\n  );\n  const values = params.map((edgeParams) => {\n    const postimage = atomicEdgeCreatePostimage(edgeParams, timestamp);\n    return sql`\n      (\n            ${castBoundValueForColumn(edges.graphId, postimage.graphId)},\n            ${castBoundValueForColumn(edges.id, postimage.id)},\n            ${castBoundValueForColumn(edges.kind, postimage.kind)},\n            ${castBoundValueForColumn(edges.fromKind, postimage.fromKind)},\n            ${castBoundValueForColumn(edges.fromId, postimage.fromId)},\n            ${castBoundValueForColumn(edges.toKind, postimage.toKind)},\n            ${castBoundValueForColumn(edges.toId, postimage.toId)},\n            ${castBoundValueForColumn(edges.props, postimage.propsJson)},\n            ${castBoundValueForColumn(edges.matchIdentityName, sqlNull(postimage.matchIdentityName))},\n            ${castBoundValueForColumn(edges.matchIdentityKey, sqlNull(postimage.matchIdentityKey))},\n            ${castBoundValueForColumn(edges.validFrom, sqlNull(postimage.storedLowerBound))},\n            ${castBoundValueForColumn(edges.validTo, sqlNull(postimage.storedUpperBound))},\n            ${castBoundValueForColumn(edges.createdAt, postimage.createdAt)},\n            ${castBoundValueForColumn(edges.updatedAt, postimage.updatedAt)}\n          )\n    `;\n  });\n  const durableRowCount = params.filter(\n    (edgeParams) => edgeParams.matchIdentity !== undefined,\n  ).length;\n  if (durableRowCount !== 0 && durableRowCount !== params.length) {\n    throw new CompilerInvariantError(\n      \"An atomic edge batch cannot mix durable and ordinary rows.\",\n    );\n  }\n  const durableConflictRefusal =\n    durableRowCount === 0 ?\n      sql``\n    : sql`\n      ON CONFLICT (\n        ${sql.identifier(edges.graphId.name)},\n        ${sql.identifier(edges.kind.name)},\n        ${sql.identifier(edges.matchIdentityName.name)},\n        ${sql.identifier(edges.matchIdentityKey.name)}\n      ) DO UPDATE SET ${sql.identifier(edges.createdAt.name)} = NULL\n    `;\n  const result = returning ? sql`RETURNING *` : sql`RETURNING 1 AS \"inserted\"`;\n\n  // The invalid-endpoint arm deliberately inserts a NULL primary-key id. It\n  // turns a missing endpoint into a statement error, so an atomic transport\n  // rolls back earlier chunks instead of committing the valid chunks while a\n  // later chunk quietly returns zero rows. A missing schema fence produces no\n  // guard row, preserving the all-zero stale-fence sentinel for the store.\n  return sql`\n    WITH \"schema_fence\" AS (\n      SELECT ${schemaVersions.version}\n      FROM ${schemaVersions}\n      WHERE ${schemaVersions.graphId} = ${schemaFence.graphId}\n        AND ${schemaVersions.version} = ${schemaFence.expectedVersion}\n        AND ${schemaVersions.isActive} = TRUE\n      ${schemaLockClause}\n    ), \"input_rows\" (${inputColumnList}) AS (\n      VALUES ${sql.join(values, sql`, `)}\n    ), \"valid_rows\" AS (\n      SELECT \"input_rows\".*\n      FROM \"input_rows\"\n      CROSS JOIN \"schema_fence\"\n      WHERE EXISTS (\n        SELECT 1\n        FROM ${nodes} AS \"from_node\"\n        WHERE ${qualifiedColumn(\"from_node\", nodes.graphId)} = ${qualifiedColumn(\"input_rows\", edges.graphId)}\n          AND ${qualifiedColumn(\"from_node\", nodes.kind)} = ${qualifiedColumn(\"input_rows\", edges.fromKind)}\n          AND ${qualifiedColumn(\"from_node\", nodes.id)} = ${qualifiedColumn(\"input_rows\", edges.fromId)}\n          AND ${qualifiedColumn(\"from_node\", nodes.deletedAt)} IS NULL\n      )\n        AND EXISTS (\n          SELECT 1\n          FROM ${nodes} AS \"to_node\"\n          WHERE ${qualifiedColumn(\"to_node\", nodes.graphId)} = ${qualifiedColumn(\"input_rows\", edges.graphId)}\n            AND ${qualifiedColumn(\"to_node\", nodes.kind)} = ${qualifiedColumn(\"input_rows\", edges.toKind)}\n            AND ${qualifiedColumn(\"to_node\", nodes.id)} = ${qualifiedColumn(\"input_rows\", edges.toId)}\n            AND ${qualifiedColumn(\"to_node\", nodes.deletedAt)} IS NULL\n        )\n    ), \"invalid_endpoint\" AS (\n      SELECT 1 AS \"present\"\n      FROM \"input_rows\"\n      CROSS JOIN \"schema_fence\"\n      WHERE (SELECT COUNT(*) FROM \"valid_rows\") <> (SELECT COUNT(*) FROM \"input_rows\")\n      LIMIT 1\n    )\n    INSERT INTO ${edges} (${edgeColumnList(edges)})\n    SELECT ${inputSelect}\n    FROM \"valid_rows\"\n    UNION ALL\n    SELECT ${sentinelSelect}\n    FROM \"input_rows\"\n    CROSS JOIN \"invalid_endpoint\"\n    LIMIT (SELECT COUNT(*) FROM \"valid_rows\") + (SELECT COUNT(*) FROM \"invalid_endpoint\")\n    ${durableConflictRefusal}\n    ${result}\n  `;\n}\n\n/**\n * Builds one schema-fenced edge batch whose every input endpoint must be\n * live. A missing endpoint is a SQL error rather than a zero-row member, so\n * native multi-statement transports cannot commit earlier chunks partially.\n */\nexport function buildInsertEdgesBatchWithSchemaFence(\n  tables: Tables,\n  params: readonly InsertEdgeParams[],\n  timestamp: string,\n  schemaFence: SchemaWriteFenceParams,\n  schemaLockClause: SQL,\n): SQL {\n  return buildInsertEdgesBatchWithSchemaFenceStatement(\n    tables,\n    params,\n    timestamp,\n    schemaFence,\n    schemaLockClause,\n    false,\n  );\n}\n\n/** Schema-fenced edge batch variant returning inserted edge rows. */\nexport function buildInsertEdgesBatchReturningWithSchemaFence(\n  tables: Tables,\n  params: readonly InsertEdgeParams[],\n  timestamp: string,\n  schemaFence: SchemaWriteFenceParams,\n  schemaLockClause: SQL,\n): SQL {\n  return buildInsertEdgesBatchWithSchemaFenceStatement(\n    tables,\n    params,\n    timestamp,\n    schemaFence,\n    schemaLockClause,\n    true,\n  );\n}\n\n/**\n * Builds one durable-identity batch insert. Identity conflicts are deliberately\n * ignored and omitted from RETURNING; the store maps those omissions to the\n * typed durable-identity refusal, while primary-key conflicts still reach the\n * normal duplicate-key classifier.\n */\nexport function buildInsertEdgesDurableBatchReturning(\n  tables: Tables,\n  params: readonly InsertEdgeParams[],\n  timestamp: string,\n): SQL {\n  const { edges } = tables;\n  const columns = edgeColumnList(edges);\n  const values = edgeInsertValues(params, timestamp);\n\n  return sql`\n    INSERT INTO ${edges} (${columns})\n    VALUES ${sql.join(values, sql`, `)}\n    ON CONFLICT (\n      ${sql.identifier(edges.graphId.name)},\n      ${sql.identifier(edges.kind.name)},\n      ${sql.identifier(edges.matchIdentityName.name)},\n      ${sql.identifier(edges.matchIdentityKey.name)}\n    ) DO NOTHING\n    RETURNING *\n  `;\n}\n\n/**\n * Builds a SELECT query to get an edge by id.\n * Returns the edge regardless of deletion status (store layer handles filtering).\n */\nexport function buildGetEdge(tables: Tables, graphId: string, id: string): SQL {\n  const { edges } = tables;\n\n  return sql`\n    SELECT * FROM ${edges}\n    WHERE ${edges.graphId} = ${graphId}\n      AND ${edges.id} = ${id}\n  `;\n}\n\n/**\n * Builds a SELECT query to get multiple edges by ids.\n * Returns edges regardless of deletion status (store layer handles filtering).\n */\nexport function buildGetEdges(\n  tables: Tables,\n  graphId: string,\n  ids: readonly string[],\n): SQL {\n  const { edges } = tables;\n\n  return sql`\n    SELECT * FROM ${edges}\n    WHERE ${edges.graphId} = ${graphId}\n      AND ${edges.id} IN (${sql.join(\n        ids.map((id) => sql`${id}`),\n        sql`, `,\n      )})\n  `;\n}\n\n/**\n * The `AND <column> = ?` conjunction an edge write carries for every immutable\n * identity component its caller ASSERTED (see {@link UpdateEdgeParams}'s\n * `kind` / `fromKind` / `fromId` / `toKind` / `toId`).\n *\n * This is what makes a kind-scoped edge write SELF-VERIFYING: the identity the\n * caller checked and the row the statement mutates are resolved by ONE `WHERE`,\n * in ONE statement, so nothing a concurrent session does between the check and\n * the write can re-point the id at a row that fails an assertion this write\n * made. Kind alone is not sufficient for that: a `hardDelete` + recreate under\n * the SAME kind with DIFFERENT endpoints slips past a kind-only predicate, and\n * an upsert that asserted endpoints would then have written to an edge whose\n * endpoints it never checked.\n *\n * Only ASSERTED components are emitted. A component the caller left undefined\n * is one it made no claim about, and inventing a predicate for it would refuse\n * writes that are legitimate: the node delete cascade states no kind at all\n * because it removes every connected edge whatever its kind, and a plain\n * `update` states kind without endpoints because the collection is kind-scoped\n * and never looked at where the edge points.\n *\n * One owner: every edge write statement that accepts an expected identity\n * builds its predicate here, so `UPDATE`, soft `DELETE`, and hard `DELETE`\n * cannot drift into disagreeing about what \"the same edge\" means.\n */\nfunction expectedIdentityPredicate(\n  tables: Tables,\n  expected: Readonly<{\n    kind?: string;\n    fromKind?: string;\n    fromId?: string;\n    toKind?: string;\n    toId?: string;\n  }>,\n): SQL {\n  const { edges } = tables;\n  const parts = [\n    expected.kind === undefined ?\n      undefined\n    : sql` AND ${edges.kind} = ${expected.kind}`,\n    expected.fromKind === undefined ?\n      undefined\n    : sql` AND ${edges.fromKind} = ${expected.fromKind}`,\n    expected.fromId === undefined ?\n      undefined\n    : sql` AND ${edges.fromId} = ${expected.fromId}`,\n    expected.toKind === undefined ?\n      undefined\n    : sql` AND ${edges.toKind} = ${expected.toKind}`,\n    expected.toId === undefined ?\n      undefined\n    : sql` AND ${edges.toId} = ${expected.toId}`,\n  ].filter((part): part is SQL => part !== undefined);\n  return parts.length === 0 ? sql.empty() : sql.join(parts, sql``);\n}\n\n/**\n * Builds an UPDATE query for an edge.\n * Uses raw column names in SET clause.\n */\nexport function buildUpdateEdge(\n  tables: Tables,\n  params: UpdateEdgeParams,\n  timestamp: string,\n): SQL {\n  const { edges } = tables;\n  const propsJson = JSON.stringify(params.props);\n\n  const setParts: SQL[] = [\n    sql`${quotedColumn(edges.props)} = ${propsJson}`,\n    sql`${quotedColumn(edges.updatedAt)} = ${timestamp}`,\n  ];\n\n  // A resurrection that names `valid_from` is asserting a COMPLETE window, so\n  // both endpoints are rewritten together — an omitted `valid_to` reopens the\n  // window rather than leaving the tombstoned incarnation's upper bound behind\n  // to truncate it. A resurrection that omits `valid_from` keeps the stored\n  // window (only an explicit `valid_to` moves), which is what\n  // `getOrCreateByEndpoints` relies on when it cardinality-checks the\n  // tombstone's own `valid_to`.\n  //\n  // So this is the one window-writing site in the backend that does NOT stamp:\n  // the gate above guarantees the caller named a bound, and there is no instant\n  // to judge. It therefore passes the stated value through\n  // (`resolveStatedValidityLowerBound`) rather than routing through the stamping\n  // owner, which would silently turn \"the caller said this\" into \"the write\n  // chose this\" on a path where nothing was chosen.\n  if (params.clearDeleted && params.validFrom !== undefined) {\n    setParts.push(\n      sql`${quotedColumn(edges.validFrom)} = ${sqlNull(resolveStatedValidityLowerBound(params.validFrom))}`,\n      sql`${quotedColumn(edges.validTo)} = ${sqlNull(params.validTo)}`,\n    );\n  } else if (params.clearValidTo === true) {\n    setParts.push(sql`${quotedColumn(edges.validTo)} = NULL`);\n  } else if (params.validTo !== undefined) {\n    setParts.push(sql`${quotedColumn(edges.validTo)} = ${params.validTo}`);\n  }\n\n  if (params.clearDeleted) {\n    setParts.push(sql`${quotedColumn(edges.deletedAt)} = NULL`);\n  }\n\n  const setClause = sql.join(setParts, sql`, `);\n  const expectedIdentity = expectedIdentityPredicate(tables, params);\n  // The bound the CALLER read, when it read one. Not part of the immutable\n  // identity above — `valid_from` is mutable — so it is built by the shared\n  // NULL-safe helper both entities use; see\n  // `UpdateEdgeParams.expectedValidFrom`.\n  const expectedValidFrom = expectedValidFromPredicate(\n    edges.validFrom,\n    params.expectedValidFrom,\n  );\n  const expectedValidTo = expectedValidFromPredicate(\n    edges.validTo,\n    params.expectedValidTo,\n  );\n\n  if (params.clearDeleted) {\n    return sql`\n      UPDATE ${edges}\n      SET ${setClause}\n      WHERE ${edges.graphId} = ${params.graphId}\n        AND ${edges.id} = ${params.id}${expectedIdentity}${expectedValidFrom}${expectedValidTo}\n      RETURNING *\n    `;\n  }\n\n  return sql`\n    UPDATE ${edges}\n    SET ${setClause}\n    WHERE ${edges.graphId} = ${params.graphId}\n      AND ${edges.id} = ${params.id}${expectedIdentity}${expectedValidFrom}${expectedValidTo}\n      AND ${edges.deletedAt} IS NULL\n    RETURNING *\n  `;\n}\n\n/** One guarded set update for distinct, live edge after-images. */\nexport function buildAtomicEdgeResolvedUpdateBatch(\n  tables: Tables,\n  entries: readonly AtomicEdgeResolvedUpdateEntry[],\n  timestamp: string,\n  schemaFence: SchemaWriteFenceParams,\n  schemaLockClause: SQL,\n): SQL {\n  const { edges, schemaVersions } = tables;\n  const first = entries[0];\n  if (first === undefined) return sql`SELECT 1 WHERE FALSE`;\n  const firstPostimage = atomicEdgeUpdatePostimage(first, timestamp);\n  const postimages = [\n    firstPostimage,\n    ...entries\n      .slice(1)\n      .map((entry) => atomicEdgeUpdatePostimage(entry, timestamp)),\n  ];\n  const propsCases = postimages.map(\n    (postimage) =>\n      sql`WHEN ${postimage.id} THEN ${castBoundValueForColumn(edges.props, postimage.propsJson)}`,\n  );\n  const expectedRows = entries.map((entry) => {\n    const existing = entry.existing;\n    return sql`\n      (\n            ${edges.id} = ${existing.id}\n            AND ${edges.kind} = ${existing.kind}\n            AND ${edges.fromKind} = ${existing.from_kind}\n            AND ${edges.fromId} = ${existing.from_id}\n            AND ${edges.toKind} = ${existing.to_kind}\n            AND ${edges.toId} = ${existing.to_id}\n            AND ${edges.updatedAt} = ${existing.updated_at}\n            AND ${edges.props} = ${castBoundValueForColumn(edges.props, rowPropsToJsonText(existing.props))}\n            ${expectedValidFromPredicate(edges.validFrom, existing.valid_from ?? EXPECTED_SQL_NULL)}\n            ${expectedValidFromPredicate(edges.validTo, existing.valid_to ?? EXPECTED_SQL_NULL)}\n          )\n    `;\n  });\n\n  return sql`\n    WITH \"schema_fence\" AS (\n      SELECT ${schemaVersions.version}\n      FROM ${schemaVersions}\n      WHERE ${schemaVersions.graphId} = ${schemaFence.graphId}\n        AND ${schemaVersions.version} = ${schemaFence.expectedVersion}\n        AND ${schemaVersions.isActive} = TRUE\n      ${schemaLockClause}\n    )\n    UPDATE ${edges}\n    SET ${quotedColumn(edges.props)} = CASE ${edges.id}\n          ${sql.join(propsCases, sql` `)}\n          ELSE ${edges.props}\n        END,\n        ${quotedColumn(edges.updatedAt)} = ${firstPostimage.updatedAt}\n    WHERE ${edges.graphId} = ${first.existing.graph_id}\n      AND ${edges.kind} = ${first.existing.kind}\n      AND ${edges.deletedAt} IS NULL\n      AND ${edges.id} IN (${sql.join(\n        entries.map((entry) => sql`${entry.existing.id}`),\n        sql`, `,\n      )})\n      AND (\n        SELECT COUNT(*)\n        FROM ${edges}\n        CROSS JOIN \"schema_fence\"\n        WHERE ${edges.graphId} = ${first.existing.graph_id}\n          AND ${edges.deletedAt} IS NULL\n          AND (${sql.join(expectedRows, sql` OR `)})\n      ) = ${entries.length}\n    RETURNING *\n  `;\n}\n\n/**\n * Terminal database assertion for an atomic resolved edge mutation set.\n * A missing guarded postimage turns the refusal row's NOT NULL kind into the\n * rollback sentinel; its duplicate primary key independently refuses the row\n * when the first input still exists. A stale schema fence is diagnosed by the\n * Store after the same sentinel rolls the program back.\n */\nexport function buildAssertAtomicEdgeMutationPostimages(\n  tables: Tables,\n  creates: readonly InsertEdgeParams[],\n  updates: readonly AtomicEdgeResolvedUpdateEntry[],\n  timestamp: string,\n  schemaFence: SchemaWriteFenceParams,\n): SQL {\n  const { edges, schemaVersions } = tables;\n  const firstCreate = creates[0];\n  const firstUpdate = updates[0];\n  if (firstCreate === undefined && firstUpdate === undefined) {\n    return sql`SELECT 1 WHERE FALSE`;\n  }\n  const first =\n    firstCreate === undefined ?\n      atomicEdgeUpdatePostimage(requireDefined(firstUpdate), timestamp)\n    : atomicEdgeCreatePostimage(firstCreate, timestamp);\n  const entries = [\n    ...creates.map((params) => atomicEdgeCreatePostimage(params, timestamp)),\n    ...updates.map((entry) => atomicEdgeUpdatePostimage(entry, timestamp)),\n  ];\n  const expectedRows = entries.map(\n    (entry) => sql`\n      (\n            ${edges.id} = ${entry.id}\n            AND ${edges.kind} = ${entry.kind}\n            AND ${edges.fromKind} = ${entry.fromKind}\n            AND ${edges.fromId} = ${entry.fromId}\n            AND ${edges.toKind} = ${entry.toKind}\n            AND ${edges.toId} = ${entry.toId}\n            AND ${edges.props} = ${castBoundValueForColumn(edges.props, entry.propsJson)}\n            AND ${edges.updatedAt} = ${entry.updatedAt}\n          )\n    `,\n  );\n\n  return sql`\n    INSERT INTO ${edges} (${edgeColumnList(edges)})\n    SELECT\n      ${first.graphId},\n      ${first.id},\n      NULL,\n      ${first.fromKind},\n      ${first.fromId},\n      ${first.toKind},\n      ${first.toId},\n      ${castBoundValueForColumn(edges.props, first.propsJson)},\n      ${sqlNull(first.matchIdentityName)},\n      ${sqlNull(first.matchIdentityKey)},\n      ${castBoundValueForColumn(edges.validFrom, sqlNull(first.storedLowerBound))},\n      ${castBoundValueForColumn(edges.validTo, sqlNull(first.storedUpperBound))},\n      ${castBoundValueForColumn(edges.createdAt, first.createdAt)},\n      ${castBoundValueForColumn(edges.updatedAt, first.updatedAt)}\n    WHERE NOT EXISTS (\n        SELECT 1\n        FROM ${schemaVersions}\n        WHERE ${schemaVersions.graphId} = ${schemaFence.graphId}\n          AND ${schemaVersions.version} = ${schemaFence.expectedVersion}\n          AND ${schemaVersions.isActive} = TRUE\n      ) OR (\n        SELECT COUNT(*)\n        FROM ${edges}\n        WHERE ${edges.graphId} = ${first.graphId}\n          AND ${edges.deletedAt} IS NULL\n          AND (${sql.join(expectedRows, sql` OR `)})\n      ) <> ${entries.length}\n  `;\n}\n\n/** Reads the asserted rows only while the same schema fence remains current. */\nexport function buildReadAtomicEdgeMutationPostimages(\n  tables: Tables,\n  graphId: string,\n  ids: readonly string[],\n  schemaFence: SchemaWriteFenceParams,\n): SQL {\n  const { edges, schemaVersions } = tables;\n  return sql`\n    SELECT ${edges}.*\n    FROM ${edges}\n    CROSS JOIN ${schemaVersions}\n    WHERE ${edges.graphId} = ${graphId}\n      AND ${edges.id} IN (${sql.join(\n        ids.map((id) => sql`${id}`),\n        sql`, `,\n      )})\n      AND ${schemaVersions.graphId} = ${schemaFence.graphId}\n      AND ${schemaVersions.version} = ${schemaFence.expectedVersion}\n      AND ${schemaVersions.isActive} = TRUE\n  `;\n}\n\n/**\n * Builds a soft DELETE query for an edge (sets deleted_at).\n * Uses raw column name in SET clause.\n */\nexport function buildDeleteEdge(\n  tables: Tables,\n  params: DeleteEdgeParams,\n  timestamp: string,\n): SQL {\n  const { edges } = tables;\n\n  return sql`\n    UPDATE ${edges}\n    SET ${quotedColumn(edges.deletedAt)} = ${timestamp}\n    WHERE ${edges.graphId} = ${params.graphId}\n      AND ${edges.id} = ${params.id}${expectedIdentityPredicate(tables, params.kind === undefined ? {} : { kind: params.kind })}\n      AND ${edges.deletedAt} IS NULL\n  `;\n}\n\n/**\n * Builds one soft-delete UPDATE covering a batch of edge ids. Matches\n * {@link buildDeleteEdge} semantics per row (idempotent via the\n * `deleted_at IS NULL` guard); the caller chunks ids to the bind budget.\n */\nexport function buildDeleteEdgesBatch(\n  tables: Tables,\n  params: DeleteEdgesBatchParams,\n  timestamp: string,\n): SQL {\n  const { edges } = tables;\n\n  return sql`\n    UPDATE ${edges}\n    SET ${quotedColumn(edges.deletedAt)} = ${timestamp}\n    WHERE ${edges.graphId} = ${params.graphId}\n      AND ${edges.id} IN (${sql.join(\n        params.ids.map((id) => sql`${id}`),\n        sql`, `,\n      )})${expectedIdentityPredicate(tables, params.kind === undefined ? {} : { kind: params.kind })}\n      AND ${edges.deletedAt} IS NULL\n  `;\n}\n\n/**\n * Builds one closed, schema-fenced edge soft-delete statement.\n *\n * A foreign-kind row deliberately assigns NULL to the NOT NULL kind column,\n * aborting this statement and every earlier native-program chunk. A stale\n * fence selects no rows, preserving the side-effect-free zero-row sentinel.\n */\nexport function buildAtomicEdgeDeleteBatchWithSchemaFence(\n  tables: Tables,\n  input: AtomicEdgeDeleteBatchInput,\n  timestamp: string,\n  schemaLockClause: SQL,\n): SQL {\n  const { edges, schemaVersions } = tables;\n\n  return sql`\n    WITH \"schema_fence\" AS (\n      SELECT ${schemaVersions.version}\n      FROM ${schemaVersions}\n      WHERE ${schemaVersions.graphId} = ${input.schemaFence.graphId}\n        AND ${schemaVersions.version} = ${input.schemaFence.expectedVersion}\n        AND ${schemaVersions.isActive} = TRUE\n      ${schemaLockClause}\n    )\n    UPDATE ${edges}\n    SET ${quotedColumn(edges.deletedAt)} = CASE\n          WHEN ${edges.kind} = ${input.expectedKind} THEN ${timestamp}\n          ELSE ${edges.deletedAt}\n        END,\n        ${quotedColumn(edges.kind)} = CASE\n          WHEN ${edges.kind} = ${input.expectedKind} THEN ${edges.kind}\n          ELSE NULL\n        END\n    WHERE ${edges.graphId} = ${input.graphId}\n      AND ${edges.id} IN (${sql.join(\n        input.ids.map((id) => sql`${id}`),\n        sql`, `,\n      )})\n      AND EXISTS (SELECT 1 FROM \"schema_fence\")\n      AND (${edges.deletedAt} IS NULL OR ${edges.kind} <> ${input.expectedKind})\n    RETURNING ${edges.id}\n  `;\n}\n\n/**\n * Builds one hard DELETE covering a batch of edge ids. Matches\n * {@link buildHardDeleteEdge} semantics per row; the caller chunks ids to\n * the bind budget.\n */\nexport function buildHardDeleteEdgesBatch(\n  tables: Tables,\n  params: DeleteEdgesBatchParams,\n): SQL {\n  const { edges } = tables;\n\n  return sql`\n    DELETE FROM ${edges}\n    WHERE ${edges.graphId} = ${params.graphId}\n      AND ${edges.id} IN (${sql.join(\n        params.ids.map((id) => sql`${id}`),\n        sql`, `,\n      )})${expectedIdentityPredicate(tables, params.kind === undefined ? {} : { kind: params.kind })}\n  `;\n}\n\n/**\n * Builds a hard DELETE query for an edge (permanent removal).\n */\nexport function buildHardDeleteEdge(\n  tables: Tables,\n  params: HardDeleteEdgeParams,\n): SQL {\n  const { edges } = tables;\n\n  return sql`\n    DELETE FROM ${edges}\n    WHERE ${edges.graphId} = ${params.graphId}\n      AND ${edges.id} = ${params.id}${expectedIdentityPredicate(tables, params.kind === undefined ? {} : { kind: params.kind })}\n  `;\n}\n\n/**\n * Builds a hard DELETE query for all edges connected to a node (permanent removal).\n * Deletes edges where the node appears as either source or target.\n */\nexport function buildHardDeleteEdgesByNode(\n  tables: Tables,\n  graphId: string,\n  nodeKind: string,\n  nodeId: string,\n): SQL {\n  const { edges } = tables;\n\n  return sql`\n    DELETE FROM ${edges}\n    WHERE ${edges.graphId} = ${graphId}\n      AND (\n        (${edges.fromKind} = ${nodeKind} AND ${edges.fromId} = ${nodeId})\n        OR (${edges.toKind} = ${nodeKind} AND ${edges.toId} = ${nodeId})\n      )\n  `;\n}\n\n/**\n * Builds a query to count edges from a source node.\n */\nexport function buildCountEdgesFrom(\n  tables: Tables,\n  params: CountEdgesFromParams,\n): SQL {\n  const { edges } = tables;\n\n  if (params.activeOnly) {\n    return sql`\n      SELECT COUNT(*) as count FROM ${edges}\n      WHERE ${edges.graphId} = ${params.graphId}\n        AND ${edges.kind} = ${params.edgeKind}\n        AND ${edges.fromKind} = ${params.fromKind}\n        AND ${edges.fromId} = ${params.fromId}\n        AND ${edges.deletedAt} IS NULL\n        AND ${edges.validTo} IS NULL\n    `;\n  }\n\n  return sql`\n    SELECT COUNT(*) as count FROM ${edges}\n    WHERE ${edges.graphId} = ${params.graphId}\n      AND ${edges.kind} = ${params.edgeKind}\n      AND ${edges.fromKind} = ${params.fromKind}\n      AND ${edges.fromId} = ${params.fromId}\n      AND ${edges.deletedAt} IS NULL\n  `;\n}\n\n/**\n * Builds a query to check if an edge exists between two nodes.\n */\nexport function buildEdgeExistsBetween(\n  tables: Tables,\n  params: EdgeExistsBetweenParams,\n): SQL {\n  const { edges } = tables;\n\n  return sql`\n    SELECT 1 FROM ${edges}\n    WHERE ${edges.graphId} = ${params.graphId}\n      AND ${edges.kind} = ${params.edgeKind}\n      AND ${edges.fromKind} = ${params.fromKind}\n      AND ${edges.fromId} = ${params.fromId}\n      AND ${edges.toKind} = ${params.toKind}\n      AND ${edges.toId} = ${params.toId}\n      AND ${edges.deletedAt} IS NULL\n    LIMIT 1\n  `;\n}\n\n/**\n * Builds a query to find all edges connected to a node.\n */\nexport function buildFindEdgesConnectedTo(\n  tables: Tables,\n  params: FindEdgesConnectedToParams,\n): SQL {\n  const { edges } = tables;\n\n  return sql`\n    SELECT * FROM ${edges}\n    WHERE ${edges.graphId} = ${params.graphId}\n      AND ${edges.deletedAt} IS NULL\n      AND ${edges.fromKind} = ${params.nodeKind}\n      AND ${edges.fromId} = ${params.nodeId}\n    UNION ALL\n    SELECT * FROM ${edges}\n    WHERE ${edges.graphId} = ${params.graphId}\n      AND ${edges.deletedAt} IS NULL\n      AND ${edges.toKind} = ${params.nodeKind}\n      AND ${edges.toId} = ${params.nodeId}\n      AND NOT (\n        ${edges.fromKind} = ${params.nodeKind}\n        AND ${edges.fromId} = ${params.nodeId}\n      )\n  `;\n}\n","/**\n * SQL builders for fulltext read operations.\n *\n * Write operations (upsert / delete, single and batch) are owned by the\n * active `FulltextStrategy` — see `src/query/dialect/fulltext-strategy.ts`.\n * A strategy-level `buildUpsert` / `buildBatchUpsert` / `buildDelete` /\n * `buildBatchDelete` means alternate backends (pg_trgm, ParadeDB/pg_search,\n * pgroonga) control the full write pipeline, not just read SQL.\n *\n * The search builder stays here because it composes fragments from the\n * strategy (`matchCondition`, `rankExpression`, `snippetExpression`) into\n * a single `SELECT` shape that is identical across dialects.\n */\nimport { type SQL, sql } from \"drizzle-orm\";\n\nimport type { FulltextStrategy } from \"../../../query/dialect/fulltext-strategy\";\nimport {\n  isSqlFragment,\n  sql as fragmentSql,\n  type SqlFragment,\n} from \"../../../query/sql-fragment\";\nimport type {\n  FulltextQueryMode,\n  FulltextSearchParams,\n  SqlDialect,\n} from \"../../types\";\nimport { toDrizzleSql } from \"../execution/types\";\nimport { codePointOrderKey, quotedTableName } from \"./shared\";\n\nfunction resolveMode(mode: FulltextQueryMode | undefined): FulltextQueryMode {\n  return mode ?? \"websearch\";\n}\n\nexport function buildFulltextSearch(\n  tableName: string,\n  params: FulltextSearchParams,\n  strategy: FulltextStrategy,\n  dialect: SqlDialect,\n  candidates?: SQL | SqlFragment,\n): SQL {\n  assertValidSearchParams(params);\n\n  const mode = resolveMode(params.mode);\n  const table = quotedTableName(tableName);\n  const matchCondition = toDrizzleSql(\n    strategy.matchCondition(tableName, params.query, mode, params.language),\n    dialect,\n  );\n  const rankExpression = toDrizzleSql(\n    strategy.rankExpression(tableName, params.query, mode, params.language),\n    dialect,\n  );\n\n  const conditions: SQL[] = [\n    matchCondition,\n    sql`\"graph_id\" = ${params.graphId}`,\n    sql`\"node_kind\" = ${params.nodeKind}`,\n  ];\n  if (params.minScore !== undefined) {\n    conditions.push(sql`${rankExpression} >= ${params.minScore}`);\n  }\n  // Liveness pushdown: rank only rows whose node is current, so top-k can\n  // never be crowded out by index drift (side-table rows for tombstoned or\n  // expired nodes). Plain `IN (subquery)` on both engines: SQLite\n  // materializes it once, and with fresh planner statistics Postgres\n  // hashes it for ~0.5ms over the unfiltered scan. Like every candidate\n  // membership shape (hash join, ANY(ARRAY), LATERAL all measured worse\n  // or no better), it cliffs when statistics are stale — the answer is\n  // `store.refreshStatistics()` after bulk loads (the documented setup),\n  // not a cleverer SQL form.\n  if (candidates !== undefined) {\n    const candidateSql =\n      isSqlFragment(candidates) ? toDrizzleSql(candidates, dialect) : candidates;\n    conditions.push(sql`\"node_id\" IN (${candidateSql})`);\n  }\n\n  const snippetExpr =\n    params.includeSnippets === true && strategy.supportsSnippets ?\n      toDrizzleSql(\n        strategy.snippetExpression(\n          tableName,\n          params.query,\n          mode,\n          params.language,\n        ),\n        dialect,\n      )\n    : sql`NULL`;\n\n  const pageClause =\n    params.offset === undefined || params.offset === 0 ?\n      sql`LIMIT ${params.limit}`\n    : sql`LIMIT ${params.limit} OFFSET ${params.offset}`;\n  return sql`\n    SELECT\n      \"node_id\" AS node_id,\n      ${rankExpression} AS score,\n      ${snippetExpr} AS snippet\n    FROM ${table}\n    WHERE ${sql.join(conditions, sql` AND `)}\n    ORDER BY ${rankExpression} DESC, ${codePointOrderKey(fragmentSql.identifier(\"node_id\"), dialect)} ASC\n    ${pageClause}\n  `;\n}\n\nfunction assertValidSearchParams(params: FulltextSearchParams): void {\n  if (!Number.isInteger(params.limit) || params.limit <= 0) {\n    throw new Error(`limit must be a positive integer, got: ${params.limit}`);\n  }\n  if (params.minScore !== undefined && !Number.isFinite(params.minScore)) {\n    throw new TypeError(\n      `minScore must be a finite number, got: ${params.minScore}`,\n    );\n  }\n}\n","/**\n * Single-statement hybrid search: composes a vector source (the active\n * `VectorStrategy`'s search SQL) and a fulltext source (the shared\n * `buildFulltextSearch` SQL) into one statement that ranks each source,\n * fuses via weighted Reciprocal Rank Fusion, joins live node rows for\n * hydration, and pages the fused ranking — replacing the facade's two\n * search round trips plus id-hydration fetch with one round trip.\n *\n * Fusion math matches the store's JS implementation exactly:\n * `score = Σ_src weight_src / (fusionK + rank_src)`, ranked descending,\n * ties broken by node id. Ranks are per-source `ROW_NUMBER()` over the\n * source's own ordering (score, direction per metric convention), so the\n * statement requires window functions — backends whose capability profile\n * disables them fall back to the multi-statement path.\n *\n * The two-branch `UNION ALL` + `GROUP BY` fusion shape is deliberate: it\n * needs no FULL OUTER JOIN (absent from older SQLite builds) and keeps the\n * statement identical across dialects. The fused CTE is MATERIALIZED — a\n * fence, not a hint: Postgres inlines single-use CTEs, and the inlined\n * fusion subtree re-executed once per candidate node row under a\n * nested-loop join (2000x in the regression that motivated this).\n */\nimport { type SQL, sql } from \"drizzle-orm\";\n\nimport { type SqlDialect } from \"../../../query/dialect/types\";\nimport { sql as fragmentSql } from \"../../../query/sql-fragment\";\nimport { coerceNumericScore } from \"../../row-mappers\";\nimport { type HybridSearchRow, type NodeRow } from \"../../types\";\nimport { codePointOrderKey, quotedColumn, type Tables } from \"./shared\";\n\n/**\n * The `node_id` tiebreak this statement uses three times: once in each\n * per-source `ROW_NUMBER()` rank, and once in the final fused ordering. Those\n * ranks *produce* the fused scores, so the tiebreak decides the page twice\n * over. Code-point ordered on both engines (see {@link codePointOrderKey}) so\n * it matches the multi-statement fallback's JS fusion row for row.\n */\nfunction nodeIdOrderKey(dialect: SqlDialect): SQL {\n  return codePointOrderKey(fragmentSql.raw(\"node_id\"), dialect);\n}\n\nexport type HybridStatementInput = Readonly<{\n  /**\n   * The candidates set (liveness/currency filter, or the store-compiled\n   * predicate query): `(node_id)` rows. Emitted ONCE as the\n   * `tg_hybrid_cand` CTE; both source legs must reference it via\n   * {@link hybridCandidatesRef} instead of embedding their own copy —\n   * previously each leg re-executed the candidates subquery (with two\n   * separate `nowIso()` stamps for the currency window, no less).\n   */\n  candidatesSql: SQL;\n  /** Vector source SQL: `(node_id, score)` ordered best-first, bounded. */\n  vectorSql: SQL;\n  /**\n   * Whether higher vector scores rank first (cosine similarity) or lower\n   * (l2 / inner_product raw distance) — must match the source ordering.\n   */\n  vectorScoreDescending: boolean;\n  /** Fulltext source SQL: `(node_id, score, snippet)`, score-descending. */\n  fulltextSql: SQL;\n  nodes: Tables[\"nodes\"];\n  /** Selects the collation-independent `node_id` tiebreak. */\n  dialect: SqlDialect;\n  graphId: string;\n  nodeKind: string;\n  fusionK: number;\n  vectorWeight: number;\n  fulltextWeight: number;\n  limit: number;\n  offset: number;\n}>;\n\n/**\n * The raw column shape the statement returns: fusion fields plus the full\n * node row (aliased to the mapper's expected column names). `node_id`\n * (fusion side) and `id` (node side) intentionally coexist.\n */\n/**\n * The reference the vector/fulltext source legs embed in place of the\n * candidates subquery (their strategies emit `node_id IN (<this>)`).\n * Valid only inside {@link buildHybridSearchStatement}, which defines\n * the `tg_hybrid_cand` CTE first in its WITH list — CTEs are visible to\n * later members on both dialects, and a CTE referenced from both legs\n * is evaluated once.\n */\nexport function hybridCandidatesRef(): SQL {\n  return sql`SELECT node_id FROM tg_hybrid_cand`;\n}\n\nexport function buildHybridSearchStatement(input: HybridStatementInput): SQL {\n  const { nodes } = input;\n  const nodeIdOrder = nodeIdOrderKey(input.dialect);\n  const vectorOrder =\n    input.vectorScoreDescending ?\n      sql`score DESC, ${nodeIdOrder} ASC`\n    : sql`score ASC, ${nodeIdOrder} ASC`;\n\n  const columnPairs: readonly (readonly [{ name: string }, string])[] = [\n    [nodes.graphId, \"graph_id\"],\n    [nodes.kind, \"kind\"],\n    [nodes.id, \"id\"],\n    [nodes.props, \"props\"],\n    [nodes.version, \"version\"],\n    [nodes.validFrom, \"valid_from\"],\n    [nodes.validTo, \"valid_to\"],\n    [nodes.createdAt, \"created_at\"],\n    [nodes.updatedAt, \"updated_at\"],\n    [nodes.deletedAt, \"deleted_at\"],\n  ];\n  const nodeColumns = sql.raw(\n    columnPairs\n      .map(\n        ([column, alias]) =>\n          `tg_hybrid_node.\"${column.name.replaceAll('\"', '\"\"')}\" AS ${alias}`,\n      )\n      .join(\", \"),\n  );\n\n  // `* 1.0` forces float division: with integer binds, Postgres would\n  // otherwise evaluate `weight / (k + rank)` in integer arithmetic and\n  // collapse every contribution to zero.\n  return sql`\n    WITH tg_hybrid_cand AS (\n      SELECT node_id FROM (${input.candidatesSql}) AS tg_hybrid_cand_src\n    ),\n    tg_hybrid_vec AS (\n      SELECT node_id, score,\n             ROW_NUMBER() OVER (ORDER BY ${vectorOrder}) AS ord\n      FROM (${input.vectorSql}) AS tg_hybrid_vec_src\n    ),\n    tg_hybrid_fts AS (\n      SELECT node_id, score, snippet,\n             ROW_NUMBER() OVER (ORDER BY score DESC, ${nodeIdOrder} ASC) AS ord\n      FROM (${input.fulltextSql}) AS tg_hybrid_fts_src\n    ),\n    tg_hybrid_pairs AS (\n      SELECT node_id, ord AS vector_rank, score AS vector_score,\n             NULL AS fulltext_rank, NULL AS fulltext_score, NULL AS snippet\n      FROM tg_hybrid_vec\n      UNION ALL\n      SELECT node_id, NULL, NULL, ord, score, snippet\n      FROM tg_hybrid_fts\n    ),\n    tg_hybrid_fused AS MATERIALIZED (\n      SELECT node_id,\n        SUM(\n          COALESCE((${input.vectorWeight} * 1.0) / (${input.fusionK} + vector_rank), 0)\n          + COALESCE((${input.fulltextWeight} * 1.0) / (${input.fusionK} + fulltext_rank), 0)\n        ) AS fused_score,\n        MAX(vector_rank) AS vector_rank,\n        MAX(vector_score) AS vector_score,\n        MAX(fulltext_rank) AS fulltext_rank,\n        MAX(fulltext_score) AS fulltext_score,\n        MAX(snippet) AS snippet\n      FROM tg_hybrid_pairs\n      GROUP BY node_id\n    )\n    SELECT\n      tg_hybrid_fused.node_id AS node_id,\n      tg_hybrid_fused.fused_score AS fused_score,\n      tg_hybrid_fused.vector_rank AS vector_rank,\n      tg_hybrid_fused.vector_score AS vector_score,\n      tg_hybrid_fused.fulltext_rank AS fulltext_rank,\n      tg_hybrid_fused.fulltext_score AS fulltext_score,\n      tg_hybrid_fused.snippet AS snippet,\n      ${nodeColumns}\n    FROM tg_hybrid_fused\n    JOIN ${nodes} AS tg_hybrid_node\n      ON ${qualified(nodes, \"graphId\")} = ${input.graphId}\n     AND ${qualified(nodes, \"kind\")} = ${input.nodeKind}\n     AND ${qualified(nodes, \"id\")} = tg_hybrid_fused.node_id\n     AND ${qualified(nodes, \"deletedAt\")} IS NULL\n    ORDER BY fused_score DESC, ${nodeIdOrder} ASC\n    LIMIT ${input.limit} OFFSET ${input.offset}\n  `;\n}\n\nfunction qualified(\n  nodes: Tables[\"nodes\"],\n  member: \"graphId\" | \"kind\" | \"id\" | \"deletedAt\",\n): SQL {\n  return sql`tg_hybrid_node.${quotedColumn(nodes[member])}`;\n}\n\nfunction present(value: unknown): boolean {\n  return value !== null && value !== undefined;\n}\n\n/**\n * Maps one raw statement row into a {@link HybridSearchRow}. Rank columns\n * come from `ROW_NUMBER()` (bigint — node-postgres hands int8 back as a\n * string) and scores from engine-native rank math (Postgres `numeric`\n * can arrive as a string), so both coerce defensively.\n */\nexport function mapHybridSearchRow(\n  row: Record<string, unknown>,\n  toNodeRow: (raw: Record<string, unknown>) => NodeRow,\n): HybridSearchRow {\n  return {\n    node: toNodeRow(row),\n    fusedScore: coerceNumericScore(row[\"fused_score\"] as number | string),\n    ...(present(row[\"vector_rank\"]) ?\n      { vectorRank: Number(row[\"vector_rank\"]) }\n    : {}),\n    ...(present(row[\"vector_score\"]) ?\n      { vectorScore: coerceNumericScore(row[\"vector_score\"] as number | string) }\n    : {}),\n    ...(present(row[\"fulltext_rank\"]) ?\n      { fulltextRank: Number(row[\"fulltext_rank\"]) }\n    : {}),\n    ...(present(row[\"fulltext_score\"]) ?\n      {\n        fulltextScore: coerceNumericScore(\n          row[\"fulltext_score\"] as number | string,\n        ),\n      }\n    : {}),\n    ...(present(row[\"snippet\"]) ? { snippet: String(row[\"snippet\"]) } : {}),\n  };\n}\n","import { type SQL, sql } from \"drizzle-orm\";\n\nimport { CompilerInvariantError } from \"../../../errors\";\nimport { getDialect } from \"../../../query/dialect\";\nimport type { DialectAdapter } from \"../../../query/dialect/types\";\nimport { jsonPointer } from \"../../../query/json-pointer\";\nimport {\n  sql as portableSql,\n  type SqlFragment,\n} from \"../../../query/sql-fragment\";\nimport { resolveStampedValidityLowerBound } from \"../../../utils/date\";\nimport type {\n  AtomicNodeBatchEntry,\n  AtomicNodeBatchResultMode,\n  AtomicNodeDeleteBatchInput,\n  AtomicNodePostimageEntry,\n  AtomicNodeReplacementEntry,\n  AtomicNodeResolvedUpdateEntry,\n} from \"../../capabilities/atomic-mutation-program\";\nimport type {\n  CompareAndSetNodeParams,\n  DeleteNodeParams,\n  HardDeleteNodeParams,\n  InsertNodeParams,\n  NodePropertyExpectation,\n  ResolvedNodeUpdateBatchParams,\n  SchemaWriteFenceParams,\n  UpdateNodeParams,\n  UpdateNodeSetParams,\n} from \"../../types\";\nimport { toDrizzleSql } from \"../execution/types\";\nimport type { AtomicContributionEvidence } from \"./contribution-evidence\";\nimport {\n  castBoundValueForColumn,\n  expectedValidFromPredicate,\n  nodeColumnList,\n  quotedColumn,\n  sqlNull,\n  type Tables,\n} from \"./shared\";\n\nfunction qualifiedColumn(\n  alias: string,\n  column: Readonly<{ name: string }>,\n): SQL {\n  return sql.raw(`\"${alias}\".\"${column.name.replaceAll('\"', '\"\"')}\"`);\n}\n\nconst INITIAL_NODE_VERSION = 1;\nconst NODE_VERSION_INCREMENT = 1;\n\nfunction atomicNodeCreatePostimage(\n  entry: Pick<AtomicNodePostimageEntry, \"params\">,\n  timestamp: string,\n) {\n  const params = entry.params;\n  return {\n    graphId: params.graphId,\n    kind: params.kind,\n    id: params.id,\n    propsJson: JSON.stringify(params.props),\n    version: INITIAL_NODE_VERSION,\n    // The temporal inventory requires the owner and its input on one line.\n    // prettier-ignore\n    validFrom: resolveStampedValidityLowerBound(params.validFrom, params.validTo, timestamp),\n    validTo: params.validTo,\n    createdAt: timestamp,\n    updatedAt: timestamp,\n  } as const;\n}\n\nfunction atomicNodeUpdatePostimage(\n  entry: AtomicNodeResolvedUpdateEntry,\n  timestamp: string,\n) {\n  return {\n    graphId: entry.graphId,\n    kind: entry.kind,\n    id: entry.id,\n    propsJson: JSON.stringify(entry.props),\n    version: entry.expectedVersion + NODE_VERSION_INCREMENT,\n    updatedAt: timestamp,\n  } as const;\n}\n\nfunction isAtomicNodeBatchEntry(\n  entry: AtomicNodePostimageEntry,\n): entry is AtomicNodeBatchEntry {\n  return \"idSource\" in entry;\n}\n\n/**\n * Builds an INSERT query for a node.\n * Uses raw column names in the column list (required by SQL syntax).\n *\n * The stored lower bound is decided by {@link resolveStampedValidityLowerBound}\n * against the very `timestamp` this statement binds into `created_at` /\n * `updated_at`, so a row cannot be stamped with a bound that disagrees with the\n * instant it was created at. Deciding it HERE — below the store, below\n * interchange, below trusted import — is what makes \"no write stores a window\n * readable at no coordinate\" hold for every `GraphBackend` caller rather than for\n * the store paths one reviewer enumerated.\n */\nexport function buildInsertNode(\n  tables: Tables,\n  params: InsertNodeParams,\n  timestamp: string,\n): SQL {\n  const { nodes } = tables;\n  const propsJson = JSON.stringify(params.props);\n  const columns = nodeColumnList(nodes);\n\n  return sql`\n    INSERT INTO ${nodes} (${columns})\n    VALUES (\n      ${params.graphId}, ${params.kind}, ${params.id}, ${propsJson},\n      1, ${sqlNull(resolveStampedValidityLowerBound(params.validFrom, params.validTo, timestamp))}, ${sqlNull(params.validTo)},\n      ${timestamp}, ${timestamp}\n    )\n    RETURNING *\n  `;\n}\n\n/**\n * Builds an insert that reports an occupied node primary key as an ordinary\n * no-row result. This is deliberately a `DO NOTHING` rather than a caught\n * duplicate error: PostgreSQL marks a transaction failed after a constraint\n * violation, while this statement keeps the frame usable for the follow-up\n * live/tombstone read.\n */\nexport function buildInsertNodeIfAbsent(\n  tables: Tables,\n  params: InsertNodeParams,\n  timestamp: string,\n): SQL {\n  const { nodes } = tables;\n  const propsJson = JSON.stringify(params.props);\n  const columns = nodeColumnList(nodes);\n  const conflictColumns = sql.join(\n    [nodes.graphId, nodes.kind, nodes.id].map((column) =>\n      sql.identifier(column.name),\n    ),\n    sql`, `,\n  );\n\n  return sql`\n    INSERT INTO ${nodes} (${columns})\n    VALUES (\n      ${params.graphId}, ${params.kind}, ${params.id}, ${propsJson},\n      1, ${sqlNull(resolveStampedValidityLowerBound(params.validFrom, params.validTo, timestamp))}, ${sqlNull(params.validTo)},\n      ${timestamp}, ${timestamp}\n    )\n    ON CONFLICT (${conflictColumns}) DO NOTHING\n    RETURNING *\n  `;\n}\n\n/**\n * The one-statement schema-fenced counterpart to `buildInsertNodeIfAbsent`.\n * The caller supplies the dialect-owned lock clause: PostgreSQL uses `FOR\n * SHARE`; SQLite's `BEGIN IMMEDIATE` is already its transaction fence.\n */\nexport function buildInsertNodeIfAbsentWithSchemaFence(\n  tables: Tables,\n  params: InsertNodeParams,\n  timestamp: string,\n  schemaFence: SchemaWriteFenceParams,\n  schemaLockClause: SQL,\n): SQL {\n  const { nodes, schemaVersions } = tables;\n  const propsJson = JSON.stringify(params.props);\n  const columns = nodeColumnList(nodes);\n  const conflictColumns = sql.join(\n    [nodes.graphId, nodes.kind, nodes.id].map((column) =>\n      sql.identifier(column.name),\n    ),\n    sql`, `,\n  );\n\n  return sql`\n    INSERT INTO ${nodes} (${columns})\n    SELECT\n      ${params.graphId}, ${params.kind}, ${params.id}, ${propsJson},\n      1, ${sqlNull(resolveStampedValidityLowerBound(params.validFrom, params.validTo, timestamp))}, ${sqlNull(params.validTo)},\n      ${timestamp}, ${timestamp}\n    FROM (\n      SELECT ${schemaVersions.version}\n      FROM ${schemaVersions}\n      WHERE ${schemaVersions.graphId} = ${schemaFence.graphId}\n        AND ${schemaVersions.version} = ${schemaFence.expectedVersion}\n        AND ${schemaVersions.isActive} = TRUE\n      ${schemaLockClause}\n    ) AS \"schema_fence\"\n    WHERE TRUE\n    ON CONFLICT (${conflictColumns}) DO NOTHING\n    RETURNING *\n  `;\n}\n\n/** Schema-fenced fresh-id node insert; no identity conflict is expected. */\nexport function buildInsertNodeWithSchemaFence(\n  tables: Tables,\n  params: InsertNodeParams,\n  timestamp: string,\n  schemaFence: SchemaWriteFenceParams,\n  schemaLockClause: SQL,\n): SQL {\n  const { nodes, schemaVersions } = tables;\n  const propsJson = JSON.stringify(params.props);\n  const columns = nodeColumnList(nodes);\n\n  return sql`\n    INSERT INTO ${nodes} (${columns})\n    SELECT\n      ${params.graphId}, ${params.kind}, ${params.id}, ${propsJson},\n      1, ${sqlNull(resolveStampedValidityLowerBound(params.validFrom, params.validTo, timestamp))}, ${sqlNull(params.validTo)},\n      ${timestamp}, ${timestamp}\n    FROM (\n      SELECT ${schemaVersions.version}\n      FROM ${schemaVersions}\n      WHERE ${schemaVersions.graphId} = ${schemaFence.graphId}\n        AND ${schemaVersions.version} = ${schemaFence.expectedVersion}\n        AND ${schemaVersions.isActive} = TRUE\n      ${schemaLockClause}\n    ) AS \"schema_fence\"\n    RETURNING *\n  `;\n}\n\n/**\n * Builds an INSERT query for a node without RETURNING payload.\n */\nexport function buildInsertNodeNoReturn(\n  tables: Tables,\n  params: InsertNodeParams,\n  timestamp: string,\n): SQL {\n  const { nodes } = tables;\n  const propsJson = JSON.stringify(params.props);\n  const columns = nodeColumnList(nodes);\n\n  return sql`\n    INSERT INTO ${nodes} (${columns})\n    VALUES (\n      ${params.graphId}, ${params.kind}, ${params.id}, ${propsJson},\n      1, ${sqlNull(resolveStampedValidityLowerBound(params.validFrom, params.validTo, timestamp))}, ${sqlNull(params.validTo)},\n      ${timestamp}, ${timestamp}\n    )\n  `;\n}\n\n/**\n * Builds a batched INSERT query for nodes without RETURNING payload.\n */\nexport function buildInsertNodesBatch(\n  tables: Tables,\n  params: readonly InsertNodeParams[],\n  timestamp: string,\n): SQL {\n  const { nodes } = tables;\n  const columns = nodeColumnList(nodes);\n  const values = params.map((nodeParams) => {\n    const propsJson = JSON.stringify(nodeParams.props);\n    return sql`(${nodeParams.graphId}, ${nodeParams.kind}, ${nodeParams.id}, ${propsJson}, 1, ${sqlNull(resolveStampedValidityLowerBound(nodeParams.validFrom, nodeParams.validTo, timestamp))}, ${sqlNull(nodeParams.validTo)}, ${timestamp}, ${timestamp})`;\n  });\n\n  return sql`\n    INSERT INTO ${nodes} (${columns})\n    VALUES ${sql.join(values, sql`, `)}\n  `;\n}\n\n/**\n * Builds a batched INSERT query for nodes with RETURNING *.\n */\nexport function buildInsertNodesBatchReturning(\n  tables: Tables,\n  params: readonly InsertNodeParams[],\n  timestamp: string,\n): SQL {\n  const { nodes } = tables;\n  const columns = nodeColumnList(nodes);\n  const values = params.map((nodeParams) => {\n    const propsJson = JSON.stringify(nodeParams.props);\n    return sql`(${nodeParams.graphId}, ${nodeParams.kind}, ${nodeParams.id}, ${propsJson}, 1, ${sqlNull(resolveStampedValidityLowerBound(nodeParams.validFrom, nodeParams.validTo, timestamp))}, ${sqlNull(nodeParams.validTo)}, ${timestamp}, ${timestamp})`;\n  });\n\n  return sql`\n    INSERT INTO ${nodes} (${columns})\n    VALUES ${sql.join(values, sql`, `)}\n    RETURNING *\n  `;\n}\n\n/**\n * Builds one schema-fenced multi-row node insert with one minimal result per\n * inserted row. Callers need only the inserted count; returning node payloads\n * would waste transport bandwidth for a no-return Store operation.\n * The fence is a CTE so the same active schema row gates every VALUES member;\n * the dialect supplies the lock clause (`FOR SHARE` on PostgreSQL and empty on\n * SQLite, whose native writer boundary supplies the exclusion).\n */\nexport function buildInsertNodesBatchWithSchemaFence(\n  tables: Tables,\n  params: readonly InsertNodeParams[],\n  timestamp: string,\n  schemaFence: SchemaWriteFenceParams,\n  schemaLockClause: SQL,\n): SQL {\n  const { nodes, schemaVersions } = tables;\n  const columns = nodeColumnList(nodes);\n  const inputColumns = [\n    nodes.graphId,\n    nodes.kind,\n    nodes.id,\n    nodes.props,\n    nodes.version,\n    nodes.validFrom,\n    nodes.validTo,\n    nodes.createdAt,\n    nodes.updatedAt,\n  ];\n  const inputColumnList = sql.raw(\n    inputColumns\n      .map((column) => `\"${column.name.replaceAll('\"', '\"\"')}\"`)\n      .join(\", \"),\n  );\n  const inputSelect = sql.join(\n    inputColumns.map((column) =>\n      sql.raw(`\"input_rows\".\"${column.name.replaceAll('\"', '\"\"')}\"`),\n    ),\n    sql`, `,\n  );\n  const values = params.map((nodeParams) => {\n    const propsJson = JSON.stringify(nodeParams.props);\n    return sql`\n      (\n            ${castBoundValueForColumn(nodes.graphId, nodeParams.graphId)},\n            ${castBoundValueForColumn(nodes.kind, nodeParams.kind)},\n            ${castBoundValueForColumn(nodes.id, nodeParams.id)},\n            ${castBoundValueForColumn(nodes.props, propsJson)},\n            ${castBoundValueForColumn(nodes.version, 1)},\n            ${castBoundValueForColumn(nodes.validFrom, sqlNull(resolveStampedValidityLowerBound(nodeParams.validFrom, nodeParams.validTo, timestamp)))},\n            ${castBoundValueForColumn(nodes.validTo, sqlNull(nodeParams.validTo))},\n            ${castBoundValueForColumn(nodes.createdAt, timestamp)},\n            ${castBoundValueForColumn(nodes.updatedAt, timestamp)}\n          )\n    `;\n  });\n\n  return sql`\n    WITH \"schema_fence\" AS (\n      SELECT ${schemaVersions.version}\n      FROM ${schemaVersions}\n      WHERE ${schemaVersions.graphId} = ${schemaFence.graphId}\n        AND ${schemaVersions.version} = ${schemaFence.expectedVersion}\n        AND ${schemaVersions.isActive} = TRUE\n      ${schemaLockClause}\n    ), \"input_rows\" (${inputColumnList}) AS (\n      VALUES ${sql.join(values, sql`, `)}\n    )\n    INSERT INTO ${nodes} (${columns})\n    SELECT ${inputSelect}\n    FROM \"input_rows\"\n    CROSS JOIN \"schema_fence\"\n    RETURNING 1 AS \"inserted\"\n  `;\n}\n\n/**\n * Builds one schema-fenced atomic node batch statement.\n *\n * Generated identities use a plain INSERT. Caller identities use one\n * conflict-arbitrated upsert: tombstones are resurrected, while a live\n * incumbent assigns NULL to the NOT NULL `props` column. That deliberate\n * engine refusal is classified by the backend as a duplicate node identity,\n * and the native batch rolls back every earlier statement.\n */\nfunction buildAtomicNodeWriteBatchWithSchemaFence(\n  tables: Tables,\n  entries: readonly AtomicNodePostimageEntry[],\n  timestamp: string,\n  schemaFence: SchemaWriteFenceParams,\n  schemaLockClause: SQL,\n  resultMode: AtomicNodeBatchResultMode,\n  writeMode: \"create\" | \"replace\",\n  writeGate?: SQL,\n): SQL {\n  const firstEntry = entries[0];\n  if (firstEntry === undefined) {\n    throw new CompilerInvariantError(\n      \"An atomic node batch statement needs at least one entry.\",\n    );\n  }\n  if (\n    writeMode === \"create\" &&\n    (!isAtomicNodeBatchEntry(firstEntry) ||\n      !entries.every(\n        (entry) =>\n          isAtomicNodeBatchEntry(entry) &&\n          entry.idSource === firstEntry.idSource,\n      ))\n  ) {\n    throw new CompilerInvariantError(\n      \"An atomic node batch statement cannot mix identity sources.\",\n    );\n  }\n  const generated =\n    writeMode === \"create\" &&\n    isAtomicNodeBatchEntry(firstEntry) &&\n    firstEntry.idSource === \"generated\";\n  const { nodes, schemaVersions } = tables;\n  const columns = nodeColumnList(nodes);\n  const inputColumns = [\n    nodes.graphId,\n    nodes.kind,\n    nodes.id,\n    nodes.props,\n    nodes.version,\n    nodes.validFrom,\n    nodes.validTo,\n    nodes.createdAt,\n    nodes.updatedAt,\n  ];\n  const inputColumnList = sql.raw(\n    inputColumns\n      .map((column) => `\"${column.name.replaceAll('\"', '\"\"')}\"`)\n      .join(\", \"),\n  );\n  const inputSelect = sql.join(\n    inputColumns.map((column) =>\n      sql.raw(`\"input_rows\".\"${column.name.replaceAll('\"', '\"\"')}\"`),\n    ),\n    sql`, `,\n  );\n  const values = entries.map((entry) => {\n    const postimage = atomicNodeCreatePostimage(entry, timestamp);\n    return sql`\n      (\n        ${castBoundValueForColumn(nodes.graphId, postimage.graphId)},\n        ${castBoundValueForColumn(nodes.kind, postimage.kind)},\n        ${castBoundValueForColumn(nodes.id, postimage.id)},\n        ${castBoundValueForColumn(nodes.props, postimage.propsJson)},\n        ${castBoundValueForColumn(nodes.version, postimage.version)},\n        ${castBoundValueForColumn(nodes.validFrom, sqlNull(postimage.validFrom))},\n        ${castBoundValueForColumn(nodes.validTo, sqlNull(postimage.validTo))},\n        ${castBoundValueForColumn(nodes.createdAt, postimage.createdAt)},\n        ${castBoundValueForColumn(nodes.updatedAt, postimage.updatedAt)}\n      )\n    `;\n  });\n  const resultClause =\n    resultMode === \"rows\" ? sql`RETURNING *` : sql`RETURNING 1 AS \"inserted\"`;\n  const conflictColumns = sql.join(\n    [nodes.graphId, nodes.kind, nodes.id].map((column) =>\n      sql.identifier(column.name),\n    ),\n    sql`, `,\n  );\n  const targetAlias = \"atomic_node_target\";\n  const currentVersion = qualifiedColumn(targetAlias, nodes.version);\n  const currentValidFrom = qualifiedColumn(targetAlias, nodes.validFrom);\n  const currentValidTo = qualifiedColumn(targetAlias, nodes.validTo);\n  const currentDeletedAt = qualifiedColumn(targetAlias, nodes.deletedAt);\n  const currentUpdatedAt = qualifiedColumn(targetAlias, nodes.updatedAt);\n  const excluded = (column: Readonly<{ name: string }>): SQL =>\n    sql.raw(`\"excluded\".\"${column.name.replaceAll('\"', '\"\"')}\"`);\n  const resurrection = sql`\n    ON CONFLICT (${conflictColumns}) DO UPDATE SET\n      ${quotedColumn(nodes.props)} = CASE\n        WHEN ${currentDeletedAt} IS NULL THEN NULL\n        ELSE ${excluded(nodes.props)}\n      END,\n      ${quotedColumn(nodes.version)} = CASE\n        WHEN ${currentDeletedAt} IS NULL THEN ${currentVersion}\n        ELSE ${currentVersion} + 1\n      END,\n      ${quotedColumn(nodes.validFrom)} = CASE\n        WHEN ${currentDeletedAt} IS NULL THEN ${currentValidFrom}\n        ELSE ${excluded(nodes.validFrom)}\n      END,\n      ${quotedColumn(nodes.validTo)} = CASE\n        WHEN ${currentDeletedAt} IS NULL THEN ${currentValidTo}\n        ELSE ${excluded(nodes.validTo)}\n      END,\n      ${quotedColumn(nodes.deletedAt)} = CASE\n        WHEN ${currentDeletedAt} IS NULL THEN ${currentDeletedAt}\n        ELSE NULL\n      END,\n      ${quotedColumn(nodes.updatedAt)} = CASE\n        WHEN ${currentDeletedAt} IS NULL THEN ${currentUpdatedAt}\n        ELSE ${excluded(nodes.updatedAt)}\n      END\n  `;\n  const replacement = sql`\n    ON CONFLICT (${conflictColumns}) DO UPDATE SET\n      ${quotedColumn(nodes.props)} = ${excluded(nodes.props)},\n      ${quotedColumn(nodes.version)} = ${currentVersion} + 1,\n      ${quotedColumn(nodes.validFrom)} = CASE\n        WHEN ${currentDeletedAt} IS NULL THEN ${currentValidFrom}\n        ELSE ${excluded(nodes.validFrom)}\n      END,\n      ${quotedColumn(nodes.validTo)} = CASE\n        WHEN ${currentDeletedAt} IS NULL THEN ${currentValidTo}\n        ELSE ${excluded(nodes.validTo)}\n      END,\n      ${quotedColumn(nodes.deletedAt)} = NULL,\n      ${quotedColumn(nodes.updatedAt)} = ${excluded(nodes.updatedAt)}\n  `;\n\n  return sql`\n    WITH \"schema_fence\" AS (\n      SELECT ${schemaVersions.version}\n      FROM ${schemaVersions}\n      WHERE ${schemaVersions.graphId} = ${schemaFence.graphId}\n        AND ${schemaVersions.version} = ${schemaFence.expectedVersion}\n        AND ${schemaVersions.isActive} = TRUE\n      ${schemaLockClause}\n    ), \"input_rows\" (${inputColumnList}) AS (\n      VALUES ${sql.join(values, sql`, `)}\n    )\n    INSERT INTO ${nodes} AS ${sql.identifier(targetAlias)} (${columns})\n    SELECT ${inputSelect}\n    FROM \"input_rows\"\n    CROSS JOIN \"schema_fence\"\n    ${\n      // SQLite needs a WHERE clause to distinguish this INSERT ... SELECT's\n      // trailing UPSERT clause from a join constraint.\n      writeGate === undefined ?\n        generated ? sql.empty()\n        : sql`WHERE TRUE`\n      : sql`WHERE ${writeGate}`\n    }\n    ${\n      writeMode === \"replace\" ? replacement\n      : generated ? sql.empty()\n      : resurrection\n    }\n    ${resultClause}\n  `;\n}\n\n/** Schema-fenced create batch with caller-id resurrection semantics. */\nexport function buildAtomicNodeBatchWithSchemaFence(\n  tables: Tables,\n  entries: readonly AtomicNodeBatchEntry[],\n  timestamp: string,\n  schemaFence: SchemaWriteFenceParams,\n  schemaLockClause: SQL,\n  resultMode: AtomicNodeBatchResultMode,\n  writeGate?: SQL,\n): SQL {\n  return buildAtomicNodeWriteBatchWithSchemaFence(\n    tables,\n    entries,\n    timestamp,\n    schemaFence,\n    schemaLockClause,\n    resultMode,\n    \"create\",\n    writeGate,\n  );\n}\n\n/** Schema-fenced blind replacement: create missing, replace live, revive tombstones. */\nexport function buildAtomicNodeReplacementBatchWithSchemaFence(\n  tables: Tables,\n  entries: readonly AtomicNodeReplacementEntry[],\n  timestamp: string,\n  schemaFence: SchemaWriteFenceParams,\n  schemaLockClause: SQL,\n  writeGate?: SQL,\n): SQL {\n  return buildAtomicNodeWriteBatchWithSchemaFence(\n    tables,\n    entries,\n    timestamp,\n    schemaFence,\n    schemaLockClause,\n    \"rows\",\n    \"replace\",\n    writeGate,\n  );\n}\n\n/**\n * Builds a SELECT query to get a node by kind and id.\n * Returns the node regardless of deletion status (store layer handles filtering).\n */\nexport function buildGetNode(\n  tables: Tables,\n  graphId: string,\n  kind: string,\n  id: string,\n): SQL {\n  const { nodes } = tables;\n\n  return sql`\n    SELECT * FROM ${nodes}\n    WHERE ${nodes.graphId} = ${graphId}\n      AND ${nodes.kind} = ${kind}\n      AND ${nodes.id} = ${id}\n  `;\n}\n\n/**\n * Builds a SELECT query to get multiple nodes by kind and ids.\n * Returns nodes regardless of deletion status (store layer handles filtering).\n */\nexport function buildGetNodes(\n  tables: Tables,\n  graphId: string,\n  kind: string,\n  ids: readonly string[],\n): SQL {\n  const { nodes } = tables;\n\n  return sql`\n    SELECT * FROM ${nodes}\n    WHERE ${nodes.graphId} = ${graphId}\n      AND ${nodes.kind} = ${kind}\n      AND ${nodes.id} IN (${sql.join(\n        ids.map((id) => sql`${id}`),\n        sql`, `,\n      )})\n  `;\n}\n\n/**\n * Builds an UPDATE query for a node.\n * Uses raw column names in SET clause (required by SQL syntax).\n */\nexport function buildUpdateNode(\n  tables: Tables,\n  params: UpdateNodeParams,\n  timestamp: string,\n): SQL {\n  const { nodes } = tables;\n  const propsJson = JSON.stringify(params.props);\n\n  const setParts: SQL[] = [\n    sql`${quotedColumn(nodes.props)} = ${propsJson}`,\n    sql`${quotedColumn(nodes.updatedAt)} = ${timestamp}`,\n  ];\n\n  if (params.incrementVersion) {\n    setParts.push(\n      sql`${quotedColumn(nodes.version)} = ${quotedColumn(nodes.version)} + 1`,\n    );\n  }\n\n  // A resurrection RESETS the window: `valid_from` is rewritten rather than\n  // retained (an edge retains it — see `buildUpdateEdge`), so this leg STAMPS a\n  // bound when the caller states none, and it makes that choice through the same\n  // owner every insert builder uses. Two consequences, both load-bearing. A\n  // resurrection carrying only a past `validTo` — which `create` on a tombstoned\n  // id reaches with nothing stated — stores NO lower bound instead of a window\n  // readable at no coordinate, whoever called the backend (issue #407). And\n  // `timestamp` remains only the fallback: the operations layer passes the\n  // instant its inverted-window guard measured against as an explicit\n  // `validFrom`, so the bound this stores is the bound that was checked rather\n  // than a strictly later sample the guard never saw (issue #413).\n  if (params.clearDeleted) {\n    setParts.push(\n      sql`${quotedColumn(nodes.validFrom)} = ${sqlNull(resolveStampedValidityLowerBound(params.validFrom, params.validTo, timestamp))}`,\n      sql`${quotedColumn(nodes.validTo)} = ${sqlNull(params.validTo)}`,\n    );\n  } else if (params.clearValidTo === true) {\n    setParts.push(sql`${quotedColumn(nodes.validTo)} = NULL`);\n  } else if (params.validTo !== undefined) {\n    setParts.push(sql`${quotedColumn(nodes.validTo)} = ${params.validTo}`);\n  }\n\n  if (params.clearDeleted) {\n    setParts.push(sql`${quotedColumn(nodes.deletedAt)} = NULL`);\n  }\n\n  const setClause = sql.join(setParts, sql`, `);\n  // The bound the CALLER read, when it read one — see\n  // `UpdateNodeParams.expectedValidFrom`. Emitted on both legs: a resurrecting\n  // upsert that decided from the tombstone's window is fenced on the same terms\n  // as a live-row update.\n  const expectedValidFrom = expectedValidFromPredicate(\n    nodes.validFrom,\n    params.expectedValidFrom,\n  );\n\n  if (params.clearDeleted) {\n    return sql`\n      UPDATE ${nodes}\n      SET ${setClause}\n      WHERE ${nodes.graphId} = ${params.graphId}\n        AND ${nodes.kind} = ${params.kind}\n        AND ${nodes.id} = ${params.id}${expectedValidFrom}\n        AND ${nodes.deletedAt} IS NOT NULL\n      RETURNING *\n    `;\n  }\n\n  return sql`\n    UPDATE ${nodes}\n    SET ${setClause}\n    WHERE ${nodes.graphId} = ${params.graphId}\n      AND ${nodes.kind} = ${params.kind}\n      AND ${nodes.id} = ${params.id}${expectedValidFrom}\n      AND ${nodes.deletedAt} IS NULL\n    RETURNING *\n  `;\n}\n\n/**\n * Builds one guarded set update for distinct, live node after-images.\n * The preimage version predicates are evaluated as one count gate, so either\n * every resolved row still matches or the statement updates none of them.\n */\nexport function buildAtomicNodeResolvedUpdateBatch(\n  tables: Tables,\n  entries: readonly AtomicNodeResolvedUpdateEntry[],\n  timestamp: string,\n  schemaFence: SchemaWriteFenceParams,\n  schemaLockClause: SQL,\n): SQL {\n  const { nodes, schemaVersions } = tables;\n  const first = entries[0];\n  if (first === undefined) return sql`SELECT 1 WHERE FALSE`;\n  const firstPostimage = atomicNodeUpdatePostimage(first, timestamp);\n  const postimages = [\n    firstPostimage,\n    ...entries\n      .slice(1)\n      .map((entry) => atomicNodeUpdatePostimage(entry, timestamp)),\n  ];\n  const propsCases = postimages.map(\n    (postimage) =>\n      sql`WHEN ${postimage.id} THEN ${castBoundValueForColumn(nodes.props, postimage.propsJson)}`,\n  );\n  const expectedRows = entries.map(\n    (entry) =>\n      sql`(${nodes.id} = ${entry.id} AND ${nodes.version} = ${entry.expectedVersion})`,\n  );\n\n  return sql`\n    WITH \"schema_fence\" AS (\n      SELECT ${schemaVersions.version}\n      FROM ${schemaVersions}\n      WHERE ${schemaVersions.graphId} = ${schemaFence.graphId}\n        AND ${schemaVersions.version} = ${schemaFence.expectedVersion}\n        AND ${schemaVersions.isActive} = TRUE\n      ${schemaLockClause}\n    )\n    UPDATE ${nodes}\n    SET ${quotedColumn(nodes.props)} = CASE ${nodes.id}\n          ${sql.join(propsCases, sql` `)}\n          ELSE ${nodes.props}\n        END,\n        ${quotedColumn(nodes.updatedAt)} = ${firstPostimage.updatedAt},\n        ${quotedColumn(nodes.version)} = ${nodes.version} + ${sql.raw(String(NODE_VERSION_INCREMENT))}\n    WHERE ${nodes.graphId} = ${first.graphId}\n      AND ${nodes.kind} = ${first.kind}\n      AND ${nodes.deletedAt} IS NULL\n      AND ${nodes.id} IN (${sql.join(\n        entries.map((entry) => sql`${entry.id}`),\n        sql`, `,\n      )})\n      AND (\n        SELECT COUNT(*)\n        FROM ${nodes}\n        CROSS JOIN \"schema_fence\"\n        WHERE ${nodes.graphId} = ${first.graphId}\n          AND ${nodes.kind} = ${first.kind}\n          AND ${nodes.deletedAt} IS NULL\n          AND (${sql.join(expectedRows, sql` OR `)})\n      ) = ${entries.length}\n    RETURNING *\n  `;\n}\n\n/**\n * Builds the portable half of a resolved update batch. Unlike the atomic\n * program form this deliberately has no schema fence: its caller already owns\n * the graph write transaction and may be capture-wrapped. The version count\n * gate still makes every replacement one all-or-nothing row transition.\n */\nexport function buildResolvedNodeUpdateBatch(\n  tables: Tables,\n  params: ResolvedNodeUpdateBatchParams,\n  timestamp: string,\n  rowLockClause: SQL,\n): SQL {\n  const entries = params.entries;\n  const first = entries[0];\n  if (first === undefined) return sql`SELECT 1 WHERE FALSE`;\n  const expected = sql.identifier(\"expected_updates\");\n  const eligible = sql.identifier(\"eligible_updates\");\n  const id = sql.identifier(\"id\");\n  const props = sql.identifier(\"props\");\n  const expectedVersion = sql.identifier(\"expected_version\");\n  const expectedColumns = sql.join([id, props, expectedVersion], sql`, `);\n  const expectedRows = entries.map(\n    (entry) =>\n      sql`(${castBoundValueForColumn(tables.nodes.id, entry.id)}, ${castBoundValueForColumn(tables.nodes.props, JSON.stringify(entry.props))}, ${castBoundValueForColumn(tables.nodes.version, entry.expectedVersion)})`,\n  );\n  return sql`\n    WITH ${expected} (${expectedColumns}) AS (\n      VALUES ${sql.join(expectedRows, sql`, `)}\n    ),\n    ${eligible} (${id}) AS (\n      SELECT ${expected}.${id}\n      FROM ${tables.nodes}\n      JOIN ${expected}\n        ON ${tables.nodes.id} = ${expected}.${id}\n       AND ${tables.nodes.version} = ${expected}.${expectedVersion}\n      WHERE ${tables.nodes.graphId} = ${first.graphId}\n        AND ${tables.nodes.kind} = ${first.kind}\n        AND ${tables.nodes.deletedAt} IS NULL\n      ORDER BY ${tables.nodes.id}\n      ${rowLockClause}\n    )\n    UPDATE ${tables.nodes}\n    SET ${quotedColumn(tables.nodes.props)} = (\n          SELECT ${expected}.${props}\n          FROM ${expected}\n          WHERE ${expected}.${id} = ${tables.nodes.id}\n        ),\n        ${quotedColumn(tables.nodes.updatedAt)} = ${timestamp},\n        ${quotedColumn(tables.nodes.version)} = ${tables.nodes.version} + ${sql.raw(String(NODE_VERSION_INCREMENT))}\n    WHERE ${tables.nodes.graphId} = ${first.graphId}\n      AND ${tables.nodes.kind} = ${first.kind}\n      AND ${tables.nodes.deletedAt} IS NULL\n      AND ${tables.nodes.id} IN (SELECT ${id} FROM ${eligible})\n      AND EXISTS (\n        SELECT 1\n        FROM ${expected}\n        WHERE ${expected}.${id} = ${tables.nodes.id}\n          AND ${expected}.${expectedVersion} = ${tables.nodes.version}\n      )\n      AND (SELECT COUNT(*) FROM ${eligible}) = ${entries.length}\n    RETURNING *\n  `;\n}\n\n/**\n * Terminal database assertion for an atomic resolved node mutation set.\n *\n * Every earlier slot is schema-fenced, but a guarded update can legitimately\n * return no rows when one preimage moved. The transport cannot discover that\n * after committing: this final slot rechecks the complete postimage set and\n * deliberately violates the node table's NOT NULL created_at column when it is\n * incomplete or the fence is stale, forcing the native batch to roll every\n * preceding row and projection statement back. The refusal row is built from\n * expected postimage constants rather than a created database row, so the same\n * assertion protects create-only, update-only, and mixed programs even when a\n * stale fence prevented every row mutation.\n */\nexport function buildAssertAtomicNodeMutationPostimages(\n  tables: Tables,\n  creates: readonly AtomicNodePostimageEntry[],\n  updates: readonly AtomicNodeResolvedUpdateEntry[],\n  timestamp: string,\n  schemaFence: SchemaWriteFenceParams,\n): SQL {\n  const { nodes, schemaVersions } = tables;\n  const entries = [\n    ...creates.map((entry) => atomicNodeCreatePostimage(entry, timestamp)),\n    ...updates.map((entry) => atomicNodeUpdatePostimage(entry, timestamp)),\n  ];\n  const first = entries[0];\n  if (first === undefined) return sql`SELECT 1 WHERE FALSE`;\n  if (entries.some((entry) => entry.graphId !== schemaFence.graphId)) {\n    throw new CompilerInvariantError(\n      \"An atomic node postimage assertion cannot span graph fences.\",\n    );\n  }\n  const expectedByKind = new Map<\n    string,\n    (\n      | Readonly<{\n          kind: \"create\";\n          postimage: ReturnType<typeof atomicNodeCreatePostimage>;\n        }>\n      | Readonly<{\n          kind: \"update\";\n          postimage: ReturnType<typeof atomicNodeUpdatePostimage>;\n        }>\n    )[]\n  >();\n  for (const entry of creates) {\n    const postimage = atomicNodeCreatePostimage(entry, timestamp);\n    const expected = expectedByKind.get(postimage.kind) ?? [];\n    expected.push({ kind: \"create\", postimage });\n    expectedByKind.set(postimage.kind, expected);\n  }\n  for (const entry of updates) {\n    const postimage = atomicNodeUpdatePostimage(entry, timestamp);\n    const expected = expectedByKind.get(postimage.kind) ?? [];\n    expected.push({ kind: \"update\", postimage });\n    expectedByKind.set(postimage.kind, expected);\n  }\n  const expectedKinds = [...expectedByKind].map(([kind, expected]) => {\n    const expectedRows = expected.map(\n      ({ kind: operation, postimage }) => sql`\n        (\n          ${nodes.id} = ${postimage.id}\n          AND ${nodes.props} = ${castBoundValueForColumn(nodes.props, postimage.propsJson)}\n          ${\n            operation === \"update\" ?\n              sql`AND ${nodes.version} = ${postimage.version}`\n            : sql.empty()\n          }\n          AND ${nodes.updatedAt} = ${postimage.updatedAt}\n        )\n      `,\n    );\n    return sql`(${nodes.kind} = ${kind} AND (${sql.join(expectedRows, sql` OR `)}))`;\n  });\n\n  return sql`\n    INSERT INTO ${nodes} (${nodeColumnList(nodes)})\n    SELECT\n      ${first.graphId},\n      ${first.kind},\n      ${first.id},\n      ${castBoundValueForColumn(nodes.props, first.propsJson)},\n      ${first.version},\n      NULL,\n      NULL,\n      NULL,\n      ${first.updatedAt}\n    WHERE NOT EXISTS (\n        SELECT 1\n        FROM ${schemaVersions}\n        WHERE ${schemaVersions.graphId} = ${schemaFence.graphId}\n          AND ${schemaVersions.version} = ${schemaFence.expectedVersion}\n          AND ${schemaVersions.isActive} = TRUE\n      ) OR (\n        SELECT COUNT(*)\n        FROM ${nodes}\n        WHERE ${nodes.graphId} = ${schemaFence.graphId}\n          AND ${nodes.deletedAt} IS NULL\n          AND (${sql.join(expectedKinds, sql` OR `)})\n      ) <> ${entries.length}\n  `;\n}\n\n/**\n * Terminal durable-marker assertion for atomic node projections.\n *\n * A cold backend resolves marker signatures locally, then this statement\n * proves their exact database rows inside the same atomic submission as the\n * node and projection writes. Missing, stale, failed, or unmaterialized\n * evidence deliberately writes a null signature through the marker's own\n * conflict target, forcing a distinct NOT NULL refusal and rolling the\n * complete transport submission back.\n */\nexport function buildAssertAtomicNodeProjectionEvidence(\n  tables: Tables,\n  timestamp: string,\n  evidence: readonly AtomicContributionEvidence[],\n): SQL {\n  const { contributionMaterializations } = tables;\n  const first = evidence[0];\n  if (first === undefined) {\n    return sql`SELECT 1 WHERE FALSE`;\n  }\n  // Deployment-scoped contributions are attested under the deployment\n  // marker key while the graph's logical activation remains graph-scoped.\n  // One atomic assertion may therefore intentionally contain marker rows\n  // from two graph-id namespaces.\n  const expectedMarkers = evidence.map(\n    (entry) => sql`\n      (\n        ${contributionMaterializations.graphId} = ${entry.graphId}\n        AND ${contributionMaterializations.logicalName} = ${entry.logicalName}\n        AND ${contributionMaterializations.owner} = ${entry.owner}\n        AND ${contributionMaterializations.tableName} = ${entry.tableName}\n        AND ${contributionMaterializations.signature} = ${entry.signature}\n      )\n    `,\n  );\n\n  return sql`\n    INSERT INTO ${contributionMaterializations} (\n      ${sql.identifier(contributionMaterializations.graphId.name)},\n      ${sql.identifier(contributionMaterializations.logicalName.name)},\n      ${sql.identifier(contributionMaterializations.owner.name)},\n      ${sql.identifier(contributionMaterializations.tableName.name)},\n      ${sql.identifier(contributionMaterializations.signature.name)},\n      ${sql.identifier(contributionMaterializations.materializedAt.name)},\n      ${sql.identifier(contributionMaterializations.lastAttemptedAt.name)},\n      ${sql.identifier(contributionMaterializations.lastError.name)}\n    )\n    SELECT\n      ${first.graphId},\n      ${first.logicalName},\n      ${first.owner},\n      ${first.tableName},\n      NULL,\n      NULL,\n      ${castBoundValueForColumn(\n        contributionMaterializations.lastAttemptedAt,\n        timestamp,\n      )},\n      NULL\n    WHERE (\n      SELECT COUNT(*)\n      FROM ${contributionMaterializations}\n      WHERE (${sql.join(expectedMarkers, sql` OR `)})\n        AND ${contributionMaterializations.materializedAt} IS NOT NULL\n        AND ${contributionMaterializations.lastError} IS NULL\n    ) <> ${evidence.length}\n    ON CONFLICT (\n      ${sql.identifier(contributionMaterializations.graphId.name)},\n      ${sql.identifier(contributionMaterializations.logicalName.name)},\n      ${sql.identifier(contributionMaterializations.owner.name)},\n      ${sql.identifier(contributionMaterializations.tableName.name)}\n    ) DO UPDATE SET\n      ${sql.identifier(contributionMaterializations.signature.name)} = NULL\n  `;\n}\n\n/** Reads the asserted rows only while the same schema fence remains current. */\nexport function buildReadAtomicNodeMutationPostimages(\n  tables: Tables,\n  graphId: string,\n  kind: string,\n  ids: readonly string[],\n  schemaFence: SchemaWriteFenceParams,\n): SQL {\n  const { nodes, schemaVersions } = tables;\n  return sql`\n    SELECT ${nodes}.*\n    FROM ${nodes}\n    CROSS JOIN ${schemaVersions}\n    WHERE ${nodes.graphId} = ${graphId}\n      AND ${nodes.kind} = ${kind}\n      AND ${nodes.id} IN (${sql.join(\n        ids.map((id) => sql`${id}`),\n        sql`, `,\n      )})\n      AND ${schemaVersions.graphId} = ${schemaFence.graphId}\n      AND ${schemaVersions.version} = ${schemaFence.expectedVersion}\n      AND ${schemaVersions.isActive} = TRUE\n  `;\n}\n\nfunction buildNodeExpectationPredicate(\n  adapter: DialectAdapter,\n  propsColumn: SqlFragment,\n  property: string,\n  expectation: NodePropertyExpectation,\n): SqlFragment {\n  const pointer = jsonPointer([property]);\n  if (expectation.kind === \"absent\") {\n    return portableSql`NOT ${adapter.jsonHasPath(propsColumn, pointer)}`;\n  }\n  return adapter.jsonScalarPathEquals(\n    propsColumn,\n    pointer,\n    expectation.value,\n  );\n}\n\n/**\n * Builds one set-based update over candidate ids selected by the shared query\n * compiler. The outer graph/kind/live-row predicates are deliberate write\n * fences and must not be delegated solely to the candidate subquery.\n */\nexport function buildUpdateNodeSet(\n  tables: Tables,\n  dialect: \"sqlite\" | \"postgres\",\n  params: CompareAndSetNodeParams | UpdateNodeSetParams,\n  timestamp: string,\n): SQL {\n  const { nodes } = tables;\n  const adapter = getDialect(dialect);\n  const patchedProps = toDrizzleSql(\n    adapter.jsonSetProperties(\n      portableSql.identifier(nodes.props.name),\n      params.patch,\n      params.unsetProperties ?? [],\n    ),\n    dialect,\n  );\n  const candidateIds = toDrizzleSql(params.candidateIds, dialect);\n  const candidateIdColumn = toDrizzleSql(\n    portableSql.identifier(params.candidateIdColumn),\n    dialect,\n  );\n  const propsColumn = portableSql.identifier(nodes.props.name);\n  const expectedPredicates =\n    params.operation === \"compareAndSet\" ?\n      Object.entries(params.expected).map(([property, expectation]) =>\n        toDrizzleSql(\n          buildNodeExpectationPredicate(\n            adapter,\n            propsColumn,\n            property,\n            expectation,\n          ),\n          dialect,\n        ),\n      )\n    : [];\n  const expectedPredicate =\n    expectedPredicates.length === 0 ?\n      sql.empty()\n    : sql` AND ${sql.join(expectedPredicates, sql` AND `)}`;\n\n  return sql`\n    UPDATE ${nodes}\n    SET ${quotedColumn(nodes.props)} = ${patchedProps},\n        ${quotedColumn(nodes.updatedAt)} = ${timestamp},\n        ${quotedColumn(nodes.version)} = ${quotedColumn(nodes.version)} + 1\n    WHERE ${nodes.graphId} = ${params.graphId}\n      AND ${nodes.kind} = ${params.kind}\n      AND ${nodes.deletedAt} IS NULL\n      ${expectedPredicate}\n      AND ${nodes.id} IN (\n        SELECT ${candidateIdColumn}\n        FROM (${candidateIds}) AS tg_set_candidates\n      )\n    RETURNING *\n  `;\n}\n\n/**\n * Builds a soft DELETE query for a node (sets deleted_at).\n * Uses raw column name in SET clause.\n */\nexport function buildDeleteNode(\n  tables: Tables,\n  params: DeleteNodeParams,\n  timestamp: string,\n): SQL {\n  const { nodes } = tables;\n\n  return sql`\n    UPDATE ${nodes}\n    SET ${quotedColumn(nodes.deletedAt)} = ${timestamp}\n    WHERE ${nodes.graphId} = ${params.graphId}\n      AND ${nodes.kind} = ${params.kind}\n      AND ${nodes.id} = ${params.id}\n      AND ${nodes.deletedAt} IS NULL\n  `;\n}\n\n/**\n * Builds a closed, schema-fenced soft delete for claim- and projection-free\n * nodes whose delete behavior is `restrict`.\n *\n * A connected live edge assigns NULL to the NOT NULL props column, aborting\n * the whole native program. Missing and already-tombstoned ids remain no-ops.\n */\nexport function buildAtomicNodeDeleteBatchWithSchemaFence(\n  tables: Tables,\n  input: AtomicNodeDeleteBatchInput,\n  timestamp: string,\n  schemaLockClause: SQL,\n): SQL {\n  const { edges, nodes, schemaVersions } = tables;\n\n  return sql`\n    WITH \"schema_fence\" AS (\n      SELECT ${schemaVersions.version}\n      FROM ${schemaVersions}\n      WHERE ${schemaVersions.graphId} = ${input.schemaFence.graphId}\n        AND ${schemaVersions.version} = ${input.schemaFence.expectedVersion}\n        AND ${schemaVersions.isActive} = TRUE\n      ${schemaLockClause}\n    )\n    UPDATE ${nodes}\n    SET ${quotedColumn(nodes.deletedAt)} = ${timestamp},\n        ${quotedColumn(nodes.props)} = CASE\n          WHEN EXISTS (\n            SELECT 1\n            FROM ${edges}\n            WHERE ${edges.graphId} = ${nodes.graphId}\n              AND ${edges.deletedAt} IS NULL\n              AND (\n                (${edges.fromKind} = ${nodes.kind} AND ${edges.fromId} = ${nodes.id})\n                OR (${edges.toKind} = ${nodes.kind} AND ${edges.toId} = ${nodes.id})\n              )\n          ) THEN NULL\n          ELSE ${nodes.props}\n        END\n    WHERE ${nodes.graphId} = ${input.graphId}\n      AND ${nodes.kind} = ${input.kind}\n      AND ${nodes.id} IN (${sql.join(\n        input.ids.map((id) => sql`${id}`),\n        sql`, `,\n      )})\n      AND ${nodes.deletedAt} IS NULL\n      AND EXISTS (SELECT 1 FROM \"schema_fence\")\n    RETURNING ${nodes.id}\n  `;\n}\n\n/**\n * Builds a hard DELETE query for a node (permanent removal).\n */\nexport function buildHardDeleteNode(\n  tables: Tables,\n  params: HardDeleteNodeParams,\n): SQL {\n  const { nodes } = tables;\n\n  return sql`\n    DELETE FROM ${nodes}\n    WHERE ${nodes.graphId} = ${params.graphId}\n      AND ${nodes.kind} = ${params.kind}\n      AND ${nodes.id} = ${params.id}\n  `;\n}\n","import { getTableName, type SQL, sql } from \"drizzle-orm\";\n\nimport {\n  type ClaimOwnerColumnNames,\n  claimOwnerMatchesSql,\n} from \"../../../store/claims/axis\";\nimport type {\n  CheckUniqueBatchParams,\n  CheckUniqueParams,\n  DeleteUniqueParams,\n  HardDeleteUniquesByNodeIdsParams,\n  InsertUniqueParams,\n  SqlDialect,\n} from \"../../types\";\nimport {\n  existingColumn as existingColumnFor,\n  quotedColumn,\n  type Tables,\n} from \"./shared\";\n\ntype InsertUniqueDialectBuilder = (\n  tables: Tables,\n  params: InsertUniqueParams,\n) => SQL;\n\n/** Adapts Drizzle's generic SQL tag to the representation-neutral claim owner. */\nfunction drizzleSqlTag(\n  strings: TemplateStringsArray,\n  ...expressions: readonly SQL[]\n): SQL {\n  return sql(strings, ...expressions);\n}\n\n/**\n * The owner columns of the uniques relation, by physical column name — the\n * one owner {@link claimOwnerMatchesSql} is handed instead of a re-spelled\n * qualification decision.\n */\nfunction ownerColumnNames(uniques: Tables[\"uniques\"]): ClaimOwnerColumnNames {\n  return {\n    nodeId: uniques.nodeId.name,\n    concreteKind: uniques.concreteKind.name,\n  };\n}\n\n/**\n * The proposed row's owner columns, as bound values — the single-row builders'\n * rendering of the `proposed` side of {@link claimOwnerMatchesSql}.\n */\nfunction boundOwnerColumn(\n  uniques: Tables[\"uniques\"],\n  params: InsertUniqueParams,\n): (columnName: string) => SQL {\n  return (columnName) =>\n    columnName === uniques.nodeId.name ?\n      sql`${params.nodeId}`\n    : sql`${params.concreteKind}`;\n}\n\n/**\n * The batch builder's rendering of the `proposed` side of\n * {@link claimOwnerMatchesSql}: the row `ON CONFLICT DO UPDATE` is about to\n * write, read back off `excluded`.\n */\nfunction excludedColumnByName(columnName: string): SQL {\n  return sql`excluded.${quotedColumn({ name: columnName })}`;\n}\n\nfunction excludedColumn(column: Readonly<{ name: string }>): SQL {\n  return excludedColumnByName(column.name);\n}\n\n/**\n * Builds an INSERT query for a uniqueness claim (SQLite).\n *\n * Uses ON CONFLICT with a conditional update that only succeeds if:\n * 1. The existing claim belongs to the same node — the OWNER PAIR\n *    `(concrete_kind, node_id)`, because ids are unique only per kind — OR\n * 2. The existing claim is soft-deleted (can be reused)\n *\n * If a different live node holds this key, the conflict handler leaves the\n * row unchanged, and RETURNING shows the conflicting owner.\n */\nfunction buildInsertUniqueSqlite(\n  tables: Tables,\n  params: InsertUniqueParams,\n): SQL {\n  const { uniques } = tables;\n\n  const columns = sql.raw(\n    `\"${uniques.graphId.name}\", \"${uniques.nodeKind.name}\", \"${uniques.constraintName.name}\", \"${uniques.key.name}\", \"${uniques.nodeId.name}\", \"${uniques.concreteKind.name}\", \"${uniques.deletedAt.name}\"`,\n  );\n  const conflictColumns = sql.raw(\n    `\"${uniques.graphId.name}\", \"${uniques.nodeKind.name}\", \"${uniques.constraintName.name}\", \"${uniques.key.name}\"`,\n  );\n\n  const tableName = getTableName(uniques);\n  const existingColumnByName = (columnName: string): SQL =>\n    existingColumnFor(\"sqlite\", tableName, columnName);\n  const existingColumn = (column: Readonly<{ name: string }>) =>\n    existingColumnByName(column.name);\n\n  const ownerMatches = claimOwnerMatchesSql(\n    drizzleSqlTag,\n    (columnName) => existingColumnByName(columnName),\n    boundOwnerColumn(uniques, params),\n    ownerColumnNames(uniques),\n  );\n\n  return sql`\n    INSERT INTO ${uniques} (${columns})\n    VALUES (\n      ${params.graphId}, ${params.nodeKind}, ${params.constraintName},\n      ${params.key}, ${params.nodeId}, ${params.concreteKind}, ${sql.raw(\"NULL\")}\n    )\n    ON CONFLICT (${conflictColumns})\n    DO UPDATE SET\n      ${quotedColumn(uniques.nodeId)} = CASE\n        WHEN ${ownerMatches} THEN ${params.nodeId}\n        WHEN ${existingColumn(uniques.deletedAt)} IS NOT NULL THEN ${params.nodeId}\n        ELSE ${existingColumn(uniques.nodeId)}\n      END,\n      ${quotedColumn(uniques.concreteKind)} = CASE\n        WHEN ${ownerMatches} THEN ${params.concreteKind}\n        WHEN ${existingColumn(uniques.deletedAt)} IS NOT NULL THEN ${params.concreteKind}\n        ELSE ${existingColumn(uniques.concreteKind)}\n      END,\n      ${quotedColumn(uniques.deletedAt)} = CASE\n        WHEN ${ownerMatches} THEN NULL\n        WHEN ${existingColumn(uniques.deletedAt)} IS NOT NULL THEN NULL\n        ELSE ${existingColumn(uniques.deletedAt)}\n      END\n    RETURNING\n      ${quotedColumn(uniques.nodeId)} as node_id,\n      ${quotedColumn(uniques.concreteKind)} as concrete_kind\n  `;\n}\n\n/**\n * Builds an INSERT query for a uniqueness claim (PostgreSQL).\n *\n * Uses ON CONFLICT with a conditional update that only succeeds if:\n * 1. The existing claim belongs to the same node — the OWNER PAIR\n *    `(concrete_kind, node_id)`, because ids are unique only per kind — OR\n * 2. The existing claim is soft-deleted (can be reused)\n *\n * If a different live node holds this key, the conflict handler leaves the\n * row unchanged, and RETURNING shows the conflicting owner.\n */\nfunction buildInsertUniquePostgres(\n  tables: Tables,\n  params: InsertUniqueParams,\n): SQL {\n  const { uniques } = tables;\n\n  const columns = sql.raw(\n    `\"${uniques.graphId.name}\", \"${uniques.nodeKind.name}\", \"${uniques.constraintName.name}\", \"${uniques.key.name}\", \"${uniques.nodeId.name}\", \"${uniques.concreteKind.name}\", \"${uniques.deletedAt.name}\"`,\n  );\n  const conflictColumns = sql.raw(\n    `\"${uniques.graphId.name}\", \"${uniques.nodeKind.name}\", \"${uniques.constraintName.name}\", \"${uniques.key.name}\"`,\n  );\n\n  const tableName = getTableName(uniques);\n  const existingColumnByName = (columnName: string): SQL =>\n    existingColumnFor(\"postgres\", tableName, columnName);\n  const existingColumn = (column: Readonly<{ name: string }>) =>\n    existingColumnByName(column.name);\n\n  const ownerMatches = claimOwnerMatchesSql(\n    drizzleSqlTag,\n    (columnName) => existingColumnByName(columnName),\n    boundOwnerColumn(uniques, params),\n    ownerColumnNames(uniques),\n  );\n\n  return sql`\n    INSERT INTO ${uniques} (${columns})\n    VALUES (\n      ${params.graphId}, ${params.nodeKind}, ${params.constraintName},\n      ${params.key}, ${params.nodeId}, ${params.concreteKind}, ${sql.raw(\"NULL\")}\n    )\n    ON CONFLICT (${conflictColumns})\n    DO UPDATE SET\n      ${quotedColumn(uniques.nodeId)} = CASE\n        WHEN ${ownerMatches} THEN ${params.nodeId}\n        WHEN ${existingColumn(uniques.deletedAt)} IS NOT NULL THEN ${params.nodeId}\n        ELSE ${existingColumn(uniques.nodeId)}\n      END,\n      ${quotedColumn(uniques.concreteKind)} = CASE\n        WHEN ${ownerMatches} THEN ${params.concreteKind}\n        WHEN ${existingColumn(uniques.deletedAt)} IS NOT NULL THEN ${params.concreteKind}\n        ELSE ${existingColumn(uniques.concreteKind)}\n      END,\n      ${quotedColumn(uniques.deletedAt)} = CASE\n        WHEN ${ownerMatches} THEN NULL\n        WHEN ${existingColumn(uniques.deletedAt)} IS NOT NULL THEN NULL\n        ELSE ${existingColumn(uniques.deletedAt)}\n      END\n    RETURNING\n      ${quotedColumn(uniques.nodeId)} as node_id,\n      ${quotedColumn(uniques.concreteKind)} as concrete_kind\n  `;\n}\n\nconst UNIQUE_INSERT_BUILDERS: Record<SqlDialect, InsertUniqueDialectBuilder> = {\n  postgres: buildInsertUniquePostgres,\n  sqlite: buildInsertUniqueSqlite,\n};\n\n/**\n * Builds an INSERT query for a uniqueness entry.\n * Returns the node_id that now holds the key (may differ from input if conflict).\n */\nexport function buildInsertUnique(\n  tables: Tables,\n  dialect: SqlDialect,\n  params: InsertUniqueParams,\n): SQL {\n  const builder = UNIQUE_INSERT_BUILDERS[dialect];\n  return builder(tables, params);\n}\n\n/**\n * Builds a multi-row INSERT for uniqueness claims with the same conflict\n * semantics as {@link buildInsertUnique}, expressed against `excluded`\n * (the proposed row) instead of per-statement bound values. RETURNING\n * exposes `(node_kind, constraint_name, key, node_id, concrete_kind)` for\n * every row — ON CONFLICT DO UPDATE returns updated rows too — so the caller\n * can attribute each entry's final OWNER PAIR and raise a uniqueness error for\n * the ones a different live node holds. `concrete_kind` is load-bearing in that\n * list: without it two batch rows sharing an id under different kinds would\n * both read their own `node_id` back and both be accepted.\n *\n * Callers must not pass two entries with the same conflict target\n * (`node_kind`, `constraint_name`, `key`): a multi-row upsert cannot\n * affect one row twice.\n */\nexport function buildInsertUniqueBatch(\n  tables: Tables,\n  dialect: SqlDialect,\n  entries: readonly InsertUniqueParams[],\n): SQL {\n  const { uniques } = tables;\n\n  const columns = sql.raw(\n    `\"${uniques.graphId.name}\", \"${uniques.nodeKind.name}\", \"${uniques.constraintName.name}\", \"${uniques.key.name}\", \"${uniques.nodeId.name}\", \"${uniques.concreteKind.name}\", \"${uniques.deletedAt.name}\"`,\n  );\n  const conflictColumns = sql.raw(\n    `\"${uniques.graphId.name}\", \"${uniques.nodeKind.name}\", \"${uniques.constraintName.name}\", \"${uniques.key.name}\"`,\n  );\n\n  const tableName = getTableName(uniques);\n  const existingColumnByName = (columnName: string): SQL =>\n    existingColumnFor(dialect, tableName, columnName);\n\n  const existingColumn = (column: Readonly<{ name: string }>) =>\n    existingColumnByName(column.name);\n\n  const ownerMatches = claimOwnerMatchesSql(\n    drizzleSqlTag,\n    (columnName) => existingColumnByName(columnName),\n    excludedColumnByName,\n    ownerColumnNames(uniques),\n  );\n\n  const valueRows = sql.join(\n    entries.map(\n      (params) =>\n        sql`(${params.graphId}, ${params.nodeKind}, ${params.constraintName}, ${params.key}, ${params.nodeId}, ${params.concreteKind}, ${sql.raw(\"NULL\")})`,\n    ),\n    sql`, `,\n  );\n\n  return sql`\n    INSERT INTO ${uniques} (${columns})\n    VALUES ${valueRows}\n    ON CONFLICT (${conflictColumns})\n    DO UPDATE SET\n      ${quotedColumn(uniques.nodeId)} = CASE\n        WHEN ${ownerMatches} THEN ${excludedColumn(uniques.nodeId)}\n        WHEN ${existingColumn(uniques.deletedAt)} IS NOT NULL THEN ${excludedColumn(uniques.nodeId)}\n        ELSE ${existingColumn(uniques.nodeId)}\n      END,\n      ${quotedColumn(uniques.concreteKind)} = CASE\n        WHEN ${ownerMatches} THEN ${excludedColumn(uniques.concreteKind)}\n        WHEN ${existingColumn(uniques.deletedAt)} IS NOT NULL THEN ${excludedColumn(uniques.concreteKind)}\n        ELSE ${existingColumn(uniques.concreteKind)}\n      END,\n      ${quotedColumn(uniques.deletedAt)} = CASE\n        WHEN ${ownerMatches} THEN NULL\n        WHEN ${existingColumn(uniques.deletedAt)} IS NOT NULL THEN NULL\n        ELSE ${existingColumn(uniques.deletedAt)}\n      END\n    RETURNING\n      ${quotedColumn(uniques.nodeKind)} as node_kind,\n      ${quotedColumn(uniques.constraintName)} as constraint_name,\n      ${quotedColumn(uniques.key)} as key,\n      ${quotedColumn(uniques.nodeId)} as node_id,\n      ${quotedColumn(uniques.concreteKind)} as concrete_kind\n  `;\n}\n\n/**\n * Builds the claim upsert used by the PostgreSQL node-write fusion CTE.\n *\n * The source relation is a backend-owned CTE with the fixed columns\n * `(graph_id, axis, constraint_name, key, node_id, concrete_kind)`. Keeping\n * this rendering beside the ordinary claim builders is important: the fused\n * path must make exactly the same owner/tombstone decision as\n * `buildInsertUnique` and `buildInsertUniqueBatch`.\n */\nexport function buildInsertUniqueFromSource(\n  tables: Tables,\n  dialect: SqlDialect,\n  sourceAlias: string,\n): SQL {\n  const { uniques } = tables;\n  const source = sql.identifier(sourceAlias);\n  const sourceColumn = (name: string): SQL =>\n    sql`${source}.${quotedColumn({ name })}`;\n  const columns = sql.raw(\n    `\"${uniques.graphId.name}\", \"${uniques.nodeKind.name}\", \"${uniques.constraintName.name}\", \"${uniques.key.name}\", \"${uniques.nodeId.name}\", \"${uniques.concreteKind.name}\", \"${uniques.deletedAt.name}\"`,\n  );\n  const conflictColumns = sql.raw(\n    `\"${uniques.graphId.name}\", \"${uniques.nodeKind.name}\", \"${uniques.constraintName.name}\", \"${uniques.key.name}\"`,\n  );\n  const tableName = getTableName(uniques);\n  const existingColumnByName = (columnName: string): SQL =>\n    existingColumnFor(dialect, tableName, columnName);\n  const ownerMatches = claimOwnerMatchesSql(\n    drizzleSqlTag,\n    (columnName) => existingColumnByName(columnName),\n    (columnName) => excludedColumnByName(columnName),\n    ownerColumnNames(uniques),\n  );\n  const existingColumn = (column: Readonly<{ name: string }>) =>\n    existingColumnByName(column.name);\n\n  return sql`\n    INSERT INTO ${uniques} (${columns})\n    SELECT\n      ${sourceColumn(\"graph_id\")}, ${sourceColumn(\"axis\")},\n      ${sourceColumn(\"constraint_name\")}, ${sourceColumn(\"key\")},\n      ${sourceColumn(\"node_id\")}, ${sourceColumn(\"concrete_kind\")},\n      ${sql.raw(\"NULL\")}\n    FROM ${source}\n    ON CONFLICT (${conflictColumns})\n    DO UPDATE SET\n      ${quotedColumn(uniques.nodeId)} = CASE\n        WHEN ${ownerMatches} THEN ${excludedColumn(uniques.nodeId)}\n        WHEN ${existingColumn(uniques.deletedAt)} IS NOT NULL THEN ${excludedColumn(uniques.nodeId)}\n        ELSE ${existingColumn(uniques.nodeId)}\n      END,\n      ${quotedColumn(uniques.concreteKind)} = CASE\n        WHEN ${ownerMatches} THEN ${excludedColumn(uniques.concreteKind)}\n        WHEN ${existingColumn(uniques.deletedAt)} IS NOT NULL THEN ${excludedColumn(uniques.concreteKind)}\n        ELSE ${existingColumn(uniques.concreteKind)}\n      END,\n      ${quotedColumn(uniques.deletedAt)} = CASE\n        WHEN ${ownerMatches} THEN NULL\n        WHEN ${existingColumn(uniques.deletedAt)} IS NOT NULL THEN NULL\n        ELSE ${existingColumn(uniques.deletedAt)}\n      END\n    RETURNING\n      ${quotedColumn(uniques.nodeKind)} AS axis,\n      ${quotedColumn(uniques.constraintName)} AS constraint_name,\n      ${quotedColumn(uniques.key)} AS key,\n      ${quotedColumn(uniques.nodeId)} AS node_id,\n      ${quotedColumn(uniques.concreteKind)} AS concrete_kind\n  `;\n}\n\n/**\n * Builds the owner-scoped soft DELETE that releases a uniqueness claim.\n * Uses raw column name in SET clause.\n *\n * The owner pair `(concrete_kind, node_id)` is always part of the predicate:\n * a release gives up the claims THIS node holds, never a namesake's under\n * another kind and never one that predates this node's write. `nodeKind`\n * additionally restricts the release to one claim axis — see\n * {@link DeleteUniqueParams} for the two shapes and who issues each.\n */\nexport function buildDeleteUnique(\n  tables: Tables,\n  params: DeleteUniqueParams,\n  timestamp: string,\n): SQL {\n  const { uniques } = tables;\n\n  const axisTerm =\n    params.nodeKind === undefined ?\n      sql``\n    : sql` AND ${uniques.nodeKind} = ${params.nodeKind}`;\n\n  return sql`\n    UPDATE ${uniques}\n    SET ${quotedColumn(uniques.deletedAt)} = ${timestamp}\n    WHERE ${uniques.graphId} = ${params.graphId}\n      AND ${uniques.concreteKind} = ${params.concreteKind}\n      AND ${uniques.nodeId} = ${params.nodeId}\n      AND ${uniques.constraintName} = ${params.constraintName}\n      AND ${uniques.key} = ${params.key}${axisTerm}\n      AND ${uniques.deletedAt} IS NULL\n  `;\n}\n\n/**\n * Builds a hard DELETE query for all uniqueness entries for a node.\n */\nexport function buildHardDeleteUniquesByNode(\n  tables: Tables,\n  graphId: string,\n  concreteKind: string,\n  nodeId: string,\n): SQL {\n  return buildHardDeleteUniquesByNodeIds(tables, {\n    graphId,\n    concreteKind,\n    nodeIds: [nodeId],\n  });\n}\n\n/**\n * Builds a hard DELETE for every uniqueness entry owned by concrete nodes.\n */\nexport function buildHardDeleteUniquesByNodeIds(\n  tables: Tables,\n  params: HardDeleteUniquesByNodeIdsParams,\n): SQL {\n  const { uniques } = tables;\n\n  return sql`\n    DELETE FROM ${uniques}\n    WHERE ${uniques.graphId} = ${params.graphId}\n      AND ${uniques.concreteKind} = ${params.concreteKind}\n      AND ${uniques.nodeId} IN (${sql.join(\n        params.nodeIds.map((nodeId) => sql`${nodeId}`),\n        sql`, `,\n      )})\n  `;\n}\n\n// Re-exported from its new owner so `operations/strategy.ts:117,256,597-600`\n// sees no change.\nexport { buildHardDeleteUniquesByConcreteKind } from \"../../../store/claims/removal-sql\";\n\n/**\n * Builds a SELECT query to check for uniqueness violations.\n */\nexport function buildCheckUnique(\n  tables: Tables,\n  params: CheckUniqueParams,\n): SQL {\n  const { uniques } = tables;\n\n  if (params.includeDeleted) {\n    return sql`\n      SELECT * FROM ${uniques}\n      WHERE ${uniques.graphId} = ${params.graphId}\n        AND ${uniques.nodeKind} = ${params.nodeKind}\n        AND ${uniques.constraintName} = ${params.constraintName}\n        AND ${uniques.key} = ${params.key}\n    `;\n  }\n\n  return sql`\n    SELECT * FROM ${uniques}\n    WHERE ${uniques.graphId} = ${params.graphId}\n      AND ${uniques.nodeKind} = ${params.nodeKind}\n      AND ${uniques.constraintName} = ${params.constraintName}\n      AND ${uniques.key} = ${params.key}\n      AND ${uniques.deletedAt} IS NULL\n  `;\n}\n\n/**\n * Builds a SELECT query to batch-check uniqueness entries by multiple keys.\n */\nexport function buildCheckUniqueBatch(\n  tables: Tables,\n  params: CheckUniqueBatchParams,\n): SQL {\n  const { uniques } = tables;\n\n  const keyPlaceholders = sql.join(\n    params.keys.map((key) => sql`${key}`),\n    sql`, `,\n  );\n\n  if (params.includeDeleted) {\n    return sql`\n      SELECT * FROM ${uniques}\n      WHERE ${uniques.graphId} = ${params.graphId}\n        AND ${uniques.nodeKind} = ${params.nodeKind}\n        AND ${uniques.constraintName} = ${params.constraintName}\n        AND ${uniques.key} IN (${keyPlaceholders})\n    `;\n  }\n\n  return sql`\n    SELECT * FROM ${uniques}\n    WHERE ${uniques.graphId} = ${params.graphId}\n      AND ${uniques.nodeKind} = ${params.nodeKind}\n      AND ${uniques.constraintName} = ${params.constraintName}\n      AND ${uniques.key} IN (${keyPlaceholders})\n      AND ${uniques.deletedAt} IS NULL\n  `;\n}\n","import { getTableName, type SQL, sql } from \"drizzle-orm\";\n\nimport { CompilerInvariantError } from \"../../../errors\";\nimport type { FulltextStrategy } from \"../../../query/dialect/fulltext-strategy\";\nimport type { SqlDialect } from \"../../../query/dialect/types\";\nimport type {\n  VectorSlot,\n  VectorStrategy,\n} from \"../../../query/dialect/vector-strategy\";\nimport { chunk as chunkArray } from \"../../../utils/array\";\nimport { resolveStampedValidityLowerBound } from \"../../../utils/date\";\nimport { encodeTupleKey } from \"../../../utils/tuple-key\";\nimport type {\n  AtomicNodePostimageEntry,\n  AtomicNodeProjection,\n  AtomicNodeResolvedUpdateEntry,\n} from \"../../capabilities/atomic-mutation-program\";\nimport type {\n  InsertNodeParams,\n  ManagedNodeCreatePlan,\n  NodeInsertClaim,\n} from \"../../types\";\nimport { toDrizzleSql } from \"../execution/types\";\nimport { buildInsertNode, buildInsertNodeWithSchemaFence } from \"./nodes\";\nimport {\n  nodeColumnList,\n  quotedColumn,\n  quotedTableName,\n  sqlNull,\n  type Tables,\n} from \"./shared\";\nimport { buildInsertUniqueFromSource } from \"./uniques\";\n\n/** The fixed alias shared by the node CTE and all projection strategies. */\nexport const INSERTED_NODE_PROJECTION_CTE_ALIAS = \"inserted_node\";\n\ntype AtomicNodeProjectionEntry = Readonly<{\n  graphId: string;\n  kind: string;\n  id: string;\n  projections: readonly AtomicNodeProjection[];\n}>;\n\nfunction atomicProjectionEntries(\n  creates: readonly AtomicNodePostimageEntry[],\n  updates: readonly AtomicNodeResolvedUpdateEntry[],\n): readonly AtomicNodeProjectionEntry[] {\n  return [\n    ...creates.map((entry) => ({\n      graphId: entry.params.graphId,\n      kind: entry.params.kind,\n      id: entry.params.id,\n      projections: entry.projections ?? [],\n    })),\n    ...updates.map((entry) => ({\n      graphId: entry.graphId,\n      kind: entry.kind,\n      id: entry.id,\n      projections: entry.projections ?? [],\n    })),\n  ];\n}\n\nexport type AtomicNodeProjectionRequirements = Readonly<{\n  graphId: string;\n  fulltext: boolean;\n  vectorSlots: readonly VectorSlot[];\n}>;\n\n/** One owner for the physical derived-storage requirements of a node program. */\nexport function resolveAtomicNodeProjectionRequirements(\n  creates: readonly AtomicNodePostimageEntry[],\n  updates: readonly AtomicNodeResolvedUpdateEntry[],\n): AtomicNodeProjectionRequirements | undefined {\n  const entries = atomicProjectionEntries(creates, updates);\n  const projected = entries.filter((entry) => entry.projections.length > 0);\n  const first = projected[0];\n  if (first === undefined) return;\n  if (projected.some((entry) => entry.graphId !== first.graphId)) {\n    throw new CompilerInvariantError(\n      \"An atomic node projection program crossed graph storage.\",\n    );\n  }\n  const vectorSlots = new Map<string, VectorSlot>();\n  for (const entry of projected) {\n    for (const projection of entry.projections) {\n      if (projection.kind !== \"embedding\") continue;\n      const slot = {\n        graphId: entry.graphId,\n        nodeKind: entry.kind,\n        fieldPath: projection.fieldPath,\n        dimensions: projection.dimensions,\n        metric: projection.metric,\n        indexType: projection.indexType,\n      };\n      vectorSlots.set(\n        encodeTupleKey([\n          slot.graphId,\n          slot.nodeKind,\n          slot.fieldPath,\n          String(slot.dimensions),\n          slot.metric,\n          slot.indexType,\n        ]),\n        slot,\n      );\n    }\n  }\n  return {\n    graphId: first.graphId,\n    fulltext: projected.some((entry) =>\n      entry.projections.some((projection) => projection.kind === \"fulltext\"),\n    ),\n    vectorSlots: [...vectorSlots.values()],\n  };\n}\n\n/**\n * Builds every derived-storage statement owed by an atomic node postimage set.\n *\n * Row mutation and this statement list share one atomic transport submission.\n * The terminal row-postimage assertion is the commit gate: stale or moved row\n * work deliberately aborts the submission and rolls these transitions back.\n */\nexport function buildAtomicNodeProjectionStatements(\n  creates: readonly AtomicNodePostimageEntry[],\n  updates: readonly AtomicNodeResolvedUpdateEntry[],\n  timestamp: string,\n  dialect: SqlDialect,\n  fulltextTableName: string,\n  fulltextStrategy: FulltextStrategy | undefined,\n  vectorStrategy: VectorStrategy | undefined,\n  chunkSize: number,\n): readonly SQL[] | undefined {\n  const entries = atomicProjectionEntries(creates, updates);\n  const fulltextGroups = new Map<\n    string,\n    Readonly<{\n      graphId: string;\n      nodeKind: string;\n      upserts: { nodeId: string; content: string; language: string }[];\n      deletes: string[];\n    }>\n  >();\n  const embeddingGroups = new Map<\n    string,\n    Readonly<{\n      slot: Readonly<{\n        graphId: string;\n        nodeKind: string;\n        fieldPath: string;\n        dimensions: number;\n        metric: Extract<AtomicNodeProjection, { kind: \"embedding\" }>[\"metric\"];\n        indexType: Extract<\n          AtomicNodeProjection,\n          { kind: \"embedding\" }\n        >[\"indexType\"];\n      }>;\n      upserts: { nodeId: string; embedding: readonly number[] }[];\n      deletes: string[];\n    }>\n  >();\n\n  for (const entry of entries) {\n    for (const projection of entry.projections) {\n      if (projection.kind === \"fulltext\") {\n        if (fulltextStrategy === undefined) return;\n        const key = encodeTupleKey([entry.graphId, entry.kind]);\n        const group = fulltextGroups.get(key) ?? {\n          graphId: entry.graphId,\n          nodeKind: entry.kind,\n          upserts: [],\n          deletes: [],\n        };\n        if (projection.action === \"upsert\") {\n          group.upserts.push({\n            nodeId: entry.id,\n            content: projection.content,\n            language: projection.language,\n          });\n        } else {\n          group.deletes.push(entry.id);\n        }\n        fulltextGroups.set(key, group);\n        continue;\n      }\n      if (vectorStrategy === undefined) return;\n      const slot = {\n        graphId: entry.graphId,\n        nodeKind: entry.kind,\n        fieldPath: projection.fieldPath,\n        dimensions: projection.dimensions,\n        metric: projection.metric,\n        indexType: projection.indexType,\n      };\n      const key = encodeTupleKey([\n        slot.graphId,\n        slot.nodeKind,\n        slot.fieldPath,\n        String(slot.dimensions),\n        slot.metric,\n        slot.indexType,\n      ]);\n      const group = embeddingGroups.get(key) ?? {\n        slot,\n        upserts: [],\n        deletes: [],\n      };\n      if (projection.action === \"upsert\") {\n        group.upserts.push({\n          nodeId: entry.id,\n          embedding: projection.embedding,\n        });\n      } else {\n        group.deletes.push(entry.id);\n      }\n      embeddingGroups.set(key, group);\n    }\n  }\n\n  const statements: SQL[] = [];\n  for (const group of fulltextGroups.values()) {\n    for (const rows of chunkArray(group.upserts, chunkSize)) {\n      statements.push(\n        ...(\n          fulltextStrategy?.buildBatchUpsert(\n            fulltextTableName,\n            { graphId: group.graphId, nodeKind: group.nodeKind, rows },\n            timestamp,\n          ) ?? []\n        ).map((statement) => toDrizzleSql(statement, dialect)),\n      );\n    }\n    for (const nodeIds of chunkArray(group.deletes, chunkSize)) {\n      statements.push(\n        ...(\n          fulltextStrategy?.buildBatchDelete(fulltextTableName, {\n            graphId: group.graphId,\n            nodeKind: group.nodeKind,\n            nodeIds,\n          }) ?? []\n        ).map((statement) => toDrizzleSql(statement, dialect)),\n      );\n    }\n  }\n  for (const group of embeddingGroups.values()) {\n    for (const rows of chunkArray(group.upserts, chunkSize)) {\n      const fragments =\n        vectorStrategy?.buildUpsertBatch === undefined ?\n          rows.flatMap((row) =>\n            vectorStrategy?.buildUpsert(\n              group.slot,\n              {\n                ...group.slot,\n                nodeId: row.nodeId,\n                embedding: row.embedding,\n              },\n              timestamp,\n            ) ?? [],\n          )\n        : vectorStrategy.buildUpsertBatch(\n            group.slot,\n            { ...group.slot, rows },\n            timestamp,\n          );\n      statements.push(\n        ...fragments.map((statement) => toDrizzleSql(statement, dialect)),\n      );\n    }\n    for (const nodeIds of chunkArray(group.deletes, chunkSize)) {\n      statements.push(\n        ...(vectorStrategy?.buildDeleteBatch(group.slot, {\n          ...group.slot,\n          nodeIds,\n        }) ?? []).map((statement) => toDrizzleSql(statement, dialect)),\n      );\n    }\n  }\n  return statements;\n}\n\nfunction refuseUnknownManagedNodeMode(mode: never): never {\n  throw new CompilerInvariantError(\n    \"A managed node create plan names an unknown mode.\",\n    { capability: \"commands\", command: \"node.create\", mode },\n  );\n}\n\nfunction buildNodeInsert(\n  tables: Tables,\n  params: InsertNodeParams,\n  plan: ManagedNodeCreatePlan,\n  timestamp: string,\n  schemaLockClause: SQL | undefined,\n): SQL | undefined {\n  switch (plan.mode.kind) {\n    case \"ordinary\": {\n      return buildInsertNode(tables, params, timestamp);\n    }\n    case \"schema-fenced\": {\n      if (schemaLockClause === undefined) return;\n      return buildInsertNodeWithSchemaFence(\n        tables,\n        params,\n        timestamp,\n        plan.mode.schemaFence,\n        schemaLockClause,\n      );\n    }\n    default: {\n      return refuseUnknownManagedNodeMode(plan.mode);\n    }\n  }\n}\n\nfunction buildNodeAndProjections(\n  nodeInsert: SQL,\n  projections: readonly SQL[],\n): SQL {\n  if (projections.length === 0) return nodeInsert;\n  const projectionCtes = projections.map(\n    (projection, index) =>\n      sql`${sql.identifier(`node_projection_${index}`)} AS (${projection})`,\n  );\n  return sql`\n    WITH ${sql.identifier(INSERTED_NODE_PROJECTION_CTE_ALIAS)} AS MATERIALIZED (\n      ${nodeInsert}\n    ), ${sql.join(projectionCtes, sql`, `)}\n    SELECT * FROM ${sql.identifier(INSERTED_NODE_PROJECTION_CTE_ALIAS)}\n  `;\n}\n\nconst CLAIM_INPUT_COLUMNS = [\n  \"ordinal\",\n  \"graph_id\",\n  \"axis\",\n  \"constraint_name\",\n  \"key\",\n  \"node_id\",\n  \"concrete_kind\",\n] as const;\n\nfunction claimInputCte(\n  alias: string,\n  claims: readonly NodeInsertClaim[],\n  params: InsertNodeParams,\n): SQL {\n  const values = sql.join(\n    claims.map(\n      (claim, ordinal) =>\n        sql`(${ordinal}, ${params.graphId}, ${claim.axis}, ${claim.constraintName}, ${claim.key}, ${params.id}, ${params.kind})`,\n    ),\n    sql`, `,\n  );\n  const columns = sql.join(\n    CLAIM_INPUT_COLUMNS.map((column) => sql.identifier(column)),\n    sql`, `,\n  );\n  return sql`${sql.identifier(alias)} (${columns}) AS (VALUES ${values})`;\n}\n\nfunction claimVerdictCte(\n  alias: string,\n  inputAlias: string,\n  claimedAlias: string,\n): SQL {\n  const input = sql.identifier(inputAlias);\n  const claimed = sql.identifier(claimedAlias);\n  return sql`\n    ${sql.identifier(alias)} AS (\n      SELECT\n        ${input}.${sql.identifier(\"ordinal\")} AS ordinal,\n        ${input}.${sql.identifier(\"axis\")} AS axis,\n        ${input}.${sql.identifier(\"constraint_name\")} AS constraint_name,\n        ${input}.${sql.identifier(\"key\")} AS key,\n        ${input}.${sql.identifier(\"node_id\")} AS new_node_id,\n        ${input}.${sql.identifier(\"concrete_kind\")} AS new_concrete_kind,\n        ${claimed}.${sql.identifier(\"node_id\")} AS holder_id,\n        ${claimed}.${sql.identifier(\"concrete_kind\")} AS holder_kind,\n        ${claimed}.${sql.identifier(\"node_id\")} = ${input}.${sql.identifier(\"node_id\")}\n          AND ${claimed}.${sql.identifier(\"concrete_kind\")} = ${input}.${sql.identifier(\"concrete_kind\")} AS accepted\n      FROM ${input}\n      JOIN ${claimed}\n        ON ${claimed}.${sql.identifier(\"axis\")} = ${input}.${sql.identifier(\"axis\")}\n       AND ${claimed}.${sql.identifier(\"constraint_name\")} = ${input}.${sql.identifier(\"constraint_name\")}\n       AND ${claimed}.${sql.identifier(\"key\")} = ${input}.${sql.identifier(\"key\")}\n    )\n  `;\n}\n\nconst CLAIM_PROBE_COLUMNS = [\n  \"ordinal\",\n  \"probe_ordinal\",\n  \"axis\",\n  \"constraint_name\",\n  \"key\",\n  \"node_id\",\n  \"concrete_kind\",\n] as const;\n\n/**\n * Reads live uniqueness claims that predate the canonical shared-scope axis.\n *\n * The canonical upsert remains the write fence. These rows are read-only\n * compatibility evidence: the axis fold intentionally required no migration,\n * so a current writer must still see a live foreign owner under every covered\n * concrete kind. The store computes and carries `probeAxes`; this SQL layer\n * must not reconstruct hierarchy membership independently.\n */\nfunction legacyUniqueProbeCte(\n  tables: Tables,\n  alias: string,\n  claims: readonly NodeInsertClaim[],\n  params: InsertNodeParams,\n): SQL | undefined {\n  const values = claims.flatMap((claim, ordinal) => {\n    if (claim.verdict.kind !== \"uniqueness\") return [];\n    return claim.verdict.probeAxes.flatMap((probeAxis, probeOrdinal) => {\n      if (probeAxis === claim.axis) return [];\n      return [\n        sql`(${ordinal}, ${probeOrdinal}, ${probeAxis}, ${claim.constraintName}, ${claim.key}, ${params.id}, ${params.kind})`,\n      ];\n    });\n  });\n  if (values.length === 0) return;\n\n  const columns = sql.join(\n    CLAIM_PROBE_COLUMNS.map((column) => sql.identifier(column)),\n    sql`, `,\n  );\n  const probe = sql.identifier(alias);\n  const uniques = sql.identifier(\"legacy_unique_rows\");\n  const tableName = getTableName(tables.uniques);\n  const qualified = (column: Readonly<{ name: string }>): SQL =>\n    sql`${uniques}.${quotedColumn(column)}`;\n\n  return sql`\n    ${probe} (${columns}) AS (\n      SELECT\n        ${probe}.${sql.identifier(\"ordinal\")}::integer,\n        ${probe}.${sql.identifier(\"probe_ordinal\")}::integer,\n        ${probe}.${sql.identifier(\"axis\")},\n        ${probe}.${sql.identifier(\"constraint_name\")},\n        ${probe}.${sql.identifier(\"key\")},\n        ${qualified(tables.uniques.nodeId)} AS node_id,\n        ${qualified(tables.uniques.concreteKind)} AS concrete_kind\n      FROM (VALUES ${sql.join(values, sql`, `)}) AS ${probe} (${columns})\n      JOIN ${quotedTableName(tableName)} AS ${uniques}\n        ON ${qualified(tables.uniques.graphId)} = ${params.graphId}\n       AND ${qualified(tables.uniques.nodeKind)} = ${probe}.${sql.identifier(\"axis\")}\n       AND ${qualified(tables.uniques.constraintName)} = ${probe}.${sql.identifier(\"constraint_name\")}\n       AND ${qualified(tables.uniques.key)} = ${probe}.${sql.identifier(\"key\")}\n       AND ${qualified(tables.uniques.deletedAt)} IS NULL\n    )\n  `;\n}\n\nconst DISJOINT_PROBE_COLUMNS = [\n  \"ordinal\",\n  \"probe_ordinal\",\n  \"axis\",\n  \"constraint_name\",\n  \"key\",\n  \"node_id\",\n  \"concrete_kind\",\n  \"conflicting_kind\",\n] as const;\n\n/**\n * Reads live node rows for disjoint claims. This is deliberately separate\n * from the claim relation: pre-upgrade databases can contain a live overlap\n * without a disjointness claim row. The graph write lock is acquired before\n * this statement for disjoint claims, so this read and the canonical claim\n * upsert retain the same cross-kind race protection as the old probe.\n */\nfunction disjointNodeProbeCte(\n  tables: Tables,\n  alias: string,\n  claims: readonly NodeInsertClaim[],\n  params: InsertNodeParams,\n): SQL | undefined {\n  const values = claims.flatMap((claim, ordinal) => {\n    if (claim.verdict.kind !== \"disjointness\") return [];\n    return claim.verdict.conflictingKinds.map(\n      (conflictingKind, probeOrdinal) =>\n        sql`(${ordinal}, ${probeOrdinal}, ${claim.axis}, ${claim.constraintName}, ${claim.key}, ${params.id}, ${params.kind}, ${conflictingKind})`,\n    );\n  });\n  if (values.length === 0) return;\n\n  const columns = sql.join(\n    DISJOINT_PROBE_COLUMNS.map((column) => sql.identifier(column)),\n    sql`, `,\n  );\n  const probe = sql.identifier(alias);\n  const nodes = sql.identifier(\"legacy_disjoint_nodes\");\n  const tableName = getTableName(tables.nodes);\n  const qualified = (column: Readonly<{ name: string }>): SQL =>\n    sql`${nodes}.${quotedColumn(column)}`;\n\n  return sql`\n    ${probe} (${columns}) AS (\n      SELECT\n        ${probe}.${sql.identifier(\"ordinal\")}::integer,\n        ${probe}.${sql.identifier(\"probe_ordinal\")}::integer,\n        ${probe}.${sql.identifier(\"axis\")},\n        ${probe}.${sql.identifier(\"constraint_name\")},\n        ${probe}.${sql.identifier(\"key\")},\n        ${qualified(tables.nodes.id)} AS node_id,\n        ${qualified(tables.nodes.kind)} AS concrete_kind,\n        ${probe}.${sql.identifier(\"conflicting_kind\")}\n      FROM (VALUES ${sql.join(values, sql`, `)}) AS ${probe} (${columns})\n      JOIN ${quotedTableName(tableName)} AS ${nodes}\n        ON ${qualified(tables.nodes.graphId)} = ${params.graphId}\n       AND ${qualified(tables.nodes.kind)} = ${probe}.${sql.identifier(\"conflicting_kind\")}\n       AND ${qualified(tables.nodes.id)} = ${probe}.${sql.identifier(\"key\")}\n       AND ${qualified(tables.nodes.deletedAt)} IS NULL\n    )\n  `;\n}\n\nfunction buildGatedNodeInsert(\n  tables: Tables,\n  params: InsertNodeParams,\n  timestamp: string,\n  gateAlias: string,\n): SQL {\n  const { nodes } = tables;\n  const propsJson = JSON.stringify(params.props);\n  const columns = nodeColumnList(nodes);\n  const gate = sql.identifier(gateAlias);\n\n  return sql`\n    INSERT INTO ${nodes} (${columns})\n    SELECT\n      ${params.graphId}, ${params.kind}, ${params.id}, ${propsJson},\n      1, ${sqlNull(resolveStampedValidityLowerBound(params.validFrom, params.validTo, timestamp))}, ${sqlNull(params.validTo)},\n      ${timestamp}, ${timestamp}\n    FROM ${gate}\n    RETURNING *\n  `;\n}\n\nfunction buildNodeClaimsAndProjections(\n  tables: Tables,\n  params: InsertNodeParams,\n  plan: ManagedNodeCreatePlan,\n  timestamp: string,\n  dialect: SqlDialect,\n  fulltextTableName: string,\n  fulltextStrategy: FulltextStrategy | undefined,\n  vectorStrategy: VectorStrategy | undefined,\n): SQL | undefined {\n  const claims = plan.claims;\n  const preClaims = claims.filter((claim) => claim.placement === \"pre-insert\");\n  const postClaims = claims.filter(\n    (claim) => claim.placement === \"post-insert\",\n  );\n  const ctes: SQL[] = [];\n  const preInputAlias = \"node_pre_claim_input\";\n  const preClaimedAlias = \"node_pre_claimed\";\n  const preVerdictAlias = \"node_pre_claim_verdict\";\n  const preLegacyProbeAlias = \"node_pre_legacy_unique_probe\";\n  const preDisjointProbeAlias = \"node_pre_disjoint_node_probe\";\n  const preHasLegacyProbe = preClaims.some(\n    (claim) =>\n      claim.verdict.kind === \"uniqueness\" &&\n      claim.verdict.probeAxes.some((axis) => axis !== claim.axis),\n  );\n  const preHasDisjointProbe = preClaims.some(\n    (claim) =>\n      claim.verdict.kind === \"disjointness\" &&\n      claim.verdict.conflictingKinds.length > 0,\n  );\n\n  if (preClaims.length > 0) {\n    ctes.push(\n      claimInputCte(preInputAlias, preClaims, params),\n      sql`${sql.identifier(preClaimedAlias)} AS (${buildInsertUniqueFromSource(tables, dialect, preInputAlias)})`,\n      claimVerdictCte(preVerdictAlias, preInputAlias, preClaimedAlias),\n    );\n    const legacyProbe = legacyUniqueProbeCte(\n      tables,\n      preLegacyProbeAlias,\n      preClaims,\n      params,\n    );\n    if (legacyProbe !== undefined) ctes.push(legacyProbe);\n    const disjointProbe = disjointNodeProbeCte(\n      tables,\n      preDisjointProbeAlias,\n      preClaims,\n      params,\n    );\n    if (disjointProbe !== undefined) ctes.push(disjointProbe);\n  }\n\n  const preGateAlias = \"node_pre_gate\";\n  const preGateChecks: SQL[] = [\n    sql`\n      NOT EXISTS (\n            SELECT 1\n            FROM ${sql.identifier(preVerdictAlias)}\n            WHERE accepted = FALSE\n          )\n    `,\n  ];\n  if (preHasLegacyProbe) {\n    preGateChecks.push(\n      sql`NOT EXISTS (SELECT 1 FROM ${sql.identifier(preLegacyProbeAlias)})`,\n    );\n  }\n  if (preHasDisjointProbe) {\n    preGateChecks.push(\n      sql`NOT EXISTS (SELECT 1 FROM ${sql.identifier(preDisjointProbeAlias)})`,\n    );\n  }\n  ctes.push(\n    preClaims.length === 0 ?\n      sql`${sql.identifier(preGateAlias)} AS (SELECT 1 AS gate)`\n    : sql`\n      ${sql.identifier(preGateAlias)} AS (\n        SELECT 1 AS gate\n        WHERE ${sql.join(preGateChecks, sql` AND `)}\n      )\n    `,\n  );\n\n  const nodeInsert = buildGatedNodeInsert(\n    tables,\n    params,\n    timestamp,\n    preGateAlias,\n  );\n  const nodeInsertedAlias = \"node_inserted\";\n  ctes.push(\n    sql`${sql.identifier(nodeInsertedAlias)} AS MATERIALIZED (${nodeInsert})`,\n  );\n\n  const postInputAlias = \"node_post_claim_input\";\n  const postClaimedAlias = \"node_post_claimed\";\n  const postVerdictAlias = \"node_post_claim_verdict\";\n  const postLegacyProbeAlias = \"node_post_legacy_unique_probe\";\n  const postDisjointProbeAlias = \"node_post_disjoint_node_probe\";\n  const postHasLegacyProbe = postClaims.some(\n    (claim) =>\n      claim.verdict.kind === \"uniqueness\" &&\n      claim.verdict.probeAxes.some((axis) => axis !== claim.axis),\n  );\n  const postHasDisjointProbe = postClaims.some(\n    (claim) =>\n      claim.verdict.kind === \"disjointness\" &&\n      claim.verdict.conflictingKinds.length > 0,\n  );\n  if (postClaims.length > 0) {\n    const postValuesAlias = \"node_post_claim_values\";\n    ctes.push(claimInputCte(postValuesAlias, postClaims, params));\n    const postValues = sql.identifier(postValuesAlias);\n    const nodeInserted = sql.identifier(nodeInsertedAlias);\n    const columns = sql.join(\n      CLAIM_INPUT_COLUMNS.map((column) => sql.identifier(column)),\n      sql`, `,\n    );\n    const qualifiedColumns = sql.join(\n      CLAIM_INPUT_COLUMNS.map(\n        (column) => sql`${postValues}.${sql.identifier(column)}`,\n      ),\n      sql`, `,\n    );\n    ctes.push(\n      sql`\n        ${sql.identifier(postInputAlias)} (${columns}) AS (\n          SELECT ${qualifiedColumns}\n          FROM ${postValues}\n          CROSS JOIN ${nodeInserted}\n        )\n      `,\n      sql`${sql.identifier(postClaimedAlias)} AS (${buildInsertUniqueFromSource(tables, dialect, postInputAlias)})`,\n      claimVerdictCte(postVerdictAlias, postInputAlias, postClaimedAlias),\n    );\n    const legacyProbe = legacyUniqueProbeCte(\n      tables,\n      postLegacyProbeAlias,\n      postClaims,\n      params,\n    );\n    if (legacyProbe !== undefined) ctes.push(legacyProbe);\n    const disjointProbe = disjointNodeProbeCte(\n      tables,\n      postDisjointProbeAlias,\n      postClaims,\n      params,\n    );\n    if (disjointProbe !== undefined) ctes.push(disjointProbe);\n  }\n\n  const insertedNodeAlias = INSERTED_NODE_PROJECTION_CTE_ALIAS;\n  const nodeInserted = sql.identifier(nodeInsertedAlias);\n  const postGateChecks: SQL[] = [\n    sql`\n      NOT EXISTS (\n            SELECT 1\n            FROM ${sql.identifier(postVerdictAlias)}\n            WHERE accepted = FALSE\n          )\n    `,\n  ];\n  if (postHasLegacyProbe) {\n    postGateChecks.push(\n      sql`NOT EXISTS (SELECT 1 FROM ${sql.identifier(postLegacyProbeAlias)})`,\n    );\n  }\n  if (postHasDisjointProbe) {\n    postGateChecks.push(\n      sql`NOT EXISTS (SELECT 1 FROM ${sql.identifier(postDisjointProbeAlias)})`,\n    );\n  }\n  ctes.push(\n    postClaims.length === 0 ?\n      sql`${sql.identifier(insertedNodeAlias)} AS MATERIALIZED (SELECT * FROM ${nodeInserted})`\n    : sql`\n      ${sql.identifier(insertedNodeAlias)} AS MATERIALIZED (\n        SELECT *\n        FROM ${nodeInserted}\n        WHERE ${sql.join(postGateChecks, sql` AND `)}\n      )\n    `,\n  );\n\n  const projectionSql = buildProjectionSql(\n    params,\n    plan,\n    timestamp,\n    dialect,\n    fulltextTableName,\n    fulltextStrategy,\n    vectorStrategy,\n  );\n  if (projectionSql === undefined) return;\n  ctes.push(\n    ...projectionSql.map(\n      (projection, index) =>\n        sql`${sql.identifier(`node_projection_${index}`)} AS (${projection})`,\n    ),\n  );\n\n  const conflictQueries: SQL[] = [];\n  if (preClaims.length > 0) {\n    conflictQueries.push(\n      sql`SELECT ordinal::integer, 0 AS phase, 0 AS probe_ordinal, axis, constraint_name, key, holder_id, holder_kind FROM ${sql.identifier(preVerdictAlias)} WHERE accepted = FALSE`,\n    );\n    if (preHasLegacyProbe) {\n      conflictQueries.push(\n        sql`SELECT ordinal, 0 AS phase, probe_ordinal, axis, constraint_name, key, node_id AS holder_id, concrete_kind AS holder_kind FROM ${sql.identifier(preLegacyProbeAlias)}`,\n      );\n    }\n    if (preHasDisjointProbe) {\n      conflictQueries.push(\n        sql`SELECT ordinal, 0 AS phase, probe_ordinal, axis, constraint_name, key, node_id AS holder_id, concrete_kind AS holder_kind FROM ${sql.identifier(preDisjointProbeAlias)}`,\n      );\n    }\n  }\n  if (postClaims.length > 0) {\n    conflictQueries.push(\n      sql`SELECT ordinal::integer, 1 AS phase, 0 AS probe_ordinal, axis, constraint_name, key, holder_id, holder_kind FROM ${sql.identifier(postVerdictAlias)} WHERE accepted = FALSE`,\n    );\n    if (postHasLegacyProbe) {\n      conflictQueries.push(\n        sql`SELECT ordinal, 1 AS phase, probe_ordinal, axis, constraint_name, key, node_id AS holder_id, concrete_kind AS holder_kind FROM ${sql.identifier(postLegacyProbeAlias)}`,\n      );\n    }\n    if (postHasDisjointProbe) {\n      conflictQueries.push(\n        sql`SELECT ordinal, 1 AS phase, probe_ordinal, axis, constraint_name, key, node_id AS holder_id, concrete_kind AS holder_kind FROM ${sql.identifier(postDisjointProbeAlias)}`,\n      );\n    }\n  }\n  const conflictAlias = \"node_claim_conflicts\";\n  if (conflictQueries.length === 0) {\n    ctes.push(\n      sql`${sql.identifier(conflictAlias)} AS (SELECT NULL::integer AS ordinal, NULL::integer AS phase, NULL::integer AS probe_ordinal, NULL::text AS axis, NULL::text AS constraint_name, NULL::text AS key, NULL::text AS holder_id, NULL::text AS holder_kind WHERE FALSE)`,\n    );\n  } else {\n    ctes.push(\n      sql`${sql.identifier(conflictAlias)} AS (${sql.join(conflictQueries, sql` UNION ALL `)})`,\n    );\n  }\n  const conflicts = sql.identifier(conflictAlias);\n  const firstConflict = sql.identifier(\"first_claim_conflict\");\n  const outcomeAlias = \"node_claim_outcome\";\n  ctes.push(sql`\n    ${sql.identifier(outcomeAlias)} AS (\n      SELECT\n        CASE WHEN ${firstConflict}.${sql.identifier(\"axis\")} IS NULL\n          THEN 'node_inserted' ELSE 'claim_conflict' END AS write_discriminator,\n        ${firstConflict}.${sql.identifier(\"axis\")} AS claim_axis,\n        ${firstConflict}.${sql.identifier(\"constraint_name\")} AS claim_constraint_name,\n        ${firstConflict}.${sql.identifier(\"key\")} AS claim_key,\n        ${firstConflict}.${sql.identifier(\"holder_id\")} AS claim_holder_id,\n        ${firstConflict}.${sql.identifier(\"holder_kind\")} AS claim_holder_kind\n      FROM (SELECT 1 AS sentinel) AS \"outcome_sentinel\"\n      LEFT JOIN LATERAL (\n        SELECT *\n        FROM ${conflicts}\n        ORDER BY phase, ordinal, probe_ordinal\n        LIMIT 1\n      ) AS ${firstConflict} ON TRUE\n    )\n  `);\n\n  return sql`\n    WITH ${sql.join(ctes, sql`, `)}\n    SELECT ${sql.identifier(insertedNodeAlias)}.*,\n      ${sql.identifier(outcomeAlias)}.write_discriminator,\n      ${sql.identifier(outcomeAlias)}.claim_axis,\n      ${sql.identifier(outcomeAlias)}.claim_constraint_name,\n      ${sql.identifier(outcomeAlias)}.claim_key,\n      ${sql.identifier(outcomeAlias)}.claim_holder_id,\n      ${sql.identifier(outcomeAlias)}.claim_holder_kind\n    FROM ${sql.identifier(outcomeAlias)}\n    LEFT JOIN ${sql.identifier(insertedNodeAlias)} ON TRUE\n  `;\n}\n\nfunction buildProjectionSql(\n  params: InsertNodeParams,\n  plan: ManagedNodeCreatePlan,\n  timestamp: string,\n  dialect: SqlDialect,\n  fulltextTableName: string,\n  fulltextStrategy: FulltextStrategy | undefined,\n  vectorStrategy: VectorStrategy | undefined,\n): readonly SQL[] | undefined {\n  const projectionSql: SQL[] = [];\n  const fulltextBuilder = fulltextStrategy?.buildSyncFromInsertedNode;\n  const vectorBuilder = vectorStrategy?.buildUpsertFromInsertedNode;\n\n  for (const projection of plan.projections) {\n    switch (projection.kind) {\n      case \"fulltext\": {\n        if (fulltextBuilder === undefined) return;\n        projectionSql.push(\n          toDrizzleSql(\n            fulltextBuilder(\n              fulltextTableName,\n              INSERTED_NODE_PROJECTION_CTE_ALIAS,\n              projection,\n              timestamp,\n            ),\n            dialect,\n          ),\n        );\n        break;\n      }\n      case \"embedding\": {\n        if (vectorStrategy === undefined || vectorBuilder === undefined) return;\n        projectionSql.push(\n          toDrizzleSql(\n            vectorBuilder(\n              {\n                graphId: params.graphId,\n                nodeKind: params.kind,\n                fieldPath: projection.fieldPath,\n                dimensions: projection.dimensions,\n                metric: projection.metric,\n                indexType: projection.indexType,\n              },\n              INSERTED_NODE_PROJECTION_CTE_ALIAS,\n              projection.embedding,\n              timestamp,\n            ),\n            dialect,\n          ),\n        );\n        break;\n      }\n      default: {\n        return projection satisfies never;\n      }\n    }\n  }\n  return projectionSql;\n}\n\n/**\n * Builds one PostgreSQL/PGlite node insert with every requested plan step.\n * Returning `undefined` is the all-or-nothing capability result: callers must\n * use the ordinary node-plus-sidecar path rather than partially fusing.\n */\nexport function buildInsertNodeWithProjections(\n  tables: Tables,\n  params: InsertNodeParams,\n  plan: ManagedNodeCreatePlan,\n  timestamp: string,\n  dialect: SqlDialect,\n  fulltextTableName: string,\n  fulltextStrategy: FulltextStrategy | undefined,\n  vectorStrategy: VectorStrategy | undefined,\n  schemaLockClause?: SQL,\n): SQL | undefined {\n  if (plan.claims.length > 0) {\n    return buildNodeClaimsAndProjections(\n      tables,\n      params,\n      plan,\n      timestamp,\n      dialect,\n      fulltextTableName,\n      fulltextStrategy,\n      vectorStrategy,\n    );\n  }\n\n  const projectionSql = buildProjectionSql(\n    params,\n    plan,\n    timestamp,\n    dialect,\n    fulltextTableName,\n    fulltextStrategy,\n    vectorStrategy,\n  );\n  if (projectionSql === undefined) return;\n\n  const nodeInsert = buildNodeInsert(\n    tables,\n    params,\n    plan,\n    timestamp,\n    schemaLockClause,\n  );\n  return nodeInsert === undefined ? undefined : (\n      buildNodeAndProjections(nodeInsert, projectionSql)\n    );\n}\n","import { type SQL, sql } from \"drizzle-orm\";\n\nimport type {\n  InsertSchemaParams,\n  SchemaWriteFenceParams,\n  SqlDialect,\n} from \"../../types\";\nimport { quotedColumn, type Tables } from \"./shared\";\n\ntype SchemaDialectStrategy = Readonly<{\n  booleanLiteral: (value: boolean) => SQL;\n}>;\n\nfunction createSchemaDialectStrategy(\n  dialect: SqlDialect,\n): SchemaDialectStrategy {\n  const literals = {\n    postgres: { false: \"FALSE\", true: \"TRUE\" },\n    sqlite: { false: \"0\", true: \"1\" },\n  } as const satisfies Record<\n    SqlDialect,\n    Readonly<{ false: string; true: string }>\n  >;\n  const dialectLiterals = literals[dialect];\n  const trueLiteral = sql.raw(dialectLiterals.true);\n  const falseLiteral = sql.raw(dialectLiterals.false);\n\n  return {\n    booleanLiteral(value: boolean): SQL {\n      return value ? trueLiteral : falseLiteral;\n    },\n  };\n}\n\nconst SCHEMA_DIALECT_STRATEGIES: Record<SqlDialect, SchemaDialectStrategy> = {\n  postgres: createSchemaDialectStrategy(\"postgres\"),\n  sqlite: createSchemaDialectStrategy(\"sqlite\"),\n};\n\n/**\n * Builds an INSERT query for a schema version.\n * Uses raw column names in the column list (required by SQL syntax).\n */\nexport function buildInsertSchema(\n  tables: Tables,\n  params: InsertSchemaParams,\n  timestamp: string,\n  dialect: SqlDialect = \"sqlite\",\n): SQL {\n  const { schemaVersions } = tables;\n  const strategy = SCHEMA_DIALECT_STRATEGIES[dialect];\n  const schemaDocumentJson = JSON.stringify(params.schemaDoc);\n  const isActiveValue = strategy.booleanLiteral(params.isActive);\n\n  const columns = sql.raw(\n    `\"${schemaVersions.graphId.name}\", \"${schemaVersions.version.name}\", \"${schemaVersions.schemaHash.name}\", \"${schemaVersions.schemaDoc.name}\", \"${schemaVersions.createdAt.name}\", \"${schemaVersions.isActive.name}\"`,\n  );\n\n  return sql`\n    INSERT INTO ${schemaVersions} (${columns})\n    VALUES (\n      ${params.graphId}, ${params.version},\n      ${params.schemaHash}, ${schemaDocumentJson},\n      ${timestamp}, ${isActiveValue}\n    )\n    RETURNING *\n  `;\n}\n\n/**\n * Builds a SELECT query to get the active schema for a graph.\n */\nexport function buildGetActiveSchema(\n  tables: Tables,\n  graphId: string,\n  dialect: SqlDialect = \"sqlite\",\n): SQL {\n  const { schemaVersions } = tables;\n  const strategy = SCHEMA_DIALECT_STRATEGIES[dialect];\n\n  return sql`\n    SELECT * FROM ${schemaVersions}\n    WHERE ${schemaVersions.graphId} = ${graphId}\n      AND ${schemaVersions.isActive} = ${strategy.booleanLiteral(true)}\n  `;\n}\n\n/** Returns one row only while the expected schema version remains active. */\nexport function buildSchemaFenceProbe(\n  tables: Tables,\n  params: SchemaWriteFenceParams,\n  lockClause: SQL,\n): SQL {\n  const { schemaVersions } = tables;\n  return sql`\n    SELECT ${schemaVersions.version}\n    FROM ${schemaVersions}\n    WHERE ${schemaVersions.graphId} = ${params.graphId}\n      AND ${schemaVersions.version} = ${params.expectedVersion}\n      AND ${schemaVersions.isActive} = TRUE\n    ${lockClause}\n  `;\n}\n\n/**\n * Builds a SELECT query to get a specific schema version.\n */\nexport function buildGetSchemaVersion(\n  tables: Tables,\n  graphId: string,\n  version: number,\n): SQL {\n  const { schemaVersions } = tables;\n\n  return sql`\n    SELECT * FROM ${schemaVersions}\n    WHERE ${schemaVersions.graphId} = ${graphId}\n      AND ${schemaVersions.version} = ${version}\n  `;\n}\n\n/**\n * Builds UPDATE queries to set the active schema version.\n * Returns two queries: first deactivates all, second activates the specified version.\n * Uses raw column names in SET clause (SQLite doesn't allow table prefix there).\n */\nexport function buildSetActiveSchema(\n  tables: Tables,\n  graphId: string,\n  version: number,\n  dialect: SqlDialect = \"sqlite\",\n): { deactivateAll: SQL; activateVersion: SQL } {\n  const { schemaVersions } = tables;\n  const strategy = SCHEMA_DIALECT_STRATEGIES[dialect];\n\n  const deactivateAll = sql`\n    UPDATE ${schemaVersions}\n    SET ${quotedColumn(schemaVersions.isActive)} = ${strategy.booleanLiteral(false)}\n    WHERE ${schemaVersions.graphId} = ${graphId}\n  `;\n\n  const activateVersion = sql`\n    UPDATE ${schemaVersions}\n    SET ${quotedColumn(schemaVersions.isActive)} = ${strategy.booleanLiteral(true)}\n    WHERE ${schemaVersions.graphId} = ${graphId}\n      AND ${schemaVersions.version} = ${version}\n  `;\n\n  return { deactivateAll, activateVersion };\n}\n","import { getTableName, type SQL, sql } from \"drizzle-orm\";\n\nimport type { FulltextStrategy } from \"../../../query/dialect/fulltext-strategy\";\nimport type { VectorStrategy } from \"../../../query/dialect/vector-strategy\";\nimport { isSqlFragment, type SqlFragment } from \"../../../query/sql-fragment\";\nimport { type ConstrainedCardinality } from \"../../../store/claims/edge-claims\";\nimport { isPresent, requireDefined } from \"../../../utils/presence\";\nimport type { PrimaryKeyRelation } from \"../../../utils/sql-errors\";\nimport type {\n  AtomicEdgeDeleteBatchInput,\n  AtomicEdgeResolvedUpdateEntry,\n  AtomicNodeBatchEntry,\n  AtomicNodeBatchResultMode,\n  AtomicNodeDeleteBatchInput,\n  AtomicNodePostimageEntry,\n  AtomicNodeProjectionFamily,\n  AtomicNodeReplacementEntry,\n  AtomicNodeResolvedUpdateEntry,\n} from \"../../capabilities/atomic-mutation-program\";\nimport type { FenceSql } from \"../../capabilities/write-fence\";\nimport { nowIso } from \"../../row-mappers\";\nimport type {\n  CheckUniqueBatchParams,\n  CheckUniqueParams,\n  ClaimEdgeCardinalityParams,\n  CompareAndSetNodeParams,\n  ContributionMaterializationIdentity,\n  CountEdgesByKindParams,\n  CountEdgesFromParams,\n  CountNodesByKindParams,\n  DeleteEdgeParams,\n  DeleteEdgesBatchParams,\n  DeleteFulltextBatchParams,\n  DeleteFulltextParams,\n  DeleteNodeParams,\n  DeleteUniqueParams,\n  EdgeExistsBetweenParams,\n  FindEdgesByEndpointSetParams,\n  FindEdgesByHeterogeneousEndpointSetParams,\n  FindEdgesByKindParams,\n  FindEdgesConnectedToParams,\n  FindNodesByKindParams,\n  FulltextSearchParams,\n  HardDeleteEdgeParams,\n  HardDeleteNodeParams,\n  HardDeleteUniquesByConcreteKindParams,\n  HardDeleteUniquesByNodeIdsParams,\n  HybridSearchParams,\n  InsertEdgeParams,\n  InsertNodeParams,\n  InsertSchemaParams,\n  InsertUniqueParams,\n  ManagedNodeCreatePlan,\n  PurgeEdgeClaimsParams,\n  RecordContributionMaterializationParams,\n  ResolvedNodeUpdateBatchParams,\n  SchemaWriteFenceParams,\n  SqlDialect,\n  UpdateEdgeParams,\n  UpdateNodeParams,\n  UpdateNodeSetParams,\n  UpsertFulltextBatchParams,\n  UpsertFulltextParams,\n} from \"../../types\";\nimport { toDrizzleSql } from \"../execution/types\";\nimport { buildLockSchemaVersionAndGraphWrite } from \"../postgres-schema-write-fence\";\nimport type { PostgresTables } from \"../schema/postgres\";\nimport type { SqliteTables } from \"../schema/sqlite\";\nimport {\n  type AtomicNodeClaimEntry,\n  buildAtomicDeletedNodeClaimReleaseWithSchemaFence,\n  buildAtomicNodeClaimCleanupWithSchemaFence,\n  buildAtomicNodeClaimGatePredicateWithSchemaFence,\n  buildAtomicNodeClaimUpsertWithSchemaFence,\n  buildAtomicNodeReplacementClaimReleaseWithSchemaFence,\n} from \"./atomic-node-claims\";\nimport { buildClearGraph, type ClearGraphStatement } from \"./clear\";\nimport {\n  buildCountEdgesByKind,\n  buildCountNodesByKind,\n  buildFindEdgesByEndpointSet,\n  buildFindEdgesByHeterogeneousEndpointSet,\n  buildFindEdgesByKind,\n  buildFindNodesByKind,\n} from \"./collections\";\nimport {\n  buildContendedEdgeRowAudit,\n  buildContendedUniqueRowAudit,\n  buildDisjointOverlapAudit,\n} from \"./constraint-fence-audit\";\nimport type { AtomicContributionEvidence } from \"./contribution-evidence\";\nimport {\n  buildAcquireAtomicEdgeClaims,\n  buildAssertAtomicEdgeClaimsOwned,\n  buildDeleteStaleAtomicEdgeClaims,\n  buildInsertEdgeIfEndpointsLiveWithCardinalityClaim,\n  buildLockEdgeClaimGuarded,\n  buildLockEdgeClaims,\n  buildPurgeEdgeClaims,\n  buildTakeOverEdgeClaim,\n  buildTakeOverEdgeClaimGuarded,\n} from \"./edge-claims\";\nimport type {\n  AtomicConvergeEdgesParams,\n  ConvergeEdgeCreateParams,\n} from \"./edges\";\nimport {\n  buildAssertAtomicEdgeMutationPostimages,\n  buildAtomicConvergeEdges,\n  buildAtomicConvergeEdgesTombstoneRefusal,\n  buildAtomicEdgeDeleteBatchWithSchemaFence,\n  buildAtomicEdgeResolvedUpdateBatch,\n  buildConvergeEdgeCreate,\n  buildCountEdgesFrom,\n  buildDeleteEdge,\n  buildDeleteEdgesBatch,\n  buildEdgeExistsBetween,\n  buildFindEdgesConnectedTo,\n  buildGetEdge,\n  buildGetEdges,\n  buildHardDeleteEdge,\n  buildHardDeleteEdgesBatch,\n  buildHardDeleteEdgesByNode,\n  buildInsertEdge,\n  buildInsertEdgeIfEndpointsLive,\n  buildInsertEdgeIfEndpointsLiveWithSchemaFence,\n  buildInsertEdgeNoReturn,\n  buildInsertEdgesBatch,\n  buildInsertEdgesBatchReturning,\n  buildInsertEdgesBatchReturningWithSchemaFence,\n  buildInsertEdgesBatchWithSchemaFence,\n  buildInsertEdgesDurableBatchReturning,\n  buildReadAtomicEdgeMutationPostimages,\n  buildUpdateEdge,\n} from \"./edges\";\nimport { buildFulltextSearch } from \"./fulltext\";\nimport { buildHybridSearchStatement, hybridCandidatesRef } from \"./hybrid\";\nimport {\n  buildAtomicNodeProjectionStatements,\n  buildInsertNodeWithProjections,\n} from \"./node-projections\";\nimport {\n  buildAssertAtomicNodeMutationPostimages,\n  buildAssertAtomicNodeProjectionEvidence,\n  buildAtomicNodeBatchWithSchemaFence,\n  buildAtomicNodeDeleteBatchWithSchemaFence,\n  buildAtomicNodeReplacementBatchWithSchemaFence,\n  buildAtomicNodeResolvedUpdateBatch,\n  buildDeleteNode,\n  buildGetNode,\n  buildGetNodes,\n  buildHardDeleteNode,\n  buildInsertNode,\n  buildInsertNodeIfAbsent,\n  buildInsertNodeIfAbsentWithSchemaFence,\n  buildInsertNodeNoReturn,\n  buildInsertNodesBatch,\n  buildInsertNodesBatchReturning,\n  buildInsertNodesBatchWithSchemaFence,\n  buildInsertNodeWithSchemaFence,\n  buildReadAtomicNodeMutationPostimages,\n  buildResolvedNodeUpdateBatch,\n  buildUpdateNode,\n  buildUpdateNodeSet,\n} from \"./nodes\";\nimport {\n  buildGetActiveSchema,\n  buildGetSchemaVersion,\n  buildInsertSchema,\n  buildSchemaFenceProbe,\n  buildSetActiveSchema,\n} from \"./schema\";\nimport {\n  edgePrimaryKeyConstraint,\n  liveNodeIdsSubquery,\n  nodePrimaryKeyConstraint,\n  type Tables,\n} from \"./shared\";\nimport {\n  buildCheckUnique,\n  buildCheckUniqueBatch,\n  buildDeleteUnique,\n  buildHardDeleteUniquesByConcreteKind,\n  buildHardDeleteUniquesByNode,\n  buildHardDeleteUniquesByNodeIds,\n  buildInsertUnique,\n  buildInsertUniqueBatch,\n} from \"./uniques\";\n\n/**\n * Binds an absent value as a SQL `NULL` literal rather than as a bound\n * parameter, so the column's own type drives the insert instead of the\n * driver having to infer a type for a null placeholder.\n */\nfunction nullableText(value: string | undefined): SQL {\n  return value === undefined ? sql`NULL` : sql`${value}`;\n}\n\nexport type CommonOperationStrategy = Readonly<{\n  atomicNodeProjectionFamilies: readonly AtomicNodeProjectionFamily[];\n  /** Terminal NOT NULL sentinel shared by resolved mutation-set programs. */\n  /**\n   * The exact NOT NULL sentinels emitted by the closed edge-batch program.\n   * Derive them from the same table definitions as the SQL so error\n   * classification cannot drift when a physical column is renamed.\n   */\n  atomicEdgeRefusalConstraints: Readonly<{\n    cardinality: Readonly<{ table: string; column: string }>;\n    deleteIdentity: Readonly<{ table: string; column: string }>;\n    durableIdentity: Readonly<{ table: string; column: string }>;\n    endpoint: Readonly<{ table: string; column: string }>;\n    mutationPostimage: Readonly<{ table: string; column: string }>;\n    tombstoneConvergence: Readonly<{ table: string; column: string }>;\n  }>;\n  atomicNodeRefusalConstraints: Readonly<{\n    deleteRestricted: Readonly<{ table: string; column: string }>;\n    liveIdentity: Readonly<{ table: string; column: string }>;\n    mutationPostimage: Readonly<{ table: string; column: string }>;\n    projectionEvidence: Readonly<{ table: string; column: string }>;\n  }>;\n  /**\n   * The nodes and edges PRIMARY KEY constraints, as the engine names them — the\n   * only scope in which a driver duplicate-key failure means \"this identity is\n   * already taken\" rather than \"these values collide with another row's\".\n   *\n   * Data rather than SQL, and a member of this interface rather than a lookup at\n   * the classification site, so it is derived once from the same `tables` the\n   * insert builders render and every dialect is forced by the type checker to\n   * supply it.\n   */\n  primaryKeyConstraints: Readonly<{\n    nodes: PrimaryKeyRelation;\n    edges: PrimaryKeyRelation;\n  }>;\n  buildUpsertFulltext: (\n    params: UpsertFulltextParams,\n    timestamp: string,\n  ) => readonly SQL[];\n  buildDeleteFulltext: (params: DeleteFulltextParams) => readonly SQL[];\n  buildDeleteFulltextByNode: (\n    graphId: string,\n    nodeKind: string,\n    nodeId: string,\n  ) => readonly SQL[];\n  buildUpsertFulltextBatch: (\n    params: UpsertFulltextBatchParams,\n    timestamp: string,\n  ) => readonly SQL[];\n  buildDeleteFulltextBatch: (\n    params: DeleteFulltextBatchParams,\n  ) => readonly SQL[];\n  buildFulltextSearch: (params: FulltextSearchParams) => SQL;\n  /**\n   * Composes the single-statement hybrid search: the caller supplies the\n   * vector source SQL (strategy-owned); this member builds the fulltext\n   * source over the same candidate set and fuses both via\n   * {@link buildHybridSearchStatement}.\n   */\n  buildHybridSearch: (\n    params: HybridSearchParams,\n    vectorSql: SQL,\n    vectorScoreDescending: boolean,\n  ) => SQL;\n  buildInsertNode: (params: InsertNodeParams, timestamp: string) => SQL;\n  buildInsertNodeIfAbsent: (params: InsertNodeParams, timestamp: string) => SQL;\n  buildInsertNodeIfAbsentWithSchemaFence: (\n    params: InsertNodeParams,\n    timestamp: string,\n    schemaFence: SchemaWriteFenceParams,\n    schemaLockClause: SQL,\n  ) => SQL;\n  buildInsertNodeWithSchemaFence: (\n    params: InsertNodeParams,\n    timestamp: string,\n    schemaFence: SchemaWriteFenceParams,\n    schemaLockClause: SQL,\n  ) => SQL;\n  buildInsertNodeWithProjections?: (\n    params: InsertNodeParams,\n    plan: ManagedNodeCreatePlan,\n    timestamp: string,\n    schemaLockClause?: SQL,\n  ) => SQL | undefined;\n  buildAtomicNodeProjectionStatements: (\n    creates: readonly AtomicNodePostimageEntry[],\n    updates: readonly AtomicNodeResolvedUpdateEntry[],\n    timestamp: string,\n    chunkSize: number,\n  ) => readonly SQL[] | undefined;\n  buildInsertNodeNoReturn: (params: InsertNodeParams, timestamp: string) => SQL;\n  buildInsertNodesBatch: (\n    params: readonly InsertNodeParams[],\n    timestamp: string,\n  ) => SQL;\n  buildInsertNodesBatchReturning: (\n    params: readonly InsertNodeParams[],\n    timestamp: string,\n  ) => SQL;\n  buildInsertNodesBatchWithSchemaFence: (\n    params: readonly InsertNodeParams[],\n    timestamp: string,\n    schemaFence: SchemaWriteFenceParams,\n    schemaLockClause: SQL,\n  ) => SQL;\n  buildAtomicNodeBatchWithSchemaFence: (\n    entries: readonly AtomicNodeBatchEntry[],\n    timestamp: string,\n    schemaFence: SchemaWriteFenceParams,\n    schemaLockClause: SQL,\n    resultMode: AtomicNodeBatchResultMode,\n    writeGate?: SQL,\n  ) => SQL;\n  buildAtomicNodeReplacementBatchWithSchemaFence: (\n    entries: readonly AtomicNodeReplacementEntry[],\n    timestamp: string,\n    schemaFence: SchemaWriteFenceParams,\n    schemaLockClause: SQL,\n    writeGate?: SQL,\n  ) => SQL;\n  buildAtomicNodeClaimUpsertWithSchemaFence: (\n    entries: readonly AtomicNodeClaimEntry<AtomicNodePostimageEntry>[],\n    schemaFence: SchemaWriteFenceParams,\n    schemaLockClause: SQL,\n  ) => SQL;\n  buildAtomicNodeClaimGatePredicateWithSchemaFence: (\n    entries: readonly AtomicNodeClaimEntry<AtomicNodePostimageEntry>[],\n    schemaFence: SchemaWriteFenceParams,\n    schemaLockClause: SQL,\n  ) => SQL;\n  buildAtomicNodeClaimCleanupWithSchemaFence: (\n    entries: readonly AtomicNodeClaimEntry<AtomicNodePostimageEntry>[],\n    schemaFence: SchemaWriteFenceParams,\n    schemaLockClause: SQL,\n  ) => SQL;\n  buildAtomicDeletedNodeClaimReleaseWithSchemaFence: (\n    input: Readonly<{\n      graphId: string;\n      kind: string;\n      ids: readonly string[];\n      timestamp: string;\n    }>,\n    schemaFence: SchemaWriteFenceParams,\n    schemaLockClause: SQL,\n  ) => SQL;\n  buildAtomicNodeReplacementClaimReleaseWithSchemaFence: (\n    input: Readonly<{\n      graphId: string;\n      kind: string;\n      ids: readonly string[];\n      timestamp: string;\n    }>,\n    schemaFence: SchemaWriteFenceParams,\n    schemaLockClause: SQL,\n  ) => SQL;\n  buildGetNode: (graphId: string, kind: string, id: string) => SQL;\n  buildGetNodes: (graphId: string, kind: string, ids: readonly string[]) => SQL;\n  buildUpdateNode: (params: UpdateNodeParams, timestamp: string) => SQL;\n  buildAtomicNodeResolvedUpdateBatch: (\n    entries: readonly AtomicNodeResolvedUpdateEntry[],\n    timestamp: string,\n    schemaFence: SchemaWriteFenceParams,\n    schemaLockClause: SQL,\n  ) => SQL;\n  buildAssertAtomicNodeMutationPostimages: (\n    creates: readonly AtomicNodePostimageEntry[],\n    updates: readonly AtomicNodeResolvedUpdateEntry[],\n    timestamp: string,\n    schemaFence: SchemaWriteFenceParams,\n  ) => SQL;\n  buildAssertAtomicNodeProjectionEvidence: (\n    timestamp: string,\n    evidence: readonly AtomicContributionEvidence[],\n  ) => SQL;\n  buildReadAtomicNodeMutationPostimages: (\n    graphId: string,\n    kind: string,\n    ids: readonly string[],\n    schemaFence: SchemaWriteFenceParams,\n  ) => SQL;\n  buildUpdateNodeSet: (\n    params: CompareAndSetNodeParams | UpdateNodeSetParams,\n    timestamp: string,\n  ) => SQL;\n  buildResolvedNodeUpdateBatch: (\n    params: ResolvedNodeUpdateBatchParams,\n    timestamp: string,\n  ) => SQL;\n  buildDeleteNode: (params: DeleteNodeParams, timestamp: string) => SQL;\n  buildAtomicNodeDeleteBatchWithSchemaFence: (\n    input: AtomicNodeDeleteBatchInput,\n    timestamp: string,\n    schemaLockClause: SQL,\n  ) => SQL;\n  buildSchemaFenceProbe: (\n    params: SchemaWriteFenceParams,\n    schemaLockClause: SQL,\n  ) => SQL;\n  buildHardDeleteNode: (params: HardDeleteNodeParams) => SQL;\n  buildInsertEdge: (params: InsertEdgeParams, timestamp: string) => SQL;\n  buildInsertEdgeIfEndpointsLive: (\n    params: InsertEdgeParams,\n    timestamp: string,\n  ) => SQL;\n  buildInsertEdgeIfEndpointsLiveWithSchemaFence: (\n    params: InsertEdgeParams,\n    timestamp: string,\n    schemaFence: SchemaWriteFenceParams,\n    schemaLockClause: SQL,\n  ) => SQL;\n  /** Single-statement match-key convergence. */\n  buildConvergeEdgeCreate?: (params: ConvergeEdgeCreateParams) => SQL;\n  /** Closed-program durable convergence and its tombstone revival leg. */\n  buildAtomicConvergeEdges?: (params: AtomicConvergeEdgesParams) => SQL;\n  buildAtomicConvergeEdgesTombstoneRefusal?: (\n    params: Omit<AtomicConvergeEdgesParams, \"timestamp\">,\n  ) => SQL;\n  /** PostgreSQL transaction-only claim + endpoint + edge write. */\n  buildInsertEdgeIfEndpointsLiveWithCardinalityClaim?: (\n    params: InsertEdgeParams,\n    claim: ClaimEdgeCardinalityParams,\n    timestamp: string,\n  ) => SQL;\n  /**\n   * One statement per cardinality group in the chunk — see\n   * `buildDeleteStaleAtomicEdgeClaims`. A chunk of one edge kind, the ordinary\n   * case, renders exactly one.\n   */\n  buildDeleteStaleAtomicEdgeClaims: (\n    entries: readonly ClaimEdgeCardinalityParams[],\n    schemaFence: SchemaWriteFenceParams,\n    schemaLockClause: SQL,\n  ) => readonly SQL[];\n  buildAcquireAtomicEdgeClaims: (\n    entries: readonly ClaimEdgeCardinalityParams[],\n    timestamp: string,\n    schemaFence: SchemaWriteFenceParams,\n    schemaLockClause: SQL,\n  ) => readonly SQL[];\n  buildAssertAtomicEdgeClaimsOwned: (\n    entries: readonly ClaimEdgeCardinalityParams[],\n    timestamp: string,\n    schemaFence: SchemaWriteFenceParams,\n    schemaLockClause: SQL,\n  ) => readonly SQL[];\n  buildInsertEdgeNoReturn: (params: InsertEdgeParams, timestamp: string) => SQL;\n  buildInsertEdgesBatch: (\n    params: readonly InsertEdgeParams[],\n    timestamp: string,\n  ) => SQL;\n  buildInsertEdgesBatchReturning: (\n    params: readonly InsertEdgeParams[],\n    timestamp: string,\n  ) => SQL;\n  buildInsertEdgesBatchWithSchemaFence: (\n    params: readonly InsertEdgeParams[],\n    timestamp: string,\n    schemaFence: SchemaWriteFenceParams,\n    schemaLockClause: SQL,\n  ) => SQL;\n  buildInsertEdgesBatchReturningWithSchemaFence: (\n    params: readonly InsertEdgeParams[],\n    timestamp: string,\n    schemaFence: SchemaWriteFenceParams,\n    schemaLockClause: SQL,\n  ) => SQL;\n  buildInsertEdgesDurableBatchReturning: (\n    params: readonly InsertEdgeParams[],\n    timestamp: string,\n  ) => SQL;\n  buildGetEdge: (graphId: string, id: string) => SQL;\n  buildGetEdges: (graphId: string, ids: readonly string[]) => SQL;\n  buildUpdateEdge: (params: UpdateEdgeParams, timestamp: string) => SQL;\n  buildAtomicEdgeResolvedUpdateBatch: (\n    entries: readonly AtomicEdgeResolvedUpdateEntry[],\n    timestamp: string,\n    schemaFence: SchemaWriteFenceParams,\n    schemaLockClause: SQL,\n  ) => SQL;\n  buildAssertAtomicEdgeMutationPostimages: (\n    creates: readonly InsertEdgeParams[],\n    updates: readonly AtomicEdgeResolvedUpdateEntry[],\n    timestamp: string,\n    schemaFence: SchemaWriteFenceParams,\n  ) => SQL;\n  buildReadAtomicEdgeMutationPostimages: (\n    graphId: string,\n    ids: readonly string[],\n    schemaFence: SchemaWriteFenceParams,\n  ) => SQL;\n  buildDeleteEdge: (params: DeleteEdgeParams, timestamp: string) => SQL;\n  buildDeleteEdgesBatch: (\n    params: DeleteEdgesBatchParams,\n    timestamp: string,\n  ) => SQL;\n  buildAtomicEdgeDeleteBatchWithSchemaFence: (\n    input: AtomicEdgeDeleteBatchInput,\n    timestamp: string,\n    schemaLockClause: SQL,\n  ) => SQL;\n  buildHardDeleteEdge: (params: HardDeleteEdgeParams) => SQL;\n  buildHardDeleteEdgesBatch: (params: DeleteEdgesBatchParams) => SQL;\n  buildHardDeleteEdgesByNode: (\n    graphId: string,\n    nodeKind: string,\n    nodeId: string,\n  ) => SQL;\n  buildCountEdgesFrom: (params: CountEdgesFromParams) => SQL;\n  buildEdgeExistsBetween: (params: EdgeExistsBetweenParams) => SQL;\n  buildFindEdgesConnectedTo: (params: FindEdgesConnectedToParams) => SQL;\n  buildFindNodesByKind: (params: FindNodesByKindParams) => SQL;\n  buildCountNodesByKind: (params: CountNodesByKindParams) => SQL;\n  buildFindEdgesByKind: (params: FindEdgesByKindParams) => SQL;\n  /**\n   * Interface member rather than an optional one: every dialect must supply\n   * an endpoint-set read, so the operation can never be silently skipped by a\n   * dialect that forgot it. Both bundled dialects get it from the shared\n   * builder.\n   */\n  buildFindEdgesByEndpointSet: (\n    params: FindEdgesByEndpointSetParams,\n    endpointIds: readonly string[],\n  ) => SQL;\n  buildFindEdgesByHeterogeneousEndpointSet: (\n    params: FindEdgesByHeterogeneousEndpointSetParams,\n    endpoints: FindEdgesByHeterogeneousEndpointSetParams[\"endpoints\"],\n    edgeKinds: readonly string[],\n  ) => SQL;\n  buildCountEdgesByKind: (params: CountEdgesByKindParams) => SQL;\n  buildInsertUnique: (params: InsertUniqueParams) => SQL;\n  buildInsertUniqueBatch: (entries: readonly InsertUniqueParams[]) => SQL;\n  buildDeleteUnique: (params: DeleteUniqueParams, timestamp: string) => SQL;\n  buildHardDeleteUniquesByNode: (\n    graphId: string,\n    concreteKind: string,\n    nodeId: string,\n  ) => SQL;\n  buildHardDeleteUniquesByNodeIds: (\n    params: HardDeleteUniquesByNodeIdsParams,\n  ) => SQL;\n  /**\n   * Dialect-independent by construction — the fragment names only the\n   * relation and two columns, so the store-side kind-removal cleanup compiles\n   * the identical predicate through its own execution path.\n   */\n  buildHardDeleteUniquesByConcreteKind: (\n    params: HardDeleteUniquesByConcreteKindParams,\n  ) => SqlFragment;\n  buildCheckUnique: (params: CheckUniqueParams) => SQL;\n  buildCheckUniqueBatch: (params: CheckUniqueBatchParams) => SQL;\n  /**\n   * The two edge-claim statements, in the order the driver issues them: the\n   * decision-free lock that reports the committed holder, then — only for a\n   * foreign holder — the conditional takeover. Members of this interface rather\n   * than dialect helpers, so the type checker forces both dialects to have them.\n   */\n  buildLockEdgeClaims: (\n    entries: readonly ClaimEdgeCardinalityParams[],\n    timestamp: string,\n  ) => SQL;\n  buildLockEdgeClaimGuarded: (\n    params: ClaimEdgeCardinalityParams,\n    timestamp: string,\n  ) => SQL;\n  buildTakeOverEdgeClaim: (\n    params: ClaimEdgeCardinalityParams,\n    timestamp: string,\n  ) => SQL;\n  buildTakeOverEdgeClaimGuarded: (\n    params: ClaimEdgeCardinalityParams,\n    timestamp: string,\n  ) => SQL;\n  buildPurgeEdgeClaims: (params: PurgeEdgeClaimsParams) => SQL;\n  /**\n   * The three read-only fence-audit statements, one per constraint family.\n   * Members of this interface for the same reason the claim statements are:\n   * the type checker forces both dialects to have them, so a family cannot be\n   * audited on one backend and silently skipped on the other.\n   */\n  buildContendedUniqueRowAudit: (\n    graphId: string,\n    constraintNames: readonly string[],\n  ) => SQL;\n  buildContendedEdgeRowAudit: (\n    graphId: string,\n    cardinality: ConstrainedCardinality,\n    edgeKinds: readonly string[],\n  ) => SQL;\n  buildDisjointOverlapAudit: (\n    graphId: string,\n    kinds: readonly [string, string],\n  ) => SQL;\n  buildGetActiveSchema: (graphId: string) => SQL;\n  /**\n   * PostgreSQL-only dependent schema-row + graph-advisory fence. `fenceSql`\n   * is the resolved fence target's own spelling — never spelled by this\n   * builder itself — so the fused statement and the portable lock sites a\n   * derived profile's `FenceSql` override backs always exclude on the same\n   * key.\n   */\n  buildLockSchemaVersionAndGraphWrite?: (\n    params: SchemaWriteFenceParams,\n    advisoryLockNamespace: string,\n    fenceSql: FenceSql,\n  ) => SQL;\n  buildInsertSchema: (params: InsertSchemaParams, timestamp: string) => SQL;\n  buildGetSchemaVersion: (graphId: string, version: number) => SQL;\n  buildSetActiveSchema: (\n    graphId: string,\n    version: number,\n  ) => Readonly<{ activateVersion: SQL; deactivateAll: SQL }>;\n  /**\n   * Write one contribution marker row outright (no conflict clause), for\n   * the transaction-scoped stamp a destructive rebuild commits alongside\n   * the DDL that produced it.\n   */\n  buildInsertContributionMaterialization: (\n    params: RecordContributionMaterializationParams,\n  ) => SQL;\n  buildDeleteContributionMaterialization: (\n    identity: ContributionMaterializationIdentity,\n  ) => SQL;\n  buildTableExists: (tableName: string) => SQL;\n  buildClearGraph: (graphId: string) => readonly ClearGraphStatement[];\n}>;\n\n/**\n * Vector embedding operations are no longer part of the dialect operation\n * strategy: the active {@link VectorStrategy} owns all embedding storage\n * and SQL (upsert / delete / search / index lifecycle) per-`(kind, field)`,\n * so both dialects share the same operation strategy shape.\n */\nexport type SqliteOperationStrategy = CommonOperationStrategy;\n\nexport type PostgresOperationStrategy = CommonOperationStrategy;\n\ntype TableOperationBuilder = (tables: Tables, ...args: never[]) => SQL;\n\ntype TableOperationBuilderMap = Readonly<Record<string, TableOperationBuilder>>;\n\ntype BoundTableOperationBuilderMap<TBuilders extends TableOperationBuilderMap> =\n  Readonly<{\n    [K in keyof TBuilders]: TBuilders[K] extends (\n      (tables: Tables, ...args: infer TArguments) => SQL\n    ) ?\n      (...args: TArguments) => SQL\n    : never;\n  }>;\n\nfunction bindTableOperationBuilders<TBuilders extends TableOperationBuilderMap>(\n  tables: Tables,\n  builders: TBuilders,\n): BoundTableOperationBuilderMap<TBuilders> {\n  const boundEntries = Object.entries(builders).map(([name, builder]) => {\n    function boundBuilder(...args: never[]): SQL {\n      return builder(tables, ...args);\n    }\n\n    return [name, boundBuilder] as const;\n  });\n\n  return Object.fromEntries(\n    boundEntries,\n  ) as BoundTableOperationBuilderMap<TBuilders>;\n}\n\nconst COMMON_TABLE_OPERATION_BUILDERS = {\n  buildInsertNode,\n  buildInsertNodeIfAbsent,\n  buildInsertNodeIfAbsentWithSchemaFence,\n  buildInsertNodeWithSchemaFence,\n  buildInsertNodeNoReturn,\n  buildInsertNodesBatch,\n  buildInsertNodesBatchReturning,\n  buildInsertNodesBatchWithSchemaFence,\n  buildAtomicNodeBatchWithSchemaFence,\n  buildAtomicNodeReplacementBatchWithSchemaFence,\n  buildGetNode,\n  buildGetNodes,\n  buildUpdateNode,\n  buildAtomicNodeResolvedUpdateBatch,\n  buildResolvedNodeUpdateBatch,\n  buildAssertAtomicNodeMutationPostimages,\n  buildAssertAtomicNodeProjectionEvidence,\n  buildReadAtomicNodeMutationPostimages,\n  buildDeleteNode,\n  buildHardDeleteNode,\n  buildInsertEdge,\n  buildInsertEdgeIfEndpointsLive,\n  buildInsertEdgeIfEndpointsLiveWithSchemaFence,\n  buildInsertEdgeNoReturn,\n  buildInsertEdgesBatch,\n  buildInsertEdgesBatchReturning,\n  buildInsertEdgesBatchWithSchemaFence,\n  buildInsertEdgesBatchReturningWithSchemaFence,\n  buildGetEdge,\n  buildGetEdges,\n  buildUpdateEdge,\n  buildAtomicEdgeResolvedUpdateBatch,\n  buildAssertAtomicEdgeMutationPostimages,\n  buildReadAtomicEdgeMutationPostimages,\n  buildDeleteEdge,\n  buildDeleteEdgesBatch,\n  buildHardDeleteEdge,\n  buildHardDeleteEdgesBatch,\n  buildHardDeleteEdgesByNode,\n  buildCountEdgesFrom,\n  buildEdgeExistsBetween,\n  buildFindEdgesConnectedTo,\n  buildFindNodesByKind,\n  buildCountNodesByKind,\n  buildFindEdgesByKind,\n  buildFindEdgesByEndpointSet,\n  buildFindEdgesByHeterogeneousEndpointSet,\n  buildCountEdgesByKind,\n  buildDeleteUnique,\n  buildHardDeleteUniquesByNode,\n  buildHardDeleteUniquesByNodeIds,\n  buildCheckUnique,\n  buildCheckUniqueBatch,\n  buildGetSchemaVersion,\n} as const satisfies TableOperationBuilderMap;\n\n/**\n * `CommonOperationStrategy.buildTableExists`'s per-dialect query, keyed by\n * dialect rather than switched on it — the same shape\n * `SCHEMA_DIALECT_STRATEGIES` (operations/schema.ts) and\n * `EXISTING_COLUMN_QUALIFIERS` (operations/shared.ts) already use for a\n * decision one shared function must make for both dialects.\n */\nconst TABLE_EXISTS_QUERIES = {\n  // `pg_table_is_visible` resolves visibility through the session\n  // `search_path` — exactly how the unqualified DELETE / ANALYZE this probe\n  // guards resolves `tableName`. Scoping to `current_schema()` instead would\n  // report the table missing whenever it lives in a search_path schema that\n  // is not the current one (a shared-schema / multi-tenant deployment),\n  // skipping a statement that would in fact have hit the table — a guard\n  // narrower than what it protects.\n  // The template's inner-line indentation (12/14/12 spaces) is pinned to\n  // match the exact text the prior `switch`-based implementation emitted —\n  // see tests/engine-profile-parity.test.ts's tableExists-probe pins — not\n  // this object literal's own 2-space nesting.\n  // eslint-disable-next-line unicorn/template-indent -- this SQL text is snapshot-asserted verbatim (tests/engine-profile-parity.test.ts); autofix would reindent it to this object literal's nesting depth and change the captured statement text.\n  postgres: (tableName: string): SQL => sql`\n            SELECT c.relname AS table_name\n            FROM pg_catalog.pg_class AS c\n            WHERE c.relname = ${tableName}\n              AND c.relkind IN ('r', 'p', 'v', 'm', 'f')\n              AND pg_catalog.pg_table_is_visible(c.oid)\n            LIMIT 1\n          `,\n  sqlite: (tableName: string): SQL =>\n    sql`SELECT name AS table_name FROM sqlite_master WHERE type IN ('table', 'view') AND name = ${tableName}`,\n} satisfies Record<SqlDialect, (tableName: string) => SQL>;\n\n/**\n * PostgreSQL must lock the complete version-eligible set before the outer\n * count gate can admit any update. SQLite owns its single writer before this\n * statement runs, so its token is deliberately empty.\n */\nconst RESOLVED_NODE_UPDATE_LOCK_CLAUSES = {\n  postgres: sql`FOR UPDATE`,\n  sqlite: sql.empty(),\n} satisfies Record<SqlDialect, SQL>;\n\nfunction createCommonOperationStrategy(\n  tables: Tables,\n  dialect: SqlDialect,\n  fulltextStrategy: FulltextStrategy | undefined,\n  vectorStrategy: VectorStrategy | undefined,\n): CommonOperationStrategy {\n  const tableOperations = bindTableOperationBuilders(\n    tables,\n    COMMON_TABLE_OPERATION_BUILDERS,\n  );\n  const fulltextTable = tables.fulltextTableName;\n  const contributionMaterializations = tables.contributionMaterializations;\n\n  // All fulltext write SQL is owned by the active strategy — so swapping\n  // to pg_trgm / ParadeDB / pgroonga swaps the full CRUD pipeline, not\n  // just the read-side fragments.\n  const fulltextBuilders = {\n    buildAtomicNodeProjectionStatements: (\n      creates: readonly AtomicNodePostimageEntry[],\n      updates: readonly AtomicNodeResolvedUpdateEntry[],\n      timestamp: string,\n      chunkSize: number,\n    ): readonly SQL[] | undefined =>\n      buildAtomicNodeProjectionStatements(\n        creates,\n        updates,\n        timestamp,\n        dialect,\n        fulltextTable,\n        fulltextStrategy,\n        vectorStrategy,\n        chunkSize,\n      ),\n    buildUpsertFulltext: (\n      params: UpsertFulltextParams,\n      timestamp: string,\n    ): readonly SQL[] =>\n      (fulltextStrategy?.buildUpsert(fulltextTable, params, timestamp) ?? []).map(\n        (statement) => toDrizzleSql(statement, dialect),\n      ),\n    buildDeleteFulltext: (params: DeleteFulltextParams): readonly SQL[] =>\n      (fulltextStrategy?.buildDelete(fulltextTable, params) ?? []).map(\n        (statement) => toDrizzleSql(statement, dialect),\n      ),\n    buildDeleteFulltextByNode: (\n      graphId: string,\n      nodeKind: string,\n      nodeId: string,\n    ): readonly SQL[] =>\n      (\n        fulltextStrategy?.buildDelete(fulltextTable, {\n          graphId,\n          nodeKind,\n          nodeId,\n        }) ?? []\n      ).map((statement) => toDrizzleSql(statement, dialect)),\n    buildUpsertFulltextBatch: (\n      params: UpsertFulltextBatchParams,\n      timestamp: string,\n    ): readonly SQL[] =>\n      (\n        fulltextStrategy?.buildBatchUpsert(fulltextTable, params, timestamp) ??\n        []\n      ).map((statement) => toDrizzleSql(statement, dialect)),\n    buildDeleteFulltextBatch: (\n      params: DeleteFulltextBatchParams,\n    ): readonly SQL[] =>\n      (fulltextStrategy?.buildBatchDelete(fulltextTable, params) ?? []).map(\n        (statement) => toDrizzleSql(statement, dialect),\n      ),\n    buildFulltextSearch: (params: FulltextSearchParams): SQL =>\n      buildFulltextSearch(\n        fulltextTable,\n        params,\n        requireDefined(\n          fulltextStrategy,\n          \"buildFulltextSearch requires an active fulltext strategy\",\n        ),\n        dialect,\n        // Store-compiled candidates (predicates + subclass + currency)\n        // take precedence; the live-node default covers direct backend use.\n        params.candidates ??\n          liveNodeIdsSubquery(\n            tables.nodes,\n            params.graphId,\n            params.nodeKind,\n            nowIso(),\n          ),\n      ),\n    buildHybridSearch: (\n      params: HybridSearchParams,\n      vectorSql: SQL,\n      vectorScoreDescending: boolean,\n    ): SQL => {\n      const candidates =\n        params.candidates ??\n        liveNodeIdsSubquery(\n          tables.nodes,\n          params.graphId,\n          params.nodeKind,\n          nowIso(),\n        );\n      const fulltextSql = buildFulltextSearch(\n        fulltextTable,\n        {\n          graphId: params.graphId,\n          nodeKind: params.nodeKind,\n          query: params.fulltext.query,\n          limit: params.fulltext.k,\n          ...(params.fulltext.mode === undefined ?\n            {}\n          : { mode: params.fulltext.mode }),\n          ...(params.fulltext.language === undefined ?\n            {}\n          : { language: params.fulltext.language }),\n          ...(params.fulltext.minScore === undefined ?\n            {}\n          : { minScore: params.fulltext.minScore }),\n          ...(params.fulltext.includeSnippets === undefined ?\n            {}\n          : { includeSnippets: params.fulltext.includeSnippets }),\n        },\n        requireDefined(\n          fulltextStrategy,\n          \"buildHybridSearch requires an active fulltext strategy\",\n        ),\n        dialect,\n        // Reference, not copy: the statement evaluates the shared\n        // tg_hybrid_cand CTE once for both legs.\n        hybridCandidatesRef(),\n      );\n      return buildHybridSearchStatement({\n        candidatesSql:\n          isSqlFragment(candidates) ?\n            toDrizzleSql(candidates, dialect)\n          : candidates,\n        vectorSql,\n        vectorScoreDescending,\n        fulltextSql,\n        nodes: tables.nodes,\n        dialect,\n        graphId: params.graphId,\n        nodeKind: params.nodeKind,\n        fusionK: params.fusion.k,\n        vectorWeight: params.fusion.vectorWeight,\n        fulltextWeight: params.fusion.fulltextWeight,\n        limit: params.limit,\n        offset: params.offset ?? 0,\n      });\n    },\n  };\n\n  /**\n   * States one contribution marker row outright: every column takes the\n   * supplied value whether or not a row already exists.\n   *\n   * Deliberately not the top-level backend's upsert, which COALESCEs\n   * `materialized_at` so a *failed* re-attempt cannot erase an earlier\n   * success. That rule is right when the attempt may have failed and\n   * wrong for a completed destructive rebuild, whose whole point is that\n   * the storage is new — the recorded timestamp must be the rebuild's,\n   * not the shape it replaced.\n   *\n   * One statement rather than a delete/insert pair so the row is never\n   * momentarily absent inside the transaction, and so a concurrent\n   * `repairContributions()` racing the same identity resolves as a\n   * conflict rather than a primary-key violation that would roll the\n   * whole rebuild back.\n   *\n   * Dialect-shared: the composite primary key is the conflict target on\n   * both engines, and the ISO timestamps bind straight into SQLite's TEXT\n   * and Postgres' TIMESTAMPTZ columns, the same way every other write\n   * builder here passes `nowIso()` through.\n   */\n  function buildInsertContributionMaterialization(\n    params: RecordContributionMaterializationParams,\n  ): SQL {\n    return sql`\n      INSERT INTO ${contributionMaterializations}\n        (graph_id, logical_name, owner, table_name, signature,\n         materialized_at, last_attempted_at, last_error)\n      VALUES (\n        ${params.graphId}, ${params.logicalName}, ${params.owner},\n        ${params.tableName}, ${params.signature},\n        ${nullableText(params.materializedAt)}, ${params.attemptedAt},\n        ${nullableText(params.error)}\n      )\n      ON CONFLICT (graph_id, logical_name, owner, table_name) DO UPDATE SET\n        signature = excluded.signature,\n        materialized_at = excluded.materialized_at,\n        last_attempted_at = excluded.last_attempted_at,\n        last_error = excluded.last_error\n    `;\n  }\n\n  function buildDeleteContributionMaterialization(\n    identity: ContributionMaterializationIdentity,\n  ): SQL {\n    return sql`\n      DELETE FROM ${contributionMaterializations}\n      WHERE graph_id = ${identity.graphId}\n        AND logical_name = ${identity.logicalName}\n        AND owner = ${identity.owner}\n        AND table_name = ${identity.tableName}\n    `;\n  }\n\n  const nodePropsNotNullConstraint = {\n    table: getTableName(tables.nodes),\n    column: tables.nodes.props.name,\n  } as const;\n\n  return {\n    ...tableOperations,\n    ...fulltextBuilders,\n    atomicNodeProjectionFamilies: [\n      ...(vectorStrategy === undefined ? [] : ([\"embedding\"] as const)),\n      ...(fulltextStrategy === undefined ? [] : ([\"fulltext\"] as const)),\n    ],\n    buildConvergeEdgeCreate: (params) =>\n      buildConvergeEdgeCreate(tables, params),\n    buildAtomicConvergeEdges: (params) =>\n      buildAtomicConvergeEdges(tables, params),\n    buildAtomicConvergeEdgesTombstoneRefusal: (params) =>\n      buildAtomicConvergeEdgesTombstoneRefusal(tables, params),\n    buildInsertEdgesDurableBatchReturning: (params, timestamp) =>\n      buildInsertEdgesDurableBatchReturning(tables, params, timestamp),\n    atomicEdgeRefusalConstraints: {\n      cardinality: {\n        table: getTableName(tables.edgeClaims),\n        column: tables.edgeClaims.axis.name,\n      },\n      deleteIdentity: {\n        table: getTableName(tables.edges),\n        column: tables.edges.kind.name,\n      },\n      durableIdentity: {\n        table: getTableName(tables.edges),\n        column: tables.edges.createdAt.name,\n      },\n      endpoint: {\n        table: getTableName(tables.edges),\n        column: tables.edges.id.name,\n      },\n      mutationPostimage: {\n        table: getTableName(tables.edges),\n        column: tables.edges.kind.name,\n      },\n      tombstoneConvergence: {\n        table: getTableName(tables.edges),\n        column: tables.edges.updatedAt.name,\n      },\n    },\n    buildAtomicEdgeDeleteBatchWithSchemaFence: (\n      input,\n      timestamp,\n      schemaLockClause,\n    ) =>\n      buildAtomicEdgeDeleteBatchWithSchemaFence(\n        tables,\n        input,\n        timestamp,\n        schemaLockClause,\n      ),\n    buildAtomicEdgeResolvedUpdateBatch: (\n      entries,\n      timestamp,\n      schemaFence,\n      schemaLockClause,\n    ) =>\n      buildAtomicEdgeResolvedUpdateBatch(\n        tables,\n        entries,\n        timestamp,\n        schemaFence,\n        schemaLockClause,\n      ),\n    atomicNodeRefusalConstraints: {\n      deleteRestricted: nodePropsNotNullConstraint,\n      liveIdentity: nodePropsNotNullConstraint,\n      mutationPostimage: {\n        table: getTableName(tables.nodes),\n        column: tables.nodes.createdAt.name,\n      },\n      projectionEvidence: {\n        table: getTableName(tables.contributionMaterializations),\n        column: tables.contributionMaterializations.signature.name,\n      },\n    },\n    buildAtomicNodeDeleteBatchWithSchemaFence: (\n      input,\n      timestamp,\n      schemaLockClause,\n    ) =>\n      buildAtomicNodeDeleteBatchWithSchemaFence(\n        tables,\n        input,\n        timestamp,\n        schemaLockClause,\n      ),\n    buildAtomicNodeResolvedUpdateBatch: (\n      entries,\n      timestamp,\n      schemaFence,\n      schemaLockClause,\n    ) =>\n      buildAtomicNodeResolvedUpdateBatch(\n        tables,\n        entries,\n        timestamp,\n        schemaFence,\n        schemaLockClause,\n      ),\n    buildSchemaFenceProbe: (params, schemaLockClause) =>\n      buildSchemaFenceProbe(tables, params, schemaLockClause),\n    buildDeleteStaleAtomicEdgeClaims: (\n      entries,\n      schemaFence,\n      schemaLockClause,\n    ) =>\n      buildDeleteStaleAtomicEdgeClaims(\n        tables,\n        entries,\n        schemaFence,\n        schemaLockClause,\n      ),\n    buildAcquireAtomicEdgeClaims: (\n      entries,\n      timestamp,\n      schemaFence,\n      schemaLockClause,\n    ) =>\n      buildAcquireAtomicEdgeClaims(\n        tables,\n        entries,\n        timestamp,\n        schemaFence,\n        schemaLockClause,\n      ),\n    buildAssertAtomicEdgeClaimsOwned: (\n      entries,\n      timestamp,\n      schemaFence,\n      schemaLockClause,\n    ) =>\n      buildAssertAtomicEdgeClaimsOwned(\n        tables,\n        entries,\n        timestamp,\n        schemaFence,\n        schemaLockClause,\n      ),\n    primaryKeyConstraints: {\n      nodes: nodePrimaryKeyConstraint(tables.nodes),\n      edges: edgePrimaryKeyConstraint(tables.edges),\n    },\n    buildUpdateNodeSet(\n      params: CompareAndSetNodeParams | UpdateNodeSetParams,\n      timestamp: string,\n    ): SQL {\n      return buildUpdateNodeSet(tables, dialect, params, timestamp);\n    },\n    buildResolvedNodeUpdateBatch(params, timestamp): SQL {\n      return buildResolvedNodeUpdateBatch(\n        tables,\n        params,\n        timestamp,\n        RESOLVED_NODE_UPDATE_LOCK_CLAUSES[dialect],\n      );\n    },\n    buildDeleteContributionMaterialization,\n    buildInsertContributionMaterialization,\n    buildInsertUnique(params: InsertUniqueParams): SQL {\n      return buildInsertUnique(tables, dialect, params);\n    },\n    buildInsertUniqueBatch(entries: readonly InsertUniqueParams[]): SQL {\n      return buildInsertUniqueBatch(tables, dialect, entries);\n    },\n    buildAtomicNodeClaimUpsertWithSchemaFence(\n      entries: readonly AtomicNodeClaimEntry<AtomicNodePostimageEntry>[],\n      schemaFence: SchemaWriteFenceParams,\n      schemaLockClause: SQL,\n    ): SQL {\n      return buildAtomicNodeClaimUpsertWithSchemaFence(\n        tables,\n        dialect,\n        entries,\n        schemaFence,\n        schemaLockClause,\n      );\n    },\n    buildAtomicNodeClaimGatePredicateWithSchemaFence(\n      entries: readonly AtomicNodeClaimEntry<AtomicNodePostimageEntry>[],\n      schemaFence: SchemaWriteFenceParams,\n      schemaLockClause: SQL,\n    ): SQL {\n      return buildAtomicNodeClaimGatePredicateWithSchemaFence(\n        tables,\n        entries,\n        schemaFence,\n        schemaLockClause,\n      );\n    },\n    buildAtomicNodeClaimCleanupWithSchemaFence(\n      entries: readonly AtomicNodeClaimEntry<AtomicNodePostimageEntry>[],\n      schemaFence: SchemaWriteFenceParams,\n      schemaLockClause: SQL,\n    ): SQL {\n      return buildAtomicNodeClaimCleanupWithSchemaFence(\n        tables,\n        entries,\n        schemaFence,\n        schemaLockClause,\n      );\n    },\n    buildAtomicDeletedNodeClaimReleaseWithSchemaFence(\n      input: Readonly<{\n        graphId: string;\n        kind: string;\n        ids: readonly string[];\n        timestamp: string;\n      }>,\n      schemaFence: SchemaWriteFenceParams,\n      schemaLockClause: SQL,\n    ): SQL {\n      return buildAtomicDeletedNodeClaimReleaseWithSchemaFence(\n        tables,\n        input,\n        schemaFence,\n        schemaLockClause,\n      );\n    },\n    buildAtomicNodeReplacementClaimReleaseWithSchemaFence(\n      input: Readonly<{\n        graphId: string;\n        kind: string;\n        ids: readonly string[];\n        timestamp: string;\n      }>,\n      schemaFence: SchemaWriteFenceParams,\n      schemaLockClause: SQL,\n    ): SQL {\n      return buildAtomicNodeReplacementClaimReleaseWithSchemaFence(\n        tables,\n        input,\n        schemaFence,\n        schemaLockClause,\n      );\n    },\n    buildHardDeleteUniquesByConcreteKind(\n      params: HardDeleteUniquesByConcreteKindParams,\n    ): SqlFragment {\n      return buildHardDeleteUniquesByConcreteKind(\n        getTableName(tables.uniques),\n        params,\n      );\n    },\n    buildLockEdgeClaims(\n      entries: readonly ClaimEdgeCardinalityParams[],\n      timestamp: string,\n    ): SQL {\n      return buildLockEdgeClaims(tables, entries, timestamp);\n    },\n    buildLockEdgeClaimGuarded(\n      params: ClaimEdgeCardinalityParams,\n      timestamp: string,\n    ): SQL {\n      return buildLockEdgeClaimGuarded(tables, params, timestamp);\n    },\n    buildTakeOverEdgeClaim(\n      params: ClaimEdgeCardinalityParams,\n      timestamp: string,\n    ): SQL {\n      return buildTakeOverEdgeClaim(tables, params, timestamp);\n    },\n    buildTakeOverEdgeClaimGuarded(\n      params: ClaimEdgeCardinalityParams,\n      timestamp: string,\n    ): SQL {\n      return buildTakeOverEdgeClaimGuarded(tables, params, timestamp);\n    },\n    buildPurgeEdgeClaims(params: PurgeEdgeClaimsParams): SQL {\n      return buildPurgeEdgeClaims(tables, params);\n    },\n    buildContendedUniqueRowAudit(\n      graphId: string,\n      constraintNames: readonly string[],\n    ): SQL {\n      return buildContendedUniqueRowAudit(tables, graphId, constraintNames);\n    },\n    buildContendedEdgeRowAudit(\n      graphId: string,\n      cardinality: ConstrainedCardinality,\n      edgeKinds: readonly string[],\n    ): SQL {\n      return buildContendedEdgeRowAudit(\n        tables,\n        graphId,\n        cardinality,\n        edgeKinds,\n      );\n    },\n    buildDisjointOverlapAudit(\n      graphId: string,\n      kinds: readonly [string, string],\n    ): SQL {\n      return buildDisjointOverlapAudit(tables, graphId, kinds);\n    },\n    buildGetActiveSchema(graphId: string): SQL {\n      return buildGetActiveSchema(tables, graphId, dialect);\n    },\n    buildInsertSchema(params: InsertSchemaParams, timestamp: string): SQL {\n      return buildInsertSchema(tables, params, timestamp, dialect);\n    },\n    buildSetActiveSchema(\n      graphId: string,\n      version: number,\n    ): Readonly<{ activateVersion: SQL; deactivateAll: SQL }> {\n      return buildSetActiveSchema(tables, graphId, version, dialect);\n    },\n    buildTableExists(tableName: string): SQL {\n      return TABLE_EXISTS_QUERIES[dialect](tableName);\n    },\n    buildClearGraph(graphId: string): readonly ClearGraphStatement[] {\n      return buildClearGraph(tables, graphId, fulltextStrategy);\n    },\n  };\n}\n\n/**\n * Interprets the row returned by {@link CommonOperationStrategy.buildTableExists}.\n * The probe selects a single non-null column only when the table is present, so\n * an absent row — or a row whose columns are all null — means the table does not\n * exist. Shared by `clear()` and `refreshStatistics()` so the two callers can't\n * drift on how the probe result is read.\n */\nexport function tableExistsFromRow(\n  row: Record<string, unknown> | undefined,\n): boolean {\n  if (row === undefined) return false;\n  return Object.values(row).some((value) => isPresent(value));\n}\n\n/**\n * Wraps a {@link CommonOperationStrategy.buildTableExists} probe in a\n * per-instance cache. A table confirmed present is cached by default for the\n * backend's lifetime, but callers may disable positive caching when the probe is\n * sensitive to session state such as PostgreSQL `search_path`. Missing tables\n * stay re-probable by default so a later focused bootstrap that creates one is\n * picked up; callers on a non-DDL path can opt into negative caching. Shared by\n * `clear()`'s ignore-missing guard and `refreshStatistics()`'s recorded ANALYZE\n * so the two cannot drift on caching or on how the probe row is read.\n *\n * `probe` runs the existence query and returns the single result row (or\n * `undefined`); the caller supplies it because the two sites execute through\n * different adapters (a single-row `execGet` vs. a row-array `execute`).\n */\nexport type TableExistenceCacheOptions = Readonly<{\n  cacheExisting?: boolean | undefined;\n  cacheMissing?: boolean | undefined;\n}>;\n\nexport function createCachedTableExistence(\n  probe: (tableName: string) => Promise<Record<string, unknown> | undefined>,\n  options?: TableExistenceCacheOptions,\n): (tableName: string) => Promise<boolean> {\n  const cacheExisting = options?.cacheExisting !== false;\n  const cacheMissing = options?.cacheMissing === true;\n  const confirmedExisting = new Set<string>();\n  const confirmedMissing = new Set<string>();\n  return async function tableExists(tableName: string): Promise<boolean> {\n    if (confirmedExisting.has(tableName)) return true;\n    if (confirmedMissing.has(tableName)) return false;\n    const exists = tableExistsFromRow(await probe(tableName));\n    if (exists && cacheExisting) {\n      confirmedExisting.add(tableName);\n    }\n    if (!exists && cacheMissing) {\n      confirmedMissing.add(tableName);\n    }\n    return exists;\n  };\n}\n\nexport function createSqliteOperationStrategy(\n  tables: SqliteTables,\n  fulltextStrategy: FulltextStrategy | undefined,\n  vectorStrategy?: VectorStrategy,\n): SqliteOperationStrategy {\n  return createCommonOperationStrategy(\n    tables,\n    \"sqlite\",\n    fulltextStrategy,\n    vectorStrategy,\n  );\n}\n\nfunction createPostgresNodeProjectionBuilders(\n  tables: PostgresTables,\n  dialect: SqlDialect,\n  fulltextStrategy: FulltextStrategy | undefined,\n  vectorStrategy: VectorStrategy | undefined,\n): Pick<CommonOperationStrategy, \"buildInsertNodeWithProjections\"> {\n  const fulltextTable = tables.fulltextTableName;\n  return {\n    buildInsertNodeWithProjections(params, plan, timestamp, schemaLockClause) {\n      return buildInsertNodeWithProjections(\n        tables,\n        params,\n        plan,\n        timestamp,\n        dialect,\n        fulltextTable,\n        fulltextStrategy,\n        vectorStrategy,\n        schemaLockClause,\n      );\n    },\n  };\n}\n\nexport function createPostgresOperationStrategy(\n  tables: PostgresTables,\n  fulltextStrategy: FulltextStrategy | undefined,\n  vectorStrategy?: VectorStrategy,\n): PostgresOperationStrategy {\n  return {\n    ...createCommonOperationStrategy(\n      tables,\n      \"postgres\",\n      fulltextStrategy,\n      vectorStrategy,\n    ),\n    ...createPostgresNodeProjectionBuilders(\n      tables,\n      \"postgres\",\n      fulltextStrategy,\n      vectorStrategy,\n    ),\n    buildInsertEdgeIfEndpointsLiveWithCardinalityClaim: (\n      params,\n      claim,\n      timestamp,\n    ) =>\n      buildInsertEdgeIfEndpointsLiveWithCardinalityClaim(\n        tables,\n        params,\n        claim,\n        timestamp,\n      ),\n    buildLockSchemaVersionAndGraphWrite: (\n      params,\n      advisoryLockNamespace,\n      fenceSql,\n    ) =>\n      buildLockSchemaVersionAndGraphWrite(\n        tables,\n        params,\n        advisoryLockNamespace,\n        fenceSql,\n      ),\n  };\n}\n","/**\n * Contribution-marker bookkeeping: the durable-marker CRUD, the\n * `ContributionMaterializer` wiring, and the adapter-facing members it\n * backs — shared verbatim by every SQL engine profile.\n *\n * Every marker-table statement goes through one of two seams the caller\n * supplies rather than through Drizzle's typed table API directly: a\n * `ContributionMarkerRowAccess` / `ReconciliationMarkerRowAccess` pair for\n * the two tables' SELECT/INSERT..ON CONFLICT/DELETE, and `ensureTable` /\n * `execute` for DDL and the catalog probe. Drizzle's own `.from()` /\n * `.insert()` / `.delete()` builders are typed against each dialect's own\n * table class (`PgTable` vs `SQLiteTable`) with no common supertype, so one\n * shared implementation cannot call them directly on a generic table\n * parameter — the identity-matching, row-decoding, and upsert-shaping logic\n * lives here instead, and each dialect binds the three-line access closures\n * to its own `db` and table objects. `ensureTable` and `execute` carry no\n * such restriction: `EngineProvisioning.ensureTable` and the root execution\n * adapter's `execute` are already uniform across dialects (SQLite's queue\n * bypass and PostgreSQL's concurrent-create retry live inside the closures\n * the caller passes in, unchanged).\n */\nimport { and, type AnyColumn, eq, type SQL } from \"drizzle-orm\";\n\nimport type { FulltextStrategy } from \"../../../../query/dialect/fulltext-strategy\";\nimport type { SqlDialect } from \"../../../../query/dialect/types\";\nimport {\n  type VectorSlot,\n  type VectorStrategy,\n} from \"../../../../query/dialect/vector-strategy\";\nimport { requireDefined } from \"../../../../utils/presence\";\nimport type { WriteFenceTarget } from \"../../../capabilities/write-fence\";\nimport type {\n  ContributionDiagnostic,\n  ContributionMaterializationIdentity,\n  ContributionMaterializationRow,\n  ContributionProbeEntry,\n  ContributionRebuildResult,\n  ContributionRebuildScope,\n  ContributionRepairResult,\n  ContributionRepopulationStats,\n  RecordContributionMaterializationParams,\n  SchemaWriteTransactionBackend,\n  TransactionBackend,\n} from \"../../../types\";\nimport {\n  type ContributionMaterializer,\n  createContributionMaterializer,\n  mapContributionMaterializationRow,\n  type RawContributionMaterializationRow,\n} from \"../../contribution-materializations\";\nimport type { ExecutableSql } from \"../../execution/types\";\nimport {\n  type CommonOperationStrategy,\n  tableExistsFromRow,\n} from \"../../operations/strategy\";\n\n/** The contribution-marker table's identity columns, as generic Drizzle columns. */\ntype ContributionMarkerColumns = Readonly<{\n  graphId: AnyColumn;\n  logicalName: AnyColumn;\n  owner: AnyColumn;\n  tableName: AnyColumn;\n}>;\n\n/**\n * The three statements the contribution-marker table needs, bound to one\n * dialect's `db` and table object by the caller. `upsert` takes the same\n * domain params `recordContributionMaterialization` does, rather than a\n * pre-shaped Drizzle payload: shaping the insert values and the\n * ON CONFLICT `set` clause (via `buildContributionInsertValues` /\n * `buildContributionOnConflictSet`) stays inside the per-dialect binding,\n * where the table's own typed columns are in scope, so Drizzle keeps\n * checking the payload against the table instead of the call being widened\n * to `never` to paper over the two dialects' distinct table types.\n */\ntype ContributionMarkerRowAccess = Readonly<{\n  selectWhere: (\n    condition: SQL,\n  ) => Promise<readonly RawContributionMaterializationRow[]>;\n  upsert: (params: RecordContributionMaterializationParams) => Promise<void>;\n  deleteWhere: (condition: SQL) => Promise<void>;\n}>;\n\n/** The reconciliation-marker table's one identity column. */\ntype ReconciliationMarkerColumns = Readonly<{ graphId: AnyColumn }>;\n\n/** The two statements the reconciliation-marker table needs. See {@link ContributionMarkerRowAccess}. */\ntype ReconciliationMarkerRowAccess = Readonly<{\n  selectWhere: (\n    condition: SQL,\n  ) => Promise<readonly Readonly<{ reconciledToVersion: number }>[]>;\n  upsert: (graphId: string, version: number) => Promise<void>;\n}>;\n\n/** Options accepted by every `ensureVectorSlotContribution(s)` call. */\ntype EnsureVectorSlotOptions = Readonly<{\n  force?: boolean;\n  onDrift?: \"throw\" | \"skip\";\n}>;\n\nexport type CreateContributionMembersDeps = Readonly<{\n  dialect: SqlDialect;\n  /** Absent when this backend has no fulltext support (`fulltext: false`). */\n  fulltextStrategy: FulltextStrategy | undefined;\n  fulltextTableName: string;\n  vectorStrategy: VectorStrategy | undefined;\n  /** ONE fence target the materializer's two lock sites resolve, shared with every other lock this backend can take. */\n  fenceTarget: WriteFenceTarget;\n  /** Idempotent `CREATE TABLE ...` for the contribution-marker table, rendered once by the caller from its own dialect's table-DDL generator. */\n  contributionTableDdl: string;\n  /** Idempotent `CREATE TABLE ...` for the reconciliation-marker table. */\n  reconciliationMarkersTableDdl: string;\n  /** Runs one idempotent CREATE-shaped DDL statement — the same closure the profile's own `EngineProvisioning.ensureTable` uses. */\n  ensureTable: (ddl: string) => Promise<void>;\n  /** The root execution adapter's raw statement runner, for the uncached catalog probe backing `verifyContributions`. */\n  execute: <TRow>(query: ExecutableSql) => Promise<readonly TRow[]>;\n  operationStrategy: Pick<CommonOperationStrategy, \"buildTableExists\">;\n  /**\n   * Decodes the dialect's timestamp column representation to a canonical\n   * ISO-8601 string. The reverse direction (`encode`) is not a dep here:\n   * shaping the insert payload happens inside `contributionMarkerRows.upsert`,\n   * in the per-dialect binding.\n   */\n  timestamps: Readonly<{\n    decode: (value: unknown) => string | undefined;\n  }>;\n  contributionMarkerColumns: ContributionMarkerColumns;\n  contributionMarkerRows: ContributionMarkerRowAccess;\n  reconciliationMarkerColumns: ReconciliationMarkerColumns;\n  reconciliationMarkerRows: ReconciliationMarkerRowAccess;\n  /**\n   * Runs an administrative callback under the same per-graph fence as a\n   * schema commit. Absent on a backend with no transactional schema fence,\n   * which declines the destructive rebuild rather than running it unfenced.\n   */\n  schemaWriteTransaction?: <T>(\n    graphId: string,\n    fn: (tx: SchemaWriteTransactionBackend) => Promise<T>,\n  ) => Promise<T>;\n}>;\n\ntype ContributionMembers = Readonly<{\n  ensureContributionMaterializationsTable: () => Promise<void>;\n  getContributionMaterialization: (\n    identity: ContributionMaterializationIdentity,\n  ) => Promise<ContributionMaterializationRow | undefined>;\n  recordContributionMaterialization: (\n    params: RecordContributionMaterializationParams,\n  ) => Promise<void>;\n  assertRuntimeContributionsInitialized: (graphId: string) => Promise<void>;\n  ensureRuntimeContributions: (graphId: string) => Promise<void>;\n  /**\n   * Superseded by `ensureRuntimeContributions(graphId)` (#129). Retained as\n   * a thin back-compat wrapper for callers predating #129; #135 routed it\n   * through the durable-marker writer.\n   */\n  ensureFulltextTable: (graphId: string) => Promise<void>;\n  verifyContributions: (\n    graphId: string,\n    vectorSlots: readonly VectorSlot[],\n  ) => Promise<readonly ContributionDiagnostic[]>;\n  repairContributions: (\n    graphId: string,\n    vectorSlots: readonly VectorSlot[],\n  ) => Promise<ContributionRepairResult>;\n  probeContributions: (\n    graphId: string,\n    vectorSlots: readonly VectorSlot[],\n  ) => Promise<readonly ContributionProbeEntry[]>;\n  rebuildContribution: (\n    graphId: string,\n    scope: ContributionRebuildScope,\n    repopulate: (\n      target: TransactionBackend,\n    ) => Promise<ContributionRepopulationStats>,\n  ) => Promise<ContributionRebuildResult>;\n  // Vector counterparts of the runtime-contribution methods. Present only\n  // when a vector strategy is wired (omitted under `vector: false`),\n  // mirroring the embedding/search methods.\n  ensureVectorSlotContribution?: (\n    slot: VectorSlot,\n    options?: EnsureVectorSlotOptions,\n  ) => Promise<void>;\n  ensureVectorSlotContributions?: (\n    slots: readonly VectorSlot[],\n    options?: EnsureVectorSlotOptions,\n  ) => Promise<void>;\n  assertVectorSlotInitialized?: (slot: VectorSlot) => Promise<void>;\n  assertVectorSlotsInitialized?: (\n    slots: readonly VectorSlot[],\n  ) => Promise<void>;\n  deleteVectorSlotContribution?: (slot: VectorSlot) => Promise<void>;\n  ensureReconciliationMarkersTable: () => Promise<void>;\n  getReconciliationMarker: (graphId: string) => Promise<number | undefined>;\n  setReconciliationMarker: (\n    graphId: string,\n    version: number,\n  ) => Promise<void>;\n}>;\n\n/**\n * Transaction-scoped contribution marker stamp, part of the internal\n * operation-backend layer rather than the public adapter surface. Present\n * so the destructive rebuild can commit its marker with the DDL that\n * produced it; without it the stamp would land outside the transaction and\n * could survive a rolled-back drop.\n *\n * States the row outright rather than reusing the top-level upsert, whose\n * `materialized_at` COALESCE preserves an earlier success so a failed\n * re-attempt cannot erase it. A completed rebuild replaced the storage, so\n * the recorded timestamp must be the rebuild's.\n */\nexport type ContributionOperationMembers = Readonly<{\n  recordContributionMaterialization: (\n    params: RecordContributionMaterializationParams,\n  ) => Promise<void>;\n}>;\n\nexport type ContributionMembersResult = Readonly<{\n  contributionMaterializer: ContributionMaterializer;\n  /**\n   * Uncached catalog probe backing `verifyContributions`. Exposed alongside\n   * `members` because a still-inline adapter member outside this module\n   * (identity-relation adoption) also reads it directly.\n   */\n  contributionTableExists: (tableName: string) => Promise<boolean>;\n  members: ContributionMembers;\n}>;\n\n/**\n * Builds the contribution-marker member group: the durable-marker CRUD,\n * the `ContributionMaterializer` this profile's dialect wires up, and the\n * adapter members that read and write through it.\n *\n * Built ahead of the operation-backend layer (which still needs the\n * returned `contributionMaterializer` to construct itself) rather than\n * from inside it — unlike this module's other member group,\n * {@link createContributionOperationMembers}.\n */\nexport function createContributionMembers(\n  deps: CreateContributionMembersDeps,\n): ContributionMembersResult {\n  const {\n    dialect,\n    fulltextStrategy,\n    fulltextTableName,\n    vectorStrategy,\n    fenceTarget,\n    contributionTableDdl,\n    reconciliationMarkersTableDdl,\n    ensureTable,\n    execute,\n    operationStrategy,\n    timestamps,\n    contributionMarkerColumns,\n    contributionMarkerRows,\n    reconciliationMarkerColumns,\n    reconciliationMarkerRows,\n    schemaWriteTransaction,\n  } = deps;\n\n  function contributionMarkerIdentityCondition(\n    identity: ContributionMaterializationIdentity,\n  ): SQL {\n    // `and(...)` of four `eq(...)` calls is always defined; `requireDefined`\n    // matches `and`'s own `SQL | undefined` signature for the\n    // zero-condition case, which never applies here.\n    return requireDefined(\n      and(\n        eq(contributionMarkerColumns.graphId, identity.graphId),\n        eq(contributionMarkerColumns.logicalName, identity.logicalName),\n        eq(contributionMarkerColumns.owner, identity.owner),\n        eq(contributionMarkerColumns.tableName, identity.tableName),\n      ),\n    );\n  }\n\n  async function ensureContributionMaterializationsTableImpl(): Promise<void> {\n    await ensureTable(contributionTableDdl);\n  }\n\n  async function getContributionMaterializationRow(\n    identity: ContributionMaterializationIdentity,\n  ): Promise<ContributionMaterializationRow | undefined> {\n    const rows = await contributionMarkerRows.selectWhere(\n      contributionMarkerIdentityCondition(identity),\n    );\n    const row = rows[0];\n    if (row === undefined) return undefined;\n    return mapContributionMaterializationRow(row, timestamps.decode);\n  }\n\n  async function getContributionMaterializationRows(\n    graphId: string,\n  ): Promise<readonly ContributionMaterializationRow[]> {\n    const rows = await contributionMarkerRows.selectWhere(\n      eq(contributionMarkerColumns.graphId, graphId),\n    );\n    return rows.map((row) =>\n      mapContributionMaterializationRow(row, timestamps.decode),\n    );\n  }\n\n  async function recordContributionMaterializationRow(\n    params: RecordContributionMaterializationParams,\n  ): Promise<void> {\n    await contributionMarkerRows.upsert(params);\n  }\n\n  async function deleteContributionMaterializationRow(\n    identity: ContributionMaterializationIdentity,\n  ): Promise<void> {\n    await contributionMarkerRows.deleteWhere(\n      contributionMarkerIdentityCondition(identity),\n    );\n  }\n\n  /**\n   * Uncached catalog probe backing `verifyContributions`. The shared\n   * `createCachedTableExistence` wrapper is deliberately NOT used: this\n   * diagnostic's whole job is to notice that a table confirmed present\n   * earlier has since been dropped.\n   */\n  async function contributionTableExists(\n    tableName: string,\n  ): Promise<boolean> {\n    const rows = await execute<Record<string, unknown>>(\n      operationStrategy.buildTableExists(tableName),\n    );\n    return tableExistsFromRow(rows[0]);\n  }\n\n  const contributionMaterializer = createContributionMaterializer({\n    dialect,\n    fenceTarget,\n    fulltextStrategy,\n    fulltextTableName,\n    vectorStrategy,\n    // Contribution DDL is `CREATE ... IF NOT EXISTS` reached from every\n    // booting replica, so it carries the same concurrent-create retry (or,\n    // on SQLite, the same queue bypass) `ensureTable` already does. Without\n    // the retry, on an engine that races concurrent creates the loser's\n    // duplicate-key error is recorded as `lastError` on the marker row and\n    // reported as a failed materialization, when the table it wanted is in\n    // fact present.\n    execDdl: ensureTable,\n    ensureMarkerTable: ensureContributionMaterializationsTableImpl,\n    getMarkers: getContributionMaterializationRows,\n    recordMarker: recordContributionMaterializationRow,\n    deleteMarker: deleteContributionMaterializationRow,\n    tableExists: contributionTableExists,\n    // Withheld rather than wired-and-throwing when the driver cannot hold a\n    // session: the rebuild must refuse with its own typed error naming the\n    // absent fence, matching `capabilities.contributions.rebuild`.\n    ...(schemaWriteTransaction === undefined ?\n      {}\n    : { schemaWriteTransaction }),\n  });\n\n  const members: ContributionMembers = {\n    async ensureContributionMaterializationsTable(): Promise<void> {\n      await ensureContributionMaterializationsTableImpl();\n    },\n\n    async getContributionMaterialization(\n      identity: ContributionMaterializationIdentity,\n    ): Promise<ContributionMaterializationRow | undefined> {\n      return getContributionMaterializationRow(identity);\n    },\n\n    async recordContributionMaterialization(\n      params: RecordContributionMaterializationParams,\n    ): Promise<void> {\n      await recordContributionMaterializationRow(params);\n    },\n\n    async assertRuntimeContributionsInitialized(\n      graphId: string,\n    ): Promise<void> {\n      await contributionMaterializer.assertInitialized(graphId);\n    },\n\n    async ensureRuntimeContributions(graphId: string): Promise<void> {\n      await contributionMaterializer.ensureRuntimeContributions(graphId);\n    },\n\n    async ensureFulltextTable(graphId: string): Promise<void> {\n      await contributionMaterializer.ensureRuntimeContributions(graphId);\n    },\n\n    async verifyContributions(\n      graphId: string,\n      vectorSlots: readonly VectorSlot[],\n    ): Promise<readonly ContributionDiagnostic[]> {\n      return contributionMaterializer.verifyContributions(\n        graphId,\n        vectorSlots,\n      );\n    },\n\n    async repairContributions(\n      graphId: string,\n      vectorSlots: readonly VectorSlot[],\n    ): Promise<ContributionRepairResult> {\n      return contributionMaterializer.repairContributions(\n        graphId,\n        vectorSlots,\n      );\n    },\n\n    async probeContributions(\n      graphId: string,\n      vectorSlots: readonly VectorSlot[],\n    ): Promise<readonly ContributionProbeEntry[]> {\n      return contributionMaterializer.probeContributions(\n        graphId,\n        vectorSlots,\n      );\n    },\n\n    async rebuildContribution(\n      graphId: string,\n      scope: ContributionRebuildScope,\n      repopulate: (\n        target: TransactionBackend,\n      ) => Promise<ContributionRepopulationStats>,\n    ): Promise<ContributionRebuildResult> {\n      return contributionMaterializer.rebuildContribution(\n        graphId,\n        scope,\n        repopulate,\n      );\n    },\n\n    ...(vectorStrategy === undefined ?\n      {}\n    : {\n        async ensureVectorSlotContribution(\n          slot: VectorSlot,\n          options?: EnsureVectorSlotOptions,\n        ): Promise<void> {\n          await contributionMaterializer.ensureVectorSlot(slot, options);\n        },\n\n        async ensureVectorSlotContributions(\n          slots: readonly VectorSlot[],\n          options?: EnsureVectorSlotOptions,\n        ): Promise<void> {\n          await contributionMaterializer.ensureVectorSlots(slots, options);\n        },\n\n        async assertVectorSlotInitialized(slot: VectorSlot): Promise<void> {\n          await contributionMaterializer.assertVectorSlot(slot);\n        },\n\n        async assertVectorSlotsInitialized(\n          slots: readonly VectorSlot[],\n        ): Promise<void> {\n          await contributionMaterializer.assertVectorSlots(slots);\n        },\n\n        async deleteVectorSlotContribution(\n          slot: VectorSlot,\n        ): Promise<void> {\n          await contributionMaterializer.dropVectorSlot(slot);\n        },\n      }),\n\n    async ensureReconciliationMarkersTable(): Promise<void> {\n      await ensureTable(reconciliationMarkersTableDdl);\n    },\n\n    async getReconciliationMarker(\n      graphId: string,\n    ): Promise<number | undefined> {\n      const rows = await reconciliationMarkerRows.selectWhere(\n        eq(reconciliationMarkerColumns.graphId, graphId),\n      );\n      return rows[0]?.reconciledToVersion;\n    },\n\n    async setReconciliationMarker(\n      graphId: string,\n      version: number,\n    ): Promise<void> {\n      await reconciliationMarkerRows.upsert(graphId, version);\n    },\n  };\n\n  return {\n    contributionMaterializer,\n    contributionTableExists,\n    members,\n  };\n}\n\nexport type CreateContributionOperationMembersDeps = Readonly<{\n  /** The dialect's own statement runner for the transaction-scoped contribution stamp. */\n  execRun: (query: ExecutableSql) => Promise<void>;\n  operationStrategy: Pick<\n    CommonOperationStrategy,\n    \"buildInsertContributionMaterialization\"\n  >;\n}>;\n\n/**\n * Builds the transaction-scoped contribution marker stamp alone. Unlike\n * {@link createContributionMembers}, this one is built from inside the\n * dialect's operation-backend construction (where `execRun` lives), the\n * same place `createFulltextMembers` / `createVectorMembers` are built.\n */\nexport function createContributionOperationMembers(\n  deps: CreateContributionOperationMembersDeps,\n): ContributionOperationMembers {\n  const { execRun, operationStrategy } = deps;\n  return {\n    async recordContributionMaterialization(\n      params: RecordContributionMaterializationParams,\n    ): Promise<void> {\n      await execRun(\n        operationStrategy.buildInsertContributionMaterialization(params),\n      );\n    },\n  };\n}\n","/**\n * Graph-template registration and instantiation: the two members every SQL\n * engine profile exposes for cloning a durable schema template into a fresh\n * graph. The shared body issues only the instantiation statement, through\n * the `execute` dep, and the table DDL, through `ensureTable`. Registration's\n * two row statements stay in each dialect's `rowAccess` binding instead,\n * because `PgTable` and `SQLiteTable` share no common supertype — the same\n * reason `kind-removal-members.ts` binds its row access per dialect.\n *\n * `registerGraphTemplate`'s insert-then-verify sequence and its\n * content-conflict refusal are identical on both dialects; only the row's\n * timestamp and JSON-document encoding differ, threaded through as the\n * `rowAccess` dep the same way `kind-removal-members.ts` and\n * `index-materialization-members.ts` do it.\n *\n * `instantiateGraphTemplate` runs its profile's own `instantiateStatement`\n * dep (`graph-template-sql.ts` exports one builder per dialect; each profile\n * hands this group its own), given the resolved `fencePlan`, this group's\n * `fenceTarget`, and its `execute`. SQLite always runs the one statement its\n * builder returns through `execute` directly. PostgreSQL does too under\n * every fence-plan kind except `\"row\"`, where the fused CTE's advisory lock\n * no longer excludes against a `row`-mechanism schema-commit fence — there,\n * the PostgreSQL profile instead opens its own transaction, takes the\n * identical fence row `acquireSchemaWriteFence` takes as a preceding\n * statement, and only then runs the CTE with its lock omitted, so the two\n * statements commit or roll back together; under `conflict: \"commit-time\"`\n * (the `\"optimistic-retry\"` tier) that whole transaction — open, fence-row\n * acquisition, CTE — replays through `runRetriedUnit` on a commit-time\n * conflict, `fenceTarget` naming the object its serialization classifier was\n * registered against. The one other genuine dialect difference:\n * PostgreSQL's statement copies the template's contribution markers inside\n * its own CTE, but SQLite cannot put a data-modifying CTE beside the schema\n * INSERT, so its profile runs a second DML statement —\n * `copyGraphTemplateContributionMarkersStatement` — after the schema row is\n * confirmed. That asymmetry is threaded through as the optional\n * `copyContributionMarkers` dep, present only on the SQLite profile.\n */\nimport { ConfigurationError } from \"../../../../errors\";\nimport { type CompiledRowsSql } from \"../../../../query/sql-intent\";\nimport type { SerializedSchema } from \"../../../../schema/types\";\nimport {\n  type WriteFencePlan,\n  type WriteFenceTarget,\n} from \"../../../capabilities/write-fence\";\nimport type { GraphTemplateRow, SchemaVersionRow } from \"../../../types\";\nimport {\n  type CopyGraphTemplateContributionMarkersSqlParams,\n  type InstantiateGraphTemplateSqlParams,\n} from \"../../graph-template-sql\";\n\n/**\n * Parameters for `registerGraphTemplate`, matching the inline shape on\n * {@link GraphBackend.registerGraphTemplate} field for field. Kept local\n * (not exported) so this extraction leaves the public `GraphBackend`\n * declaration surface untouched; structural typing makes this type\n * assignable to that member's inline parameter type.\n */\ntype RegisterGraphTemplateParams = Readonly<{\n  templateId: string;\n  schemaHash: string;\n  schemaDoc: SerializedSchema;\n}>;\n\n/**\n * Parameters for `instantiateGraphTemplate`, matching the inline shape on\n * {@link GraphBackend.instantiateGraphTemplate} field for field. Kept local\n * for the same reason as {@link RegisterGraphTemplateParams}.\n */\ntype InstantiateGraphTemplateParams = Readonly<{\n  templateId: string;\n  templateSchemaHash: string;\n  graphId: string;\n  schemaHash: string;\n}>;\n\n/**\n * Result of `instantiateGraphTemplate`, matching the inline shape on\n * {@link GraphBackend.instantiateGraphTemplate} field for field. Kept local\n * for the same reason as {@link RegisterGraphTemplateParams}.\n */\ntype InstantiateGraphTemplateResult =\n  | Readonly<{ status: \"ready\"; row: SchemaVersionRow }>\n  | Readonly<{ status: \"refused\" }>;\n\n/** A raw graph-template row, already normalized to canonical strings by the dialect binding. */\ntype RawGraphTemplateRow = Readonly<{\n  templateId: string;\n  schemaHash: string;\n  schemaDoc: string;\n  createdAt: string;\n}>;\n\n/**\n * The two statements graph-template registration needs, bound to one\n * dialect's `db` and table object by the caller. `insertIgnoringConflict`\n * carries its own timestamp stamping (`new Date()` for PostgreSQL, `nowIso()`\n * for SQLite) and its own JSON-document encoding, so those stay inside the\n * per-dialect binding rather than re-spelled here.\n */\ntype GraphTemplateRowAccess = Readonly<{\n  insertIgnoringConflict: (\n    params: RegisterGraphTemplateParams,\n  ) => Promise<void>;\n  selectByTemplateId: (\n    templateId: string,\n  ) => Promise<RawGraphTemplateRow | undefined>;\n}>;\n\n/** The table names `instantiateStatement` compiles its statement against. */\ntype GraphTemplateTableNames = Readonly<{\n  schemaVersions: string;\n  graphTemplates: string;\n  contributionMaterializations: string;\n}>;\n\n/** Runs a compiled statement through the operation-backend layer's row-returning execution path. */\ntype GraphTemplateExecute = <TRow>(\n  query: CompiledRowsSql,\n) => Promise<readonly TRow[]>;\n\nexport type CreateGraphTemplateMembersDeps = Readonly<{\n  /** Idempotent `CREATE TABLE ...` for the graph-templates table, rendered once by the caller from its own dialect's table-DDL generator. */\n  graphTemplatesTableDdl: string;\n  /** Runs one idempotent CREATE-shaped DDL statement — the same closure the profile's own `EngineProvisioning.ensureTable` uses. */\n  ensureTable: (ddl: string) => Promise<void>;\n  execute: GraphTemplateExecute;\n  tableNames: GraphTemplateTableNames;\n  /**\n   * The resolved write-fence plan `createSqlBackend` closes over once at\n   * construction — the SAME plan every other lock site reads. Read only by\n   * the PostgreSQL binding, to decide whether its schema-row instantiation\n   * needs a preceding fence-row acquisition; SQLite's binding never\n   * consults it.\n   */\n  fencePlan: WriteFencePlan;\n  /**\n   * The SAME fence target `createSqlBackend` built and registered its\n   * profile-declared serialization classifier against (see\n   * `create-sql-backend.ts`) — read only by the PostgreSQL binding, as the\n   * `target` it hands `runRetriedUnit` when it replays its row-mechanism\n   * instantiation branch under the `\"optimistic-retry\"` tier. SQLite's\n   * binding never consults it.\n   */\n  fenceTarget: WriteFenceTarget;\n  /**\n   * Runs this profile's schema-row instantiation and returns its raw driver\n   * rows. SQLite's binding runs the bare `INSERT ... SELECT ... RETURNING`\n   * `graph-template-sql.ts` builds through the `execute` dep unchanged. The\n   * PostgreSQL binding does the same under every fence-plan kind except\n   * `\"row\"` (see the module doc comment for what it does instead there).\n   */\n  instantiateStatement: (\n    params: InstantiateGraphTemplateSqlParams,\n    execute: GraphTemplateExecute,\n    fencePlan: WriteFencePlan,\n    fenceTarget: WriteFenceTarget,\n  ) => Promise<readonly Record<string, unknown>[]>;\n  /** Decodes a raw driver row into a `SchemaVersionRow` — the same mapper `OperationBackendRowMappers.toSchemaVersionRow` is. */\n  toSchemaVersionRow: (row: Record<string, unknown>) => SchemaVersionRow;\n  rowAccess: GraphTemplateRowAccess;\n  /**\n   * SQLite's second DML statement copying contribution markers after the\n   * schema row is confirmed (see the module doc comment). Absent on a\n   * dialect whose `instantiateStatement` already folds the marker copy into\n   * its own statement (PostgreSQL). Receives this same group's own\n   * `execute` dep as its first argument rather than closing over one: the\n   * profile head builds this closure before the operation layer exists, so\n   * it cannot capture `execute` directly, and by the time\n   * `instantiateGraphTemplate` actually invokes it below, this function's\n   * own `execute` parameter is already the resolved one.\n   */\n  copyContributionMarkers?: (\n    execute: GraphTemplateExecute,\n    params: CopyGraphTemplateContributionMarkersSqlParams,\n  ) => Promise<void>;\n}>;\n\n/** The two `GraphBackend` members this group exposes. */\ntype GraphTemplateMembers = Readonly<{\n  registerGraphTemplate: (\n    params: RegisterGraphTemplateParams,\n  ) => Promise<GraphTemplateRow>;\n  instantiateGraphTemplate: (\n    params: InstantiateGraphTemplateParams,\n  ) => Promise<InstantiateGraphTemplateResult>;\n}>;\n\nexport type GraphTemplateMembersResult = Readonly<{\n  /**\n   * Not a `GraphBackend` member — an adoption-step primitive the caller's\n   * `baseSchemaLifecycle` calls directly, the same way it always has.\n   * Kept out of `members` so a caller that spreads `members` onto the\n   * backend object can never leak it as a public surface.\n   */\n  ensureGraphTemplatesTable: () => Promise<void>;\n  members: GraphTemplateMembers;\n}>;\n\n/**\n * Builds the graph-template member group. Moved out of the two dialect\n * files unchanged: same insert-then-verify registration, same\n * instantiation statement, same SQLite-only marker-copy follow-up.\n */\nexport function createGraphTemplateMembers(\n  deps: CreateGraphTemplateMembersDeps,\n): GraphTemplateMembersResult {\n  const {\n    graphTemplatesTableDdl,\n    ensureTable,\n    execute,\n    tableNames,\n    fencePlan,\n    fenceTarget,\n    instantiateStatement,\n    toSchemaVersionRow,\n    rowAccess,\n    copyContributionMarkers,\n  } = deps;\n\n  return {\n    async ensureGraphTemplatesTable(): Promise<void> {\n      await ensureTable(graphTemplatesTableDdl);\n    },\n\n    members: {\n      async registerGraphTemplate(\n        params: RegisterGraphTemplateParams,\n      ): Promise<GraphTemplateRow> {\n        await rowAccess.insertIgnoringConflict(params);\n        const row = await rowAccess.selectByTemplateId(params.templateId);\n        if (row?.schemaHash !== params.schemaHash) {\n          throw new ConfigurationError(\n            `Graph template \"${params.templateId}\" already exists with different schema content.`,\n            {\n              code: \"GRAPH_TEMPLATE_CONTENT_CONFLICT\",\n              templateId: params.templateId,\n            },\n          );\n        }\n        return {\n          template_id: row.templateId,\n          schema_hash: row.schemaHash,\n          schema_doc: row.schemaDoc,\n          created_at: row.createdAt,\n        };\n      },\n\n      async instantiateGraphTemplate(\n        params: InstantiateGraphTemplateParams,\n      ): Promise<InstantiateGraphTemplateResult> {\n        const sqlParams: CopyGraphTemplateContributionMarkersSqlParams = {\n          graphId: params.graphId,\n          schemaHash: params.schemaHash,\n          schemaVersionsTableName: tableNames.schemaVersions,\n          templatesTableName: tableNames.graphTemplates,\n          contributionMaterializationsTableName:\n            tableNames.contributionMaterializations,\n          templateId: params.templateId,\n          templateSchemaHash: params.templateSchemaHash,\n        };\n        const rows = await instantiateStatement(\n          sqlParams,\n          execute,\n          fencePlan,\n          fenceTarget,\n        );\n        const row = rows[0];\n        if (row === undefined) return { status: \"refused\" } as const;\n        await copyContributionMarkers?.(execute, sqlParams);\n        return { status: \"ready\", row: toSchemaVersionRow(row) } as const;\n      },\n    },\n  };\n}\n","/**\n * Operational Identity and recorded-time relation provisioning: the\n * revision-origins table, the four identity relations' idempotent\n * enablement surface, and the DDL both identity and recorded relations\n * hand back as data instead of executing — shared verbatim by every SQL\n * engine profile.\n *\n * Building the actual Drizzle table objects for a caller-supplied physical\n * name and walking them into `TableContribution`s stays dialect-owned:\n * `PgTable` and `SQLiteTable` share no common supertype, exactly the\n * restriction `contribution-members.ts`'s module doc comment describes for\n * the marker tables. `contributionsForTableNames` is the one dependency\n * that composes each dialect's own `createXTables` + `xContributions`;\n * everything downstream of it — which barrel keys belong to which relation\n * set, how a missing table is detected, how a recorded relation's DDL\n * splits into `createTable` / `indexes` — is genuinely identical.\n */\nimport { requireDefined } from \"../../../../utils/presence\";\nimport type { TableContribution } from \"../../../table-contribution\";\nimport type {\n  IdentityTableNames,\n  RecordedRelationDdl,\n  RecordedTableNames,\n} from \"../../../types\";\n\n/**\n * Barrel keys (contribution logical names) of the four relations that hold\n * Operational Identity state: current assertions, recorded-time assertions,\n * the derived closure, and the derived separation relation.\n * `ensureIdentityTables()` scopes its idempotent CREATE TABLE / CREATE INDEX\n * to exactly these when identity is first enabled on an existing database.\n */\nconst IDENTITY_TABLE_LOGICAL_NAMES: ReadonlySet<string> = new Set([\n  \"identityAssertions\",\n  \"recordedIdentityAssertions\",\n  \"identityClosure\",\n  \"identitySeparation\",\n]);\n\n/**\n * Barrel keys (contribution logical names) of the three relations that hold\n * timestamp-only recorded-time state. `recordedTableDdl()` scopes its\n * projected DDL to exactly these.\n */\nconst RECORDED_TABLE_LOGICAL_NAMES: ReadonlySet<string> = new Set([\n  \"recordedNodes\",\n  \"recordedEdges\",\n  \"recordedClock\",\n]);\n\nexport type CreateIdentityMembersDeps = Readonly<{\n  /** Idempotent `CREATE TABLE ...` for the revision-origins table, rendered once by the caller from its own dialect's table-DDL generator. */\n  revisionOriginsTableDdl: string;\n  /** Runs one idempotent CREATE-shaped DDL statement — the same closure the profile's own `EngineProvisioning.ensureTable` uses. */\n  ensureTable: (ddl: string) => Promise<void>;\n  /** Whether the given physical table name currently exists — the same catalog probe `createContributionMembers` builds. */\n  contributionTableExists: (tableName: string) => Promise<boolean>;\n  /**\n   * This dialect's authoritative `TableContribution` set for a\n   * caller-supplied physical-name override — i.e. `xContributions(buildXTables(overrides), fulltextStrategy)`.\n   * Pure: builds Drizzle table objects and walks them, issuing no SQL. The\n   * one seam a shared implementation cannot call directly, for the same\n   * reason `contribution-members.ts` cannot call `.from()` / `.insert()`\n   * on a generic table parameter.\n   */\n  contributionsForTableNames: (\n    overrides: Readonly<Record<string, string>>,\n  ) => readonly TableContribution[];\n  /**\n   * Names a recorded relation's PRIMARY KEY constraint from its resolved\n   * physical table name (PostgreSQL: `<table>_pkey`, the name the server\n   * derives for the unnamed inline `PRIMARY KEY (…)` both dialects emit).\n   * Absent on a dialect that does not name PRIMARY KEY constraints\n   * separately (SQLite) — `recordedTableDdl` then omits the field entirely\n   * rather than setting it to `undefined`.\n   */\n  primaryKeyConstraintNameFor?: (tableName: string) => string;\n}>;\n\nexport type IdentityMembers = Readonly<{\n  ensureRevisionOriginsTable: () => Promise<void>;\n  ensureIdentityTables: (\n    tableNames: IdentityTableNames,\n    options: Readonly<{ provisionMissing: boolean }>,\n  ) => Promise<readonly string[]>;\n  identityTableDdl: (tableNames: IdentityTableNames) => readonly string[];\n  recordedTableDdl: (\n    tableNames: RecordedTableNames,\n  ) => Readonly<Record<keyof RecordedTableNames, RecordedRelationDdl>>;\n}>;\n\n/**\n * Builds the identity/recorded-relation member group. Moved out of the two\n * dialect files unchanged: same missing-table detection, same idempotent\n * provisioning, same recorded-relation DDL split.\n */\nexport function createIdentityMembers(\n  deps: CreateIdentityMembersDeps,\n): IdentityMembers {\n  const {\n    revisionOriginsTableDdl,\n    ensureTable,\n    contributionTableExists,\n    contributionsForTableNames,\n    primaryKeyConstraintNameFor,\n  } = deps;\n\n  /**\n   * The contribution descriptors for exactly the identity relations, under\n   * caller-supplied physical names. Pure — nothing is executed here — and\n   * the single owner of \"which DDL belongs to the identity relations\",\n   * shared by `ensureIdentityTables` (which runs it) and `identityTableDdl`\n   * (which hands it to a transaction).\n   */\n  function identityContributionsFor(\n    identityTableNames: IdentityTableNames,\n  ): readonly TableContribution[] {\n    return contributionsForTableNames(identityTableNames).filter(\n      (contribution) =>\n        IDENTITY_TABLE_LOGICAL_NAMES.has(contribution.logicalName),\n    );\n  }\n\n  /**\n   * The contribution descriptors for exactly the three recorded relations,\n   * under caller-supplied physical names. Pure — nothing is executed here —\n   * and the single owner of \"which DDL belongs to the recorded relations\",\n   * handed to `recordedTableDdl`'s caller (the offline legacy-schema\n   * migration) rather than executed directly.\n   */\n  function recordedContributionsFor(\n    recordedTableNames: RecordedTableNames,\n  ): readonly TableContribution[] {\n    return contributionsForTableNames(recordedTableNames).filter(\n      (contribution) =>\n        RECORDED_TABLE_LOGICAL_NAMES.has(contribution.logicalName),\n    );\n  }\n\n  return {\n    async ensureRevisionOriginsTable(): Promise<void> {\n      await ensureTable(revisionOriginsTableDdl);\n    },\n\n    async ensureIdentityTables(\n      identityTableNames: IdentityTableNames,\n      options: Readonly<{ provisionMissing: boolean }>,\n    ): Promise<readonly string[]> {\n      // First enablement of Operational Identity on an existing populated\n      // database: createStore / createXBackend run no DDL, so the four\n      // identity relations the enablement preflight reads/writes may not\n      // exist yet. Ensure them (and their indexes and CHECK constraints)\n      // idempotently — CREATE TABLE / CREATE INDEX IF NOT EXISTS — reusing\n      // the same contribution DDL bootstrapTables emits, scoped to the\n      // identity relations. Stores run this before opening the\n      // schema-commit transaction so DDL does not re-enter its per-graph\n      // write lock.\n      const identityContributions =\n        identityContributionsFor(identityTableNames);\n      const missing: string[] = [];\n      for (const contribution of identityContributions) {\n        if (!(await contributionTableExists(contribution.tableName))) {\n          missing.push(contribution.logicalName);\n        }\n      }\n      // Do not turn a missing assertion ledger on an already-enabled graph\n      // into an empty-but-present table. Otherwise the first open fails,\n      // then a retry silently accepts lost identity truth. First enablement\n      // opts into provisioning; when all tables exist, idempotent DDL still\n      // repairs missing secondary indexes.\n      if (missing.length === 0 || options.provisionMissing) {\n        for (const contribution of identityContributions) {\n          for (const ddl of contribution.createDdl) {\n            await ensureTable(ddl);\n          }\n        }\n      }\n      return missing;\n    },\n\n    identityTableDdl(identityTableNames: IdentityTableNames): readonly string[] {\n      return identityContributionsFor(identityTableNames).flatMap(\n        (contribution) => [...contribution.createDdl],\n      );\n    },\n\n    recordedTableDdl(\n      recordedTableNames: RecordedTableNames,\n    ): Readonly<Record<keyof RecordedTableNames, RecordedRelationDdl>> {\n      const contributions = recordedContributionsFor(recordedTableNames);\n      function ddlFor(\n        logicalName: keyof RecordedTableNames,\n      ): RecordedRelationDdl {\n        const contribution = requireDefined(\n          contributions.find((entry) => entry.logicalName === logicalName),\n          `recordedTableDdl: no contribution for ${logicalName}.`,\n        );\n        return {\n          createTable: requireDefined(\n            contribution.createDdl[0],\n            `recordedTableDdl: empty DDL for ${logicalName}.`,\n          ),\n          indexes: contribution.createDdl.slice(1),\n          ...(primaryKeyConstraintNameFor === undefined ?\n            {}\n          : {\n              primaryKeyConstraintName: primaryKeyConstraintNameFor(\n                contribution.tableName,\n              ),\n            }),\n        };\n      }\n      return {\n        recordedClock: ddlFor(\"recordedClock\"),\n        recordedEdges: ddlFor(\"recordedEdges\"),\n        recordedNodes: ddlFor(\"recordedNodes\"),\n      };\n    },\n  };\n}\n","/**\n * Shared building blocks for the `typegraph_index_materializations`\n * status-table operations on both SQLite and Postgres backends.\n *\n * The two dialect adapters used to carry near-identical implementations\n * of `getIndexMaterialization` and `recordIndexMaterialization`. They\n * differ only in (a) how timestamps cross the Drizzle boundary —\n * SQLite stores ISO strings in TEXT columns, Postgres stores `Date`\n * objects in TIMESTAMPTZ columns — and (b) the raw-DDL exec call used\n * to bootstrap the table. Everything else (the row shape, the\n * `onConflictDoUpdate` set clause, the `materializedAt` COALESCE\n * preservation rule for failed re-attempts) is dialect-agnostic and\n * lives here.\n */\n\nimport { sql } from \"drizzle-orm\";\n\nimport type { IndexEntity } from \"../../core/types\";\nimport { formatPostgresTimestamp } from \"../row-mappers\";\nimport type {\n  IndexMaterializationRow,\n  RecordIndexMaterializationParams,\n} from \"../types\";\n\n/**\n * Bridges the dialect-specific timestamp column representation to the\n * canonical ISO-8601 strings used by `IndexMaterializationRow` and\n * `RecordIndexMaterializationParams`. Generic over the encoded type so\n * each dialect's `.values()` call gets a Drizzle-compatible shape:\n * `string` for SQLite TEXT, `Date` for Postgres TIMESTAMPTZ.\n */\ntype IndexMaterializationTimestampAdapter<TEncoded> = Readonly<{\n  /** Convert a stored column value to ISO-8601 (or `undefined`). */\n  decode(value: unknown): string | undefined;\n  /** Convert an ISO-8601 string to the value Drizzle expects on insert. */\n  encode(value: string): TEncoded;\n}>;\n\nexport const SQLITE_INDEX_MAT_TIMESTAMPS: IndexMaterializationTimestampAdapter<string> =\n  {\n    decode: (value) => (typeof value === \"string\" ? value : undefined),\n    encode: (value) => value,\n  };\n\nexport const POSTGRES_INDEX_MAT_TIMESTAMPS: IndexMaterializationTimestampAdapter<Date> =\n  {\n    decode: formatPostgresTimestamp,\n    encode: (value) => new Date(value),\n  };\n\n/**\n * Raw shape returned by Drizzle for one row of the\n * `typegraph_index_materializations` table. The caller has already\n * narrowed via the typed table query; this type just spells out the\n * dialect-shared field set so `mapMaterializationRow` can decode it.\n * Exported so `engine/members/index-materialization-members.ts` can type\n * the row-access closures each dialect binds to its own table object.\n */\nexport type RawIndexMaterializationRow = Readonly<{\n  indexName: string;\n  graphId: string;\n  entity: string;\n  kind: string;\n  signature: string;\n  schemaVersion: number;\n  materializedAt: unknown;\n  lastAttemptedAt: unknown;\n  lastError: string | null;\n}>;\n\nexport function mapMaterializationRow(\n  row: RawIndexMaterializationRow,\n  decode: (value: unknown) => string | undefined,\n): IndexMaterializationRow {\n  const lastAttemptedAt = decode(row.lastAttemptedAt);\n  if (lastAttemptedAt === undefined) {\n    throw new Error(\n      `materialization row missing required last_attempted_at: ${row.indexName}`,\n    );\n  }\n  return {\n    indexName: row.indexName,\n    graphId: row.graphId,\n    entity: row.entity as IndexEntity,\n    kind: row.kind,\n    signature: row.signature,\n    schemaVersion: row.schemaVersion,\n    materializedAt: decode(row.materializedAt),\n    lastAttemptedAt,\n    lastError: row.lastError ?? undefined,\n  };\n}\n\n/**\n * Build the column values for the upsert. Timestamp columns are\n * encoded through the adapter so the dialect's Drizzle column type\n * gets the value-shape it expects.\n */\nexport function buildMaterializationInsertValues<TEncoded>(\n  params: RecordIndexMaterializationParams,\n  encode: (value: string) => TEncoded,\n): Readonly<{\n  indexName: string;\n  graphId: string;\n  entity: IndexEntity;\n  kind: string;\n  signature: string;\n  schemaVersion: number;\n  materializedAt: TEncoded | undefined;\n  lastAttemptedAt: TEncoded;\n  lastError: string | undefined;\n}> {\n  return {\n    indexName: params.indexName,\n    graphId: params.graphId,\n    entity: params.entity,\n    kind: params.kind,\n    signature: params.signature,\n    schemaVersion: params.schemaVersion,\n    materializedAt:\n      params.materializedAt === undefined ?\n        undefined\n      : encode(params.materializedAt),\n    lastAttemptedAt: encode(params.attemptedAt),\n    lastError: params.error,\n  };\n}\n\n/**\n * Build the `set` clause for the upsert's ON CONFLICT DO UPDATE.\n *\n * A failed attempt (`materializedAt === undefined`) updates ONLY the\n * attempt bookkeeping (`lastAttemptedAt`/`lastError`): the row's shape\n * columns (`signature`, `entity`, `kind`, `graphId`, `schemaVersion`)\n * and `materializedAt` describe the index that IS materialized, and a\n * failed re-attempt must not overwrite them. In particular, a\n * signature-drift failure that rewrote `signature` to the new value\n * while keeping the old success `materializedAt` would settle as\n * `alreadyMaterialized` on the very next run — silencing the drift\n * signal after one report. Omitted columns are preserved by ON CONFLICT\n * DO UPDATE semantics. On success every column takes the new value.\n */\nexport function buildMaterializationOnConflictSet(\n  paramsMaterializedAt: string | undefined,\n): Readonly<Record<string, ReturnType<typeof sql>>> {\n  if (paramsMaterializedAt === undefined) {\n    return {\n      lastAttemptedAt: sql`excluded.${sql.identifier(\"last_attempted_at\")}`,\n      lastError: sql`excluded.${sql.identifier(\"last_error\")}`,\n    };\n  }\n  return {\n    graphId: sql`excluded.${sql.identifier(\"graph_id\")}`,\n    entity: sql`excluded.${sql.identifier(\"entity\")}`,\n    kind: sql`excluded.${sql.identifier(\"kind\")}`,\n    signature: sql`excluded.${sql.identifier(\"signature\")}`,\n    schemaVersion: sql`excluded.${sql.identifier(\"schema_version\")}`,\n    materializedAt: sql`excluded.${sql.identifier(\"materialized_at\")}`,\n    lastAttemptedAt: sql`excluded.${sql.identifier(\"last_attempted_at\")}`,\n    lastError: sql`excluded.${sql.identifier(\"last_error\")}`,\n  };\n}\n","/**\n * The `typegraph_index_materializations` status-table CRUD: ensuring the\n * table exists, reading one or many rows, and the `materializedAt`-preserving\n * upsert — shared verbatim by every SQL engine profile.\n *\n * `ensureIndexMaterializationsTable` is not a full mirror: PostgreSQL runs an\n * additive-column migration (`ADD COLUMN IF NOT EXISTS`) for the build-claim\n * columns right after the `CREATE TABLE`, for a table created before those\n * columns existed — a fresh install already has them from the `CREATE`\n * itself. SQLite has no such migration to run. That asymmetry is threaded\n * through as the optional `ensureIndexMaterializationColumns` dep, the same\n * shape `EngineProvisioning` exposes it as, rather than re-spelled here.\n *\n * The three row-shaped statements (SELECT one, SELECT many by name, upsert)\n * go through `rowAccess` rather than Drizzle's typed table API directly, for\n * the same reason `contribution-members.ts`'s module doc comment gives:\n * `PgTable` and `SQLiteTable` share no common supertype, so one shared body\n * cannot call `.from()` / `.insert()` on a generic table parameter. Each\n * dialect binds the three-line access closures to its own `db` and table\n * object; the row-shaping and decoding logic (`mapMaterializationRow`,\n * `buildMaterializationInsertValues`, `buildMaterializationOnConflictSet`)\n * already lived in `index-materializations.ts` before this extraction and is\n * unchanged.\n */\nimport type {\n  IndexMaterializationRow,\n  RecordIndexMaterializationParams,\n} from \"../../../types\";\nimport {\n  mapMaterializationRow,\n  type RawIndexMaterializationRow,\n} from \"../../index-materializations\";\n\n/**\n * The three statements the index-materializations table needs, bound to one\n * dialect's `db` and table object by the caller. `upsert` takes the same\n * domain params `recordIndexMaterialization` does, rather than a pre-shaped\n * Drizzle payload, so the timestamp encoding and the ON CONFLICT `set` clause\n * stay inside the per-dialect binding, where the table's own typed columns\n * are in scope.\n */\ntype IndexMaterializationRowAccess = Readonly<{\n  selectByIndexName: (\n    indexName: string,\n  ) => Promise<readonly RawIndexMaterializationRow[]>;\n  selectByIndexNames: (\n    indexNames: readonly string[],\n  ) => Promise<readonly RawIndexMaterializationRow[]>;\n  upsert: (params: RecordIndexMaterializationParams) => Promise<void>;\n}>;\n\nexport type CreateIndexMaterializationMembersDeps = Readonly<{\n  /** Idempotent `CREATE TABLE ...` for the index-materializations table, rendered once by the caller from its own dialect's table-DDL generator. */\n  indexMaterializationsTableDdl: string;\n  /** Runs one idempotent CREATE-shaped DDL statement — the same closure the profile's own `EngineProvisioning.ensureTable` uses. */\n  ensureTable: (ddl: string) => Promise<void>;\n  /**\n   * PostgreSQL's additive-column migration for a table created before the\n   * build-claim columns existed — the same optional hook\n   * `EngineProvisioning.ensureIndexMaterializationColumns` exposes. Absent on\n   * a dialect with no such migration to run (SQLite).\n   */\n  ensureIndexMaterializationColumns?: (tableName: string) => Promise<void>;\n  /** The index-materializations table's resolved physical name, passed to `ensureIndexMaterializationColumns`. */\n  tableName: string;\n  /** Decodes the dialect's timestamp column representation to a canonical ISO-8601 string. */\n  timestamps: Readonly<{ decode: (value: unknown) => string | undefined }>;\n  rowAccess: IndexMaterializationRowAccess;\n}>;\n\nexport type IndexMaterializationMembers = Readonly<{\n  ensureIndexMaterializationsTable: () => Promise<void>;\n  getIndexMaterialization: (\n    indexName: string,\n  ) => Promise<IndexMaterializationRow | undefined>;\n  getIndexMaterializations: (\n    statusKeys: readonly string[],\n  ) => Promise<readonly IndexMaterializationRow[]>;\n  recordIndexMaterialization: (\n    params: RecordIndexMaterializationParams,\n  ) => Promise<void>;\n}>;\n\n/**\n * Builds the index-materializations member group. Moved out of the two\n * dialect files unchanged: same idempotent provisioning (plus PostgreSQL's\n * additive-column migration where the dep supplies it), same row decoding,\n * same `materializedAt`-preserving upsert.\n */\nexport function createIndexMaterializationMembers(\n  deps: CreateIndexMaterializationMembersDeps,\n): IndexMaterializationMembers {\n  const {\n    indexMaterializationsTableDdl,\n    ensureTable,\n    ensureIndexMaterializationColumns,\n    tableName,\n    timestamps,\n    rowAccess,\n  } = deps;\n\n  return {\n    async ensureIndexMaterializationsTable(): Promise<void> {\n      await ensureTable(indexMaterializationsTableDdl);\n      await ensureIndexMaterializationColumns?.(tableName);\n    },\n\n    async getIndexMaterialization(\n      indexName: string,\n    ): Promise<IndexMaterializationRow | undefined> {\n      const rows = await rowAccess.selectByIndexName(indexName);\n      const row = rows[0];\n      if (row === undefined) return undefined;\n      return mapMaterializationRow(row, timestamps.decode);\n    },\n\n    async getIndexMaterializations(\n      statusKeys: readonly string[],\n    ): Promise<readonly IndexMaterializationRow[]> {\n      if (statusKeys.length === 0) return [];\n      const rows = await rowAccess.selectByIndexNames(statusKeys);\n      return rows.map((row) => mapMaterializationRow(row, timestamps.decode));\n    },\n\n    async recordIndexMaterialization(\n      params: RecordIndexMaterializationParams,\n    ): Promise<void> {\n      await rowAccess.upsert(params);\n    },\n  };\n}\n","/**\n * Shared building blocks for the `typegraph_kind_removals` status-table\n * operations on both SQLite and Postgres backends.\n *\n * Same shape as `index-materializations.ts`: the dialects differ only\n * in (a) timestamp encoding (SQLite TEXT vs Postgres TIMESTAMPTZ) and\n * (b) the raw-DDL exec call used to bootstrap the table. The row\n * mapper, the `onConflictDoUpdate` set clause, and the\n * `removed_at` COALESCE-on-failure preservation rule are dialect-\n * agnostic and live here. Two near-identical adapter copies in\n * `sqlite.ts` / `postgres.ts` collapse to ~15 lines each.\n */\n\nimport { sql } from \"drizzle-orm\";\n\nimport type { KindEntity } from \"../../core/types\";\nimport { formatPostgresTimestamp } from \"../row-mappers\";\nimport type { KindRemovalRow, RecordKindRemovalParams } from \"../types\";\n\n/**\n * Bridges the dialect-specific timestamp column representation to the\n * canonical ISO-8601 strings used by `KindRemovalRow` and\n * `RecordKindRemovalParams`. Generic over the encoded type so each\n * dialect's `.values()` call gets a Drizzle-compatible shape: `string`\n * for SQLite TEXT, `Date` for Postgres TIMESTAMPTZ.\n */\ntype KindRemovalTimestampAdapter<TEncoded> = Readonly<{\n  /** Convert a stored column value to ISO-8601 (or `undefined`). */\n  decode(value: unknown): string | undefined;\n  /** Convert an ISO-8601 string to the value Drizzle expects on insert. */\n  encode(value: string): TEncoded;\n}>;\n\nexport const SQLITE_KIND_REMOVAL_TIMESTAMPS: KindRemovalTimestampAdapter<string> =\n  {\n    decode: (value) => (typeof value === \"string\" ? value : undefined),\n    encode: (value) => value,\n  };\n\nexport const POSTGRES_KIND_REMOVAL_TIMESTAMPS: KindRemovalTimestampAdapter<Date> =\n  {\n    decode: formatPostgresTimestamp,\n    encode: (value) => new Date(value),\n  };\n\n/**\n * Raw shape returned by Drizzle for one row of the\n * `typegraph_kind_removals` table.\n */\nexport type RawKindRemovalRow = Readonly<{\n  graphId: string;\n  kindName: string;\n  entity: string;\n  schemaVersion: number;\n  removedAt: unknown;\n  lastAttemptedAt: unknown;\n  lastError: string | null;\n}>;\n\nexport function mapKindRemovalRow(\n  row: RawKindRemovalRow,\n  decode: (value: unknown) => string | undefined,\n): KindRemovalRow {\n  const lastAttemptedAt = decode(row.lastAttemptedAt);\n  if (lastAttemptedAt === undefined) {\n    throw new Error(\n      `kind removal row missing required last_attempted_at: ${row.kindName}`,\n    );\n  }\n  return {\n    graphId: row.graphId,\n    kindName: row.kindName,\n    entity: row.entity as KindEntity,\n    schemaVersion: row.schemaVersion,\n    removedAt: decode(row.removedAt),\n    lastAttemptedAt,\n    lastError: row.lastError ?? undefined,\n  };\n}\n\n/**\n * Build the column values for the upsert. Timestamp columns are\n * encoded through the adapter so the dialect's Drizzle column type\n * gets the value-shape it expects.\n */\nexport function buildKindRemovalInsertValues<TEncoded>(\n  params: RecordKindRemovalParams,\n  encode: (value: string) => TEncoded,\n): Readonly<{\n  graphId: string;\n  kindName: string;\n  entity: KindEntity;\n  schemaVersion: number;\n  removedAt: TEncoded | undefined;\n  lastAttemptedAt: TEncoded;\n  lastError: string | undefined;\n}> {\n  return {\n    graphId: params.graphId,\n    kindName: params.kindName,\n    entity: params.entity,\n    schemaVersion: params.schemaVersion,\n    removedAt:\n      params.removedAt === undefined ? undefined : encode(params.removedAt),\n    lastAttemptedAt: encode(params.attemptedAt),\n    lastError: params.error,\n  };\n}\n\n/**\n * Build the `set` clause for the upsert's ON CONFLICT DO UPDATE.\n *\n * `removed_at` uses `COALESCE` to preserve any prior successful\n * timestamp when this attempt failed (`removedAt === undefined`). On\n * success, the new timestamp wins. Mirrors the materializations-table\n * preservation rule.\n */\nexport function buildKindRemovalOnConflictSet(\n  removedAtColumn: unknown,\n  paramsRemovedAt: string | undefined,\n): Readonly<Record<string, ReturnType<typeof sql>>> {\n  const removedAtSet =\n    paramsRemovedAt === undefined ?\n      sql`COALESCE(excluded.${sql.identifier(\"removed_at\")}, ${removedAtColumn})`\n    : sql`excluded.${sql.identifier(\"removed_at\")}`;\n  return {\n    entity: sql`excluded.${sql.identifier(\"entity\")}`,\n    schemaVersion: sql`excluded.${sql.identifier(\"schema_version\")}`,\n    removedAt: removedAtSet,\n    lastAttemptedAt: sql`excluded.${sql.identifier(\"last_attempted_at\")}`,\n    lastError: sql`excluded.${sql.identifier(\"last_error\")}`,\n  };\n}\n","/**\n * The `typegraph_kind_removals` status-table CRUD: ensuring the table\n * exists, reading a graph's pending or all removal rows, and the\n * `removed_at`-preserving upsert — shared verbatim by every SQL engine\n * profile. Unlike `index-materialization-members.ts`'s table, this one is a\n * full mirror: neither dialect runs a migration beyond the initial CREATE.\n *\n * The three row-shaped statements (select pending, select all, upsert) go\n * through `rowAccess` rather than Drizzle's typed table API directly, for\n * the same reason `index-materialization-members.ts`'s module doc comment\n * gives: `PgTable` and `SQLiteTable` share no common supertype, so one\n * shared body cannot call `.from()` / `.insert()` on a generic table\n * parameter. Each dialect binds the three-line access closures to its own\n * `db` and table object; the row-shaping and decoding logic\n * (`mapKindRemovalRow`, `buildKindRemovalInsertValues`,\n * `buildKindRemovalOnConflictSet`) already lived in `kind-removals.ts`\n * before this extraction and is unchanged.\n */\nimport type { KindRemovalRow, RecordKindRemovalParams } from \"../../../types\";\nimport {\n  mapKindRemovalRow,\n  type RawKindRemovalRow,\n} from \"../../kind-removals\";\n\n/**\n * The three statements the kind-removals table needs, bound to one\n * dialect's `db` and table object by the caller. `upsert` takes the same\n * domain params `recordKindRemoval` does, rather than a pre-shaped Drizzle\n * payload, so the timestamp encoding and the ON CONFLICT `set` clause stay\n * inside the per-dialect binding, where the table's own typed columns are\n * in scope.\n */\ntype KindRemovalRowAccess = Readonly<{\n  selectPending: (graphId: string) => Promise<readonly RawKindRemovalRow[]>;\n  selectAll: (graphId: string) => Promise<readonly RawKindRemovalRow[]>;\n  upsert: (params: RecordKindRemovalParams) => Promise<void>;\n}>;\n\nexport type CreateKindRemovalMembersDeps = Readonly<{\n  /** Idempotent `CREATE TABLE ...` for the kind-removals table, rendered once by the caller from its own dialect's table-DDL generator. */\n  kindRemovalsTableDdl: string;\n  /** Runs one idempotent CREATE-shaped DDL statement — the same closure the profile's own `EngineProvisioning.ensureTable` uses. */\n  ensureTable: (ddl: string) => Promise<void>;\n  /** Decodes the dialect's timestamp column representation to a canonical ISO-8601 string. */\n  timestamps: Readonly<{ decode: (value: unknown) => string | undefined }>;\n  rowAccess: KindRemovalRowAccess;\n}>;\n\nexport type KindRemovalMembers = Readonly<{\n  ensureKindRemovalsTable: () => Promise<void>;\n  getPendingKindRemovals: (\n    graphId: string,\n  ) => Promise<readonly KindRemovalRow[]>;\n  getAllKindRemovals: (graphId: string) => Promise<readonly KindRemovalRow[]>;\n  recordKindRemoval: (params: RecordKindRemovalParams) => Promise<void>;\n}>;\n\n/**\n * Builds the kind-removals member group. Moved out of the two dialect files\n * unchanged: same idempotent provisioning, same row decoding, same\n * `removed_at`-preserving upsert.\n */\nexport function createKindRemovalMembers(\n  deps: CreateKindRemovalMembersDeps,\n): KindRemovalMembers {\n  const { kindRemovalsTableDdl, ensureTable, timestamps, rowAccess } = deps;\n\n  return {\n    async ensureKindRemovalsTable(): Promise<void> {\n      await ensureTable(kindRemovalsTableDdl);\n    },\n\n    async getPendingKindRemovals(\n      graphId: string,\n    ): Promise<readonly KindRemovalRow[]> {\n      const rows = await rowAccess.selectPending(graphId);\n      return rows.map((row) => mapKindRemovalRow(row, timestamps.decode));\n    },\n\n    async getAllKindRemovals(\n      graphId: string,\n    ): Promise<readonly KindRemovalRow[]> {\n      const rows = await rowAccess.selectAll(graphId);\n      return rows.map((row) => mapKindRemovalRow(row, timestamps.decode));\n    },\n\n    async recordKindRemoval(params: RecordKindRemovalParams): Promise<void> {\n      await rowAccess.upsert(params);\n    },\n  };\n}\n","/**\n * Shared rules for a `findEdgesByEndpointSet` read.\n *\n * Most of what an endpoint-set read has to get right is enforced by the shape\n * of {@link FindEdgesByEndpointSetParams} itself: one `side` means both\n * endpoints can never fan out at once, the absence of a scalar `fromId` /\n * `toId` means a scalar and a set can never disagree, and the absence of\n * `limit` / `offset` / `after` means no caller can ask for a global slice\n * across a read the backend splits into chunks.\n *\n * What is left needs code: the ids must be deduplicated before they are split\n * across bind-budget chunks, and `limitPerEndpoint` must be a usable number.\n * Both live here so every backend honoring the operation enforces them\n * identically.\n */\nimport { ConfigurationError } from \"../errors\";\nimport { encodeTupleKey } from \"../utils/tuple-key\";\nimport type {\n  FindEdgesByEndpointSetParams,\n  FindEdgesByHeterogeneousEndpointSetParams,\n} from \"./types\";\n\ntype EdgeEndpointReference =\n  FindEdgesByHeterogeneousEndpointSetParams[\"endpoints\"][number];\n\n/**\n * Worst-case count of NON-id bound parameters in an endpoint-set read:\n * `graph_id`, `kind`, the endpoint kind, the two `asOf` comparisons, and\n * `limitPerEndpoint`. Every other bind in the statement is an endpoint id, so\n * a chunk of `maxBindParameters - FIND_EDGES_ENDPOINT_FIXED_PARAM_COUNT` ids\n * always fits.\n */\nexport const FIND_EDGES_ENDPOINT_FIXED_PARAM_COUNT = 6;\n\n/**\n * Worst-case non-source binds in a heterogeneous endpoint read: `graph_id`,\n * two `asOf` comparisons, and `limitPerEndpoint`. Edge-kind binds are accounted\n * for separately because their count is supplied by the caller.\n */\nconst FIND_EDGES_HETEROGENEOUS_FIXED_PARAM_COUNT = 4;\n\nfunction assertLimitPerEndpoint(\n  operation: string,\n  graphId: string,\n  limitPerEndpoint: number | undefined,\n  kind?: string,\n): void {\n  if (\n    limitPerEndpoint === undefined ||\n    (Number.isInteger(limitPerEndpoint) && limitPerEndpoint > 0)\n  ) {\n    return;\n  }\n  throw new ConfigurationError(\n    `${operation} \\`limitPerEndpoint\\` must be a positive integer, received ${String(limitPerEndpoint)}.`,\n    {\n      code: \"EDGE_ENDPOINT_SET_INVALID\",\n      graphId,\n      ...(kind === undefined ? {} : { kind }),\n    },\n    {\n      suggestion:\n        \"Pass a positive integer to cap each endpoint's rows, or omit it for an unbounded read.\",\n    },\n  );\n}\n\n/**\n * Validates an endpoint-set read and returns its deduplicated id list.\n *\n * Deduplication is a correctness requirement rather than a tidiness one: a\n * repeated id split across two chunks would return its edges twice.\n *\n * @throws {ConfigurationError} when `limitPerEndpoint` is not a positive\n *   integer.\n */\nexport function resolveEdgeEndpointIds(\n  params: FindEdgesByEndpointSetParams,\n): readonly string[] {\n  assertLimitPerEndpoint(\n    \"findEdgesByEndpointSet\",\n    params.graphId,\n    params.limitPerEndpoint,\n    params.kind,\n  );\n  return [...new Set(params.endpointIds)];\n}\n\nfunction endpointKey(endpoint: EdgeEndpointReference): string {\n  return endpoint.opposite === undefined ?\n      encodeTupleKey([\"incident\", endpoint.kind, endpoint.id])\n    : encodeTupleKey([\n        \"exact\",\n        endpoint.kind,\n        endpoint.id,\n        endpoint.opposite.kind,\n        endpoint.opposite.id,\n      ]);\n}\n\n/**\n * Validates and normalizes a heterogeneous endpoint-set read and computes how\n * many endpoint pairs fit in one statement.\n */\nexport function resolveHeterogeneousEdgeRead(\n  params: FindEdgesByHeterogeneousEndpointSetParams,\n  maxBindParameters: number,\n): Readonly<{\n  edgeKinds: readonly string[];\n  endpoints: readonly EdgeEndpointReference[];\n  endpointChunkSize: number;\n}> {\n  assertLimitPerEndpoint(\n    \"findEdgesByHeterogeneousEndpointSet\",\n    params.graphId,\n    params.limitPerEndpoint,\n  );\n\n  const edgeKinds = [...new Set(params.edgeKinds)];\n  const endpoints = [\n    ...new Map(\n      params.endpoints.map((endpoint) => [endpointKey(endpoint), endpoint]),\n    ).values(),\n  ];\n  const exactEndpointCount = endpoints.filter(\n    (endpoint) => endpoint.opposite !== undefined,\n  ).length;\n  if (exactEndpointCount > 0 && exactEndpointCount < endpoints.length) {\n    throw new ConfigurationError(\n      \"findEdgesByHeterogeneousEndpointSet cannot mix incident-endpoint and exact-pair rows in one request.\",\n      {\n        code: \"EDGE_HETEROGENEOUS_READ_MIXED_ENDPOINT_MODES\",\n        graphId: params.graphId,\n      },\n      {\n        suggestion:\n          \"Supply an opposite endpoint for every row when exact directed-pair matching is required.\",\n      },\n    );\n  }\n  if (edgeKinds.length === 0 || endpoints.length === 0) {\n    return { edgeKinds, endpoints, endpointChunkSize: 1 };\n  }\n\n  const endpointBindBudget =\n    maxBindParameters -\n    FIND_EDGES_HETEROGENEOUS_FIXED_PARAM_COUNT -\n    edgeKinds.length;\n  // Exact-pair rows bind the requested and opposite endpoint. Preserve the\n  // wider chunks of ordinary endpoint reads while using the worst-case width\n  // for a request that contains any exact pair.\n  const endpointBindWidth = exactEndpointCount > 0 ? 4 : 2;\n  const endpointChunkSize = Math.floor(endpointBindBudget / endpointBindWidth);\n  if (endpointChunkSize >= 1) {\n    return { edgeKinds, endpoints, endpointChunkSize };\n  }\n\n  throw new ConfigurationError(\n    \"findEdgesByHeterogeneousEndpointSet cannot fit one endpoint and the selected edge kinds within the backend bind-parameter budget.\",\n    {\n      code: \"EDGE_HETEROGENEOUS_READ_BIND_BUDGET_EXCEEDED\",\n      graphId: params.graphId,\n      edgeKindCount: edgeKinds.length,\n      maxBindParameters,\n    },\n    {\n      suggestion:\n        \"Select fewer edge kinds in one call or use a backend with a larger bind-parameter budget.\",\n    },\n  );\n}\n","/**\n * Exact durable contribution marker required by one atomic SQL program.\n *\n * The signature is resolved locally from the active strategy declaration. The\n * program proves this complete identity against durable database state inside\n * the same atomic submission as the projection write, so a cold backend does\n * not need a separate marker-read round trip before dispatch.\n */\nexport type AtomicContributionEvidence = Readonly<{\n  graphId: string;\n  logicalName: string;\n  owner: string;\n  tableName: string;\n  signature: string;\n}>;\n\n/** Bind cost contributed by one exact contribution-marker predicate. */\nexport const ATOMIC_CONTRIBUTION_EVIDENCE_BIND_COUNT = 5;\n\n/** Refusal-row identity/timestamp binds plus the expected marker-count bind. */\nexport const ATOMIC_CONTRIBUTION_ASSERTION_FIXED_BIND_COUNT = 6;\n","import { is, type SQL, sql as drizzleSql } from \"drizzle-orm\";\n\nimport {\n  CompilerInvariantError,\n  ConfigurationError,\n  DatabaseOperationError,\n  DisjointError,\n  EdgeMatchIdentityConflictError,\n  MigrationError,\n  SchemaContentConflictError,\n  StaleVersionError,\n  UniquenessError,\n} from \"../../errors\";\nimport type { SqlDialect } from \"../../query/dialect/types\";\nimport type { VectorSlot } from \"../../query/dialect/vector-strategy\";\nimport { sql } from \"../../query/sql-fragment\";\nimport type {\n  CompiledStatementSql,\n  CompiledTemporaryStatementSql,\n} from \"../../query/sql-intent\";\nimport { asCompiledStatementSql } from \"../../query/sql-intent\";\nimport {\n  type ClaimOwner,\n  compareClaimTargets,\n  isSameClaimOwner,\n} from \"../../store/claims/axis\";\nimport {\n  type ConstrainedCardinality,\n  edgeCardinalityClaimTarget,\n  edgeClaimRelationMissing,\n} from \"../../store/claims/edge-claims\";\nimport { chunk as chunkArray } from \"../../utils/array\";\nimport { requireDefined } from \"../../utils/presence\";\nimport {\n  isDuplicatePrimaryKeyError,\n  isDuplicateUniqueIndexError,\n  isEdgeMatchIdentityStorageUnavailableError,\n  isMissingTableError,\n  isNotNullColumnViolation,\n  type PrimaryKeyRelation,\n} from \"../../utils/sql-errors\";\nimport { encodeTupleKey } from \"../../utils/tuple-key\";\nimport {\n  type AtomicDeleteBatchResult,\n  AtomicEdgeBatchCardinalityRefusalError,\n  type AtomicEdgeBatchCountInput,\n  AtomicEdgeBatchEndpointRefusalError,\n  type AtomicEdgeBatchExecutor,\n  type AtomicEdgeBatchRowsInput,\n  type AtomicEdgeConvergenceInput,\n  type AtomicEdgeConvergenceResult,\n  AtomicEdgeConvergenceTombstoneRefusalError,\n  type AtomicEdgeDeleteBatchExecutor,\n  type AtomicEdgeDeleteBatchInput,\n  AtomicEdgeDeleteIdentityRefusalError,\n  type AtomicEdgeMutationProgramExecutor,\n  type AtomicEdgeResolvedMutationSetInput,\n  type AtomicEdgeResolvedMutationSetResult,\n  type AtomicEdgeResolvedUpdateBatchExecutor,\n  type AtomicEdgeResolvedUpdateEntry,\n  type AtomicNodeBatchEntry,\n  type AtomicNodeBatchExecutor,\n  type AtomicNodeBatchInput,\n  atomicNodeClaimInputCost,\n  type AtomicNodeClaimSupport,\n  type AtomicNodeDeleteBatchExecutor,\n  type AtomicNodeDeleteBatchInput,\n  AtomicNodeDeleteRestrictedRefusalError,\n  type AtomicNodePostimageEntry,\n  type AtomicNodeProjectionSupport,\n  type AtomicNodeReplacementBatchExecutor,\n  type AtomicNodeReplacementEntry,\n  type AtomicNodeResolvedMutationSetExecutor,\n  type AtomicNodeResolvedUpdateBatchExecutor,\n  type AtomicNodeResolvedUpdateEntry,\n  supportsAtomicNodeClaims,\n} from \"../capabilities/atomic-mutation-program\";\nimport type {\n  AtomicSqlProgram,\n  AtomicSqlProgramExecutor,\n  CompiledAtomicSqlStatement,\n} from \"../capabilities/atomic-sql-program\";\nimport { rephaseNonTransactionalNodeClaimPlan } from \"../capabilities/node-insert-projections\";\nimport type { FenceSql } from \"../capabilities/write-fence\";\nimport {\n  assertGraphCommandConvergenceIsolation,\n  assertGraphCommandCoordination,\n  assertGraphCommandExecutionContext,\n  type GraphCommandExecutionContext,\n  normalizeGraphCommandIsolation,\n} from \"../command-contract\";\nimport {\n  resolveEdgeEndpointIds,\n  resolveHeterogeneousEdgeRead,\n} from \"../edge-endpoint-sets\";\nimport { resolvedNodeUpdateBatchFitsBindBudget } from \"../resolved-node-update-batch\";\nimport { nowIso as defaultNowIso } from \"../row-mappers\";\nimport { countSchemaKindRows } from \"../schema-kind-emptiness\";\nimport type {\n  CheckUniqueBatchParams,\n  CheckUniqueParams,\n  ClaimEdgeCardinalityParams,\n  CommitSchemaVersionIfKindsEmptyResult,\n  CommitSchemaVersionParams,\n  CompareAndSetNodeParams,\n  ConstraintFenceViolationRows,\n  ContendedEdgeRow,\n  CountEdgesByKindParams,\n  CountEdgesFromParams,\n  CountNodesByKindParams,\n  DeleteEdgeParams,\n  DeleteEdgesBatchParams,\n  DeleteNodeParams,\n  DeleteUniqueParams,\n  DisjointOverlapRow,\n  DurableEdgeBatchMembers,\n  EdgeClaimOutcome,\n  EdgeConvergeCreateCommand,\n  EdgeConvergeCreateCommandResult,\n  EdgeCreateCommandResult,\n  EdgeExistsBetweenParams,\n  EdgeRow,\n  FindEdgesByEndpointSetParams,\n  FindEdgesByHeterogeneousEndpointSetParams,\n  FindEdgesByKindParams,\n  FindEdgesConnectedToParams,\n  FindNodesByKindParams,\n  GraphBackend,\n  GraphCommand,\n  GraphCommandResult,\n  GraphCommandSession,\n  HardDeleteEdgeParams,\n  HardDeleteNodeParams,\n  HardDeleteUniquesByConcreteKindParams,\n  HardDeleteUniquesByNodeIdsParams,\n  InsertEdgeParams,\n  InsertNodeParams,\n  InsertUniqueParams,\n  ManagedEdgeCreatePlan,\n  ManagedNodeCreatePlan,\n  NodeCreateCommandResult,\n  NodeRow,\n  PopulatedSchemaKind,\n  PurgeEdgeClaimsParams,\n  ReadConstraintFenceViolationsParams,\n  ResolvedNodeUpdateBatchParams,\n  SchemaKindEmptinessProbe,\n  SchemaVersionRow,\n  SchemaWriteFenceParams,\n  SetActiveVersionParams,\n  TransactionBackend,\n  UniqueRow,\n  UpdateEdgeParams,\n  UpdateNodeParams,\n  UpdateNodeSetParams,\n  UpdateNodeSetResult,\n} from \"../types\";\nimport { edgeMatchIdentityUniqueIndexName } from \"./ddl\";\nimport { type CompiledSqlQuery, type ExecutableSql } from \"./execution/types\";\nimport type {\n  AtomicNodeClaimEntry,\n  AtomicNodeClaimOwnerRow,\n} from \"./operations/atomic-node-claims\";\nimport type { AtomicContributionEvidence } from \"./operations/contribution-evidence\";\nimport {\n  ATOMIC_CONTRIBUTION_ASSERTION_FIXED_BIND_COUNT,\n  ATOMIC_CONTRIBUTION_EVIDENCE_BIND_COUNT,\n} from \"./operations/contribution-evidence\";\nimport { ATOMIC_EDGE_CLAIM_PROPOSED_COLUMN_COUNT } from \"./operations/edge-claims\";\nimport {\n  type CommonOperationStrategy,\n  createCachedTableExistence,\n  type TableExistenceCacheOptions,\n} from \"./operations/strategy\";\n\n/**\n * What a claim statement costs beyond its rows: the schema fence's graph id\n * and expected version, and the claim timestamp.\n *\n * Every claim statement binds the same\n * {@link ATOMIC_EDGE_CLAIM_PROPOSED_COLUMN_COUNT} values per proposed row —\n * the relation they all drive from carries both endpoints regardless of which\n * of them a cardinality's predicate reads — so one ceiling covers every\n * cardinality and a mixed batch cannot cross the driver's per-statement bind\n * budget.\n */\nconst ATOMIC_EDGE_CLAIM_FIXED_PARAM_COUNT = 3;\nconst ATOMIC_EDGE_CONVERGENCE_PARAM_COUNT = 14;\nconst ATOMIC_EDGE_CONVERGENCE_FIXED_PARAM_COUNT = 2;\nconst ATOMIC_NODE_CLAIM_INPUT_PARAM_COUNT = 6;\nconst ATOMIC_NODE_INSERT_PARAM_COUNT = 9;\nconst ATOMIC_NODE_WRITE_FIXED_PARAM_COUNT = 4;\n// The bundled fulltext lowering is the widest projection statement today.\n// Compilation below independently refuses any strategy that exceeds the\n// resulting budget, so a future strategy cannot silently invalidate this cost.\nconst ATOMIC_NODE_PROJECTION_FIXED_PARAM_COUNT = 4;\nconst ATOMIC_NODE_PROJECTION_MAX_PARAM_COUNT_PER_ENTRY = 6;\n\nfunction chunkAtomicNodeEntriesByIdSource(\n  entries: readonly AtomicNodeBatchEntry[],\n  chunkSize: number,\n): readonly (readonly AtomicNodeBatchEntry[])[] {\n  return ([\"generated\", \"caller\"] as const).flatMap((idSource) =>\n    chunkArray(\n      entries.filter((entry) => entry.idSource === idSource),\n      chunkSize,\n    ),\n  );\n}\n\nfunction chunkByWeight<T>(\n  items: readonly T[],\n  maxWeight: number,\n  weightOf: (item: T) => number,\n): readonly (readonly T[])[] {\n  const chunks: T[][] = [];\n  let current: T[] = [];\n  let currentWeight = 0;\n  for (const item of items) {\n    const weight = weightOf(item);\n    if (weight > maxWeight) {\n      throw new CompilerInvariantError(\n        \"An atomic program member exceeded its declared bind budget.\",\n        { weight, maxWeight },\n      );\n    }\n    if (current.length > 0 && currentWeight + weight > maxWeight) {\n      chunks.push(current);\n      current = [];\n      currentWeight = 0;\n    }\n    current.push(item);\n    currentWeight += weight;\n  }\n  if (current.length > 0) chunks.push(current);\n  return chunks;\n}\n\nfunction chunkAtomicNodeEntriesByClaimWork(\n  entries: readonly AtomicNodeBatchEntry[],\n  maxBindParameters: number,\n): readonly (readonly AtomicNodeBatchEntry[])[] {\n  const available = maxBindParameters - ATOMIC_NODE_WRITE_FIXED_PARAM_COUNT;\n  return ([\"generated\", \"caller\"] as const).flatMap((idSource) =>\n    chunkByWeight(\n      entries.filter((entry) => entry.idSource === idSource),\n      available,\n      (entry) =>\n        ATOMIC_NODE_INSERT_PARAM_COUNT +\n        atomicNodeClaimInputCost(entry.claims ?? []),\n    ),\n  );\n}\n\nfunction chunkAtomicNodeReplacementEntriesByClaimWork(\n  entries: readonly AtomicNodeReplacementEntry[],\n  maxBindParameters: number,\n): readonly (readonly AtomicNodeReplacementEntry[])[] {\n  const available = maxBindParameters - ATOMIC_NODE_WRITE_FIXED_PARAM_COUNT;\n  return chunkByWeight(\n    entries,\n    available,\n    (entry) =>\n      ATOMIC_NODE_INSERT_PARAM_COUNT +\n      atomicNodeClaimInputCost(entry.claims ?? []),\n  );\n}\n\n/** Maximum plain replacement members whose chunks fit one atomic submission. */\nexport function atomicNodeReplacementSubmissionMaxEntries(\n  maxBindParameters: number,\n): number {\n  const entriesPerStatement = Math.max(\n    1,\n    Math.floor(\n      (maxBindParameters - ATOMIC_NODE_WRITE_FIXED_PARAM_COUNT) /\n        ATOMIC_NODE_INSERT_PARAM_COUNT,\n    ),\n  );\n  return Math.min(\n    ATOMIC_RESOLVED_MUTATION_MAX_MEMBERS,\n    atomicResolvedMutationSubmissionMaxEntries(entriesPerStatement),\n  );\n}\n\nfunction assertMatchingFusedEdgeClaim(\n  params: InsertEdgeParams,\n  claim: ClaimEdgeCardinalityParams,\n): void {\n  const matchesEdge =\n    claim.graphId === params.graphId &&\n    claim.edgeId === params.id &&\n    claim.edgeKind === params.kind &&\n    claim.fromKind === params.fromKind &&\n    claim.fromId === params.fromId &&\n    claim.toKind === params.toKind &&\n    claim.toId === params.toId;\n  if (matchesEdge) return;\n\n  throw new CompilerInvariantError(\n    \"A fused edge cardinality claim must describe the edge being inserted.\",\n    {\n      edge: {\n        graphId: params.graphId,\n        id: params.id,\n        kind: params.kind,\n        fromKind: params.fromKind,\n        fromId: params.fromId,\n        toKind: params.toKind,\n        toId: params.toId,\n      },\n      claim: {\n        graphId: claim.graphId,\n        edgeId: claim.edgeId,\n        edgeKind: claim.edgeKind,\n        fromKind: claim.fromKind,\n        fromId: claim.fromId,\n        toKind: claim.toKind,\n        toId: claim.toId,\n      },\n    },\n  );\n}\n\nfunction assertMatchingNodeSchemaFence(\n  params: InsertNodeParams,\n  schemaFence: SchemaWriteFenceParams,\n): void {\n  if (schemaFence.graphId === params.graphId) return;\n\n  throw new CompilerInvariantError(\n    \"A node schema fence must match its node graph.\",\n    {\n      nodeGraphId: params.graphId,\n      fenceGraphId: schemaFence.graphId,\n      id: params.id,\n    },\n  );\n}\n\nfunction assertMatchingNodeSchemaFences(\n  params: readonly InsertNodeParams[],\n  schemaFence: SchemaWriteFenceParams,\n): void {\n  for (const nodeParams of params) {\n    assertMatchingNodeSchemaFence(nodeParams, schemaFence);\n  }\n}\n\nfunction assertMatchingEdgeSchemaFence(\n  params: InsertEdgeParams,\n  schemaFence: SchemaWriteFenceParams,\n): void {\n  if (schemaFence.graphId === params.graphId) return;\n\n  throw new CompilerInvariantError(\n    \"An edge schema fence must match its edge graph.\",\n    {\n      edgeGraphId: params.graphId,\n      fenceGraphId: schemaFence.graphId,\n      id: params.id,\n    },\n  );\n}\n\nfunction assertMatchingEdgeSchemaFences(\n  params: readonly InsertEdgeParams[],\n  schemaFence: SchemaWriteFenceParams,\n): void {\n  for (const edgeParams of params) {\n    assertMatchingEdgeSchemaFence(edgeParams, schemaFence);\n  }\n}\n\nfunction assertResolvedNodeUpdateBatchInput(\n  entries: readonly AtomicNodeResolvedUpdateEntry[],\n  schemaFence: SchemaWriteFenceParams,\n): void {\n  const first = entries[0];\n  if (first === undefined) return;\n  const ids = new Set<string>();\n  for (const entry of entries) {\n    if (\n      entry.graphId !== first.graphId ||\n      entry.kind !== first.kind ||\n      entry.graphId !== schemaFence.graphId ||\n      ids.has(entry.id)\n    ) {\n      throw new CompilerInvariantError(\n        \"An atomic resolved node update requires distinct ids from one fenced graph and kind.\",\n        {\n          expected: {\n            graphId: first.graphId,\n            kind: first.kind,\n            fenceGraphId: schemaFence.graphId,\n          },\n          actual: { graphId: entry.graphId, kind: entry.kind, id: entry.id },\n        },\n      );\n    }\n    ids.add(entry.id);\n  }\n}\n\nfunction assertResolvedEdgeUpdateBatchInput(\n  entries: readonly AtomicEdgeResolvedUpdateEntry[],\n  schemaFence: SchemaWriteFenceParams,\n): void {\n  const first = entries[0];\n  if (first === undefined) return;\n  const graphId = first.existing.graph_id;\n  const kind = first.existing.kind;\n  const ids = new Set<string>();\n  for (const entry of entries) {\n    const existing = entry.existing;\n    if (\n      existing.graph_id !== graphId ||\n      existing.graph_id !== schemaFence.graphId ||\n      existing.kind !== kind ||\n      ids.has(existing.id)\n    ) {\n      throw new CompilerInvariantError(\n        \"An atomic resolved edge update requires distinct ids from one fenced graph and kind.\",\n        {\n          expected: { graphId, kind, fenceGraphId: schemaFence.graphId },\n          actual: {\n            graphId: existing.graph_id,\n            kind: existing.kind,\n            id: existing.id,\n          },\n        },\n      );\n    }\n    ids.add(existing.id);\n  }\n}\n\nfunction assertResolvedNodeMutationSetInput(\n  creates: readonly AtomicNodeBatchEntry[],\n  updates: readonly AtomicNodeResolvedUpdateEntry[],\n  schemaFence: SchemaWriteFenceParams,\n): void {\n  if (creates.length === 0 || updates.length === 0) {\n    throw new CompilerInvariantError(\n      \"An atomic resolved node mutation set requires both creates and updates.\",\n    );\n  }\n  assertMatchingNodeSchemaFences(\n    creates.map((entry) => entry.params),\n    schemaFence,\n  );\n  assertResolvedNodeUpdateBatchInput(updates, schemaFence);\n  const identities = [\n    ...creates.map((entry) => ({\n      graphId: entry.params.graphId,\n      kind: entry.params.kind,\n      id: entry.params.id,\n    })),\n    ...updates,\n  ];\n  const first = identities[0];\n  if (first === undefined) return;\n  const ids = new Set<string>();\n  for (const identity of identities) {\n    if (\n      identity.graphId !== first.graphId ||\n      identity.kind !== first.kind ||\n      identity.graphId !== schemaFence.graphId ||\n      ids.has(identity.id)\n    ) {\n      throw new CompilerInvariantError(\n        \"An atomic resolved node mutation set requires distinct ids from one fenced graph and kind.\",\n      );\n    }\n    ids.add(identity.id);\n  }\n  if (\n    creates.some(\n      (entry) => entry.idSource !== \"caller\" || (entry.claims?.length ?? 0) > 0,\n    )\n  ) {\n    throw new CompilerInvariantError(\n      \"An atomic resolved node mutation set accepts only unclaimed caller-id creates.\",\n    );\n  }\n}\n\nfunction assertResolvedEdgeMutationSetInput(\n  creates: readonly InsertEdgeParams[],\n  updates: readonly AtomicEdgeResolvedUpdateEntry[],\n  schemaFence: SchemaWriteFenceParams,\n): void {\n  if (creates.length === 0 || updates.length === 0) {\n    throw new CompilerInvariantError(\n      \"An atomic resolved edge mutation set requires both creates and updates.\",\n    );\n  }\n  assertMatchingEdgeSchemaFences(creates, schemaFence);\n  assertResolvedEdgeUpdateBatchInput(updates, schemaFence);\n  const identities = [\n    ...creates.map((entry) => ({\n      graphId: entry.graphId,\n      kind: entry.kind,\n      id: entry.id,\n    })),\n    ...updates.map((entry) => ({\n      graphId: entry.existing.graph_id,\n      kind: entry.existing.kind,\n      id: entry.existing.id,\n    })),\n  ];\n  const first = identities[0];\n  if (first === undefined) return;\n  const ids = new Set<string>();\n  for (const identity of identities) {\n    if (\n      identity.graphId !== first.graphId ||\n      identity.kind !== first.kind ||\n      identity.graphId !== schemaFence.graphId ||\n      ids.has(identity.id)\n    ) {\n      throw new CompilerInvariantError(\n        \"An atomic resolved edge mutation set requires distinct ids from one fenced graph and kind.\",\n      );\n    }\n    ids.add(identity.id);\n  }\n  if (creates.some((entry) => entry.matchIdentity !== undefined)) {\n    throw new CompilerInvariantError(\n      \"An atomic resolved edge mutation set cannot carry durable match identity.\",\n    );\n  }\n}\n\n/**\n * The owner a claim write proposes. Reading it off the params in one place is\n * what keeps the accept/refuse test comparing the same pair the SQL arms do.\n */\nfunction claimOwnerOf(params: InsertUniqueParams): ClaimOwner {\n  return { concreteKind: params.concreteKind, nodeId: params.nodeId };\n}\n\n/**\n * The internal operation backend — what `createCommonOperationBackend`\n * returns. Includes `commitSchemaVersion` and `setActiveVersion` so the\n * top-level backend wrappers can call them on a fresh tx-scoped\n * operation backend (created inside the dialect-specific\n * write-locking transaction). These methods are deliberately NOT on\n * the public `TransactionBackend` type — see the comment there.\n */\nexport type CommonOperationBackend = Pick<\n  TransactionBackend,\n  | \"checkUnique\"\n  | \"checkUniqueBatch\"\n  | \"clearGraph\"\n  | \"compareAndSetNode\"\n  | \"countEdgesByKind\"\n  | \"countEdgesFrom\"\n  | \"countNodesByKind\"\n  | \"deleteEdge\"\n  | \"deleteEdgesBatch\"\n  | \"deleteNode\"\n  | \"deleteUnique\"\n  | \"edgeExistsBetween\"\n  | \"executeTemporaryStatement\"\n  | \"findEdgesByKind\"\n  | \"findEdgesByEndpointSet\"\n  | \"findEdgesByHeterogeneousEndpointSet\"\n  | \"findEdgesConnectedTo\"\n  | \"findNodesByKind\"\n  | \"getActiveSchema\"\n  | \"getEdge\"\n  | \"getEdges\"\n  | \"getNode\"\n  | \"getNodes\"\n  | \"getSchemaVersion\"\n  | \"hardDeleteEdge\"\n  | \"hardDeleteEdgesBatch\"\n  | \"hardDeleteNode\"\n  | \"claimEdgeCardinality\"\n  | \"claimEdgeCardinalityGuarded\"\n  | \"claimEdgeCardinalityBatch\"\n  | \"hardDeleteUniquesByConcreteKind\"\n  | \"hardDeleteUniquesByNodeIds\"\n  | \"insertEdge\"\n  | \"commands\"\n  | \"insertEdgeNoReturn\"\n  | \"insertEdgesBatch\"\n  | \"insertEdgesBatchReturning\"\n  | \"insertNode\"\n  | \"insertNodeIfAbsent\"\n  | \"insertNodeIfAbsentWithSchemaFence\"\n  | \"insertNodeWithSchemaFence\"\n  | \"lockSchemaVersionAndGraphWrite\"\n  | \"insertNodeNoReturn\"\n  | \"insertNodesBatch\"\n  | \"insertNodesBatchReturning\"\n  | \"insertUnique\"\n  | \"insertUniqueBatch\"\n  | \"purgeEdgeClaims\"\n  | \"updateEdge\"\n  | \"updateNode\"\n  | \"updateResolvedNodesBatch\"\n  | \"updateNodeSet\"\n> &\n  Readonly<{\n    executeAtomicNodeBatch?: AtomicNodeBatchExecutor;\n    executeAtomicNodeReplacementBatch?: AtomicNodeReplacementBatchExecutor;\n    executeAtomicNodeDeleteBatch?: AtomicNodeDeleteBatchExecutor;\n    executeAtomicNodeResolvedUpdateBatch?: AtomicNodeResolvedUpdateBatchExecutor;\n    executeAtomicNodeResolvedMutationSet?: AtomicNodeResolvedMutationSetExecutor;\n    executeAtomicEdgeBatch?: AtomicEdgeBatchExecutor;\n    executeAtomicEdgeDeleteBatch?: AtomicEdgeDeleteBatchExecutor;\n    executeAtomicEdgeResolvedUpdateBatch?: AtomicEdgeResolvedUpdateBatchExecutor;\n    executeAtomicEdgeMutationProgram?: AtomicEdgeMutationProgramExecutor;\n    /**\n     * The read-only fence audit. Not a `TransactionBackend` member — it is a\n     * diagnostic the store runs at the top-level backend, and nothing inside a\n     * write transaction reads it — so it is declared here rather than picked.\n     */\n    readConstraintFenceViolations: NonNullable<\n      GraphBackend[\"readConstraintFenceViolations\"]\n    >;\n    executeStatement: NonNullable<TransactionBackend[\"executeStatement\"]>;\n    commitSchemaVersion: (\n      params: CommitSchemaVersionParams,\n    ) => Promise<SchemaVersionRow>;\n    setActiveVersion: (params: SetActiveVersionParams) => Promise<void>;\n    executeSchemaDdl: (ddl: string) => Promise<void>;\n    tableExists: (tableName: string) => Promise<boolean>;\n  }> &\n  DurableEdgeBatchMembers;\n\n/**\n * The full internal shape the dialect operation-backend factories\n * build: a {@link TransactionBackend} that also exposes the schema-write\n * methods ({@link CommonOperationBackend}). Internal callers holding the\n * dialect's write-lock (`runSchemaWriteTransaction`) use it directly;\n * the public `transaction()` / `adoptTransaction()` boundary narrows it\n * to `TransactionBackend` so user callbacks can't reach\n * `commitSchemaVersion` / `setActiveVersion` and bypass the lock.\n */\nexport type InternalOperationBackend = TransactionBackend &\n  CommonOperationBackend &\n  Readonly<{\n    deleteSchemaVectorSlotContribution: (slot: VectorSlot) => Promise<void>;\n  }>;\n\nconst DRIZZLE_DIALECT_LABELS = {\n  postgres: \"Postgres\",\n  sqlite: \"SQLite\",\n} as const satisfies Record<SqlDialect, string>;\n\n/**\n * Assert an externally-supplied transaction handle is the expected\n * Drizzle dialect, narrowing it for `adoptTransaction`. A wrong-dialect\n * handle would otherwise surface as an opaque driver error mid-\n * transaction; this fails it loudly at the boundary instead.\n */\nexport function assertAdoptedDialect<T>(\n  externalTx: unknown,\n  brand: Parameters<typeof is>[1],\n  backend: SqlDialect,\n): asserts externalTx is T {\n  if (is(externalTx, brand)) return;\n  const label = DRIZZLE_DIALECT_LABELS[backend];\n  throw new ConfigurationError(\n    `adoptTransaction received a handle that is not a ${label} Drizzle ` +\n      `transaction. Pass the \\`tx\\` from a ${label} ` +\n      `\\`db.transaction(...)\\` opened on this backend's connection.`,\n    { backend, capability: \"adoptTransaction\" },\n  );\n}\n\ntype OperationBackendExecution = Readonly<{\n  compile: (query: ExecutableSql) => CompiledSqlQuery;\n  execAll: <TRow>(query: ExecutableSql) => Promise<readonly TRow[]>;\n  execGet: <TRow>(query: ExecutableSql) => Promise<TRow | undefined>;\n  execRun: (query: ExecutableSql) => Promise<void>;\n}>;\n\nexport type OperationBackendBatchConfig = Readonly<{\n  checkUniqueBatchChunkSize: number;\n  edgeInsertBatchSize: number;\n  edgeSchemaFencedInsertBatchSize: number;\n  findEdgesEndpointChunkSize: number;\n  getEdgesChunkSize: number;\n  getNodesChunkSize: number;\n  nodeInsertBatchSize: number;\n  nodeSchemaFencedInsertBatchSize: number;\n  uniqueDeleteChunkSize: number;\n  uniqueInsertBatchSize: number;\n}>;\n\nexport type OperationBackendRowMappers = Readonly<{\n  toEdgeRow: (row: Record<string, unknown>) => EdgeRow;\n  toNodeRow: (row: Record<string, unknown>) => NodeRow;\n  toSchemaVersionRow: (row: Record<string, unknown>) => SchemaVersionRow;\n  toUniqueRow: (row: Record<string, unknown>) => UniqueRow;\n}>;\n\ntype CreateCommonOperationBackendOptions = Readonly<{\n  atomicSqlProgramExecutor?: AtomicSqlProgramExecutor;\n  batchConfig: OperationBackendBatchConfig;\n  commandSession: GraphCommandSession;\n  execution: OperationBackendExecution;\n  maxBindParameters: number;\n  nowIso?: (() => string) | undefined;\n  operationStrategy: CommonOperationStrategy;\n  rowMappers: OperationBackendRowMappers;\n  /** Present only on bundled dialect backends that own the fused SQL contract. */\n  schemaFenceLockClause?: SQL | undefined;\n  /** Present only for a bundled PostgreSQL transaction-scoped backend. */\n  schemaGraphWriteLockNamespace?: string | undefined;\n  /**\n   * The resolved fence target's own lock-statement spelling — present\n   * whenever the profile declares one, root or transaction-scoped alike.\n   * `lockSchemaVersionAndGraphWrite` builds only when this,\n   * `schemaGraphWriteLockNamespace`, and `operationStrategy\n   * .buildLockSchemaVersionAndGraphWrite` are ALL present, and passes this\n   * spelling through to the strategy hook rather than letting it default to\n   * the bundled one: a derived profile's fused write must lock the same key\n   * its portable lock sites do.\n   */\n  fenceSql?: FenceSql | undefined;\n  /** Present only for a bundled PostgreSQL transaction-scoped backend. */\n  edgeCardinalityInsertFusion?: boolean | undefined;\n  /**\n   * Whether a convergent edge create's dynamic (non-durable) match may\n   * inspect JSON match fields. Present only for a bundled PostgreSQL\n   * backend; absent (falsy) leaves dynamic convergence unsupported so the\n   * caller falls back to the portable check-then-write path.\n   */\n  dynamicEdgeConvergence?: boolean | undefined;\n  /** Present only for bundled projection-aware operation backends. */\n  nodeProjectionInsertFusion?: boolean | undefined;\n  /** Claim plans require a caller-owned transaction to roll back refusals. */\n  nodeClaimInsertFusion?: boolean | undefined;\n  /** Read-only prerequisite gate run before a fused projection statement. */\n  beforeNodeProjectionInsert?:\n    | ((params: InsertNodeParams, plan: ManagedNodeCreatePlan) => Promise<void>)\n    | undefined;\n  /** Error-path projection storage classifier; must rethrow or return never. */\n  refuseNodeProjectionError?:\n    | ((\n        params: InsertNodeParams,\n        plan: ManagedNodeCreatePlan,\n        error: unknown,\n      ) => Promise<never>)\n    | undefined;\n  /** Local signature evidence compiled into an atomic projection program. */\n  resolveAtomicNodeProjectionEvidence?:\n    | ((\n        creates: readonly AtomicNodePostimageEntry[],\n        updates: readonly AtomicNodeResolvedUpdateEntry[],\n      ) => Promise<readonly AtomicContributionEvidence[]>)\n    | undefined;\n  /** Failure-only durable marker diagnosis after an atomic refusal rolls back. */\n  diagnoseAtomicNodeProjectionEvidence?:\n    | ((\n        creates: readonly AtomicNodePostimageEntry[],\n        updates: readonly AtomicNodeResolvedUpdateEntry[],\n      ) => Promise<void>)\n    | undefined;\n  /** Maps physical projection failures without weakening row classifications. */\n  refuseAtomicNodeProjectionError?:\n    | ((\n        creates: readonly AtomicNodePostimageEntry[],\n        updates: readonly AtomicNodeResolvedUpdateEntry[],\n        error: unknown,\n      ) => Promise<never>)\n    | undefined;\n  tableExistenceCache?: TableExistenceCacheOptions | undefined;\n}>;\n\n/**\n * The entity refs a duplicate-key classification reports back. Nodes carry a\n * kind of their own; an edge's `kind` is its edge kind, which the insert params\n * also carry.\n */\ntype AttemptedInsert = Readonly<{ kind: string; id: string }>;\ntype AttemptedEdgeMatchIdentity = Readonly<{\n  id: string;\n  identityName: string;\n  kind: string;\n}>;\n\ntype AtomicEdgeConvergenceLowerer = Readonly<{\n  maxEntries: number;\n}> &\n  ((\n    input: Omit<AtomicEdgeConvergenceInput, \"kind\">,\n  ) => Promise<readonly AtomicEdgeConvergenceResult[]>);\n\ntype AtomicEdgeResolvedMutationSetLowerer = Readonly<{\n  maxEntries: number;\n}> &\n  ((\n    input: Omit<AtomicEdgeResolvedMutationSetInput, \"kind\">,\n  ) => Promise<AtomicEdgeResolvedMutationSetResult>);\n\nfunction duplicateKeyOperationError(\n  entity: \"node\" | \"edge\",\n  attempted: readonly AttemptedInsert[],\n  cause: unknown,\n): DatabaseOperationError {\n  return new DatabaseOperationError(\n    `Insert ${entity} failed: a row with this identity already exists`,\n    {\n      operation: \"insert\",\n      entity,\n      reason: \"duplicate_key\",\n      attempted,\n    },\n    { cause },\n  );\n}\n\n/**\n * Runs an insert and converts a PRIMARY KEY duplicate-key refusal into a\n * classified {@link DatabaseOperationError} carrying the rows it attempted.\n *\n * The translation stops here rather than reaching for the store's \"already\n * exists\" error because that is a store-level judgement: the backend's job is to\n * say *what the engine refused and why* in terms callers can branch on, instead\n * of letting a `DrizzleQueryError` whose `.message` is the raw INSERT text\n * escape as the operation's outcome (issue #410). The create paths translate it\n * onward; every other caller sees a system error, exactly as before.\n *\n * Any other failure — including a 23505 from a declared `unique: true` index on\n * the same relation — propagates untouched.\n */\nasync function withDuplicateKeyClassification<T>(\n  run: () => Promise<T>,\n  context: Readonly<{\n    entity: \"node\" | \"edge\";\n    relation: PrimaryKeyRelation;\n    attempted: readonly AttemptedInsert[];\n    matchIdentities?: readonly AttemptedEdgeMatchIdentity[] | undefined;\n  }>,\n): Promise<T> {\n  try {\n    return await run();\n  } catch (error) {\n    if (isDuplicatePrimaryKeyError(error, context.relation)) {\n      throw duplicateKeyOperationError(\n        context.entity,\n        context.attempted,\n        error,\n      );\n    }\n    if (\n      context.matchIdentities !== undefined &&\n      isDuplicateUniqueIndexError(error, {\n        table: context.relation.table,\n        indexName: edgeMatchIdentityUniqueIndexName(context.relation.table),\n        sqliteColumns: [\n          \"graph_id\",\n          \"kind\",\n          \"match_identity_name\",\n          \"match_identity_key\",\n        ],\n      })\n    ) {\n      throw new EdgeMatchIdentityConflictError(\n        { attempted: context.matchIdentities },\n        { cause: error },\n      );\n    }\n    throw error;\n  }\n}\n\nasync function withAtomicEdgeEndpointRefusalClassification<T>(\n  run: () => Promise<T>,\n  constraint: Readonly<{ table: string; column: string }>,\n): Promise<T> {\n  try {\n    return await run();\n  } catch (error) {\n    if (isNotNullColumnViolation(error, constraint)) {\n      throw new AtomicEdgeBatchEndpointRefusalError(error);\n    }\n    throw error;\n  }\n}\n\nasync function withAtomicEdgeCardinalityRefusalClassification<T>(\n  run: () => Promise<T>,\n  constraint: Readonly<{ table: string; column: string }>,\n): Promise<T> {\n  try {\n    return await run();\n  } catch (error) {\n    if (isNotNullColumnViolation(error, constraint)) {\n      throw new AtomicEdgeBatchCardinalityRefusalError(error);\n    }\n    throw error;\n  }\n}\n\nasync function withAtomicEdgeDeleteIdentityRefusalClassification<T>(\n  run: () => Promise<T>,\n  constraint: Readonly<{ table: string; column: string }>,\n): Promise<T> {\n  try {\n    return await run();\n  } catch (error) {\n    if (isNotNullColumnViolation(error, constraint)) {\n      throw new AtomicEdgeDeleteIdentityRefusalError(error);\n    }\n    throw error;\n  }\n}\n\nasync function withAtomicNodeDeleteRestrictionClassification<T>(\n  run: () => Promise<T>,\n  constraint: Readonly<{ table: string; column: string }>,\n): Promise<T> {\n  try {\n    return await run();\n  } catch (error) {\n    if (isNotNullColumnViolation(error, constraint)) {\n      throw new AtomicNodeDeleteRestrictedRefusalError(error);\n    }\n    throw error;\n  }\n}\n\ntype AtomicDeleteSlotResult =\n  | Readonly<{ kind: \"affected\"; count: number }>\n  | Readonly<{ kind: \"claim-release\" }>\n  | Readonly<{ kind: \"fence\"; matched: boolean }>;\n\nfunction assembleAtomicDeleteBatchResult(\n  results: readonly AtomicDeleteSlotResult[],\n): AtomicDeleteBatchResult {\n  let fenceResult: Readonly<{ kind: \"fence\"; matched: boolean }> | undefined;\n  let affectedCount = 0;\n  for (const result of results) {\n    if (result.kind === \"affected\") {\n      affectedCount += result.count;\n      continue;\n    }\n    if (result.kind === \"claim-release\") continue;\n    if (fenceResult !== undefined) {\n      throw new CompilerInvariantError(\n        \"Atomic delete program returned more than one schema-fence result.\",\n      );\n    }\n    fenceResult = result;\n  }\n  if (fenceResult === undefined) {\n    throw new CompilerInvariantError(\n      \"Atomic delete program omitted its schema-fence result.\",\n    );\n  }\n  return {\n    affectedCount,\n    schemaFenceMatched: fenceResult.matched,\n  };\n}\n\ntype AtomicResolvedMutationSlot<TRow> =\n  | Readonly<{ kind: \"created\"; rows: readonly TRow[] }>\n  | Readonly<{ kind: \"updated\"; rows: readonly TRow[] }>\n  | Readonly<{ kind: \"postimages\"; rows: readonly TRow[] }>\n  | Readonly<{ kind: \"projection\" }>\n  | Readonly<{ kind: \"assertion\" }>;\n\n// A native submission is one transport request and one rollback boundary, so\n// per-statement bind safety is necessary but not sufficient. Bound the number\n// of mutation statements as well: a mixed set can spend one partial chunk on\n// each side, hence K - 1 full chunks plus one member is the largest total that\n// can never exceed K mutation statements. The absolute member ceiling keeps a\n// high-bind PostgreSQL backend from turning the same contract into an enormous\n// HTTP request merely because one SQL statement can carry many parameters.\nconst ATOMIC_MUTATION_MAX_MUTATION_STATEMENTS = 32;\nconst ATOMIC_RESOLVED_MUTATION_MAX_MEMBERS = 512;\nconst ATOMIC_RESOLVED_MUTATION_FIXED_PARAM_COUNT = 12;\nconst ATOMIC_NODE_RESOLVED_MUTATION_PARAMS_PER_ENTRY = 5;\nconst ATOMIC_EDGE_RESOLVED_MUTATION_PARAMS_PER_ENTRY = 14;\n\nfunction atomicResolvedMutationStatementChunkSize(\n  maxBindParameters: number,\n  parametersPerEntry: number,\n): number {\n  return Math.max(\n    1,\n    Math.floor(\n      (maxBindParameters - ATOMIC_RESOLVED_MUTATION_FIXED_PARAM_COUNT) /\n        parametersPerEntry,\n    ),\n  );\n}\n\nfunction atomicResolvedMutationSubmissionMaxEntries(\n  statementChunkSize: number,\n): number {\n  return Math.min(\n    ATOMIC_RESOLVED_MUTATION_MAX_MEMBERS,\n    statementChunkSize * (ATOMIC_MUTATION_MAX_MUTATION_STATEMENTS - 1) + 1,\n  );\n}\n\nfunction pairAtomicMutationChunksWithIds<T>(\n  chunks: readonly (readonly T[])[],\n  ids: readonly string[],\n): readonly Readonly<{ entries: readonly T[]; ids: readonly string[] }>[] {\n  let offset = 0;\n  return chunks.map((entries) => {\n    const chunkIds = ids.slice(offset, offset + entries.length);\n    offset += entries.length;\n    return { entries, ids: chunkIds };\n  });\n}\n\nfunction assembleAtomicResolvedMutationSet<TRow>(\n  entity: \"node\" | \"edge\",\n  results: readonly AtomicResolvedMutationSlot<TRow>[],\n  createIds: readonly string[],\n  updateIds: readonly string[],\n  rowId: (row: TRow) => string,\n  terminalCount: number,\n): Readonly<{ created: readonly TRow[]; updated: readonly TRow[] }> {\n  const assertionCount = results.filter(\n    (result) => result.kind === \"assertion\",\n  ).length;\n  const postimageSlots = results.filter(\n    (result) => result.kind === \"postimages\",\n  );\n  if (\n    assertionCount !== terminalCount ||\n    postimageSlots.length !== terminalCount\n  ) {\n    throw new CompilerInvariantError(\n      `Atomic ${entity} mutation set returned an invalid terminal result.`,\n      { assertions: assertionCount, postimages: postimageSlots.length },\n    );\n  }\n\n  const postimages = postimageSlots.flatMap((slot) => slot.rows);\n  if (postimages.length !== createIds.length + updateIds.length) {\n    const mutationRows = results.flatMap((result) =>\n      result.kind === \"created\" || result.kind === \"updated\" ? result.rows : [],\n    );\n    if (mutationRows.length > 0) {\n      throw new CompilerInvariantError(\n        `Atomic ${entity} mutation assertion allowed an incomplete postimage set.`,\n      );\n    }\n    return { created: [], updated: [] };\n  }\n\n  const expectedIds = new Set([...createIds, ...updateIds]);\n  const byId = new Map<string, TRow>();\n  for (const row of postimages) {\n    const id = rowId(row);\n    if (!expectedIds.has(id)) {\n      throw new CompilerInvariantError(\n        `Atomic ${entity} mutation set returned a postimage outside its input set.`,\n        { id },\n      );\n    }\n    if (byId.has(id)) {\n      throw new CompilerInvariantError(\n        `Atomic ${entity} mutation set returned a duplicate postimage.`,\n        { id },\n      );\n    }\n    byId.set(id, row);\n  }\n  return {\n    created: createIds.map((id) => requireDefined(byId.get(id))),\n    updated: updateIds.map((id) => requireDefined(byId.get(id))),\n  };\n}\n\nfunction buildAtomicResolvedMutationSetProgram<TRow, TCreate, TUpdate>(\n  input: Readonly<{\n    entity: \"node\" | \"edge\";\n    createChunks: readonly (readonly TCreate[])[];\n    updateChunks: readonly (readonly TUpdate[])[];\n    createIds: readonly string[];\n    updateIds: readonly string[];\n    compileCreate: (chunk: readonly TCreate[]) => CompiledAtomicSqlStatement;\n    compileUpdate: (updates: readonly TUpdate[]) => CompiledAtomicSqlStatement;\n    compiledSidecars?: readonly CompiledAtomicSqlStatement[];\n    compileAssertion: (\n      creates: readonly TCreate[],\n      updates: readonly TUpdate[],\n    ) => CompiledAtomicSqlStatement;\n    compilePostimages: (ids: readonly string[]) => CompiledAtomicSqlStatement;\n    decodeRow: (row: Readonly<Record<string, unknown>>) => TRow;\n    rowId: (row: TRow) => string;\n  }>,\n): AtomicSqlProgram<\n  AtomicResolvedMutationSlot<TRow>,\n  Readonly<{ created: readonly TRow[]; updated: readonly TRow[] }>\n> {\n  const createSlots = input.createChunks.map((chunk) => ({\n    statement: input.compileCreate(chunk),\n    cardinality: \"many\" as const,\n    decode: (rows: readonly Readonly<Record<string, unknown>>[]) => ({\n      kind: \"created\" as const,\n      rows: rows.map((row) => input.decodeRow(row)),\n    }),\n  }));\n  const updateSlots = input.updateChunks.map((updates) => ({\n    statement: input.compileUpdate(updates),\n    cardinality: \"many\" as const,\n    decode: (rows: readonly Readonly<Record<string, unknown>>[]) => ({\n      kind: \"updated\" as const,\n      rows: rows.map((row) => input.decodeRow(row)),\n    }),\n  }));\n  const terminals = [\n    ...pairAtomicMutationChunksWithIds(input.createChunks, input.createIds).map(\n      (chunk) => ({\n        creates: chunk.entries,\n        updates: [] as readonly TUpdate[],\n        ids: chunk.ids,\n      }),\n    ),\n    ...pairAtomicMutationChunksWithIds(input.updateChunks, input.updateIds).map(\n      (chunk) => ({\n        creates: [] as readonly TCreate[],\n        updates: chunk.entries,\n        ids: chunk.ids,\n      }),\n    ),\n  ];\n  return {\n    slots: [\n      ...createSlots,\n      ...updateSlots,\n      ...(input.compiledSidecars ?? []).map((statement) => ({\n        statement,\n        cardinality: \"none\" as const,\n        decode: () => ({ kind: \"projection\" as const }),\n      })),\n      ...terminals.map((terminal) => ({\n        statement: input.compileAssertion(terminal.creates, terminal.updates),\n        cardinality: \"none\" as const,\n        decode: () => ({ kind: \"assertion\" as const }),\n      })),\n      ...terminals.map((terminal) => ({\n        statement: input.compilePostimages(terminal.ids),\n        cardinality: \"many\" as const,\n        decode: (rows: readonly Readonly<Record<string, unknown>>[]) => ({\n          kind: \"postimages\" as const,\n          rows: rows.map((row) => input.decodeRow(row)),\n        }),\n      })),\n    ],\n    assemble: (results) =>\n      assembleAtomicResolvedMutationSet(\n        input.entity,\n        results,\n        input.createIds,\n        input.updateIds,\n        input.rowId,\n        terminals.length,\n      ),\n  };\n}\n\ntype AtomicNodeProjectionSlot = Readonly<{ kind: \"projection\" }>;\n\nfunction compileAtomicNodeProjectionSlots(\n  operationStrategy: CommonOperationStrategy,\n  execution: OperationBackendExecution,\n  creates: readonly AtomicNodePostimageEntry[],\n  updates: readonly AtomicNodeResolvedUpdateEntry[],\n  timestamp: string,\n  maxBindParameters: number,\n): readonly Readonly<{\n  statement: CompiledAtomicSqlStatement;\n  cardinality: \"none\";\n  decode: () => AtomicNodeProjectionSlot;\n}>[] {\n  if (\n    !creates.some((entry) => (entry.projections?.length ?? 0) > 0) &&\n    !updates.some((entry) => (entry.projections?.length ?? 0) > 0)\n  ) {\n    return [];\n  }\n  const chunkSize = Math.max(\n    1,\n    Math.floor(\n      (maxBindParameters - ATOMIC_NODE_PROJECTION_FIXED_PARAM_COUNT) /\n        ATOMIC_NODE_PROJECTION_MAX_PARAM_COUNT_PER_ENTRY,\n    ),\n  );\n  const statements = operationStrategy.buildAtomicNodeProjectionStatements(\n    creates,\n    updates,\n    timestamp,\n    chunkSize,\n  );\n  if (statements === undefined) {\n    throw new CompilerInvariantError(\n      \"An eligible atomic node projection family has no dialect lowering.\",\n    );\n  }\n  return statements.map((statement) => {\n    const compiled = execution.compile(statement);\n    if (compiled.params.length > maxBindParameters) {\n      throw new CompilerInvariantError(\n        \"An atomic node projection statement exceeded the backend bind budget.\",\n        {\n          actual: compiled.params.length,\n          maximum: maxBindParameters,\n        },\n      );\n    }\n    return {\n      statement: compiled,\n      cardinality: \"none\" as const,\n      decode: () => ({ kind: \"projection\" as const }),\n    };\n  });\n}\n\nasync function compileAtomicNodeProjectionEvidenceSlots(\n  operationStrategy: CommonOperationStrategy,\n  execution: OperationBackendExecution,\n  creates: readonly AtomicNodePostimageEntry[],\n  updates: readonly AtomicNodeResolvedUpdateEntry[],\n  timestamp: string,\n  maxBindParameters: number,\n  resolveEvidence:\n    | ((\n        creates: readonly AtomicNodePostimageEntry[],\n        updates: readonly AtomicNodeResolvedUpdateEntry[],\n      ) => Promise<readonly AtomicContributionEvidence[]>)\n    | undefined,\n): Promise<\n  readonly Readonly<{\n    statement: CompiledAtomicSqlStatement;\n    cardinality: \"none\";\n    decode: () => AtomicNodeProjectionSlot;\n  }>[]\n> {\n  if (resolveEvidence === undefined) return [];\n  const evidence = await resolveEvidence(creates, updates);\n  if (evidence.length === 0) return [];\n  const availableBinds =\n    maxBindParameters - ATOMIC_CONTRIBUTION_ASSERTION_FIXED_BIND_COUNT;\n  const chunkSize = Math.floor(\n    availableBinds / ATOMIC_CONTRIBUTION_EVIDENCE_BIND_COUNT,\n  );\n  if (chunkSize < 1) {\n    throw new CompilerInvariantError(\n      \"Atomic contribution evidence cannot fit the backend bind budget.\",\n      { maximum: maxBindParameters },\n    );\n  }\n  return chunkArray(evidence, chunkSize).map((evidenceChunk) => {\n    const compiled = execution.compile(\n      operationStrategy.buildAssertAtomicNodeProjectionEvidence(\n        timestamp,\n        evidenceChunk,\n      ),\n    );\n    if (compiled.params.length > maxBindParameters) {\n      throw new CompilerInvariantError(\n        \"Atomic contribution evidence exceeded the backend bind budget.\",\n        { actual: compiled.params.length, maximum: maxBindParameters },\n      );\n    }\n    return {\n      statement: compiled,\n      cardinality: \"none\" as const,\n      decode: () => ({ kind: \"projection\" as const }),\n    };\n  });\n}\n\nfunction isAtomicMutationPostimageRefusal(\n  error: unknown,\n  operationStrategy: CommonOperationStrategy,\n  entity: \"node\" | \"edge\",\n  hasPostimageAssertion: boolean,\n): boolean {\n  const notNullConstraint =\n    entity === \"node\" ?\n      operationStrategy.atomicNodeRefusalConstraints.mutationPostimage\n    : operationStrategy.atomicEdgeRefusalConstraints.mutationPostimage;\n  const primaryKeyConstraint =\n    entity === \"node\" ?\n      operationStrategy.primaryKeyConstraints.nodes\n    : operationStrategy.primaryKeyConstraints.edges;\n  return (\n    isNotNullColumnViolation(error, notNullConstraint) ||\n    (hasPostimageAssertion &&\n      isDuplicatePrimaryKeyError(error, primaryKeyConstraint)) ||\n    (hasPostimageAssertion &&\n      error instanceof DatabaseOperationError &&\n      error.details.reason === \"duplicate_key\" &&\n      isDuplicatePrimaryKeyError(error.cause, primaryKeyConstraint))\n  );\n}\n\nasync function withAtomicEdgeDurableRefusalClassification<T>(\n  run: () => Promise<T>,\n  relation: PrimaryKeyRelation,\n  constraint: Readonly<{ table: string; column: string }>,\n  attempted: readonly AttemptedEdgeMatchIdentity[] | undefined,\n): Promise<T> {\n  try {\n    return await run();\n  } catch (error) {\n    if (\n      attempted !== undefined &&\n      isNotNullColumnViolation(error, constraint)\n    ) {\n      throw new EdgeMatchIdentityConflictError({ attempted }, { cause: error });\n    }\n    throw error;\n  }\n}\n\n/**\n * Translate a missing edge match-identity column or arbiter for every edge\n * insert route. A plain edge write still targets these columns because the\n * physical edge row has a stable shape; it therefore needs the same typed\n * migration guidance as a durable write when an older database is used.\n */\nasync function withEdgeInsertClassification<T>(\n  run: () => Promise<T>,\n  params: readonly InsertEdgeParams[],\n  durableIdentityName?: string,\n): Promise<T> {\n  try {\n    return await run();\n  } catch (error) {\n    throwEdgeInsertStorageUnavailable(error, params, durableIdentityName);\n  }\n}\n\nfunction assertCompleteAtomicChunks(\n  actualCounts: readonly number[],\n  expectedChunks: readonly (readonly unknown[])[],\n  entity: \"node\" | \"edge\",\n): void {\n  const mismatchedChunk = expectedChunks.findIndex(\n    (expectedChunk, index) => actualCounts[index] !== expectedChunk.length,\n  );\n  if (mismatchedChunk === -1 && actualCounts.length === expectedChunks.length) {\n    return;\n  }\n  const slot = mismatchedChunk === -1 ? expectedChunks.length : mismatchedChunk;\n  throw new CompilerInvariantError(\n    `Atomic ${entity} batch returned a partial chunk result.`,\n    {\n      slot,\n      expected: expectedChunks[slot]?.length,\n      actual: actualCounts[slot],\n    },\n  );\n}\n\nfunction decodeNoEdgeRows(): readonly EdgeRow[] {\n  return [];\n}\n\nasync function withAtomicNodeBatchClassifications<T>(\n  run: () => Promise<T>,\n  entries: readonly AtomicNodeBatchEntry[],\n  operationStrategy: CommonOperationStrategy,\n): Promise<T> {\n  const attempted = attemptedInserts(entries.map((entry) => entry.params));\n  try {\n    return await withDuplicateKeyClassification(run, {\n      entity: \"node\",\n      relation: operationStrategy.primaryKeyConstraints.nodes,\n      attempted,\n    });\n  } catch (error) {\n    if (\n      entries.some((entry) => entry.idSource === \"caller\") &&\n      isNotNullColumnViolation(\n        error,\n        operationStrategy.atomicNodeRefusalConstraints.liveIdentity,\n      )\n    ) {\n      throw duplicateKeyOperationError(\"node\", attempted, error);\n    }\n    throw error;\n  }\n}\n\nasync function executeClassifiedAtomicEdgeBatch<TSlot, TResult>(\n  atomicExecutor: AtomicSqlProgramExecutor,\n  program: AtomicSqlProgram<TSlot, TResult>,\n  relation: PrimaryKeyRelation,\n  refusalConstraints: CommonOperationStrategy[\"atomicEdgeRefusalConstraints\"],\n  params: readonly InsertEdgeParams[],\n  claims: readonly ClaimEdgeCardinalityParams[],\n): Promise<TResult> {\n  const matchIdentities = attemptedEdgeMatchIdentities(params);\n  try {\n    // Classifiers are intentionally nested from the broad edge-insert wrapper\n    // to the narrow sentinel refusals. Each inner layer recognizes only its\n    // own storage signal; the outer layers preserve the public error contract.\n    return await withEdgeInsertClassification(\n      () =>\n        withDuplicateKeyClassification(\n          () =>\n            withAtomicEdgeEndpointRefusalClassification(\n              () =>\n                withAtomicEdgeCardinalityRefusalClassification(\n                  () =>\n                    withAtomicEdgeDurableRefusalClassification(\n                      () => atomicExecutor.execute(program),\n                      relation,\n                      refusalConstraints.durableIdentity,\n                      matchIdentities,\n                    ),\n                  refusalConstraints.cardinality,\n                ),\n              refusalConstraints.endpoint,\n            ),\n          {\n            entity: \"edge\",\n            relation,\n            attempted: attemptedInserts(params),\n            matchIdentities,\n          },\n        ),\n      params,\n    );\n  } catch (error) {\n    if (claims.length > 0 && isMissingTableError(error)) {\n      throw edgeClaimRelationMissing(requireDefined(params[0]).graphId, error);\n    }\n    throw error;\n  }\n}\n\nfunction attemptedEdgeMatchIdentities(\n  params: readonly InsertEdgeParams[],\n): readonly AttemptedEdgeMatchIdentity[] | undefined {\n  const attempted = params.flatMap((item) =>\n    item.matchIdentity === undefined ?\n      []\n    : [\n        {\n          id: item.id,\n          identityName: item.matchIdentity.name,\n          kind: item.kind,\n        },\n      ],\n  );\n  return attempted.length === 0 ? undefined : attempted;\n}\n\nfunction throwDurableIdentityStorageUnavailable(\n  error: unknown,\n  params: InsertEdgeParams,\n  identityName: string,\n): never {\n  if (!isEdgeMatchIdentityStorageUnavailableError(error)) throw error;\n  throw new ConfigurationError(\n    \"Backend declares durable edge match identity support, but its storage has not been provisioned.\",\n    {\n      code: \"EDGE_MATCH_IDENTITY_STORAGE_UNAVAILABLE\",\n      capability: \"durableEdgeMatchIdentity\",\n      graphId: params.graphId,\n      edgeKind: params.kind,\n      identityName,\n    },\n    {\n      suggestion:\n        \"Initialize or migrate the graph through the schema manager before using a durable identity store.\",\n      cause: error,\n    },\n  );\n}\n\nfunction throwEdgeInsertStorageUnavailable(\n  error: unknown,\n  params: readonly InsertEdgeParams[],\n  durableIdentityName?: string,\n): never {\n  if (!isEdgeMatchIdentityStorageUnavailableError(error)) throw error;\n\n  const firstParams = requireDefined(params[0]);\n  const durableParams = params.find((item) => item.matchIdentity !== undefined);\n  const identityName =\n    durableIdentityName ?? durableParams?.matchIdentity?.name;\n  if (identityName !== undefined) {\n    throwDurableIdentityStorageUnavailable(\n      error,\n      durableParams ?? firstParams,\n      identityName,\n    );\n  }\n\n  throw new ConfigurationError(\n    \"Edge match identity storage is not provisioned for this backend.\",\n    {\n      code: \"EDGE_MATCH_IDENTITY_STORAGE_UNAVAILABLE\",\n      graphId: firstParams.graphId,\n      edgeKind: firstParams.kind,\n    },\n    {\n      suggestion:\n        \"Initialize or migrate the graph through the schema manager before inserting edges.\",\n      cause: error,\n    },\n  );\n}\n\n/**\n * The entity refs of an insert's rows, copied out of the insert params so the\n * error carries identity alone and never the props alongside it.\n */\nfunction attemptedInserts(\n  params: readonly AttemptedInsert[],\n): readonly AttemptedInsert[] {\n  return params.map((item) => ({ kind: item.kind, id: item.id }));\n}\n\nfunction verifyExpectedActiveVersion(\n  graphId: string,\n  expected: CommitSchemaVersionParams[\"expected\"],\n  actualActiveVersion: number,\n): void {\n  const expectedVersion = expected.kind === \"active\" ? expected.version : 0;\n  assertActiveSchemaVersion(graphId, expectedVersion, actualActiveVersion);\n}\n\nexport function assertActiveSchemaVersion(\n  graphId: string,\n  expectedVersion: number,\n  actualActiveVersion: number,\n): void {\n  if (actualActiveVersion !== expectedVersion) {\n    throw new StaleVersionError({\n      graphId,\n      expected: expectedVersion,\n      actual: actualActiveVersion,\n    });\n  }\n}\n\n/**\n * Runs the populated-kind guard and schema commit on one transaction-scoped\n * backend. The dialect wrapper is responsible for fencing ordinary entity\n * writes before calling this helper.\n */\nexport async function commitSchemaVersionIfKindsEmpty(\n  backend: CommonOperationBackend,\n  params: CommitSchemaVersionParams,\n  probes: readonly SchemaKindEmptinessProbe[],\n): Promise<CommitSchemaVersionIfKindsEmptyResult> {\n  const [existing, active] = await Promise.all([\n    backend.getSchemaVersion(params.graphId, params.version),\n    backend.getActiveSchema(params.graphId),\n  ]);\n\n  // Preserve commitSchemaVersion's conflict and idempotency precedence. A\n  // retry of an already-active identical version is success regardless of\n  // current row counts; a conflicting same-version document remains a\n  // content conflict rather than being masked as a populated-kind refusal.\n  if (\n    existing !== undefined &&\n    (existing.is_active || existing.schema_hash !== params.schemaHash)\n  ) {\n    return {\n      status: \"committed\",\n      row: await backend.commitSchemaVersion(params),\n    };\n  }\n\n  verifyExpectedActiveVersion(\n    params.graphId,\n    params.expected,\n    active?.version ?? 0,\n  );\n\n  const populated: PopulatedSchemaKind[] = [];\n  for (const probe of probes) {\n    const count = await countSchemaKindRows(backend, params.graphId, probe);\n    if (count > 0) populated.push({ ...probe, count });\n  }\n\n  if (populated.length > 0) {\n    return { status: \"populated\", kinds: populated };\n  }\n\n  return {\n    status: \"committed\",\n    row: await backend.commitSchemaVersion(params),\n  };\n}\n\nexport function createCommonOperationBackend(\n  options: CreateCommonOperationBackendOptions,\n): CommonOperationBackend {\n  const {\n    batchConfig,\n    commandSession,\n    execution,\n    maxBindParameters,\n    operationStrategy,\n    rowMappers,\n  } = options;\n  const nowIso = options.nowIso ?? defaultNowIso;\n\n  async function runAtomicNodeSidecarProgram<TResult>(\n    input: Readonly<{\n      creates: readonly AtomicNodePostimageEntry[];\n      updates: readonly AtomicNodeResolvedUpdateEntry[];\n      operation: \"insert\" | \"update\" | \"upsert\";\n      hasProjections: boolean;\n      hasPostimageAssertion: boolean;\n      run: () => Promise<TResult>;\n      postimageRefusal?: () => TResult;\n    }>,\n  ): Promise<TResult> {\n    if (!input.hasProjections && input.postimageRefusal === undefined) {\n      return input.run();\n    }\n    try {\n      return await input.run();\n    } catch (error) {\n      const projectionEvidenceRefusal =\n        input.hasProjections &&\n        isNotNullColumnViolation(\n          error,\n          operationStrategy.atomicNodeRefusalConstraints.projectionEvidence,\n        );\n      if (\n        input.hasProjections &&\n        (projectionEvidenceRefusal || isMissingTableError(error))\n      ) {\n        await options.diagnoseAtomicNodeProjectionEvidence?.(\n          input.creates,\n          input.updates,\n        );\n        if (projectionEvidenceRefusal) {\n          throw new DatabaseOperationError(\n            \"Atomic node projection evidence changed before its refusal could be diagnosed.\",\n            { operation: input.operation, entity: \"node\" },\n            { cause: error },\n          );\n        }\n      }\n      if (\n        input.postimageRefusal !== undefined &&\n        isAtomicMutationPostimageRefusal(\n          error,\n          operationStrategy,\n          \"node\",\n          input.hasPostimageAssertion,\n        )\n      ) {\n        return input.postimageRefusal();\n      }\n      if (\n        input.hasProjections &&\n        options.refuseAtomicNodeProjectionError !== undefined\n      ) {\n        return options.refuseAtomicNodeProjectionError(\n          input.creates,\n          input.updates,\n          error,\n        );\n      }\n      throw error;\n    }\n  }\n\n  // Positive results are cached by default because on standard schemas the\n  // recorded DDL is stable; Postgres disables that cache because visibility is\n  // search_path-sensitive. Missing tables stay re-probable unless a caller opts\n  // into negative caching.\n  const tableExists = createCachedTableExistence(\n    (tableName) =>\n      execution.execGet<Record<string, unknown>>(\n        operationStrategy.buildTableExists(tableName),\n      ),\n    options.tableExistenceCache,\n  );\n\n  async function runIgnorableClearStatement(\n    statement: Readonly<{\n      query: ExecutableSql;\n      ignoreMissingTable?: boolean;\n      requiredTableName?: string;\n    }>,\n  ): Promise<void> {\n    // The existence pre-check is the guard for tables that predate a schema\n    // addition (e.g. the recorded relations). It works in or out of a\n    // transaction, unlike a SAVEPOINT — which is invalid in autocommit mode on\n    // PostgreSQL and would break clear() on a non-transactional backend.\n    if (\n      statement.ignoreMissingTable === true &&\n      statement.requiredTableName !== undefined &&\n      !(await tableExists(statement.requiredTableName))\n    ) {\n      return;\n    }\n    await execution.execRun(statement.query);\n  }\n\n  /**\n   * THE edge-claim driver, shared by the single and batch members: lock every\n   * entry's row in one statement, then run the conditional takeover for the\n   * entries a DIFFERENT edge holds.\n   *\n   * The two statements exist because one cannot do the job: deciding inside the\n   * upsert reads the pre-lock snapshot of the edges relation under READ\n   * COMMITTED, so two concurrent writers would both see \"the incumbent is not\n   * live yet\" and both commit. Statement 1 is therefore decision-free — it only\n   * makes the row exist, takes its lock and reports the COMMITTED holder — and\n   * statement 2 re-evaluates liveness after that lock is held.\n   *\n   * Duplicate conflict targets are refused rather than collapsed: a multi-row\n   * upsert cannot affect one row twice, so two entries claiming one axis would\n   * silently leave one of them unfenced. The application layer's pending\n   * cardinality state refuses in-batch collisions first, which makes this a\n   * defensive invariant rather than a semantic path.\n   */\n  async function claimEdgeCardinalityEntries(\n    entries: readonly ClaimEdgeCardinalityParams[],\n  ): Promise<readonly EdgeClaimOutcome[]> {\n    if (entries.length === 0) return [];\n\n    const targetKey = (entry: ClaimEdgeCardinalityParams): string => {\n      const target = edgeCardinalityClaimTarget(entry);\n      return `${target.axis}\\u0000${target.key}`;\n    };\n    const seen = new Set<string>();\n    for (const entry of entries) {\n      const key = targetKey(entry);\n      if (seen.has(key)) {\n        throw new DatabaseOperationError(\n          \"Two edge claims in one batch name the same cardinality axis and key; \" +\n            \"a multi-row upsert cannot affect one row twice.\",\n          { operation: \"insert\", entity: \"edge\" },\n        );\n      }\n      seen.add(key);\n    }\n\n    const outcomes = new Map<string, EdgeClaimOutcome>();\n    // One claim row per inserted edge, so the edge-insert budget is the right\n    // ceiling for the multi-row lock statement.\n    for (const chunk of chunkArray(entries, batchConfig.edgeInsertBatchSize)) {\n      const lockQuery = operationStrategy.buildLockEdgeClaims(chunk, nowIso());\n      const rows = await execution.execAll<{\n        axis: string;\n        key: string;\n        holder_edge_id: string;\n      }>(lockQuery);\n      const holderByTarget = new Map(\n        rows.map((row) => [`${row.axis}\\u0000${row.key}`, row.holder_edge_id]),\n      );\n      for (const entry of chunk) {\n        const key = targetKey(entry);\n        const holder = holderByTarget.get(key);\n        if (holder === undefined || holder === entry.edgeId) {\n          outcomes.set(key, { status: \"claimed\" });\n          continue;\n        }\n        const takeOver = await execution.execAll<{ holder_edge_id: string }>(\n          operationStrategy.buildTakeOverEdgeClaim(entry, nowIso()),\n        );\n        outcomes.set(\n          key,\n          takeOver.length > 0 ?\n            { status: \"claimed\" }\n          : { status: \"refused\", holderEdgeId: holder },\n        );\n      }\n    }\n    return entries.map(\n      (entry) => outcomes.get(targetKey(entry)) ?? { status: \"claimed\" },\n    );\n  }\n\n  /**\n   * Single-claim fast path. The lock statement reports both the committed\n   * claim holder and whether a claimless live edge already occupies the axis.\n   * A stale foreign holder is taken over only through a second guarded\n   * statement whose fresh snapshot rechecks the entire axis.\n   */\n  async function claimEdgeCardinalityGuarded(\n    params: ClaimEdgeCardinalityParams,\n  ): Promise<EdgeClaimOutcome> {\n    const rows = await execution.execAll<{\n      holder_edge_id: string;\n      has_incumbent: boolean | number;\n    }>(operationStrategy.buildLockEdgeClaimGuarded(params, nowIso()));\n    const locked = rows[0];\n    if (locked === undefined) {\n      throw new DatabaseOperationError(\n        \"Guarded edge claim did not return its locked claim row.\",\n        { operation: \"insert\", entity: \"edge\" },\n      );\n    }\n    const hasIncumbent =\n      locked.has_incumbent === true || locked.has_incumbent === 1;\n    if (locked.holder_edge_id === params.edgeId) {\n      return hasIncumbent ?\n          { status: \"refused\", holderEdgeId: params.edgeId }\n        : { status: \"claimed\" };\n    }\n    if (hasIncumbent) {\n      return { status: \"refused\", holderEdgeId: locked.holder_edge_id };\n    }\n\n    const takeOver = await execution.execAll<{ holder_edge_id: string }>(\n      operationStrategy.buildTakeOverEdgeClaimGuarded(params, nowIso()),\n    );\n    return takeOver.length > 0 ?\n        { status: \"claimed\" }\n      : { status: \"refused\", holderEdgeId: locked.holder_edge_id };\n  }\n\n  // Returns 0 when no row is currently active — that's the sentinel\n  // `expected: { kind: \"initial\" }` matches against.\n  async function readActiveVersion(graphId: string): Promise<number> {\n    const row = await execution.execGet<Record<string, unknown>>(\n      operationStrategy.buildGetActiveSchema(graphId),\n    );\n    return row === undefined ? 0 : rowMappers.toSchemaVersionRow(row).version;\n  }\n\n  const schemaFenceLockClause = options.schemaFenceLockClause;\n  const schemaFenceMembers =\n    schemaFenceLockClause === undefined ?\n      {}\n    : {\n        async insertNodeIfAbsentWithSchemaFence(\n          params: InsertNodeParams,\n          schemaFence: SchemaWriteFenceParams,\n        ): Promise<NodeRow | undefined> {\n          assertMatchingNodeSchemaFence(params, schemaFence);\n          const query =\n            operationStrategy.buildInsertNodeIfAbsentWithSchemaFence(\n              params,\n              nowIso(),\n              schemaFence,\n              schemaFenceLockClause,\n            );\n          const row = await execution.execGet<Record<string, unknown>>(query);\n          return row === undefined ? undefined : rowMappers.toNodeRow(row);\n        },\n\n        async insertNodeWithSchemaFence(\n          params: InsertNodeParams,\n          schemaFence: SchemaWriteFenceParams,\n        ): Promise<NodeRow | undefined> {\n          assertMatchingNodeSchemaFence(params, schemaFence);\n          const query = operationStrategy.buildInsertNodeWithSchemaFence(\n            params,\n            nowIso(),\n            schemaFence,\n            schemaFenceLockClause,\n          );\n          const row = await withDuplicateKeyClassification(\n            () => execution.execGet<Record<string, unknown>>(query),\n            {\n              entity: \"node\",\n              relation: operationStrategy.primaryKeyConstraints.nodes,\n              attempted: attemptedInserts([params]),\n            },\n          );\n          return row === undefined ? undefined : rowMappers.toNodeRow(row);\n        },\n      };\n\n  const atomicSqlProgramExecutor = options.atomicSqlProgramExecutor;\n  const atomicNodeBatchMembers =\n    (\n      atomicSqlProgramExecutor === undefined ||\n      schemaFenceLockClause === undefined\n    ) ?\n      {}\n    : (() => {\n        const maxClaimInputCostPerEntry = Math.max(\n          0,\n          options.maxBindParameters -\n            ATOMIC_NODE_WRITE_FIXED_PARAM_COUNT -\n            ATOMIC_NODE_INSERT_PARAM_COUNT,\n        );\n        const claimSupport = Object.freeze({\n          families: Object.freeze([\"disjointness\", \"uniqueness\"] as const),\n          maxInputCostPerEntry: maxClaimInputCostPerEntry,\n        } satisfies AtomicNodeClaimSupport);\n        const projectionSupport = Object.freeze({\n          families: operationStrategy.atomicNodeProjectionFamilies,\n        } satisfies AtomicNodeProjectionSupport);\n\n        function orderedAtomicNodeClaims<\n          TEntry extends AtomicNodePostimageEntry,\n        >(entries: readonly TEntry[]): readonly AtomicNodeClaimEntry<TEntry>[] {\n          return entries\n            .flatMap((entry, memberOrdinal) =>\n              (entry.claims ?? []).map((claim, claimOrdinal) => ({\n                memberOrdinal,\n                claimOrdinal,\n                entry,\n                claim,\n              })),\n            )\n            .toSorted((left, right) => {\n              return compareClaimTargets(\n                {\n                  relation: \"uniques\",\n                  graphId: left.entry.params.graphId,\n                  axis: left.claim.axis,\n                  constraintName: left.claim.constraintName,\n                  key: left.claim.key,\n                },\n                {\n                  relation: \"uniques\",\n                  graphId: right.entry.params.graphId,\n                  axis: right.claim.axis,\n                  constraintName: right.claim.constraintName,\n                  key: right.claim.key,\n                },\n              );\n            });\n        }\n\n        function atomicNodeClaimTargetKey(\n          entry: AtomicNodeClaimEntry<AtomicNodePostimageEntry>,\n        ): string {\n          return encodeTupleKey([\n            entry.claim.axis,\n            entry.claim.constraintName,\n            entry.claim.key,\n          ]);\n        }\n\n        function atomicNodeClaimOwnerKey(row: AtomicNodeClaimOwnerRow): string {\n          return encodeTupleKey([row.node_kind, row.constraint_name, row.key]);\n        }\n\n        type AtomicNodeProgramSlot =\n          | Readonly<{\n              kind: \"claims\";\n              entries: readonly AtomicNodeClaimEntry<AtomicNodePostimageEntry>[];\n              rows: readonly AtomicNodeClaimOwnerRow[];\n            }>\n          | Readonly<{ kind: \"cleanup\" }>\n          | AtomicNodeProjectionSlot\n          | Readonly<{ kind: \"assertion\" }>\n          | Readonly<{\n              kind: \"counts\";\n              chunk: readonly AtomicNodePostimageEntry[];\n              count: number;\n            }>\n          | Readonly<{\n              kind: \"rows\";\n              chunk: readonly AtomicNodePostimageEntry[];\n              rows: readonly NodeRow[];\n            }>;\n\n        function classifyAtomicNodeClaimResults(\n          claimEntries: readonly AtomicNodeClaimEntry<AtomicNodePostimageEntry>[],\n          results: readonly AtomicNodeProgramSlot[],\n        ): \"stale\" | \"owned\" | DisjointError | UniquenessError {\n          const ownerByTarget = new Map<string, ClaimOwner>();\n          let returnedClaims = 0;\n          for (const result of results) {\n            if (result.kind !== \"claims\") continue;\n            returnedClaims += result.rows.length;\n            for (const row of result.rows) {\n              ownerByTarget.set(atomicNodeClaimOwnerKey(row), {\n                concreteKind: row.concrete_kind,\n                nodeId: row.node_id,\n              });\n            }\n          }\n          if (returnedClaims === 0) return \"stale\";\n          if (returnedClaims !== claimEntries.length) {\n            throw new CompilerInvariantError(\n              \"Atomic node claim program returned a partial claim result.\",\n              { expected: claimEntries.length, actual: returnedClaims },\n            );\n          }\n\n          for (const item of claimEntries.toSorted(\n            (left, right) =>\n              left.memberOrdinal - right.memberOrdinal ||\n              left.claimOrdinal - right.claimOrdinal,\n          )) {\n            const claim = item.claim;\n            const owner = ownerByTarget.get(atomicNodeClaimTargetKey(item));\n            if (owner === undefined) {\n              throw new CompilerInvariantError(\n                \"Atomic node claim program omitted a claim target.\",\n                {\n                  memberOrdinal: item.memberOrdinal,\n                  claimOrdinal: item.claimOrdinal,\n                },\n              );\n            }\n            const proposedOwner = {\n              concreteKind: item.entry.params.kind,\n              nodeId: item.entry.params.id,\n            };\n            if (!isSameClaimOwner(owner, proposedOwner)) {\n              if (claim.verdict.kind === \"disjointness\") {\n                return new DisjointError({\n                  nodeId: item.entry.params.id,\n                  attemptedKind: item.entry.params.kind,\n                  conflictingKind: owner.concreteKind,\n                });\n              }\n              return new UniquenessError({\n                constraintName: claim.constraintName,\n                kind: owner.concreteKind,\n                existingId: owner.nodeId,\n                newId: item.entry.params.id,\n                fields: claim.verdict.fields,\n                axis: claim.axis,\n              });\n            }\n          }\n          return \"owned\";\n        }\n\n        function requireAtomicNodeClaimWrite(\n          claimEntries: readonly AtomicNodeClaimEntry<AtomicNodePostimageEntry>[],\n          results: readonly AtomicNodeProgramSlot[],\n          insertedCount: number,\n        ): \"stale\" | \"owned\" {\n          const verdict = classifyAtomicNodeClaimResults(claimEntries, results);\n          if (verdict === \"owned\") return verdict;\n          if (insertedCount !== 0) {\n            throw new CompilerInvariantError(\n              verdict === \"stale\" ?\n                \"A stale atomic node claim fence still inserted nodes.\"\n              : \"A refused atomic node claim program still inserted nodes.\",\n            );\n          }\n          if (\n            verdict instanceof UniquenessError ||\n            verdict instanceof DisjointError\n          ) {\n            throw verdict;\n          }\n          return verdict;\n        }\n\n        function executeAtomicNodeBatch(\n          input: AtomicNodeBatchInput & Readonly<{ resultMode: \"count\" }>,\n        ): Promise<number>;\n        function executeAtomicNodeBatch(\n          input: AtomicNodeBatchInput & Readonly<{ resultMode: \"rows\" }>,\n        ): Promise<readonly NodeRow[]>;\n        async function executeAtomicNodeBatch(\n          input: AtomicNodeBatchInput,\n        ): Promise<number | readonly NodeRow[]> {\n          if (input.entries.length === 0) {\n            return input.resultMode === \"count\" ? 0 : [];\n          }\n          assertMatchingNodeSchemaFences(\n            input.entries.map((entry) => entry.params),\n            input.schemaFence,\n          );\n\n          const timestamp = nowIso();\n          const chunks = chunkAtomicNodeEntriesByIdSource(\n            input.entries,\n            batchConfig.nodeSchemaFencedInsertBatchSize,\n          );\n          const atomicExecutor = requireDefined(atomicSqlProgramExecutor);\n          const atomicSchemaFenceLockClause = requireDefined(\n            schemaFenceLockClause,\n          );\n          const claimEntries = orderedAtomicNodeClaims(input.entries);\n          if (claimEntries.length > 0) {\n            if (\n              input.entries.some(\n                (entry) =>\n                  !supportsAtomicNodeClaims(claimSupport, entry.claims ?? []),\n              )\n            ) {\n              throw new CompilerInvariantError(\n                \"Atomic node claim program exceeded its declared per-member budget.\",\n                {\n                  claimSupport,\n                },\n              );\n            }\n            const claimChunkSize = Math.max(\n              1,\n              Math.floor(\n                (options.maxBindParameters - 2) /\n                  ATOMIC_NODE_CLAIM_INPUT_PARAM_COUNT,\n              ),\n            );\n            const nodeChunks = chunkAtomicNodeEntriesByClaimWork(\n              input.entries,\n              options.maxBindParameters,\n            );\n            function claimGateForChunk(chunk: readonly AtomicNodeBatchEntry[]) {\n              const members = new Set<AtomicNodePostimageEntry>(chunk);\n              const chunkClaims = claimEntries.filter((item) =>\n                members.has(item.entry),\n              );\n              return chunkClaims.length === 0 ?\n                  undefined\n                : operationStrategy.buildAtomicNodeClaimGatePredicateWithSchemaFence(\n                    chunkClaims,\n                    input.schemaFence,\n                    atomicSchemaFenceLockClause,\n                  );\n            }\n            const claimChunks = chunkArray(claimEntries, claimChunkSize);\n            const claimSlots: AtomicSqlProgram<\n              AtomicNodeProgramSlot,\n              unknown\n            >[\"slots\"] = claimChunks.map((chunk) => ({\n              statement: execution.compile(\n                operationStrategy.buildAtomicNodeClaimUpsertWithSchemaFence(\n                  chunk,\n                  input.schemaFence,\n                  atomicSchemaFenceLockClause,\n                ),\n              ),\n              cardinality: \"many\" as const,\n              decode: (rows: readonly Readonly<Record<string, unknown>>[]) => ({\n                kind: \"claims\" as const,\n                entries: chunk,\n                rows: rows.map((row) => ({\n                  node_kind: String(row[\"node_kind\"]),\n                  constraint_name: String(row[\"constraint_name\"]),\n                  key: String(row[\"key\"]),\n                  node_id: String(row[\"node_id\"]),\n                  concrete_kind: String(row[\"concrete_kind\"]),\n                })),\n              }),\n            }));\n            const cleanupSlots: AtomicSqlProgram<\n              AtomicNodeProgramSlot,\n              unknown\n            >[\"slots\"] = claimChunks.map((chunk) => ({\n              statement: execution.compile(\n                operationStrategy.buildAtomicNodeClaimCleanupWithSchemaFence(\n                  chunk,\n                  input.schemaFence,\n                  atomicSchemaFenceLockClause,\n                ),\n              ),\n              cardinality: \"none\" as const,\n              decode: () => ({ kind: \"cleanup\" as const }),\n            }));\n            const projectionSlots = compileAtomicNodeProjectionSlots(\n              operationStrategy,\n              execution,\n              input.entries,\n              [],\n              timestamp,\n              options.maxBindParameters,\n            );\n            const projectionEvidenceSlots =\n              await compileAtomicNodeProjectionEvidenceSlots(\n                operationStrategy,\n                execution,\n                input.entries,\n                [],\n                timestamp,\n                options.maxBindParameters,\n                options.resolveAtomicNodeProjectionEvidence,\n              );\n            // A per-chunk gate can refuse one member while a different chunk\n            // remains eligible. Assert every postimage inside the atomic\n            // transport so no successful sibling can commit before the Store\n            // diagnoses the refused claim from the rolled-back state.\n            const assertionSlots: AtomicSqlProgram<\n              AtomicNodeProgramSlot,\n              unknown\n            >[\"slots\"] = nodeChunks.map((chunk) => ({\n              statement: execution.compile(\n                operationStrategy.buildAssertAtomicNodeMutationPostimages(\n                  chunk,\n                  [],\n                  timestamp,\n                  input.schemaFence,\n                ),\n              ),\n              cardinality: \"none\" as const,\n              decode: () => ({ kind: \"assertion\" as const }),\n            }));\n\n            if (input.resultMode === \"count\") {\n              const nodeSlots: AtomicSqlProgram<\n                AtomicNodeProgramSlot,\n                unknown\n              >[\"slots\"] = nodeChunks.map((chunk) => {\n                return {\n                  statement: execution.compile(\n                    operationStrategy.buildAtomicNodeBatchWithSchemaFence(\n                      chunk,\n                      timestamp,\n                      input.schemaFence,\n                      atomicSchemaFenceLockClause,\n                      \"count\",\n                      claimGateForChunk(chunk),\n                    ),\n                  ),\n                  cardinality: \"many\" as const,\n                  decode: (rows) => ({\n                    kind: \"counts\" as const,\n                    chunk,\n                    count: rows.length,\n                  }),\n                };\n              });\n              const program = {\n                slots: [\n                  ...claimSlots,\n                  ...nodeSlots,\n                  ...cleanupSlots,\n                  ...projectionSlots,\n                  ...projectionEvidenceSlots,\n                  ...assertionSlots,\n                ],\n                assemble(results: readonly AtomicNodeProgramSlot[]): number {\n                  const counts = results.flatMap((result) =>\n                    result.kind === \"counts\" ? [result.count] : [],\n                  );\n                  const insertedCount = counts.reduce(\n                    (total, count) => total + count,\n                    0,\n                  );\n                  const claimVerdict = requireAtomicNodeClaimWrite(\n                    claimEntries,\n                    results,\n                    insertedCount,\n                  );\n                  if (claimVerdict === \"stale\") return 0;\n                  assertCompleteAtomicChunks(counts, nodeChunks, \"node\");\n                  return input.entries.length;\n                },\n              } satisfies AtomicSqlProgram<AtomicNodeProgramSlot, number>;\n              return runAtomicNodeSidecarProgram({\n                creates: input.entries,\n                updates: [],\n                operation: \"insert\",\n                hasProjections: projectionSlots.length > 0,\n                hasPostimageAssertion: assertionSlots.length > 0,\n                run: () =>\n                  withAtomicNodeBatchClassifications(\n                    () => atomicExecutor.execute(program),\n                    input.entries,\n                    operationStrategy,\n                  ),\n                postimageRefusal: () => 0,\n              });\n            }\n\n            const nodeSlots: AtomicSqlProgram<\n              AtomicNodeProgramSlot,\n              unknown\n            >[\"slots\"] = nodeChunks.map((chunk) => {\n              return {\n                statement: execution.compile(\n                  operationStrategy.buildAtomicNodeBatchWithSchemaFence(\n                    chunk,\n                    timestamp,\n                    input.schemaFence,\n                    atomicSchemaFenceLockClause,\n                    \"rows\",\n                    claimGateForChunk(chunk),\n                  ),\n                ),\n                cardinality: \"many\" as const,\n                decode: (rows) => ({\n                  kind: \"rows\" as const,\n                  chunk,\n                  rows: rows.map((row) => rowMappers.toNodeRow(row)),\n                }),\n              };\n            });\n            const program = {\n              slots: [\n                ...claimSlots,\n                ...nodeSlots,\n                ...cleanupSlots,\n                ...projectionSlots,\n                ...projectionEvidenceSlots,\n                ...assertionSlots,\n              ],\n              assemble(\n                results: readonly AtomicNodeProgramSlot[],\n              ): readonly NodeRow[] {\n                const rows = results.flatMap((result) =>\n                  result.kind === \"rows\" ? result.rows : [],\n                );\n                const claimVerdict = requireAtomicNodeClaimWrite(\n                  claimEntries,\n                  results,\n                  rows.length,\n                );\n                if (claimVerdict === \"stale\") return [];\n                if (rows.length !== input.entries.length) {\n                  throw new CompilerInvariantError(\n                    \"Atomic node claim program returned a partial node result.\",\n                    { expected: input.entries.length, actual: rows.length },\n                  );\n                }\n                return rows;\n              },\n            } satisfies AtomicSqlProgram<\n              AtomicNodeProgramSlot,\n              readonly NodeRow[]\n            >;\n            return runAtomicNodeSidecarProgram({\n              creates: input.entries,\n              updates: [],\n              operation: \"insert\",\n              hasProjections: projectionSlots.length > 0,\n              hasPostimageAssertion: assertionSlots.length > 0,\n              run: () =>\n                withAtomicNodeBatchClassifications(\n                  () => atomicExecutor.execute(program),\n                  input.entries,\n                  operationStrategy,\n                ),\n              postimageRefusal: () => [],\n            });\n          }\n\n          if (input.resultMode === \"count\") {\n            const nodeSlots = chunks.map((chunk) => ({\n              statement: execution.compile(\n                operationStrategy.buildAtomicNodeBatchWithSchemaFence(\n                  chunk,\n                  timestamp,\n                  input.schemaFence,\n                  atomicSchemaFenceLockClause,\n                  \"count\",\n                ),\n              ),\n              cardinality: \"many\" as const,\n              decode: (rows: readonly Readonly<Record<string, unknown>>[]) => ({\n                kind: \"counts\" as const,\n                chunk,\n                count: rows.length,\n              }),\n            }));\n            const projectionSlots = compileAtomicNodeProjectionSlots(\n              operationStrategy,\n              execution,\n              input.entries,\n              [],\n              timestamp,\n              options.maxBindParameters,\n            );\n            const projectionEvidenceSlots =\n              await compileAtomicNodeProjectionEvidenceSlots(\n                operationStrategy,\n                execution,\n                input.entries,\n                [],\n                timestamp,\n                options.maxBindParameters,\n                options.resolveAtomicNodeProjectionEvidence,\n              );\n            const assertionSlots =\n              projectionSlots.length === 0 ?\n                []\n              : chunks.map((chunk) => ({\n                  statement: execution.compile(\n                    operationStrategy.buildAssertAtomicNodeMutationPostimages(\n                      chunk,\n                      [],\n                      timestamp,\n                      input.schemaFence,\n                    ),\n                  ),\n                  cardinality: \"none\" as const,\n                  decode: () => ({ kind: \"assertion\" as const }),\n                }));\n            const program = {\n              slots: [\n                ...nodeSlots,\n                ...projectionSlots,\n                ...projectionEvidenceSlots,\n                ...assertionSlots,\n              ],\n              assemble(results: readonly AtomicNodeProgramSlot[]): number {\n                const counts = results.flatMap((result) =>\n                  result.kind === \"counts\" ? [result.count] : [],\n                );\n                if (counts.every((count) => count === 0)) return 0;\n                assertCompleteAtomicChunks(counts, chunks, \"node\");\n                return input.entries.length;\n              },\n            } satisfies AtomicSqlProgram<AtomicNodeProgramSlot, number>;\n            return runAtomicNodeSidecarProgram({\n              creates: input.entries,\n              updates: [],\n              operation: \"insert\",\n              hasProjections: projectionSlots.length > 0,\n              hasPostimageAssertion: assertionSlots.length > 0,\n              run: () =>\n                withAtomicNodeBatchClassifications(\n                  () => atomicExecutor.execute(program),\n                  input.entries,\n                  operationStrategy,\n                ),\n              postimageRefusal: () => 0,\n            });\n          }\n\n          const nodeSlots = chunks.map((chunk) => ({\n            statement: execution.compile(\n              operationStrategy.buildAtomicNodeBatchWithSchemaFence(\n                chunk,\n                timestamp,\n                input.schemaFence,\n                atomicSchemaFenceLockClause,\n                \"rows\",\n              ),\n            ),\n            cardinality: \"many\" as const,\n            decode: (rows: readonly Readonly<Record<string, unknown>>[]) => ({\n              kind: \"rows\" as const,\n              chunk,\n              rows: rows.map((row) => rowMappers.toNodeRow(row)),\n            }),\n          }));\n          const projectionSlots = compileAtomicNodeProjectionSlots(\n            operationStrategy,\n            execution,\n            input.entries,\n            [],\n            timestamp,\n            options.maxBindParameters,\n          );\n          const projectionEvidenceSlots =\n            await compileAtomicNodeProjectionEvidenceSlots(\n              operationStrategy,\n              execution,\n              input.entries,\n              [],\n              timestamp,\n              options.maxBindParameters,\n              options.resolveAtomicNodeProjectionEvidence,\n            );\n          const assertionSlots =\n            projectionSlots.length === 0 ?\n              []\n            : chunks.map((chunk) => ({\n                statement: execution.compile(\n                  operationStrategy.buildAssertAtomicNodeMutationPostimages(\n                    chunk,\n                    [],\n                    timestamp,\n                    input.schemaFence,\n                  ),\n                ),\n                cardinality: \"none\" as const,\n                decode: () => ({ kind: \"assertion\" as const }),\n              }));\n          const program = {\n            slots: [\n              ...nodeSlots,\n              ...projectionSlots,\n              ...projectionEvidenceSlots,\n              ...assertionSlots,\n            ],\n            assemble(\n              results: readonly AtomicNodeProgramSlot[],\n            ): readonly NodeRow[] {\n              const rowChunks = results.flatMap((result) =>\n                result.kind === \"rows\" ? [result.rows] : [],\n              );\n              if (rowChunks.every((rows) => rows.length === 0)) return [];\n              const rows = rowChunks.flat();\n              if (rows.length !== input.entries.length) {\n                throw new CompilerInvariantError(\n                  \"Atomic node batch returned a partial row result.\",\n                  { expected: input.entries.length, actual: rows.length },\n                );\n              }\n              const byIdentity = new Map<string, NodeRow>();\n              for (const row of rows) {\n                const key = encodeTupleKey([row.graph_id, row.kind, row.id]);\n                if (byIdentity.has(key)) {\n                  throw new CompilerInvariantError(\n                    \"Atomic node batch returned a duplicate result row.\",\n                    { graphId: row.graph_id, kind: row.kind, id: row.id },\n                  );\n                }\n                byIdentity.set(key, row);\n              }\n              return input.entries.map((entry) => {\n                const key = encodeTupleKey([\n                  entry.params.graphId,\n                  entry.params.kind,\n                  entry.params.id,\n                ]);\n                const row = byIdentity.get(key);\n                if (row === undefined) {\n                  throw new CompilerInvariantError(\n                    \"Atomic node batch returned a row outside its input set.\",\n                    {\n                      graphId: entry.params.graphId,\n                      kind: entry.params.kind,\n                      id: entry.params.id,\n                    },\n                  );\n                }\n                return row;\n              });\n            },\n          } satisfies AtomicSqlProgram<\n            AtomicNodeProgramSlot,\n            readonly NodeRow[]\n          >;\n          return runAtomicNodeSidecarProgram({\n            creates: input.entries,\n            updates: [],\n            operation: \"insert\",\n            hasProjections: projectionSlots.length > 0,\n            hasPostimageAssertion: assertionSlots.length > 0,\n            run: () =>\n              withAtomicNodeBatchClassifications(\n                () => atomicExecutor.execute(program),\n                input.entries,\n                operationStrategy,\n              ),\n            postimageRefusal: () => [],\n          });\n        }\n\n        function acceptsAtomicNodeReplacementEntries(\n          entries: readonly AtomicNodeReplacementEntry[],\n        ): boolean {\n          return (\n            chunkAtomicNodeReplacementEntriesByClaimWork(\n              entries,\n              options.maxBindParameters,\n            ).length <= ATOMIC_MUTATION_MAX_MUTATION_STATEMENTS\n          );\n        }\n\n        async function executeAtomicNodeReplacementBatch(\n          input: Parameters<AtomicNodeReplacementBatchExecutor>[0],\n        ): Promise<readonly NodeRow[]> {\n          if (input.entries.length === 0) return [];\n          assertMatchingNodeSchemaFences(\n            input.entries.map((entry) => entry.params),\n            input.schemaFence,\n          );\n          const firstEntry = requireDefined(input.entries[0]);\n          const identities = new Set<string>();\n          for (const entry of input.entries) {\n            if (\n              entry.params.graphId !== firstEntry.params.graphId ||\n              entry.params.kind !== firstEntry.params.kind\n            ) {\n              throw new CompilerInvariantError(\n                \"An atomic node replacement requires one graph and node kind.\",\n                {\n                  expectedGraphId: firstEntry.params.graphId,\n                  expectedKind: firstEntry.params.kind,\n                  actualGraphId: entry.params.graphId,\n                  actualKind: entry.params.kind,\n                },\n              );\n            }\n            const identity = encodeTupleKey([\n              entry.params.graphId,\n              entry.params.kind,\n              entry.params.id,\n            ]);\n            if (identities.has(identity)) {\n              throw new CompilerInvariantError(\n                \"An atomic node replacement requires distinct identities.\",\n              );\n            }\n            identities.add(identity);\n            if (!supportsAtomicNodeClaims(claimSupport, entry.claims ?? [])) {\n              throw new CompilerInvariantError(\n                \"Atomic node replacement exceeded its declared per-member claim budget.\",\n                { claimSupport },\n              );\n            }\n          }\n\n          const timestamp = nowIso();\n          const atomicExecutor = requireDefined(atomicSqlProgramExecutor);\n          const atomicSchemaFenceLockClause = requireDefined(\n            schemaFenceLockClause,\n          );\n          const claimEntries = orderedAtomicNodeClaims(input.entries);\n          const nodeChunks = chunkAtomicNodeReplacementEntriesByClaimWork(\n            input.entries,\n            options.maxBindParameters,\n          );\n          if (!acceptsAtomicNodeReplacementEntries(input.entries)) {\n            throw new CompilerInvariantError(\n              \"Atomic node replacement exceeded its declared submission statement budget.\",\n              {\n                actual: nodeChunks.length,\n                maximum: ATOMIC_MUTATION_MAX_MUTATION_STATEMENTS,\n              },\n            );\n          }\n\n          const claimChunkSize = Math.max(\n            1,\n            Math.floor(\n              (options.maxBindParameters - 2) /\n                ATOMIC_NODE_CLAIM_INPUT_PARAM_COUNT,\n            ),\n          );\n          const claimChunks = chunkArray(claimEntries, claimChunkSize);\n          const claimSlots: AtomicSqlProgram<\n            AtomicNodeProgramSlot,\n            unknown\n          >[\"slots\"] = claimChunks.map((chunk) => ({\n            statement: execution.compile(\n              operationStrategy.buildAtomicNodeClaimUpsertWithSchemaFence(\n                chunk,\n                input.schemaFence,\n                atomicSchemaFenceLockClause,\n              ),\n            ),\n            cardinality: \"many\" as const,\n            decode: (rows: readonly Readonly<Record<string, unknown>>[]) => ({\n              kind: \"claims\" as const,\n              entries: chunk,\n              rows: rows.map((row) => ({\n                node_kind: String(row[\"node_kind\"]),\n                constraint_name: String(row[\"constraint_name\"]),\n                key: String(row[\"key\"]),\n                node_id: String(row[\"node_id\"]),\n                concrete_kind: String(row[\"concrete_kind\"]),\n              })),\n            }),\n          }));\n          const releaseChunkSize = Math.max(1, options.maxBindParameters - 5);\n          const releaseSlots: AtomicSqlProgram<\n            AtomicNodeProgramSlot,\n            unknown\n          >[\"slots\"] =\n            input.releaseClaims ?\n              chunkArray(input.entries, releaseChunkSize).map((chunk) => ({\n                statement: execution.compile(\n                  operationStrategy.buildAtomicNodeReplacementClaimReleaseWithSchemaFence(\n                    {\n                      graphId: requireDefined(chunk[0]).params.graphId,\n                      kind: requireDefined(chunk[0]).params.kind,\n                      ids: chunk.map((entry) => entry.params.id),\n                      timestamp,\n                    },\n                    input.schemaFence,\n                    atomicSchemaFenceLockClause,\n                  ),\n                ),\n                cardinality: \"none\" as const,\n                decode: () => ({ kind: \"cleanup\" as const }),\n              }))\n            : [];\n          function claimGateForChunk(\n            chunk: readonly AtomicNodeReplacementEntry[],\n          ): SQL | undefined {\n            const members = new Set<AtomicNodePostimageEntry>(chunk);\n            const chunkClaims = claimEntries.filter((item) =>\n              members.has(item.entry),\n            );\n            return chunkClaims.length === 0 ?\n                undefined\n              : operationStrategy.buildAtomicNodeClaimGatePredicateWithSchemaFence(\n                  chunkClaims,\n                  input.schemaFence,\n                  atomicSchemaFenceLockClause,\n                );\n          }\n          const nodeSlots: AtomicSqlProgram<\n            AtomicNodeProgramSlot,\n            unknown\n          >[\"slots\"] = nodeChunks.map((chunk) => ({\n            statement: execution.compile(\n              operationStrategy.buildAtomicNodeReplacementBatchWithSchemaFence(\n                chunk,\n                timestamp,\n                input.schemaFence,\n                atomicSchemaFenceLockClause,\n                claimGateForChunk(chunk),\n              ),\n            ),\n            cardinality: \"many\" as const,\n            decode: (rows: readonly Readonly<Record<string, unknown>>[]) => ({\n              kind: \"rows\" as const,\n              chunk,\n              rows: rows.map((row) => rowMappers.toNodeRow(row)),\n            }),\n          }));\n          const projectionSlots = compileAtomicNodeProjectionSlots(\n            operationStrategy,\n            execution,\n            input.entries,\n            [],\n            timestamp,\n            options.maxBindParameters,\n          );\n          const projectionEvidenceSlots =\n            await compileAtomicNodeProjectionEvidenceSlots(\n              operationStrategy,\n              execution,\n              input.entries,\n              [],\n              timestamp,\n              options.maxBindParameters,\n              options.resolveAtomicNodeProjectionEvidence,\n            );\n          const assertionSlots: AtomicSqlProgram<\n            AtomicNodeProgramSlot,\n            unknown\n          >[\"slots\"] = nodeChunks.map((chunk) => ({\n            statement: execution.compile(\n              operationStrategy.buildAssertAtomicNodeMutationPostimages(\n                chunk,\n                [],\n                timestamp,\n                input.schemaFence,\n              ),\n            ),\n            cardinality: \"none\" as const,\n            decode: () => ({ kind: \"assertion\" as const }),\n          }));\n          const program = {\n            slots: [\n              ...releaseSlots,\n              ...claimSlots,\n              ...nodeSlots,\n              ...projectionSlots,\n              ...projectionEvidenceSlots,\n              ...assertionSlots,\n            ],\n            assemble(\n              results: readonly AtomicNodeProgramSlot[],\n            ): readonly NodeRow[] {\n              const rows = results.flatMap((result) =>\n                result.kind === \"rows\" ? result.rows : [],\n              );\n              if (claimEntries.length > 0) {\n                const claimVerdict = requireAtomicNodeClaimWrite(\n                  claimEntries,\n                  results,\n                  rows.length,\n                );\n                if (claimVerdict === \"stale\") return [];\n              }\n              if (rows.length !== input.entries.length) {\n                throw new CompilerInvariantError(\n                  \"Atomic node replacement returned a partial result.\",\n                  { expected: input.entries.length, actual: rows.length },\n                );\n              }\n              const byIdentity = new Map(\n                rows.map((row) => [\n                  encodeTupleKey([row.graph_id, row.kind, row.id]),\n                  row,\n                ]),\n              );\n              if (byIdentity.size !== rows.length) {\n                throw new CompilerInvariantError(\n                  \"Atomic node replacement returned duplicate result rows.\",\n                );\n              }\n              return input.entries.map((entry) =>\n                requireDefined(\n                  byIdentity.get(\n                    encodeTupleKey([\n                      entry.params.graphId,\n                      entry.params.kind,\n                      entry.params.id,\n                    ]),\n                  ),\n                  \"Atomic node replacement omitted an input row.\",\n                ),\n              );\n            },\n          } satisfies AtomicSqlProgram<\n            AtomicNodeProgramSlot,\n            readonly NodeRow[]\n          >;\n          return runAtomicNodeSidecarProgram({\n            creates: input.entries,\n            updates: [],\n            operation: \"upsert\",\n            hasProjections: projectionSlots.length > 0,\n            hasPostimageAssertion: true,\n            run: () => atomicExecutor.execute(program),\n            postimageRefusal: () => [],\n          });\n        }\n\n        const boundedExecuteAtomicNodeBatch = Object.assign(\n          executeAtomicNodeBatch,\n          { claimSupport, projectionSupport },\n        );\n        const executeAtomicNodeReplacement = Object.assign(\n          executeAtomicNodeReplacementBatch,\n          {\n            accepts: acceptsAtomicNodeReplacementEntries,\n            claimSupport,\n            maxEntries: Object.freeze({\n              plain: atomicNodeReplacementSubmissionMaxEntries(\n                options.maxBindParameters,\n              ),\n              claimed: ATOMIC_RESOLVED_MUTATION_MAX_MEMBERS,\n            }),\n            projectionSupport,\n            releasedClaimFamilies: claimSupport.families,\n          },\n        );\n        return {\n          executeAtomicNodeBatch: boundedExecuteAtomicNodeBatch,\n          executeAtomicNodeReplacementBatch: executeAtomicNodeReplacement,\n        } satisfies Readonly<{\n          executeAtomicNodeBatch: AtomicNodeBatchExecutor;\n          executeAtomicNodeReplacementBatch: AtomicNodeReplacementBatchExecutor;\n        }>;\n      })();\n\n  const atomicEdgeBatchMembers =\n    (\n      atomicSqlProgramExecutor === undefined ||\n      schemaFenceLockClause === undefined\n    ) ?\n      {}\n    : (() => {\n        const atomicExecutor = requireDefined(atomicSqlProgramExecutor);\n        const atomicSchemaFenceLockClause = requireDefined(\n          schemaFenceLockClause,\n        );\n\n        async function executeAtomicEdgeBatch(\n          input: AtomicEdgeBatchCountInput,\n        ): Promise<number>;\n        async function executeAtomicEdgeBatch(\n          input: AtomicEdgeBatchRowsInput,\n        ): Promise<readonly EdgeRow[]>;\n        async function executeAtomicEdgeBatch(\n          input: AtomicEdgeBatchCountInput | AtomicEdgeBatchRowsInput,\n        ): Promise<number | readonly EdgeRow[]> {\n          if (input.params.length === 0) {\n            return input.resultMode === \"count\" ? 0 : [];\n          }\n          assertMatchingEdgeSchemaFences(input.params, input.schemaFence);\n          const paramsByGraphAndId = new Map(\n            input.params.map((params) => [\n              encodeTupleKey([params.graphId, params.id]),\n              params,\n            ]),\n          );\n          for (const claim of input.claims) {\n            const params = paramsByGraphAndId.get(\n              encodeTupleKey([claim.graphId, claim.edgeId]),\n            );\n            if (params === undefined) {\n              throw new CompilerInvariantError(\n                \"An atomic edge batch claim has no matching input row.\",\n                { graphId: claim.graphId, edgeId: claim.edgeId },\n              );\n            }\n            assertMatchingFusedEdgeClaim(params, claim);\n          }\n\n          const timestamp = nowIso();\n          const chunks = chunkArray(\n            input.params,\n            batchConfig.edgeSchemaFencedInsertBatchSize,\n          );\n          const atomicEdgeClaimBatchSize = Math.max(\n            1,\n            Math.floor(\n              (maxBindParameters - ATOMIC_EDGE_CLAIM_FIXED_PARAM_COUNT) /\n                ATOMIC_EDGE_CLAIM_PROPOSED_COLUMN_COUNT,\n            ),\n          );\n          function appendClaimSlots<TResult>(\n            slots: AtomicSqlProgram<TResult, unknown>[\"slots\"][number][],\n            claims: readonly ClaimEdgeCardinalityParams[],\n            decode: AtomicSqlProgram<\n              TResult,\n              unknown\n            >[\"slots\"][number][\"decode\"],\n          ): void {\n            for (const claimChunk of chunkArray(\n              claims,\n              atomicEdgeClaimBatchSize,\n            )) {\n              // Each builder renders one statement per cardinality group in\n              // the chunk. The three phases stay globally ordered — every\n              // stale release, then every acquisition, then every ownership\n              // assertion — because a chunk's groups are disjoint by axis and\n              // phase order is what the claim contract is stated in.\n              const phases = [\n                operationStrategy.buildDeleteStaleAtomicEdgeClaims(\n                  claimChunk,\n                  input.schemaFence,\n                  atomicSchemaFenceLockClause,\n                ),\n                operationStrategy.buildAcquireAtomicEdgeClaims(\n                  claimChunk,\n                  timestamp,\n                  input.schemaFence,\n                  atomicSchemaFenceLockClause,\n                ),\n                operationStrategy.buildAssertAtomicEdgeClaimsOwned(\n                  claimChunk,\n                  timestamp,\n                  input.schemaFence,\n                  atomicSchemaFenceLockClause,\n                ),\n              ];\n              for (const phase of phases) {\n                for (const statement of phase) {\n                  slots.push({\n                    statement: execution.compile(statement),\n                    cardinality: \"none\",\n                    decode,\n                  });\n                }\n              }\n            }\n          }\n          if (input.resultMode === \"count\") {\n            const edgeSlotIndexes: number[] = [];\n            const slots: AtomicSqlProgram<number, number>[\"slots\"][number][] =\n              [];\n            appendClaimSlots(slots, input.claims, (rows) => rows.length);\n            for (const chunk of chunks) {\n              edgeSlotIndexes.push(slots.length);\n              slots.push({\n                statement: execution.compile(\n                  operationStrategy.buildInsertEdgesBatchWithSchemaFence(\n                    chunk,\n                    timestamp,\n                    input.schemaFence,\n                    atomicSchemaFenceLockClause,\n                  ),\n                ),\n                cardinality: \"many\",\n                decode: (rows) => rows.length,\n              });\n            }\n            const program = {\n              slots,\n              assemble(slotCounts: readonly number[]): number {\n                const counts = edgeSlotIndexes.map((index) =>\n                  requireDefined(slotCounts[index]),\n                );\n                if (counts.every((count) => count === 0)) return 0;\n                assertCompleteAtomicChunks(counts, chunks, \"edge\");\n                return counts.reduce((total, count) => total + count, 0);\n              },\n            } satisfies AtomicSqlProgram<number, number>;\n            return executeClassifiedAtomicEdgeBatch(\n              atomicExecutor,\n              program,\n              operationStrategy.primaryKeyConstraints.edges,\n              operationStrategy.atomicEdgeRefusalConstraints,\n              input.params,\n              input.claims,\n            );\n          }\n\n          const edgeSlotIndexes: number[] = [];\n          const slots: AtomicSqlProgram<\n            readonly EdgeRow[],\n            readonly EdgeRow[]\n          >[\"slots\"][number][] = [];\n          appendClaimSlots(slots, input.claims, decodeNoEdgeRows);\n          for (const chunk of chunks) {\n            edgeSlotIndexes.push(slots.length);\n            slots.push({\n              statement: execution.compile(\n                operationStrategy.buildInsertEdgesBatchReturningWithSchemaFence(\n                  chunk,\n                  timestamp,\n                  input.schemaFence,\n                  atomicSchemaFenceLockClause,\n                ),\n              ),\n              cardinality: \"many\",\n              decode: (rows) => rows.map((row) => rowMappers.toEdgeRow(row)),\n            });\n          }\n          const program = {\n            slots,\n            assemble(\n              slotRows: readonly (readonly EdgeRow[])[],\n            ): readonly EdgeRow[] {\n              const rowChunks = edgeSlotIndexes.map((index) =>\n                requireDefined(slotRows[index]),\n              );\n              if (rowChunks.every((rows) => rows.length === 0)) return [];\n              assertCompleteAtomicChunks(\n                rowChunks.map((rows) => rows.length),\n                chunks,\n                \"edge\",\n              );\n              const inputOrder = new Map(\n                input.params.map((params, index) => [params.id, index]),\n              );\n              const rows = rowChunks.flat();\n              const seenIds = new Set<string>();\n              for (const row of rows) {\n                if (!inputOrder.has(row.id)) {\n                  throw new CompilerInvariantError(\n                    \"Atomic edge batch returned a row outside its input set.\",\n                    { id: row.id },\n                  );\n                }\n                if (seenIds.has(row.id)) {\n                  throw new CompilerInvariantError(\n                    \"Atomic edge batch returned a duplicate result row.\",\n                    { id: row.id },\n                  );\n                }\n                seenIds.add(row.id);\n              }\n              return rows.toSorted(\n                (left, right) =>\n                  (inputOrder.get(left.id) ?? 0) -\n                  (inputOrder.get(right.id) ?? 0),\n              );\n            },\n          } satisfies AtomicSqlProgram<readonly EdgeRow[], readonly EdgeRow[]>;\n          return executeClassifiedAtomicEdgeBatch(\n            atomicExecutor,\n            program,\n            operationStrategy.primaryKeyConstraints.edges,\n            operationStrategy.atomicEdgeRefusalConstraints,\n            input.params,\n            input.claims,\n          );\n        }\n\n        return { executeAtomicEdgeBatch } satisfies Readonly<{\n          executeAtomicEdgeBatch: AtomicEdgeBatchExecutor;\n        }>;\n      })();\n\n  const atomicEdgeConvergenceMembers: Readonly<{\n    executeAtomicEdgeConvergence?: AtomicEdgeConvergenceLowerer;\n  }> =\n    (\n      atomicSqlProgramExecutor === undefined ||\n      schemaFenceLockClause === undefined ||\n      operationStrategy.buildAtomicConvergeEdges === undefined ||\n      operationStrategy.buildAtomicConvergeEdgesTombstoneRefusal === undefined\n    ) ?\n      {}\n    : (() => {\n        const atomicExecutor = requireDefined(atomicSqlProgramExecutor);\n        const atomicSchemaFenceLockClause = requireDefined(\n          schemaFenceLockClause,\n        );\n        const buildCreate = requireDefined(\n          operationStrategy.buildAtomicConvergeEdges,\n        );\n        const buildTombstoneRefusal = requireDefined(\n          operationStrategy.buildAtomicConvergeEdgesTombstoneRefusal,\n        );\n        // The INSERT is the widest constant-size slot. Derive the public\n        // ceiling from that exact row shape so eligibility cannot outrun the\n        // transport's bind budget.\n        const maxEntries = Math.max(\n          0,\n          Math.floor(\n            (maxBindParameters - ATOMIC_EDGE_CONVERGENCE_FIXED_PARAM_COUNT) /\n              ATOMIC_EDGE_CONVERGENCE_PARAM_COUNT,\n          ),\n        );\n\n        const executeAtomicEdgeConvergence = Object.assign(\n          async (\n            input: Omit<AtomicEdgeConvergenceInput, \"kind\">,\n          ): Promise<readonly AtomicEdgeConvergenceResult[]> => {\n            if (input.entries.length === 0) return [];\n            if (input.entries.length > maxEntries) {\n              throw new CompilerInvariantError(\n                \"Atomic edge convergence exceeded its declared program budget.\",\n                { entries: input.entries.length, maxEntries },\n              );\n            }\n            const inputIdentityKeys = new Set<string>();\n            for (const entry of input.entries) {\n              if (\n                entry.params.graphId !== input.schemaFence.graphId ||\n                entry.match.kind !== \"durable\" ||\n                entry.params.matchIdentity?.name !==\n                  entry.match.identity.name ||\n                entry.params.matchIdentity.key !== entry.match.identity.key\n              ) {\n                throw new CompilerInvariantError(\n                  \"Atomic edge convergence input crossed its durable identity or schema fence.\",\n                  { graphId: entry.params.graphId, id: entry.params.id },\n                );\n              }\n              const identityKey = encodeTupleKey([\n                entry.params.graphId,\n                entry.params.kind,\n                entry.match.identity.name,\n                entry.match.identity.key,\n              ]);\n              if (inputIdentityKeys.has(identityKey)) {\n                throw new CompilerInvariantError(\n                  \"Atomic edge convergence received a duplicate durable identity.\",\n                  { graphId: entry.params.graphId, id: entry.params.id },\n                );\n              }\n              inputIdentityKeys.add(identityKey);\n            }\n\n            const timestamp = nowIso();\n            const builderInput = {\n              entries: input.entries,\n              timestamp,\n              schemaFence: input.schemaFence,\n              schemaLockClause: atomicSchemaFenceLockClause,\n            };\n            const program = {\n              slots: [\n                {\n                  statement: execution.compile(buildCreate(builderInput)),\n                  cardinality: \"many\" as const,\n                  decode: (\n                    rows: readonly Readonly<Record<string, unknown>>[],\n                  ) => rows.map((row) => rowMappers.toEdgeRow(row)),\n                },\n                {\n                  statement: execution.compile(\n                    buildTombstoneRefusal({\n                      entries: builderInput.entries,\n                      schemaFence: builderInput.schemaFence,\n                      schemaLockClause: builderInput.schemaLockClause,\n                    }),\n                  ),\n                  cardinality: \"none\" as const,\n                  decode: decodeNoEdgeRows,\n                },\n              ],\n              assemble(\n                results: readonly (readonly EdgeRow[])[],\n              ): readonly AtomicEdgeConvergenceResult[] {\n                const rows = requireDefined(results[0]);\n                if (rows.length === 0) return [];\n                if (rows.length !== input.entries.length) {\n                  throw new CompilerInvariantError(\n                    \"Atomic edge convergence returned a partial result set.\",\n                    { expected: input.entries.length, actual: rows.length },\n                  );\n                }\n                const rowsByIdentity = new Map<string, EdgeRow>();\n                for (const row of rows) {\n                  if (\n                    row.match_identity_name === undefined ||\n                    row.match_identity_key === undefined ||\n                    row.deleted_at !== undefined\n                  ) {\n                    throw new CompilerInvariantError(\n                      \"Atomic edge convergence returned an invalid live identity.\",\n                      { id: row.id, kind: row.kind },\n                    );\n                  }\n                  const key = encodeTupleKey([\n                    row.graph_id,\n                    row.kind,\n                    row.match_identity_name,\n                    row.match_identity_key,\n                  ]);\n                  if (rowsByIdentity.has(key)) {\n                    throw new CompilerInvariantError(\n                      \"Atomic edge convergence returned a duplicate identity.\",\n                      { id: row.id, kind: row.kind },\n                    );\n                  }\n                  rowsByIdentity.set(key, row);\n                }\n                return input.entries.map((entry) => {\n                  if (entry.match.kind !== \"durable\") {\n                    throw new CompilerInvariantError(\n                      \"Atomic edge convergence result mapping received a dynamic identity.\",\n                    );\n                  }\n                  const key = encodeTupleKey([\n                    entry.params.graphId,\n                    entry.params.kind,\n                    entry.match.identity.name,\n                    entry.match.identity.key,\n                  ]);\n                  const row = rowsByIdentity.get(key);\n                  if (row === undefined) {\n                    throw new CompilerInvariantError(\n                      \"Atomic edge convergence omitted a durable identity.\",\n                      { id: entry.params.id, kind: entry.params.kind },\n                    );\n                  }\n                  return {\n                    row,\n                    outcome: row.id === entry.params.id ? \"created\" : \"found\",\n                  };\n                });\n              },\n            } satisfies AtomicSqlProgram<\n              readonly EdgeRow[],\n              readonly AtomicEdgeConvergenceResult[]\n            >;\n\n            try {\n              return await executeClassifiedAtomicEdgeBatch(\n                atomicExecutor,\n                program,\n                operationStrategy.primaryKeyConstraints.edges,\n                operationStrategy.atomicEdgeRefusalConstraints,\n                input.entries.map((entry) => entry.params),\n                [],\n              );\n            } catch (error) {\n              if (\n                isNotNullColumnViolation(\n                  error,\n                  operationStrategy.atomicEdgeRefusalConstraints\n                    .tombstoneConvergence,\n                )\n              ) {\n                throw new AtomicEdgeConvergenceTombstoneRefusalError(error);\n              }\n              throw error;\n            }\n          },\n          { maxEntries },\n        );\n\n        return { executeAtomicEdgeConvergence } satisfies Readonly<{\n          executeAtomicEdgeConvergence: AtomicEdgeConvergenceLowerer;\n        }>;\n      })();\n\n  const atomicNodeDeleteBatchMembers =\n    (\n      atomicSqlProgramExecutor === undefined ||\n      schemaFenceLockClause === undefined\n    ) ?\n      {}\n    : (() => {\n        const atomicExecutor = requireDefined(atomicSqlProgramExecutor);\n        const atomicSchemaFenceLockClause = requireDefined(\n          schemaFenceLockClause,\n        );\n        // Claim release is widest: fence graph/version, graph, kind, and the\n        // timestamp in both SET and owner-postimage predicates beside each id.\n        const chunkSize = Math.max(1, maxBindParameters - 6);\n\n        async function executeAtomicNodeDeleteBatch(\n          input: AtomicNodeDeleteBatchInput,\n        ): Promise<AtomicDeleteBatchResult> {\n          if (input.ids.length === 0) {\n            return { affectedCount: 0, schemaFenceMatched: true };\n          }\n          if (input.graphId !== input.schemaFence.graphId) {\n            throw new CompilerInvariantError(\n              \"Atomic node delete batch crossed its schema fence graph.\",\n              {\n                graphId: input.graphId,\n                fenceGraphId: input.schemaFence.graphId,\n              },\n            );\n          }\n          const timestamp = nowIso();\n          const deleteSlots = chunkArray(input.ids, chunkSize).map((ids) => ({\n            statement: execution.compile(\n              operationStrategy.buildAtomicNodeDeleteBatchWithSchemaFence(\n                { ...input, ids },\n                timestamp,\n                atomicSchemaFenceLockClause,\n              ),\n            ),\n            cardinality: \"many\" as const,\n            decode: (rows: readonly Readonly<Record<string, unknown>>[]) =>\n              ({ kind: \"affected\", count: rows.length }) as const,\n          }));\n          const claimReleaseSlots = chunkArray(input.ids, chunkSize).map(\n            (ids) => ({\n              statement: execution.compile(\n                operationStrategy.buildAtomicDeletedNodeClaimReleaseWithSchemaFence(\n                  {\n                    graphId: input.graphId,\n                    kind: input.kind,\n                    ids,\n                    timestamp,\n                  },\n                  input.schemaFence,\n                  atomicSchemaFenceLockClause,\n                ),\n              ),\n              cardinality: \"none\" as const,\n              decode: () => ({ kind: \"claim-release\" as const }),\n            }),\n          );\n          const program = {\n            slots: [\n              ...deleteSlots,\n              ...claimReleaseSlots,\n              {\n                statement: execution.compile(\n                  operationStrategy.buildSchemaFenceProbe(\n                    input.schemaFence,\n                    atomicSchemaFenceLockClause,\n                  ),\n                ),\n                cardinality: \"many\" as const,\n                decode: (rows: readonly Readonly<Record<string, unknown>>[]) =>\n                  ({ kind: \"fence\", matched: rows.length === 1 }) as const,\n              },\n            ],\n            assemble: (results: readonly AtomicDeleteSlotResult[]) =>\n              assembleAtomicDeleteBatchResult(results),\n          } satisfies AtomicSqlProgram<\n            AtomicDeleteSlotResult,\n            AtomicDeleteBatchResult\n          >;\n\n          return withAtomicNodeDeleteRestrictionClassification(\n            () => atomicExecutor.execute(program),\n            operationStrategy.atomicNodeRefusalConstraints.deleteRestricted,\n          );\n        }\n\n        const executeAtomicNodeDeleteBatchWithClaimCleanup = Object.assign(\n          executeAtomicNodeDeleteBatch,\n          {\n            releasedClaimFamilies: [\"disjointness\", \"uniqueness\"] as const,\n          },\n        );\n        return {\n          executeAtomicNodeDeleteBatch:\n            executeAtomicNodeDeleteBatchWithClaimCleanup,\n        } satisfies Readonly<{\n          executeAtomicNodeDeleteBatch: AtomicNodeDeleteBatchExecutor;\n        }>;\n      })();\n\n  const atomicNodeResolvedUpdateBatchMembers =\n    (\n      atomicSqlProgramExecutor === undefined ||\n      schemaFenceLockClause === undefined\n    ) ?\n      {}\n    : (() => {\n        const atomicExecutor = requireDefined(atomicSqlProgramExecutor);\n        const atomicSchemaFenceLockClause = requireDefined(\n          schemaFenceLockClause,\n        );\n        // Each member binds its id in CASE, membership and preimage predicates,\n        // plus props and version. Leave a conservative fixed allowance for the\n        // graph/kind/fence/timestamp/count binds.\n        const statementChunkSize = atomicResolvedMutationStatementChunkSize(\n          maxBindParameters,\n          ATOMIC_NODE_RESOLVED_MUTATION_PARAMS_PER_ENTRY,\n        );\n        const maxEntries =\n          atomicResolvedMutationSubmissionMaxEntries(statementChunkSize);\n\n        const executeAtomicNodeResolvedUpdateBatch = Object.assign(\n          async (\n            input: Parameters<AtomicNodeResolvedUpdateBatchExecutor>[0],\n          ) => {\n            if (input.entries.length === 0) return [];\n            assertResolvedNodeUpdateBatchInput(\n              input.entries,\n              input.schemaFence,\n            );\n            const timestamp = nowIso();\n            const updateChunks = chunkArray(input.entries, statementChunkSize);\n            const projectionSlots = compileAtomicNodeProjectionSlots(\n              operationStrategy,\n              execution,\n              [],\n              input.entries,\n              timestamp,\n              options.maxBindParameters,\n            );\n            const projectionEvidenceSlots =\n              await compileAtomicNodeProjectionEvidenceSlots(\n                operationStrategy,\n                execution,\n                [],\n                input.entries,\n                timestamp,\n                options.maxBindParameters,\n                options.resolveAtomicNodeProjectionEvidence,\n              );\n            const first = requireDefined(input.entries[0]);\n            const program = buildAtomicResolvedMutationSetProgram({\n              entity: \"node\",\n              createChunks: [],\n              updateChunks,\n              createIds: [],\n              updateIds: input.entries.map((entry) => entry.id),\n              compileCreate: () => {\n                throw new CompilerInvariantError(\n                  \"An update-only node program compiled a create chunk.\",\n                );\n              },\n              compileUpdate: (updates) =>\n                execution.compile(\n                  operationStrategy.buildAtomicNodeResolvedUpdateBatch(\n                    updates,\n                    timestamp,\n                    input.schemaFence,\n                    atomicSchemaFenceLockClause,\n                  ),\n                ),\n              compiledSidecars: [\n                ...projectionSlots,\n                ...projectionEvidenceSlots,\n              ].map((slot) => slot.statement),\n              compileAssertion: (_creates, updates) =>\n                execution.compile(\n                  operationStrategy.buildAssertAtomicNodeMutationPostimages(\n                    [],\n                    updates,\n                    timestamp,\n                    input.schemaFence,\n                  ),\n                ),\n              compilePostimages: (ids) =>\n                execution.compile(\n                  operationStrategy.buildReadAtomicNodeMutationPostimages(\n                    input.schemaFence.graphId,\n                    first.kind,\n                    ids,\n                    input.schemaFence,\n                  ),\n                ),\n              decodeRow: (row) => rowMappers.toNodeRow(row),\n              rowId: (row) => row.id,\n            });\n            return runAtomicNodeSidecarProgram({\n              creates: [],\n              updates: input.entries,\n              operation: \"update\",\n              hasProjections: projectionSlots.length > 0,\n              hasPostimageAssertion: true,\n              run: async () => {\n                const result = await atomicExecutor.execute(program);\n                return result.updated;\n              },\n              postimageRefusal: () => [],\n            });\n          },\n          {\n            maxEntries,\n            projectionSupport: Object.freeze({\n              families: operationStrategy.atomicNodeProjectionFamilies,\n            } satisfies AtomicNodeProjectionSupport),\n          },\n        ) satisfies AtomicNodeResolvedUpdateBatchExecutor;\n\n        return { executeAtomicNodeResolvedUpdateBatch };\n      })();\n\n  const atomicNodeResolvedMutationSetMembers =\n    (\n      atomicSqlProgramExecutor === undefined ||\n      schemaFenceLockClause === undefined\n    ) ?\n      {}\n    : (() => {\n        const atomicExecutor = requireDefined(atomicSqlProgramExecutor);\n        const atomicSchemaFenceLockClause = requireDefined(\n          schemaFenceLockClause,\n        );\n        // The guarded update is the widest per-member statement. Assertions,\n        // postimage reads, creates, and projection sidecars are independently\n        // chunked and compile-count ratchets keep every slot within this budget.\n        const statementChunkSize = atomicResolvedMutationStatementChunkSize(\n          maxBindParameters,\n          ATOMIC_NODE_RESOLVED_MUTATION_PARAMS_PER_ENTRY,\n        );\n        const maxEntries =\n          atomicResolvedMutationSubmissionMaxEntries(statementChunkSize);\n\n        const executeAtomicNodeResolvedMutationSet = Object.assign(\n          async (\n            input: Parameters<AtomicNodeResolvedMutationSetExecutor>[0],\n          ) => {\n            const entryCount = input.creates.length + input.updates.length;\n            if (entryCount === 0) return { created: [], updated: [] };\n            assertResolvedNodeMutationSetInput(\n              input.creates,\n              input.updates,\n              input.schemaFence,\n            );\n            const timestamp = nowIso();\n            const firstIdentity = input.creates[0]?.params ?? input.updates[0];\n            const projectionSlots = compileAtomicNodeProjectionSlots(\n              operationStrategy,\n              execution,\n              input.creates,\n              input.updates,\n              timestamp,\n              options.maxBindParameters,\n            );\n            const projectionEvidenceSlots =\n              await compileAtomicNodeProjectionEvidenceSlots(\n                operationStrategy,\n                execution,\n                input.creates,\n                input.updates,\n                timestamp,\n                options.maxBindParameters,\n                options.resolveAtomicNodeProjectionEvidence,\n              );\n            const program = buildAtomicResolvedMutationSetProgram({\n              entity: \"node\",\n              createChunks: chunkArray(\n                input.creates,\n                Math.min(\n                  batchConfig.nodeSchemaFencedInsertBatchSize,\n                  statementChunkSize,\n                ),\n              ),\n              updateChunks: chunkArray(input.updates, statementChunkSize),\n              createIds: input.creates.map((entry) => entry.params.id),\n              updateIds: input.updates.map((entry) => entry.id),\n              compileCreate: (chunk) =>\n                execution.compile(\n                  operationStrategy.buildAtomicNodeBatchWithSchemaFence(\n                    chunk,\n                    timestamp,\n                    input.schemaFence,\n                    atomicSchemaFenceLockClause,\n                    \"rows\",\n                  ),\n                ),\n              compileUpdate: (updates) =>\n                execution.compile(\n                  operationStrategy.buildAtomicNodeResolvedUpdateBatch(\n                    updates,\n                    timestamp,\n                    input.schemaFence,\n                    atomicSchemaFenceLockClause,\n                  ),\n                ),\n              compiledSidecars: [\n                ...projectionSlots,\n                ...projectionEvidenceSlots,\n              ].map((slot) => slot.statement),\n              compileAssertion: (creates, updates) =>\n                execution.compile(\n                  operationStrategy.buildAssertAtomicNodeMutationPostimages(\n                    creates,\n                    updates,\n                    timestamp,\n                    input.schemaFence,\n                  ),\n                ),\n              compilePostimages: (ids) =>\n                execution.compile(\n                  operationStrategy.buildReadAtomicNodeMutationPostimages(\n                    input.schemaFence.graphId,\n                    requireDefined(firstIdentity).kind,\n                    ids,\n                    input.schemaFence,\n                  ),\n                ),\n              decodeRow: (row) => rowMappers.toNodeRow(row),\n              rowId: (row) => row.id,\n            });\n\n            return runAtomicNodeSidecarProgram({\n              creates: input.creates,\n              updates: input.updates,\n              operation: \"upsert\",\n              hasProjections: projectionSlots.length > 0,\n              hasPostimageAssertion: true,\n              run: () =>\n                withAtomicNodeBatchClassifications(\n                  () => atomicExecutor.execute(program),\n                  input.creates,\n                  operationStrategy,\n                ),\n              postimageRefusal: () => ({ created: [], updated: [] }),\n            });\n          },\n          {\n            maxEntries,\n            projectionSupport: Object.freeze({\n              families: operationStrategy.atomicNodeProjectionFamilies,\n            } satisfies AtomicNodeProjectionSupport),\n          },\n        ) satisfies AtomicNodeResolvedMutationSetExecutor;\n\n        return { executeAtomicNodeResolvedMutationSet };\n      })();\n\n  const atomicEdgeDeleteBatchMembers =\n    (\n      atomicSqlProgramExecutor === undefined ||\n      schemaFenceLockClause === undefined\n    ) ?\n      {}\n    : (() => {\n        const atomicExecutor = requireDefined(atomicSqlProgramExecutor);\n        const atomicSchemaFenceLockClause = requireDefined(\n          schemaFenceLockClause,\n        );\n        // Per chunk: fence graph/version (2), timestamp (1), expected kind\n        // in both SET arms and the live-row predicate (3), graph id (1), ids.\n        const chunkSize = Math.max(1, maxBindParameters - 7);\n\n        async function executeAtomicEdgeDeleteBatch(\n          input: AtomicEdgeDeleteBatchInput,\n        ): Promise<AtomicDeleteBatchResult> {\n          if (input.ids.length === 0) {\n            return { affectedCount: 0, schemaFenceMatched: true };\n          }\n          if (input.graphId !== input.schemaFence.graphId) {\n            throw new CompilerInvariantError(\n              \"Atomic edge delete batch crossed its schema fence graph.\",\n              {\n                graphId: input.graphId,\n                fenceGraphId: input.schemaFence.graphId,\n              },\n            );\n          }\n          const timestamp = nowIso();\n          const chunks = chunkArray(input.ids, chunkSize);\n          const deleteSlots = chunks.map((ids) => ({\n            statement: execution.compile(\n              operationStrategy.buildAtomicEdgeDeleteBatchWithSchemaFence(\n                { ...input, ids },\n                timestamp,\n                atomicSchemaFenceLockClause,\n              ),\n            ),\n            cardinality: \"many\" as const,\n            decode: (rows: readonly Readonly<Record<string, unknown>>[]) =>\n              ({ kind: \"affected\", count: rows.length }) as const,\n          }));\n          const program = {\n            slots: [\n              ...deleteSlots,\n              {\n                statement: execution.compile(\n                  operationStrategy.buildSchemaFenceProbe(\n                    input.schemaFence,\n                    atomicSchemaFenceLockClause,\n                  ),\n                ),\n                cardinality: \"many\" as const,\n                decode: (rows: readonly Readonly<Record<string, unknown>>[]) =>\n                  ({ kind: \"fence\", matched: rows.length === 1 }) as const,\n              },\n            ],\n            assemble: (results: readonly AtomicDeleteSlotResult[]) =>\n              assembleAtomicDeleteBatchResult(results),\n          } satisfies AtomicSqlProgram<\n            AtomicDeleteSlotResult,\n            AtomicDeleteBatchResult\n          >;\n\n          return withAtomicEdgeDeleteIdentityRefusalClassification(\n            () => atomicExecutor.execute(program),\n            operationStrategy.atomicEdgeRefusalConstraints.deleteIdentity,\n          );\n        }\n\n        return { executeAtomicEdgeDeleteBatch } satisfies Readonly<{\n          executeAtomicEdgeDeleteBatch: AtomicEdgeDeleteBatchExecutor;\n        }>;\n      })();\n\n  const atomicEdgeResolvedUpdateBatchMembers =\n    (\n      atomicSqlProgramExecutor === undefined ||\n      schemaFenceLockClause === undefined\n    ) ?\n      {}\n    : (() => {\n        const atomicExecutor = requireDefined(atomicSqlProgramExecutor);\n        const atomicSchemaFenceLockClause = requireDefined(\n          schemaFenceLockClause,\n        );\n\n        const statementChunkSize = atomicResolvedMutationStatementChunkSize(\n          maxBindParameters,\n          ATOMIC_EDGE_RESOLVED_MUTATION_PARAMS_PER_ENTRY,\n        );\n        const maxEntries =\n          atomicResolvedMutationSubmissionMaxEntries(statementChunkSize);\n        const executeAtomicEdgeResolvedUpdateBatch = Object.assign(\n          async (\n            input: Parameters<AtomicEdgeResolvedUpdateBatchExecutor>[0],\n          ) => {\n            if (input.entries.length === 0) return [];\n            assertResolvedEdgeUpdateBatchInput(\n              input.entries,\n              input.schemaFence,\n            );\n            let timestamp = nowIso();\n            while (\n              input.entries.some(\n                (entry) => entry.existing.updated_at === timestamp,\n              )\n            ) {\n              timestamp = new Date(Date.parse(timestamp) + 1).toISOString();\n            }\n            const program = buildAtomicResolvedMutationSetProgram({\n              entity: \"edge\",\n              createChunks: [],\n              updateChunks: chunkArray(input.entries, statementChunkSize),\n              createIds: [],\n              updateIds: input.entries.map((entry) => entry.existing.id),\n              compileCreate: () => {\n                throw new CompilerInvariantError(\n                  \"An update-only edge program compiled a create chunk.\",\n                );\n              },\n              compileUpdate: (updates) =>\n                execution.compile(\n                  operationStrategy.buildAtomicEdgeResolvedUpdateBatch(\n                    updates,\n                    timestamp,\n                    input.schemaFence,\n                    atomicSchemaFenceLockClause,\n                  ),\n                ),\n              compileAssertion: (_creates, updates) =>\n                execution.compile(\n                  operationStrategy.buildAssertAtomicEdgeMutationPostimages(\n                    [],\n                    updates,\n                    timestamp,\n                    input.schemaFence,\n                  ),\n                ),\n              compilePostimages: (ids) =>\n                execution.compile(\n                  operationStrategy.buildReadAtomicEdgeMutationPostimages(\n                    input.schemaFence.graphId,\n                    ids,\n                    input.schemaFence,\n                  ),\n                ),\n              decodeRow: (row) => rowMappers.toEdgeRow(row),\n              rowId: (row) => row.id,\n            });\n            try {\n              const result = await atomicExecutor.execute(program);\n              return result.updated;\n            } catch (error) {\n              if (\n                isAtomicMutationPostimageRefusal(\n                  error,\n                  operationStrategy,\n                  \"edge\",\n                  true,\n                )\n              ) {\n                return [];\n              }\n              throw error;\n            }\n          },\n          { maxEntries },\n        ) satisfies AtomicEdgeResolvedUpdateBatchExecutor;\n\n        return { executeAtomicEdgeResolvedUpdateBatch };\n      })();\n\n  const atomicEdgeResolvedMutationSetMembers: Readonly<{\n    executeAtomicEdgeResolvedMutationSet?: AtomicEdgeResolvedMutationSetLowerer;\n  }> =\n    (\n      atomicSqlProgramExecutor === undefined ||\n      schemaFenceLockClause === undefined\n    ) ?\n      {}\n    : (() => {\n        const atomicExecutor = requireDefined(atomicSqlProgramExecutor);\n        const atomicSchemaFenceLockClause = requireDefined(\n          schemaFenceLockClause,\n        );\n        // As for nodes, the guarded update is the widest per-member statement;\n        // every other slot is independently chunked under the same budget.\n        const statementChunkSize = atomicResolvedMutationStatementChunkSize(\n          maxBindParameters,\n          ATOMIC_EDGE_RESOLVED_MUTATION_PARAMS_PER_ENTRY,\n        );\n        const maxEntries =\n          atomicResolvedMutationSubmissionMaxEntries(statementChunkSize);\n\n        const executeAtomicEdgeResolvedMutationSet = Object.assign(\n          async (\n            input: Omit<AtomicEdgeResolvedMutationSetInput, \"kind\">,\n          ): Promise<AtomicEdgeResolvedMutationSetResult> => {\n            const entryCount = input.creates.length + input.updates.length;\n            if (entryCount === 0) return { created: [], updated: [] };\n            assertResolvedEdgeMutationSetInput(\n              input.creates,\n              input.updates,\n              input.schemaFence,\n            );\n            let timestamp = nowIso();\n            while (\n              input.updates.some(\n                (entry) => entry.existing.updated_at === timestamp,\n              )\n            ) {\n              timestamp = new Date(Date.parse(timestamp) + 1).toISOString();\n            }\n            const program = buildAtomicResolvedMutationSetProgram({\n              entity: \"edge\",\n              createChunks: chunkArray(\n                input.creates,\n                Math.min(\n                  batchConfig.edgeSchemaFencedInsertBatchSize,\n                  statementChunkSize,\n                ),\n              ),\n              updateChunks: chunkArray(input.updates, statementChunkSize),\n              createIds: input.creates.map((entry) => entry.id),\n              updateIds: input.updates.map((entry) => entry.existing.id),\n              compileCreate: (chunk) =>\n                execution.compile(\n                  operationStrategy.buildInsertEdgesBatchReturningWithSchemaFence(\n                    chunk,\n                    timestamp,\n                    input.schemaFence,\n                    atomicSchemaFenceLockClause,\n                  ),\n                ),\n              compileUpdate: (updates) =>\n                execution.compile(\n                  operationStrategy.buildAtomicEdgeResolvedUpdateBatch(\n                    updates,\n                    timestamp,\n                    input.schemaFence,\n                    atomicSchemaFenceLockClause,\n                  ),\n                ),\n              compileAssertion: (creates, updates) =>\n                execution.compile(\n                  operationStrategy.buildAssertAtomicEdgeMutationPostimages(\n                    creates,\n                    updates,\n                    timestamp,\n                    input.schemaFence,\n                  ),\n                ),\n              compilePostimages: (ids) =>\n                execution.compile(\n                  operationStrategy.buildReadAtomicEdgeMutationPostimages(\n                    input.schemaFence.graphId,\n                    ids,\n                    input.schemaFence,\n                  ),\n                ),\n              decodeRow: (row) => rowMappers.toEdgeRow(row),\n              rowId: (row) => row.id,\n            });\n\n            try {\n              return await executeClassifiedAtomicEdgeBatch(\n                atomicExecutor,\n                program,\n                operationStrategy.primaryKeyConstraints.edges,\n                operationStrategy.atomicEdgeRefusalConstraints,\n                input.creates,\n                [],\n              );\n            } catch (error) {\n              if (\n                isAtomicMutationPostimageRefusal(\n                  error,\n                  operationStrategy,\n                  \"edge\",\n                  true,\n                )\n              ) {\n                return { created: [], updated: [] };\n              }\n              throw error;\n            }\n          },\n          {\n            maxEntries,\n          },\n        );\n\n        return { executeAtomicEdgeResolvedMutationSet } satisfies Readonly<{\n          executeAtomicEdgeResolvedMutationSet: AtomicEdgeResolvedMutationSetLowerer;\n        }>;\n      })();\n\n  const atomicEdgeMutationProgramMembers =\n    (\n      atomicEdgeConvergenceMembers.executeAtomicEdgeConvergence === undefined ||\n      atomicEdgeResolvedMutationSetMembers.executeAtomicEdgeResolvedMutationSet ===\n        undefined\n    ) ?\n      {}\n    : (() => {\n        const convergence = requireDefined(\n          atomicEdgeConvergenceMembers.executeAtomicEdgeConvergence,\n        );\n        const resolvedSet = requireDefined(\n          atomicEdgeResolvedMutationSetMembers.executeAtomicEdgeResolvedMutationSet,\n        );\n        async function executeAtomicEdgeMutation(\n          input: AtomicEdgeResolvedMutationSetInput,\n        ): Promise<AtomicEdgeResolvedMutationSetResult>;\n        async function executeAtomicEdgeMutation(\n          input: AtomicEdgeConvergenceInput,\n        ): Promise<readonly AtomicEdgeConvergenceResult[]>;\n        async function executeAtomicEdgeMutation(\n          input:\n            AtomicEdgeResolvedMutationSetInput | AtomicEdgeConvergenceInput,\n        ): Promise<\n          | AtomicEdgeResolvedMutationSetResult\n          | readonly AtomicEdgeConvergenceResult[]\n        > {\n          switch (input.kind) {\n            case \"resolved-set\": {\n              return resolvedSet({\n                creates: input.creates,\n                updates: input.updates,\n                schemaFence: input.schemaFence,\n              });\n            }\n            case \"durable-convergence\": {\n              return convergence({\n                entries: input.entries,\n                schemaFence: input.schemaFence,\n              });\n            }\n            default: {\n              input satisfies never;\n              throw new CompilerInvariantError(\n                \"Atomic edge mutation program received an unknown variant.\",\n              );\n            }\n          }\n        }\n        const executeAtomicEdgeMutationProgram = Object.assign(\n          executeAtomicEdgeMutation,\n          {\n            maxEntries: {\n              resolvedSet: resolvedSet.maxEntries,\n              durableConvergence: convergence.maxEntries,\n            },\n          },\n        ) satisfies AtomicEdgeMutationProgramExecutor;\n        return { executeAtomicEdgeMutationProgram };\n      })();\n\n  const schemaGraphWriteLockNamespace = options.schemaGraphWriteLockNamespace;\n  const buildLockSchemaVersionAndGraphWrite =\n    operationStrategy.buildLockSchemaVersionAndGraphWrite;\n  const schemaGraphWriteFenceSql = options.fenceSql;\n  const schemaGraphWriteFenceMembers =\n    (\n      schemaGraphWriteLockNamespace === undefined ||\n      buildLockSchemaVersionAndGraphWrite === undefined ||\n      schemaGraphWriteFenceSql === undefined\n    ) ?\n      {}\n    : {\n        async lockSchemaVersionAndGraphWrite(params: SchemaWriteFenceParams) {\n          const row = await execution.execGet<Record<string, unknown>>(\n            buildLockSchemaVersionAndGraphWrite(\n              params,\n              schemaGraphWriteLockNamespace,\n              schemaGraphWriteFenceSql,\n            ),\n          );\n          if (row !== undefined) {\n            return normalizeGraphCommandIsolation(row[\"transaction_isolation\"]);\n          }\n\n          // A blocked `FOR SHARE` can recheck the old active row out of its\n          // statement snapshot without substituting the winner's new row. As\n          // in the ordinary fence, diagnose with a fresh, non-locking read.\n          const settledRow = await execution.execGet<Record<string, unknown>>(\n            operationStrategy.buildGetActiveSchema(params.graphId),\n          );\n          const settled =\n            settledRow === undefined ? undefined : (\n              rowMappers.toSchemaVersionRow(settledRow)\n            );\n          throw new StaleVersionError({\n            graphId: params.graphId,\n            expected: params.expectedVersion,\n            actual: settled?.version ?? 0,\n          });\n        },\n      };\n\n  const buildEdgeCardinalityInsert =\n    operationStrategy.buildInsertEdgeIfEndpointsLiveWithCardinalityClaim;\n  const executeEdgeCardinalityInsert =\n    (\n      options.edgeCardinalityInsertFusion === true &&\n      buildEdgeCardinalityInsert !== undefined\n    ) ?\n      async function executeEdgeCardinalityInsert(\n        params: InsertEdgeParams,\n        claim: ClaimEdgeCardinalityParams,\n      ): Promise<EdgeRow | undefined> {\n        assertMatchingFusedEdgeClaim(params, claim);\n        const query = buildEdgeCardinalityInsert(params, claim, nowIso());\n        const row = await withEdgeInsertClassification(\n          () =>\n            withDuplicateKeyClassification(\n              () => execution.execGet<Record<string, unknown>>(query),\n              {\n                entity: \"edge\",\n                relation: operationStrategy.primaryKeyConstraints.edges,\n                attempted: attemptedInserts([params]),\n                matchIdentities: attemptedEdgeMatchIdentities([params]),\n              },\n            ),\n          [params],\n        );\n        return row === undefined ? undefined : rowMappers.toEdgeRow(row);\n      }\n    : undefined;\n\n  const buildInsertNodeWithProjections =\n    operationStrategy.buildInsertNodeWithProjections;\n\n  async function executeNodeManagedCreate(\n    plan: ManagedNodeCreatePlan,\n  ): Promise<NodeCreateCommandResult> {\n    if (plan.mode.kind === \"schema-fenced\") {\n      assertMatchingNodeSchemaFence(plan.params, plan.mode.schemaFence);\n    }\n    if (plan.claims.length > 0 && plan.mode.kind === \"schema-fenced\") {\n      return {\n        outcome: \"unsupported\",\n        entity: \"node\",\n        dimensions: [\"schemaFence\", \"claims\"],\n      };\n    }\n    const rephasedPlan =\n      options.nodeClaimInsertFusion === true ?\n        undefined\n      : rephaseNonTransactionalNodeClaimPlan(plan);\n    if (\n      plan.claims.length > 0 &&\n      options.nodeClaimInsertFusion !== true &&\n      rephasedPlan === undefined\n    ) {\n      return { outcome: \"unsupported\", entity: \"node\", dimensions: [\"claims\"] };\n    }\n    const executablePlan = rephasedPlan ?? plan;\n    const { params } = executablePlan;\n    const plannedClaims = executablePlan.claims;\n    if (\n      executablePlan.mode.kind === \"schema-fenced\" &&\n      options.schemaFenceLockClause === undefined\n    ) {\n      return {\n        outcome: \"unsupported\",\n        entity: \"node\",\n        dimensions: [\"schemaFence\"],\n      };\n    }\n    if (\n      executablePlan.projections.length > 0 &&\n      (options.nodeProjectionInsertFusion !== true ||\n        buildInsertNodeWithProjections === undefined)\n    ) {\n      return {\n        outcome: \"unsupported\",\n        entity: \"node\",\n        dimensions: [\"projections\"],\n      };\n    }\n\n    if (\n      (plannedClaims.length > 0 || executablePlan.projections.length > 0) &&\n      buildInsertNodeWithProjections === undefined\n    ) {\n      return {\n        outcome: \"unsupported\",\n        entity: \"node\",\n        dimensions:\n          plannedClaims.length === 0 ? [\"projections\"]\n          : executablePlan.projections.length === 0 ? [\"claims\"]\n          : [\"claims\", \"projections\"],\n      };\n    }\n\n    if (plannedClaims.length === 0 && executablePlan.projections.length === 0) {\n      const query =\n        executablePlan.mode.kind === \"schema-fenced\" ?\n          operationStrategy.buildInsertNodeWithSchemaFence(\n            params,\n            nowIso(),\n            executablePlan.mode.schemaFence,\n            options.schemaFenceLockClause ?? drizzleSql.raw(\"\"),\n          )\n        : operationStrategy.buildInsertNode(params, nowIso());\n      const row = await withDuplicateKeyClassification(\n        () => execution.execGet<Record<string, unknown>>(query),\n        {\n          entity: \"node\",\n          relation: operationStrategy.primaryKeyConstraints.nodes,\n          attempted: attemptedInserts([params]),\n        },\n      );\n      return row === undefined ?\n          { outcome: \"rejected\", entity: \"node\", reason: \"unknown\" }\n        : {\n            outcome: \"created\",\n            entity: \"node\",\n            row: rowMappers.toNodeRow(row),\n          };\n    }\n\n    if (buildInsertNodeWithProjections === undefined) {\n      throw new CompilerInvariantError(\n        \"The backend accepted a managed node plan it cannot compile.\",\n        { graphId: params.graphId, kind: params.kind, id: params.id },\n      );\n    }\n    const query = buildInsertNodeWithProjections(\n      params,\n      executablePlan,\n      nowIso(),\n      options.schemaFenceLockClause,\n    );\n    if (query === undefined) {\n      return {\n        outcome: \"unsupported\",\n        entity: \"node\",\n        dimensions: [\"projections\"],\n      };\n    }\n    await options.beforeNodeProjectionInsert?.(params, executablePlan);\n    const row = await (async () => {\n      try {\n        return await withDuplicateKeyClassification(\n          () => execution.execGet<Record<string, unknown>>(query),\n          {\n            entity: \"node\",\n            relation: operationStrategy.primaryKeyConstraints.nodes,\n            attempted: attemptedInserts([params]),\n          },\n        );\n      } catch (error) {\n        if (options.refuseNodeProjectionError !== undefined) {\n          return options.refuseNodeProjectionError(\n            params,\n            executablePlan,\n            error,\n          );\n        }\n        throw error;\n      }\n    })();\n    if (row?.[\"write_discriminator\"] === \"claim_conflict\") {\n      const constraintName = row[\"claim_constraint_name\"];\n      const holderKind = row[\"claim_holder_kind\"];\n      const holderId = row[\"claim_holder_id\"];\n      const axis = row[\"claim_axis\"];\n      if (\n        typeof constraintName !== \"string\" ||\n        typeof holderKind !== \"string\" ||\n        typeof holderId !== \"string\" ||\n        typeof axis !== \"string\"\n      ) {\n        throw new CompilerInvariantError(\n          \"A planned node claim refusal returned incomplete conflict metadata.\",\n          { graphId: params.graphId, kind: params.kind, id: params.id },\n        );\n      }\n      const conflictingClaim = plannedClaims.find((claim) => {\n        if (\n          claim.constraintName !== constraintName ||\n          claim.key !== row[\"claim_key\"]\n        ) {\n          return false;\n        }\n        if (claim.verdict.kind === \"disjointness\") {\n          return claim.axis === axis;\n        }\n        return claim.verdict.probeAxes.includes(axis);\n      });\n      const fields =\n        conflictingClaim?.verdict.kind === \"uniqueness\" ?\n          conflictingClaim.verdict.fields\n        : [];\n      throw new UniquenessError({\n        constraintName,\n        kind: holderKind,\n        existingId: holderId,\n        newId: params.id,\n        fields,\n        axis,\n      });\n    }\n    if (row === undefined && executablePlan.mode.kind === \"ordinary\") {\n      throw new DatabaseOperationError(\n        \"Fused node projection insert failed: no row returned\",\n        { operation: \"insert\", entity: \"node\", reason: \"no_row_returned\" },\n      );\n    }\n    return row === undefined ?\n        { outcome: \"rejected\", entity: \"node\", reason: \"unknown\" }\n      : { outcome: \"created\", entity: \"node\", row: rowMappers.toNodeRow(row) };\n  }\n\n  async function executeEdgeEndpointInsert(\n    params: InsertEdgeParams,\n  ): Promise<EdgeRow | undefined> {\n    const query = operationStrategy.buildInsertEdgeIfEndpointsLive(\n      params,\n      nowIso(),\n    );\n    const row = await withEdgeInsertClassification(\n      () =>\n        withDuplicateKeyClassification(\n          () => execution.execGet<Record<string, unknown>>(query),\n          {\n            entity: \"edge\",\n            relation: operationStrategy.primaryKeyConstraints.edges,\n            attempted: attemptedInserts([params]),\n            matchIdentities: attemptedEdgeMatchIdentities([params]),\n          },\n        ),\n      [params],\n    );\n    return row === undefined ? undefined : rowMappers.toEdgeRow(row);\n  }\n\n  async function executeEdgeSchemaFencedInsert(\n    params: InsertEdgeParams,\n    schemaFence: SchemaWriteFenceParams,\n  ): Promise<EdgeRow | undefined> {\n    const schemaLockClause = options.schemaFenceLockClause;\n    if (schemaLockClause === undefined) {\n      throw new ConfigurationError(\n        \"This backend cannot execute a managed edge create with a schema fence.\",\n        {\n          capability: \"commands\",\n          command: \"edge.create\",\n          dimension: \"schemaFence\",\n        },\n      );\n    }\n    const query =\n      operationStrategy.buildInsertEdgeIfEndpointsLiveWithSchemaFence(\n        params,\n        nowIso(),\n        schemaFence,\n        schemaLockClause,\n      );\n    const row = await withEdgeInsertClassification(\n      () =>\n        withDuplicateKeyClassification(\n          () => execution.execGet<Record<string, unknown>>(query),\n          {\n            entity: \"edge\",\n            relation: operationStrategy.primaryKeyConstraints.edges,\n            attempted: attemptedInserts([params]),\n            matchIdentities: attemptedEdgeMatchIdentities([params]),\n          },\n        ),\n      [params],\n    );\n    return row === undefined ? undefined : rowMappers.toEdgeRow(row);\n  }\n\n  async function executeEdgeManagedCreate(\n    plan: ManagedEdgeCreatePlan,\n  ): Promise<EdgeCreateCommandResult> {\n    const { params } = plan;\n    if (\n      plan.schemaFence !== undefined &&\n      plan.schemaFence.graphId !== params.graphId\n    ) {\n      throw new CompilerInvariantError(\n        \"A managed edge create's schema fence must match its edge graph.\",\n        {\n          edgeGraphId: params.graphId,\n          fenceGraphId: plan.schemaFence.graphId,\n          id: params.id,\n        },\n      );\n    }\n    if (plan.schemaFence !== undefined && plan.cardinalityClaim !== undefined) {\n      return {\n        outcome: \"unsupported\",\n        entity: \"edge\",\n        dimensions: [\"schemaFence\", \"cardinalityClaim\"],\n      };\n    }\n    if (\n      plan.schemaFence !== undefined &&\n      options.schemaFenceLockClause === undefined\n    ) {\n      return {\n        outcome: \"unsupported\",\n        entity: \"edge\",\n        dimensions: [\"schemaFence\"],\n      };\n    }\n    if (\n      plan.cardinalityClaim !== undefined &&\n      executeEdgeCardinalityInsert === undefined\n    ) {\n      return {\n        outcome: \"unsupported\",\n        entity: \"edge\",\n        dimensions: [\"cardinalityClaim\"],\n      };\n    }\n\n    let row: EdgeRow | undefined;\n    if (plan.schemaFence !== undefined) {\n      row = await executeEdgeSchemaFencedInsert(params, plan.schemaFence);\n    } else if (plan.cardinalityClaim === undefined) {\n      row = await executeEdgeEndpointInsert(params);\n    } else {\n      // The unsupported case is returned above before any SQL executes.\n      if (executeEdgeCardinalityInsert === undefined) {\n        throw new CompilerInvariantError(\n          \"Edge create plan support changed between preflight and execution.\",\n          {\n            capability: \"commands\",\n            command: \"edge.create\",\n            dimension: \"cardinalityClaim\",\n          },\n        );\n      }\n      row = await executeEdgeCardinalityInsert(params, plan.cardinalityClaim);\n    }\n\n    return row === undefined ?\n        { outcome: \"rejected\", entity: \"edge\", reason: \"unknown\" }\n      : { outcome: \"created\", entity: \"edge\", row };\n  }\n\n  async function executeEdgeConvergeCreate(\n    command: EdgeConvergeCreateCommand,\n    context: GraphCommandExecutionContext,\n  ): Promise<EdgeConvergeCreateCommandResult> {\n    const { plan } = command;\n    const { params } = plan;\n    if (\n      plan.schemaFence !== undefined &&\n      plan.schemaFence.graphId !== params.graphId\n    ) {\n      throw new CompilerInvariantError(\n        \"A convergent edge create's schema fence must match its edge graph.\",\n        {\n          edgeGraphId: params.graphId,\n          fenceGraphId: plan.schemaFence.graphId,\n          id: params.id,\n        },\n      );\n    }\n    const durable = command.match.kind === \"durable\";\n    // Dynamic convergence still requires the caller's coordinated snapshot.\n    // Durable convergence delegates that decision to the row-level unique\n    // arbiter and may therefore execute directly on a root session.\n    if (\n      plan.cardinalityClaim !== undefined ||\n      operationStrategy.buildConvergeEdgeCreate === undefined ||\n      (!durable && !options.dynamicEdgeConvergence) ||\n      (!durable && context.coordination === \"none\") ||\n      (plan.schemaFence !== undefined &&\n        options.schemaFenceLockClause === undefined)\n    ) {\n      return {\n        outcome: \"unsupported\",\n        entity: \"edge\",\n        dimensions: [\"convergence\"],\n      };\n    }\n\n    const query = operationStrategy.buildConvergeEdgeCreate({\n      params,\n      match: command.match,\n      timestamp: nowIso(),\n      ...(plan.schemaFence === undefined ?\n        {}\n      : {\n          schemaFence: plan.schemaFence,\n          schemaLockClause: requireDefined(options.schemaFenceLockClause),\n        }),\n    });\n    const row = await withEdgeInsertClassification(\n      () =>\n        withDuplicateKeyClassification(\n          () => execution.execGet<Record<string, unknown>>(query),\n          {\n            entity: \"edge\",\n            relation: operationStrategy.primaryKeyConstraints.edges,\n            attempted: attemptedInserts([params]),\n            matchIdentities: attemptedEdgeMatchIdentities([params]),\n          },\n        ),\n      [params],\n      command.match.kind === \"durable\" ?\n        command.match.identity.name\n      : undefined,\n    );\n    if (row === undefined) {\n      return { outcome: \"rejected\", entity: \"edge\", reason: \"unknown\" };\n    }\n    switch (row[\"write_discriminator\"]) {\n      case 0:\n      case \"0\": {\n        return {\n          outcome: \"found\",\n          entity: \"edge\",\n          row: rowMappers.toEdgeRow(row),\n        };\n      }\n      case 1:\n      case \"1\": {\n        return {\n          outcome: \"created\",\n          entity: \"edge\",\n          row: rowMappers.toEdgeRow(row),\n        };\n      }\n      default: {\n        throw new CompilerInvariantError(\n          \"A convergent edge create returned an unknown write discriminator.\",\n          { graphId: params.graphId, kind: params.kind, id: params.id },\n        );\n      }\n    }\n  }\n\n  async function executeCommand(\n    command: GraphCommand,\n    context: GraphCommandExecutionContext,\n  ): Promise<GraphCommandResult> {\n    assertGraphCommandExecutionContext(context);\n    if (context.session !== commandSession) {\n      throw new CompilerInvariantError(\n        \"An authoritative graph command context does not match its bound command port.\",\n        { boundSession: commandSession, contextSession: context.session },\n      );\n    }\n    if (context.coordination !== \"none\") {\n      assertGraphCommandCoordination(\n        commandsPort,\n        command,\n        context.coordination,\n      );\n    }\n    switch (command.kind) {\n      case \"node.create\": {\n        return executeNodeManagedCreate(command.plan);\n      }\n      case \"edge.create\": {\n        return executeEdgeManagedCreate(command.plan);\n      }\n      case \"edge.converge-create\": {\n        if (context.coordination !== \"none\") {\n          // Keep the built-in port safe for direct callers that bypass the\n          // public authoritative-command helper.\n          assertGraphCommandConvergenceIsolation(\n            commandsPort,\n            context.coordination,\n          );\n        }\n        return executeEdgeConvergeCreate(command, context);\n      }\n      default: {\n        command satisfies never;\n        throw new CompilerInvariantError(\n          \"The command port received an unknown command.\",\n          { capability: \"commands\" },\n        );\n      }\n    }\n  }\n\n  const commandsPort = { session: commandSession, execute: executeCommand };\n\n  async function executeNodeSetUpdate(\n    params: CompareAndSetNodeParams | UpdateNodeSetParams,\n  ): Promise<UpdateNodeSetResult> {\n    const timestamp = nowIso();\n    const query = operationStrategy.buildUpdateNodeSet(params, timestamp);\n    const rows = await execution.execAll<Record<string, unknown>>(query);\n    const updatedRows = rows.map((row) => rowMappers.toNodeRow(row));\n    return { affectedCount: updatedRows.length, rows: updatedRows };\n  }\n\n  return {\n    tableExists,\n\n    ...schemaFenceMembers,\n    ...atomicNodeBatchMembers,\n    ...atomicEdgeBatchMembers,\n    ...atomicNodeDeleteBatchMembers,\n    ...atomicNodeResolvedUpdateBatchMembers,\n    ...atomicNodeResolvedMutationSetMembers,\n    ...atomicEdgeDeleteBatchMembers,\n    ...atomicEdgeResolvedUpdateBatchMembers,\n    ...atomicEdgeMutationProgramMembers,\n    ...schemaGraphWriteFenceMembers,\n    commands: commandsPort,\n\n    async executeSchemaDdl(ddl: string): Promise<void> {\n      await execution.execRun(asCompiledStatementSql(sql.raw(ddl)));\n    },\n\n    async executeStatement(query: CompiledStatementSql): Promise<void> {\n      await execution.execRun(query);\n    },\n\n    async executeTemporaryStatement(\n      query: CompiledTemporaryStatementSql,\n    ): Promise<void> {\n      await execution.execRun(query);\n    },\n\n    async insertNode(params: InsertNodeParams): Promise<NodeRow> {\n      const timestamp = nowIso();\n      const query = operationStrategy.buildInsertNode(params, timestamp);\n      const row = await withDuplicateKeyClassification(\n        () => execution.execGet<Record<string, unknown>>(query),\n        {\n          entity: \"node\",\n          relation: operationStrategy.primaryKeyConstraints.nodes,\n          attempted: attemptedInserts([params]),\n        },\n      );\n      if (!row)\n        throw new DatabaseOperationError(\n          \"Insert node failed: no row returned\",\n          {\n            operation: \"insert\",\n            entity: \"node\",\n            reason: \"no_row_returned\",\n          },\n        );\n      return rowMappers.toNodeRow(row);\n    },\n\n    async insertNodeIfAbsent(\n      params: InsertNodeParams,\n    ): Promise<NodeRow | undefined> {\n      const query = operationStrategy.buildInsertNodeIfAbsent(params, nowIso());\n      const row = await execution.execGet<Record<string, unknown>>(query);\n      return row === undefined ? undefined : rowMappers.toNodeRow(row);\n    },\n\n    async insertNodeNoReturn(params: InsertNodeParams): Promise<void> {\n      const timestamp = nowIso();\n      const query = operationStrategy.buildInsertNodeNoReturn(\n        params,\n        timestamp,\n      );\n      await withDuplicateKeyClassification(() => execution.execRun(query), {\n        entity: \"node\",\n        relation: operationStrategy.primaryKeyConstraints.nodes,\n        attempted: attemptedInserts([params]),\n      });\n    },\n\n    async insertNodesBatch(params: readonly InsertNodeParams[]): Promise<void> {\n      if (params.length === 0) {\n        return;\n      }\n      const timestamp = nowIso();\n      for (const chunk of chunkArray(params, batchConfig.nodeInsertBatchSize)) {\n        const query = operationStrategy.buildInsertNodesBatch(chunk, timestamp);\n        await withDuplicateKeyClassification(() => execution.execRun(query), {\n          entity: \"node\",\n          relation: operationStrategy.primaryKeyConstraints.nodes,\n          attempted: attemptedInserts(chunk),\n        });\n      }\n    },\n\n    async insertNodesBatchReturning(\n      params: readonly InsertNodeParams[],\n    ): Promise<readonly NodeRow[]> {\n      if (params.length === 0) {\n        return [];\n      }\n      const timestamp = nowIso();\n      const allRows: NodeRow[] = [];\n      for (const chunk of chunkArray(params, batchConfig.nodeInsertBatchSize)) {\n        const query = operationStrategy.buildInsertNodesBatchReturning(\n          chunk,\n          timestamp,\n        );\n        const rows = await withDuplicateKeyClassification(\n          () => execution.execAll<Record<string, unknown>>(query),\n          {\n            entity: \"node\",\n            relation: operationStrategy.primaryKeyConstraints.nodes,\n            attempted: attemptedInserts(chunk),\n          },\n        );\n        allRows.push(...rows.map((row) => rowMappers.toNodeRow(row)));\n      }\n      return allRows;\n    },\n\n    async getNode(\n      graphId: string,\n      kind: string,\n      id: string,\n    ): Promise<NodeRow | undefined> {\n      const query = operationStrategy.buildGetNode(graphId, kind, id);\n      const row = await execution.execGet<Record<string, unknown>>(query);\n      return row ? rowMappers.toNodeRow(row) : undefined;\n    },\n\n    async getNodes(\n      graphId: string,\n      kind: string,\n      ids: readonly string[],\n    ): Promise<readonly NodeRow[]> {\n      if (ids.length === 0) return [];\n      const allRows: NodeRow[] = [];\n      for (const chunk of chunkArray(ids, batchConfig.getNodesChunkSize)) {\n        const query = operationStrategy.buildGetNodes(graphId, kind, chunk);\n        const rows = await execution.execAll<Record<string, unknown>>(query);\n        allRows.push(...rows.map((row) => rowMappers.toNodeRow(row)));\n      }\n      return allRows;\n    },\n\n    async updateNode(params: UpdateNodeParams): Promise<NodeRow> {\n      const timestamp = nowIso();\n      const query = operationStrategy.buildUpdateNode(params, timestamp);\n      const row = await execution.execGet<Record<string, unknown>>(query);\n      if (!row)\n        throw new DatabaseOperationError(\n          \"Update node failed: no row returned\",\n          {\n            operation: \"update\",\n            entity: \"node\",\n            reason: \"no_row_returned\",\n          },\n        );\n      return rowMappers.toNodeRow(row);\n    },\n\n    async updateResolvedNodesBatch(\n      params: ResolvedNodeUpdateBatchParams,\n    ): Promise<readonly NodeRow[]> {\n      if (params.entries.length === 0) return [];\n      const first = requireDefined(params.entries[0]);\n      if (\n        !resolvedNodeUpdateBatchFitsBindBudget(\n          params.entries.length,\n          maxBindParameters,\n        )\n      ) {\n        throw new ConfigurationError(\n          \"Resolved node update batch exceeds the backend bind-parameter budget\",\n          {\n            operation: \"updateResolvedNodesBatch\",\n            capability: \"maxBindParameters\",\n            maxBindParameters,\n          },\n        );\n      }\n      if (\n        params.entries.some(\n          (entry) =>\n            entry.graphId !== first.graphId || entry.kind !== first.kind,\n        ) ||\n        new Set(params.entries.map((entry) => entry.id)).size !==\n          params.entries.length\n      ) {\n        throw new ConfigurationError(\n          \"Resolved node update batches require distinct ids from one graph and kind\",\n          { operation: \"updateResolvedNodesBatch\", kind: first.kind },\n        );\n      }\n      const query = operationStrategy.buildResolvedNodeUpdateBatch(\n        params,\n        nowIso(),\n      );\n      const rows = await execution.execAll<Record<string, unknown>>(query);\n      return rows.map((row) => rowMappers.toNodeRow(row));\n    },\n\n    async updateNodeSet(\n      params: UpdateNodeSetParams,\n    ): Promise<UpdateNodeSetResult> {\n      if (\n        Object.keys(params.patch).length === 0 &&\n        (params.unsetProperties?.length ?? 0) === 0\n      ) {\n        throw new ConfigurationError(\n          \"Set-based node update requires at least one property\",\n          { operation: \"updateNodeSet\", kind: params.kind },\n        );\n      }\n      if (params.candidateIdColumn.length === 0) {\n        throw new ConfigurationError(\n          \"Set-based node update requires a candidate id column\",\n          { operation: \"updateNodeSet\", kind: params.kind },\n        );\n      }\n      return executeNodeSetUpdate(params);\n    },\n\n    async compareAndSetNode(\n      params: CompareAndSetNodeParams,\n    ): Promise<UpdateNodeSetResult> {\n      if (\n        Object.keys(params.patch).length === 0 &&\n        (params.unsetProperties?.length ?? 0) === 0\n      ) {\n        throw new ConfigurationError(\n          \"Node compare-and-set requires at least one property patch\",\n          { operation: \"compareAndSetNode\", kind: params.kind },\n        );\n      }\n      if (Object.keys(params.expected).length === 0) {\n        throw new ConfigurationError(\n          \"Node compare-and-set requires at least one expected property\",\n          { operation: \"compareAndSetNode\", kind: params.kind },\n        );\n      }\n      return executeNodeSetUpdate(params);\n    },\n\n    async deleteNode(params: DeleteNodeParams): Promise<void> {\n      const timestamp = nowIso();\n      const query = operationStrategy.buildDeleteNode(params, timestamp);\n      await execution.execRun(query);\n    },\n\n    // IMPORTANT: This cascade is not atomic. Callers must ensure this runs\n    // within a transaction to prevent partial deletion on intermediate failure.\n    //\n    // Embeddings are NOT cleaned up here: they live in per-`(nodeKind,\n    // fieldPath)` strategy-owned tables addressable only with the slot\n    // context the graph-agnostic backend lacks. The store's hard-delete\n    // path (`executeNodeHardDelete`) drives `deleteNodeEmbeddings`, which\n    // resolves each embedding field and routes a per-field\n    // `backend.deleteEmbedding` through the active vector strategy.\n    async hardDeleteNode(params: HardDeleteNodeParams): Promise<void> {\n      const deleteUniquesQuery = operationStrategy.buildHardDeleteUniquesByNode(\n        params.graphId,\n        params.kind,\n        params.id,\n      );\n      await execution.execRun(deleteUniquesQuery);\n\n      const deleteFulltextStatements =\n        operationStrategy.buildDeleteFulltextByNode(\n          params.graphId,\n          params.kind,\n          params.id,\n        );\n      for (const stmt of deleteFulltextStatements) {\n        await execution.execRun(stmt);\n      }\n\n      const deleteEdgesQuery = operationStrategy.buildHardDeleteEdgesByNode(\n        params.graphId,\n        params.kind,\n        params.id,\n      );\n      await execution.execRun(deleteEdgesQuery);\n\n      const query = operationStrategy.buildHardDeleteNode(params);\n      await execution.execRun(query);\n    },\n\n    async insertEdge(params: InsertEdgeParams): Promise<EdgeRow> {\n      const timestamp = nowIso();\n      const query = operationStrategy.buildInsertEdge(params, timestamp);\n      const row = await withEdgeInsertClassification(\n        () =>\n          withDuplicateKeyClassification(\n            () => execution.execGet<Record<string, unknown>>(query),\n            {\n              entity: \"edge\",\n              relation: operationStrategy.primaryKeyConstraints.edges,\n              attempted: attemptedInserts([params]),\n              matchIdentities: attemptedEdgeMatchIdentities([params]),\n            },\n          ),\n        [params],\n      );\n      if (!row)\n        throw new DatabaseOperationError(\n          \"Insert edge failed: no row returned\",\n          {\n            operation: \"insert\",\n            entity: \"edge\",\n            reason: \"no_row_returned\",\n          },\n        );\n      return rowMappers.toEdgeRow(row);\n    },\n\n    async insertEdgeNoReturn(params: InsertEdgeParams): Promise<void> {\n      const timestamp = nowIso();\n      const query = operationStrategy.buildInsertEdgeNoReturn(\n        params,\n        timestamp,\n      );\n      await withEdgeInsertClassification(\n        () =>\n          withDuplicateKeyClassification(() => execution.execRun(query), {\n            entity: \"edge\",\n            relation: operationStrategy.primaryKeyConstraints.edges,\n            attempted: attemptedInserts([params]),\n            matchIdentities: attemptedEdgeMatchIdentities([params]),\n          }),\n        [params],\n      );\n    },\n\n    async insertEdgesBatch(params: readonly InsertEdgeParams[]): Promise<void> {\n      if (params.length === 0) {\n        return;\n      }\n      const timestamp = nowIso();\n      for (const chunk of chunkArray(params, batchConfig.edgeInsertBatchSize)) {\n        const query = operationStrategy.buildInsertEdgesBatch(chunk, timestamp);\n        await withEdgeInsertClassification(\n          () =>\n            withDuplicateKeyClassification(() => execution.execRun(query), {\n              entity: \"edge\",\n              relation: operationStrategy.primaryKeyConstraints.edges,\n              attempted: attemptedInserts(chunk),\n              matchIdentities: attemptedEdgeMatchIdentities(chunk),\n            }),\n          chunk,\n        );\n      }\n    },\n\n    async insertEdgesBatchReturning(\n      params: readonly InsertEdgeParams[],\n    ): Promise<readonly EdgeRow[]> {\n      if (params.length === 0) {\n        return [];\n      }\n      const timestamp = nowIso();\n      const allRows: EdgeRow[] = [];\n      for (const chunk of chunkArray(params, batchConfig.edgeInsertBatchSize)) {\n        const query = operationStrategy.buildInsertEdgesBatchReturning(\n          chunk,\n          timestamp,\n        );\n        const rows = await withEdgeInsertClassification(\n          () =>\n            withDuplicateKeyClassification(\n              () => execution.execAll<Record<string, unknown>>(query),\n              {\n                entity: \"edge\",\n                relation: operationStrategy.primaryKeyConstraints.edges,\n                attempted: attemptedInserts(chunk),\n                matchIdentities: attemptedEdgeMatchIdentities(chunk),\n              },\n            ),\n          chunk,\n        );\n        allRows.push(...rows.map((row) => rowMappers.toEdgeRow(row)));\n      }\n      return allRows;\n    },\n\n    async insertEdgesDurableBatchReturning(\n      params: readonly InsertEdgeParams[],\n    ): Promise<readonly EdgeRow[]> {\n      if (params.length === 0) return [];\n      const missingIdentityIds = params\n        .filter((item) => item.matchIdentity === undefined)\n        .map((item) => item.id);\n      if (missingIdentityIds.length > 0) {\n        throw new CompilerInvariantError(\n          \"A durable edge batch requires match identity storage on every row.\",\n          { missingIds: missingIdentityIds },\n        );\n      }\n      const timestamp = nowIso();\n      const allRows: EdgeRow[] = [];\n      for (const chunk of chunkArray(params, batchConfig.edgeInsertBatchSize)) {\n        const query = operationStrategy.buildInsertEdgesDurableBatchReturning(\n          chunk,\n          timestamp,\n        );\n        const rows = await withEdgeInsertClassification(\n          () =>\n            withDuplicateKeyClassification(\n              () => execution.execAll<Record<string, unknown>>(query),\n              {\n                entity: \"edge\",\n                relation: operationStrategy.primaryKeyConstraints.edges,\n                attempted: attemptedInserts(chunk),\n                matchIdentities: attemptedEdgeMatchIdentities(chunk),\n              },\n            ),\n          chunk,\n        );\n        allRows.push(...rows.map((row) => rowMappers.toEdgeRow(row)));\n      }\n      return allRows;\n    },\n\n    async getEdge(graphId: string, id: string): Promise<EdgeRow | undefined> {\n      const query = operationStrategy.buildGetEdge(graphId, id);\n      const row = await execution.execGet<Record<string, unknown>>(query);\n      return row ? rowMappers.toEdgeRow(row) : undefined;\n    },\n\n    async getEdges(\n      graphId: string,\n      ids: readonly string[],\n    ): Promise<readonly EdgeRow[]> {\n      if (ids.length === 0) return [];\n      const allRows: EdgeRow[] = [];\n      for (const chunk of chunkArray(ids, batchConfig.getEdgesChunkSize)) {\n        const query = operationStrategy.buildGetEdges(graphId, chunk);\n        const rows = await execution.execAll<Record<string, unknown>>(query);\n        allRows.push(...rows.map((row) => rowMappers.toEdgeRow(row)));\n      }\n      return allRows;\n    },\n\n    async updateEdge(params: UpdateEdgeParams): Promise<EdgeRow> {\n      const timestamp = nowIso();\n      const query = operationStrategy.buildUpdateEdge(params, timestamp);\n      const row = await execution.execGet<Record<string, unknown>>(query);\n      if (!row)\n        throw new DatabaseOperationError(\n          \"Update edge failed: no row returned\",\n          {\n            operation: \"update\",\n            entity: \"edge\",\n            reason: \"no_row_returned\",\n          },\n        );\n      return rowMappers.toEdgeRow(row);\n    },\n\n    async deleteEdge(params: DeleteEdgeParams): Promise<void> {\n      const timestamp = nowIso();\n      const query = operationStrategy.buildDeleteEdge(params, timestamp);\n      await execution.execRun(query);\n    },\n\n    async hardDeleteEdge(params: HardDeleteEdgeParams): Promise<void> {\n      const query = operationStrategy.buildHardDeleteEdge(params);\n      await execution.execRun(query);\n    },\n\n    async deleteEdgesBatch(params: DeleteEdgesBatchParams): Promise<void> {\n      if (params.ids.length === 0) return;\n      const timestamp = nowIso();\n      // `getEdgesChunkSize` budgets graphId + ids. Soft delete additionally\n      // binds the tombstone timestamp and, when stated, the asserted kind.\n      const softDeleteChunkSize = Math.max(\n        1,\n        batchConfig.getEdgesChunkSize - 1 - (params.kind === undefined ? 0 : 1),\n      );\n      for (const chunk of chunkArray(params.ids, softDeleteChunkSize)) {\n        const query = operationStrategy.buildDeleteEdgesBatch(\n          {\n            graphId: params.graphId,\n            ids: chunk,\n            ...(params.kind === undefined ? {} : { kind: params.kind }),\n          },\n          timestamp,\n        );\n        await execution.execRun(query);\n      }\n    },\n\n    async hardDeleteEdgesBatch(params: DeleteEdgesBatchParams): Promise<void> {\n      if (params.ids.length === 0) return;\n      const hardDeleteChunkSize = Math.max(\n        1,\n        batchConfig.getEdgesChunkSize - (params.kind === undefined ? 0 : 1),\n      );\n      for (const chunk of chunkArray(params.ids, hardDeleteChunkSize)) {\n        const query = operationStrategy.buildHardDeleteEdgesBatch({\n          graphId: params.graphId,\n          ids: chunk,\n          ...(params.kind === undefined ? {} : { kind: params.kind }),\n        });\n        await execution.execRun(query);\n      }\n    },\n\n    async countEdgesFrom(params: CountEdgesFromParams): Promise<number> {\n      const query = operationStrategy.buildCountEdgesFrom(params);\n      const row = await execution.execGet<{ count: string | number }>(query);\n      return Number(row?.count ?? 0);\n    },\n\n    async edgeExistsBetween(params: EdgeExistsBetweenParams): Promise<boolean> {\n      const query = operationStrategy.buildEdgeExistsBetween(params);\n      const row = await execution.execGet<Record<string, unknown>>(query);\n      return row !== undefined;\n    },\n\n    async findEdgesConnectedTo(\n      params: FindEdgesConnectedToParams,\n    ): Promise<readonly EdgeRow[]> {\n      const query = operationStrategy.buildFindEdgesConnectedTo(params);\n      const rows = await execution.execAll<Record<string, unknown>>(query);\n      return rows.map((row) => rowMappers.toEdgeRow(row));\n    },\n\n    async findNodesByKind(\n      params: FindNodesByKindParams,\n    ): Promise<readonly NodeRow[]> {\n      const query = operationStrategy.buildFindNodesByKind(params);\n      const rows = await execution.execAll<Record<string, unknown>>(query);\n      return rows.map((row) => rowMappers.toNodeRow(row));\n    },\n\n    async countNodesByKind(params: CountNodesByKindParams): Promise<number> {\n      const query = operationStrategy.buildCountNodesByKind(params);\n      const row = await execution.execGet<{ count: string | number }>(query);\n      return Number(row?.count ?? 0);\n    },\n\n    async findEdgesByKind(\n      params: FindEdgesByKindParams,\n    ): Promise<readonly EdgeRow[]> {\n      const query = operationStrategy.buildFindEdgesByKind(params);\n      const rows = await execution.execAll<Record<string, unknown>>(query);\n      return rows.map((row) => rowMappers.toEdgeRow(row));\n    },\n\n    async findEdgesByEndpointSet(\n      params: FindEdgesByEndpointSetParams,\n    ): Promise<readonly EdgeRow[]> {\n      const ids = resolveEdgeEndpointIds(params);\n      // Each endpoint id lands in exactly one chunk (the set is deduped), so\n      // every endpoint's rows come back from a single statement in that\n      // statement's order — the per-endpoint ordering and `limitPerEndpoint`\n      // cap therefore hold across the whole read even though the concatenated\n      // result is only globally ordered when one chunk covers the set.\n      const edgeRows: EdgeRow[] = [];\n      for (const idChunk of chunkArray(\n        ids,\n        batchConfig.findEdgesEndpointChunkSize,\n      )) {\n        const query = operationStrategy.buildFindEdgesByEndpointSet(\n          params,\n          idChunk,\n        );\n        const rows = await execution.execAll<Record<string, unknown>>(query);\n        for (const row of rows) edgeRows.push(rowMappers.toEdgeRow(row));\n      }\n      return edgeRows;\n    },\n\n    async findEdgesByHeterogeneousEndpointSet(\n      params: FindEdgesByHeterogeneousEndpointSetParams,\n    ): Promise<readonly EdgeRow[]> {\n      const { edgeKinds, endpoints, endpointChunkSize } =\n        resolveHeterogeneousEdgeRead(params, maxBindParameters);\n      if (edgeKinds.length === 0 || endpoints.length === 0) return [];\n\n      const edgeRows: EdgeRow[] = [];\n      for (const endpointChunk of chunkArray(endpoints, endpointChunkSize)) {\n        const query =\n          operationStrategy.buildFindEdgesByHeterogeneousEndpointSet(\n            params,\n            endpointChunk,\n            edgeKinds,\n          );\n        const rows = await execution.execAll<Record<string, unknown>>(query);\n        for (const row of rows) edgeRows.push(rowMappers.toEdgeRow(row));\n      }\n      return edgeRows;\n    },\n\n    async countEdgesByKind(params: CountEdgesByKindParams): Promise<number> {\n      const query = operationStrategy.buildCountEdgesByKind(params);\n      const row = await execution.execGet<{ count: string | number }>(query);\n      return Number(row?.count ?? 0);\n    },\n\n    async insertUnique(params: InsertUniqueParams): Promise<void> {\n      const query = operationStrategy.buildInsertUnique(params);\n      const result = await execution.execGet<{\n        node_id: string;\n        concrete_kind: string;\n      }>(query);\n\n      if (\n        result &&\n        !isSameClaimOwner(\n          { concreteKind: result.concrete_kind, nodeId: result.node_id },\n          claimOwnerOf(params),\n        )\n      ) {\n        throw new UniquenessError({\n          constraintName: params.constraintName,\n          // The holder's own kind, never `nodeKind`: that column carries the\n          // claim AXIS, which a shared scope folds across kinds, so it need not\n          // be the holder's kind and usually is not.\n          kind: result.concrete_kind,\n          existingId: result.node_id,\n          newId: params.nodeId,\n          fields: [],\n          // The axis THIS statement attempted — `mapClaimRefusal`'s only way to\n          // tell two disjoint pairs (or two scoped constraints) sharing a key\n          // apart, since `constraintName` alone does not.\n          axis: params.nodeKind,\n        });\n      }\n    },\n\n    async insertUniqueBatch(\n      entries: readonly InsertUniqueParams[],\n    ): Promise<void> {\n      if (entries.length === 0) return;\n\n      // A multi-row upsert cannot affect one row twice, so collapse exact\n      // duplicates and reject two entries claiming the same conflict target\n      // for different OWNERS up front. Comparing ids alone would dedupe a\n      // namesake under another kind into the first entry's claim and accept\n      // both — the in-statement twin of the conflict the row-level arms refuse.\n      // Batch validation pre-rejects real conflicts, so this is a defensive\n      // invariant, not a semantic path.\n      const targetKey = (entry: InsertUniqueParams): string =>\n        `${entry.nodeKind}\\u0000${entry.constraintName}\\u0000${entry.key}`;\n      const byTarget = new Map<string, InsertUniqueParams>();\n      for (const entry of entries) {\n        const existing = byTarget.get(targetKey(entry));\n        if (existing === undefined) {\n          byTarget.set(targetKey(entry), entry);\n          continue;\n        }\n        if (!isSameClaimOwner(claimOwnerOf(existing), claimOwnerOf(entry))) {\n          throw new UniquenessError({\n            constraintName: entry.constraintName,\n            kind: existing.concreteKind,\n            existingId: existing.nodeId,\n            newId: entry.nodeId,\n            fields: [],\n            axis: entry.nodeKind,\n          });\n        }\n      }\n      const deduped = [...byTarget.values()];\n\n      for (const chunk of chunkArray(\n        deduped,\n        batchConfig.uniqueInsertBatchSize,\n      )) {\n        const query = operationStrategy.buildInsertUniqueBatch(chunk);\n        const rows = await execution.execAll<{\n          node_kind: string;\n          constraint_name: string;\n          key: string;\n          node_id: string;\n          concrete_kind: string;\n        }>(query);\n        const ownerByTarget = new Map<string, ClaimOwner>(\n          rows.map((row) => [\n            `${row.node_kind}\\u0000${row.constraint_name}\\u0000${row.key}`,\n            { concreteKind: row.concrete_kind, nodeId: row.node_id },\n          ]),\n        );\n        for (const entry of chunk) {\n          const owner = ownerByTarget.get(targetKey(entry));\n          if (\n            owner !== undefined &&\n            !isSameClaimOwner(owner, claimOwnerOf(entry))\n          ) {\n            throw new UniquenessError({\n              constraintName: entry.constraintName,\n              kind: owner.concreteKind,\n              existingId: owner.nodeId,\n              newId: entry.nodeId,\n              fields: [],\n              axis: entry.nodeKind,\n            });\n          }\n        }\n      }\n    },\n\n    async deleteUnique(params: DeleteUniqueParams): Promise<void> {\n      const timestamp = nowIso();\n      const query = operationStrategy.buildDeleteUnique(params, timestamp);\n      await execution.execRun(query);\n    },\n\n    async hardDeleteUniquesByNodeIds(\n      params: HardDeleteUniquesByNodeIdsParams,\n    ): Promise<void> {\n      const nodeIds = [...new Set(params.nodeIds)];\n      for (const chunk of chunkArray(\n        nodeIds,\n        batchConfig.uniqueDeleteChunkSize,\n      )) {\n        const query = operationStrategy.buildHardDeleteUniquesByNodeIds({\n          ...params,\n          nodeIds: chunk,\n        });\n        await execution.execRun(query);\n      }\n    },\n\n    async hardDeleteUniquesByConcreteKind(\n      params: HardDeleteUniquesByConcreteKindParams,\n    ): Promise<void> {\n      const query =\n        operationStrategy.buildHardDeleteUniquesByConcreteKind(params);\n      await execution.execRun(query);\n    },\n\n    async claimEdgeCardinality(\n      params: ClaimEdgeCardinalityParams,\n    ): Promise<EdgeClaimOutcome> {\n      const [outcome] = await claimEdgeCardinalityEntries([params]);\n      return outcome ?? { status: \"claimed\" };\n    },\n\n    claimEdgeCardinalityGuarded,\n\n    claimEdgeCardinalityBatch(\n      entries: readonly ClaimEdgeCardinalityParams[],\n    ): Promise<readonly EdgeClaimOutcome[]> {\n      return claimEdgeCardinalityEntries(entries);\n    },\n\n    async purgeEdgeClaims(params: PurgeEdgeClaimsParams): Promise<void> {\n      const edgeIds = [...new Set(params.edgeIds)];\n      // One claim row per edge at most, so the edge-read chunk budget is the\n      // right ceiling for a list of edge ids.\n      for (const chunk of chunkArray(edgeIds, batchConfig.getEdgesChunkSize)) {\n        const query = operationStrategy.buildPurgeEdgeClaims({\n          ...params,\n          edgeIds: chunk,\n        });\n        await execution.execRun(query);\n      }\n    },\n\n    async readConstraintFenceViolations(\n      params: ReadConstraintFenceViolationsParams,\n    ): Promise<ConstraintFenceViolationRows> {\n      const uniqueRows =\n        params.uniqueConstraintNames.length === 0 ?\n          []\n        : await execution.execAll<{\n            node_kind: string;\n            constraint_name: string;\n            key: string;\n            concrete_kind: string;\n            node_id: string;\n          }>(\n            operationStrategy.buildContendedUniqueRowAudit(\n              params.graphId,\n              params.uniqueConstraintNames,\n            ),\n          );\n      const contendedUniqueRows = uniqueRows.map((row) => ({\n        nodeKind: row.node_kind,\n        constraintName: row.constraint_name,\n        key: row.key,\n        concreteKind: row.concrete_kind,\n        nodeId: row.node_id,\n      }));\n\n      // One statement per declared cardinality, because that is the\n      // granularity at which the population's key and liveness differ.\n      const edgeKindsByCardinality = new Map<\n        ConstrainedCardinality,\n        string[]\n      >();\n      for (const declaration of params.edgeCardinalities) {\n        const kinds = edgeKindsByCardinality.get(declaration.cardinality) ?? [];\n        kinds.push(declaration.edgeKind);\n        edgeKindsByCardinality.set(declaration.cardinality, kinds);\n      }\n      const contendedEdgeRows: ContendedEdgeRow[] = [];\n      for (const [cardinality, edgeKinds] of edgeKindsByCardinality) {\n        const rows = await execution.execAll<{\n          edge_id: string;\n          edge_kind: string;\n          from_kind: string;\n          from_id: string;\n          to_kind: string;\n          to_id: string;\n        }>(\n          operationStrategy.buildContendedEdgeRowAudit(\n            params.graphId,\n            cardinality,\n            edgeKinds,\n          ),\n        );\n        for (const row of rows) {\n          contendedEdgeRows.push({\n            edgeKind: row.edge_kind,\n            cardinality,\n            edgeId: row.edge_id,\n            fromKind: row.from_kind,\n            fromId: row.from_id,\n            toKind: row.to_kind,\n            toId: row.to_id,\n          });\n        }\n      }\n\n      const disjointOverlaps: DisjointOverlapRow[] = [];\n      for (const kinds of params.disjointKindPairs) {\n        const rows = await execution.execAll<{ node_id: string }>(\n          operationStrategy.buildDisjointOverlapAudit(params.graphId, kinds),\n        );\n        for (const row of rows)\n          disjointOverlaps.push({ kinds, nodeId: row.node_id });\n      }\n\n      return { contendedUniqueRows, contendedEdgeRows, disjointOverlaps };\n    },\n\n    async checkUnique(\n      params: CheckUniqueParams,\n    ): Promise<UniqueRow | undefined> {\n      const query = operationStrategy.buildCheckUnique(params);\n      const row = await execution.execGet<Record<string, unknown>>(query);\n      return row ? rowMappers.toUniqueRow(row) : undefined;\n    },\n\n    async checkUniqueBatch(\n      params: CheckUniqueBatchParams,\n    ): Promise<readonly UniqueRow[]> {\n      if (params.keys.length === 0) return [];\n      const allRows: UniqueRow[] = [];\n      for (const chunk of chunkArray(\n        params.keys,\n        batchConfig.checkUniqueBatchChunkSize,\n      )) {\n        const query = operationStrategy.buildCheckUniqueBatch({\n          ...params,\n          keys: chunk,\n        });\n        const rows = await execution.execAll<Record<string, unknown>>(query);\n        allRows.push(...rows.map((row) => rowMappers.toUniqueRow(row)));\n      }\n      return allRows;\n    },\n\n    async getActiveSchema(\n      graphId: string,\n    ): Promise<SchemaVersionRow | undefined> {\n      const query = operationStrategy.buildGetActiveSchema(graphId);\n      const row = await execution.execGet<Record<string, unknown>>(query);\n      return row ? rowMappers.toSchemaVersionRow(row) : undefined;\n    },\n\n    async getSchemaVersion(\n      graphId: string,\n      version: number,\n    ): Promise<SchemaVersionRow | undefined> {\n      const query = operationStrategy.buildGetSchemaVersion(graphId, version);\n      const row = await execution.execGet<Record<string, unknown>>(query);\n      return row ? rowMappers.toSchemaVersionRow(row) : undefined;\n    },\n\n    async commitSchemaVersion(\n      params: CommitSchemaVersionParams,\n    ): Promise<SchemaVersionRow> {\n      // The top-level backend wraps this method in a transaction with\n      // appropriate write-locking (BEGIN IMMEDIATE on SQLite,\n      // pg_advisory_xact_lock on Postgres) so the read-then-write\n      // sequence below is serialized against concurrent commits.\n\n      const existingRaw = await execution.execGet<Record<string, unknown>>(\n        operationStrategy.buildGetSchemaVersion(params.graphId, params.version),\n      );\n      const actualActiveVersion = await readActiveVersion(params.graphId);\n\n      // Same-version-different-hash → content conflict. Always wins\n      // over CAS: a hash disagreement is operator-intervention\n      // territory regardless of which writer \"got there first.\"\n      if (existingRaw !== undefined) {\n        const existing = rowMappers.toSchemaVersionRow(existingRaw);\n        if (existing.schema_hash !== params.schemaHash) {\n          throw new SchemaContentConflictError({\n            graphId: params.graphId,\n            version: params.version,\n            existingHash: existing.schema_hash,\n            incomingHash: params.schemaHash,\n          });\n        }\n        // Same-version-same-hash already active → idempotent success.\n        // Skips the CAS intentionally: same hash means identical\n        // content, so there's no disagreement for the caller to refetch.\n        if (existing.is_active) {\n          return existing;\n        }\n        // Same-version-same-hash but inactive: orphan row left by a\n        // crashed earlier commit. Reactivation requires CAS because\n        // we're about to flip the active pointer — fall through.\n        verifyExpectedActiveVersion(\n          params.graphId,\n          params.expected,\n          actualActiveVersion,\n        );\n        const reactivate = operationStrategy.buildSetActiveSchema(\n          params.graphId,\n          params.version,\n        );\n        await execution.execRun(reactivate.deactivateAll);\n        await execution.execRun(reactivate.activateVersion);\n        // Project the result instead of re-SELECTing: the partial\n        // unique index guarantees this is the only active row for the\n        // graph after the UPDATEs above.\n        return { ...existing, is_active: true };\n      }\n\n      verifyExpectedActiveVersion(\n        params.graphId,\n        params.expected,\n        actualActiveVersion,\n      );\n\n      // Fresh insert path. For the \"active\" expected case, deactivate\n      // the prior active row first so the partial unique index (one\n      // active per graph) is satisfied at every statement boundary.\n      // The \"initial\" case has no prior active, so skip.\n      //\n      // `tests/backends/postgres/schema-write-fence-race.test.ts` reproduces\n      // this ordering by hand to hold a flip uncommitted; changing it there\n      // too keeps the Postgres write fence's race coverage honest.\n      if (params.expected.kind === \"active\") {\n        const flip = operationStrategy.buildSetActiveSchema(\n          params.graphId,\n          params.version,\n        );\n        await execution.execRun(flip.deactivateAll);\n      }\n\n      const timestamp = nowIso();\n      const insertQuery = operationStrategy.buildInsertSchema(\n        {\n          graphId: params.graphId,\n          version: params.version,\n          schemaHash: params.schemaHash,\n          schemaDoc: params.schemaDoc,\n          isActive: true,\n        },\n        timestamp,\n      );\n      const insertedRaw =\n        await execution.execGet<Record<string, unknown>>(insertQuery);\n      if (!insertedRaw) {\n        throw new DatabaseOperationError(\n          \"Insert schema failed: no row returned\",\n          { operation: \"insert\", entity: \"schema\" },\n        );\n      }\n      return rowMappers.toSchemaVersionRow(insertedRaw);\n    },\n\n    async setActiveVersion(params: SetActiveVersionParams): Promise<void> {\n      const actualActiveVersion = await readActiveVersion(params.graphId);\n      verifyExpectedActiveVersion(\n        params.graphId,\n        params.expected,\n        actualActiveVersion,\n      );\n\n      const targetRaw = await execution.execGet<Record<string, unknown>>(\n        operationStrategy.buildGetSchemaVersion(params.graphId, params.version),\n      );\n      if (!targetRaw) {\n        throw new MigrationError(\n          `Cannot activate version ${params.version}: version does not exist for graph \"${params.graphId}\".`,\n          {\n            graphId: params.graphId,\n            fromVersion: actualActiveVersion,\n            toVersion: params.version,\n            reason: \"version-not-found\",\n          },\n        );\n      }\n\n      const queries = operationStrategy.buildSetActiveSchema(\n        params.graphId,\n        params.version,\n      );\n      await execution.execRun(queries.deactivateAll);\n      await execution.execRun(queries.activateVersion);\n    },\n\n    async clearGraph(graphId: string): Promise<void> {\n      const statements = operationStrategy.buildClearGraph(graphId);\n      for (const statement of statements) {\n        await runIgnorableClearStatement(statement);\n      }\n    },\n  };\n}\n","/**\n * The four schema-commit members every SQL engine profile exposes:\n * `commitSchemaVersion`, `commitSchemaVersionIfKindsEmpty`,\n * `commitSchemaVersionWithPreflight`, and `setActiveVersion`. All four are a\n * full mirror — same body, same delegation — because every dialect\n * difference already lives one layer down, inside the write-fence-holding\n * transaction runner this group calls through `runSchemaWriteTransaction`\n * rather than reimplementing.\n *\n * `runSchemaWriteTransaction` comes from `EngineLateMembers.fence`\n * (`../profile.ts`), which is why this group is assembled inside\n * `createSqlBackend` after a profile's `lateMembers(ctx)` runs, rather than\n * living in `EngineAssemblyContext` itself or being folded into\n * `lateMembers` directly: it depends on a value `lateMembers` produces, not\n * one it receives.\n *\n * The populated-kind guard plus commit (the member of the same name this\n * group exposes delegates to it) is imported directly from\n * `operation-backend-core.ts`, the module that implements it once for both\n * dialects: this file is wired into `createSqlBackend` itself, a published\n * entrypoint root, but that entrypoint's module tree already imports\n * `drizzle-orm` as a value elsewhere (the contribution-marker member group\n * it assembles, and the fulltext gate it applies, both come from modules\n * that import it at module scope), so this import adds no new reach into a\n * real Drizzle package that was not already there.\n */\nimport type {\n  CommitSchemaVersionIfKindsEmptyResult,\n  CommitSchemaVersionParams,\n  SchemaKindEmptinessProbe,\n  SchemaVersionRow,\n  SchemaWriteTransactionBackend,\n  SetActiveVersionParams,\n} from \"../../../types\";\nimport {\n  commitSchemaVersionIfKindsEmpty,\n  type InternalOperationBackend,\n} from \"../../operation-backend-core\";\n\nexport type CreateSchemaVersionMembersDeps = Readonly<{\n  /**\n   * The internal, write-fence-holding transaction runner every member below\n   * delegates to. Its uniform `(graphId, fn)` signature is what lets this\n   * body stay dialect-agnostic: PostgreSQL's implementation locks the named\n   * graph's schema row inside `fn`; SQLite's ignores `graphId` because its\n   * schema lock is per-connection, not per-graph. `fn` receives the full\n   * `InternalOperationBackend`, not the narrower `SchemaWriteTransactionBackend`\n   * a caller's own preflight runs against — this runner is the trusted\n   * internal caller the lock exists to gate.\n   */\n  runSchemaWriteTransaction: <T>(\n    graphId: string,\n    fn: (target: InternalOperationBackend) => Promise<T>,\n  ) => Promise<T>;\n}>;\n\nexport type SchemaVersionMembers = Readonly<{\n  commitSchemaVersion: (\n    params: CommitSchemaVersionParams,\n  ) => Promise<SchemaVersionRow>;\n  commitSchemaVersionIfKindsEmpty: (\n    params: CommitSchemaVersionParams,\n    probes: readonly SchemaKindEmptinessProbe[],\n  ) => Promise<CommitSchemaVersionIfKindsEmptyResult>;\n  commitSchemaVersionWithPreflight: (\n    params: CommitSchemaVersionParams,\n    // The schema-write target, not the narrowed transaction backend: a\n    // preflight may have to CREATE the storage it then fills, and that DDL\n    // belongs in this transaction rather than before it.\n    preflight: (target: SchemaWriteTransactionBackend) => Promise<void>,\n  ) => Promise<SchemaVersionRow>;\n  setActiveVersion: (params: SetActiveVersionParams) => Promise<void>;\n}>;\n\n/**\n * Builds the schema-commit member group. Moved out of the two dialect files\n * unchanged: same fenced commit, same populated-kind guard, same\n * preflight-then-commit sequencing, same fenced `setActiveVersion`.\n */\nexport function createSchemaVersionMembers(\n  deps: CreateSchemaVersionMembersDeps,\n): SchemaVersionMembers {\n  const { runSchemaWriteTransaction } = deps;\n\n  return {\n    async commitSchemaVersion(\n      params: CommitSchemaVersionParams,\n    ): Promise<SchemaVersionRow> {\n      return runSchemaWriteTransaction(params.graphId, (target) =>\n        target.commitSchemaVersion(params),\n      );\n    },\n\n    async commitSchemaVersionIfKindsEmpty(\n      params: CommitSchemaVersionParams,\n      probes: readonly SchemaKindEmptinessProbe[],\n    ): Promise<CommitSchemaVersionIfKindsEmptyResult> {\n      return runSchemaWriteTransaction(params.graphId, (target) =>\n        commitSchemaVersionIfKindsEmpty(target, params, probes),\n      );\n    },\n\n    async commitSchemaVersionWithPreflight(\n      params: CommitSchemaVersionParams,\n      preflight: (target: SchemaWriteTransactionBackend) => Promise<void>,\n    ): Promise<SchemaVersionRow> {\n      return runSchemaWriteTransaction(params.graphId, async (target) => {\n        await preflight(target);\n        return target.commitSchemaVersion(params);\n      });\n    },\n\n    async setActiveVersion(params: SetActiveVersionParams): Promise<void> {\n      await runSchemaWriteTransaction(params.graphId, (target) =>\n        target.setActiveVersion(params),\n      );\n    },\n  };\n}\n","/**\n * The one factory every SQL engine profile is assembled through.\n *\n * `createSqlBackend` owns what is the same for every SQL engine: deriving\n * the final capabilities, building the ONE write-fence target and resolving\n * its plan once, refusing a profile that cannot back the marks it is about\n * to earn, resolving the profile's opaque `assembly` (`./assembly`) into its\n * `buildOperations`/`lateMembers` pair, building the contribution-marker and\n * operation-backend layers from the profile's own deps, assembling every\n * mirrored adapter member group, auditing the backend's resource shape, and\n * applying the trust marks and atomic-program registrations. A profile owns\n * only what genuinely differs between engines.\n */\nimport { ConfigurationError } from \"../../../errors\";\nimport { WRITE_MEMBER_KEYS } from \"../../../store/operations/write-members\";\nimport { requireDefined } from \"../../../utils/presence\";\nimport { registerSerializationFailureClassifier } from \"../../../utils/sql-errors\";\nimport {\n  isFirstPartyProfile,\n  markFirstPartyFactory,\n  resolveWriteFencePlan,\n  writeFenceDeclarationLine,\n  type WriteFenceTarget,\n} from \"../../capabilities/write-fence\";\nimport { deriveBackend, type ExactBackendOverlay } from \"../../derive-backend\";\nimport { GRAPH_BACKEND_MEMBER_CLASSES } from \"../../member-classes\";\nimport {\n  createSerializedExecutionQueue,\n  runWithSerializedQueue,\n  type SerializedExecutionQueue,\n} from \"../../serialized-execution-queue\";\nimport { auditBackendResource } from \"../../transaction-resource\";\nimport type {\n  AdapterBackend,\n  GraphCommandPort,\n  SchemaWriteTransactionBackend,\n  TransactionBackend,\n} from \"../../types\";\nimport { gateFulltextMethods } from \"../contribution-materializations\";\nimport { resolveEngineAssembly } from \"./assembly\";\nimport { finalizeEngineCapabilities } from \"./capabilities\";\nimport { applyEngineMarks } from \"./marks\";\nimport { createBaseSchemaMembers } from \"./members/base-schema-members\";\nimport { createContributionMembers } from \"./members/contribution-members\";\nimport { createGraphTemplateMembers } from \"./members/graph-template-members\";\nimport { createIdentityMembers } from \"./members/identity-members\";\nimport { createIndexMaterializationMembers } from \"./members/index-materialization-members\";\nimport { createKindRemovalMembers } from \"./members/kind-removal-members\";\nimport { createSchemaVersionMembers } from \"./members/schema-version-members\";\nimport type { EngineAssemblyContext, SqlEngineProfile } from \"./profile\";\n\n/**\n * `provisioning`-class members excluded from the caller-serialized queue\n * because they derive text synchronously without ever executing SQL:\n * `identityTableDdl` / `recordedTableDdl` return a DDL string array/record\n * built from table names alone, with no `Promise` in their real signature.\n * Queuing either through {@link buildQueuedWriteUnits}'s generic\n * \"re-wrap as `(...) => runWithSerializedQueue(...)`\" path would silently\n * turn its synchronous return value into a `Promise`, breaking every\n * caller that reads the result without awaiting — a change in kind, not\n * degree, for a member that touches no connection at all.\n */\nconst PROVISIONING_DERIVATION_MEMBER_KEYS = [\n  \"identityTableDdl\",\n  \"recordedTableDdl\",\n] as const;\n\n/**\n * `provisioning`-class members excluded because none is itself a callable\n * write: `catalog` is a bag of read-only introspection probes\n * (`BackendCatalogProbes`), `lineage` is a bag of read-only revision/delta\n * probes (`LineageMembers`), and `recordedTime` is a bag of a read-only\n * source function and a revision-clock read (`EngineRecordedTimeMembers`) —\n * none a function itself. `buildQueuedWriteUnits` already skips any\n * non-function member it reads, so an included `catalog`, `lineage`, or\n * `recordedTime` would be silently dropped regardless — all three are named\n * here so the totality ratchet in `tests/caller-serialized-queue.test.ts`\n * sees a documented exclusion instead of an accidental one.\n */\nconst PROVISIONING_PROBE_MEMBER_KEYS = [\n  \"catalog\",\n  \"lineage\",\n  \"recordedTime\",\n] as const;\n\n/**\n * `rawSql`-class member excluded for the same reason as the two provisioning\n * derivations above: `compileSql` turns a `SqlFragment` into\n * `{ sql, params }` synchronously and never touches a connection. The other\n * four raw-SQL members — `execute`, `executeRaw`, `executeStatement`,\n * `executeTemporaryStatement` — all dispatch through the execution\n * adapter's `execRun`/`execGet` against the live connection and CAN carry a\n * write, so they stay queued even though the member classification does not\n * call any of the five a \"write\".\n */\nconst RAW_SQL_DERIVATION_MEMBER_KEYS = [\"compileSql\"] as const;\n\n/**\n * The `lifecycle`-class member excluded from the generic per-member wrap:\n * `\"close\"` is handled by {@link buildQueuedWriteUnits}'s own disposal\n * wrapper below (it must run, and dispose the queue, even with queued work\n * outstanding), never by routing through the queue itself. The class's other\n * two members flow through unexcluded: `\"transaction\"` is queued like any\n * other lifecycle member (it is also, descriptively, one of the two\n * transaction openers this factory relies on — see\n * {@link QUEUED_ROOT_MEMBER_KEYS}'s own doc comment), and `\"clearGraph\"` —\n * the class's one genuine destructive write — is queued the same way.\n */\nconst LIFECYCLE_EXCLUDED_MEMBER_KEYS = [\"close\"] as const;\n\n/**\n * The one `AdapterBackend`-only member that opens a TypeGraph-managed\n * transaction — not part of `keyof GraphBackend`, so `member-classes.ts`'s\n * taxonomy does not (and structurally cannot) name it; `transaction`, the\n * other opener, reaches {@link QUEUED_ROOT_MEMBER_KEYS} through the\n * `lifecycle` class instead, and a schema-write transaction opener\n * (`schemaWriteTransaction`) reaches it through the `schema` class.\n * `adoptTransaction`, the third `AdapterBackend`-only member, is\n * deliberately ABSENT from every list here: it is refused outright under\n * `caller-serialized` rather than queued — see\n * {@link buildQueuedWriteUnits}'s own `adoptTransaction` override.\n */\nconst TRANSACTION_OPENER_MEMBER_KEYS = [\"transactionWithNative\"] as const;\n\n/**\n * Every root member a `caller-serialized` write-fence declaration must\n * serialize through the in-process queue this factory builds for it: every\n * member `src/backend/member-classes.ts` classifies in a mutation-capable\n * class — graph-entity writes, their sidecars, backend-owned bulk\n * ingestion, derived-data maintenance, schema commits (including the\n * `schema`-class transaction opener, `schemaWriteTransaction`), DDL and\n * table provisioning, the raw-SQL members that actually execute something,\n * and the lifecycle class's one destructive write (`clearGraph`) — plus\n * `transactionWithNative`, the one `AdapterBackend`-only transaction opener.\n *\n * Read from the taxonomy's own exported classes (`GRAPH_BACKEND_MEMBER_CLASSES`),\n * so a write member a class adds later is queued here automatically, never\n * from a second, hand-kept list this factory would have to remember to\n * update; only the five documented exceptions above (two pure derivations,\n * two probe bags, one raw-SQL compiler) are named individually, each with its\n * own reason, and `tests/caller-serialized-queue.test.ts` pins that this list\n * plus those five exceptions is exactly `keyof AdapterBackend` (minus\n * `adoptTransaction`, refused rather than queued or excluded).\n *\n * Why per-member queueing (rather than, say, one lock spanning every call) is\n * enough: every multi-call write workflow either runs entirely inside one\n * already-queued opener call (`transaction`, `transactionWithNative`,\n * `schemaWriteTransaction`) or relies on its own CAS/claim protocol whose\n * claim writes are themselves individually-queued members of this same set —\n * there is no third shape of multi-statement write this queue would need to\n * span.\n */\nexport const QUEUED_ROOT_MEMBER_KEYS = [\n  ...WRITE_MEMBER_KEYS,\n  ...GRAPH_BACKEND_MEMBER_CLASSES.maintenance,\n  ...GRAPH_BACKEND_MEMBER_CLASSES.schema,\n  ...GRAPH_BACKEND_MEMBER_CLASSES.provisioning,\n  ...GRAPH_BACKEND_MEMBER_CLASSES.rawSql,\n  ...GRAPH_BACKEND_MEMBER_CLASSES.lifecycle,\n  ...TRANSACTION_OPENER_MEMBER_KEYS,\n].filter(\n  (key) =>\n    !(\n      [\n        ...PROVISIONING_DERIVATION_MEMBER_KEYS,\n        ...PROVISIONING_PROBE_MEMBER_KEYS,\n        ...RAW_SQL_DERIVATION_MEMBER_KEYS,\n        ...LIFECYCLE_EXCLUDED_MEMBER_KEYS,\n      ] as readonly string[]\n    ).includes(key),\n);\n\n/**\n * Every `keyof AdapterBackend` member intentionally left OUT of\n * {@link QUEUED_ROOT_MEMBER_KEYS}, each with the one-line reason it stays\n * unqueued: every `read` and `identity` member (never writes / a static\n * description property, not an operation), the two provisioning derivations,\n * the two provisioning probe bags, the one raw-SQL compiler, `close`\n * (this file's own disposal wrapper), and `adoptTransaction` (refused\n * outright rather than queued or silently left alone).\n *\n * `tests/caller-serialized-queue.test.ts`'s totality ratchet partitions the\n * FULL taxonomy plus the two `AdapterBackend`-only members into this\n * record's keys and {@link QUEUED_ROOT_MEMBER_KEYS}, asserting the two sets\n * are disjoint and their union is everything `keyof AdapterBackend` names —\n * so a member a future class reclassifies, or a brand-new member nobody\n * classifies at all, cannot land unqueued silently: it either appears here\n * with a reason, in `QUEUED_ROOT_MEMBER_KEYS`, or fails the ratchet.\n */\nexport const UNQUEUED_ROOT_MEMBER_REASONS: Readonly<Record<string, string>> = {\n  ...Object.fromEntries(\n    GRAPH_BACKEND_MEMBER_CLASSES.read.map(\n      (key) => [key, \"read: never writes\"] as const,\n    ),\n  ),\n  ...Object.fromEntries(\n    GRAPH_BACKEND_MEMBER_CLASSES.identity.map(\n      (key) =>\n        [\n          key,\n          \"identity: a static description property, not a callable operation\",\n        ] as const,\n    ),\n  ),\n  ...Object.fromEntries(\n    PROVISIONING_DERIVATION_MEMBER_KEYS.map(\n      (key) =>\n        [\n          key,\n          \"provisioning derivation: returns DDL text synchronously without executing it\",\n        ] as const,\n    ),\n  ),\n  ...Object.fromEntries(\n    PROVISIONING_PROBE_MEMBER_KEYS.map(\n      (key) =>\n        [\n          key,\n          \"provisioning probe: a bag of read-only introspection functions, not itself callable\",\n        ] as const,\n    ),\n  ),\n  ...Object.fromEntries(\n    RAW_SQL_DERIVATION_MEMBER_KEYS.map(\n      (key) =>\n        [\n          key,\n          \"rawSql derivation: compiles SQL text synchronously without executing it\",\n        ] as const,\n    ),\n  ),\n  close:\n    \"lifecycle: handled by this file's own disposal wrapper, which must run (and dispose the queue) even with queued work outstanding\",\n  adoptTransaction:\n    \"refused outright under caller-serialized (CALLER_SERIALIZED_REFUSES_ADOPTION) rather than queued or left silently unqueued\",\n};\n\n/**\n * Runs `port.execute` through `queue`, keeping `session` untouched. `commands`\n * is the one {@link QUEUED_ROOT_MEMBER_KEYS} member that is a port object\n * rather than a bare function, so {@link buildQueuedWriteUnits} special-cases\n * it here instead of trying to wrap it the same way as every other member.\n */\nfunction queueCommandPort(\n  port: GraphCommandPort,\n  queue: SerializedExecutionQueue,\n): GraphCommandPort {\n  return {\n    session: port.session,\n    execute: (command, context) =>\n      runWithSerializedQueue(queue, () => port.execute(command, context)),\n  };\n}\n\n/**\n * THE refusal `adoptTransaction` becomes on a `caller-serialized` backend:\n * an externally-owned transaction's lifetime is the CALLER's, not something\n * this factory's write-unit queue can hold a slot open for — the caller, not\n * TypeGraph, decides when it commits, so queuing it would either block every\n * other queued write until that external transaction ends (defeating the\n * point of adopting one mid-flight) or — if left unqueued, as it always was\n * before this fence declaration existed — let its writes interleave with the\n * queue's own, silently breaking the very promise `caller-serialized`\n * makes. Refusing outright is the only honest option.\n */\nfunction refuseCallerSerializedAdoption<TTx>(\n  // The real signature's one parameter, accepted (and ignored) so this\n  // matches `AdapterBackend<TTx>[\"adoptTransaction\"]` exactly rather than a\n  // zero-arity stand-in the cast below would otherwise have to paper over.\n  _externalTransaction: TTx,\n): TransactionBackend {\n  throw new ConfigurationError(\n    \"adoptTransaction is unavailable on a caller-serialized backend: an \" +\n      \"externally owned transaction's lifetime cannot be held by the \" +\n      \"backend's write-unit queue, so store.withTransaction(externalTx) is \" +\n      \"refused rather than silently allowed to interleave with queued \" +\n      \"root writes.\",\n    {\n      code: \"CALLER_SERIALIZED_REFUSES_ADOPTION\",\n      member: \"adoptTransaction\" satisfies keyof AdapterBackend<TTx>,\n    },\n    {\n      suggestion:\n        \"Open the transaction through this backend's own transaction()/\" +\n        \"transactionWithNative() instead of adopting an externally opened \" +\n        \"one, or drop the caller-serialized write-fence declaration if \" +\n        \"cross-store adoption is required.\",\n    },\n  );\n}\n\n/**\n * Builds the overlay {@link buildCallerSerializedBackend} decorates `backend`\n * with: every member {@link QUEUED_ROOT_MEMBER_KEYS} names, routed through\n * `queue`; `close`, which disposes `queue` after delegating to `backend`'s\n * own; and `adoptTransaction`, replaced outright with\n * {@link refuseCallerSerializedAdoption} rather than queued or left\n * unqueued.\n *\n * Read with `Reflect.get` rather than static property access, so an OPTIONAL\n * write member this particular backend does not implement is simply absent\n * from the overlay instead of wrapping `undefined`. `deriveBackend` then\n * leaves every member this overlay does not name — every read, and the\n * transaction-handle builders — resolving to `backend`'s own, unqueued\n * implementation; a transaction's own body reaches `backend` directly too\n * (`EngineAssemblyContext.self()`, resolved once in `createSqlBackend`\n * before this function ever runs), which is what lets `transaction`'s\n * internal delegation to `transactionWithNative` run without re-entering\n * this same queue.\n */\nfunction buildQueuedWriteUnits<TTx>(\n  backend: AdapterBackend<TTx>,\n  queue: SerializedExecutionQueue,\n): ExactBackendOverlay<AdapterBackend<TTx>, Partial<AdapterBackend<TTx>>> {\n  const queuedEntries = QUEUED_ROOT_MEMBER_KEYS.flatMap(\n    (key): readonly (readonly [keyof AdapterBackend<TTx>, unknown])[] => {\n      const member: unknown = Reflect.get(backend, key);\n      if (key === \"commands\") {\n        return [[key, queueCommandPort(member as GraphCommandPort, queue)]];\n      }\n      if (typeof member !== \"function\") return [];\n      const original = member as (\n        ...args: readonly unknown[]\n      ) => Promise<unknown>;\n      return [\n        [\n          key,\n          (...args: readonly unknown[]) =>\n            runWithSerializedQueue(queue, () => original(...args)),\n        ],\n      ];\n    },\n  );\n  const close = async (): Promise<void> => {\n    try {\n      await backend.close();\n    } finally {\n      queue.dispose();\n    }\n  };\n  const overlay: Partial<Record<keyof AdapterBackend<TTx>, unknown>> =\n    Object.fromEntries([\n      ...queuedEntries,\n      [\"close\", close],\n      [\n        \"adoptTransaction\",\n        (externalTransaction: TTx) =>\n          refuseCallerSerializedAdoption<TTx>(externalTransaction),\n      ],\n    ]);\n  // `overlay` was built entirely from `QUEUED_ROOT_MEMBER_KEYS` — a subset of\n  // `keyof AdapterBackend<TTx>` derived from the member-classification's\n  // mutation-capable classes plus the transaction openers — and every value\n  // either re-wraps that exact member's own function (same signature, same\n  // return type), narrows `commands` to the identical `GraphCommandPort`\n  // shape, or (for `close`/`adoptTransaction`) implements the exact member\n  // signature `AdapterBackend<TTx>` declares. The cast states a fact the\n  // loop above and the two named entries already establish; it is not a\n  // widening.\n  return overlay as unknown as ExactBackendOverlay<\n    AdapterBackend<TTx>,\n    Partial<AdapterBackend<TTx>>\n  >;\n}\n\n/**\n * The in-process half of a `caller-serialized` write-fence promise: one\n * queue for the whole backend, and a decorated object whose root write units\n * — {@link QUEUED_ROOT_MEMBER_KEYS} — run through it one at a time. Called\n * only when `resolveWriteFencePlan` resolved `kind: \"caller-serialized\"` for\n * this backend.\n *\n * Exported (like `finalizeEngineCapabilities`, `resolveFenceStatements`, and\n * this module's other internals tests reach directly) so\n * `tests/caller-serialized-queue.test.ts` can apply the wrapping to a plain\n * backend by itself and compare the result against the exact pre-wrap\n * object, isolated from the closures `createSqlBackend` builds fresh on\n * every call — the proof `insertNode`, `commands`, etc. is the wrapped\n * function rather than \"a function from a different construction\" has no\n * other way to be meaningful.\n */\nexport function buildCallerSerializedBackend<TTx>(\n  backend: AdapterBackend<TTx>,\n): AdapterBackend<TTx> {\n  const queue = createSerializedExecutionQueue({\n    // \"require\": a caller-serialized declaration's in-process promise\n    // depends on this queue's reentrancy detection actually working — an\n    // undetected nested root write would deadlock a transaction rather than\n    // refuse loudly, silently breaking the promise instead of degrading it.\n    reentrancy: \"require\",\n    subject: \"caller-serialized\",\n  });\n  return deriveBackend(backend, buildQueuedWriteUnits(backend, queue));\n}\n\n/**\n * Assembles one `AdapterBackend` from a {@link SqlEngineProfile}.\n *\n * The write-fence-declaration refusal below is what makes the marking\n * `applyEngineMarks` (`./marks`) performs sound for a profile this factory\n * did not write itself, not only for the two bundled ones: a profile whose\n * resolved capabilities name no `writeFence` is refused outright, because\n * every mark and registration `applyEngineMarks` applies assumes a\n * resolvable write-fence decision, and `resolveWriteFencePlan`'s\n * dialect-derivation fallback is sound only for the two bundled dialects.\n * `applyEngineMarks`'s own doc comment covers its two further gates —\n * `markBundledRootAutocommitEligible` on the profile's `autocommit`\n * declaration, `markSchemaFencedInsertEligible` on the resolved fence plan.\n * A fourth gate, resolved once as `isFirstParty` below and threaded to both\n * `applyEngineMarks` and the fence target this factory builds, decides\n * `markFirstPartyFactory` itself: only the exact profile object\n * `isFirstPartyProfile` (`../../capabilities/write-fence`) recognizes earns\n * that mark, so the dialect-derivation fallback above and the lazy\n * schema-fence lease it feeds stay closed to a profile that merely resembles\n * a bundled one — a copy, spread, or otherwise derived profile is a\n * different object and is never recognized.\n */\nexport function createSqlBackend<TTx>(\n  profile: SqlEngineProfile<TTx>,\n): AdapterBackend<TTx> {\n  if (profile.declaredCapabilities.writeFence === undefined) {\n    throw new ConfigurationError(\n      \"This engine profile declares no usable write fence: \" +\n        \"capabilities.writeFence is absent, so createSqlBackend cannot \" +\n        \"resolve a write-fence decision for it and refuses to mark it as \" +\n        \"fenced. Declare it on the capabilities the profile declares:\\n\\n\" +\n        `${writeFenceDeclarationLine(profile.dialect, \"  \")}\\n\\n` +\n        \"(that is the correct declaration for this profile's dialect).\",\n      {\n        code: \"ENGINE_PROFILE_REQUIRES_WRITE_FENCE_DECLARATION\",\n        dialect: profile.dialect,\n      },\n      {\n        suggestion:\n          \"Declare capabilities.writeFence on this profile's declaredCapabilities.\",\n      },\n    );\n  }\n\n  // Engine-native recorded time keeps no recorded relations of its own: a\n  // graph-merge diff against such a store has nothing to derive a change\n  // delta from except the engine's own `lineage`. Refusing the lopsided\n  // declaration here, at construction, is cheaper than letting it surface\n  // later as an unexplained full-comparison fallback on every merge.\n  if (\n    profile.provisioning.recordedTime !== undefined &&\n    profile.provisioning.lineage === undefined\n  ) {\n    throw new ConfigurationError(\n      \"This engine profile declares `recordedTime` without also declaring \" +\n        \"`lineage`: engine-native recorded time keeps no recorded relations \" +\n        \"of its own, so graph-merge has no other source for this backend's \" +\n        \"change delta. Declare both EngineProvisioning.recordedTime and \" +\n        \"EngineProvisioning.lineage on this profile.\",\n      {\n        code: \"ENGINE_PROFILE_RECORDED_TIME_REQUIRES_LINEAGE\",\n        dialect: profile.dialect,\n      },\n      {\n        suggestion:\n          \"Declare EngineProvisioning.lineage alongside EngineProvisioning.recordedTime on this profile.\",\n      },\n    );\n  }\n\n  // Resolved once and reused for every mark below: whether `profile` is the\n  // exact object one of the two bundled builders returned, not merely an\n  // object shaped like one. Only that object was ever registered, so this\n  // is `false` for any profile assembled elsewhere — including one built\n  // by copying a bundled profile's fields into a plain object literal.\n  const isFirstParty = isFirstPartyProfile(profile);\n\n  // The write-fence plan is resolved from the profile's DECLARED\n  // capabilities, before the capability tail below runs: the tail needs\n  // this plan's `conflict` fact (when its mechanism is `row`) to derive\n  // `execution.unitOfWork`'s `\"optimistic-retry\"` arm, and\n  // `resolveWriteFencePlan` reads only `capabilities.writeFence`, a field\n  // the tail never touches — the declared and the eventual finalized\n  // capabilities agree on it byte for byte, checked non-`undefined` above.\n  // This is the ONE call to `resolveWriteFencePlan` for the whole backend;\n  // `fencePlan` is threaded, never re-resolved, into both the tail below\n  // and the fence target every other member group shares.\n  const declarationFenceTarget: WriteFenceTarget = {\n    dialect: profile.dialect,\n    capabilities: profile.declaredCapabilities,\n    ...(profile.fenceSql === undefined ? {} : { fenceSql: profile.fenceSql }),\n    tableNames: profile.tableNames,\n  };\n  if (isFirstParty) markFirstPartyFactory(declarationFenceTarget);\n  const fencePlan = resolveWriteFencePlan(declarationFenceTarget);\n\n  const capabilities = finalizeEngineCapabilities(\n    profile.declaredCapabilities,\n    {\n      execution: profile.execution,\n      vectorStrategy: profile.vector,\n      fulltextStrategy: profile.fulltext,\n      fulltextTableName: profile.tableNames.fulltext,\n      writeFenceConflict:\n        fencePlan.kind === \"row\" ? fencePlan.conflict : undefined,\n    },\n  );\n\n  // ONE fence target for the whole backend and every transaction-scoped one\n  // it builds, marked first-party only under the same gate as the backend\n  // itself: a recognized-first-party caller who blanked `writeFence` out of\n  // a profile's declaration still resolves the dialect-derived plan, not\n  // `unfenced`, for the two bundled dialects — while a profile without a\n  // recognized token never reaches that fallback. Carries the FINALIZED\n  // `capabilities` (unlike `declarationFenceTarget` above), so a consumer\n  // that reads `fenceTarget.capabilities.execution.unitOfWork` — the\n  // contribution materializer's optimistic-retry gate, which has no other\n  // backend reference to read it from — sees the real, derived tier.\n  const fenceTargetBase: WriteFenceTarget = {\n    dialect: profile.dialect,\n    capabilities,\n    ...(profile.fenceSql === undefined ? {} : { fenceSql: profile.fenceSql }),\n    // Read only by a resolved `row` mechanism (`resolveFenceStatements`'s\n    // fences-relation derivation, off `tableNames.fences`); every profile's\n    // `tableNames` resolves `fences` with a default, so this is always the\n    // physical name TypeGraph spells its acquire statement against, bundled\n    // or custom alike — the SAME `tableNames` the returned backend exposes.\n    tableNames: profile.tableNames,\n  };\n  const fenceTarget: WriteFenceTarget =\n    isFirstParty ? markFirstPartyFactory(fenceTargetBase) : fenceTargetBase;\n\n  // Resolved once and reused below for both the operation-backend build and\n  // the late-member build — see `./assembly` for what this hides and why a\n  // hand-built profile whose `assembly` is not one of the two bundled\n  // builders' own values throws here instead of silently producing a\n  // half-assembled backend.\n  const { buildOperations, lateMembers } = resolveEngineAssembly(\n    profile.assembly,\n  );\n\n  // The contribution materializer's destructive rebuild runs under the SAME\n  // per-graph fence a schema commit does — `late.fence.runSchemaWriteTransaction`\n  // — but `late` does not exist until `lateMembers(ctx)` runs, which in turn\n  // needs the materializer this call is building (through\n  // `ctx.contributionMaterializer`). This forward reference is how that\n  // circularity resolves: the wrapper below only READS `late` once a caller\n  // actually invokes a rebuild, long after `late` is assigned below: nothing\n  // during construction calls it.\n  const {\n    contributionMaterializer,\n    contributionTableExists,\n    members: contributionMembers,\n  } = createContributionMembers({\n    ...profile.contributionRuntime,\n    dialect: profile.dialect,\n    fulltextStrategy: profile.fulltext,\n    vectorStrategy: profile.vector,\n    fenceTarget,\n    ensureTable: profile.provisioning.ensureTable,\n    execute: profile.execution.execute,\n    operationStrategy: profile.strategy,\n    // Withheld rather than wired-and-throwing when the driver cannot hold a\n    // session: the rebuild must refuse with its own typed error naming the\n    // absent fence, matching `capabilities.contributions.rebuild`.\n    ...(capabilities.execution.interactiveTransactions ?\n      {\n        schemaWriteTransaction: <T>(\n          graphId: string,\n          fn: (tx: SchemaWriteTransactionBackend) => Promise<T>,\n        ) =>\n          late.fence.runSchemaWriteTransaction(graphId, (target) => fn(target)),\n      }\n    : {}),\n  });\n\n  const identityMembers = createIdentityMembers({\n    ...profile.identityRuntime,\n    ensureTable: profile.provisioning.ensureTable,\n    contributionTableExists,\n  });\n\n  const operations = buildOperations({\n    capabilities,\n    fencePlan,\n    fenceTarget,\n    contributionMaterializer,\n    isFirstParty,\n  });\n\n  const { ensureGraphTemplatesTable, members: graphTemplateMembers } =\n    createGraphTemplateMembers({\n      ...profile.graphTemplateRuntime,\n      ensureTable: profile.provisioning.ensureTable,\n      execute: operations.execute,\n      fencePlan,\n      fenceTarget,\n    });\n\n  const baseSchemaMembers = createBaseSchemaMembers({\n    ...profile.baseSchemaRuntime,\n    ensureTable: profile.provisioning.ensureTable,\n    executeDdl: profile.provisioning.executeDdl,\n    generateDdl: profile.provisioning.generateDdl,\n    ensureGraphTemplatesTable,\n  });\n\n  const indexMaterializationMembers = createIndexMaterializationMembers({\n    ...profile.indexMaterializationRuntime,\n    ensureTable: profile.provisioning.ensureTable,\n    ...(profile.provisioning.ensureIndexMaterializationColumns === undefined ?\n      {}\n    : {\n        ensureIndexMaterializationColumns:\n          profile.provisioning.ensureIndexMaterializationColumns,\n      }),\n  });\n\n  const kindRemovalMembers = createKindRemovalMembers({\n    ...profile.kindRemovalRuntime,\n    ensureTable: profile.provisioning.ensureTable,\n  });\n\n  const ctx: EngineAssemblyContext<TTx> = {\n    capabilities,\n    fencePlan,\n    fenceTarget,\n    operations,\n    contributionMaterializer,\n    // The same resolved flag `applyEngineMarks` gates the root's own\n    // `markFirstPartyFactory` call on below — handed to `lateMembers` so a\n    // dialect's transaction-opening surface gates its OWN mark on a\n    // TypeGraph-opened handle the identical way, instead of marking every\n    // handle unconditionally regardless of whether this profile earned it.\n    isFirstParty,\n    self: () => backend,\n  };\n\n  const late = lateMembers(ctx);\n\n  // Annotated against the real `AdapterBackend<TTx>` declarations (`this:\n  // void` included, and `commitSchemaVersionWithPreflight`'s\n  // `SchemaCommitPreflightBackend` preflight parameter) rather than left to\n  // infer `SchemaVersionMembers`. Once this group is spread into the\n  // `backend` literal below, that inference can no longer catch a\n  // divergence between `SchemaVersionMembers` and the four keys it fills —\n  // this annotation is what still does. Every other group assembled here\n  // gets the same treatment implicitly, through the literal's own\n  // `satisfies AdapterBackend<TTx>` check below.\n  const schemaVersionMembers: Required<\n    Pick<\n      AdapterBackend<TTx>,\n      | \"commitSchemaVersion\"\n      | \"commitSchemaVersionIfKindsEmpty\"\n      | \"commitSchemaVersionWithPreflight\"\n      | \"setActiveVersion\"\n    >\n  > = createSchemaVersionMembers({\n    runSchemaWriteTransaction: late.fence.runSchemaWriteTransaction,\n  });\n\n  const backend = {\n    ...operations,\n    // Set explicitly rather than left to whatever `...operations` carried:\n    // this is the ONE finalized value every mark and every late member\n    // above resolved its decision from, and it must be what the returned\n    // backend advertises even if a dialect's operation-backend layer closed\n    // over a capabilities object of its own.\n    capabilities,\n    schemaProvisioning: profile.schemaProvisioning,\n    ...late.transactions,\n    ...late.rawSql,\n    lockSchemaVersionForWrite: requireDefined(\n      operations.lockSchemaVersionForWrite,\n    ),\n    ...schemaVersionMembers,\n    ...late.maintenance,\n    ...(late.trustedImport === undefined ?\n      {}\n    : { trustedImport: late.trustedImport }),\n    ...late.extensions,\n    ...baseSchemaMembers,\n    ...graphTemplateMembers,\n    ...identityMembers,\n    // Every fulltext-touching method asserts the durable marker instead of\n    // lazily emitting DDL. Steady state performs zero ensure; an\n    // uninitialized database throws `StoreNotInitializedError` rather\n    // than self-healing (#135). Shared verbatim with the tx-scoped gate\n    // via `gateFulltextMethods`.\n    ...gateFulltextMethods(\n      operations,\n      contributionMaterializer.assertInitialized,\n      contributionMaterializer.refuseUnavailableFulltext,\n    ),\n    ...indexMaterializationMembers,\n    ...contributionMembers,\n    ...kindRemovalMembers,\n    ...(profile.provisioning.catalog === undefined ?\n      {}\n    : { catalog: profile.provisioning.catalog }),\n    ...(profile.provisioning.lineage === undefined ?\n      {}\n    : { lineage: profile.provisioning.lineage }),\n    ...(profile.provisioning.recordedTime === undefined ?\n      {}\n    : { recordedTime: profile.provisioning.recordedTime }),\n    close: profile.close,\n  } satisfies AdapterBackend<TTx>;\n\n  // INVARIANT: audit before any wrapper can observe this backend — see\n  // transaction-resource.ts. Unconditional: an abstention recorded as\n  // \"independent\" is a verdict the guards can tell apart from a backend\n  // nobody looked at.\n  auditBackendResource(backend, profile.resourceAudit);\n\n  // Registered on the pre-queue `backend`, before `buildCallerSerializedBackend`\n  // (and every later transaction-scoped `deriveBackend`/`projectBackend` call)\n  // can carry it forward: a profile whose execution adapter declares its own\n  // `serializationFailure` classifier — for an engine whose commit-conflict\n  // shape is not PostgreSQL's `40001`/`40P01` — gives every derived handle of\n  // this backend the SAME classifier `isSerializationFailure` consults, never\n  // a copy resolved independently per handle.\n  //\n  // Also registered on `fenceTarget`: that object is never itself passed\n  // through `deriveBackend`/`projectBackend` (it is built once, above, and\n  // held by reference for the life of this backend), so it would otherwise\n  // never pick up the carried registration. `rebuildContribution`\n  // (`contribution-materializations.ts`) has no other backend reference to\n  // classify against, and `fenceTarget` is exactly the object it holds.\n  if (profile.execution.serializationFailure !== undefined) {\n    registerSerializationFailureClassifier(\n      backend,\n      profile.execution.serializationFailure,\n    );\n    registerSerializationFailureClassifier(\n      fenceTarget,\n      profile.execution.serializationFailure,\n    );\n  }\n\n  // A `caller-serialized` write-fence declaration promises that this\n  // backend's own process serializes every write unit it issues;\n  // `buildCallerSerializedBackend` is the in-process half of that promise.\n  // Built AFTER the audit above (so `deriveBackend`'s own carry, not a\n  // second write, is what gives the decorated object `backend`'s\n  // resource-audit verdict) and BEFORE `applyEngineMarks` below: two of that\n  // call's marks — `markBundledRootAutocommitEligible` and the atomic-program\n  // registrations — key a `WeakSet`/`WeakMap` by the exact object passed to\n  // it and are NOT among the marks `deriveBackend` carries forward on its\n  // own (only the first-party-factory mark, the schema-fenced-insert mark,\n  // and the resource audit are). Applying the marks to whichever object this\n  // function actually returns, instead of always to the pre-queue `backend`\n  // nothing outside this function can still reach, is what keeps every mark\n  // and registration attached to the backend a caller actually holds.\n  const queuedBackend: AdapterBackend<TTx> =\n    fencePlan.kind === \"caller-serialized\" ?\n      buildCallerSerializedBackend(backend)\n    : backend;\n\n  // Read off `queuedBackend`, not the `capabilities` local above: a root\n  // atomic SQL/mutation program dispatches its whole multi-statement batch\n  // directly against the connection, bypassing every member\n  // `QUEUED_ROOT_MEMBER_KEYS` wraps — registering root atomic authority on\n  // the queued object would let that raw dispatch run outside the very\n  // queue a `caller-serialized` declaration promises every write goes\n  // through. `deriveBackend` already refuses to carry root (or un-preserved\n  // session) atomic-batch authority across ANY decoration — by construction,\n  // never selectively — so `queuedBackend.capabilities.execution.atomicBatch`\n  // already reads the correct, downgraded value for the object this factory\n  // is about to return; the plain pass-through case (`queuedBackend ===\n  // backend`) reads the identical object `capabilities` names, so this\n  // changes nothing for either bundled backend.\n  const queuedCapabilities = queuedBackend.capabilities;\n\n  applyEngineMarks(queuedBackend, {\n    isFirstParty,\n    capabilities: queuedCapabilities,\n    fencePlan,\n    autocommit: profile.autocommit,\n    execution: profile.execution,\n    atomicMutationPrograms: {\n      createNodes: operations.executeAtomicNodeBatch,\n      replaceNodes: operations.executeAtomicNodeReplacementBatch,\n      createEdges: operations.executeAtomicEdgeBatch,\n      deleteNodes: operations.executeAtomicNodeDeleteBatch,\n      deleteEdges: operations.executeAtomicEdgeDeleteBatch,\n      updateNodes: operations.executeAtomicNodeResolvedUpdateBatch,\n      updateEdges: operations.executeAtomicEdgeResolvedUpdateBatch,\n      mutateNodes: operations.executeAtomicNodeResolvedMutationSet,\n      mutateEdges: operations.executeAtomicEdgeMutationProgram,\n    },\n  });\n\n  return queuedBackend;\n}\n","/**\n * `deriveEngineProfile`: the one way to build a variant of a bundled\n * {@link SqlEngineProfile} by overriding a bounded set of fields, instead of\n * spreading the profile into a plain object literal by hand.\n *\n * A profile's HEAD carries two kinds of fields. Some — `declaredCapabilities`,\n * `fenceSql`, `resourceAudit`, `autocommit`, the six `*Runtime` bags, and\n * `close` — are read exactly once, either directly off the `profile` argument\n * `createSqlBackend` receives or off the `EngineOperationsContext` /\n * `EngineAssemblyContext` it derives from that argument; nothing else in the\n * assembled backend closes over a builder-local copy of them, with one\n * carved-out exception on the bundled PostgreSQL builder: it reads\n * `declaredCapabilities.maxBindParameters`,\n * `declaredCapabilities.execution.interactiveTransactions`, and\n * `resourceAudit.kind` to compute `createPostgresExecutionAdapter`'s own\n * options (`maxBindParameters`, `interactiveAtomicBatch`) before the profile\n * object exists, baking a copy of exactly those three sub-values into\n * `profile.execution` — a field that is NOT itself derivable. Changing any of\n * the three through an override would therefore split the derived profile:\n * `declaredCapabilities` / `resourceAudit` on the returned object would\n * report the change, while the adapter backing `profile.execution` kept\n * enforcing the base builder's value. `assertAdapterBackedCapabilitiesUnchanged`\n * below refuses exactly those three sub-values when they would change;\n * every other sub-field on `declaredCapabilities` and `resourceAudit`\n * (`writeFence`, `windowFunctions`, `clearValidTo`, `returning`,\n * `claims`, `graphAnalytics`, `resourceAudit`'s `resource` /\n * `identityLeaseResource`, …) stays freely derivable, because none of those\n * reach the adapter's construction. Every other field — `dialect`,\n * `tableNames`, `execution`, `strategy`, `fulltext`, `vector`,\n * `provisioning` — is also captured by one or more of the builder's own\n * closures (the `buildOperations`/`lateMembers` pair the profile's opaque\n * `assembly` wraps, see `./assembly`, and the member groups they build), so\n * overriding only the head field would leave those closures reading the\n * value the builder closed over instead. `assembly` itself is non-derivable\n * for a further, simpler reason on top of that: it is opaque and\n * bundled-only, so there is no way to build a replacement value outside the\n * two bundled builders at all — a derived profile always carries the base's\n * `assembly` object forward by reference (see the closing paragraph of\n * `deriveEngineProfile`'s own doc comment below).\n * `DERIVABLE_ENGINE_PROFILE_KEYS` is the exact set for which that split is\n * safe (net of the carve-out above); `tests/engine-profile-derivable-keys.test.ts`\n * ratchets it against every field `SqlEngineProfile` declares, and\n * `tests/engine-profile-derivation.test.ts` pins the carve-out itself.\n *\n * What derivation grants: an author can swap the write-fence lock spelling,\n * loosen or tighten declared capabilities, replace the resource-audit\n * verdict, flip the autocommit durability claim, or replace any of the six\n * `*Runtime` dependency bags or `close`, without hand-copying every other\n * field off a bundled builder's result.\n *\n * What derivation costs: a derived profile is a new object, so it is never\n * first-party (`isFirstPartyProfile`, `../../capabilities/write-fence`) even\n * when every field is copied from a first-party one unchanged. That standing\n * carries two effects, and a derived profile gets neither: `resolveWriteFencePlan`'s\n * dialect-derivation fallback (sound only for the two bundled dialects, so it\n * never applies to a derived profile regardless — irrelevant in practice as\n * long as `declaredCapabilities` is kept, since both bundled declarations\n * already carry `writeFence` explicitly), and the lazy per-transaction\n * schema-fence lease `store/operations/write-transaction.ts` takes out under\n * `isFirstPartyFactory` (a derived profile's backend takes its own fence on\n * every managed write instead). Every gate `createSqlBackend` runs — the\n * missing-`writeFence` refusal, the `mechanism: \"advisory\"` without\n * `fenceSql` refusal, the schema-fenced-insert and autocommit marks — still\n * applies to a derived profile exactly as it does to a bundled one.\n */\nimport { ConfigurationError } from \"../../../errors\";\nimport type { FenceSql } from \"../../capabilities/write-fence\";\nimport type { SqlEngineProfile } from \"./profile\";\n\n/**\n * The `SqlEngineProfile` fields `deriveEngineProfile` can override. Pinned\n * against the full set of profile keys, both directions, by\n * `tests/engine-profile-derivable-keys.test.ts`.\n */\nexport const DERIVABLE_ENGINE_PROFILE_KEYS = [\n  \"declaredCapabilities\",\n  \"fenceSql\",\n  \"resourceAudit\",\n  \"autocommit\",\n  \"contributionRuntime\",\n  \"identityRuntime\",\n  \"graphTemplateRuntime\",\n  \"baseSchemaRuntime\",\n  \"indexMaterializationRuntime\",\n  \"kindRemovalRuntime\",\n  \"close\",\n] as const satisfies readonly (keyof SqlEngineProfile<unknown>)[];\n\n/** One of {@link DERIVABLE_ENGINE_PROFILE_KEYS}. */\nexport type DerivableEngineProfileKey =\n  (typeof DERIVABLE_ENGINE_PROFILE_KEYS)[number];\n\nconst DERIVABLE_ENGINE_PROFILE_KEY_SET: ReadonlySet<string> = new Set(\n  DERIVABLE_ENGINE_PROFILE_KEYS,\n);\n\n/**\n * The overrides `deriveEngineProfile` accepts. Every field is optional, so a\n * caller only spells the ones it changes.\n *\n * `fenceSql` is spelled separately from the rest so it alone permits an\n * explicit `undefined` — under `exactOptionalPropertyTypes`, a bare\n * `Partial<Pick<...>>` would forbid `undefined` for `fenceSql` exactly as it\n * does for every required field, but `fenceSql` is the one field on\n * `SqlEngineProfile` an author can legitimately want to REMOVE: a derived\n * profile whose engine has no advisory-lock spelling passes\n * `fenceSql: undefined` to drop it rather than leaving the base profile's\n * spelling in place. No other key in the union can be set to `undefined`:\n * each of them is a required field on `SqlEngineProfile`, and clearing one\n * would leave `createSqlBackend` with no value to read at all.\n *\n * Dropping `fenceSql` alone is not enough to reach a working profile:\n * `createSqlBackend` still resolves a write-fence plan eagerly, and a\n * profile whose `declaredCapabilities.writeFence.mechanism` is still\n * `\"advisory\"` with no `fenceSql` to spell the lock refuses with\n * `WRITE_FENCE_SQL_UNAVAILABLE`. Pairing `fenceSql: undefined` with a\n * `declaredCapabilities` override that also stops claiming `\"advisory\"`\n * (for example `mechanism: \"engine-serialized\"`) is what actually removes\n * the spelling successfully; see `tests/engine-profile-derivation.test.ts`.\n */\nexport type DerivableEngineProfileOverrides<TTx> = Partial<\n  Omit<Pick<SqlEngineProfile<TTx>, DerivableEngineProfileKey>, \"fenceSql\">\n> &\n  Readonly<{ fenceSql?: FenceSql | undefined }>;\n\n/**\n * Builds a fresh {@link SqlEngineProfile} from `base` with `overrides`\n * applied — `{...base, ...overrides}`, never a mutation of `base`. `base` is\n * meant to be the return value of `buildSqliteEngineProfile` or\n * `buildPostgresEngineProfile`, but this function does not check that: it\n * only enforces that every key `overrides` supplies is one of\n * {@link DERIVABLE_ENGINE_PROFILE_KEYS}.\n *\n * A key outside that set throws `ConfigurationError` with code\n * `ENGINE_PROFILE_OVERRIDE_UNSUPPORTED` naming the key, because the bundled\n * builders bind that field into more than one closure when the profile is\n * built (see the module doc comment): applying the override to the head\n * field alone would leave `buildOperations`, `lateMembers`, or a member\n * group they build reading the value `base` closed over, so some parts of\n * the assembled backend would see the override and others would silently\n * ignore it. The check reads the overrides object's OWN keys (including\n * symbol keys, since `{...base, ...overrides}` below copies those too) at\n * runtime, not only its declared type, so a caller that bypasses the type\n * (e.g. an `as never` cast) is refused exactly the same way.\n *\n * A key inside the derivable set can still be refused: overriding\n * `declaredCapabilities.maxBindParameters`,\n * `declaredCapabilities.execution.interactiveTransactions`, or\n * `resourceAudit.kind` away from `base`'s own value throws the same code,\n * naming the sub-field, for the reason the module doc comment states.\n *\n * The result goes through every `createSqlBackend` gate unchanged, and is\n * never first-party — see the module doc comment for what that costs. Its\n * `assembly` is the SAME object `base.assembly` is: `overrides` can never\n * name that key, so `resolveEngineAssembly` (`./assembly`) resolves the\n * derived profile to the identical `buildOperations`/`lateMembers` pair the\n * base builder closed over.\n */\nexport function deriveEngineProfile<TTx>(\n  base: SqlEngineProfile<TTx>,\n  overrides: DerivableEngineProfileOverrides<TTx>,\n): SqlEngineProfile<TTx> {\n  for (const key of Reflect.ownKeys(overrides)) {\n    const keyName = String(key);\n    if (!DERIVABLE_ENGINE_PROFILE_KEY_SET.has(keyName)) {\n      throw new ConfigurationError(\n        `deriveEngineProfile cannot override \"${keyName}\": the bundled builders ` +\n          \"bind this field into more than one closure when the profile is \" +\n          \"built (buildOperations, lateMembers, or a member group they \" +\n          \"build), so overriding only the profile's head field would leave \" +\n          \"some assembled members applying the override and others reading \" +\n          \"the value the builder closed over. Only \" +\n          `${DERIVABLE_ENGINE_PROFILE_KEYS.join(\", \")} can be derived; ` +\n          `build a new profile with the builder itself to change \"${keyName}\".`,\n        { code: \"ENGINE_PROFILE_OVERRIDE_UNSUPPORTED\", key: keyName },\n        {\n          suggestion:\n            \"Remove this key from the overrides passed to deriveEngineProfile, \" +\n            \"or construct a profile directly with buildSqliteEngineProfile / \" +\n            \"buildPostgresEngineProfile to change it.\",\n        },\n      );\n    }\n  }\n\n  assertAdapterBackedCapabilitiesUnchanged(base, overrides);\n\n  // A cast, not a widening: every consumer of `SqlEngineProfile.fenceSql`\n  // (`createSqlBackend`, `resolveWriteFencePlan`) already tests it with\n  // `=== undefined`, so a returned object whose `fenceSql` key is PRESENT\n  // with value `undefined` (what `{...base, ...overrides}` produces when\n  // `overrides.fenceSql` is explicitly `undefined`) behaves identically to\n  // one where the key is absent. `exactOptionalPropertyTypes` only refuses\n  // to infer that equivalence structurally for an optional field whose\n  // override type includes `undefined`; it does not describe a real\n  // divergence in the value this function returns.\n  //\n  // `base.assembly` rides along unchanged: `overrides` can never name it\n  // (see the module doc comment), so the spread below carries forward the\n  // SAME opaque object `base` carries, which `resolveEngineAssembly`\n  // (`./assembly`) resolves to the identical `buildOperations`/`lateMembers`\n  // pair the base builder closed over.\n  return { ...base, ...overrides } as SqlEngineProfile<TTx>;\n}\n\n/**\n * The one carve-out inside the otherwise-safe derivable set: see this\n * module's doc comment for why `buildPostgresEngineProfile` bakes these\n * three sub-values into `profile.execution` before the profile object\n * exists. Refuses an override that would change any of them from `base`'s\n * own value, leaving every other sub-field on `declaredCapabilities` and\n * `resourceAudit` freely derivable.\n */\nfunction assertAdapterBackedCapabilitiesUnchanged<TTx>(\n  base: SqlEngineProfile<TTx>,\n  overrides: DerivableEngineProfileOverrides<TTx>,\n): void {\n  if (overrides.declaredCapabilities !== undefined) {\n    refuseIfAdapterBackedValueDiffers(\n      \"declaredCapabilities.maxBindParameters\",\n      base.declaredCapabilities.maxBindParameters,\n      overrides.declaredCapabilities.maxBindParameters,\n    );\n    refuseIfAdapterBackedValueDiffers(\n      \"declaredCapabilities.execution.interactiveTransactions\",\n      base.declaredCapabilities.execution.interactiveTransactions,\n      overrides.declaredCapabilities.execution.interactiveTransactions,\n    );\n  }\n  if (overrides.resourceAudit !== undefined) {\n    refuseIfAdapterBackedValueDiffers(\n      \"resourceAudit.kind\",\n      base.resourceAudit.kind,\n      overrides.resourceAudit.kind,\n    );\n  }\n}\n\n/**\n * @throws {ConfigurationError} with code `ENGINE_PROFILE_OVERRIDE_UNSUPPORTED`\n * when `overrideValue` differs from `baseValue`.\n */\nfunction refuseIfAdapterBackedValueDiffers(\n  fieldPath: string,\n  baseValue: unknown,\n  overrideValue: unknown,\n): void {\n  if (overrideValue === baseValue) return;\n  throw new ConfigurationError(\n    `deriveEngineProfile cannot override \"${fieldPath}\": the bundled ` +\n      \"PostgreSQL builder reads this exact sub-value to compute the \" +\n      \"execution adapter's own options (maxBindParameters, \" +\n      \"interactiveAtomicBatch) before the profile object exists, baking a \" +\n      \"copy of it into `profile.execution` — a field that is not itself \" +\n      \"derivable. Changing it here would leave the returned profile's \" +\n      \"declaredCapabilities/resourceAudit reporting the override while the \" +\n      \"adapter kept enforcing the base builder's value: some parts of the \" +\n      \"assembled backend would apply the override and others would \" +\n      \"silently ignore it.\",\n    { code: \"ENGINE_PROFILE_OVERRIDE_UNSUPPORTED\", key: fieldPath },\n    {\n      suggestion:\n        `Keep \"${fieldPath}\" equal to the base profile's own value, or ` +\n        \"construct a profile directly with buildPostgresEngineProfile to \" +\n        \"change it.\",\n    },\n  );\n}\n","import { sql, type SqlFragment } from \"../query/sql-fragment\";\n\n/** Builds the portable current-node candidate set used by direct searches. */\nexport function buildLiveNodeCandidates(\n  nodesTableName: string,\n  graphId: string,\n  nodeKind: string,\n  now: string,\n): SqlFragment {\n  const nodes = sql.identifier(nodesTableName);\n  return sql`\n    SELECT \"id\" AS node_id\n    FROM ${nodes}\n    WHERE \"graph_id\" = ${graphId}\n      AND \"kind\" = ${nodeKind}\n      AND \"deleted_at\" IS NULL\n      AND (\"valid_from\" IS NULL OR \"valid_from\" <= ${now})\n      AND (\"valid_to\" IS NULL OR \"valid_to\" > ${now})\n  `;\n}\n","/**\n * Fulltext CRUD and search: five members shared verbatim by every SQL\n * engine profile with an active fulltext strategy, and omitted entirely\n * (never stubbed) from one built with `fulltext: false`. Each statement is\n * built by the dialect's `CommonOperationStrategy` and run through the\n * execution primitives the dialect already exposes — this group never\n * touches `executionAdapter` or `db.execute` / `db.run` directly, so it\n * carries none of a dialect's own serialization or transaction-framing\n * story.\n */\nimport type { FulltextStrategy } from \"../../../../query/dialect/fulltext-strategy\";\nimport { chunk as chunkArray } from \"../../../../utils/array\";\nimport { coerceNumericScore, nowIso } from \"../../../row-mappers\";\nimport type {\n  DeleteFulltextBatchParams,\n  DeleteFulltextParams,\n  FulltextSearchParams,\n  FulltextSearchResult,\n  UpsertFulltextBatchParams,\n  UpsertFulltextParams,\n} from \"../../../types\";\nimport type { ExecutableSql } from \"../../execution/types\";\nimport type { CommonOperationStrategy } from \"../../operations/strategy\";\n\n/**\n * The execution primitives fulltext statements run through. Each dialect's\n * `execAll` / `execRun` already carries that dialect's own serialization\n * story (SQLite queues through its serialized queue; PostgreSQL routes\n * straight to its pooled execution adapter) — this member group only ever\n * calls them, so the dialect's own wrapping is preserved without this file\n * knowing it exists.\n */\ntype FulltextMembersExecution = Readonly<{\n  execAll: <TRow>(query: ExecutableSql) => Promise<readonly TRow[]>;\n  execRun: (query: ExecutableSql) => Promise<void>;\n}>;\n\n/**\n * The dialect-derived chunk sizes fulltext batch writes partition against.\n * Each dialect computes these from its own bind-parameter budget\n * (`computePostgresBatchChunkSizes` / `computeSqliteBatchChunkSizes`); they\n * are not part of the portable `OperationBackendBatchConfig`, which has no\n * fulltext-specific fields.\n */\ntype FulltextBatchChunkSizes = Readonly<{\n  fulltextUpsertBatchSize: number;\n  fulltextDeleteChunkSize: number;\n}>;\n\n/**\n * Deps needed only when a fulltext strategy is active. `undefined` collapses\n * every field: with no strategy there is no fulltext table to write to,\n * delete from, or search, so every member below is omitted entirely —\n * mirroring `CreateVectorMembersDeps`.\n */\nexport type CreateFulltextMembersDeps =\n  | Readonly<{ fulltextStrategy: undefined }>\n  | Readonly<{\n      fulltextStrategy: FulltextStrategy;\n      /** The dialect's fulltext SQL builders, already closed over its table names and fulltext strategy. */\n      strategy: Pick<\n        CommonOperationStrategy,\n        | \"buildUpsertFulltext\"\n        | \"buildDeleteFulltext\"\n        | \"buildUpsertFulltextBatch\"\n        | \"buildDeleteFulltextBatch\"\n        | \"buildFulltextSearch\"\n      >;\n      execution: FulltextMembersExecution;\n      batchConfig: FulltextBatchChunkSizes;\n    }>;\n\nexport type FulltextMembers = Readonly<{\n  upsertFulltext?: (params: UpsertFulltextParams) => Promise<void>;\n  deleteFulltext?: (params: DeleteFulltextParams) => Promise<void>;\n  upsertFulltextBatch?: (params: UpsertFulltextBatchParams) => Promise<void>;\n  deleteFulltextBatch?: (params: DeleteFulltextBatchParams) => Promise<void>;\n  fulltextSearch?: (\n    params: FulltextSearchParams,\n  ) => Promise<readonly FulltextSearchResult[]>;\n}>;\n\n/**\n * Builds the fulltext member group, or omits it entirely when the backend\n * was built with `fulltext: false`. Moved out of the two dialect files\n * unchanged: same statements, same batch chunking, same numeric-score\n * coercion.\n */\nexport function createFulltextMembers(\n  deps: CreateFulltextMembersDeps,\n): FulltextMembers {\n  if (deps.fulltextStrategy === undefined) return {};\n  const { strategy, execution, batchConfig } = deps;\n  const { execAll, execRun } = execution;\n\n  return {\n    async upsertFulltext(params: UpsertFulltextParams): Promise<void> {\n      const timestamp = nowIso();\n      const statements = strategy.buildUpsertFulltext(params, timestamp);\n      for (const stmt of statements) {\n        await execRun(stmt);\n      }\n    },\n\n    async deleteFulltext(params: DeleteFulltextParams): Promise<void> {\n      const statements = strategy.buildDeleteFulltext(params);\n      for (const stmt of statements) {\n        await execRun(stmt);\n      }\n    },\n\n    async upsertFulltextBatch(\n      params: UpsertFulltextBatchParams,\n    ): Promise<void> {\n      if (params.rows.length === 0) return;\n      const timestamp = nowIso();\n      // The strategy emits ONE statement over every row it is given, so\n      // the bind budget is enforced here — same contract as node/edge\n      // batch inserts.\n      for (const rows of chunkArray(\n        params.rows,\n        batchConfig.fulltextUpsertBatchSize,\n      )) {\n        const statements = strategy.buildUpsertFulltextBatch(\n          { ...params, rows },\n          timestamp,\n        );\n        for (const stmt of statements) {\n          await execRun(stmt);\n        }\n      }\n    },\n\n    async deleteFulltextBatch(\n      params: DeleteFulltextBatchParams,\n    ): Promise<void> {\n      if (params.nodeIds.length === 0) return;\n      for (const nodeIds of chunkArray(\n        params.nodeIds,\n        batchConfig.fulltextDeleteChunkSize,\n      )) {\n        const statements = strategy.buildDeleteFulltextBatch({\n          ...params,\n          nodeIds,\n        });\n        for (const stmt of statements) {\n          await execRun(stmt);\n        }\n      }\n    },\n\n    async fulltextSearch(\n      params: FulltextSearchParams,\n    ): Promise<readonly FulltextSearchResult[]> {\n      const query = strategy.buildFulltextSearch(params);\n      // A numeric score column can come back as a string on either engine\n      // (PostgreSQL's `numeric` type preserves precision as text; SQLite's\n      // dynamic typing can hand back a string for the aggregate rank score\n      // too), so coerce at the backend boundary — FulltextSearchResult.score\n      // is always `number`.\n      const rows = await execAll<{\n        node_id: string;\n        score: number | string;\n        snippet: string | null;\n      }>(query);\n      return rows.map((row, index) => ({\n        nodeId: row.node_id,\n        score: coerceNumericScore(row.score),\n        rank: index + 1,\n        ...(row.snippet === null ? {} : { snippet: row.snippet }),\n      }));\n    },\n  };\n}\n","/**\n * Backend-runtime glue between a `VectorStrategy` and the Drizzle\n * SQLite / PostgreSQL backends. Holds the slot-construction and\n * write-error-mapping responsibilities that belong in the backend rather\n * than the strategy:\n *\n * - **Slot construction.** The backend stays graph-agnostic: it never\n *   inspects the graph/registry. The store resolves a field's\n *   `dimensions` / `metric` / `indexType` from the schema and threads\n *   them through `UpsertEmbeddingParams` / `VectorSearchParams` /\n *   `CreateVectorIndexParams`; these helpers reshape those params into the\n *   `VectorSlot` a strategy addresses its storage with.\n * - **Write-error mapping.** Turns a raw engine dimension-mismatch into a\n *   typed {@link EmbeddingDimensionChangedError} with actionable guidance.\n *\n * Per-field table creation is no longer done here: it rides the #135\n * durable-contribution machinery (`createContributionMaterializer`),\n * materialized by the privileged migrator at boot and asserted (SELECT,\n * never DDL) on the runtime hot path — see `contribution-materializations.ts`.\n */\nimport { EmbeddingDimensionChangedError } from \"../../errors\";\nimport { type VectorSlot } from \"../../query/dialect/vector-strategy\";\nimport { parseDimensionMismatch } from \"../../utils/sql-errors\";\nimport {\n  type CreateVectorIndexParams,\n  type DropVectorIndexParams,\n} from \"../types\";\n\n/**\n * Placeholder dimension for slots built from params that don't carry one\n * (`DropVectorIndexParams`). The dimension is never read on the drop path —\n * it addresses an index by `(nodeKind, fieldPath)` alone.\n */\nconst VECTOR_SLOT_PLACEHOLDER_DIMENSIONS = 1;\n\n/**\n * Reshapes the storage-addressing fields shared by every embedding param type\n * (upsert / search / delete) into a {@link VectorSlot}. Picks only the six slot\n * fields, dropping each param type's payload (`embedding`, `queryEmbedding`,\n * `limit`, …). Delete carries the real `dimensions`/`metric`/`indexType` (not\n * just `(nodeKind, fieldPath)`) so the backend can idempotently ensure the\n * correctly-shaped per-field table before deleting.\n */\n/**\n * Bound parameters per row in every strategy's embedding upsert SQL\n * (graph_id, node_id, created_at, updated_at, embedding). Backends derive\n * their batch chunk size from the connection's bound-parameter budget and\n * this count. sqlite-vec's companion IN-list DELETE binds one parameter per\n * row plus graph_id, which stays under the same budget.\n */\nexport const EMBEDDING_UPSERT_PARAM_COUNT = 5;\n\nexport function vectorSlotFromParams(\n  params: Omit<VectorSlot, \"indexParams\">,\n): VectorSlot {\n  return {\n    graphId: params.graphId,\n    nodeKind: params.nodeKind,\n    fieldPath: params.fieldPath,\n    dimensions: params.dimensions,\n    metric: params.metric,\n    indexType: params.indexType,\n  };\n}\n\nexport function vectorSlotFromCreateIndexParams(\n  params: CreateVectorIndexParams,\n): VectorSlot {\n  return {\n    ...vectorSlotFromParams(params),\n    ...(params.indexParams === undefined ?\n      {}\n    : { indexParams: params.indexParams }),\n  };\n}\n\n/**\n * A `VectorSlot` for `dropVectorIndex`. `DropVectorIndexParams` carries\n * only `(nodeKind, fieldPath)` — enough to address the index, whose name a\n * strategy derives from those alone (it is metric- and dimension-\n * independent). `indexType: \"hnsw\"` makes `buildDropIndex` emit a real\n * `DROP INDEX IF EXISTS` (harmless when none exists); the placeholder\n * `metric`/`dimensions` are never read on the drop path.\n */\nexport function vectorSlotFromDropIndexParams(\n  params: DropVectorIndexParams,\n): VectorSlot {\n  return {\n    graphId: params.graphId,\n    nodeKind: params.nodeKind,\n    fieldPath: params.fieldPath,\n    dimensions: VECTOR_SLOT_PLACEHOLDER_DIMENSIONS,\n    metric: \"cosine\",\n    indexType: \"hnsw\",\n  };\n}\n\n/**\n * Maps a raw engine vector-dimension-mismatch failure from an embedding\n * upsert into a typed {@link EmbeddingDimensionChangedError} with actionable\n * guidance. Unrelated errors pass through unchanged. Used by both backends so\n * a write after a field's `embedding(N)` → `embedding(M)` change surfaces\n * \"run reembedVectorField\" instead of a cryptic `expected N dimensions` error.\n */\nexport function mapVectorWriteError(\n  error: unknown,\n  params: Readonly<{ nodeKind: string; fieldPath: string }>,\n): unknown {\n  const mismatch = parseDimensionMismatch(error);\n  if (mismatch === undefined) return error;\n  const attempted = mismatch.actual ?? \"a different number of\";\n  return new EmbeddingDimensionChangedError(\n    `Embedding \"${params.nodeKind}.${params.fieldPath}\" was written with ${attempted} dimensions, but its per-field storage expects ${mismatch.expected}. The field's embedding dimension changed; existing vectors must be recreated and re-embedded.`,\n    {\n      kind: params.nodeKind,\n      fieldPath: params.fieldPath,\n      storedDimensions: mismatch.expected,\n      ...(mismatch.actual === undefined ?\n        {}\n      : { declaredDimensions: mismatch.actual }),\n    },\n    { cause: error },\n  );\n}\n","/**\n * Embedding CRUD, vector search, and ANN index lifecycle: the eight members\n * every SQL engine profile with a vector strategy exposes. Every statement\n * this group issues goes through the dialect's `execRun` (or, for search,\n * the dialect's own override-aware runner) — this group never touches\n * `executionAdapter` or `db.execute` / `db.run` directly.\n *\n * Two genuine per-engine differences do not collapse into shared code, and\n * are threaded through as explicit deps rather than re-spelled here:\n *\n * - **`applySearchOverrides`.** PostgreSQL validates a per-search `efSearch`\n *   against pgvector's own ceiling, computes any transaction-local GUC\n *   overrides the search needs (`SET LOCAL hnsw.*` / `ivfflat.*`), and runs\n *   the query through the runner that wraps them in a transaction. No SQLite\n *   engine this package bundles has a per-search frontier knob at all, so\n *   its arm calls the same portable `resolveEfSearchOverride` predicate\n *   purely to refuse a requested override, then runs the query unmodified.\n * - **`runIndexBuild`.** PostgreSQL routes an ANN index build through the\n *   serial fallback that retries under `parallel_workers = 0` when the\n *   parallel build exhausts dynamic shared memory; SQLite has no such\n *   build-resource failure mode and just runs the statement.\n *\n * Every other member — the embedding writes, the schema-vector-slot\n * contribution delete, and the index-build/drop wrapping around the two\n * seams above — is the same statement sequence on both engines.\n */\nimport {\n  assertVectorSearchLimit,\n  type VectorSlot,\n  type VectorStrategy,\n} from \"../../../../query/dialect/vector-strategy\";\nimport { chunk as chunkArray } from \"../../../../utils/array\";\nimport { isMissingTableError } from \"../../../../utils/sql-errors\";\nimport { buildLiveNodeCandidates } from \"../../../live-node-candidates\";\nimport { nowIso } from \"../../../row-mappers\";\nimport {\n  type CreateVectorIndexParams,\n  type DeleteEmbeddingParams,\n  type DropVectorIndexParams,\n  type UpsertEmbeddingBatchParams,\n  type UpsertEmbeddingParams,\n  type VectorSearchParams,\n  type VectorSearchResult,\n} from \"../../../types\";\nimport type { ContributionMaterializer } from \"../../contribution-materializations\";\nimport type { ExecutableSql } from \"../../execution/types\";\nimport type { CommonOperationStrategy } from \"../../operations/strategy\";\nimport {\n  mapVectorWriteError,\n  vectorSlotFromCreateIndexParams,\n  vectorSlotFromDropIndexParams,\n  vectorSlotFromParams,\n} from \"../../vector-runtime\";\nimport type { EngineTableNames } from \"../profile\";\n\n/** One raw row a search runner hands back, before it is mapped to {@link VectorSearchResult}. */\ntype VectorSearchRawRow = Readonly<{ node_id: string; score: number }>;\n\n/**\n * Deps needed only when a vector strategy is active. `undefined` collapses\n * every field: with no strategy there is no per-field storage to write,\n * search, or index, so the always-present members below return\n * immediately without touching any of them — mirroring a fulltext-less\n * backend.\n */\nexport type CreateVectorMembersDeps =\n  | Readonly<{ vectorStrategy: undefined }>\n  | Readonly<{\n      vectorStrategy: VectorStrategy;\n      execution: Readonly<{\n        execRun: (query: ExecutableSql) => Promise<void>;\n      }>;\n      /** Dialect-derived embedding batch size (from the dialect's own bind-parameter budget). */\n      batchConfig: Readonly<{ embeddingUpsertBatchSize: number }>;\n      tableNames: Pick<EngineTableNames, \"nodes\">;\n      contributionMaterializer: Pick<\n        ContributionMaterializer,\n        \"assertVectorSlot\" | \"ensureVectorSlot\" | \"evictVectorSlot\"\n      >;\n      operationStrategy: Pick<\n        CommonOperationStrategy,\n        \"buildDeleteContributionMaterialization\"\n      >;\n      /**\n       * Resolves this engine's per-search `efSearch` handling and runs the\n       * already-built query. See the module doc comment for what each\n       * engine's arm does. Never wrapped by the caller's own error mapping —\n       * pass the query through unmodified on success.\n       */\n      applySearchOverrides: (\n        query: ExecutableSql,\n        params: Pick<VectorSearchParams, \"efSearch\" | \"indexType\">,\n      ) => Promise<readonly VectorSearchRawRow[]>;\n      /**\n       * Runs one already-built ANN index-creation statement. See the module\n       * doc comment for what each engine's arm does.\n       */\n      runIndexBuild: (\n        params: Readonly<{ slot: VectorSlot; indexStatement: ExecutableSql }>,\n      ) => Promise<void>;\n    }>;\n\nexport type VectorMembers = Readonly<{\n  upsertEmbedding?: (params: UpsertEmbeddingParams) => Promise<void>;\n  upsertEmbeddingBatch?: (\n    params: UpsertEmbeddingBatchParams,\n  ) => Promise<void>;\n  deleteEmbedding?: (params: DeleteEmbeddingParams) => Promise<void>;\n  deleteEmbeddingBatch?: (\n    params: Omit<DeleteEmbeddingParams, \"nodeId\"> &\n      Readonly<{ nodeIds: readonly string[] }>,\n  ) => Promise<void>;\n  vectorSearch?: (\n    params: VectorSearchParams,\n  ) => Promise<readonly VectorSearchResult[]>;\n  deleteSchemaVectorSlotContribution: (slot: VectorSlot) => Promise<void>;\n  createVectorIndex: (params: CreateVectorIndexParams) => Promise<void>;\n  dropVectorIndex: (params: DropVectorIndexParams) => Promise<void>;\n}>;\n\n/**\n * Builds the vector member group. Moved out of the two dialect files\n * unchanged: same statements, same batch chunking, same slot-marker\n * assertions — only the two seams the module doc comment names differ.\n */\nexport function createVectorMembers(\n  deps: CreateVectorMembersDeps,\n): VectorMembers {\n  return {\n    ...(deps.vectorStrategy === undefined ?\n      {}\n    : {\n        async upsertEmbedding(params: UpsertEmbeddingParams): Promise<void> {\n          const { vectorStrategy, execution, contributionMaterializer } =\n            deps;\n          const slot = vectorSlotFromParams(params);\n          // Assert the slot's durable marker (SELECT, cached) — never DDL.\n          // The per-field table is provisioned by the privileged migrator\n          // (`createStoreWithSchema` → `materializeVectorContributions`), so\n          // a least-privilege runtime role writes embeddings without CREATE.\n          await contributionMaterializer.assertVectorSlot(slot);\n          const statements = vectorStrategy.buildUpsert(\n            slot,\n            params,\n            nowIso(),\n          );\n          try {\n            for (const statement of statements) {\n              await execution.execRun(statement);\n            }\n          } catch (error) {\n            throw mapVectorWriteError(error, params);\n          }\n        },\n\n        async upsertEmbeddingBatch(\n          params: UpsertEmbeddingBatchParams,\n        ): Promise<void> {\n          if (params.rows.length === 0) return;\n          const { vectorStrategy, execution, batchConfig, contributionMaterializer } =\n            deps;\n          const slot = vectorSlotFromParams(params);\n          // Same SELECT-only marker assert as the single-row path — never DDL.\n          await contributionMaterializer.assertVectorSlot(slot);\n          // Last-write-wins dedupe: a multi-row upsert cannot affect one\n          // row twice.\n          const rowsById = new Map(\n            params.rows.map((row) => [row.nodeId, row] as const),\n          );\n          const rows = [...rowsById.values()];\n          const timestamp = nowIso();\n          try {\n            for (const chunk of chunkArray(\n              rows,\n              batchConfig.embeddingUpsertBatchSize,\n            )) {\n              const statements =\n                vectorStrategy.buildUpsertBatch === undefined ?\n                  chunk.flatMap((row) =>\n                    vectorStrategy.buildUpsert(\n                      slot,\n                      {\n                        graphId: params.graphId,\n                        nodeKind: params.nodeKind,\n                        nodeId: row.nodeId,\n                        fieldPath: params.fieldPath,\n                        embedding: row.embedding,\n                        dimensions: params.dimensions,\n                        metric: params.metric,\n                        indexType: params.indexType,\n                      },\n                      timestamp,\n                    ),\n                  )\n                : vectorStrategy.buildUpsertBatch(\n                    slot,\n                    { ...params, rows: chunk },\n                    timestamp,\n                  );\n              for (const statement of statements) {\n                await execution.execRun(statement);\n              }\n            }\n          } catch (error) {\n            throw mapVectorWriteError(error, params);\n          }\n        },\n\n        async deleteEmbedding(params: DeleteEmbeddingParams): Promise<void> {\n          const { vectorStrategy, execution, contributionMaterializer } =\n            deps;\n          // Assert the slot's durable marker before deleting. A delete can\n          // run before any embedding was ever written for the field (e.g. a\n          // node hard-deleted having never carried one); the per-field table\n          // was provisioned at boot, so the DELETE targets an existing\n          // (possibly empty) table and is a clean no-op — never a DELETE\n          // against a missing relation, which would abort an enclosing\n          // transaction on an engine where DDL-less DELETE against a\n          // missing table is an error (PostgreSQL). SELECT-only assert,\n          // never DDL.\n          const slot = vectorSlotFromParams(params);\n          await contributionMaterializer.assertVectorSlot(slot);\n          const statements = vectorStrategy.buildDelete(slot, params);\n          for (const statement of statements) {\n            await execution.execRun(statement);\n          }\n        },\n\n        async deleteEmbeddingBatch(\n          params: Omit<DeleteEmbeddingParams, \"nodeId\"> &\n            Readonly<{ nodeIds: readonly string[] }>,\n        ): Promise<void> {\n          if (params.nodeIds.length === 0) return;\n          const { vectorStrategy, execution, batchConfig, contributionMaterializer } =\n            deps;\n          const slot = vectorSlotFromParams(params);\n          await contributionMaterializer.assertVectorSlot(slot);\n          for (const nodeIds of chunkArray(\n            [...new Set(params.nodeIds)],\n            batchConfig.embeddingUpsertBatchSize,\n          )) {\n            const statements = vectorStrategy.buildDeleteBatch(slot, {\n              ...params,\n              nodeIds,\n            });\n            for (const statement of statements) {\n              await execution.execRun(statement);\n            }\n          }\n        },\n\n        async vectorSearch(\n          params: VectorSearchParams,\n        ): Promise<readonly VectorSearchResult[]> {\n          const { vectorStrategy, tableNames, applySearchOverrides } = deps;\n          assertVectorSearchLimit(params.limit);\n          const slot = vectorSlotFromParams(params);\n          // Deliberately NOT marker-gated: search is read-only (no DDL\n          // hazard to gate), and its params carry the caller's runtime\n          // metric override, which legitimately diverges from the\n          // provisioned shape on strategies that bake the metric into the\n          // DDL (sqlite-vec; pgvector's table DDL is metric-free but the\n          // contract is kept identical across dialects). An unprovisioned\n          // slot surfaces the engine's missing-relation error — the same\n          // contract as a query-builder `similarTo()` predicate;\n          // `createVerifiedStore` catches both at attach.\n          const query = vectorStrategy.buildSearch(\n            slot,\n            params,\n            // Store-compiled candidates (predicates + subclass + currency)\n            // take precedence; the live-node default covers direct backend use.\n            params.candidates ??\n              buildLiveNodeCandidates(\n                tableNames.nodes,\n                params.graphId,\n                params.nodeKind,\n                nowIso(),\n              ),\n          );\n          let rows: readonly VectorSearchRawRow[];\n          try {\n            rows = await applySearchOverrides(query, params);\n          } catch (error) {\n            // A query vector whose dimension no longer matches the stored\n            // column surfaces the same typed error as the write path.\n            throw mapVectorWriteError(error, params);\n          }\n          return rows.map((row) => ({\n            nodeId: row.node_id,\n            score: row.score,\n          }));\n        },\n      }),\n\n    async deleteSchemaVectorSlotContribution(slot: VectorSlot): Promise<void> {\n      if (deps.vectorStrategy === undefined) return;\n      const { vectorStrategy, execution, operationStrategy, contributionMaterializer } =\n        deps;\n      for (const contribution of vectorStrategy.ownedTables(slot)) {\n        await execution.execRun(\n          operationStrategy.buildDeleteContributionMaterialization({\n            graphId: slot.graphId,\n            logicalName: contribution.logicalName,\n            owner: contribution.owner,\n            tableName: contribution.tableName,\n          }),\n        );\n      }\n      // Eviction is conservative if the surrounding transaction later rolls\n      // back: the next access re-reads the still-durable marker.\n      contributionMaterializer.evictVectorSlot(slot);\n    },\n\n    async createVectorIndex(params: CreateVectorIndexParams): Promise<void> {\n      if (deps.vectorStrategy === undefined) return;\n      const { vectorStrategy, contributionMaterializer, runIndexBuild } =\n        deps;\n      const slot = vectorSlotFromCreateIndexParams(params);\n      // Ensure the per-field table + its durable marker first (privileged,\n      // idempotent), then create its ANN index. A strategy's `ownedTables`\n      // may or may not fold the index DDL into the table it builds, so this\n      // explicit step both picks up the slot's declared index parameters\n      // (e.g. `m`/`ef_construction`/`lists`) and covers slots whose index\n      // intent changed after the table was first materialized.\n      await contributionMaterializer.ensureVectorSlot(slot);\n      const indexStatement = vectorStrategy.buildCreateIndex?.(slot, {\n        concurrent: params.concurrent === true,\n      });\n      if (indexStatement !== undefined) {\n        await runIndexBuild({ slot, indexStatement });\n      }\n    },\n\n    async dropVectorIndex(params: DropVectorIndexParams): Promise<void> {\n      if (deps.vectorStrategy === undefined) return;\n      const { vectorStrategy, execution } = deps;\n      const slot = vectorSlotFromDropIndexParams(params);\n      const dropStatement = vectorStrategy.buildDropIndex?.(slot);\n      if (dropStatement === undefined) return;\n      try {\n        await execution.execRun(dropStatement);\n      } catch (error) {\n        // The per-field table (and thus its index) may never have been\n        // materialized; treat a missing relation as already-dropped\n        // (some drivers error on `DROP INDEX IF EXISTS` against a missing\n        // table rather than no-op).\n        if (!isMissingTableError(error)) throw error;\n      }\n    },\n  };\n}\n","/**\n * The shared operation-layer assembly both dialects build their\n * {@link InternalOperationBackend} through.\n *\n * `buildCommonOperationOptions` is the options-object half:\n * `createPostgresOperationBackend` and `createSqliteOperationBackend` (each\n * still dialect-owned) call it to produce the value they pass to\n * `createCommonOperationBackend` (`../operation-backend-core`), rather than\n * each building that object literal inline. Every field either comes\n * straight from a named dependency or is one of the three projection-\n * evidence callbacks below — byte-identical between dialects once\n * `contributionMaterializer` is threaded through as a dependency instead of\n * a closed-over binding.\n *\n * `createEngineOperationBackend` is the literal-assembly half: the object\n * every dialect's `create{Postgres,Sqlite}OperationBackend` returns, minus\n * the two members that genuinely cannot be shared (see its own doc\n * comment).\n */\nimport type { FulltextStrategy } from \"../../../query/dialect/fulltext-strategy\";\nimport type { SqlDialect } from \"../../../query/dialect/types\";\nimport type { VectorStrategy } from \"../../../query/dialect/vector-strategy\";\nimport type { SqlFragment } from \"../../../query/sql-fragment\";\nimport type { AtomicSqlProgramExecutor } from \"../../capabilities/atomic-sql-program\";\nimport type { FenceSql } from \"../../capabilities/write-fence\";\nimport type {\n  BackendCapabilities,\n  InsertNodeParams,\n  ManagedNodeCreatePlan,\n  TransactionBackend,\n} from \"../../types\";\nimport type { ContributionMaterializer } from \"../contribution-materializations\";\nimport type {\n  CompiledSqlQuery,\n  ExecutableSql,\n} from \"../execution/types\";\nimport {\n  type createCommonOperationBackend,\n  type InternalOperationBackend,\n} from \"../operation-backend-core\";\nimport { resolveAtomicNodeProjectionRequirements } from \"../operations/node-projections\";\nimport type { TableExistenceCacheOptions } from \"../operations/strategy\";\nimport type { ContributionOperationMembers } from \"./members/contribution-members\";\nimport type { FulltextMembers } from \"./members/fulltext-members\";\nimport type { VectorMembers } from \"./members/vector-members\";\nimport type { EngineTableNames } from \"./profile\";\n\n/**\n * The options `createCommonOperationBackend` accepts, recovered through its\n * own signature rather than re-declared here: that type is intentionally\n * module-private in `../operation-backend-core`, and re-declaring its shape\n * by hand is exactly the kind of second copy that drifts.\n */\ntype CommonOperationOptions = Parameters<typeof createCommonOperationBackend>[0];\n\n/**\n * The operation-layer fusion knobs `buildCommonOperationOptions` reads to\n * assemble one `createCommonOperationBackend` options object for either\n * dialect. `atomicProgramsAtTransactionScope` is the one fact both dialects\n * report: whether the atomic SQL program executor is threaded into a\n * transaction-scoped operation backend at all (PostgreSQL always does;\n * SQLite's transaction-scoped backend excludes it — a real capability gap,\n * not drift). Every other member is PostgreSQL-only and optional for that\n * reason: SQLite's dialect factory builds a value with only\n * `atomicProgramsAtTransactionScope` set, and PostgreSQL's builds one with\n * every member present except the three transaction-scope-only keys\n * (`schemaGraphWriteLockNamespace`, `edgeCardinalityInsertFusion`,\n * `nodeClaimInsertFusion`), which its dialect factory itself omits outside a\n * transaction-scoped operation backend. `buildCommonOperationOptions` spreads\n * each optional member into the assembled options only when the dialect\n * supplied it, so the presence-or-absence decision stays where the\n * asymmetry actually lives — in what each dialect factory constructs — and\n * the shared assembly never branches on which dialect it was called for.\n */\ntype OperationFusionHooks = Readonly<{\n  atomicProgramsAtTransactionScope: boolean;\n  /** Always `true` when present; a bundled projection-aware backend fuses managed-node projections into its INSERT. */\n  nodeProjectionInsertFusion?: true;\n  /** Read-only prerequisite gate run before a fused projection statement. */\n  beforeNodeProjectionInsert?: (\n    params: InsertNodeParams,\n    plan: ManagedNodeCreatePlan,\n  ) => Promise<void>;\n  /** Error-path projection storage classifier; must rethrow or return never. */\n  refuseNodeProjectionError?: (\n    params: InsertNodeParams,\n    plan: ManagedNodeCreatePlan,\n    error: unknown,\n  ) => Promise<never>;\n  /** Present only for a transaction-scoped operation backend. */\n  schemaGraphWriteLockNamespace?: string;\n  /**\n   * The resolved fence target's own lock-statement spelling — present\n   * whenever the profile declares one, root or transaction-scoped alike; see\n   * `CreateCommonOperationBackendOptions.fenceSql` (`../operation-backend-\n   * core`) for what it gates.\n   */\n  fenceSql?: FenceSql | undefined;\n  /** Present only for a transaction-scoped operation backend. */\n  edgeCardinalityInsertFusion?: true;\n  /** Present only for a transaction-scoped operation backend; claim plans require a caller-owned transaction to roll back refusals. */\n  nodeClaimInsertFusion?: true;\n  /** Whether a convergent edge create's dynamic (non-durable) match may inspect JSON match fields. */\n  dynamicEdgeConvergence?: true;\n  tableExistenceCache?: TableExistenceCacheOptions;\n}>;\n\n/**\n * What a dialect factory supplies to build its `createCommonOperationBackend`\n * options: every shared argument by name, plus `fusion` for the PostgreSQL-\n * only knobs (see {@link OperationFusionHooks}) and `contributionMaterializer`\n * for the three projection-evidence callbacks this assembly builds itself.\n */\nexport type CommonOperationOptionsDeps = Readonly<{\n  batchConfig: CommonOperationOptions[\"batchConfig\"];\n  commandSession: CommonOperationOptions[\"commandSession\"];\n  execution: CommonOperationOptions[\"execution\"];\n  /** Absent on a connection with no atomic-program support at all. */\n  atomicSqlProgramExecutor: AtomicSqlProgramExecutor | undefined;\n  nowIso: CommonOperationOptions[\"nowIso\"];\n  maxBindParameters: CommonOperationOptions[\"maxBindParameters\"];\n  operationStrategy: CommonOperationOptions[\"operationStrategy\"];\n  rowMappers: CommonOperationOptions[\"rowMappers\"];\n  schemaFenceLockClause: CommonOperationOptions[\"schemaFenceLockClause\"];\n  contributionMaterializer: ContributionMaterializer;\n  fusion: OperationFusionHooks;\n}>;\n\n/**\n * Assembles one `createCommonOperationBackend` options object from named\n * dependencies, identically for either dialect.\n *\n * The `atomicSqlProgramExecutor` spread is the one genuinely load-bearing\n * conditional: `exactOptionalPropertyTypes` gives that option no `|\n * undefined` (unlike every other optional member here), so the key must be\n * absent rather than present-with-undefined whenever the executor does not\n * apply. It does not apply when this is a transaction-scoped operation\n * backend on a dialect whose transaction scope excludes the executor\n * (`!fusion.atomicProgramsAtTransactionScope`) — SQLite today — or when no\n * executor was supplied at all. Every other PostgreSQL-only key\n * (`nodeProjectionInsertFusion`, `beforeNodeProjectionInsert`,\n * `refuseNodeProjectionError`, `schemaGraphWriteLockNamespace`,\n * `edgeCardinalityInsertFusion`, `nodeClaimInsertFusion`,\n * `tableExistenceCache`) is spread the same way — present only when\n * `fusion` supplies it — even though `createCommonOperationBackend`\n * happens to type those as `| undefined`: a dialect factory that never sets\n * one of these fields on `fusion` should never plant an explicit-`undefined`\n * key where today there is no key at all.\n */\nexport function buildCommonOperationOptions(\n  deps: CommonOperationOptionsDeps,\n): CommonOperationOptions {\n  const { fusion } = deps;\n  const transactionScoped = deps.commandSession === \"transaction\";\n  const atomicSqlProgramExecutorExcludedAtScope =\n    transactionScoped && !fusion.atomicProgramsAtTransactionScope;\n\n  return {\n    batchConfig: deps.batchConfig,\n    commandSession: deps.commandSession,\n    execution: deps.execution,\n    ...(atomicSqlProgramExecutorExcludedAtScope ||\n    deps.atomicSqlProgramExecutor === undefined ?\n      {}\n    : { atomicSqlProgramExecutor: deps.atomicSqlProgramExecutor }),\n    nowIso: deps.nowIso,\n    maxBindParameters: deps.maxBindParameters,\n    operationStrategy: deps.operationStrategy,\n    rowMappers: deps.rowMappers,\n    schemaFenceLockClause: deps.schemaFenceLockClause,\n    async resolveAtomicNodeProjectionEvidence(creates, updates) {\n      const requirements = resolveAtomicNodeProjectionRequirements(\n        creates,\n        updates,\n      );\n      if (requirements === undefined) return [];\n      return deps.contributionMaterializer.resolveNodeProjectionEvidence(\n        requirements.graphId,\n        requirements,\n      );\n    },\n    async diagnoseAtomicNodeProjectionEvidence(\n      creates,\n      updates,\n    ): Promise<void> {\n      const requirements = resolveAtomicNodeProjectionRequirements(\n        creates,\n        updates,\n      );\n      if (requirements === undefined) return;\n      await deps.contributionMaterializer.diagnoseNodeProjectionEvidence(\n        requirements.graphId,\n        requirements,\n      );\n    },\n    async refuseAtomicNodeProjectionError(\n      creates,\n      updates,\n      error,\n    ): Promise<never> {\n      const requirements = resolveAtomicNodeProjectionRequirements(\n        creates,\n        updates,\n      );\n      if (requirements === undefined) throw error;\n      return deps.contributionMaterializer.refuseUnavailableNodeInsertProjections(\n        requirements.graphId,\n        requirements,\n        error,\n      );\n    },\n    ...(fusion.nodeProjectionInsertFusion === undefined ?\n      {}\n    : { nodeProjectionInsertFusion: fusion.nodeProjectionInsertFusion }),\n    ...(fusion.beforeNodeProjectionInsert === undefined ?\n      {}\n    : { beforeNodeProjectionInsert: fusion.beforeNodeProjectionInsert }),\n    ...(fusion.refuseNodeProjectionError === undefined ?\n      {}\n    : { refuseNodeProjectionError: fusion.refuseNodeProjectionError }),\n    ...(fusion.schemaGraphWriteLockNamespace === undefined ?\n      {}\n    : {\n        schemaGraphWriteLockNamespace: fusion.schemaGraphWriteLockNamespace,\n      }),\n    ...(fusion.fenceSql === undefined ? {} : { fenceSql: fusion.fenceSql }),\n    ...(fusion.edgeCardinalityInsertFusion === undefined ?\n      {}\n    : { edgeCardinalityInsertFusion: fusion.edgeCardinalityInsertFusion }),\n    ...(fusion.nodeClaimInsertFusion === undefined ?\n      {}\n    : { nodeClaimInsertFusion: fusion.nodeClaimInsertFusion }),\n    ...(fusion.dynamicEdgeConvergence === undefined ?\n      {}\n    : { dynamicEdgeConvergence: fusion.dynamicEdgeConvergence }),\n    ...(fusion.tableExistenceCache === undefined ?\n      {}\n    : { tableExistenceCache: fusion.tableExistenceCache }),\n  };\n}\n\n/**\n * What `createEngineOperationBackend` assembles into one\n * {@link InternalOperationBackend} literal, identically for either dialect.\n *\n * Every dependency here is already a finished member group or a single\n * dialect-owned closure — this function does no SQL of its own. The two\n * members it deliberately does NOT assemble are `execute` and `executeRaw`:\n * PostgreSQL's `execute` inspects the statement for an ANN index-scan brand\n * and re-wraps a filtered vector search in transaction-local GUC overrides,\n * and SQLite's `execute` / `executeRaw` both serialize through its queue —\n * neither is a body a shared assembly may pick between, so both stay\n * dialect-owned and arrive here pre-built as `rawSqlMembers`. `hybridSearch`\n * is the other member left out for the same reason (see each dialect\n * factory's own comment on `vectorEmbeddingMethods`): its dialect factory\n * spreads it onto this function's result afterward.\n */\nexport type CreateEngineOperationBackendDeps = Readonly<{\n  /** `createCommonOperationBackend(buildCommonOperationOptions(...))` — built by the dialect factory's own `buildOperations` closure, which owns the execution primitives that options object closes over. */\n  commonOperationMembers: ReturnType<typeof createCommonOperationBackend>;\n  /** The transaction-scoped contribution stamp; see `./members/contribution-members`. */\n  contributionOperationMembers: ContributionOperationMembers;\n  /** The embedding CRUD/search/index group; see `./members/vector-members`. */\n  vectorMembers: VectorMembers;\n  /** The fulltext CRUD/search group; see `./members/fulltext-members`. */\n  fulltextMembers: FulltextMembers;\n  /** The dialect's raw-SQL escape hatch, built and bound to its own serialization story by the caller. */\n  rawSqlMembers: Pick<TransactionBackend, \"execute\" | \"executeRaw\">;\n  /**\n   * The write-fence-holding half of a managed write: PostgreSQL's asserts\n   * and holds a `FOR SHARE` row lock (or refuses, per the resolved fence\n   * plan); SQLite's re-reads the active version under the writer slot its\n   * own transaction framing already holds. Genuinely different bodies, so\n   * threaded through as a finished closure rather than assembled here.\n   */\n  lockSchemaVersionForWrite: NonNullable<\n    InternalOperationBackend[\"lockSchemaVersionForWrite\"]\n  >;\n  /** The dialect's execution adapter's own `compile` — byte-identical wiring on both sides. */\n  compile: (query: ExecutableSql) => CompiledSqlQuery;\n  capabilities: BackendCapabilities;\n  dialect: SqlDialect;\n  tableNames: EngineTableNames;\n  /** Absent when this backend has no fulltext support (`fulltext: false`). */\n  fulltextStrategy: FulltextStrategy | undefined;\n  /** Absent when this connection has no vector extension loaded. */\n  vectorStrategy?: VectorStrategy;\n  /**\n   * The profile's declared lock-statement spelling — see\n   * `GraphBackend.fenceSql`. Absent on a dialect that serializes writers\n   * instead of taking a lock (SQLite).\n   */\n  fenceSql?: FenceSql | undefined;\n}>;\n\n/**\n * Assembles one dialect's {@link InternalOperationBackend} from its already-\n * built member groups and closures — the shared half of what\n * `create{Postgres,Sqlite}OperationBackend` return. See\n * {@link CreateEngineOperationBackendDeps} for what stays out and why.\n */\nexport function createEngineOperationBackend(\n  deps: CreateEngineOperationBackendDeps,\n): InternalOperationBackend {\n  const {\n    commonOperationMembers,\n    contributionOperationMembers,\n    vectorMembers,\n    fulltextMembers,\n    rawSqlMembers,\n    lockSchemaVersionForWrite,\n    compile,\n    capabilities,\n    dialect,\n    tableNames,\n    fulltextStrategy,\n    vectorStrategy,\n    fenceSql,\n  } = deps;\n\n  return {\n    ...commonOperationMembers,\n    ...rawSqlMembers,\n    ...vectorMembers,\n    ...contributionOperationMembers,\n\n    capabilities,\n    dialect,\n    tableNames,\n    ...(fulltextStrategy === undefined ? {} : { fulltextStrategy }),\n    ...(vectorStrategy === undefined ? {} : { vectorStrategy }),\n    ...(fenceSql === undefined ? {} : { fenceSql }),\n\n    lockSchemaVersionForWrite,\n\n    ...fulltextMembers,\n\n    compileSql(\n      query: SqlFragment,\n    ): Readonly<{ sql: string; params: readonly unknown[] }> {\n      return compile(query);\n    },\n  };\n}\n","/**\n * The shape every SQL engine profile fills in, and the context\n * {@link createSqlBackend} (`./create-sql-backend`) hands to the parts of a\n * profile that need the assembled pipeline rather than raw configuration.\n *\n * A profile is a HEAD of plain data and dialect closures that exist before\n * any backend object does, plus an opaque `assembly` ({@link EngineAssembly},\n * `./assembly`) wrapping the operation-backend builder and the late-member\n * factory for the handful of members that are self-referential (a\n * transaction's own body calls back into the backend that opened it) or that\n * otherwise need the assembled pipeline. Nothing here ever closes over a\n * `backend` binding directly — `EngineAssemblyContext.self()` is the one\n * sanctioned way a late member reaches the backend `createSqlBackend` is\n * building, and it resolves only once that backend object exists.\n */\nimport { ConfigurationError } from \"../../../errors\";\nimport type { ResolvedSqlTableNames } from \"../../../query/compiler/schema\";\nimport type { FulltextStrategy } from \"../../../query/dialect/fulltext-strategy\";\nimport type { SqlDialect } from \"../../../query/dialect/types\";\nimport type { VectorStrategy } from \"../../../query/dialect/vector-strategy\";\nimport type {\n  FenceSql,\n  WriteFencePlan,\n  WriteFenceTarget,\n} from \"../../capabilities/write-fence\";\nimport type { BackendResourceAudit } from \"../../transaction-resource\";\nimport type {\n  AdapterBackend,\n  BackendCapabilities,\n  BackendCatalogProbes,\n  EngineRecordedTimeMembers,\n  LineageMembers,\n  SchemaProvisioning,\n  TransactionBackend,\n} from \"../../types\";\nimport type { ContributionMaterializer } from \"../contribution-materializations\";\nimport type { SqlExecutionAdapter } from \"../execution/types\";\nimport type { InternalOperationBackend } from \"../operation-backend-core\";\nimport type { CommonOperationStrategy } from \"../operations/strategy\";\nimport type { EngineAssembly } from \"./assembly\";\nimport type { CreateBaseSchemaMembersDeps } from \"./members/base-schema-members\";\nimport type { CreateContributionMembersDeps } from \"./members/contribution-members\";\nimport type { CreateGraphTemplateMembersDeps } from \"./members/graph-template-members\";\nimport type { CreateIdentityMembersDeps } from \"./members/identity-members\";\nimport type { CreateIndexMaterializationMembersDeps } from \"./members/index-materialization-members\";\nimport type { CreateKindRemovalMembersDeps } from \"./members/kind-removal-members\";\n\n/** Resolved physical table names, uniform across dialects. */\nexport type EngineTableNames = ResolvedSqlTableNames;\n\n/** Resolve the adapter's physical-provisioning policy once at construction. */\nexport function resolveSchemaProvisioning(\n  value: unknown,\n): SchemaProvisioning {\n  if (value === undefined) return \"dml-only\";\n  if (value === \"dml-only\" || value === \"transactional\") return value;\n  throw new ConfigurationError(\n    \"schemaProvisioning must be 'dml-only' or 'transactional'.\",\n    { option: \"schemaProvisioning\", value },\n  );\n}\n\n/**\n * The DDL primitives a profile owns. Every DDL statement any member group\n * emits goes through one of these rather than a bare `db.execute` /\n * `db.run`, so each dialect's wrinkle stays in one place: SQLite's DDL\n * bypasses its serialized queue on purpose, and PostgreSQL's `ensureTable`\n * carries a concurrent-create retry because two replicas can boot against\n * the same database at once.\n */\nexport type EngineProvisioning = Readonly<{\n  /**\n   * Runs ONE DDL statement with no concurrency handling — the semantics of\n   * the adapter's own `executeDdl` member. Never use it for a create that\n   * two booting processes can race; that is what `ensureTable` is for.\n   */\n  executeDdl: (ddl: string) => Promise<void>;\n  /**\n   * Runs one already-rendered `CREATE ...` statement idempotently, carrying\n   * the dialect's concurrent-create retry where the engine needs one\n   * (PostgreSQL). Every bootstrap and `ensure*` path that creates a relation\n   * must use this arm, not `executeDdl`.\n   */\n  ensureTable: (ddl: string) => Promise<void>;\n  /** The full set of base-schema DDL statements for a fresh bootstrap. */\n  generateDdl: () => readonly string[];\n  /**\n   * PostgreSQL's additive-column migration for an index-materializations\n   * table created before the build-claim columns existed. Absent on\n   * dialects with no such migration to run.\n   */\n  ensureIndexMaterializationColumns?: (tableName: string) => Promise<void>;\n  /**\n   * The physical-schema introspection surface `createSqlBackend` forwards\n   * onto the assembled backend's `catalog` member unchanged. Optional: a\n   * profile that omits it produces a backend with no `catalog`, exactly\n   * like any other optional `GraphBackend` member.\n   */\n  catalog?: BackendCatalogProbes;\n  /**\n   * The engine-revision and change-delta surface `createSqlBackend`\n   * forwards onto the assembled backend's `lineage` member unchanged.\n   * Optional: a profile that omits it produces a backend with no\n   * `lineage`, exactly like any other optional `GraphBackend` member —\n   * neither bundled Drizzle profile supplies one today, so a store's own\n   * recorded-relations lineage (when history is on) is what backs the\n   * capability instead.\n   */\n  lineage?: LineageMembers;\n  /**\n   * The engine-native recorded-time source and revision clock\n   * `createSqlBackend` forwards onto the assembled backend's\n   * `recordedTime` member unchanged. Optional: a profile that omits it\n   * produces a backend with no `recordedTime`, exactly like any other\n   * optional `GraphBackend` member — neither bundled Drizzle profile\n   * supplies one today, so `history`/`revisionTracking` always allocate\n   * TypeGraph's own recorded clock and relations instead. A profile that\n   * declares this must also declare `lineage`; `createSqlBackend` refuses\n   * one that declares only `recordedTime`.\n   */\n  recordedTime?: EngineRecordedTimeMembers;\n}>;\n\n/**\n * What a profile's `buildOperations` closure (wrapped, along with\n * `lateMembers`, into the opaque `assembly` {@link SqlEngineProfile} carries\n * — see `./assembly`) receives instead of only the contribution\n * materializer: the capabilities, fence plan, and fence target\n * {@link createSqlBackend} has already resolved from the profile's own\n * `declaredCapabilities`, before any member group — including the operation-\n * backend layer this builds — is assembled.\n *\n * `createSqlBackend` is the ONE place that runs `finalizeEngineCapabilities`\n * (`./capabilities`) and builds the fence target; a dialect's `buildOperations`\n * closure reads `capabilities` / `fenceTarget` off this context rather than\n * deriving its own copy, so the `InternalOperationBackend` it builds always\n * agrees with every late member and every mark site about what this backend\n * declares and which fence it resolves.\n */\nexport type EngineOperationsContext = Readonly<{\n  /** The backend's capabilities after `finalizeEngineCapabilities` runs on `declaredCapabilities`. */\n  capabilities: BackendCapabilities;\n  /** The write-fence decision, resolved once from `fenceTarget`. */\n  fencePlan: WriteFencePlan;\n  /**\n   * ONE fence target for the whole backend and every transaction-scoped one\n   * it builds, built by `createSqlBackend` from the capabilities above and\n   * marked first-party the same way the two bundled builders always did.\n   */\n  fenceTarget: WriteFenceTarget;\n  /** The contribution materializer `createSqlBackend` built from `profile.contributionRuntime`. */\n  contributionMaterializer: ContributionMaterializer;\n  /**\n   * Whether `profile` is the exact object `isFirstPartyProfile`\n   * (`../../capabilities/write-fence`) recognizes — resolved once by\n   * `createSqlBackend` and reused for every transaction-scoped backend a\n   * dialect's `lateMembers` opens, so a handle it hands out carries the\n   * SAME standing as the root rather than re-checking a copy, spread, or\n   * otherwise derived profile that is a different object and is never\n   * first-party. A dialect gates its own `markFirstPartyFactory` call on a\n   * TypeGraph-opened transaction handle on this flag exactly as\n   * `createSqlBackend` gates the root and fence-target marks on it;\n   * `adoptTransaction` — a caller-driven, unaudited transaction lifetime —\n   * passes `false` regardless of this flag, never this value.\n   */\n  isFirstParty: boolean;\n}>;\n\n/**\n * What a profile's late-bound members receive instead of the whole profile\n * or a partially built backend: everything {@link EngineOperationsContext}\n * carries, plus the assembled operation-backend layer and `self()` — a\n * thunk resolving to the exact backend object {@link createSqlBackend} is\n * building, safe to call only once that object has been returned to a\n * caller who could invoke it (i.e., never during the profile's own\n * construction).\n */\nexport type EngineAssemblyContext<TTx> = EngineOperationsContext &\n  Readonly<{\n    /** The operation-backend layer `createSqlBackend` built from the `buildOperations` closure the profile's assembly wraps (`./assembly`). */\n    operations: InternalOperationBackend;\n    /** Resolves to the backend `createSqlBackend` is building. */\n    self: () => AdapterBackend<TTx>;\n  }>;\n\n/**\n * The late-bound member groups a profile supplies, assembled by\n * {@link createSqlBackend} from `EngineAssemblyContext`. `transactions`,\n * `rawSql`, `maintenance`, `trustedImport`, and `extensions` stay\n * dialect-owned forever — none of them is a mirror waiting to be extracted\n * into a shared `members/*.ts` file, because each genuinely differs in body\n * between engines (self-referential transaction framing, the raw-SQL escape\n * hatch's driver-level binding and decoding, a lock clause resolved from the\n * fence plan).\n */\nexport type EngineLateMembers<TTx> = Readonly<{\n  /**\n   * The backend's transaction-opening surface. Self-referential — a\n   * transaction's own body calls back into the backend that opened it —\n   * which is why these are late members reached through\n   * `EngineAssemblyContext.self()` rather than head data. Also where\n   * `contributionMaterializer`-dependent construction (a transaction-scoped\n   * operation backend) stays dialect-owned, reached through\n   * `ctx.contributionMaterializer` rather than a closed-over local.\n   */\n  transactions: Pick<\n    AdapterBackend<TTx>,\n    | \"transaction\"\n    | \"transactionWithNative\"\n    | \"adoptTransaction\"\n    | \"adoptSchemaWriteTransaction\"\n    | \"schemaWriteTransaction\"\n  >;\n  fence: Readonly<{\n    /**\n     * The internal, write-fence-holding transaction runner every\n     * schema-commit method — and `createSqlBackend`'s own contribution-\n     * rebuild wiring — delegates to. `fn` receives the full\n     * `InternalOperationBackend` — including `commitSchemaVersion` and\n     * `setActiveVersion`, which the narrower, publicly-reachable\n     * `SchemaWriteTransactionBackend` deliberately omits — because this\n     * runner is the trusted internal caller the lock exists to gate, not\n     * the public `schemaWriteTransaction` surface a caller's preflight\n     * runs against. Not itself an `AdapterBackend` member — SQLite's schema\n     * lock is per-connection, so its implementation ignores `graphId`,\n     * exactly like the uniform-signature wrapper it already exposes to its\n     * contribution materializer.\n     */\n    runSchemaWriteTransaction: <T>(\n      graphId: string,\n      fn: (target: InternalOperationBackend) => Promise<T>,\n    ) => Promise<T>;\n  }>;\n  /**\n   * The backend's raw-SQL escape hatch. Dialect-owned because parameter\n   * binding and result decoding both go through the driver directly here,\n   * bypassing the operation-backend layer's own row mapping.\n   */\n  rawSql: Pick<TransactionBackend, \"execute\" | \"executeRaw\">;\n  /**\n   * Statistics/maintenance operations the query planner benefits from\n   * (e.g. an `ANALYZE`-shaped refresh); dialect-specific SQL hidden behind\n   * one uniform member.\n   */\n  maintenance: Pick<AdapterBackend<TTx>, \"refreshStatistics\">;\n  trustedImport?: AdapterBackend<TTx>[\"trustedImport\"];\n  /**\n   * Optional install/claim members — database extensions, index-\n   * materialization claims, edge-match identity storage — that only some\n   * dialects or configurations expose.\n   */\n  extensions?: Partial<\n    Pick<\n      AdapterBackend<TTx>,\n      | \"ensureExtension\"\n      | \"ensureTrigramExtension\"\n      | \"claimIndexMaterialization\"\n      | \"releaseIndexMaterializationClaim\"\n      | \"ensureEdgeMatchIdentityStorage\"\n    >\n  >;\n}>;\n\n/**\n * What a profile supplies `createSqlBackend` to build the contribution\n * member group, beyond what the profile's own head already carries\n * (`dialect`, `fulltext`, `vector`) and what `createSqlBackend` derives\n * itself (`fenceTarget` from the finalized capabilities;\n * `ensureTable`/`execute`/`operationStrategy` from\n * `provisioning`/`execution`/`strategy`; and `schemaWriteTransaction` from\n * the fence's own late member, once it exists). See\n * `members/contribution-members.ts` for what each field does.\n */\nexport type ContributionRuntime = Omit<\n  CreateContributionMembersDeps,\n  | \"dialect\"\n  | \"fulltextStrategy\"\n  | \"vectorStrategy\"\n  | \"fenceTarget\"\n  | \"ensureTable\"\n  | \"execute\"\n  | \"operationStrategy\"\n  | \"schemaWriteTransaction\"\n>;\n\n/**\n * What a profile supplies `createSqlBackend` to build the identity/\n * recorded-relation member group, beyond `ensureTable` (from `provisioning`)\n * and `contributionTableExists` (from the contribution member group\n * `createSqlBackend` builds first). See `members/identity-members.ts`.\n */\nexport type IdentityRuntime = Omit<\n  CreateIdentityMembersDeps,\n  \"ensureTable\" | \"contributionTableExists\"\n>;\n\n/**\n * What a profile supplies `createSqlBackend` to build the graph-template\n * member group, beyond `ensureTable` (from `provisioning`), `execute` (the\n * operation layer's own `execute`, once `createSqlBackend` has built it),\n * and `fencePlan`/`fenceTarget` (resolved and built once by `createSqlBackend`\n * before it builds this member group — the same pair every other member\n * group shares). See `members/graph-template-members.ts`.\n */\nexport type GraphTemplateRuntime = Omit<\n  CreateGraphTemplateMembersDeps,\n  \"ensureTable\" | \"execute\" | \"fencePlan\" | \"fenceTarget\"\n>;\n\n/**\n * What a profile supplies `createSqlBackend` to build the base-schema\n * lifecycle member group, beyond `ensureTable`/`executeDdl`/`generateDdl`\n * (from `provisioning`) and `ensureGraphTemplatesTable` (from the\n * graph-template member group `createSqlBackend` builds first). See\n * `members/base-schema-members.ts`.\n */\nexport type BaseSchemaRuntime = Omit<\n  CreateBaseSchemaMembersDeps,\n  \"ensureTable\" | \"executeDdl\" | \"generateDdl\" | \"ensureGraphTemplatesTable\"\n>;\n\n/**\n * What a profile supplies `createSqlBackend` to build the index-\n * materializations member group, beyond `ensureTable` /\n * `ensureIndexMaterializationColumns` (both from `provisioning`). See\n * `members/index-materialization-members.ts`.\n */\nexport type IndexMaterializationRuntime = Omit<\n  CreateIndexMaterializationMembersDeps,\n  \"ensureTable\" | \"ensureIndexMaterializationColumns\"\n>;\n\n/**\n * What a profile supplies `createSqlBackend` to build the kind-removals\n * member group, beyond `ensureTable` (from `provisioning`). See\n * `members/kind-removal-members.ts`.\n */\nexport type KindRemovalRuntime = Omit<\n  CreateKindRemovalMembersDeps,\n  \"ensureTable\"\n>;\n\n/**\n * Everything one SQL engine contributes to `createSqlBackend`: a HEAD of\n * data and dialect closures that exist before any backend object does,\n * including the opaque `assembly` that wraps the operation-backend builder\n * and the late-member factory for the members that need the assembled\n * pipeline (see the module doc comment for why the split exists).\n *\n * First-party standing — `resolveWriteFencePlan`'s dialect-derivation\n * fallback (sound only for the two bundled dialects) and the lazy\n * schema-fence lease `store/operations/write-transaction.ts` takes out\n * under `isFirstPartyFactory` — is not a field on this type. It is bound to\n * the exact object `buildSqliteEngineProfile` / `buildPostgresEngineProfile`\n * returned, via `isFirstPartyProfile` (`../../capabilities/write-fence`), an\n * identity check `createSqlBackend` runs on the `profile` argument it\n * receives. A copy, spread, or otherwise derived profile is a new object\n * that check has never seen, so it never carries this standing forward —\n * no field could grant it the way a spread grants every other key.\n */\nexport type SqlEngineProfile<TTx> = Readonly<{\n  /**\n   * The dialect this profile is for. `createSqlBackend` threads it through\n   * unexamined — into the write-fence declaration line, the fence-target\n   * marker, and the profile-refusal error — never branches on it itself.\n   */\n  dialect: SqlDialect;\n  tableNames: EngineTableNames;\n  /**\n   * Every statement any shared member group issues goes through this\n   * adapter's `execAll`/`execGet`/`execRun`, which is where a dialect\n   * serializes its own SQL over its own driver.\n   */\n  execution: SqlExecutionAdapter;\n  /**\n   * The dialect's SQL-fragment strategy (table/column resolution, JSON and\n   * locking-clause construction) the operation-backend layer assembles\n   * its writes and reads against.\n   */\n  strategy: CommonOperationStrategy;\n  /**\n   * The dialect's full-text search strategy, or `undefined` when this\n   * backend has no fulltext support (`fulltext: false`). Feeds capability\n   * derivation and search compilation.\n   */\n  fulltext: FulltextStrategy | undefined;\n  /** The dialect's vector-search strategy, or `undefined` when this connection has no vector extension loaded. */\n  vector: VectorStrategy | undefined;\n  /** The dialect's declared capabilities, before its capability tail runs. */\n  declaredCapabilities: BackendCapabilities;\n  /** Adapter policy for provisioning inside caller-owned schema transactions. */\n  schemaProvisioning: SchemaProvisioning;\n  /**\n   * The serialized-resource verdict {@link createSqlBackend} records once,\n   * before the backend object escapes (see `../../transaction-resource.ts`).\n   */\n  resourceAudit: BackendResourceAudit;\n  /**\n   * Declares whether a single statement outside an explicit transaction has\n   * this engine's full durability and atomicity. `createSqlBackend` marks\n   * the backend's bundled root autocommit-eligible on this word alone — a\n   * profile that gets it wrong makes callers trust a write that is not yet\n   * durable.\n   */\n  autocommit: Readonly<{ singleStatementDurable: boolean }>;\n  provisioning: EngineProvisioning;\n  /**\n   * The lock-statement spelling this engine's fence plan carries when it\n   * resolves to `lock`: `createSqlBackend` folds it into the one fence\n   * target it builds, and the backend advertises it as `fenceSql`. Absent\n   * on an engine whose fence is `engine-serialized`.\n   */\n  fenceSql?: FenceSql;\n  /** Deps for the contribution-marker member group; see {@link ContributionRuntime}. */\n  contributionRuntime: ContributionRuntime;\n  /** Deps for the identity/recorded-relation member group; see {@link IdentityRuntime}. */\n  identityRuntime: IdentityRuntime;\n  /** Deps for the graph-template member group; see {@link GraphTemplateRuntime}. */\n  graphTemplateRuntime: GraphTemplateRuntime;\n  /** Deps for the base-schema lifecycle member group; see {@link BaseSchemaRuntime}. */\n  baseSchemaRuntime: BaseSchemaRuntime;\n  /** Deps for the index-materializations member group; see {@link IndexMaterializationRuntime}. */\n  indexMaterializationRuntime: IndexMaterializationRuntime;\n  /** Deps for the kind-removals member group; see {@link KindRemovalRuntime}. */\n  kindRemovalRuntime: KindRemovalRuntime;\n  /** The `GraphBackend` member of the same name. */\n  close: () => Promise<void>;\n  /**\n   * This dialect's operation-backend builder and late-member factory,\n   * wrapped opaquely — see {@link EngineAssembly} (`./assembly`) for what it\n   * hides and why. Bundled-only: the two builders are the only callers of\n   * `assembleEngine`, `createSqlBackend` resolves it once via\n   * `resolveEngineAssembly`, and `deriveEngineProfile` carries a base\n   * profile's `assembly` forward by reference rather than building its own.\n   */\n  assembly: EngineAssembly<TTx>;\n}>;\n","/**\n * Get-or-create with LRU eviction on a `Map`.\n *\n * Map insertion order is the LRU order: cache hits delete + reinsert\n * the entry to promote it to most-recently-used; on miss, the oldest\n * entry is evicted once the map exceeds `cacheMax`. Used by both the\n * PostgreSQL prepared-statement-name cache and the SQLite prepared-\n * statement cache.\n */\nexport function getOrCreateLru<K, V>(\n  cache: Map<K, V>,\n  key: K,\n  cacheMax: number,\n  create: () => V,\n): V {\n  const cached = cache.get(key);\n  if (cached !== undefined) {\n    cache.delete(key);\n    cache.set(key, cached);\n    return cached;\n  }\n  const value = create();\n  cache.set(key, value);\n  if (cache.size > cacheMax) {\n    const oldest = cache.keys().next().value;\n    if (oldest !== undefined) cache.delete(oldest);\n  }\n  return value;\n}\n","import { entityKind, type SQL as DrizzleSql } from \"drizzle-orm\";\nimport {\n  type PgDatabase,\n  type PgQueryResultHKT,\n  type PgTransaction,\n} from \"drizzle-orm/pg-core\";\nimport { type ExtractTablesWithRelations } from \"drizzle-orm/relations\";\n\nimport { ConfigurationError } from \"../../../errors\";\nimport { isSqlFragment } from \"../../../query/sql-fragment\";\nimport { shouldForceCustomPlan } from \"../../../query/sql-intent\";\nimport { getOrCreateLru } from \"./lru\";\nimport {\n  type CompiledSqlQuery,\n  compileQueryWithDialect,\n  type ExecutableSql,\n  type PreparedSqlStatement,\n  type SqlExecutionAdapter,\n  toDrizzleSql,\n} from \"./types\";\n\n/**\n * Edge-safe: this module is loaded on Cloudflare Workers / Vercel Edge\n * via `@neondatabase/serverless`, so it must not statically import any\n * `node:*` module. Use only platform-neutral primitives.\n */\n\ntype PgQueryResult = Readonly<{\n  rows: readonly unknown[];\n}>;\n\n/**\n * The wire-protocol-shaped client the fast path calls. Both the wrapped\n * node-postgres and postgres-js clients normalize to this signature; what\n * differs is whether the underlying driver gets a server-side prepared\n * statement (node-postgres path) or relies on its own internal preparation\n * (postgres-js).\n */\ntype PgQueryClient = Readonly<{\n  query: (\n    sqlText: string,\n    params: readonly unknown[],\n  ) => Promise<PgQueryResult>;\n  /**\n   * Executes WITHOUT a named server-side prepared statement, so the\n   * server plans against the actual parameter values on every call.\n   * Used for statements marked `markForceCustomPlan` (see sql-intent).\n   */\n  queryUnnamed: (\n    sqlText: string,\n    params: readonly unknown[],\n  ) => Promise<PgQueryResult>;\n}>;\n\n/**\n * Minimal shape of the node-postgres / @neondatabase/serverless client\n * we rely on. Both accept either positional `query(text, values)`\n * (unnamed) or the configuration-object form `query({name, text, values})`\n * which uses a server-side prepared statement keyed by `name`.\n */\ntype NodePgQueryConfig = Readonly<{\n  name: string;\n  text: string;\n  values: readonly unknown[];\n}>;\n\ntype NodePgClient = Readonly<{\n  query: ((\n    sqlText: string,\n    params?: readonly unknown[],\n  ) => Promise<PgQueryResult>) &\n    ((config: NodePgQueryConfig) => Promise<PgQueryResult>);\n}>;\n\n/**\n * Minimal shape of the postgres-js tagged-template `Sql` client we rely on\n * for the raw fast path. `unsafe(sqlText, params)` is postgres-js's\n * parameterized-raw-SQL entry point and resolves to a row array.\n */\ntype PostgresJsClient = ((...args: readonly unknown[]) => unknown) &\n  Readonly<{\n    unsafe: (\n      sqlText: string,\n      params?: readonly unknown[],\n      queryOptions?: Readonly<{ prepare?: boolean }>,\n    ) => PromiseLike<readonly unknown[]>;\n  }>;\n\ntype NeonHttpBatchClient = Readonly<{\n  query: (\n    sqlText: string,\n    params?: readonly unknown[],\n  ) => PromiseLike<readonly unknown[]>;\n  transaction: (\n    queries: readonly PromiseLike<readonly unknown[]>[],\n  ) => Promise<readonly unknown[]>;\n}>;\n\ntype PgSessionCarrier = Readonly<{\n  client?: unknown;\n  constructor?: Readonly<{ name?: string }>;\n}>;\n\ntype PgClientCarrier = Readonly<{\n  $client?: unknown;\n  /** Drizzle's transaction handle keeps the pinned driver here. */\n  session?: PgSessionCarrier;\n  /** Defensive fallback for Drizzle builds exposing only the internal bag. */\n  _?: Readonly<{\n    session?: PgSessionCarrier;\n  }>;\n}>;\n\nconst INTERACTIVE_POSTGRES_DATABASE_KINDS = new Set([\n  \"NeonServerlessDatabase\",\n  \"NodePgDatabase\",\n  \"PgliteDatabase\",\n  \"PostgresJsDatabase\",\n]);\n\nfunction isRecognizedInteractivePostgresDatabase(db: AnyPgDatabase): boolean {\n  const constructor = (\n    db as unknown as Readonly<{\n      constructor?: Readonly<Record<PropertyKey, unknown>>;\n    }>\n  ).constructor;\n  return INTERACTIVE_POSTGRES_DATABASE_KINDS.has(\n    String(constructor?.[entityKind]),\n  );\n}\n\nexport type AnyPgDatabase = PgDatabase<\n  PgQueryResultHKT,\n  Record<string, unknown>\n>;\n\n/**\n * A driver-agnostic Drizzle PostgreSQL transaction handle.\n *\n * Unlike {@link AnyPgDatabase}, this type cannot be satisfied by a root\n * database. It is the native handle exposed to adapter-aware stores and\n * accepted when adopting a caller-owned PostgreSQL transaction.\n */\nexport type AnyPgTransaction = PgTransaction<\n  PgQueryResultHKT,\n  Record<string, unknown>,\n  ExtractTablesWithRelations<Record<string, unknown>>\n>;\n\nexport type PostgresExecutionAdapter = SqlExecutionAdapter;\n\n/**\n * Duck-typing primitive for the client-shape predicates: `value` carries a\n * callable `property`. Shared with the serialized-resource detection in\n * `../postgres.ts` so both spell \"has this method\" the same way.\n */\nexport function hasFunctionProperty<K extends string>(\n  value: unknown,\n  property: K,\n): value is Readonly<Record<K, (...args: readonly unknown[]) => unknown>> {\n  if (value === undefined || value === null) {\n    return false;\n  }\n  const candidate = value as Readonly<Record<K, unknown>>;\n  return typeof candidate[property] === \"function\";\n}\n\nfunction isPgNativeClient(candidate: unknown): candidate is NodePgClient {\n  // pg `Pool` / `Client` and @neondatabase/serverless `Pool` / `Client`\n  // are object instances with a `.query` method. We require non-callable\n  // here so we don't accidentally swallow the postgres-js or neon-http\n  // tagged-template clients (both callable, both also expose `.query`).\n  return (\n    typeof candidate === \"object\" && hasFunctionProperty(candidate, \"query\")\n  );\n}\n\nfunction isPgliteClient(candidate: unknown): candidate is NodePgClient {\n  // PGlite (Postgres-in-WASM) exposes `.query(sql, params, options)` like\n  // node-postgres and so also satisfies `isPgNativeClient` — but it does NOT\n  // accept the `{name, text, values}` named-statement config form. Passing\n  // that object doesn't merely fail the call: it desyncs PGlite's single\n  // wire connection, so every subsequent query errors with `08P01`. Detect\n  // PGlite structurally via `dumpDataDir` (a PGlite-specific method absent on\n  // pg `Pool`/`Client`) so `resolvePgClient` can route it to the unnamed\n  // positional wrapper regardless of `prepareStatements`. Duck-typed with no\n  // static import, keeping this module dependency-free and edge-safe.\n  return (\n    typeof candidate === \"object\" &&\n    hasFunctionProperty(candidate, \"query\") &&\n    hasFunctionProperty(candidate, \"dumpDataDir\")\n  );\n}\n\n/**\n * PGlite 0.5.x serializes the wire-protocol parameter count as a signed\n * 16-bit integer. At 32,768 binds it silently returns no rows and leaves the\n * client returning false-empty results, so the advertised budget must stay at\n * the largest signed 16-bit value.\n */\nexport const PGLITE_MAX_BIND_PARAMETERS = 32_767;\n\n/** Returns the PGlite client that owns a root Drizzle database, if present. */\nexport function getPgliteClient(db: AnyPgDatabase): object | undefined {\n  const client = (db as PgClientCarrier).$client;\n  return isPgliteClient(client) ? client : undefined;\n}\n\n/** Detects a root Drizzle database backed by PGlite without importing it. */\nexport function isPgliteDatabase(db: AnyPgDatabase): boolean {\n  return getPgliteClient(db) !== undefined;\n}\n\nfunction transactionSession(\n  carrier: PgClientCarrier,\n): PgSessionCarrier | undefined {\n  return carrier.session ?? carrier._?.session;\n}\n\nfunction hasPgliteSession(carrier: PgClientCarrier): boolean {\n  return transactionSession(carrier)?.constructor?.name === \"PgliteSession\";\n}\n\n/**\n * Single owner of \"this callable client is postgres-js\". Shared with the\n * serialized-resource detection in `../postgres.ts`, which reads `options.max`\n * off the same client shape, so the fast path and the marking predicate cannot\n * drift about which callables are postgres-js.\n */\nexport function isPostgresJsClient(\n  candidate: unknown,\n): candidate is PostgresJsClient {\n  // postgres-js's tagged-template Sql is callable, has `.unsafe` (raw\n  // parameterized executor), and has `.begin` (transaction starter). The\n  // transaction-scoped `TransactionSql` replaces `.begin` with `.savepoint`;\n  // accept either so a Drizzle transaction keeps the fast path pinned.\n  // Neon HTTP is also callable + has `.unsafe`, but that `.unsafe` is a\n  // fragment builder rather than a query executor, so we discriminate\n  // on `.begin` / `.savepoint` (postgres-js only).\n  return (\n    typeof candidate === \"function\" &&\n    hasFunctionProperty(candidate, \"unsafe\") &&\n    (hasFunctionProperty(candidate, \"begin\") ||\n      hasFunctionProperty(candidate, \"savepoint\"))\n  );\n}\n\n/**\n * @neondatabase/serverless's `neon(url)` HTTP-only tagged-template\n * function. Distinguishing markers vs postgres-js: `.transaction`\n * (an HTTP-batch transaction submitter) instead of `.begin`. Its\n * `.query`/`.unsafe` methods have different signatures from pg's, so\n * the fast path can't drive them safely — Drizzle's neon-http session\n * handles them correctly via the `db.execute` slow path.\n *\n * Exported so the backend factory can refuse interactive transactions when\n * this driver is detected (HTTP cannot hold a multi-statement session).\n */\nexport function isNeonHttpClient(db: AnyPgDatabase): boolean {\n  const candidate = (db as PgClientCarrier).$client;\n  return (\n    typeof candidate === \"function\" &&\n    hasFunctionProperty(candidate, \"transaction\") &&\n    !hasFunctionProperty(candidate, \"begin\")\n  );\n}\n\n/**\n * Returns the Neon HTTP client only when its current query method is present.\n * Older Neon HTTP releases expose `transaction()` but not `query()`; those\n * clients remain correctly classified as Neon HTTP (and therefore avoid the\n * node-postgres fast path), but cannot safely provide this batch surface.\n */\nfunction resolveNeonHttpBatchClient(\n  db: AnyPgDatabase,\n): NeonHttpBatchClient | undefined {\n  if (!isNeonHttpClient(db)) return undefined;\n  const candidate = (db as PgClientCarrier).$client;\n  if (\n    typeof candidate !== \"function\" ||\n    !hasFunctionProperty(candidate, \"query\") ||\n    !hasFunctionProperty(candidate, \"transaction\")\n  ) {\n    return undefined;\n  }\n  return candidate as unknown as NeonHttpBatchClient;\n}\n\n/**\n * Default cap on the number of distinct SQL strings tracked for\n * server-side prepared statements. Mirrors the SQLite adapter's\n * `DEFAULT_PREPARED_STATEMENT_CACHE_MAX`. High-cardinality SQL text —\n * variable-length IN-list expansions, generated aliases, custom\n * `backend.execute()` calls — would otherwise grow this map (and the\n * matching per-session prepared-statement memory inside PostgreSQL)\n * without bound. The LRU bounds only TypeGraph's in-process SQL-to-name\n * lookup; safe names are never recycled, so it cannot bound prepared\n * statements retained by a live PostgreSQL connection.\n */\nconst DEFAULT_POSTGRES_STATEMENT_CACHE_MAX = 256;\n\n/**\n * Module-scope cache mapping each unique SQL text to a stable\n * prepared-statement name. PostgreSQL only requires statement names to\n * be unique per session, so a monotonic counter is sufficient — and\n * avoids depending on a hash primitive (`node:crypto` doesn't exist on\n * Cloudflare Workers, Web Crypto's digest is async).\n *\n * The cache is module-scope on purpose: pg `Pool` reuses connections,\n * and the same SQL text needs the same statement name across every\n * adapter that might end up driving the same connection. Without\n * shared naming, two adapters could try to register two different\n * statements under the same name on a recycled connection.\n *\n * Bounded by `cacheMax` per call (LRU eviction). The counter is\n * deliberately independent of the cache size so eviction never\n * recycles a name — a recycled name could collide with a still-cached\n * statement on a long-lived pg connection (\"prepared statement\n * already exists\" error with different text).\n */\nconst STATEMENT_NAME_CACHE = new Map<string, string>();\nlet nextStatementId = 0;\n\nfunction statementNameFor(sqlText: string, cacheMax: number): string {\n  return getOrCreateLru(STATEMENT_NAME_CACHE, sqlText, cacheMax, () => {\n    const name = `tg_${nextStatementId}`;\n    nextStatementId += 1;\n    return name;\n  });\n}\n\n/**\n * Test-only: reset the module-scope statement-name state. Used to\n * isolate tests that assert on counter values or eviction behavior.\n */\nexport function resetStatementNameCacheForTests(): void {\n  STATEMENT_NAME_CACHE.clear();\n  nextStatementId = 0;\n}\n\n/**\n * Walks a row and replaces any `Date` instance with its ISO-string\n * equivalent. Used to normalize node-postgres / neon-serverless output\n * when we bypass Drizzle's session: pg's default type parsers return\n * `Date` objects for `timestamptz` / `timestamp` / `date` columns, but\n * TypeGraph's row contract everywhere downstream is \"timestamps come\n * back as ISO strings.\" Drizzle's session installs a per-query type\n * override that does the same thing; this is the dependency-free,\n * edge-safe equivalent.\n *\n * O(columns × rows) — negligible for the row counts TypeGraph queries\n * return (typical: 1–100 rows × 5–30 columns).\n */\nfunction normalizeRow(row: unknown): unknown {\n  if (row === null || typeof row !== \"object\") return row;\n  let mutated: Record<string, unknown> | undefined;\n  for (const key of Object.keys(row)) {\n    const value = (row as Record<string, unknown>)[key];\n    if (value instanceof Date) {\n      mutated ??= { ...(row as Record<string, unknown>) };\n      mutated[key] = value.toISOString();\n    }\n  }\n  return mutated ?? row;\n}\n\nfunction normalizeRows(rows: readonly unknown[]): readonly unknown[] {\n  // Single-pass scan; only allocate a new array if any row contained a\n  // Date that needed normalizing. Most rows on most queries don't.\n  let mutated: unknown[] | undefined;\n  for (let index = 0; index < rows.length; index += 1) {\n    const original = rows[index];\n    const normalized = normalizeRow(original);\n    if (normalized !== original) {\n      mutated ??= [...rows] as unknown[];\n      mutated[index] = normalized;\n    }\n  }\n  return mutated ?? rows;\n}\n\n/**\n * Wraps a node-postgres / neon-serverless client so every call goes\n * through a server-side prepared statement keyed by a stable name. The\n * first call on each connection parses + plans + executes; subsequent\n * calls with the same statement name reuse the cached plan and skip\n * both parse and plan phases. Measurable on multi-CTE TypeGraph\n * queries: 3-hop drops from ~7-12ms (parse + plan + execute every call)\n * to ~0.8ms median (execute only).\n *\n * Returned rows are normalized so that `Date` objects from default pg\n * type parsers become ISO strings, matching the row shape Drizzle's\n * session would produce. Without this, `ctx.<alias>.meta.createdAt`\n * style accessors in the SELECT-result path return Date instances,\n * breaking user code that expects strings.\n */\nfunction wrapNodePgClient(\n  client: NodePgClient,\n  cacheMax: number,\n): PgQueryClient {\n  return {\n    async query(\n      sqlText: string,\n      params: readonly unknown[],\n    ): Promise<PgQueryResult> {\n      const result = await client.query({\n        name: statementNameFor(sqlText, cacheMax),\n        text: sqlText,\n        values: params,\n      });\n      return { rows: normalizeRows(result.rows) };\n    },\n    async queryUnnamed(\n      sqlText: string,\n      params: readonly unknown[],\n    ): Promise<PgQueryResult> {\n      const result = await client.query(sqlText, params);\n      return { rows: normalizeRows(result.rows) };\n    },\n  };\n}\n\n/**\n * Variant that bypasses server-side prepared statements entirely.\n * Required for pgbouncer in transaction-pool mode (named statements\n * registered on one backend connection aren't visible on the next),\n * and useful when memory-sensitive workloads can't afford to keep\n * prepared statements warm across the pool.\n *\n * Same Date→ISO normalization as `wrapNodePgClient` so the row contract\n * downstream stays identical.\n */\nfunction wrapNodePgClientUnnamed(client: NodePgClient): PgQueryClient {\n  async function queryUnnamed(\n    sqlText: string,\n    params: readonly unknown[],\n  ): Promise<PgQueryResult> {\n    const result = await client.query(sqlText, params);\n    return { rows: normalizeRows(result.rows) };\n  }\n  return {\n    query: queryUnnamed,\n    queryUnnamed,\n  };\n}\n\nfunction adaptPostgresJsClient(sql: PostgresJsClient): PgQueryClient {\n  async function query(\n    sqlText: string,\n    params: readonly unknown[],\n  ): Promise<PgQueryResult> {\n    // postgres-js handles its own statement preparation internally\n    // (controlled by the `prepare` connection option, default true),\n    // so we don't need to name statements here ourselves.\n    const rows = await sql.unsafe(sqlText, params);\n    return { rows };\n  }\n  return {\n    query,\n    async queryUnnamed(\n      sqlText: string,\n      params: readonly unknown[],\n    ): Promise<PgQueryResult> {\n      // Per-call opt-out of postgres-js's internal preparation\n      // (verified: `unsafe(text, params, { prepare: false })` leaves\n      // pg_prepared_statements empty), so custom-plan-preferring\n      // statements are re-planned against their actual parameters on\n      // every call — same contract as the node-postgres unnamed path.\n      const rows = await sql.unsafe(sqlText, params, { prepare: false });\n      return { rows };\n    },\n  };\n}\n\n/**\n * Resolves a Drizzle-wrapped PostgreSQL client to a uniform `{query}` shape\n * that the fast path can call. Supports:\n *\n * - `drizzle-orm/node-postgres` (pg Pool / Client) — wrapped to use\n *   server-side prepared statements with stable counter-derived names\n *   keyed by the SQL text (see `statementNameFor`). When\n *   `prepareStatements` is `false`, falls back to unnamed\n *   `client.query(text, values)` for pgbouncer transaction-pool\n *   compatibility.\n * - `drizzle-orm/neon-serverless` (@neondatabase/serverless Pool) —\n *   pg-Pool-compatible, takes the same wrapper as node-postgres\n * - `drizzle-orm/postgres-js` (postgres-js tagged-template Sql) — adapted\n *   via `.unsafe(sql, params)`. Safe because Drizzle installs transparent\n *   parsers on the same client instance at `drizzle()` time, so direct\n *   calls and Drizzle-routed calls produce identical row shapes.\n * - `drizzle-orm/pglite` (PGlite, Postgres-in-WASM) — routed to the unnamed\n *   wrapper unconditionally. PGlite's `.query` has no named-statement config\n *   form (and server-side prepared statements buy nothing for an in-process\n *   engine), so `prepareStatements` is ignored for it.\n *\n * Returns `undefined` for `drizzle-orm/neon-http` and any other driver we\n * don't recognize; callers fall back to `db.execute(sql)`, which goes\n * through the Drizzle session and is always correct (just without the\n * server-side prepared-statement perf win).\n */\nfunction resolvePgClient(\n  db: AnyPgDatabase,\n  prepareStatements: boolean,\n  cacheMax: number,\n  useTransactionClient: boolean,\n): PgQueryClient | undefined {\n  // Order matters: neon-http and postgres-js are both callable + have\n  // `.unsafe`, but neon-http's `.unsafe` is a fragment builder (not a\n  // query executor) and its `.query` doesn't accept the {name, text,\n  // values} config form. Skip the fast path entirely for neon-http and\n  // let Drizzle's session route the call.\n  if (isNeonHttpClient(db)) {\n    return undefined;\n  }\n  const carrier = db as PgClientCarrier;\n  // Top-level Drizzle databases expose `$client`. Transaction objects do not;\n  // they retain the exact pinned pool/client transaction on `session.client`.\n  // Reading that structural internal is what keeps trusted import on the same\n  // connection that will COMMIT/ROLLBACK, instead of accidentally using the\n  // outer pool while a transaction is open.\n  const client =\n    carrier.$client ??\n    (useTransactionClient ? transactionSession(carrier)?.client : undefined);\n  // Must precede `isPgNativeClient`: PGlite matches it too (object with\n  // `.query`), but only the unnamed wrapper is safe for it (see\n  // `isPgliteClient`).\n  if (\n    isPgliteClient(client) ||\n    (useTransactionClient && hasPgliteSession(carrier))\n  ) {\n    if (!isPgNativeClient(client)) return undefined;\n    return wrapNodePgClientUnnamed(client);\n  }\n  if (isPgNativeClient(client)) {\n    return prepareStatements ?\n        wrapNodePgClient(client, cacheMax)\n      : wrapNodePgClientUnnamed(client);\n  }\n  if (isPostgresJsClient(client)) {\n    // postgres-js handles its own preparation internally (controlled\n    // by the driver's own `prepare` connection option) — the\n    // `prepareStatements` flag here only affects the node-postgres\n    // path.\n    return adaptPostgresJsClient(client);\n  }\n  return undefined;\n}\n\n/**\n * Normalizes the result shape of `db.execute(sql)` across drivers.\n *\n * - `drizzle-orm/node-postgres` / `drizzle-orm/neon-serverless` return a\n *   pg-style `{ rows, rowCount, ... }` object.\n * - `drizzle-orm/postgres-js` returns the raw postgres-js result, which is\n *   a plain array of rows (with extra non-enumerable properties like\n *   `count` / `command`).\n *\n * The backend contract is \"a row array.\" Normalize here so every caller\n * downstream can assume the same shape.\n */\nasync function executeDrizzleQuery<TRow>(\n  db: AnyPgDatabase,\n  query: DrizzleSql,\n): Promise<readonly TRow[]> {\n  const result = await db.execute(query);\n  if (Array.isArray(result)) {\n    return result as readonly TRow[];\n  }\n  return (result as Readonly<{ rows: readonly TRow[] }>).rows;\n}\n\nfunction createPgPreparedStatement(\n  pgClient: PgQueryClient,\n  sqlText: string,\n  maxBindParameters: number | undefined,\n): PreparedSqlStatement {\n  return {\n    async execute<TRow>(params: readonly unknown[]): Promise<readonly TRow[]> {\n      assertWithinBindParameterLimit(params.length, maxBindParameters);\n      const result = await pgClient.query(sqlText, params);\n      return result.rows as readonly TRow[];\n    },\n  };\n}\n\n/**\n * Tuning options for the PostgreSQL execution fast path.\n *\n * Defaults are correct for `drizzle-orm/node-postgres` against a\n * standalone PostgreSQL or session-pooled deployment. Override when:\n *\n * - **Pooling through pgbouncer in transaction-pool mode.** Set\n *   `prepareStatements: false`. Named statements registered on one\n *   pooled backend connection aren't visible to the next, so the\n *   server-side prepared-statement cache must be off.\n * - **High-cardinality SQL text.** If the application emits many distinct\n *   compiled SQL strings (variable-length IN-list expansions, custom\n *   `backend.execute()` calls, generated aliases), set\n *   `prepareStatements: false` to avoid retaining one prepared statement per\n *   distinct SQL text on every live connection.\n */\nexport type PostgresExecutionAdapterOptions = Readonly<{\n  /**\n   * When `true` (default), node-postgres / neon-serverless calls go\n   * through `client.query({name, text, values})` so PostgreSQL caches\n   * the parsed/planned statement per session. Set to `false` to issue\n   * unnamed `client.query(text, values)` calls — required for\n   * pgbouncer transaction-pool mode.\n   */\n  prepareStatements?: boolean;\n  /**\n   * Maximum number of distinct SQL strings retained in TypeGraph's in-process\n   * SQL-to-name lookup. Defaults to `DEFAULT_POSTGRES_STATEMENT_CACHE_MAX`\n   * (256). Eviction never reuses a name, so it does not deallocate or bound\n   * prepared statements retained by live PostgreSQL connections. Ignored when\n   * `prepareStatements` is `false`.\n   */\n  preparedStatementCacheMax?: number;\n  /**\n   * Maximum parameters that one statement may dispatch. Backend factories\n   * pass their normalized capability here so every execution surface has a\n   * final fail-loud guard after batch sizing.\n   */\n  maxBindParameters?: number;\n  /**\n   * @internal Affirmative factory authorization for a root interactive atomic\n   * program. The adapter must not infer transaction isolation from methods.\n   */\n  interactiveAtomicBatch?: boolean;\n  /**\n   * @internal Resolve Drizzle's pinned transaction client. Trusted import uses\n   * this on its private adapter; ordinary transaction backends deliberately do\n   * not expose a new raw-execution surface that would change routing behavior.\n   */\n  useTransactionClient?: boolean;\n}>;\n\nexport function createPostgresExecutionAdapter(\n  db: AnyPgDatabase,\n  options: PostgresExecutionAdapterOptions = {},\n): PostgresExecutionAdapter {\n  const prepareStatements = options.prepareStatements ?? true;\n  const cacheMax =\n    options.preparedStatementCacheMax ?? DEFAULT_POSTGRES_STATEMENT_CACHE_MAX;\n  const maxBindParameters = options.maxBindParameters;\n  const neonHttpClient = resolveNeonHttpBatchClient(db);\n  const pgClient = resolvePgClient(\n    db,\n    prepareStatements,\n    cacheMax,\n    options.useTransactionClient ?? false,\n  );\n  const canOpenInteractiveAtomicBatch =\n    options.interactiveAtomicBatch === true &&\n    neonHttpClient === undefined &&\n    pgClient !== undefined &&\n    options.useTransactionClient !== true &&\n    isRecognizedInteractivePostgresDatabase(db) &&\n    hasFunctionProperty(db, \"transaction\");\n\n  function compile(query: ExecutableSql): CompiledSqlQuery {\n    return compileQueryWithDialect(db, query, \"PostgreSQL\");\n  }\n\n  function assertCompiledWithinBindParameterLimit(\n    compiledQuery: CompiledSqlQuery,\n  ): void {\n    assertWithinBindParameterLimit(\n      compiledQuery.params.length,\n      maxBindParameters,\n    );\n  }\n\n  const executeNeonAtomicBatch =\n    neonHttpClient === undefined ? undefined : (\n      async function executeNeonAtomicBatch<TRow>(\n        statements: readonly CompiledSqlQuery[],\n      ): Promise<readonly (readonly TRow[])[]> {\n        for (const statement of statements) {\n          assertCompiledWithinBindParameterLimit(statement);\n        }\n        if (statements.length === 0) return [];\n        const queries = statements.map((statement) =>\n          neonHttpClient.query(statement.sql, statement.params),\n        );\n        const results = await neonHttpClient.transaction(queries);\n        return results.map((result) => {\n          if (\n            typeof result === \"object\" &&\n            result !== null &&\n            \"rows\" in result &&\n            Array.isArray((result as { rows?: unknown }).rows)\n          ) {\n            return normalizeRows(\n              (result as { rows: readonly unknown[] }).rows,\n            ) as readonly TRow[];\n          }\n          return Array.isArray(result) ?\n              (normalizeRows(result) as readonly TRow[])\n            : [];\n        });\n      }\n    );\n\n  const executeInteractiveAtomicBatch =\n    canOpenInteractiveAtomicBatch ?\n      async function executeInteractiveAtomicBatch<TRow>(\n        statements: readonly CompiledSqlQuery[],\n      ): Promise<readonly (readonly TRow[])[]> {\n        for (const statement of statements) {\n          assertCompiledWithinBindParameterLimit(statement);\n        }\n        if (statements.length === 0) return [];\n        return db.transaction(async (tx) => {\n          const transactionAdapter = createPostgresExecutionAdapter(tx, {\n            ...options,\n            useTransactionClient: true,\n          });\n          const executeCompiled = transactionAdapter.executeCompiled;\n          if (executeCompiled === undefined) {\n            throw new ConfigurationError(\n              \"PostgreSQL atomic batch execution could not bind to its transaction client.\",\n              {\n                capability: \"execution.atomicBatch\",\n                driver: transactionSession(tx as PgClientCarrier)?.constructor\n                  ?.name,\n              },\n            );\n          }\n          const results: (readonly TRow[])[] = [];\n          for (const statement of statements) {\n            results.push(await executeCompiled<TRow>(statement));\n          }\n          return results;\n        });\n      }\n    : undefined;\n  const executeAtomicBatch =\n    executeNeonAtomicBatch ?? executeInteractiveAtomicBatch;\n\n  if (pgClient === undefined) {\n    return {\n      compile,\n      async execute<TRow>(query: ExecutableSql): Promise<readonly TRow[]> {\n        assertCompiledWithinBindParameterLimit(compile(query));\n        return executeDrizzleQuery<TRow>(\n          db,\n          isSqlFragment(query) ? toDrizzleSql(query, \"postgres\") : query,\n        );\n      },\n      ...(executeAtomicBatch === undefined ? {} : { executeAtomicBatch }),\n    };\n  }\n\n  const pgQueryClient = pgClient;\n\n  async function executeCompiled<TRow>(\n    compiledQuery: CompiledSqlQuery,\n  ): Promise<readonly TRow[]> {\n    assertCompiledWithinBindParameterLimit(compiledQuery);\n    const result = await pgQueryClient.query(\n      compiledQuery.sql,\n      compiledQuery.params,\n    );\n    return result.rows as readonly TRow[];\n  }\n\n  return {\n    compile,\n    async execute<TRow>(query: ExecutableSql): Promise<readonly TRow[]> {\n      // Fast path: compile via Drizzle's dialect, then execute through\n      // the wrapped client directly. Bypasses Drizzle's session\n      // overhead (logging spans, plan-cache bookkeeping for typed\n      // queries we don't use), and on node-postgres this also enables\n      // the server-side prepared-statement path because the wrapped\n      // client assigns each unique SQL a stable statement name.\n      const compiled = compile(query);\n      assertCompiledWithinBindParameterLimit(compiled);\n      if (isSqlFragment(query) && shouldForceCustomPlan(query)) {\n        const result = await pgQueryClient.queryUnnamed(\n          compiled.sql,\n          compiled.params,\n        );\n        return result.rows as readonly TRow[];\n      }\n      return executeCompiled<TRow>(compiled);\n    },\n    executeCompiled,\n    ...(executeAtomicBatch === undefined ? {} : { executeAtomicBatch }),\n    prepare(sqlText: string): PreparedSqlStatement {\n      return createPgPreparedStatement(\n        pgQueryClient,\n        sqlText,\n        maxBindParameters,\n      );\n    },\n  };\n}\n\nfunction assertWithinBindParameterLimit(\n  parameterCount: number,\n  maxBindParameters: number | undefined,\n): void {\n  if (maxBindParameters === undefined || parameterCount <= maxBindParameters) {\n    return;\n  }\n  throw new ConfigurationError(\n    `PostgreSQL statement uses ${parameterCount} bound parameters, exceeding ` +\n      `this backend's limit of ${maxBindParameters}.`,\n    {\n      capability: \"maxBindParameters\",\n      maxBindParameters,\n      parameterCount,\n    },\n    {\n      suggestion:\n        \"Split the operation into smaller batches or lower the batch size before retrying.\",\n    },\n  );\n}\n","import { CompilerInvariantError } from \"../../../errors\";\nimport type {\n  AtomicSqlBatchExecutor,\n  CompiledAtomicSqlStatement,\n} from \"../../capabilities/atomic-sql-program\";\nimport type { SqlExecutionAdapter } from \"./types\";\n\ntype SessionAtomicBatchExecution = Readonly<{\n  executeCompiled: NonNullable<SqlExecutionAdapter[\"executeCompiled\"]>;\n  runExclusive: NonNullable<SqlExecutionAdapter[\"runExclusive\"]>;\n}>;\n\ntype SessionAtomicBatchAdapter = Readonly<{\n  executeAtomicBatch: AtomicSqlBatchExecutor;\n}>;\n\nconst ATOMIC_PROGRAM_SAVEPOINT = \"typegraph_atomic_program\";\nconst BEGIN_ATOMIC_PROGRAM = {\n  sql: `SAVEPOINT ${ATOMIC_PROGRAM_SAVEPOINT}`,\n  params: [],\n} as const;\nconst ROLLBACK_ATOMIC_PROGRAM = {\n  sql: `ROLLBACK TO SAVEPOINT ${ATOMIC_PROGRAM_SAVEPOINT}`,\n  params: [],\n} as const;\nconst RELEASE_ATOMIC_PROGRAM = {\n  sql: `RELEASE SAVEPOINT ${ATOMIC_PROGRAM_SAVEPOINT}`,\n  params: [],\n} as const;\n\n/**\n * Adapts one already-open, exclusively reservable transaction session to the\n * closed atomic-program transport.\n *\n * `runExclusive` is load-bearing: queueing each statement independently would\n * let unrelated work on the same transaction interleave with a program. The\n * returned batch owns one queue slot for the whole sequence, while the outer\n * transaction owns commit and rollback. A savepoint keeps deliberate\n * constraint refusals from aborting that outer transaction before Store\n * diagnostics can translate them to typed errors.\n */\nexport function createSessionAtomicBatchAdapter(\n  execution: SessionAtomicBatchExecution,\n): SessionAtomicBatchAdapter {\n  const { executeCompiled, runExclusive } = execution;\n\n  return {\n    async executeAtomicBatch<TRow>(\n      statements: readonly CompiledAtomicSqlStatement[],\n    ) {\n      if (statements.length === 0) return [];\n      return runExclusive(async () => {\n        await executeCompiled(BEGIN_ATOMIC_PROGRAM);\n        const results: (readonly TRow[])[] = [];\n        try {\n          for (const statement of statements) {\n            results.push(await executeCompiled<TRow>(statement));\n          }\n          await executeCompiled(RELEASE_ATOMIC_PROGRAM);\n          return results;\n        } catch (error) {\n          try {\n            // PostgreSQL protocol- and SQL-level prepared statements survive\n            // ROLLBACK TO SAVEPOINT (verified on PostgreSQL 18), so recovery\n            // restores data state without invalidating the session's cache.\n            await executeCompiled(ROLLBACK_ATOMIC_PROGRAM);\n            await executeCompiled(RELEASE_ATOMIC_PROGRAM);\n          } catch (recoveryError) {\n            const failures = new AggregateError(\n              [error, recoveryError],\n              \"The atomic program failed and its savepoint recovery also failed.\",\n              { cause: error },\n            );\n            throw new CompilerInvariantError(\n              \"An atomic transaction session could not restore its savepoint after a failed program.\",\n              {},\n              { cause: failures },\n            );\n          }\n          throw error;\n        }\n      });\n    },\n  };\n}\n","/**\n * Per-connection statement serialization for transaction-scoped backends.\n *\n * A pooled backend hands every statement its own connection, so concurrent\n * work is genuinely concurrent. A transaction is the opposite: every\n * statement shares one pinned connection, and the PostgreSQL wire protocol\n * has no request pipelining a driver could use to keep two in flight. Drivers\n * paper over this with an internal queue — node-postgres queues on\n * `Client._queryQueue` — but that queue is deprecated as of `pg@8.22` and is\n * removed in `pg@9`:\n *\n * > Calling client.query() when the client is already executing a query is\n * > deprecated and will be removed in pg@9.0. Use async/await or an external\n * > async flow control mechanism instead.\n *\n * TypeGraph overlaps statements on a pinned connection by construction: the\n * node write pipeline issues embedding and fulltext sync concurrently, and\n * `store.transaction()` invites callers to `Promise.all` their writes. This\n * queue is the \"external async flow control mechanism\" the deprecation asks\n * for — it keeps the concurrency at the API surface while presenting exactly\n * one statement at a time to the connection.\n *\n * Wrapping is deliberately confined to transaction-scoped adapters. On a pool\n * the queue would serialize independent connections and destroy throughput.\n *\n * Edge-safe: no `node:*` imports (loaded on Workers via neon-serverless).\n */\nimport { TransactionClosedError } from \"../../../errors\";\nimport {\n  type CompiledSqlQuery,\n  type ExecutableSql,\n  type PreparedSqlStatement,\n  type SqlExecutionAdapter,\n} from \"./types\";\n\n/**\n * A {@link SqlExecutionAdapter} that runs one statement at a time and can be\n * shut so that late statements never reach the connection.\n */\nexport type SerialExecutionAdapter = SqlExecutionAdapter &\n  Readonly<{\n    runExclusive: NonNullable<SqlExecutionAdapter[\"runExclusive\"]>;\n    /**\n     * Waits for the statement currently on the wire, then refuses every\n     * later one with a {@link TransactionClosedError}.\n     *\n     * Callers invoke this at the transaction boundary, before the driver\n     * emits `COMMIT` / `ROLLBACK` on the same connection. The driver's control\n     * statement does not travel through this queue, so without the drain it\n     * would overlap a live statement; without the close, a statement the\n     * callback left running could land after the pool reclaimed the\n     * connection — inside an unrelated transaction.\n     *\n     * Idempotent.\n     */\n    drainAndClose: () => Promise<void>;\n  }>;\n\ntype StatementQueue = Readonly<{\n  /** Runs tasks one at a time, in the order they were submitted. */\n  enqueue: <T>(task: () => Promise<T>) => Promise<T>;\n  drainAndClose: () => Promise<void>;\n}>;\n\n/**\n * Swallows a statement's outcome so the queue's tail always fulfills. The\n * caller owns the result promise; the tail only tracks completion, and an\n * untouched rejection here would surface as an unhandled rejection.\n */\nfunction ignoreOutcome(): void {\n  // Intentionally empty: see above.\n}\n\nfunction createStatementQueue(): StatementQueue {\n  // Always fulfilled: a failed statement must not strand its successors, and\n  // an untouched rejection here would surface as an unhandled rejection.\n  let tail: Promise<void> = Promise.resolve();\n  let closed = false;\n\n  return {\n    enqueue<T>(task: () => Promise<T>): Promise<T> {\n      if (closed) return Promise.reject(new TransactionClosedError());\n      // Chained synchronously, so queue order is submission order.\n      const result = tail.then(() => task());\n      tail = result.then(ignoreOutcome, ignoreOutcome);\n      return result;\n    },\n\n    async drainAndClose(): Promise<void> {\n      // Close first: a statement whose continuation enqueues a successor must\n      // find the queue already shut, or it would slip in behind the drain.\n      closed = true;\n      await tail;\n    },\n  };\n}\n\n/**\n * Wraps `adapter` so at most one statement is in flight on its connection.\n *\n * Only the I/O members are queued. `compile` is pure — it renders a Drizzle\n * `SQL` to text and params without touching the connection — so it stays\n * synchronous and unqueued.\n *\n * The queue is a leaf: nothing it runs re-enters it, so a queued statement\n * can never wait on a statement queued behind it.\n */\nexport function createSerialExecutionAdapter(\n  adapter: SqlExecutionAdapter,\n): SerialExecutionAdapter {\n  const { enqueue, drainAndClose } = createStatementQueue();\n  const { executeCompiled, prepare } = adapter;\n\n  return {\n    drainAndClose,\n\n    compile(query: ExecutableSql): CompiledSqlQuery {\n      return adapter.compile(query);\n    },\n\n    execute<TRow>(query: ExecutableSql): Promise<readonly TRow[]> {\n      return enqueue(() => adapter.execute<TRow>(query));\n    },\n\n    runExclusive<T>(\n      critical: (connection: SqlExecutionAdapter) => Promise<T>,\n    ): Promise<T> {\n      // One queue slot for the whole group. `critical` receives the UNQUEUED\n      // adapter: re-entering the queue from inside the slot it already holds\n      // would deadlock, and it needs no serializing anyway — nothing else can\n      // reach the connection until the slot is released.\n      return enqueue(() => critical(adapter));\n    },\n\n    ...(executeCompiled === undefined ?\n      {}\n    : {\n        executeCompiled<TRow>(\n          compiledQuery: CompiledSqlQuery,\n        ): Promise<readonly TRow[]> {\n          return enqueue(() => executeCompiled<TRow>(compiledQuery));\n        },\n      }),\n\n    ...(prepare === undefined ?\n      {}\n    : {\n        prepare(sqlText: string): PreparedSqlStatement {\n          const statement = prepare(sqlText);\n          return {\n            execute<TRow>(\n              params: readonly unknown[],\n            ): Promise<readonly TRow[]> {\n              return enqueue(() => statement.execute<TRow>(params));\n            },\n          };\n        },\n      }),\n  };\n}\n","import { getDialect } from \"../../query/dialect\";\nimport { sql, type SqlFragment } from \"../../query/sql-fragment\";\nimport {\n  asCompiledRowsSql,\n  type CompiledRowsSql,\n} from \"../../query/sql-intent\";\nimport { type WriteFencePlan } from \"../capabilities/write-fence\";\nimport { advisoryLockSingleExpression } from \"./postgres-fence-sql\";\n\nexport type InstantiateGraphTemplateSqlParams = Readonly<{\n  graphId: string;\n  schemaHash: string;\n  schemaVersionsTableName: string;\n  templatesTableName: string;\n  contributionMaterializationsTableName: string;\n  templateId: string;\n  templateSchemaHash: string;\n}>;\n\nexport type CopyGraphTemplateContributionMarkersSqlParams = Readonly<{\n  graphId: string;\n  schemaHash: string;\n  schemaVersionsTableName: string;\n  templatesTableName: string;\n  contributionMaterializationsTableName: string;\n  templateId: string;\n  templateSchemaHash: string;\n}>;\n\n/**\n * SQLite's `is_active` TRUE literal, hoisted so the file has one spelling of\n * this decision instead of the marker-copy statement re-deriving it as a\n * bare `1` beside {@link sqliteInstantiateGraphTemplateStatement}'s own call\n * to `getDialect(\"sqlite\").booleanLiteral(true)`.\n */\nconst SQLITE_ACTIVE_LITERAL = getDialect(\"sqlite\").booleanLiteral(true);\n\n/**\n * SQLite cannot put a data-modifying CTE beside the schema INSERT. The\n * marker copy therefore runs as a second DML statement after the schema row\n * has returned. It still carries only identifiers and hashes over the wire;\n * the source document and marker values remain server-resident.\n */\nexport function copyGraphTemplateContributionMarkersStatement(\n  params: CopyGraphTemplateContributionMarkersSqlParams,\n): CompiledRowsSql {\n  const schemaVersions = sql.identifier(params.schemaVersionsTableName);\n  const templates = sql.identifier(params.templatesTableName);\n  const contributions = sql.identifier(\n    params.contributionMaterializationsTableName,\n  );\n  return asCompiledRowsSql(sql`\n    INSERT INTO ${contributions} (\n      graph_id, logical_name, owner, table_name, signature,\n      materialized_at, last_attempted_at, last_error\n    )\n    SELECT ${params.graphId}, source.logical_name, source.owner, source.table_name,\n      source.signature, source.materialized_at, source.last_attempted_at,\n      source.last_error\n    FROM ${templates} AS template\n    JOIN ${contributions} AS source\n      ON source.graph_id = json_extract(template.schema_doc, '$.graphId')\n    WHERE template.template_id = ${params.templateId}\n      AND template.schema_hash = ${params.templateSchemaHash}\n      AND EXISTS (\n        SELECT 1 FROM ${schemaVersions}\n        WHERE graph_id = ${params.graphId}\n          AND version = 1\n          AND schema_hash = ${params.schemaHash}\n          AND is_active = ${SQLITE_ACTIVE_LITERAL}\n      )\n    ON CONFLICT(graph_id, logical_name, owner, table_name) DO UPDATE SET\n      signature = excluded.signature,\n      materialized_at = excluded.materialized_at,\n      last_attempted_at = excluded.last_attempted_at,\n      last_error = excluded.last_error\n    RETURNING graph_id\n  `);\n}\n\n/**\n * SQLite's schema-row template clone: a bare `INSERT ... SELECT ...\n * RETURNING`, with the marker copy left to the caller's separate\n * {@link copyGraphTemplateContributionMarkersStatement} statement (SQLite\n * cannot place a data-modifying CTE beside this INSERT). A matching active\n * v1 is returned for an idempotent retry; a missing template and every\n * incompatible target yield no row, and SQLite cannot return a classified\n * zero-row outcome from INSERT without a second statement, so the caller\n * surfaces that deliberately broad refusal.\n *\n * The `graphId` lookup inside the marker-copy statement and this INSERT's\n * `DO UPDATE ... WHERE` column references stay dialect-local text rather\n * than the query compiler's identifier/JSON tokens, which always quote what\n * they touch: this statement's exact bytes are asserted verbatim by a\n * driver-level snapshot, and quoting an already-bare reference would change\n * them without changing what the statement does.\n */\nexport function sqliteInstantiateGraphTemplateStatement(\n  params: InstantiateGraphTemplateSqlParams,\n): SqlFragment {\n  const schemaVersions = sql.identifier(params.schemaVersionsTableName);\n  const templates = sql.identifier(params.templatesTableName);\n  const active = SQLITE_ACTIVE_LITERAL;\n  return sql`\n    INSERT INTO ${schemaVersions} (graph_id, version, schema_hash, schema_doc, created_at, is_active)\n    SELECT ${params.graphId}, 1, ${params.schemaHash},\n      json_set(schema_doc, '$.graphId', ${params.graphId}, '$.version', 1, '$.generatedAt', strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),\n      strftime('%Y-%m-%dT%H:%M:%fZ', 'now'), ${active}\n    FROM ${templates}\n    WHERE template_id = ${params.templateId}\n      AND schema_hash = ${params.templateSchemaHash}\n      AND NOT EXISTS (\n        SELECT 1 FROM ${schemaVersions}\n        WHERE graph_id = ${params.graphId}\n          AND (version != 1 OR schema_hash != ${params.schemaHash} OR is_active != ${active})\n      )\n    ON CONFLICT(graph_id, version) DO UPDATE SET schema_hash = excluded.schema_hash\n    WHERE schema_hash = excluded.schema_hash AND is_active = ${active}\n    RETURNING *\n  `;\n}\n\n/**\n * PostgreSQL's schema-row template clone: one statement, its `inserted` CTE\n * the schema INSERT and its `markers` CTE copying the template's contribution\n * markers in the same exchange — the one genuine difference from SQLite's\n * two-statement shape, which this dialect's data-modifying CTEs make\n * possible. A matching active v1 is returned for an idempotent retry; a\n * missing template and every incompatible target yield no row.\n *\n * Under every `plan.kind` except `\"row\"`, this statement's `locked` CTE also\n * takes the exact one-argument advisory lock the schema-commit fence takes\n * (`advisoryLockSingleExpression`, `postgres-fence-sql.ts`) so the two\n * mutually exclude — byte-identical to what this function always emitted\n * before `row` existed. Under `\"row\"`, the schema-commit fence's OWN\n * fence-row acquisition excludes concurrent commits instead: the caller\n * (`postgres.ts`'s `graphTemplateRuntime`) issues that acquisition as a\n * preceding statement, in the same transaction, against the identical\n * `typegraph:schema-commit:<graphId>` key `acquireSchemaWriteFence`'s row arm\n * takes — so this statement carries no lock of its own, the `locked` CTE\n * omitted and `inserted` reading from `template` alone.\n */\nexport function postgresInstantiateGraphTemplateStatement(\n  params: InstantiateGraphTemplateSqlParams,\n  plan: WriteFencePlan,\n): SqlFragment {\n  const schemaVersions = sql.identifier(params.schemaVersionsTableName);\n  const templates = sql.identifier(params.templatesTableName);\n  const contributions = sql.identifier(\n    params.contributionMaterializationsTableName,\n  );\n  const active = getDialect(\"postgres\").booleanLiteral(true);\n  const lockedCte =\n    plan.kind === \"row\" ? sql.empty() : (\n      // eslint-disable-next-line unicorn/template-indent -- this text is spliced verbatim into the statement below, whose own byte-identical shape is snapshot-asserted (tests/engine-profile-parity.test.ts); autofix would reindent it to this closure's nesting depth and change the captured statement text.\n      sql`locked AS (\n      SELECT ${advisoryLockSingleExpression(params.graphId)}\n    ), `\n    );\n  const insertedFrom = plan.kind === \"row\" ? sql`template` : sql`template, locked`;\n  return sql`\n    WITH ${lockedCte}template AS (\n      SELECT schema_hash, schema_doc FROM ${templates}\n      WHERE template_id = ${params.templateId}\n        AND schema_hash = ${params.templateSchemaHash}\n    ), inserted AS (\n      INSERT INTO ${schemaVersions} (graph_id, version, schema_hash, schema_doc, created_at, is_active)\n      SELECT ${params.graphId}, 1, ${params.schemaHash},\n        jsonb_set(jsonb_set(jsonb_set(template.schema_doc, '{graphId}', to_jsonb(${params.graphId}::text), true), '{version}', '1'::jsonb, true), '{generatedAt}', to_jsonb(to_char(clock_timestamp() AT TIME ZONE 'UTC', 'YYYY-MM-DD\"T\"HH24:MI:SS.MS\"Z\"')), true),\n        clock_timestamp(), ${active}\n      FROM ${insertedFrom}\n      WHERE NOT EXISTS (\n        SELECT 1 FROM ${schemaVersions}\n        WHERE graph_id = ${params.graphId}\n          AND (version != 1 OR schema_hash != ${params.schemaHash} OR is_active != ${active})\n      )\n      ON CONFLICT(graph_id, version) DO UPDATE SET schema_hash = EXCLUDED.schema_hash\n      WHERE ${schemaVersions}.schema_hash = EXCLUDED.schema_hash AND ${schemaVersions}.is_active = ${active}\n      RETURNING *\n    ), markers AS (\n      INSERT INTO ${contributions} (\n        graph_id, logical_name, owner, table_name, signature,\n        materialized_at, last_attempted_at, last_error\n      )\n      SELECT ${params.graphId}, source.logical_name, source.owner, source.table_name,\n        source.signature, source.materialized_at, source.last_attempted_at,\n        source.last_error\n      FROM template\n      CROSS JOIN inserted\n      JOIN ${contributions} AS source\n        ON source.graph_id = (template.schema_doc ->> 'graphId')\n      ON CONFLICT (graph_id, logical_name, owner, table_name) DO UPDATE SET\n        signature = EXCLUDED.signature,\n        materialized_at = EXCLUDED.materialized_at,\n        last_attempted_at = EXCLUDED.last_attempted_at,\n        last_error = EXCLUDED.last_error\n    )\n    SELECT * FROM inserted\n  `;\n}\n","import { TrustedImportError } from \"../../errors\";\nimport { sql } from \"../../query/sql-fragment\";\nimport { asCompiledStatementSql } from \"../../query/sql-intent\";\nimport { resolveStampedValidityLowerBound } from \"../../utils/date\";\nimport {\n  requireFenceLockTables,\n  requireWriteFence,\n  resolveWriteFencePlan,\n} from \"../capabilities/write-fence\";\nimport type {\n  InsertEdgeParams,\n  InsertNodeParams,\n  TransactionBackend,\n  TrustedImportSession,\n} from \"../types\";\nimport type { SqliteExecutionAdapter } from \"./execution/sqlite-execution\";\n\ntype TrustedImportTableNames = Readonly<{\n  nodes: string;\n  edges: string;\n}>;\n\ntype SqliteIndexDefinition = Readonly<{\n  index_name: string;\n  index_definition: string;\n}>;\n\ntype PostgresIndexDefinition = Readonly<{\n  index_name: string;\n  index_definition: string;\n}>;\n\n// Raw driver parameters need an explicit SQL NULL. `undefined` is rejected by\n// postgres.js and therefore cannot represent the same cross-driver value.\n// eslint-disable-next-line unicorn/no-null\nconst DATABASE_NULL = null;\n\nfunction quoteSqlIdentifier(identifier: string): string {\n  return `\"${identifier.replaceAll('\"', '\"\"')}\"`;\n}\n\nfunction requireRawExecution(\n  backend: TransactionBackend,\n): NonNullable<TransactionBackend[\"executeRaw\"]> {\n  if (backend.executeRaw === undefined) {\n    throw new TrustedImportError(\n      \"This backend cannot execute the raw statements required by trusted import.\",\n      \"backend_unsupported\",\n    );\n  }\n  return backend.executeRaw;\n}\n\nfunction requireStatementExecution(\n  backend: TransactionBackend,\n): NonNullable<TransactionBackend[\"executeStatement\"]> {\n  if (backend.executeStatement === undefined) {\n    throw new TrustedImportError(\n      \"This backend cannot execute the index lifecycle required by trusted import.\",\n      \"backend_unsupported\",\n    );\n  }\n  return backend.executeStatement;\n}\n\nfunction rowIndicatesExistingData(row: unknown): boolean {\n  if (typeof row !== \"object\" || row === null) return false;\n  const value = (row as Readonly<Record<string, unknown>>)[\"has_rows\"];\n  return value === true || value === 1 || value === \"1\";\n}\n\nexport async function assertTrustedImportDatabaseEmpty(\n  backend: TransactionBackend,\n  tableNames: TrustedImportTableNames,\n): Promise<void> {\n  const executeRaw = requireRawExecution(backend);\n  const rows = await executeRaw<Record<string, unknown>>(\n    `SELECT (\n       EXISTS (SELECT 1 FROM ${quoteSqlIdentifier(tableNames.nodes)} LIMIT 1)\n       OR EXISTS (SELECT 1 FROM ${quoteSqlIdentifier(tableNames.edges)} LIMIT 1)\n     ) AS has_rows`,\n    [],\n  );\n  if (!rowIndicatesExistingData(rows[0])) return;\n\n  throw new TrustedImportError(\n    \"Trusted import requires globally empty TypeGraph node and edge tables.\",\n    \"database_not_empty\",\n    { tables: [tableNames.nodes, tableNames.edges] },\n    {\n      suggestion:\n        \"Run trusted import only against a fresh, dedicated database. Use importGraph or the collection bulk APIs to add data to an existing database.\",\n    },\n  );\n}\n\n/**\n * Excludes every other writer from the imported relations for the whole\n * import: trusted import owns the entire node and edge tables for its\n * duration (the emptiness precondition `assertTrustedImportDatabaseEmpty`\n * checks right after this lock is the point), and runs inside its own\n * transaction (`transactionWithNative` in the PostgreSQL profile builder), so\n * there is no wider fence above it for an advisory key to nest inside. This\n * is the one write-fence site that takes a table lock with no advisory lock\n * preceding it.\n *\n * Resolves the write-fence plan through {@link resolveWriteFencePlan}; the\n * `lock` arm takes the relation lock below, spelled by the target's own\n * `fenceSql`.\n */\nexport async function lockPostgresTrustedImportTables(\n  backend: TransactionBackend,\n  tableNames: TrustedImportTableNames,\n): Promise<void> {\n  const executeStatement = requireStatementExecution(backend);\n  const plan = resolveWriteFencePlan(backend);\n  const fence = requireWriteFence(plan, \"trusted import\", \"drain\");\n  switch (fence.kind) {\n    case \"lock\":\n    case \"row\": {\n      if (fence.drain !== \"table-lock\") {\n        // `drain: \"quiescent\"`: the declaration already excludes concurrent\n        // writers by some other means, so this site takes no statement.\n        return;\n      }\n      await executeStatement(\n        asCompiledStatementSql(\n          requireFenceLockTables(fence, \"lockPostgresTrustedImportTables\")(\n            [tableNames.nodes, tableNames.edges],\n            \"access-exclusive\",\n          ),\n        ),\n      );\n      return;\n    }\n    case \"engine-serialized\":\n    case \"caller-serialized\": {\n      // Two things read `engine-serialized` as \"take no relation lock\". The\n      // bundled SQLite import session takes that reading its own way,\n      // without ever calling this function: it is built by\n      // `createSqliteTrustedImportSession`, which inserts under the writer\n      // slot `BEGIN IMMEDIATE` already holds. Any target — SQLite dialect\n      // or not — that declares `writeFence.mechanism: \"engine-serialized\"`\n      // instead of locks reaches this arm directly through\n      // `resolveWriteFencePlan`, and\n      // taking no relation lock is the deliberate reading of that\n      // declaration: the engine already excludes concurrent writers by\n      // construction, so this function's own table lock would add nothing.\n      // `caller-serialized` reads the same way: the deployment's own\n      // promise that no other client writes to this database already\n      // excludes the writer this table lock would otherwise hold off.\n      return;\n    }\n    default: {\n      fence satisfies never;\n    }\n  }\n}\n\nexport async function suspendSqliteSecondaryIndexes(\n  backend: TransactionBackend,\n  tableNames: TrustedImportTableNames,\n): Promise<readonly SqliteIndexDefinition[]> {\n  const executeRaw = requireRawExecution(backend);\n  const executeStatement = requireStatementExecution(backend);\n  const definitions = await executeRaw<SqliteIndexDefinition>(\n    `SELECT name AS index_name, sql AS index_definition\n       FROM sqlite_schema\n      WHERE type = 'index'\n        AND tbl_name IN (?, ?)\n        AND sql IS NOT NULL\n      ORDER BY name`,\n    [tableNames.nodes, tableNames.edges],\n  );\n  for (const definition of definitions) {\n    await executeStatement(\n      asCompiledStatementSql(\n        sql.raw(`DROP INDEX ${quoteSqlIdentifier(definition.index_name)}`),\n      ),\n    );\n  }\n  return definitions;\n}\n\nexport async function suspendPostgresSecondaryIndexes(\n  backend: TransactionBackend,\n  tableNames: TrustedImportTableNames,\n): Promise<readonly PostgresIndexDefinition[]> {\n  const executeRaw = requireRawExecution(backend);\n  const executeStatement = requireStatementExecution(backend);\n  const definitions = await executeRaw<PostgresIndexDefinition>(\n    `SELECT index_class.relname AS index_name,\n            pg_get_indexdef(index_class.oid) AS index_definition\n       FROM pg_class AS table_class\n       JOIN pg_namespace AS namespace\n         ON namespace.oid = table_class.relnamespace\n       JOIN pg_index AS index_metadata\n         ON index_metadata.indrelid = table_class.oid\n       JOIN pg_class AS index_class\n         ON index_class.oid = index_metadata.indexrelid\n       LEFT JOIN pg_constraint AS table_constraint\n         ON table_constraint.conindid = index_class.oid\n      WHERE namespace.nspname = current_schema()\n        AND table_class.relname IN ($1, $2)\n        AND table_constraint.oid IS NULL\n        AND NOT index_metadata.indisprimary\n      ORDER BY index_class.relname`,\n    [tableNames.nodes, tableNames.edges],\n  );\n  for (const definition of definitions) {\n    await executeStatement(\n      asCompiledStatementSql(\n        sql.raw(`DROP INDEX ${quoteSqlIdentifier(definition.index_name)}`),\n      ),\n    );\n  }\n  return definitions;\n}\n\nexport async function restoreSecondaryIndexes(\n  backend: TransactionBackend,\n  definitions: readonly Readonly<{ index_definition: string }>[],\n): Promise<void> {\n  const executeStatement = requireStatementExecution(backend);\n  for (const definition of definitions) {\n    await executeStatement(\n      asCompiledStatementSql(sql.raw(definition.index_definition)),\n    );\n  }\n}\n\nexport async function analyzeImportedTables(\n  backend: TransactionBackend,\n  tableNames: TrustedImportTableNames,\n): Promise<void> {\n  const executeStatement = requireStatementExecution(backend);\n  await executeStatement(\n    asCompiledStatementSql(\n      sql.raw(`ANALYZE ${quoteSqlIdentifier(tableNames.nodes)}`),\n    ),\n  );\n  await executeStatement(\n    asCompiledStatementSql(\n      sql.raw(`ANALYZE ${quoteSqlIdentifier(tableNames.edges)}`),\n    ),\n  );\n}\n\n/**\n * Encodes one-dimensional Postgres arrays as text accepted by an explicit\n * `::text[]` / `::timestamptz[]` cast. postgres.js's raw `unsafe` parameters\n * do not infer a serializer for JavaScript arrays, while node-postgres does;\n * using the wire-neutral literal keeps both drivers on the same path.\n */\nfunction postgresArray(values: readonly (string | null)[]): string {\n  return `{${values\n    .map((value) =>\n      value === DATABASE_NULL ? \"NULL\" : (\n        `\"${value.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll('\"', String.raw`\\\"`)}\"`\n      ),\n    )\n    .join(\",\")}}`;\n}\n\n/**\n * Both sessions below decide their stored lower bound through\n * {@link resolveStampedValidityLowerBound}, the same owner the Drizzle insert\n * builders use, mapping \"no bound\" to an explicit SQL NULL. Trusted import\n * bypasses those builders for throughput, so a private copy of the decision here\n * would keep minting rows readable at no coordinate long after the builders\n * stopped — which is exactly what it did before issue #407 was closed. Its\n * canonicality precondition is established per chunk by the stream's own format\n * check (`src/interchange/trusted-import.ts`), which is what makes the\n * lexicographic comparison inside the owner a chronological one here too.\n */\nexport function createSqliteTrustedImportSession(\n  executionAdapter: SqliteExecutionAdapter,\n  tableNames: TrustedImportTableNames,\n): TrustedImportSession {\n  const executePreparedRunBatch = executionAdapter.executePreparedRunBatch;\n  if (executePreparedRunBatch === undefined) {\n    throw new TrustedImportError(\n      \"Trusted import requires a synchronous SQLite driver with prepared statement support.\",\n      \"backend_unsupported\",\n    );\n  }\n\n  const nodeSql = `INSERT INTO ${quoteSqlIdentifier(tableNames.nodes)}\n    (graph_id, kind, id, props, version, valid_from, valid_to, created_at, updated_at)\n    VALUES (?, ?, ?, ?, 1, ?, ?, ?, ?)`;\n  const edgeSql = `INSERT INTO ${quoteSqlIdentifier(tableNames.edges)}\n    (graph_id, id, kind, from_kind, from_id, to_kind, to_id, props, match_identity_name, match_identity_key, valid_from, valid_to, created_at, updated_at)\n    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`;\n\n  return {\n    async insertNodes(params: readonly InsertNodeParams[]): Promise<void> {\n      if (params.length === 0) return;\n      const timestamp = new Date().toISOString();\n      await executePreparedRunBatch(\n        nodeSql,\n        params.map((item) => [\n          item.graphId,\n          item.kind,\n          item.id,\n          JSON.stringify(item.props),\n          resolveStampedValidityLowerBound(item.validFrom, item.validTo, timestamp) ??\n            DATABASE_NULL,\n          item.validTo ?? DATABASE_NULL,\n          timestamp,\n          timestamp,\n        ]),\n      );\n    },\n    async insertEdges(params: readonly InsertEdgeParams[]): Promise<void> {\n      if (params.length === 0) return;\n      const timestamp = new Date().toISOString();\n      await executePreparedRunBatch(\n        edgeSql,\n        params.map((item) => [\n          item.graphId,\n          item.id,\n          item.kind,\n          item.fromKind,\n          item.fromId,\n          item.toKind,\n          item.toId,\n          JSON.stringify(item.props),\n          item.matchIdentity?.name ?? DATABASE_NULL,\n          item.matchIdentity?.key ?? DATABASE_NULL,\n          resolveStampedValidityLowerBound(item.validFrom, item.validTo, timestamp) ??\n            DATABASE_NULL,\n          item.validTo ?? DATABASE_NULL,\n          timestamp,\n          timestamp,\n        ]),\n      );\n    },\n  };\n}\n\nexport function createPostgresTrustedImportSession(\n  backend: TransactionBackend,\n  tableNames: TrustedImportTableNames,\n): TrustedImportSession {\n  const executeRaw = requireRawExecution(backend);\n  const nodeSql = `INSERT INTO ${quoteSqlIdentifier(tableNames.nodes)}\n    (graph_id, kind, id, props, version, valid_from, valid_to, created_at, updated_at)\n    SELECT graph_id, kind, id, props::jsonb, 1, valid_from, valid_to, created_at, created_at\n      FROM UNNEST(\n        $1::text[], $2::text[], $3::text[], $4::text[],\n        $5::timestamptz[], $6::timestamptz[], $7::timestamptz[]\n      ) AS imported(graph_id, kind, id, props, valid_from, valid_to, created_at)`;\n  const edgeSql = `INSERT INTO ${quoteSqlIdentifier(tableNames.edges)}\n    (graph_id, id, kind, from_kind, from_id, to_kind, to_id, props, match_identity_name, match_identity_key, valid_from, valid_to, created_at, updated_at)\n    SELECT graph_id, id, kind, from_kind, from_id, to_kind, to_id, props::jsonb,\n           match_identity_name, match_identity_key, valid_from, valid_to, created_at, created_at\n      FROM UNNEST(\n        $1::text[], $2::text[], $3::text[], $4::text[], $5::text[],\n        $6::text[], $7::text[], $8::text[], $9::text[], $10::text[],\n        $11::timestamptz[], $12::timestamptz[], $13::timestamptz[]\n      ) AS imported(\n        graph_id, id, kind, from_kind, from_id, to_kind, to_id, props,\n        match_identity_name, match_identity_key, valid_from, valid_to, created_at\n      )`;\n\n  return {\n    async insertNodes(params: readonly InsertNodeParams[]): Promise<void> {\n      if (params.length === 0) return;\n      const timestamp = new Date().toISOString();\n      await executeRaw(nodeSql, [\n        postgresArray(params.map((item) => item.graphId)),\n        postgresArray(params.map((item) => item.kind)),\n        postgresArray(params.map((item) => item.id)),\n        postgresArray(params.map((item) => JSON.stringify(item.props))),\n        postgresArray(\n          params.map(\n            (item) =>\n              resolveStampedValidityLowerBound(item.validFrom, item.validTo, timestamp) ??\n              DATABASE_NULL,\n          ),\n        ),\n        postgresArray(params.map((item) => item.validTo ?? DATABASE_NULL)),\n        postgresArray(params.map(() => timestamp)),\n      ]);\n    },\n    async insertEdges(params: readonly InsertEdgeParams[]): Promise<void> {\n      if (params.length === 0) return;\n      const timestamp = new Date().toISOString();\n      await executeRaw(edgeSql, [\n        postgresArray(params.map((item) => item.graphId)),\n        postgresArray(params.map((item) => item.id)),\n        postgresArray(params.map((item) => item.kind)),\n        postgresArray(params.map((item) => item.fromKind)),\n        postgresArray(params.map((item) => item.fromId)),\n        postgresArray(params.map((item) => item.toKind)),\n        postgresArray(params.map((item) => item.toId)),\n        postgresArray(params.map((item) => JSON.stringify(item.props))),\n        postgresArray(\n          params.map((item) => item.matchIdentity?.name ?? DATABASE_NULL),\n        ),\n        postgresArray(\n          params.map((item) => item.matchIdentity?.key ?? DATABASE_NULL),\n        ),\n        postgresArray(\n          params.map(\n            (item) =>\n              resolveStampedValidityLowerBound(item.validFrom, item.validTo, timestamp) ??\n              DATABASE_NULL,\n          ),\n        ),\n        postgresArray(params.map((item) => item.validTo ?? DATABASE_NULL)),\n        postgresArray(params.map(() => timestamp)),\n      ]);\n    },\n  };\n}\n","/**\n * PostgreSQL engine profile for TypeGraph.\n *\n * `createPostgresBackend` builds a `SqlEngineProfile`\n * (`buildPostgresEngineProfile`) and hands it to `createSqlBackend`\n * (`./engine`), which assembles the mirrored member groups — fulltext,\n * vector, contribution, identity, graph-template, base-schema,\n * index-materialization, kind-removal, schema-version — that this file\n * shares with `sqlite.ts` through `./engine/members/*.ts`. What stays here\n * is the PostgreSQL-owned island `createSqlBackend` cannot share: the\n * execution adapter and its driver-shape detection, the advisory-lock write\n * fence, the GUC-wrapped vector search path, transaction framing\n * (`EngineLateMembers.transactions` / `fence` / `rawSql` / `maintenance` /\n * `trustedImport` / `extensions`), the DDL and extension provisioning\n * `EngineProvisioning` wires through, the dialect's own operation-backend\n * construction (deferred, via `assembleEngine`'s `buildOperations`, until\n * the contribution materializer exists), and `hybridSearch` (an\n * embedding-adjacent member kept inline on both dialects rather than part\n * of the shared assembly).\n *\n * Works with any Drizzle PostgreSQL database instance. Tested against:\n * - `drizzle-orm/node-postgres` (pg Pool / Client)\n * - `drizzle-orm/postgres-js` (postgres-js tagged-template client)\n * - `drizzle-orm/neon-serverless` (@neondatabase/serverless Pool / Client)\n * - `drizzle-orm/neon-http` (@neondatabase/serverless `neon(url)`) —\n *   transactions are auto-disabled because HTTP can't hold a session;\n *   use `drizzle-orm/neon-serverless` if you need transactional writes.\n *\n * - `drizzle-orm/pglite` (PGlite, Postgres-in-WASM) — the execution\n *   fast path detects PGlite and routes it correctly (its `.query` has no\n *   named-statement form). For a batteries-included in-process setup, see\n *   `createLocalPgliteBackend` in `@nicia-ai/typegraph/adapters/drizzle/postgres/pglite`.\n *\n * Other pg-protocol Drizzle adapters (Vercel Postgres, Supabase via pg)\n * work unchanged because they all expose a compatible `db.execute()` /\n * `db.transaction()` surface.\n *\n * @example\n * ```typescript\n * import { drizzle } from \"drizzle-orm/node-postgres\";\n * import { Pool } from \"pg\";\n * import { createPostgresBackend, tables } from \"@nicia-ai/typegraph/adapters/drizzle/postgres\";\n *\n * const pool = new Pool({ connectionString: process.env.DATABASE_URL });\n * const db = drizzle(pool);\n * const backend = createPostgresBackend(db, { tables });\n * ```\n */\nimport {\n  and,\n  eq,\n  getTableName,\n  inArray,\n  isNull,\n  lte,\n  type SQL,\n  sql,\n} from \"drizzle-orm\";\nimport { PgTransaction } from \"drizzle-orm/pg-core\";\n\nimport {\n  CompilerInvariantError,\n  ConfigurationError,\n  SchemaFenceTimeoutError,\n  StaleVersionError,\n} from \"../../errors\";\nimport {\n  sinceIndexAdoptionDdl,\n} from \"../../indexes/system\";\nimport { sqlValueList } from \"../../query/compiler/predicate-utils\";\nimport type { ResolvedSqlTableNames } from \"../../query/compiler/schema\";\nimport {\n  type FulltextStrategy,\n  tsvectorStrategy,\n} from \"../../query/dialect/fulltext-strategy\";\nimport {\n  assertPgvectorEfSearch,\n  pgvectorStrategy,\n} from \"../../query/dialect/vector/pgvector-strategy\";\nimport {\n  assertVectorSearchLimit,\n  resolveEfSearchOverride,\n  vectorSearchFrontierTuning,\n  type VectorSlot,\n  type VectorStrategy,\n} from \"../../query/dialect/vector-strategy\";\nimport { isSqlFragment, sql as portableSql } from \"../../query/sql-fragment\";\nimport {\n  annIndexScanTypes,\n  asCompiledRowsSql,\n  type CompiledRowsSql,\n} from \"../../query/sql-intent\";\nimport { resolveStampedValidityLowerBound } from \"../../utils/date\";\nimport { requireDefined } from \"../../utils/presence\";\nimport {\n  isInsufficientResourcesError,\n  isMissingTableError,\n  isPostgresConcurrentDdlRaceError,\n} from \"../../utils/sql-errors\";\nimport { RECORDED_GRAPH_WRITE_ADVISORY_LOCK_NAMESPACE } from \"../advisory-lock-namespaces\";\nimport {\n  type AtomicEdgeConvergenceInput,\n  type AtomicEdgeConvergenceResult,\n  type AtomicEdgeMutationProgramExecutor,\n  type AtomicEdgeResolvedMutationSetInput,\n  type AtomicEdgeResolvedMutationSetResult,\n  carryAtomicMutationSessionRegistration,\n  registerAtomicMutationPrograms,\n} from \"../capabilities/atomic-mutation-program\";\nimport {\n  type AtomicSqlProgramExecutor,\n  createAtomicSqlProgramExecutor,\n  registerAtomicSqlProgram,\n} from \"../capabilities/atomic-sql-program\";\nimport {\n  batchRefusalDetails,\n  batchRefusalSuffix,\n  resolveBatchWriteVerdict,\n} from \"../capabilities/batch-write-verdict\";\nimport {\n  assertNoLegacyTransactionCapability,\n  sealCapabilityDeclaration,\n} from \"../capabilities/declarations\";\nimport { scopeAtomicBatchToSession } from \"../capabilities/execution\";\nimport {\n  isOptimisticRetryTier,\n  OPTIMISTIC_RETRY_ATTEMPTS,\n  runRetriedUnit,\n} from \"../capabilities/retried-unit\";\nimport { markSchemaFencedInsertEligibleUnderFence } from \"../capabilities/schema-fenced-insert\";\nimport {\n  markFirstPartyFactory,\n  registerFirstPartyProfile,\n  requireWriteFence,\n  resolveWriteFencePlan,\n  type WriteFencePlan,\n  type WriteFenceTarget,\n} from \"../capabilities/write-fence\";\nimport { deriveBackend } from \"../derive-backend\";\nimport { FIND_EDGES_ENDPOINT_FIXED_PARAM_COUNT } from \"../edge-endpoint-sets\";\nimport { buildLiveNodeCandidates } from \"../live-node-candidates\";\nimport {\n  createEdgeRowMapper,\n  createNodeRowMapper,\n  createSchemaVersionRowMapper,\n  createUniqueRowMapper,\n  nowIso,\n  POSTGRES_ROW_MAPPER_CONFIG,\n} from \"../row-mappers\";\nimport {\n  resolveDeclaredBackendResource,\n  type SerializedResourceDeclaration,\n} from \"../transaction-resource\";\nimport {\n  type AdapterBackend,\n  type AdoptedSchemaWriteTransaction,\n  type BackendCapabilities,\n  type BackendCatalogProbes,\n  type BundledBackendCapabilityOverrides,\n  type CatalogColumn,\n  type ClaimIndexMaterializationParams,\n  DATABASE_EXTENSION_NAMES,\n  type DatabaseExtensionName,\n  type EngineRecordedTimeMembers,\n  type HeterogeneousNodeUpsertParams,\n  type HybridSearchParams,\n  type HybridSearchRow,\n  type IndexState,\n  type InsertNodeParams,\n  INTERNAL_TEMPORARY_WRITES,\n  type InternalTransactionOptions,\n  type LineageMembers,\n  type LockSchemaVersionForWriteParams,\n  type ManagedNodeCreatePlan,\n  type NormalizedColumnKind,\n  normalizeGraphAnalyticsCapabilities,\n  POSTGRES_CAPABILITIES,\n  POSTGRES_MAX_BIND_PARAMETERS,\n  type RecordKindRemovalParams,\n  type ReleaseIndexMaterializationClaimParams,\n  type SchemaProvisioning,\n  type SchemaWriteTransactionBackend,\n  type TableState,\n  type TransactionBackend,\n  type TrustedImportOptions,\n  type TrustedImportSession,\n  type VectorSearchParams,\n} from \"../types\";\nimport {\n  buildContributionInsertValues,\n  buildContributionOnConflictSet,\n  type ContributionMaterializer,\n  ensureAdoptedVectorSlots,\n  gateFulltext,\n  POSTGRES_CONTRIBUTION_MAT_TIMESTAMPS,\n} from \"./contribution-materializations\";\nimport {\n  edgeMatchIdentityPairCheckName,\n  edgeMatchIdentityUniqueIndexName,\n  generatePgCreateIndexSQL,\n  generatePgCreateTableSQL,\n  generatePostgresDDL,\n  generatePostgresEdgeMatchIdentityUpgradeDDL,\n  postgresContributions,\n  postgresIdentifierRegclassName,\n} from \"./ddl\";\nimport {\n  type BaseSchemaRuntime,\n  type ContributionRuntime,\n  createSqlBackend,\n  type EngineProvisioning,\n  type GraphTemplateRuntime,\n  type IdentityRuntime,\n  type IndexMaterializationRuntime,\n  type KindRemovalRuntime,\n  type SqlEngineProfile,\n} from \"./engine\";\nimport { assembleEngine } from \"./engine/assembly\";\nimport { createContributionOperationMembers } from \"./engine/members/contribution-members\";\nimport { createFulltextMembers } from \"./engine/members/fulltext-members\";\nimport { createVectorMembers } from \"./engine/members/vector-members\";\nimport {\n  buildCommonOperationOptions,\n  createEngineOperationBackend,\n} from \"./engine/operation-layer\";\nimport {\n  type EngineAssemblyContext,\n  type EngineLateMembers,\n  type EngineOperationsContext,\n  resolveSchemaProvisioning,\n} from \"./engine/profile\";\nimport {\n  type AnyPgDatabase,\n  type AnyPgTransaction,\n  createPostgresExecutionAdapter,\n  getPgliteClient,\n  hasFunctionProperty,\n  isNeonHttpClient,\n  isPgliteDatabase,\n  isPostgresJsClient,\n  PGLITE_MAX_BIND_PARAMETERS,\n  type PostgresExecutionAdapter,\n  type PostgresExecutionAdapterOptions,\n} from \"./execution/postgres-execution\";\nimport { createSessionAtomicBatchAdapter } from \"./execution/session-atomic-batch\";\nimport { createSerialExecutionAdapter } from \"./execution/statement-queue\";\nimport { type ExecutableSql, toDrizzleSql } from \"./execution/types\";\nimport { postgresInstantiateGraphTemplateStatement } from \"./graph-template-sql\";\nimport {\n  buildMaterializationInsertValues,\n  buildMaterializationOnConflictSet,\n  POSTGRES_INDEX_MAT_TIMESTAMPS,\n} from \"./index-materializations\";\nimport {\n  buildKindRemovalInsertValues,\n  buildKindRemovalOnConflictSet,\n  POSTGRES_KIND_REMOVAL_TIMESTAMPS,\n} from \"./kind-removals\";\nimport {\n  assertActiveSchemaVersion,\n  assertAdoptedDialect,\n  createCommonOperationBackend,\n  type InternalOperationBackend,\n} from \"./operation-backend-core\";\nimport { mapHybridSearchRow } from \"./operations/hybrid\";\nimport {\n  createCachedTableExistence,\n  createPostgresOperationStrategy,\n  tableExistsFromRow,\n} from \"./operations/strategy\";\nimport {\n  advisoryLockSingleExpression,\n  postgresFenceSql,\n} from \"./postgres-fence-sql\";\nimport {\n  createPostgresTables as buildPostgresTables,\n  type PostgresTables,\n  tables as defaultTables,\n} from \"./schema/postgres\";\nimport {\n  analyzeImportedTables,\n  assertTrustedImportDatabaseEmpty,\n  createPostgresTrustedImportSession,\n  lockPostgresTrustedImportTables,\n  restoreSecondaryIndexes,\n  suspendPostgresSecondaryIndexes,\n} from \"./trusted-import\";\nimport {\n  EMBEDDING_UPSERT_PARAM_COUNT,\n  mapVectorWriteError,\n  vectorSlotFromParams,\n} from \"./vector-runtime\";\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Options for creating a PostgreSQL backend.\n */\nexport type PostgresBackendOptions = Readonly<{\n  /** Opt in to transactional DDL in a caller-owned schema transaction. */\n  schemaProvisioning?: SchemaProvisioning;\n  /**\n   * Custom table definitions. Use createPostgresTables() to customize table names.\n   * Defaults to standard TypeGraph table names.\n   */\n  tables?: PostgresTables;\n  /**\n   * Fulltext strategy override. Defaults to `tsvectorStrategy`\n   * (Postgres built-in `tsvector` + GIN). Pass a custom strategy here to\n   * swap the entire fulltext stack — DDL, MATCH condition, rank\n   * expression, and snippet generation — for alternate Postgres\n   * backends like ParadeDB (`pg_search`), pg_trgm similarity, or\n   * pgroonga without forking TypeGraph.\n   *\n   * Pass `false` to disable fulltext support entirely. The backend then\n   * advertises no `capabilities.fulltext` and omits the fulltext CRUD/\n   * search methods, mirroring `vector: false`. A fulltext predicate, a\n   * `searchable()` field, `store.search.fulltext`, and hybrid search all\n   * refuse with a typed error instead of running SQL against a table\n   * this backend never creates.\n   */\n  fulltext?: FulltextStrategy | false;\n  /**\n   * Vector strategy override. Defaults to `pgvectorStrategy` (pgvector's\n   * `vector(N)` columns + HNSW/IVFFlat). The strategy owns per-`(kind,\n   * field)` typed storage — DDL, upsert, delete, similarity search, and\n   * ANN index lifecycle — and advertises `strategy.capabilities` as\n   * `capabilities.vector`. Pass a custom strategy to swap the entire\n   * vector stack for an alternate Postgres extension without forking\n   * TypeGraph.\n   *\n   * Pass `false` to disable vector support entirely. The backend then\n   * advertises no `capabilities.vector` and omits the embedding/search\n   * methods, mirroring a SQLite connection without sqlite-vec. Required\n   * for an in-process Postgres (e.g. PGlite) built without the pgvector\n   * extension: the default `pgvectorStrategy` assumes `vector(N)` exists,\n   * so any embedding write or `CREATE EXTENSION vector` would otherwise\n   * hard-fail at runtime.\n   */\n  vector?: VectorStrategy | false;\n  /**\n   * Override specific backend capabilities. Useful when the underlying\n   * driver doesn't support a feature TypeGraph would otherwise assume —\n   * for example, an HTTP-only Postgres driver that can't hold a session\n   * across statements would need\n   * `{ execution: { interactiveTransactions: false } }` so TypeGraph refuses\n   * paths that require an interactive transaction. Root atomic-batch support\n   * is transport-derived and cannot be overridden here.\n   *\n   * `drizzle-orm/neon-http` is auto-detected and has interactive transactions\n   * disabled without an explicit override; this option exists for\n   * other HTTP-style drivers and for tests that need to simulate a\n   * capability gap.\n   */\n  capabilities?: BundledBackendCapabilityOverrides;\n  /**\n   * Use server-side prepared statements (named statements cached per\n   * pg connection) on the node-postgres / neon-serverless fast path.\n   * Defaults to `true`. Set to `false` when pooling through pgbouncer\n   * in transaction-pool mode — pgbouncer routes successive statements\n   * over different backend connections, and a `name` registered on one\n   * is invisible on the next.\n   *\n   * No effect on `drizzle-orm/postgres-js` (handles preparation\n   * internally) or `drizzle-orm/neon-http` (no fast path).\n   */\n  prepareStatements?: boolean;\n  /**\n   * Cap on the number of distinct SQL strings retained in TypeGraph's\n   * in-process SQL-to-statement-name lookup. Defaults to 256. Eviction never\n   * reuses a name, so this does not deallocate or bound prepared statements\n   * retained on live PostgreSQL connections. Set `prepareStatements: false`\n   * for high-cardinality SQL text when server-side statement retention is not\n   * acceptable. Ignored when `prepareStatements` is `false`.\n   */\n  preparedStatementCacheMax?: number;\n  /**\n   * Declare the connection this backend serializes every statement onto, when\n   * TypeGraph's driver predicates cannot see it (Bun `SQL` at `{ max: 1 }`,\n   * `pg-proxy`, a postgres-js client capped through a non-numeric string the\n   * driver does not coerce) — or declare that it serializes on nothing, when\n   * detection is wrong for your topology.\n   *\n   * Defaults to `{ mode: \"detect\" }`. See\n   * {@link SerializedResourceDeclaration} for what each mode means and for the\n   * one refusal it cannot lift (`same-sqlite-backend`, which is SQLite-only and\n   * therefore never reached from here).\n   */\n  serializedResource?: SerializedResourceDeclaration;\n}>;\n\nconst NODE_INSERT_PARAM_COUNT = 9;\nconst SCHEMA_FENCE_PARAM_COUNT = 2;\n// Durable edge rows bind match-identity name and key in addition to the\n// ordinary edge shape. Budget for the widest supported row so native batches\n// never cross the driver's parameter ceiling.\nconst EDGE_INSERT_PARAM_COUNT = 14;\nconst GET_NODES_FIXED_PARAM_COUNT = 2;\nconst GET_EDGES_FIXED_PARAM_COUNT = 1;\nconst FULLTEXT_UPSERT_PARAM_COUNT = 6;\nconst FULLTEXT_DELETE_FIXED_PARAM_COUNT = 2;\nconst CHECK_UNIQUE_BATCH_FIXED_PARAM_COUNT = 3;\nconst UNIQUE_DELETE_FIXED_PARAM_COUNT = 2;\nconst UNIQUE_INSERT_PARAM_COUNT = 6;\n\ntype PostgresBatchChunkSizes = Readonly<{\n  checkUniqueBatchChunkSize: number;\n  edgeInsertBatchSize: number;\n  edgeSchemaFencedInsertBatchSize: number;\n  embeddingUpsertBatchSize: number;\n  findEdgesEndpointChunkSize: number;\n  fulltextDeleteChunkSize: number;\n  fulltextUpsertBatchSize: number;\n  getEdgesChunkSize: number;\n  getNodesChunkSize: number;\n  nodeInsertBatchSize: number;\n  nodeSchemaFencedInsertBatchSize: number;\n  uniqueDeleteChunkSize: number;\n  uniqueInsertBatchSize: number;\n}>;\n\nfunction vectorSlotsFromManagedNodeCreatePlan(\n  params: InsertNodeParams,\n  plan: ManagedNodeCreatePlan,\n): readonly VectorSlot[] {\n  return plan.projections.flatMap((projection) =>\n    projection.kind === \"embedding\" ?\n      [\n        {\n          graphId: params.graphId,\n          nodeKind: params.kind,\n          fieldPath: projection.fieldPath,\n          dimensions: projection.dimensions,\n          metric: projection.metric,\n          indexType: projection.indexType,\n        },\n      ]\n    : [],\n  );\n}\n\nfunction computePostgresBatchChunkSizes(\n  maxBindParameters: number,\n): PostgresBatchChunkSizes {\n  return {\n    checkUniqueBatchChunkSize: Math.max(\n      1,\n      maxBindParameters - CHECK_UNIQUE_BATCH_FIXED_PARAM_COUNT,\n    ),\n    edgeInsertBatchSize: Math.max(\n      1,\n      Math.floor(maxBindParameters / EDGE_INSERT_PARAM_COUNT),\n    ),\n    edgeSchemaFencedInsertBatchSize: Math.max(\n      1,\n      Math.floor(\n        (maxBindParameters - SCHEMA_FENCE_PARAM_COUNT) /\n          EDGE_INSERT_PARAM_COUNT,\n      ),\n    ),\n    embeddingUpsertBatchSize: Math.max(\n      1,\n      Math.floor(maxBindParameters / EMBEDDING_UPSERT_PARAM_COUNT),\n    ),\n    findEdgesEndpointChunkSize: Math.max(\n      1,\n      maxBindParameters - FIND_EDGES_ENDPOINT_FIXED_PARAM_COUNT,\n    ),\n    fulltextDeleteChunkSize: Math.max(\n      1,\n      maxBindParameters - FULLTEXT_DELETE_FIXED_PARAM_COUNT,\n    ),\n    fulltextUpsertBatchSize: Math.max(\n      1,\n      Math.floor(maxBindParameters / FULLTEXT_UPSERT_PARAM_COUNT),\n    ),\n    getEdgesChunkSize: Math.max(\n      1,\n      maxBindParameters - GET_EDGES_FIXED_PARAM_COUNT,\n    ),\n    getNodesChunkSize: Math.max(\n      1,\n      maxBindParameters - GET_NODES_FIXED_PARAM_COUNT,\n    ),\n    nodeInsertBatchSize: Math.max(\n      1,\n      Math.floor(maxBindParameters / NODE_INSERT_PARAM_COUNT),\n    ),\n    nodeSchemaFencedInsertBatchSize: Math.max(\n      1,\n      Math.floor(\n        (maxBindParameters - SCHEMA_FENCE_PARAM_COUNT) /\n          NODE_INSERT_PARAM_COUNT,\n      ),\n    ),\n    uniqueDeleteChunkSize: Math.max(\n      1,\n      maxBindParameters - UNIQUE_DELETE_FIXED_PARAM_COUNT,\n    ),\n    uniqueInsertBatchSize: Math.max(\n      1,\n      Math.floor(maxBindParameters / UNIQUE_INSERT_PARAM_COUNT),\n    ),\n  };\n}\n\n/**\n * THE one-shot retry every idempotent catalog write in this backend shares.\n *\n * PostgreSQL's IF NOT EXISTS check cannot see another session's uncommitted\n * catalog row. The loser waits for the winner and is then handed the winner's\n * conflict instead of a harmless notice; retrying after that wait observes the\n * committed object. Which failures mean that is\n * {@link isPostgresConcurrentDdlRaceError}'s single decision — anything else\n * (and anything the retry cannot clear) stays loud.\n *\n * Takes a thunk rather than a statement because one caller — the extension\n * install — runs its statement inside its own transaction, and the retry\n * decision must be the same one whether the unit of work is one statement or a\n * locked pair.\n */\nasync function withConcurrentCreateRetry<T>(run: () => Promise<T>): Promise<T> {\n  try {\n    return await run();\n  } catch (error) {\n    if (!isPostgresConcurrentDdlRaceError(error)) throw error;\n    return await run();\n  }\n}\n\n/**\n * The advisory-lock key an extension install serializes on.\n *\n * Per extension rather than one global key: the fence exists to stop two\n * installers of the SAME catalog row from colliding, and a shared key would\n * additionally queue `vector` behind `pg_trgm` at boot for no benefit. The\n * names it interpolates are allowlisted before they reach here.\n */\nfunction extensionDdlLockKey(extension: DatabaseExtensionName): string {\n  return `typegraph:extension-ddl:${extension}`;\n}\n\n/**\n * The keyed-exclusion namespace both halves of the schema fence acquire\n * under `mechanism: \"row\"` — `acquireSchemaWriteFence` (the commit side) and\n * `lockActiveSchemaVersion` (the write side) — so a concurrent commit and a\n * concurrent write contend on the SAME fence row. That serializes them on a\n * waiting engine (`conflict: \"wait\"`) and gives the loser a commit-time\n * conflict on an optimistic one (`conflict: \"commit-time\"`), matching what\n * the `FOR UPDATE`/`FOR SHARE` pair already does under `mechanism: \"lock\"`.\n * The fused managed-entity insert stays advisory-only under `row` (its own\n * `schemaFenceInsertLockClause` above never reads this namespace) — only\n * these two standalone statements take the fence row.\n */\nconst SCHEMA_COMMIT_FENCE_NAMESPACE = \"typegraph:schema-commit\";\n\n/** PostgreSQL renders lock_timeout with a duration suffix, except zero. */\nfunction postgresLockTimeoutMilliseconds(value: string): number | undefined {\n  if (value === \"0\") return 0;\n  const match = /^(\\d+(?:\\.\\d+)?)(ms|s|min|h|d)$/.exec(value);\n  if (match === null) return undefined;\n  const amount = Number(match[1]);\n  const unit = match[2] ?? \"\";\n  switch (unit) {\n    case \"ms\": { return amount; }\n    case \"s\": { return amount * 1000; }\n    case \"min\": { return amount * 60_000; }\n    case \"h\": { return amount * 3_600_000; }\n    case \"d\": { return amount * 86_400_000; }\n    default: { return undefined; }\n  }\n}\n\n/** Driver errors may wrap PostgreSQL's lock-not-available SQLSTATE. */\nfunction isPostgresLockTimeout(error: unknown): boolean {\n  if (typeof error !== \"object\" || error === null) return false;\n  if (\"code\" in error && error.code === \"55P03\") return true;\n  return \"cause\" in error && isPostgresLockTimeout(error.cause);\n}\n\n/**\n * Normalizes one PostgreSQL declared column type to the family\n * `catalog.columnTypes` reports. PostgreSQL's own type system already\n * distinguishes these exactly, unlike SQLite's affinity rules, so this is\n * an exact match rather than a substring test.\n */\nfunction normalizePostgresColumnKind(\n  declaredType: string,\n): NormalizedColumnKind {\n  if (declaredType === \"bigint\") return \"integer\";\n  if (declaredType === \"timestamp with time zone\") {\n    return \"timestamp-with-time-zone\";\n  }\n  return \"other\";\n}\n\n/** Runs ONE DDL statement against `db` with no concurrency handling — see `EngineProvisioning.executeDdl`. */\nasync function executeRawDdl(db: AnyPgDatabase, ddl: string): Promise<void> {\n  await db.execute(sql.raw(ddl));\n}\n\n/**\n * Builds this dialect's `catalog` probes bound to one execution session —\n * the profile's own connection for the root backend, or a transaction's\n * pinned client for a transaction-scoped backend, via `db` and\n * `executionAdapter` supplied by the caller. Bound this way rather than\n * closed over the profile's own connection, so a probe issued through a\n * transaction-scoped backend's `catalog` runs on that transaction's own\n * session — reading its own uncommitted state, not the outer connection's.\n *\n * `transactionScoped` governs `dropInvalidIndex` only: PostgreSQL refuses\n * `DROP INDEX CONCURRENTLY` inside a transaction block (every other probe\n * here is a plain read, unaffected), so a transaction-scoped bag refuses\n * that one member instead of issuing DDL its own session cannot run.\n */\nfunction createPostgresCatalogProbes(\n  db: AnyPgDatabase,\n  executionAdapter: PostgresExecutionAdapter,\n  operationStrategy: ReturnType<typeof createPostgresOperationStrategy>,\n  transactionScoped: boolean,\n): BackendCatalogProbes {\n  async function indexStates(\n    names: readonly string[],\n  ): Promise<readonly IndexState[]> {\n    if (names.length === 0) return [];\n    // Scoped to `search_path`, matching the unqualified CREATE/DROP INDEX\n    // DDL a caller issues against these names.\n    const rows = await executionAdapter.execute<{\n      name: string;\n      valid: boolean;\n    }>(\n      portableSql`\n          SELECT c.relname AS name, i.indisvalid AS valid\n          FROM pg_class c\n          JOIN pg_index i ON i.indexrelid = c.oid\n          WHERE c.relname IN (${sqlValueList(names)})\n            AND pg_catalog.pg_table_is_visible(c.oid)\n        `,\n    );\n    const byName = new Map(rows.map((row) => [row.name, row.valid] as const));\n    return names.map((name) => {\n      const valid = byName.get(name);\n      return { name, exists: valid !== undefined, invalid: valid === false };\n    });\n  }\n\n  return {\n    async tableExists(tableName: string): Promise<boolean> {\n      const rows = await executionAdapter.execute<Record<string, unknown>>(\n        operationStrategy.buildTableExists(tableName),\n      );\n      return tableExistsFromRow(rows[0]);\n    },\n    async tablesExist(\n      names: readonly string[],\n    ): Promise<readonly TableState[]> {\n      if (names.length === 0) return [];\n      const rows = await executionAdapter.execute<{ name: string }>(\n        portableSql`\n          SELECT c.relname AS name\n          FROM pg_class c\n          WHERE c.relname IN (${sqlValueList(names)})\n            AND c.relkind IN ('r', 'p')\n            AND pg_catalog.pg_table_is_visible(c.oid)\n        `,\n      );\n      const existing = new Set(rows.map((row) => row.name));\n      return names.map((name) => ({ name, exists: existing.has(name) }));\n    },\n    indexStates,\n    async dropInvalidIndex(name: string): Promise<void> {\n      if (transactionScoped) {\n        throw new ConfigurationError(\n          \"dropInvalidIndex requires a root PostgreSQL backend: PostgreSQL refuses DROP INDEX CONCURRENTLY inside a transaction block, so a transaction()-scoped catalog cannot issue it.\",\n          {\n            code: \"CATALOG_DROP_INVALID_INDEX_REQUIRES_ROOT_BACKEND\",\n            operation: \"dropInvalidIndex\",\n          },\n          {\n            suggestion:\n              \"Call dropInvalidIndex through the root backend (the object createPostgresBackend returned), not a transaction() handle.\",\n          },\n        );\n      }\n      // A no-op for a valid or absent index on every engine: only an\n      // interrupted `CREATE INDEX CONCURRENTLY` leftover is ever dropped.\n      const [state] = await indexStates([name]);\n      if (!state?.invalid) return;\n      const quoted = `\"${name.replaceAll('\"', '\"\"')}\"`;\n      await executeRawDdl(db, `DROP INDEX CONCURRENTLY IF EXISTS ${quoted};`);\n    },\n    async columnTypes(table: string): Promise<readonly CatalogColumn[]> {\n      const rows = await executionAdapter.execute<{\n        name: unknown;\n        type: unknown;\n      }>(\n        portableSql`\n          SELECT column_name AS name, data_type AS type\n          FROM information_schema.columns\n          WHERE table_schema = current_schema()\n            AND table_name = ${table}\n        `,\n      );\n      return rows.flatMap((row) => {\n        if (typeof row.name !== \"string\" || typeof row.type !== \"string\") {\n          return [];\n        }\n        const declaredType = row.type.trim().toLowerCase();\n        return [\n          {\n            name: row.name,\n            kind: normalizePostgresColumnKind(declaredType),\n            declaredType,\n          },\n        ];\n      });\n    },\n    indexBehavior: {\n      concurrentBuilds: true,\n      hasInvalidIndexState: true,\n      supportsGinFamily: true,\n    },\n  };\n}\n\ntype ExecutePostgresStatement = (statement: ExecutableSql) => Promise<void>;\n\nfunction parallelWorkerResetSql(tableName: string): string {\n  return `ALTER TABLE \"${tableName.replaceAll('\"', '\"\"')}\" RESET (parallel_workers);`;\n}\n\nfunction parallelWorkerResetError(\n  tableName: string,\n  resetError: unknown,\n): Error {\n  return new Error(\n    `PostgreSQL did not restore the durable parallel_workers setting on vector table ${JSON.stringify(tableName)}. Run ${parallelWorkerResetSql(tableName)} before retrying index materialization.`,\n    { cause: resetError },\n  );\n}\n\nfunction vectorSerialFallbackPreparationError(\n  step: \"drop-index\" | \"disable-parallel-workers\",\n  parallelBuildError: unknown,\n  preparationError: unknown,\n): AggregateError {\n  const action =\n    step === \"drop-index\" ?\n      \"drop the partial vector index\"\n    : \"disable parallel workers for the serial retry\";\n  return new AggregateError(\n    [preparationError],\n    `PostgreSQL could not ${action} after the parallel vector index build exhausted resources.`,\n    { cause: parallelBuildError },\n  );\n}\n\nfunction reportParallelWorkerResetFailure(\n  tableName: string,\n  resetError: unknown,\n): void {\n  try {\n    if (typeof console === \"undefined\" || typeof console.error !== \"function\") {\n      return;\n    }\n    const reported = (\n      console.error as (...data: readonly unknown[]) => unknown\n    )(\n      `[typegraph] The serial vector index rebuild failed and cleanup also failed. ${parallelWorkerResetError(tableName, resetError).message}`,\n      resetError,\n    );\n    void Promise.resolve(reported).catch(() => {\n      // Reporting must not displace the index-build failure.\n    });\n  } catch {\n    // A hostile or replaced logger cannot displace the index-build failure.\n  }\n}\n\nasync function resetVectorParallelWorkers(\n  execute: ExecutePostgresStatement,\n  tableName: string,\n): Promise<void> {\n  try {\n    await execute(\n      portableSql`ALTER TABLE ${portableSql.identifier(tableName)} RESET (parallel_workers)`,\n    );\n  } catch (resetError) {\n    throw parallelWorkerResetError(tableName, resetError);\n  }\n}\n\n/** @internal */\nexport async function runVectorIndexBuildWithSerialFallback(\n  execute: ExecutePostgresStatement,\n  tableName: string,\n  indexStatement: ExecutableSql,\n  dropStatement?: ExecutableSql,\n): Promise<void> {\n  // The strategy table is TypeGraph-owned, and parallel_workers is only set\n  // temporarily by the fallback below. Reset it before every materialization\n  // attempt so cleanup survives backend and process recreation. Keep this\n  // outside the resource-failure catch: a cleanup error must never be\n  // mistaken for a failed parallel build whose valid index should be dropped.\n  await resetVectorParallelWorkers(execute, tableName);\n  try {\n    await execute(indexStatement);\n  } catch (error) {\n    if (!isInsufficientResourcesError(error)) throw error;\n    if (dropStatement !== undefined) {\n      try {\n        await execute(dropStatement);\n      } catch (dropError) {\n        throw vectorSerialFallbackPreparationError(\n          \"drop-index\",\n          error,\n          dropError,\n        );\n      }\n    }\n    await runSerialVectorIndexBuild(execute, tableName, indexStatement, error);\n  }\n}\n\n/** @internal */\nexport async function runPostgresVectorIndexBuild(\n  vectorStrategy: VectorStrategy,\n  execute: ExecutePostgresStatement,\n  tableName: string,\n  indexStatement: ExecutableSql,\n  dropStatement?: ExecutableSql,\n): Promise<void> {\n  if (vectorStrategy !== pgvectorStrategy) {\n    await execute(indexStatement);\n    return;\n  }\n  await runVectorIndexBuildWithSerialFallback(\n    execute,\n    tableName,\n    indexStatement,\n    dropStatement,\n  );\n}\n\n/** @internal */\nexport async function runSerialVectorIndexBuild(\n  execute: ExecutePostgresStatement,\n  tableName: string,\n  indexStatement: ExecutableSql,\n  parallelBuildError?: unknown,\n): Promise<void> {\n  const table = portableSql.identifier(tableName);\n  try {\n    await execute(portableSql`ALTER TABLE ${table} SET (parallel_workers = 0)`);\n  } catch (setError) {\n    if (parallelBuildError === undefined) throw setError;\n    throw vectorSerialFallbackPreparationError(\n      \"disable-parallel-workers\",\n      parallelBuildError,\n      setError,\n    );\n  }\n\n  let buildFailure: Readonly<{ error: unknown }> | undefined;\n  try {\n    await execute(indexStatement);\n  } catch (error) {\n    buildFailure = { error };\n  }\n\n  try {\n    await execute(portableSql`ALTER TABLE ${table} RESET (parallel_workers)`);\n  } catch (resetError) {\n    if (buildFailure === undefined) {\n      throw parallelWorkerResetError(tableName, resetError);\n    }\n    reportParallelWorkerResetFailure(tableName, resetError);\n  }\n\n  if (buildFailure !== undefined) throw buildFailure.error;\n}\n\n// ============================================================\n// Utilities\n// ============================================================\n\nconst toNodeRow = createNodeRowMapper(POSTGRES_ROW_MAPPER_CONFIG);\nconst toEdgeRow = createEdgeRowMapper(POSTGRES_ROW_MAPPER_CONFIG);\nconst toUniqueRow = createUniqueRowMapper(POSTGRES_ROW_MAPPER_CONFIG);\nconst toSchemaVersionRow = createSchemaVersionRowMapper(\n  POSTGRES_ROW_MAPPER_CONFIG,\n);\n\n// ============================================================\n// Backend Factory\n// ============================================================\n\n/**\n * Creates a TypeGraph backend for PostgreSQL databases.\n *\n * Works with any Drizzle PostgreSQL instance regardless of the underlying driver.\n *\n * @param db - A Drizzle PostgreSQL database instance\n * @param options - Backend configuration\n * @returns A GraphBackend implementation\n */\nexport function createPostgresBackend(\n  db: AnyPgDatabase,\n  options: PostgresBackendOptions = {},\n): AdapterBackend<AnyPgTransaction> {\n  return createSqlBackend(buildPostgresEngineProfile(db, options));\n}\n\n/**\n * Builds the PostgreSQL {@link SqlEngineProfile} `createSqlBackend` (from\n * `./engine`) assembles into a backend: the head data and dialect-owned\n * late members (`transactions`, `fence`, `rawSql`, `maintenance`,\n * `trustedImport`, `extensions`) only PostgreSQL supplies, plus the runtime\n * deps (`contributionRuntime`, `identityRuntime`, `graphTemplateRuntime`,\n * `baseSchemaRuntime`, `indexMaterializationRuntime`, `kindRemovalRuntime`)\n * `createSqlBackend` uses to assemble the mirrored member groups from\n * `members/*.ts`.\n */\nexport function buildPostgresEngineProfile(\n  db: AnyPgDatabase,\n  options: PostgresBackendOptions = {},\n): SqlEngineProfile<AnyPgTransaction> {\n  assertNoLegacyTransactionCapability(options.capabilities);\n  // Resolved before the backend exists so marking it below is a lookup, never\n  // work that could fail after a wrapper already observed an unmarked backend.\n  // A `serializedResource` declaration that contradicts detection is refused\n  // here too, before any object a caller could hold has been built.\n  const resourceAudit = resolveDeclaredBackendResource(\n    getSerializedPostgresClient(db),\n    options.serializedResource,\n  );\n  const tables = options.tables ?? defaultTables;\n  // `fulltext: false` disables fulltext entirely — mirroring `vector`\n  // below, required for an engine or role with no fulltext implementation\n  // of its own to build a TypeGraph backend without a stub strategy.\n  const fulltextStrategy =\n    options.fulltext === false ?\n      undefined\n    : (options.fulltext ?? tsvectorStrategy);\n  // pgvector is compiled into a standalone Postgres server, so it is wired\n  // unconditionally by default (overridable for alternate Postgres vector\n  // stacks). `vector: false` disables it — required for an in-process\n  // Postgres (PGlite) built without the pgvector extension, where the\n  // default strategy's `vector(N)` DDL would hard-fail.\n  const vectorStrategy =\n    options.vector === false ? undefined : (options.vector ?? pgvectorStrategy);\n  // One probe per backend instance, shared with every transaction-scoped\n  // backend so the pgvector version check runs — and its pre-0.8 warning\n  // fires — at most once per backend, not once per `store.transaction()`.\n  const iterativeScanProbe = createIterativeScanProbe();\n  // `vector` and `fulltext` are deliberately absent from this base: both are\n  // derived once, from `profile.vector` / `profile.fulltext`, by\n  // `finalizeEngineCapabilities` (`./engine/capabilities`) — baking either\n  // here would give this profile's `declaredCapabilities` a copy that a\n  // caller overriding the strategy field could leave stale.\n  const baseCapabilities = POSTGRES_CAPABILITIES;\n  // HTTP-only drivers (notably `drizzle-orm/neon-http`) can't hold a\n  // session across statements, so multi-statement transactions are\n  // unavailable regardless of what we declare. Auto-detect and downgrade\n  // the capability so callers get correct fallback behavior without\n  // having to remember to override it themselves.\n  const httpOnlyOverrides =\n    isNeonHttpClient(db) ?\n      {\n        execution: {\n          ...POSTGRES_CAPABILITIES.execution,\n          interactiveTransactions: false,\n          atomicBatch: \"root\" as const,\n        },\n        graphAnalytics: {\n          ...(baseCapabilities.graphAnalytics ?? { mathFunctions: true }),\n          supported: false,\n        },\n      }\n    : {};\n  const configuredMaxBindParameters =\n    options.capabilities?.maxBindParameters ?? POSTGRES_MAX_BIND_PARAMETERS;\n  const driverBindParameterOverrides =\n    isPgliteDatabase(db) ?\n      {\n        maxBindParameters: Math.min(\n          configuredMaxBindParameters,\n          PGLITE_MAX_BIND_PARAMETERS,\n        ),\n      }\n    : {};\n  // A PostgreSQL pool is never itself an engine with a single writer slot,\n  // so `mechanism: \"engine-serialized\"` is a false claim about this engine —\n  // the one shape this factory refuses. `\"caller-serialized\"` is a\n  // different claim — a promise about the DEPLOYMENT, not the engine — and\n  // is accepted: this pool still carries its own `fenceSql` underneath it\n  // (harmless, since every keyed and drain site under `caller-serialized`\n  // already takes no statement), so nothing about this factory's assembly\n  // needs to change to honor it.\n  const requestedWriteFence = options.capabilities?.writeFence;\n  if (requestedWriteFence?.mechanism === \"engine-serialized\") {\n    throw new ConfigurationError(\n      'PostgreSQL backend capability overrides cannot declare writeFence.mechanism: \"engine-serialized\".',\n      { requestedWriteFence },\n      {\n        suggestion:\n          'Declare writeFence.mechanism as \"advisory\" (this pool\\'s own fence) or \"caller-serialized\" (a deployment-level promise); use a custom backend only when the underlying engine really provides a single writer slot.',\n      },\n    );\n  }\n  const declaredCapabilities = sealCapabilityDeclaration(\n    normalizeGraphAnalyticsCapabilities({\n      ...baseCapabilities,\n      ...httpOnlyOverrides,\n      ...options.capabilities,\n      execution: {\n        ...baseCapabilities.execution,\n        ...httpOnlyOverrides.execution,\n        ...options.capabilities?.execution,\n      },\n      ...driverBindParameterOverrides,\n    }),\n  );\n  // Derived last and not overridable: how far up the contribution health\n  // ladder this backend goes is a structural fact about the wiring below\n  // (durable markers, a catalog probe, a strategy that declares teardown\n  // DDL, a transactional schema fence), and a caller who declared a\n  // rebuild this backend cannot perform would be advertising a lie. The\n  // HTTP-only drivers land on `rebuild: false` here because they cannot\n  // hold a session across statements, so there is no fence to run under.\n  const adapterOptions: PostgresExecutionAdapterOptions = {\n    ...(options.prepareStatements === undefined ?\n      {}\n    : { prepareStatements: options.prepareStatements }),\n    ...(options.preparedStatementCacheMax === undefined ?\n      {}\n    : { preparedStatementCacheMax: options.preparedStatementCacheMax }),\n    maxBindParameters:\n      declaredCapabilities.maxBindParameters ?? POSTGRES_MAX_BIND_PARAMETERS,\n    interactiveAtomicBatch:\n      declaredCapabilities.execution.interactiveTransactions &&\n      (resourceAudit.kind === \"independent\" || isPgliteDatabase(db)),\n  };\n  const executionAdapter = createPostgresExecutionAdapter(db, adapterOptions);\n  const atomicSqlProgramExecutor =\n    createAtomicSqlProgramExecutor(executionAdapter);\n  // `declaredCapabilities` above is this profile's contribution; the\n  // capability tail (`finalizeEngineCapabilities`, `./engine/capabilities`)\n  // that derives `execution.atomicBatch`, `vector` (from `vectorStrategy`\n  // above), `fulltext` (from `fulltextStrategy`), and `contributions` from it\n  // runs once, in `createSqlBackend`, which then hands the finalized result\n  // back through `EngineOperationsContext.capabilities` / `EngineAssemblyContext\n  // .capabilities` — `buildOperations` and `lateMembers` below read it off\n  // `ctx` rather than re-deriving a local copy.\n  const tableNames: ResolvedSqlTableNames = {\n    schemaVersions: getTableName(tables.schemaVersions),\n    nodes: getTableName(tables.nodes),\n    edges: getTableName(tables.edges),\n    recordedNodes: getTableName(tables.recordedNodes),\n    recordedEdges: getTableName(tables.recordedEdges),\n    recordedClock: getTableName(tables.recordedClock),\n    revisionOrigins: getTableName(tables.revisionOrigins),\n    identityAssertions: getTableName(tables.identityAssertions),\n    recordedIdentityAssertions: getTableName(tables.recordedIdentityAssertions),\n    identityClosure: getTableName(tables.identityClosure),\n    identitySeparation: getTableName(tables.identitySeparation),\n    fulltext: tables.fulltextTableName,\n    uniques: getTableName(tables.uniques),\n    edgeClaims: getTableName(tables.edgeClaims),\n    fences: getTableName(tables.fences),\n  };\n  // Pre-quote identifiers so refreshStatistics() doesn't rebuild the\n  // ANALYZE statements on every call. The recorded and identity relations\n  // are ANALYZEd separately under an existence guard (see refreshStatistics):\n  // a schema created before recorded-time history or Operational Identity\n  // landed (bring-your-own-pool, no DDL re-run) has no recorded_* / identity_*\n  // tables, and Postgres fails the whole ANALYZE if any named relation is\n  // missing. Per-field vector tables are created lazily and live outside this\n  // base set, so they are not ANALYZEd here.\n  //\n  // ONE statement per table with SKIP_LOCKED, never `ANALYZE a, b, c`:\n  // ANALYZE takes a ShareUpdateExclusive lock, the same class CREATE INDEX\n  // CONCURRENTLY holds for its whole build — and a CIC in another session\n  // waits on every regular transaction's snapshot, ANALYZE's included. An\n  // ANALYZE that queues on a CIC's table lock while that CIC waits on the\n  // ANALYZE's snapshot is a two-node deadlock (observed when two\n  // materializeIndexes callers race). SKIP_LOCKED makes ANALYZE skip a\n  // locked table instead of queuing, so it can never join a wait cycle;\n  // a skipped table is covered by the next refresh or autovacuum.\n  const coreAnalyzeStatements = [\n    tableNames.nodes,\n    tableNames.edges,\n    getTableName(tables.uniques),\n    ...(fulltextStrategy === undefined ? [] : [tableNames.fulltext]),\n  ].map((name) =>\n    toDrizzleSql(\n      portableSql`ANALYZE (SKIP_LOCKED) ${portableSql.identifier(name)}`,\n      \"postgres\",\n    ),\n  );\n  const guardedAnalyzeTables = [\n    tableNames.recordedNodes,\n    tableNames.recordedEdges,\n    tableNames.recordedClock,\n    tableNames.recordedIdentityAssertions,\n    tableNames.identityAssertions,\n    tableNames.identityClosure,\n    tableNames.identitySeparation,\n  ] as const;\n  const operationStrategy = createPostgresOperationStrategy(\n    tables,\n    fulltextStrategy,\n    vectorStrategy,\n  );\n\n  // Whether `tableName` currently exists, via the same catalog probe `clear()`\n  // uses — so refreshStatistics() never ANALYZEs a recorded or identity\n  // relation that a bring-your-own-pool schema has not yet created. The\n  // Postgres probe is search_path-aware, so positive results are deliberately\n  // not cached by bare table name.\n  const guardedTableExists = createCachedTableExistence(\n    async (tableName) => {\n      const rows = await executionAdapter.execute<Record<string, unknown>>(\n        operationStrategy.buildTableExists(tableName),\n      );\n      return rows[0];\n    },\n    { cacheExisting: false },\n  );\n\n  // Durable fulltext + vector materialization (#135): the dialect-specific\n  // marker-table primitives. Orchestration (materialize / assert /\n  // per-instance cache) lives once in `createContributionMaterializer`,\n  // shared by the outer backend and every transaction-scoped backend so a\n  // slot's marker is resolved at most once per process. Built before\n  // `operations` so the operation backend's vector methods can assert/\n  // ensure through it instead of issuing DDL on the hot path.\n  const matTable = tables.contributionMaterializations;\n\n  /**\n   * Runs one IDEMPOTENT DDL statement — `CREATE ... IF NOT EXISTS` or\n   * `ALTER TABLE ... ADD COLUMN IF NOT EXISTS` — with the one-shot retry a\n   * concurrent boot needs.\n   */\n  async function executeConcurrentCreateDdl(ddl: string): Promise<void> {\n    const statement = sql.raw(ddl);\n    await withConcurrentCreateRetry(async () => {\n      await db.execute(statement);\n    });\n  }\n\n  /**\n   * THE one place this backend installs a database extension, for every\n   * extension and every caller.\n   *\n   * An extension is database-global while the claims that reach it are not (an\n   * index-materialization claim is per index), so two callers wanting different\n   * objects still race on `pg_extension_name_index`. Two fences answer that,\n   * and both are here because they answer different halves of it:\n   *\n   *  - the resolved write-fence plan's keyed exclusion — spelled through\n   *    `fencePlan.sql.acquireKeyed`, like every other lock site, rather than\n   *    inline — serializes same-key installers inside this process group so\n   *    the common case never raises at all (#475). It is keyed on the\n   *    extension so installing `vector` does not queue behind `pg_trgm`. This\n   *    is the one lock site that DEGRADES instead of refusing: a plan that\n   *    resolves `engine-serialized` or `unfenced` takes no lock, and so does\n   *    `row` — a row-mechanism acquisition writes to the fences relation,\n   *    which this call cannot assume exists yet (extension install can run\n   *    before the base schema that creates it), and the retry-only path\n   *    below needs no fences row to be correct — and falls through to the\n   *    same retry-only path as the non-interactive branch below, because the\n   *    retry — not the lock — is what makes a concurrent install correct;\n   *  - {@link withConcurrentCreateRetry} clears the 23505 an installer that did\n   *    NOT take the lock can still hand us — a peer on an older version, whose\n   *    lock key differs, a `capabilities.execution.interactiveTransactions: false`\n   *    backend which has no transaction to hang the lock on (#446), or a\n   *    backend whose resolved plan takes no lock at all.\n   *\n   * The lock runs in its own transaction on purpose: a 23505 poisons an\n   * enclosing transaction (the next statement fails `25P02`), so the retry is\n   * sound only when the failed unit of work is one this function owns\n   * end-to-end.\n   */\n  // Takes `capabilities` and `fencePlan` explicitly rather than closing over\n  // head-level constants: this backend's finalized capabilities and its\n  // resolved write-fence plan are `createSqlBackend`'s\n  // (`EngineOperationsContext.capabilities` / `EngineAssemblyContext\n  // .fencePlan`), and this function's only caller — `lateMembers.extensions`\n  // — already has both values on `ctx`.\n  async function ensureDatabaseExtension(\n    capabilities: BackendCapabilities,\n    fencePlan: WriteFencePlan,\n    name: DatabaseExtensionName,\n  ): Promise<void> {\n    // The name reaches DDL by interpolation, so the allowlist — not the\n    // caller's type — is what makes the identifier trustworthy at runtime.\n    const validated = DATABASE_EXTENSION_NAMES.find(\n      (candidate) => candidate === name,\n    );\n    if (validated === undefined) {\n      throw new ConfigurationError(\n        `Unsupported database extension \"${name}\".`,\n        { extension: name, supported: DATABASE_EXTENSION_NAMES },\n        {\n          suggestion: `Request one of: ${DATABASE_EXTENSION_NAMES.join(\", \")}.`,\n        },\n      );\n    }\n    const ddl = `CREATE EXTENSION IF NOT EXISTS \"${validated}\";`;\n    if (\n      !capabilities.execution.interactiveTransactions ||\n      fencePlan.kind !== \"lock\"\n    ) {\n      await executeConcurrentCreateDdl(ddl);\n      return;\n    }\n    await withConcurrentCreateRetry(async () => {\n      await db.transaction(async (tx) => {\n        await tx.execute(\n          toDrizzleSql(\n            fencePlan.sql.acquireKeyed(extensionDdlLockKey(validated), 0),\n            \"postgres\",\n          ),\n        );\n        await tx.execute(sql.raw(ddl));\n      });\n    });\n  }\n\n  // Deps for `createContributionMembers` (`./engine/members/contribution-members`),\n  // beyond what `createSqlBackend` supplies itself: `dialect`/`fulltextStrategy`/\n  // `vectorStrategy` (the profile head), `fenceTarget` (built by `createSqlBackend`\n  // from its finalized capabilities), `ensureTable`/`execute`/`operationStrategy`\n  // (`provisioning`/`execution`/`strategy`), and `schemaWriteTransaction` (the\n  // fence's own late member, once it exists).\n  const contributionRuntime: ContributionRuntime = {\n    fulltextTableName: tables.fulltextTableName,\n    contributionTableDdl: generatePgCreateTableSQL(matTable),\n    reconciliationMarkersTableDdl: generatePgCreateTableSQL(\n      tables.reconciliationMarkers,\n    ),\n    timestamps: POSTGRES_CONTRIBUTION_MAT_TIMESTAMPS,\n    contributionMarkerColumns: matTable,\n    contributionMarkerRows: {\n      selectWhere: (condition) => db.select().from(matTable).where(condition),\n      async upsert(params) {\n        await db\n          .insert(matTable)\n          .values(\n            buildContributionInsertValues(\n              params,\n              POSTGRES_CONTRIBUTION_MAT_TIMESTAMPS.encode,\n            ),\n          )\n          .onConflictDoUpdate({\n            target: [\n              matTable.graphId,\n              matTable.logicalName,\n              matTable.owner,\n              matTable.tableName,\n            ],\n            set: buildContributionOnConflictSet(\n              matTable.materializedAt,\n              params.materializedAt,\n            ),\n          });\n      },\n      async deleteWhere(condition) {\n        await db.delete(matTable).where(condition);\n      },\n    },\n    reconciliationMarkerColumns: tables.reconciliationMarkers,\n    reconciliationMarkerRows: {\n      selectWhere: (condition) =>\n        db.select().from(tables.reconciliationMarkers).where(condition),\n      async upsert(graphId, version) {\n        await db\n          .insert(tables.reconciliationMarkers)\n          .values({ graphId, reconciledToVersion: version })\n          .onConflictDoUpdate({\n            target: tables.reconciliationMarkers.graphId,\n            set: { reconciledToVersion: version },\n          });\n      },\n    },\n  };\n\n  // Deps for `createIdentityMembers`, beyond `ensureTable` (`provisioning`)\n  // and `contributionTableExists` (from the contribution member group\n  // `createSqlBackend` builds first).\n  const identityRuntime: IdentityRuntime = {\n    revisionOriginsTableDdl: generatePgCreateTableSQL(tables.revisionOrigins),\n    contributionsForTableNames: (overrides) =>\n      postgresContributions(\n        buildPostgresTables(overrides),\n        fulltextStrategy ?? false,\n      ),\n    primaryKeyConstraintNameFor: (tableName) => `${tableName}_pkey`,\n  };\n\n  /**\n   * Builds this profile's top-level `InternalOperationBackend`, deferred\n   * until `createSqlBackend` has resolved the assembled pipeline's\n   * capabilities, fence target, and contribution materializer (`ctx` — its\n   * `buildCommonOperationOptions` assembly needs the materializer for the\n   * projection-evidence callbacks) — everything else here is a plain\n   * closure capture, unchanged from when this call site built `operations`\n   * directly.\n   */\n  function buildOperations(\n    ctx: EngineOperationsContext,\n  ): InternalOperationBackend {\n    return createPostgresOperationBackend({\n      db,\n      executionAdapter,\n      ...(atomicSqlProgramExecutor === undefined ?\n        {}\n      : { atomicSqlProgramExecutor }),\n      adapterOptions,\n      operationStrategy,\n      tableNames,\n      capabilities: ctx.capabilities,\n      fulltextStrategy,\n      vectorStrategy,\n      contributionMaterializer: ctx.contributionMaterializer,\n      iterativeScanProbe,\n      schemaVersionsTable: tables.schemaVersions,\n      fenceTarget: ctx.fenceTarget,\n      transactionScoped: false,\n      // The SAME object exposed as `backend.catalog` (via\n      // `provisioning.catalog`), not a second one built from this call's own\n      // `db`/`executionAdapter` — see `CreatePostgresOperationBackendOptions.catalog`.\n      catalog: provisioning.catalog,\n    });\n  }\n\n  async function ensureEdgeMatchIdentityStorage(): Promise<void> {\n    const edgeTableName = getTableName(tables.edges);\n    const [storage] = await executionAdapter.execute<{\n      has_check?: unknown;\n      has_index?: unknown;\n      has_key?: unknown;\n      has_name?: unknown;\n      table_name?: unknown;\n    }>(\n      portableSql`SELECT\n        to_regclass(${postgresIdentifierRegclassName(edgeTableName)}) AS table_name,\n        EXISTS (\n          SELECT 1 FROM pg_attribute\n          WHERE attrelid = to_regclass(${postgresIdentifierRegclassName(edgeTableName)})\n            AND attname = 'match_identity_name' AND NOT attisdropped\n        ) AS has_name,\n        EXISTS (\n          SELECT 1 FROM pg_attribute\n          WHERE attrelid = to_regclass(${postgresIdentifierRegclassName(edgeTableName)})\n            AND attname = 'match_identity_key' AND NOT attisdropped\n        ) AS has_key,\n        EXISTS (\n          SELECT 1 FROM pg_constraint\n          WHERE conrelid = to_regclass(${postgresIdentifierRegclassName(edgeTableName)})\n            AND conname = ${edgeMatchIdentityPairCheckName(edgeTableName)}\n        ) AS has_check,\n        to_regclass(${postgresIdentifierRegclassName(edgeMatchIdentityUniqueIndexName(edgeTableName))}) IS NOT NULL AS has_index`,\n    );\n    if (typeof storage?.table_name !== \"string\") return;\n    const statements =\n      generatePostgresEdgeMatchIdentityUpgradeDDL(edgeTableName);\n    const missingStatements = [\n      storage.has_name === true ? undefined : statements[0],\n      storage.has_key === true ? undefined : statements[1],\n      storage.has_check === true ? undefined : statements[2],\n      storage.has_index === true ? undefined : statements[3],\n    ].filter((statement): statement is string => statement !== undefined);\n    for (const statement of missingStatements) {\n      await executeConcurrentCreateDdl(statement);\n    }\n  }\n\n  async function readBaseSchemaVersion(): Promise<number | undefined> {\n    try {\n      const rows = await db\n        .select({ version: tables.baseSchemaVersions.version })\n        .from(tables.baseSchemaVersions)\n        .where(eq(tables.baseSchemaVersions.installation, 1));\n      return rows.at(0)?.version;\n    } catch (error) {\n      if (isMissingTableError(error)) return undefined;\n      throw error;\n    }\n  }\n\n  async function writeBaseSchemaVersion(\n    version: number,\n  ): Promise<number | undefined> {\n    const marker = tables.baseSchemaVersions;\n    const timestamp = new Date();\n    await db\n      .insert(marker)\n      .values({ installation: 1, version, updatedAt: timestamp })\n      .onConflictDoUpdate({\n        target: marker.installation,\n        set: { version, updatedAt: timestamp },\n        setWhere: lte(marker.version, version),\n      });\n    // Read back on this backend's primary connection: remote adapters do not\n    // all support RETURNING. The monotonic upsert plus same-primary read makes\n    // this two-statement observation safe when a concurrent adopter is ahead.\n    return readBaseSchemaVersion();\n  }\n\n  /**\n   * PostgreSQL's additive-column migration for an index-materializations\n   * table created before the build-claim columns existed; fresh installs\n   * already have them from `ensureIndexMaterializationsTable`'s CREATE\n   * TABLE. These take the concurrent-DDL retry for the same reason the\n   * CREATE does, and it is the same loop two replicas run at boot: ADD\n   * COLUMN IF NOT EXISTS cannot see another session's uncommitted\n   * pg_attribute row, so the loser waits and is then handed 42701 (or\n   * `tuple concurrently updated`) instead of the notice — a spuriously\n   * failed boot (#445).\n   */\n  async function ensureIndexMaterializationColumns(\n    tableName: string,\n  ): Promise<void> {\n    await executeConcurrentCreateDdl(\n      `ALTER TABLE \"${tableName}\" ADD COLUMN IF NOT EXISTS \"building_since\" timestamptz;`,\n    );\n    await executeConcurrentCreateDdl(\n      `ALTER TABLE \"${tableName}\" ADD COLUMN IF NOT EXISTS \"claim_token\" text;`,\n    );\n  }\n\n  const provisioning: EngineProvisioning = {\n    executeDdl: (ddl) => executeRawDdl(db, ddl),\n    ensureTable: executeConcurrentCreateDdl,\n    generateDdl: () => generatePostgresDDL(tables, fulltextStrategy ?? false),\n    ensureIndexMaterializationColumns,\n    catalog: createPostgresCatalogProbes(\n      db,\n      executionAdapter,\n      operationStrategy,\n      false,\n    ),\n  };\n\n  // Deps for `createGraphTemplateMembers`, beyond `ensureTable`\n  // (`provisioning`), `execute` (the operation layer's own `execute`, built\n  // once `createSqlBackend` has a contribution materializer to hand\n  // `buildOperations`), and `fencePlan` (the plan `createSqlBackend` resolves\n  // once, before it builds this member group — `instantiateStatement` below\n  // reads it to decide whether the fused CTE's advisory lock is still sound).\n  const graphTemplateRuntime: GraphTemplateRuntime = {\n    graphTemplatesTableDdl: generatePgCreateTableSQL(tables.graphTemplates),\n    tableNames: {\n      schemaVersions: getTableName(tables.schemaVersions),\n      graphTemplates: getTableName(tables.graphTemplates),\n      contributionMaterializations: getTableName(\n        tables.contributionMaterializations,\n      ),\n    },\n    async instantiateStatement(params, execute, fencePlan, fenceTarget) {\n      if (fencePlan.kind !== \"row\") {\n        return execute<Record<string, unknown>>(\n          asCompiledRowsSql(\n            postgresInstantiateGraphTemplateStatement(params, fencePlan),\n          ),\n        );\n      }\n      // Under `row`, the fused CTE below carries no lock of its own (its\n      // `locked` CTE is gone) — the schema-commit fence's exclusion instead\n      // comes from taking the SAME fence row `acquireSchemaWriteFence`'s row\n      // arm takes, as a preceding statement in an explicit transaction, so\n      // the acquisition and the CTE commit or roll back together the way the\n      // single fused statement always has under `mechanism: \"lock\"`.\n      if (!declaredCapabilities.execution.interactiveTransactions) {\n        throw new ConfigurationError(\n          \"Graph-template instantiation under a row-mechanism write fence \" +\n            \"requires atomic transactions, but this Postgres backend does \" +\n            \"not provide them. The drizzle-orm/neon-http driver communicates \" +\n            \"over HTTP and cannot hold a session across statements; use \" +\n            \"drizzle-orm/neon-serverless (websocket) instead.\",\n          {\n            code: \"GRAPH_TEMPLATE_WRITE_FENCE_UNAVAILABLE\",\n            backend: \"postgres\",\n            capability: \"execution.interactiveTransactions\",\n            supportsInteractiveTransactions: false,\n          },\n        );\n      }\n      // Fresh `tx`/`txAdapter` every call, so a replayed attempt never\n      // reuses a rolled-back attempt's connection state (the attempt-factory\n      // contract `runRetriedUnit` requires of `attempt`).\n      const attempt = (): Promise<readonly Record<string, unknown>[]> =>\n        db.transaction(async (tx) => {\n          const txAdapter = createPostgresExecutionAdapter(tx, adapterOptions);\n          await txAdapter.execute(\n            fencePlan.sql.acquireKeyed(\n              SCHEMA_COMMIT_FENCE_NAMESPACE,\n              params.graphId,\n            ),\n          );\n          return txAdapter.execute<Record<string, unknown>>(\n            asCompiledRowsSql(\n              postgresInstantiateGraphTemplateStatement(params, fencePlan),\n            ),\n          );\n        });\n      // Under `conflict: \"commit-time\"` (the `\"optimistic-retry\"` tier) two\n      // concurrent instantiations can both acquire the fence row and only one\n      // COMMITs; the other's whole attempt — open, fence-row acquisition, CTE\n      // — replays from the top. Every other resolved plan, including `row`\n      // with `conflict: \"wait\"`, runs the one attempt above unchanged: a\n      // waiting mechanism excludes the second acquirer instead of failing it.\n      if (!isOptimisticRetryTier(fenceTarget)) return attempt();\n      return runRetriedUnit(\n        {\n          operation: \"instantiateGraphTemplate\",\n          attempts: OPTIMISTIC_RETRY_ATTEMPTS,\n          target: fenceTarget,\n        },\n        attempt,\n      );\n    },\n    toSchemaVersionRow,\n    rowAccess: {\n      async insertIgnoringConflict(params) {\n        const t = tables.graphTemplates;\n        await db\n          .insert(t)\n          .values({\n            templateId: params.templateId,\n            schemaHash: params.schemaHash,\n            schemaDoc: params.schemaDoc,\n            createdAt: new Date(),\n          })\n          .onConflictDoNothing();\n      },\n      async selectByTemplateId(templateId) {\n        const t = tables.graphTemplates;\n        const templateRows = await db\n          .select()\n          .from(t)\n          .where(eq(t.templateId, templateId));\n        const row = templateRows.at(0);\n        if (row === undefined) return;\n        return {\n          templateId: row.templateId,\n          schemaHash: row.schemaHash,\n          schemaDoc: JSON.stringify(row.schemaDoc),\n          createdAt: row.createdAt.toISOString(),\n        };\n      },\n    },\n    // PostgreSQL's own statement already copies the template's\n    // contribution markers inside its CTE (see `graph-template-sql.ts`),\n    // so this profile supplies no `copyContributionMarkers` dep.\n  };\n\n  // Deps for `createBaseSchemaMembers`, beyond `ensureTable`/`executeDdl`/\n  // `generateDdl` (`provisioning`) and `ensureGraphTemplatesTable` (from the\n  // graph-template member group `createSqlBackend` builds first).\n  const baseSchemaRuntime: BaseSchemaRuntime = {\n    baseSchemaVersionsTableDdl: generatePgCreateTableSQL(\n      tables.baseSchemaVersions,\n    ),\n    readVersion: readBaseSchemaVersion,\n    writeVersion: writeBaseSchemaVersion,\n    ensureEdgeMatchIdentityStorage,\n    fencesTableDdl: generatePgCreateTableSQL(tables.fences),\n    sinceIndexDdl: [\n      generatePgCreateTableSQL(tables.recordedNodes),\n      ...generatePgCreateIndexSQL(tables.recordedNodes),\n      generatePgCreateTableSQL(tables.recordedEdges),\n      ...generatePgCreateIndexSQL(tables.recordedEdges),\n      generatePgCreateTableSQL(tables.recordedIdentityAssertions),\n      ...generatePgCreateIndexSQL(tables.recordedIdentityAssertions),\n      ...sinceIndexAdoptionDdl({\n        recordedNodes: getTableName(tables.recordedNodes),\n        recordedEdges: getTableName(tables.recordedEdges),\n        recordedIdentityAssertions: getTableName(\n          tables.recordedIdentityAssertions,\n        ),\n      }),\n    ],\n  };\n\n  // Deps for `createIndexMaterializationMembers`, beyond `ensureTable` /\n  // `ensureIndexMaterializationColumns` (both `provisioning`).\n  const indexMaterializationRuntime: IndexMaterializationRuntime = {\n    indexMaterializationsTableDdl: generatePgCreateTableSQL(\n      tables.indexMaterializations,\n    ),\n    tableName: getTableName(tables.indexMaterializations),\n    timestamps: POSTGRES_INDEX_MAT_TIMESTAMPS,\n    rowAccess: {\n      async selectByIndexName(indexName) {\n        const t = tables.indexMaterializations;\n        return db.select().from(t).where(eq(t.indexName, indexName));\n      },\n      async selectByIndexNames(indexNames) {\n        const t = tables.indexMaterializations;\n        return db\n          .select()\n          .from(t)\n          .where(inArray(t.indexName, [...indexNames]));\n      },\n      async upsert(params) {\n        const t = tables.indexMaterializations;\n        await db\n          .insert(t)\n          .values(\n            buildMaterializationInsertValues(\n              params,\n              POSTGRES_INDEX_MAT_TIMESTAMPS.encode,\n            ),\n          )\n          .onConflictDoUpdate({\n            target: t.indexName,\n            set: buildMaterializationOnConflictSet(params.materializedAt),\n          });\n      },\n    },\n  };\n\n  // Deps for `createKindRemovalMembers`, beyond `ensureTable` (`provisioning`).\n  const kindRemovalRuntime: KindRemovalRuntime = {\n    kindRemovalsTableDdl: generatePgCreateTableSQL(tables.kindRemovals),\n    timestamps: POSTGRES_KIND_REMOVAL_TIMESTAMPS,\n    rowAccess: {\n      async selectPending(graphId) {\n        const t = tables.kindRemovals;\n        return db\n          .select()\n          .from(t)\n          .where(and(eq(t.graphId, graphId), isNull(t.removedAt)));\n      },\n      async selectAll(graphId) {\n        const t = tables.kindRemovals;\n        return db.select().from(t).where(eq(t.graphId, graphId));\n      },\n      async upsert(params: RecordKindRemovalParams) {\n        const t = tables.kindRemovals;\n        await db\n          .insert(t)\n          .values(\n            buildKindRemovalInsertValues(\n              params,\n              POSTGRES_KIND_REMOVAL_TIMESTAMPS.encode,\n            ),\n          )\n          .onConflictDoUpdate({\n            target: [t.graphId, t.kindName, t.entity, t.schemaVersion],\n            set: buildKindRemovalOnConflictSet(t.removedAt, params.removedAt),\n          });\n      },\n    },\n  };\n\n  function lateMembers(\n    ctx: EngineAssemblyContext<AnyPgTransaction>,\n  ): EngineLateMembers<AnyPgTransaction> {\n    // The factory's finalized capabilities, ONE fence target/plan, and\n    // first-party standing — resolved once by `createSqlBackend`, never\n    // re-derived here. Aliased to bare names so every existing\n    // capabilities/fence-gated call below reads exactly as it did when this\n    // dialect built its own (stale-prone) copies.\n    const { capabilities, fencePlan, fenceTarget, isFirstParty } = ctx;\n\n    /**\n     * The per-graph schema-commit fence.\n     *\n     * Resolves a {@link resolveWriteFencePlan} rather than emitting the lock\n     * unconditionally, so the decision has the same one owner every other lock\n     * site reads — and then REFUSES, like every other fence that guards a\n     * read-then-write spanning statements, rather than degrading.\n     *\n     * It fences a read-then-write sequence that spans STATEMENTS, not a\n     * predicate carried inside one. `commitSchemaVersion` reads the row for the\n     * incoming version, reads the active version, and only then runs the\n     * `deactivateAll` / `activateVersion` pair — and its own comment names this\n     * fence as what serializes that (\"BEGIN IMMEDIATE on SQLite,\n     * pg_advisory_xact_lock on Postgres\"). Skipping the lock does not leave a\n     * slower-but-correct path, it leaves a check-then-write window in which a\n     * concurrent commit lands between the read and the flip. The partial unique\n     * index on `(graph_id) WHERE is_active` still refuses a SECOND active row,\n     * but it cannot order two commits that each read a version the other is\n     * about to replace.\n     *\n     * `engine-serialized` is the exception `requireWriteFence` already encodes:\n     * the writer slot IS the fence, so there is no concurrent commit to order.\n     *\n     * The row-locking clause rides the `lock` arm rather than a fact of its\n     * own: it is never taken without the advisory lock above it, so no shipped\n     * or plausible engine distinguishes them. An engine that implements\n     * `pg_advisory_xact_lock` but not `FOR UPDATE` is where a `rowLocks`\n     * member of `WriteFenceDeclaration` would earn its place.\n     */\n    async function acquireSchemaWriteFence(\n      tx: AnyPgTransaction,\n      graphId: string,\n      beforeAcquisition?: (\n        phase: \"schema-advisory\" | \"schema-row\",\n      ) => Promise<void>,\n    ): Promise<void> {\n      const plan = requireWriteFence(\n        resolveWriteFencePlan(fenceTarget),\n        \"The PostgreSQL schema-commit fence\",\n        \"keyed\",\n      );\n      switch (plan.kind) {\n        case \"lock\": {\n          await beforeAcquisition?.(\"schema-advisory\");\n          // Advisory lock: hashtext($graphId) is collision-tolerant for the\n          // size of an active graph set; collisions just serialize unrelated\n          // graphs which is harmless. Held until the transaction commits.\n          //\n          // The ONE-ARGUMENT (bigint) form is deliberate and load-bearing: it\n          // occupies a different lock space than the two-argument (int4, int4)\n          // form every namespaced TypeGraph lock uses (`typegraph:identity`,\n          // `typegraph:identity-ddl`, the recorded-write clock). PostgreSQL\n          // stores the two forms with different locktag field4 values, so a\n          // bigint key can never collide with an (int4, int4) key however the\n          // hashes land — the schema fence is therefore independent of every\n          // lock taken INSIDE it. Normalizing this to the two-argument form\n          // would merge the spaces and put that independence at the mercy of\n          // `hashtext` collisions. `advisoryLockSingleExpression` is the one\n          // owner of this spelling; under this same `\"lock\"` plan kind, the\n          // graph-template instantiation statement takes the identical\n          // advisory lock on the identical key so the two mutually exclude.\n          // Under `\"row\"` (below), the graph-template statement instead\n          // takes the same fence row this fence's `\"row\"` arm takes, as a\n          // preceding statement in its own transaction — no advisory lock is\n          // in play on either side.\n          await tx.execute(\n            toDrizzleSql(\n              portableSql`SELECT ${advisoryLockSingleExpression(graphId)}`,\n              \"postgres\",\n            ),\n          );\n          await beforeAcquisition?.(\"schema-row\");\n          // Managed entity writers lock this row FOR SHARE. Locking it FOR\n          // UPDATE before any emptiness probe makes a writer-first commit\n          // wait; a schema-first snapshot-isolated writer gets PostgreSQL's\n          // native serialization failure instead of validating a stale row\n          // version.\n          // eslint-disable-next-line unicorn/template-indent -- this SQL text is snapshot-asserted verbatim (tests/engine-profile-parity.test.ts); autofix would reindent it to this closure's nesting depth and change the captured statement text.\n          await tx.execute(sql`\n          SELECT ${tables.schemaVersions.version}\n          FROM ${tables.schemaVersions}\n          WHERE ${tables.schemaVersions.graphId} = ${graphId}\n            AND ${tables.schemaVersions.isActive} = TRUE\n          FOR UPDATE\n        `);\n          return;\n        }\n        case \"row\": {\n          await beforeAcquisition?.(\"schema-row\");\n          // Takes the portable fence row instead of the `pg_advisory_xact_lock`/\n          // `FOR UPDATE` pair `mechanism: \"lock\"` uses — `lockActiveSchemaVersion`\n          // takes the SAME row on the write side, so a concurrent commit and a\n          // concurrent write contend on it exactly as the advisory pair does.\n          // The fused schema + graph-write command still stays advisory-only\n          // under `row` (`schemaFenceFusionPlan.kind === \"lock\"`, below): it\n          // reaches the schema table inside one statement it composes itself,\n          // which a standalone fence-row acquisition cannot embed into.\n          await tx.execute(\n            toDrizzleSql(\n              plan.sql.acquireKeyed(SCHEMA_COMMIT_FENCE_NAMESPACE, graphId),\n              \"postgres\",\n            ),\n          );\n          return;\n        }\n        case \"engine-serialized\":\n        case \"caller-serialized\": {\n          // The writer slot IS the fence; the commit already runs alone, which\n          // is the guarantee `commitSchemaVersion`'s own comment names\n          // (\"BEGIN IMMEDIATE on SQLite\"). Under `caller-serialized`, the\n          // deployment's own serialization promise plays the same role.\n          // Nothing to take.\n          return;\n        }\n        default: {\n          plan satisfies never;\n        }\n      }\n    }\n\n    /**\n     * Runs `fn` inside a Postgres transaction, under whatever fence\n     * {@link acquireSchemaWriteFence} resolves. On a `lock` backend that is an\n     * `pg_advisory_xact_lock` keyed on the graph id, which serializes all\n     * schema commits per-graph: the read-then-write CAS in\n     * `commitSchemaVersion` is safe even for the initial-commit case where\n     * there is no row yet to `SELECT ... FOR UPDATE`. On an `unfenced` one\n     * that initial-commit case falls back to the storage layer — the partial\n     * unique index on `(graph_id) WHERE is_active` fails the loser of a\n     * concurrent first commit rather than admitting two active rows.\n     *\n     * Refuses on backends that don't support transactions\n     * (`drizzle-orm/neon-http`). The orphan-row crash window cannot be\n     * eliminated without atomicity, so silent best-effort degradation is\n     * worse than a typed error.\n     *\n     * Under `conflict: \"commit-time\"` (the `\"optimistic-retry\"` tier) two\n     * concurrent callers can both acquire the fence row and only one\n     * COMMITs; the other's whole attempt — open, fence-row acquisition,\n     * `fn` — replays through `runRetriedUnit`, `fenceTarget` naming the\n     * object its serialization classifier was registered against. Every\n     * other resolved plan, including `row` with `conflict: \"wait\"`, runs the\n     * one attempt below unchanged. This is the ONE place that wraps\n     * `runSchemaWriteTransaction`: `commitSchemaVersion`,\n     * `commitSchemaVersionIfKindsEmpty`, `commitSchemaVersionWithPreflight`,\n     * and `setActiveVersion` (`schema-version-members.ts`) all delegate to\n     * this function and inherit the replay with no wrapping of their own. A\n     * caller that itself retries around a call into this function — the\n     * contribution rebuilder re-reads its own pre-fence state on retry, for\n     * one — composes safely: {@link runRetriedUnit}'s `unwrapNestedConflict`\n     * reports THIS function's own exhaustion `TransactionConflictError` by\n     * its unwrapped cause, so an outer retry classifies the underlying\n     * driver conflict exactly as it would a single-attempt nested unit.\n     */\n    function runSchemaWriteTransaction<T>(\n      graphId: string,\n      fn: (tx: InternalOperationBackend) => Promise<T>,\n    ): Promise<T> {\n      if (!capabilities.execution.interactiveTransactions) {\n        const verdict = resolveBatchWriteVerdict(ctx.self(), {\n          needs: \"schema-commit\",\n        });\n        throw new ConfigurationError(\n          \"Schema writes and removal cleanup require atomic transactions, \" +\n            \"but this Postgres backend does not provide them. The drizzle-orm/neon-http \" +\n            \"driver communicates over HTTP and cannot hold a session across statements; \" +\n            \"use drizzle-orm/neon-serverless (websocket) for transactional writes.\" +\n            batchRefusalSuffix(verdict),\n          {\n            backend: \"postgres\",\n            capability: \"execution.interactiveTransactions\",\n            supportsInteractiveTransactions: false,\n            ...batchRefusalDetails(verdict),\n          },\n        );\n      }\n\n      // Fresh `tx`/`txBackend` every call, so a replayed attempt never reuses\n      // a rolled-back attempt's connection state (the attempt-factory\n      // contract `runRetriedUnit` requires of `attempt`).\n      const attempt = (): Promise<T> =>\n        db.transaction(async (tx) => {\n          await acquireSchemaWriteFence(tx, graphId);\n          // The fence resolved above is held here, so the schema-write-capable\n          // InternalOperationBackend is used intentionally (see its type).\n          const { backend: txBackend, drainAndClose } =\n            createTransactionBackend({\n              db: tx,\n              adapterOptions,\n              operationStrategy,\n              tableNames,\n              capabilities,\n              fulltextStrategy,\n              vectorStrategy,\n              contributionMaterializer: ctx.contributionMaterializer,\n              iterativeScanProbe,\n              schemaVersionsTable: tables.schemaVersions,\n              fenceTarget,\n              lineage: provisioning.lineage,\n              recordedTime: provisioning.recordedTime,\n              isFirstParty,\n            });\n          try {\n            return await fn(txBackend);\n          } finally {\n            await drainAndClose();\n          }\n        });\n\n      if (!isOptimisticRetryTier(fenceTarget)) return attempt();\n      return runRetriedUnit(\n        {\n          operation: \"runSchemaWriteTransaction\",\n          attempts: OPTIMISTIC_RETRY_ATTEMPTS,\n          target: fenceTarget,\n        },\n        attempt,\n      );\n    }\n\n    // Shared by `transaction()` (TypeGraph opens the tx) and\n    // `adoptTransaction()` (#134 — the caller already opened it): bind a\n    // tx-scoped backend to the *literal* `tx` client and gate fulltext on\n    // the durable marker (a cached SELECT, never DDL). `txIsFirstParty` is\n    // threaded explicitly rather than closing over the outer `isFirstParty`\n    // alias: `adoptTransaction` passes `false` regardless of this profile's\n    // own standing, since an adopted transaction's lifetime is the\n    // caller's, not one TypeGraph has audited.\n    function bindTransactionBackend(\n      tx: AnyPgTransaction,\n      txIsFirstParty: boolean,\n    ): Readonly<{\n      backend: TransactionBackend;\n      privilegedBackend: InternalOperationBackend;\n      drainAndClose: () => Promise<void>;\n    }> {\n      const { backend, drainAndClose } = createTransactionBackend({\n        db: tx,\n        adapterOptions,\n        operationStrategy,\n        tableNames,\n        capabilities,\n        fulltextStrategy,\n        vectorStrategy,\n        contributionMaterializer: ctx.contributionMaterializer,\n        iterativeScanProbe,\n        schemaVersionsTable: tables.schemaVersions,\n        fenceTarget,\n        lineage: provisioning.lineage,\n        recordedTime: provisioning.recordedTime,\n        isFirstParty: txIsFirstParty,\n      });\n      const gatedBackend = carryAtomicMutationSessionRegistration(\n        backend,\n        gateFulltext(\n          backend,\n          ctx.contributionMaterializer.assertInitialized,\n          ctx.contributionMaterializer.refuseUnavailableFulltext,\n        ),\n      );\n      return {\n        backend: gatedBackend,\n        privilegedBackend: backend,\n        drainAndClose,\n      };\n    }\n\n    return {\n      transactions: {\n        async transaction<T>(\n          fn: (tx: TransactionBackend) => Promise<T>,\n          options?: InternalTransactionOptions,\n        ): Promise<T> {\n          return ctx.self().transactionWithNative((tx) => fn(tx), options);\n        },\n\n        async transactionWithNative<T>(\n          fn: (tx: TransactionBackend, sql: AnyPgTransaction) => Promise<T>,\n          options?: InternalTransactionOptions,\n        ): Promise<T> {\n          // #134/#135: NO DDL or ensure here. The tx-scoped backend's\n          // fulltext-touching methods assert the durable contribution\n          // marker (one cached SELECT — never DDL) at point of use, exactly\n          // like the non-tx wrappers. A transaction that never touches\n          // fulltext never asserts; one that does runs pure DML against an\n          // already-materialized table, with the \"no DDL in the business\n          // transaction\" guarantee backed by the durable fact.\n          const temporaryWrites =\n            options?.temporaryWrites === INTERNAL_TEMPORARY_WRITES;\n          if (temporaryWrites && options.accessMode !== \"read_only\") {\n            throw new ConfigurationError(\n              \"Temporary-write transactions must be semantically read-only.\",\n              { dialect: \"postgres\" },\n            );\n          }\n          const txConfig =\n            (\n              options?.isolationLevel !== undefined ||\n              options?.accessMode !== undefined ||\n              temporaryWrites\n            ) ?\n              {\n                ...(options.isolationLevel === undefined ?\n                  {}\n                : {\n                    isolationLevel: options.isolationLevel.replace(\"_\", \" \") as\n                      | \"read uncommitted\"\n                      | \"read committed\"\n                      | \"repeatable read\"\n                      | \"serializable\",\n                  }),\n                ...(options.accessMode === undefined && !temporaryWrites ?\n                  {}\n                : {\n                    accessMode:\n                      temporaryWrites ?\n                        (\"read write\" as const)\n                      : (requireDefined(options.accessMode).replace(\n                          \"_\",\n                          \" \",\n                        ) as \"read only\" | \"read write\"),\n                  }),\n              }\n            : undefined;\n\n          return db.transaction(async (tx) => {\n            const { backend: txBackend, drainAndClose } =\n              bindTransactionBackend(tx, isFirstParty);\n            try {\n              return await fn(\n                markSchemaFencedInsertEligibleUnderFence(txBackend, fencePlan),\n                tx,\n              );\n            } finally {\n              // Drizzle emits COMMIT / ROLLBACK on this same pinned connection the\n              // instant the callback settles, and those control statements do not\n              // travel through the backend's statement queue. Wait for whatever is\n              // on the wire, and refuse anything the callback left running — a\n              // `Promise.all` that rejects orphans its siblings, whose statements\n              // would otherwise overlap the ROLLBACK and then land on a connection\n              // the pool had already handed to somebody else.\n              await drainAndClose();\n            }\n          }, txConfig);\n        },\n\n        adoptTransaction(externalTx: AnyPgTransaction): TransactionBackend {\n          // #134: cross-store atomicity is unsafe without real rollback —\n          // the caller's relational write on `externalTx` *would* still\n          // commit even though the graph write could not be undone. Refuse\n          // loudly rather than silently degrade.\n          if (!capabilities.execution.interactiveTransactions) {\n            throw new ConfigurationError(\n              \"Cross-store atomicity is unavailable on this Postgres backend: \" +\n                \"its driver does not support transactions (drizzle-orm/neon-http, \" +\n                \"Cloudflare D1). Adopting an external transaction here would let \" +\n                \"the caller's relational write commit with no way to roll back \" +\n                \"the graph write. Use a node-postgres or neon-serverless \" +\n                \"(Pool/WebSocket) connection for cross-store transactions.\",\n              {\n                backend: \"postgres\",\n                capability: \"execution.interactiveTransactions\",\n                supportsInteractiveTransactions: false,\n              },\n            );\n          }\n          assertAdoptedDialect<AnyPgTransaction>(\n            externalTx,\n            PgTransaction,\n            \"postgres\",\n          );\n          // The caller owns BEGIN/COMMIT/ROLLBACK via its own\n          // `db.transaction(...)`. We adopt the literal `tx` client and run\n          // pure DML on it — no transaction is opened or closed here, and no\n          // DDL is emitted inside the caller's business transaction.\n          //\n          // Statements still serialize onto the pinned connection, but the queue\n          // is never closed: only the caller knows when their transaction ends,\n          // so it is on them to await every graph write before committing.\n          // `false` regardless of this profile's own first-party standing:\n          // the caller opened this transaction, its lifetime is not one\n          // TypeGraph has audited, and it must not qualify for the\n          // dialect-derivation fallback or the lazy schema-fence lease.\n          return bindTransactionBackend(externalTx, false).backend;\n        },\n\n        ...(capabilities.execution.interactiveTransactions ?\n          { adoptSchemaWriteTransaction: async function adoptSchemaWriteTransaction(\n          externalTx: AnyPgTransaction,\n          graphId: string,\n          options: Readonly<{ waitBudgetMs: number }>,\n        ): Promise<AdoptedSchemaWriteTransaction> {\n          if (!capabilities.execution.interactiveTransactions) {\n            throw new ConfigurationError(\n              \"Schema-write adoption requires an interactive PostgreSQL transaction.\",\n              { capability: \"execution.interactiveTransactions\" },\n            );\n          }\n          assertAdoptedDialect<AnyPgTransaction>(\n            externalTx,\n            PgTransaction,\n            \"postgres\",\n          );\n          if (!Number.isSafeInteger(options.waitBudgetMs) || options.waitBudgetMs <= 0) {\n            throw new ConfigurationError(\n              \"Schema fence waitBudgetMs must be a positive finite integer.\",\n              { waitBudgetMs: options.waitBudgetMs },\n            );\n          }\n          const schemaFencePlan = resolveWriteFencePlan(fenceTarget);\n          if (schemaFencePlan.kind !== \"lock\" && schemaFencePlan.kind !== \"row\") {\n            throw new ConfigurationError(\n              \"Schema adoption requires a database-enforced PostgreSQL schema fence on the caller's session.\",\n              { capability: \"schemaWriteAdoption.fence\", fenceKind: schemaFencePlan.kind },\n            );\n          }\n\n          // SAVEPOINT refuses outside an explicit transaction. Release it\n          // immediately: this proves the literal pinned session is active,\n          // without opening another transaction or changing application data.\n          try {\n            await externalTx.execute(sql`SAVEPOINT typegraph_schema_adoption_probe`);\n            await externalTx.execute(sql`RELEASE SAVEPOINT typegraph_schema_adoption_probe`);\n          } catch (error) {\n            throw new ConfigurationError(\n              \"Schema adoption requires a live caller-owned PostgreSQL transaction on this session.\",\n              { capability: \"postgres.activeNativeTransaction\" },\n              { cause: error },\n            );\n          }\n\n          const { privilegedBackend } = bindTransactionBackend(externalTx, false);\n          const schemaVersionsTableName = getTableName(tables.schemaVersions);\n          if (!(await privilegedBackend.tableExists(schemaVersionsTableName))) {\n            throw new ConfigurationError(\n              \"Schema adoption requires TypeGraph bootstrap storage before the caller transaction.\",\n              { tableName: schemaVersionsTableName },\n            );\n          }\n\n          const settingAdapter = createPostgresExecutionAdapter(\n            externalTx,\n            adapterOptions,\n          );\n          const [setting] = await settingAdapter.execute<{ value: string }>(\n            sql`SELECT current_setting('lock_timeout') AS value`,\n          );\n          const previousTimeout = setting?.value;\n          const callerTimeout =\n            previousTimeout === undefined ? undefined :\n              postgresLockTimeoutMilliseconds(previousTimeout);\n          if (callerTimeout === undefined || previousTimeout === undefined) {\n            throw new ConfigurationError(\n              \"Cannot preserve this transaction's PostgreSQL lock_timeout setting.\",\n              { lockTimeout: previousTimeout },\n            );\n          }\n\n          const deadline = performance.now() + options.waitBudgetMs;\n          let phase: \"schema-advisory\" | \"schema-row\" = \"schema-advisory\";\n          try {\n            await acquireSchemaWriteFence(externalTx, graphId, async (acquisitionPhase) => {\n              phase = acquisitionPhase;\n              const remainingMs = deadline - performance.now();\n              if (remainingMs <= 0) {\n                throw new SchemaFenceTimeoutError(\n                  graphId,\n                  acquisitionPhase,\n                  options.waitBudgetMs,\n                );\n              }\n              const effectiveMs =\n                callerTimeout === 0 ? remainingMs :\n                  Math.min(callerTimeout, remainingMs);\n              await externalTx.execute(\n                sql`SELECT set_config('lock_timeout', ${`${Math.max(1, Math.floor(effectiveMs))}ms`}, true)`,\n              );\n            });\n            // A lock_timeout is per acquisition, so confirm that the entire\n            // ordered advisory/row sequence respected the caller's deadline.\n            if (performance.now() >= deadline) {\n              throw new SchemaFenceTimeoutError(graphId, phase, options.waitBudgetMs);\n            }\n            await externalTx.execute(\n              sql`SELECT set_config('lock_timeout', ${previousTimeout}, true)`,\n            );\n          } catch (error) {\n            // A database lock timeout aborts the native transaction. Do not\n            // issue a restore or diagnostic statement on that failed session.\n            if (isPostgresLockTimeout(error)) {\n              throw new SchemaFenceTimeoutError(graphId, phase, options.waitBudgetMs, error);\n            }\n            throw error;\n          }\n\n          const activeSchema = await privilegedBackend.getActiveSchema(graphId);\n          return {\n            backend: Object.defineProperty(privilegedBackend, \"ensureVectorSlotContributions\", {\n              value: (slots: readonly VectorSlot[], slotOptions?: Readonly<{ onDrift?: \"throw\" | \"skip\" }>) =>\n                ensureAdoptedVectorSlots(privilegedBackend, slots, slotOptions, {\n                  dialect: \"postgres\",\n                  fenceTarget,\n                  vectorStrategy,\n                  fulltextStrategy,\n                  fulltextTableName: tables.fulltextTableName,\n                  markerTableName: getTableName(tables.contributionMaterializations),\n                  decodeMarkerTimestamp: POSTGRES_CONTRIBUTION_MAT_TIMESTAMPS.decode,\n                }),\n              enumerable: true,\n            }) as unknown as AdoptedSchemaWriteTransaction[\"backend\"],\n            activeSchema,\n          };\n        } }\n          : {}),\n\n        async schemaWriteTransaction<T>(\n          graphId: string,\n          fn: (tx: SchemaWriteTransactionBackend) => Promise<T>,\n        ): Promise<T> {\n          return runSchemaWriteTransaction(graphId, (target) => fn(target));\n        },\n      },\n\n      fence: {\n        runSchemaWriteTransaction,\n      },\n\n      rawSql: {\n        execute: ctx.operations.execute,\n        ...(ctx.operations.executeRaw === undefined ?\n          {}\n        : { executeRaw: ctx.operations.executeRaw }),\n      },\n\n      maintenance: {\n        async refreshStatistics(): Promise<void> {\n          // Scoped to TypeGraph-managed tables only — we don't touch\n          // unrelated tables in the same database. Without fresh stats\n          // after a bulk load the planner can pick a reverse-index scan\n          // with a filter (5ms forward traversal instead of 0.5ms) until\n          // autovacuum catches up. Sequential per-table statements — see\n          // coreAnalyzeStatements for why they are never combined.\n          for (const statement of coreAnalyzeStatements) {\n            await db.execute(statement);\n          }\n          // The recorded and identity relations may be absent on a schema created\n          // before recorded-time history or Operational Identity landed\n          // (bring-your-own-pool, no DDL re-run). Postgres fails an ANALYZE naming\n          // a missing relation, so ANALYZE only the guarded tables that exist.\n          const tablePresence = await Promise.all(\n            guardedAnalyzeTables.map(async (tableName) => ({\n              tableName,\n              exists: await guardedTableExists(tableName),\n            })),\n          );\n          const presentGuardedTables = tablePresence\n            .filter((entry) => entry.exists)\n            .map((entry) => entry.tableName);\n          for (const tableName of presentGuardedTables) {\n            await db.execute(\n              toDrizzleSql(\n                portableSql`ANALYZE (SKIP_LOCKED) ${portableSql.identifier(tableName)}`,\n                \"postgres\",\n              ),\n            );\n          }\n        },\n      },\n\n      ...((\n        capabilities.execution.interactiveTransactions &&\n        executionAdapter.executeCompiled !== undefined\n      ) ?\n        {\n          async trustedImport<T>(\n            fn: (session: TrustedImportSession) => Promise<T>,\n            options_?: TrustedImportOptions,\n          ): Promise<T> {\n            return ctx.self().transactionWithNative(async (tx, rawSql) => {\n              if (options_?.schemaWrite !== undefined) {\n                await requireDefined(tx.lockSchemaVersionForWrite)({\n                  ...options_.schemaWrite,\n                });\n              }\n              const trustedExecutionAdapter = createPostgresExecutionAdapter(\n                rawSql,\n                { ...adapterOptions, useTransactionClient: true },\n              );\n              const executeCompiled = trustedExecutionAdapter.executeCompiled;\n              if (executeCompiled === undefined) {\n                throw new ConfigurationError(\n                  \"Trusted import could not bind raw execution to the PostgreSQL transaction.\",\n                  { capability: \"trustedImport\", dialect: \"postgres\" },\n                );\n              }\n              const trustedTx = deriveBackend(tx, {\n                executeRaw<T>(\n                  sqlText: string,\n                  params: readonly unknown[],\n                ): Promise<readonly T[]> {\n                  return executeCompiled<T>({ params, sql: sqlText });\n                },\n              });\n              await lockPostgresTrustedImportTables(trustedTx, tableNames);\n              await assertTrustedImportDatabaseEmpty(trustedTx, tableNames);\n              const indexDefinitions = await suspendPostgresSecondaryIndexes(\n                trustedTx,\n                tableNames,\n              );\n              const result = await fn(\n                createPostgresTrustedImportSession(trustedTx, tableNames),\n              );\n              await restoreSecondaryIndexes(trustedTx, indexDefinitions);\n              await analyzeImportedTables(trustedTx, tableNames);\n              return result;\n            });\n          },\n        }\n      : {}),\n\n      extensions: {\n        ensureExtension: (name) =>\n          ensureDatabaseExtension(capabilities, fencePlan, name),\n        ensureTrigramExtension(): Promise<void> {\n          return ensureDatabaseExtension(capabilities, fencePlan, \"pg_trgm\");\n        },\n        async claimIndexMaterialization(\n          params: ClaimIndexMaterializationParams,\n        ): Promise<boolean> {\n          const t = tables.indexMaterializations;\n          // Atomic claim: insert a fresh claim row, or take over an existing\n          // row only when no live claim is on it (NULL or lease-expired\n          // building_since). The WHERE on the conflict update makes losing\n          // racers see zero returned rows — the row's own atomicity is the\n          // mutex, so this works identically through pools and across\n          // processes (unlike session advisory locks, which pin a\n          // connection).\n          const rows = await db.execute(sql`\n            INSERT INTO ${t} (\n              \"index_name\", \"graph_id\", \"entity\", \"kind\", \"signature\",\n              \"schema_version\", \"last_attempted_at\", \"building_since\",\n              \"claim_token\"\n            )\n            VALUES (\n              ${params.indexName}, ${params.graphId}, ${params.entity},\n              ${params.kind}, ${params.signature}, ${params.schemaVersion},\n              now(), now(), ${params.token}\n            )\n            ON CONFLICT (\"index_name\") DO UPDATE SET\n              \"building_since\" = now(),\n              \"claim_token\" = EXCLUDED.\"claim_token\"\n            WHERE ${t}.\"building_since\" IS NULL\n               OR ${t}.\"building_since\" < now() - (${params.leaseMs} * interval '1 millisecond')\n            RETURNING \"index_name\"\n          `);\n          const result = rows;\n          const returned =\n            Array.isArray(result) ? result : (\n              ((result as Readonly<{ rows?: readonly unknown[] }>).rows ?? [])\n            );\n          return returned.length > 0;\n        },\n\n        async releaseIndexMaterializationClaim(\n          params: ReleaseIndexMaterializationClaimParams,\n        ): Promise<void> {\n          const t = tables.indexMaterializations;\n          // Token-guarded: a lease-expired claim taken over by another\n          // materializer must not be released by the original holder.\n          await db.execute(sql`\n            UPDATE ${t}\n            SET \"building_since\" = NULL, \"claim_token\" = NULL\n            WHERE \"index_name\" = ${params.indexName}\n              AND \"claim_token\" = ${params.token}\n          `);\n        },\n\n        ensureEdgeMatchIdentityStorage,\n      },\n    };\n  }\n\n  // Assigned to an explicitly typed `const` rather than passed to\n  // `registerFirstPartyProfile` as an inline literal: excess-property\n  // checking only runs against a fresh object literal assigned to a KNOWN\n  // type, and `registerFirstPartyProfile<T extends object>` would otherwise\n  // infer `T` from the literal itself, checking nothing. Registered by\n  // object identity on the exact object returned below — so\n  // `createSqlBackend` marks this backend and its fence target first-party\n  // — rather than by a field a copy or spread could carry forward.\n  const profile: SqlEngineProfile<AnyPgTransaction> = {\n    dialect: \"postgres\",\n    fenceSql: postgresFenceSql,\n    tableNames,\n    execution: executionAdapter,\n    strategy: operationStrategy,\n    fulltext: fulltextStrategy,\n    vector: vectorStrategy,\n    declaredCapabilities,\n    schemaProvisioning: resolveSchemaProvisioning(options.schemaProvisioning),\n    resourceAudit,\n    autocommit: { singleStatementDurable: true },\n    provisioning,\n    contributionRuntime,\n    identityRuntime,\n    graphTemplateRuntime,\n    baseSchemaRuntime,\n    indexMaterializationRuntime,\n    kindRemovalRuntime,\n    async close(): Promise<void> {\n      // Drizzle doesn't expose a close method\n      // Users manage connection lifecycle themselves\n    },\n    assembly: assembleEngine({ buildOperations, lateMembers }),\n  };\n  return registerFirstPartyProfile(profile);\n}\n\n/**\n * Returns the client object a Drizzle Postgres database serializes ALL of its\n * statements onto, or `undefined` when statements can run on independent\n * connections.\n *\n * Marked (single connection — an open transaction on one wrapper blocks or\n * captures every other wrapper's statements):\n *\n * - **PGlite** — one in-process WASM Postgres connection.\n * - **A bare `pg` / `@neondatabase/serverless` `Client`** — one owned socket.\n *   An export's `BEGIN ... READ ONLY` stays open across the whole stream, so a\n *   concurrent import's INSERT lands inside it (\"cannot execute INSERT in a\n *   read-only transaction\").\n * - **A `Pool` whose resolved cap is one connection** — the export checks out the\n *   pool's only connection for the duration, so a concurrent import waits for a\n *   connection that is never released. Every spelling pg-pool resolves into that\n *   cap counts; {@link isSingleConnectionPgPoolCap} owns which ones those are.\n * - **A postgres-js client whose resolved cap is one connection** — the same cap\n *   on a CALLABLE client. postgres-js's `begin` reserves a connection from its\n *   own pool for the transaction, so with a pool of one an export snapshot holds\n *   the only connection every other wrapper's statement needs.\n *   {@link isSingleConnectionPostgresJsCap} owns that driver's reading of a cap,\n *   which is NOT the same decision as pg-pool's.\n *\n * Deliberately NOT marked: a default pool (independent connection per\n * checkout), a postgres-js client at default size (`max` defaults to 10), a\n * neon-http tagged template (session-less HTTP), and anything unrecognized. A\n * false positive refuses legitimate concurrent work, so the predicate requires\n * positive evidence and abstains otherwise. A pool capped at one connection by\n * means other than the cap pg-pool resolves (a global `pg.defaults.max`, a\n * `pg` connection string's `?max=1` — neither of which pg honors, so neither\n * caps anything) is therefore not detected, and a serialized-connection import\n * there still fails the way it did before this guard existed.\n */\nfunction getSerializedPostgresClient(db: AnyPgDatabase): object | undefined {\n  const pgliteClient = getPgliteClient(db);\n  if (pgliteClient !== undefined) return pgliteClient;\n  const client: unknown = (db as Readonly<{ $client?: unknown }>).$client;\n  // Callable clients are examined before the object arms: a tagged-template\n  // client is a FUNCTION, so `typeof client !== \"object\"` would drop it before\n  // its connection cap was ever read.\n  if (typeof client === \"function\") {\n    return isSingleConnectionCallablePgClient(client) ? client : undefined;\n  }\n  if (typeof client !== \"object\" || client === null) return undefined;\n  const candidate = client as Readonly<Record<string, unknown>>;\n  if (!hasFunctionProperty(candidate, \"query\")) return undefined;\n  if (isSingleConnectionPgPool(candidate)) return client;\n  return isBarePgClient(candidate) ? client : undefined;\n}\n\n/** Whether a `pg`-shaped client is a pool whose only connection is shared. */\nfunction isSingleConnectionPgPool(\n  candidate: Readonly<Record<string, unknown>>,\n): boolean {\n  // `options` is a pg.Pool member (pg.Client has none), and holds the resolved\n  // pool configuration. The default is 10, so an absent/other `max` says\n  // nothing; what a cap of one looks like is the cap predicate's decision.\n  const options: unknown = candidate[\"options\"];\n  if (typeof options !== \"object\" || options === null) return false;\n  return isSingleConnectionPgPoolCap(\n    (options as Readonly<Record<string, unknown>>)[\"max\"],\n  );\n}\n\n/**\n * Whether a pg-pool `options.max` means ONE connection.\n *\n * Numeric 1 is the obvious form. A STRING `\"1\"` is not a typo: pg-pool's\n * `options.max = options.max || options.poolSize || 10` (pg-pool 3.x\n * `index.js:89`) never coerces, so `new Pool({ max: process.env.PG_MAX })` —\n * and the legacy `new Pool({ poolSize: \"1\" })`, which lands in the same\n * `options.max` — keeps a string that its own `this._clients.length >=\n * this.options.max` comparison (`index.js:120`) then coerces. The pool really\n * is capped at one.\n *\n * `\"5\"` is NOT evidence: `1 >= \"5\"` is false, so that pool genuinely opens five\n * connections. This is the whole reason the decision is per driver — postgres-js\n * reads the identical value differently, and\n * {@link isSingleConnectionPostgresJsCap} owns that reading.\n */\nfunction isSingleConnectionPgPoolCap(value: unknown): boolean {\n  return value === 1 || (typeof value === \"string\" && Number(value) === 1);\n}\n\n/**\n * Whether a CALLABLE Postgres client (a tagged-template `Sql`) is capped at one\n * connection, and is therefore one serialized resource for every wrapper over it.\n *\n * Two pieces of positive evidence, both required:\n *\n * - {@link isPostgresJsClient} — the driver identity, owned by the execution\n *   adapter that already discriminates postgres-js from the other callable\n *   client (neon-http). Without it, `options.max` on an unknown callable means\n *   nothing we can act on.\n * - {@link isSingleConnectionPostgresJsCap} — postgres-js exposes its RESOLVED\n *   options on the callable, and its `max` defaults to 10, so only a cap of one\n *   says \"every statement lands on the same connection\". An absent or larger\n *   `max` abstains: postgres-js at default size hands each `begin` its own\n *   connection and marking it would refuse concurrent work that succeeds.\n *\n * NOT covered: Bun's `SQL`. Nothing in this package positively identifies that\n * driver (the SQLite side recognizes `BunSQLiteSession`; there is no Postgres\n * equivalent), and a cap we cannot attribute to a known driver is not evidence.\n * A `Bun.SQL` capped at one connection remains a known gap (#434).\n */\nfunction isSingleConnectionCallablePgClient(client: unknown): boolean {\n  if (client === undefined || client === null) return false;\n  // Read before the driver check narrows the type: postgres-js's `Sql` type\n  // declares no `options` member, so the property is reached through the\n  // untyped client rather than the narrowed one.\n  const options: unknown = (client as Readonly<Record<string, unknown>>)[\n    \"options\"\n  ];\n  if (!isPostgresJsClient(client)) return false;\n  if (typeof options !== \"object\" || options === null) return false;\n  return isSingleConnectionPostgresJsCap(\n    (options as Readonly<Record<string, unknown>>)[\"max\"],\n  );\n}\n\n/**\n * Whether a postgres-js `options.max` means ONE connection.\n *\n * postgres-js resolves `max` from the options object, the URL query string and\n * the `PGMAX` environment variable, and does not coerce it (`max` is absent from\n * its `ints` list, postgres@3.4.9 `src/index.js:447`). So `postgres(url +\n * \"?max=1\")` and `PGMAX=1` both yield the STRING `\"1\"`, which is one connection\n * and is marked, exactly as the numeric `postgres(url, { max: 1 })` is.\n *\n * KNOWN, DELIBERATE GAP: `[...Array(options.max)]` (`src/index.js:65`) yields\n * length 1 for ANY non-numeric string, so `postgres(url + \"?max=5\")` also opens\n * exactly one connection today and can genuinely wedge a stream pair. It is NOT\n * marked, because marking on it means marking on an upstream bug: the moment\n * postgres-js coerces `max`, that configuration becomes a five-connection pool\n * and the mark would refuse legitimate concurrent work. This is why the decision\n * is separate from {@link isSingleConnectionPgPoolCap} — the two predicates read\n * the same value with two justifications, and it is those justifications, not\n * the bodies, that will diverge as either driver changes.\n */\nfunction isSingleConnectionPostgresJsCap(value: unknown): boolean {\n  return value === 1 || (typeof value === \"string\" && Number(value) === 1);\n}\n\n/** Whether a `pg`-shaped client owns exactly one connection (Client, not Pool). */\nfunction isBarePgClient(candidate: Readonly<Record<string, unknown>>): boolean {\n  // Refuse every pool marker first: `Pool` exposes checkout accounting and its\n  // resolved `options`; `Client` exposes none of them.\n  if (\n    candidate[\"options\"] !== undefined ||\n    candidate[\"totalCount\"] !== undefined ||\n    candidate[\"idleCount\"] !== undefined ||\n    candidate[\"waitingCount\"] !== undefined\n  ) {\n    return false;\n  }\n  // Positive `pg.Client` evidence: the connection lifecycle pair plus\n  // `escapeIdentifier`, which pg defines on Client and not on Pool.\n  return (\n    hasFunctionProperty(candidate, \"connect\") &&\n    hasFunctionProperty(candidate, \"end\") &&\n    hasFunctionProperty(candidate, \"escapeIdentifier\")\n  );\n}\n\n/**\n * Exported for unit tests that assert the marking predicate directly against\n * real `pg` `Client` / `Pool` instances; production code reaches it only\n * through {@link createPostgresBackend}.\n *\n * @internal\n */\nexport function isSerializedPostgresClient(client: unknown): boolean {\n  return (\n    getSerializedPostgresClient({\n      $client: client,\n    } as unknown as AnyPgDatabase) !== undefined\n  );\n}\n\n/**\n * Memoized \"does this server's pgvector support the iterative scan (>= 0.8)?\"\n * probe, plus a one-shot warning when it does not.\n *\n * Created once per {@link createPostgresBackend} and shared with every\n * transaction-scoped operation backend, so the probe query runs once and the\n * pre-0.8 warning fires once per backend instance rather than once per\n * `store.transaction()`. The answer is connection-independent\n * (`pg_extension.extversion`), so caching it across connections is sound.\n */\nexport type IterativeScanProbe = Readonly<{\n  isSupported: (\n    execAll: <T>(query: SQL) => Promise<readonly T[]>,\n  ) => Promise<boolean>;\n}>;\n\n/**\n * Exported for unit testing the memoization / warn-once behavior in isolation;\n * production code reaches it only through {@link createPostgresBackend}.\n */\nexport function createIterativeScanProbe(): IterativeScanProbe {\n  let probe: Promise<boolean> | undefined;\n  let warned = false;\n\n  function warnUnavailable(version: string): void {\n    if (warned) return;\n    warned = true;\n    if (typeof console === \"undefined\" || typeof console.warn !== \"function\") {\n      return;\n    }\n    console.warn(\n      `[typegraph] pgvector ${version} has no iterative scan (added in 0.8), ` +\n        \"so a filtered approximate vector search stays ef_search-bounded and \" +\n        \"can return fewer rows than `limit` while more matches exist. Upgrade \" +\n        \"pgvector to >= 0.8, or use an exact search (`approximate: false`) \" +\n        \"where a full page matters.\",\n    );\n  }\n\n  return {\n    isSupported(execAll) {\n      // Probing the GUC directly is unreliable — extension GUCs register only\n      // once the extension library has loaded into the session, so a fresh\n      // pooled connection reports NULL even on 0.8+. `extversion` is truth.\n      probe ??= (async () => {\n        try {\n          const [row] = await execAll<{ v: string | null }>(\n            sql`SELECT extversion AS v FROM pg_extension WHERE extname = 'vector'`,\n          );\n          if (typeof row?.v !== \"string\") return false;\n          const [major = 0, minor = 0] = row.v\n            .split(\".\")\n            .map((part) => Number.parseInt(part, 10));\n          const supported = major > 0 || (major === 0 && minor >= 8);\n          if (!supported) warnUnavailable(row.v);\n          return supported;\n        } catch {\n          return false;\n        }\n      })();\n      return probe;\n    },\n  };\n}\n\ntype CreatePostgresOperationBackendOptions = Readonly<{\n  db: AnyPgDatabase;\n  executionAdapter: PostgresExecutionAdapter;\n  atomicSqlProgramExecutor?: AtomicSqlProgramExecutor;\n  /**\n   * Adapter tuning (prepared-statement cache settings). Used to bind a\n   * fresh, equivalently-configured adapter to a transaction client when\n   * a per-search `efSearch` override opens its own transaction.\n   */\n  adapterOptions?: PostgresExecutionAdapterOptions | undefined;\n  operationStrategy: ReturnType<typeof createPostgresOperationStrategy>;\n  tableNames: ResolvedSqlTableNames;\n  capabilities: BackendCapabilities;\n  /**\n   * Active fulltext strategy (`tsvectorStrategy` unless overridden), or\n   * `undefined` when fulltext support is disabled (`fulltext: false`).\n   */\n  fulltextStrategy: FulltextStrategy | undefined;\n  /**\n   * Active vector strategy (`pgvectorStrategy` unless overridden), or\n   * `undefined` when vector support is disabled (`vector: false`).\n   */\n  vectorStrategy: VectorStrategy | undefined;\n  /**\n   * Shared durable-marker materializer. The vector methods assert a\n   * slot's marker (SELECT, never DDL) on the hot path and `createVectorIndex`\n   * ensures it (privileged) — replacing the old in-process ensure-latch.\n   * Shared across the outer backend and every transaction-scoped backend\n   * so a slot's marker is resolved at most once per process.\n   */\n  contributionMaterializer: ContributionMaterializer;\n  /**\n   * Shared pgvector iterative-scan probe (memoized version check + one-shot\n   * pre-0.8 warning). Owned by the top-level backend and reused by every\n   * transaction backend so the warning fires once per backend instance.\n   */\n  iterativeScanProbe: IterativeScanProbe;\n  schemaVersionsTable: PostgresTables[\"schemaVersions\"];\n  /**\n   * The factory's shared write-fence target. `lockSchemaVersionForWrite`\n   * resolves its plan instead of taking `FOR SHARE` unconditionally,\n   * so a managed write and the schema commit it fences against read the\n   * same decision.\n   */\n  fenceTarget: WriteFenceTarget;\n  /** Whether this operation backend is bound to an explicit transaction. */\n  transactionScoped: boolean;\n  /**\n   * The root backend's own `catalog` bag, threaded through so this call\n   * exposes the SAME object rather than building a second one from `db` /\n   * `executionAdapter` — see `EngineProvisioning.catalog`. Omitted on the\n   * transaction-scoped call, which has no root bag to share and instead\n   * builds its own probes bound to the transaction's own session.\n   */\n  catalog?: BackendCatalogProbes | undefined;\n  /**\n   * The root backend's own `lineage` bag, threaded through so a\n   * transaction-scoped call exposes the SAME object — see\n   * `EngineProvisioning.lineage`. Unlike `catalog`, there is nothing to\n   * rebuild when this is omitted: a profile-supplied `lineage` is a\n   * read-only bag of engine-wide queries bound to nothing session-specific,\n   * so a transaction-scoped call with no `lineage` passed through simply\n   * carries none, matching the root.\n   */\n  lineage?: LineageMembers | undefined;\n  /**\n   * The root backend's own `recordedTime` bag, threaded through so a\n   * transaction-scoped call exposes the SAME object — see\n   * `EngineProvisioning.recordedTime`. Like `lineage`, there is nothing to\n   * rebuild when this is omitted: a profile-supplied `recordedTime` is a\n   * read-only source function and revision-clock read bound to nothing\n   * session-specific, so a transaction-scoped call with no `recordedTime`\n   * passed through simply carries none, matching the root.\n   */\n  recordedTime?: EngineRecordedTimeMembers | undefined;\n}>;\n\ntype CreatePostgresTransactionBackendOptions = Readonly<{\n  db: AnyPgDatabase;\n  adapterOptions?: PostgresExecutionAdapterOptions;\n  operationStrategy: ReturnType<typeof createPostgresOperationStrategy>;\n  tableNames: ResolvedSqlTableNames;\n  capabilities: BackendCapabilities;\n  /** Active fulltext strategy. See {@link CreatePostgresOperationBackendOptions}. */\n  fulltextStrategy: FulltextStrategy | undefined;\n  /** Active vector strategy. See {@link CreatePostgresOperationBackendOptions}. */\n  vectorStrategy: VectorStrategy | undefined;\n  /** Shared durable-marker materializer. See {@link CreatePostgresOperationBackendOptions}. */\n  contributionMaterializer: ContributionMaterializer;\n  /** Shared iterative-scan probe. See {@link CreatePostgresOperationBackendOptions}. */\n  iterativeScanProbe: IterativeScanProbe;\n  schemaVersionsTable: PostgresTables[\"schemaVersions\"];\n  /** Shared write-fence target. See {@link CreatePostgresOperationBackendOptions}. */\n  fenceTarget: WriteFenceTarget;\n  /**\n   * Whether the transaction handle this call builds should carry\n   * `markFirstPartyFactory` — the caller's own resolved standing, never\n   * re-derived here. `false` on the `adoptTransaction` path regardless of\n   * the profile's own standing: an adopted transaction's lifetime is the\n   * caller's, not one TypeGraph has audited.\n   */\n  isFirstParty: boolean;\n  /** The root backend's own `lineage` bag. See {@link CreatePostgresOperationBackendOptions}. */\n  lineage?: LineageMembers | undefined;\n  /** The root backend's own `recordedTime` bag. See {@link CreatePostgresOperationBackendOptions}. */\n  recordedTime?: EngineRecordedTimeMembers | undefined;\n}>;\n\nfunction createPostgresOperationBackend(\n  options: CreatePostgresOperationBackendOptions,\n): InternalOperationBackend {\n  const {\n    db,\n    executionAdapter,\n    atomicSqlProgramExecutor,\n    adapterOptions,\n    operationStrategy,\n    tableNames,\n    capabilities,\n    fulltextStrategy,\n    vectorStrategy,\n    contributionMaterializer,\n    iterativeScanProbe,\n    schemaVersionsTable,\n    fenceTarget,\n    transactionScoped,\n    catalog,\n    lineage,\n    recordedTime,\n  } = options;\n  // Route through the execution adapter so driver-specific result shapes\n  // (`{rows}` for node-postgres / neon-serverless; bare array for\n  // postgres-js) are normalized in one place.\n  async function execAll<T>(query: ExecutableSql): Promise<readonly T[]> {\n    return executionAdapter.execute<T>(query);\n  }\n\n  async function execGet<T>(query: ExecutableSql): Promise<T | undefined> {\n    const rows = await executionAdapter.execute<T>(query);\n    return rows[0];\n  }\n\n  async function execRun(query: ExecutableSql): Promise<void> {\n    await executionAdapter.execute(query);\n  }\n\n  type VectorSearchRow = Readonly<{ node_id: string; score: number }>;\n\n  /** One transaction-local GUC override applied around a vector SELECT. */\n  type SearchGucOverride = Readonly<{ name: string; value: string }>;\n\n  // `hnsw.iterative_scan` exists on pgvector >= 0.8. The probe + \"warn once\"\n  // state lives on the top-level backend and is SHARED with every\n  // transaction-scoped operation backend (see `iterativeScanProbe` in the\n  // options), so a pre-0.8 server is probed and warned about once per backend\n  // instance — not once per `store.transaction()`.\n  function pgvectorIterativeScanSupported(): Promise<boolean> {\n    return iterativeScanProbe.isSupported(execAll);\n  }\n\n  /**\n   * The transaction-local GUC overrides for one vector search:\n   *\n   * - `hnsw.ef_search` when the caller supplied `efSearch` (validated\n   *   upstream; whether it may be applied at all — and under which parameter\n   *   name — is {@link resolveEfSearchOverride}, the predicate the SQLite\n   *   backend reads too, which refuses a non-HNSW slot and a transactionless\n   *   driver where `SET LOCAL` cannot be scoped).\n   * - `hnsw.iterative_scan = strict_order` on HNSW slots (pgvector >= 0.8):\n   *   the search SQL constrains results to live candidate nodes (and\n   *   optionally `minScore`), and a plain HNSW scan yields only `ef_search`\n   *   candidates BEFORE those filters — so a filter-heavy neighborhood can\n   *   under-fill top-k. The iterative scan keeps yielding until `LIMIT`\n   *   rows pass or it hits `hnsw.max_scan_tuples` — better recall, not a\n   *   full-page guarantee. `strict_order` preserves the distance ordering the\n   *   plan relies on (`relaxed_order` may emit slightly out of order beneath\n   *   our LIMIT). On pgvector < 0.8 the search stays `ef_search`-bounded and\n   *   the backend warns once (see `warnIterativeScanUnavailable`).\n   * - `ivfflat.iterative_scan = relaxed_order` on IVFFlat slots (same\n   *   pgvector floor): IVFFlat has no strict_order mode, so the strategy's\n   *   IVFFlat search SQL re-sorts the relaxed candidate set inside a\n   *   MATERIALIZED wrapper (see `buildSearch`) to restore exact ordering.\n   */\n  async function vectorSearchGucOverrides(\n    params: Pick<VectorSearchParams, \"efSearch\" | \"indexType\">,\n  ): Promise<readonly SearchGucOverride[]> {\n    const overrides: SearchGucOverride[] = [];\n    const efSearchParameter = resolveEfSearchOverride({\n      efSearch: params.efSearch,\n      indexType: params.indexType,\n      tuning: vectorSearchFrontierTuning(vectorStrategy),\n      interactiveTransactions: capabilities.execution.interactiveTransactions,\n      dialect: \"PostgreSQL\",\n      engine: vectorStrategy?.name ?? \"this backend\",\n    });\n    if (efSearchParameter !== undefined) {\n      overrides.push({\n        name: efSearchParameter,\n        value: String(params.efSearch),\n      });\n    }\n    if (\n      params.indexType === \"hnsw\" &&\n      capabilities.execution.interactiveTransactions &&\n      (await pgvectorIterativeScanSupported())\n    ) {\n      overrides.push({ name: \"hnsw.iterative_scan\", value: \"strict_order\" });\n    }\n    if (\n      params.indexType === \"ivfflat\" &&\n      capabilities.execution.interactiveTransactions &&\n      (await pgvectorIterativeScanSupported())\n    ) {\n      overrides.push({\n        name: \"ivfflat.iterative_scan\",\n        value: \"relaxed_order\",\n      });\n    }\n    return overrides;\n  }\n\n  /**\n   * Runs the vector SELECT, applying the given GUC overrides\n   * transaction-locally. `SET LOCAL` semantics (via\n   * `set_config(name, value, is_local => true)`, the parameterizable form)\n   * only take effect inside an explicit transaction — issued in autocommit\n   * they roll off with the statement and the next pooled query (notably\n   * under transaction-mode pgbouncer) sees the session default again. So\n   * with overrides present we bundle `BEGIN; SET …; SELECT …; COMMIT;`\n   * onto one connection. With none we take the unchanged single-statement\n   * fast path and open no transaction.\n   */\n  /**\n   * The `SET LOCAL`-scoped vector SELECT, run as one exclusive group on the\n   * transaction's connection. See {@link runVectorSearch}.\n   */\n  async function runVectorSearchGucGroup<Row>(\n    overrides: readonly SearchGucOverride[],\n    query: ExecutableSql,\n  ): Promise<readonly Row[]> {\n    const runExclusive = executionAdapter.runExclusive;\n    if (runExclusive === undefined) {\n      throw new CompilerInvariantError(\n        \"A transaction-scoped Postgres backend must expose runExclusive; \" +\n          \"its execution adapter was not wrapped by createSerialExecutionAdapter.\",\n      );\n    }\n    return runExclusive(async (connection) => {\n      const snapshots: SearchGucOverride[] = [];\n      for (const override of overrides) {\n        const [setting] = await connection.execute<{ v: string }>(\n          sql`SELECT current_setting(${override.name}) AS v`,\n        );\n        if (setting !== undefined) {\n          snapshots.push({ name: override.name, value: setting.v });\n        }\n        await connection.execute(\n          sql`SELECT set_config(${override.name}, ${override.value}, true)`,\n        );\n      }\n      const rows = await connection.execute<Row>(query);\n      // Restore only on success: a failed SELECT aborts the caller's\n      // transaction, so its rollback discards the overrides anyway and a\n      // restore here would just fail against the aborted tx, masking the\n      // real error.\n      for (const snapshot of snapshots) {\n        await connection.execute(\n          sql`SELECT set_config(${snapshot.name}, ${snapshot.value}, true)`,\n        );\n      }\n      return rows;\n    });\n  }\n\n  async function runVectorSearch<Row = VectorSearchRow>(\n    overrides: readonly SearchGucOverride[],\n    query: ExecutableSql,\n  ): Promise<readonly Row[]> {\n    if (overrides.length === 0) {\n      return execAll<Row>(query);\n    }\n    if (db instanceof PgTransaction) {\n      // Already inside the caller's transaction (low-level\n      // backend.transaction / adoptTransaction). `executionAdapter` is\n      // bound to this tx client, but SET LOCAL persists to the end of the\n      // caller's transaction — leaking the override into their later\n      // vector searches and breaking the per-search contract. Snapshot\n      // the current values, apply the overrides, then restore them once\n      // the SELECT has materialized so the overrides stay scoped to this\n      // one search.\n      //\n      // The four steps are ONE critical section, not four serialized\n      // statements. A transaction has a single GUC namespace, so two searches\n      // that merely take turns interleave as `A snapshot → B snapshot → A set\n      // → B set → A select` and `A` runs under `B`'s efSearch. `runExclusive`\n      // holds the connection for the whole group; it is always present on a\n      // transaction-scoped adapter (see `createTransactionBackend`).\n      return runVectorSearchGucGroup(overrides, query);\n    }\n    return db.transaction(async (tx) => {\n      // Bind an equivalently-configured adapter to the tx client so the\n      // SELECT keeps the driver result-shape normalization rather than a\n      // bespoke execute. A Drizzle transaction carries no `$client`, so this\n      // adapter routes through Drizzle's session (no server-side prepared\n      // statement) — correct either way, and the statements below are\n      // sequential, so they need no serializing wrapper.\n      const txAdapter = createPostgresExecutionAdapter(tx, adapterOptions);\n      for (const override of overrides) {\n        await txAdapter.execute(\n          sql`SELECT set_config(${override.name}, ${override.value}, true)`,\n        );\n      }\n      return txAdapter.execute<Row>(query);\n    });\n  }\n\n  const batchConfig = computePostgresBatchChunkSizes(\n    capabilities.maxBindParameters ?? POSTGRES_MAX_BIND_PARAMETERS,\n  );\n\n  const fulltextMembers =\n    fulltextStrategy === undefined ?\n      createFulltextMembers({ fulltextStrategy: undefined })\n    : createFulltextMembers({\n        fulltextStrategy,\n        strategy: operationStrategy,\n        execution: { execAll, execRun },\n        batchConfig,\n      });\n\n  const contributionOperationMembers = createContributionOperationMembers({\n    execRun,\n    operationStrategy,\n  });\n\n  /**\n   * The third consumer of the schema fence's `FOR SHARE`, and the\n   * writer-side half that managed entity inserts carry INSIDE their own\n   * statement rather than taking beforehand.\n   *\n   * `buildInsertNodeWithSchemaFence` (and its edge and projection siblings)\n   * fold the fence into the INSERT as a subquery that both ASSERTS the\n   * expected active version and locks the row it matched. Only the lock\n   * needs the engine's cooperation: with an empty clause the subquery still\n   * yields no row when the expected version is no longer active, so the\n   * INSERT still writes nothing — which is exactly the posture SQLite has\n   * always run in, where this clause is `sql.raw(\"\")`.\n   *\n   * So it resolves the SAME {@link resolveWriteFencePlan} the two fences\n   * above do — one `FOR UPDATE`/`FOR SHARE` contract, one decision, three\n   * consumers — but it is the ONE that may degrade, and the reason is\n   * structural: those two fence sequences that span statements, where\n   * dropping the lock opens a check-then-write window, while this predicate\n   * is evaluated INSIDE the INSERT that depends on it. One statement cannot\n   * race itself. With an\n   * empty clause the subquery still yields no row when the expected version\n   * is no longer active, so the INSERT still writes nothing — which is why\n   * SQLite has always run this path with `sql.raw(\"\")`.\n   *\n   * It reads the plan directly rather than calling `requireWriteFence`\n   * because it is a construction-time constant on a backend that may never\n   * open a schema-managed store at all; the refusal an `unfenced` backend\n   * earns is owed by the two fences above, at the moment such a store is\n   * actually built.\n   *\n   * `sql.raw(\"\")` and not `undefined`: `undefined` means \"this backend has\n   * no schema-fenced insert program at all\", which sends the Store down the\n   * unfused fallback path. The fused program is still correct here; it is\n   * the lock inside it that is not available.\n   *\n   * The resolved plan is also what gates whether `fenceTarget.fenceSql` is\n   * threaded into `fusion` below (which is what lets the fused\n   * `lockSchemaVersionAndGraphWrite` command build at all): this factory\n   * keeps carrying `fenceSql` regardless of what the declared write fence\n   * resolves to, so gating fusion on `fenceSql`'s mere presence rather than\n   * on this SAME plan would let a resolved `caller-serialized`/`unfenced`\n   * backend still take the advisory lock the declaration says it does not\n   * need — the one decision this module makes, read twice, must read the\n   * same answer both times.\n   */\n  const schemaFenceFusionPlan = resolveWriteFencePlan(fenceTarget);\n  const schemaFenceInsertLockClause: SQL =\n    schemaFenceFusionPlan.kind === \"lock\" ?\n      sql.raw(\"FOR SHARE\")\n    : sql.raw(\"\");\n\n  const commonOperationMembers = createCommonOperationBackend(\n    buildCommonOperationOptions({\n      batchConfig,\n      commandSession: transactionScoped ? \"transaction\" : \"root\",\n      execution: {\n        compile: executionAdapter.compile,\n        execAll,\n        execGet,\n        execRun,\n      },\n      atomicSqlProgramExecutor,\n      nowIso,\n      maxBindParameters:\n        capabilities.maxBindParameters ?? POSTGRES_MAX_BIND_PARAMETERS,\n      operationStrategy,\n      rowMappers: {\n        toEdgeRow,\n        toNodeRow,\n        toSchemaVersionRow,\n        toUniqueRow,\n      },\n      schemaFenceLockClause: schemaFenceInsertLockClause,\n      contributionMaterializer,\n      fusion: {\n        atomicProgramsAtTransactionScope: true,\n        nodeProjectionInsertFusion: true,\n        dynamicEdgeConvergence: true,\n        ...(schemaFenceFusionPlan.kind === \"lock\" &&\n        fenceTarget.fenceSql !== undefined ?\n          { fenceSql: fenceTarget.fenceSql }\n        : {}),\n        async beforeNodeProjectionInsert(params, plan): Promise<void> {\n          const vectorSlots = vectorSlotsFromManagedNodeCreatePlan(\n            params,\n            plan,\n          );\n          await contributionMaterializer.assertNodeInsertProjections(\n            params.graphId,\n            {\n              fulltext: plan.projections.some(\n                (projection) => projection.kind === \"fulltext\",\n              ),\n              vectorSlots,\n            },\n          );\n        },\n        async refuseNodeProjectionError(params, plan, error): Promise<never> {\n          const embeddingProjections = plan.projections.filter(\n            (projection) => projection.kind === \"embedding\",\n          );\n          const dimensionProjection =\n            embeddingProjections.find(\n              (projection) =>\n                projection.embedding.length !== projection.dimensions,\n            ) ??\n            (embeddingProjections.length === 1 ?\n              embeddingProjections[0]\n            : undefined);\n          if (dimensionProjection !== undefined) {\n            const mapped = mapVectorWriteError(error, {\n              nodeKind: params.kind,\n              fieldPath: dimensionProjection.fieldPath,\n            });\n            if (mapped !== error) throw mapped;\n          }\n          return contributionMaterializer.refuseUnavailableNodeInsertProjections(\n            params.graphId,\n            {\n              fulltext: plan.projections.some(\n                (projection) => projection.kind === \"fulltext\",\n              ),\n              vectorSlots: vectorSlotsFromManagedNodeCreatePlan(params, plan),\n            },\n            error,\n          );\n        },\n        ...(transactionScoped ?\n          {\n            schemaGraphWriteLockNamespace:\n              RECORDED_GRAPH_WRITE_ADVISORY_LOCK_NAMESPACE,\n            edgeCardinalityInsertFusion: true,\n            nodeClaimInsertFusion: true,\n          }\n        : {}),\n        tableExistenceCache: { cacheExisting: false },\n      },\n    }),\n  );\n\n  const executeCompiled = executionAdapter.executeCompiled;\n  const executeRawMethod: Pick<TransactionBackend, \"executeRaw\"> =\n    executeCompiled === undefined ?\n      {}\n    : {\n        async executeRaw<T>(\n          sqlText: string,\n          params: readonly unknown[],\n        ): Promise<readonly T[]> {\n          return executeCompiled<T>({ params, sql: sqlText });\n        },\n      };\n\n  // Embedding write/search/index methods are present only when a vector\n  // strategy is wired. With `vector: false` (e.g. PGlite without pgvector)\n  // they are omitted, so `capabilities.vector` is absent and the store never\n  // routes embedding work here — mirroring a SQLite connection without\n  // sqlite-vec. Shared verbatim with the SQLite backend via\n  // `createVectorMembers`; the two genuine per-engine differences (the\n  // GUC-wrapped, ceiling-validated search override and the serial-fallback\n  // index build) are threaded through as `applySearchOverrides` and\n  // `runIndexBuild`.\n  const vectorMembers =\n    vectorStrategy === undefined ?\n      createVectorMembers({ vectorStrategy: undefined })\n    : createVectorMembers({\n        vectorStrategy,\n        execution: { execRun },\n        batchConfig,\n        tableNames,\n        contributionMaterializer,\n        operationStrategy,\n        async applySearchOverrides(query, params) {\n          // Validate `efSearch` against pgvector's `hnsw.ef_search` ceiling\n          // before `runVectorSearch` applies it via `set_config`.\n          assertPgvectorEfSearch(params.efSearch);\n          const gucOverrides = await vectorSearchGucOverrides(params);\n          return runVectorSearch(gucOverrides, query);\n        },\n        async runIndexBuild({ slot, indexStatement }) {\n          // Honor the `concurrent` flag materializeIndexes passes on Postgres\n          // so the ANN build doesn't take a write-blocking lock on a live\n          // table. execRun is autocommit, which CONCURRENTLY requires.\n          // Built-in pgvector HNSW/IVFFlat builds stage the build graph in\n          // dynamic shared memory, and resource-constrained hosts reject the\n          // allocation (SQLSTATE class 53 — e.g. containers with the 64MB\n          // /dev/shm default fail a 50k x 384-dim HNSW build with 53100\n          // from dsm_impl_posix). Retry serially: drop the INVALID\n          // leftover the failed CONCURRENTLY build leaves behind (its\n          // IF NOT EXISTS would otherwise mask the retry), pin the\n          // strategy table to parallel_workers = 0 (maintenance builds\n          // take min(storage parameter, max_parallel_maintenance_workers)),\n          // rebuild in local memory, and restore the setting.\n          const strategyTableName = vectorStrategy.tableName(\n            slot.graphId,\n            slot.nodeKind,\n            slot.fieldPath,\n          );\n          await runPostgresVectorIndexBuild(\n            vectorStrategy,\n            execRun,\n            strategyTableName,\n            indexStatement,\n            vectorStrategy.buildDropIndex?.(slot),\n          );\n        },\n      });\n\n  // `hybridSearch` is the one embedding-adjacent member NOT shared with\n  // SQLite (it composes the vector leg with `operationStrategy`'s\n  // single-statement hybrid SQL, which is dialect-owned) — kept inline,\n  // gated the same way `vectorEmbeddingMethods` always has been. It also\n  // needs an active fulltext strategy for its fulltext leg, so it is\n  // additionally gated on `fulltextStrategy` — a fulltext-off backend\n  // falls back to the store's multi-statement RRF path just like a\n  // vector-off one already does.\n  const vectorEmbeddingMethods =\n    vectorStrategy === undefined || fulltextStrategy === undefined ?\n      {}\n    : {\n        // Single-statement hybrid needs ROW_NUMBER(); a capability\n        // profile that disables window functions keeps the store's\n        // multi-statement fallback by simply not exposing the member.\n        ...(capabilities.windowFunctions ?\n          {\n            async hybridSearch(\n              params: HybridSearchParams,\n            ): Promise<readonly HybridSearchRow[]> {\n              assertVectorSearchLimit(params.limit);\n              // Source depths get the same boundary validation the fallback\n              // path applies (vectorSearch validates its limit; the fulltext\n              // depth is validated inside buildFulltextSearch).\n              assertVectorSearchLimit(params.vector.k);\n              assertPgvectorEfSearch(params.vector.efSearch);\n              const slot = vectorSlotFromParams({\n                graphId: params.graphId,\n                nodeKind: params.nodeKind,\n                fieldPath: params.vector.fieldPath,\n                dimensions: params.vector.dimensions,\n                metric: params.vector.metric,\n                indexType: params.vector.indexType,\n              });\n              // Read-only, not marker-gated — see\n              // `createVectorMembers`'s vectorSearch\n              // (engine/members/vector-members.ts) for why.\n              const candidates =\n                params.candidates ??\n                buildLiveNodeCandidates(\n                  tableNames.nodes,\n                  params.graphId,\n                  params.nodeKind,\n                  nowIso(),\n                );\n              const vectorParams: VectorSearchParams = {\n                graphId: params.graphId,\n                nodeKind: params.nodeKind,\n                fieldPath: params.vector.fieldPath,\n                queryEmbedding: params.vector.queryEmbedding,\n                metric: params.vector.metric,\n                dimensions: params.vector.dimensions,\n                indexType: params.vector.indexType,\n                limit: params.vector.k,\n                ...(params.vector.minScore === undefined ?\n                  {}\n                : { minScore: params.vector.minScore }),\n              };\n              // The vector leg references the statement's shared\n              // tg_hybrid_cand CTE; the actual candidates SQL is emitted\n              // once by buildHybridSearch.\n              const vectorSql = vectorStrategy.buildSearch(\n                slot,\n                vectorParams,\n                portableSql.raw(\"SELECT node_id FROM tg_hybrid_cand\"),\n              );\n              const statement = operationStrategy.buildHybridSearch(\n                { ...params, candidates },\n                toDrizzleSql(vectorSql, \"postgres\"),\n                params.vector.metric === \"cosine\",\n              );\n              const gucOverrides = await vectorSearchGucOverrides({\n                indexType: params.vector.indexType,\n                ...(params.vector.efSearch === undefined ?\n                  {}\n                : { efSearch: params.vector.efSearch }),\n              });\n              let raw: readonly Record<string, unknown>[];\n              try {\n                raw = await runVectorSearch<Record<string, unknown>>(\n                  gucOverrides,\n                  statement,\n                );\n              } catch (error) {\n                throw mapVectorWriteError(error, vectorParams);\n              }\n              return raw.map((row) => mapHybridSearchRow(row, toNodeRow));\n            },\n          }\n        : {}),\n      };\n\n  /**\n   * The managed writer's side of the schema fence: takes the\n   * transaction-scoped share lock on the graph's active schema row,\n   * returning the version it locked — or `undefined` when the statement found\n   * no active row to lock, which at `read committed` does not by itself mean the\n   * graph has no active version — see the fence that calls this.\n   *\n   * Resolves the SAME {@link resolveWriteFencePlan} the schema-commit fence\n   * does, and refuses\n   * with it: the two halves of one `FOR UPDATE`/`FOR SHARE` contract must\n   * never disagree about whether the engine honors row locks.\n   *\n   * The `FOR SHARE` is not merely a WAIT. This transaction HOLDS it for its\n   * remainder, which is what makes the version it just asserted binding\n   * through to the writes that follow — a concurrent schema commit's\n   * `FOR UPDATE` blocks on it and cannot deactivate the row underneath\n   * an in-flight write. Reading the version without the lock would still\n   * ASSERT it, and then let the very flip the assertion was checking for\n   * land before the write. That is a check-then-write race, not a degraded\n   * fence, so `unfenced` is refused here.\n   *\n   * `engine-serialized` skips the clause instead, and correctly: SQLite's\n   * `lockSchemaVersionForWrite` already runs exactly this way, on the\n   * strength of the writer slot no concurrent commit can hold.\n   *\n   * Under `mechanism: \"row\"` the schema-versions row itself carries no\n   * clause — there is no portable `FOR SHARE` to embed — so this instead\n   * takes the SAME fence row `acquireSchemaWriteFence` takes on the commit\n   * side, as its own statement, before the plain read below. That gives a\n   * concurrent commit and a concurrent write the row to contend on, which is\n   * what makes the version this read observes binding through to the writes\n   * that follow, exactly as holding `FOR SHARE` does under `lock`.\n   */\n  async function lockActiveSchemaVersion(\n    graphId: string,\n  ): Promise<number | undefined> {\n    const plan = requireWriteFence(\n      resolveWriteFencePlan(fenceTarget),\n      \"The PostgreSQL schema write fence\",\n      \"keyed\",\n    );\n    if (plan.kind === \"row\") {\n      await execRun(\n        toDrizzleSql(\n          plan.sql.acquireKeyed(SCHEMA_COMMIT_FENCE_NAMESPACE, graphId),\n          \"postgres\",\n        ),\n      );\n    }\n    const shareLock = plan.kind === \"lock\" ? sql`FOR SHARE` : sql``;\n    const active = await execGet<{ version: number }>(sql`\n      SELECT ${schemaVersionsTable.version} AS version\n      FROM ${schemaVersionsTable}\n      WHERE ${schemaVersionsTable.graphId} = ${graphId}\n        AND ${schemaVersionsTable.isActive} = TRUE\n      ${shareLock}\n    `);\n    return active?.version;\n  }\n\n  /**\n   * The write-fence half of a managed write on PostgreSQL: locks the active\n   * schema row (or refuses, per the resolved fence plan) and asserts the\n   * version it holds. An empty locked read is not evidence of an absent\n   * active version — see `lockActiveSchemaVersion`'s own comment — so the\n   * settled-version read below is a fresh, unlocked read naming the version\n   * honestly rather than a retry of the locked one.\n   */\n  async function lockSchemaVersionForWrite(\n    params: LockSchemaVersionForWriteParams,\n  ): Promise<void> {\n    if (!transactionScoped) {\n      throw new ConfigurationError(\n        \"The schema write fence requires an explicit PostgreSQL transaction.\",\n        {\n          code: \"SCHEMA_WRITE_FENCE_TRANSACTION_REQUIRED\",\n          graphId: params.graphId,\n        },\n      );\n    }\n    const locked = await lockActiveSchemaVersion(params.graphId);\n    if (locked !== undefined) {\n      assertActiveSchemaVersion(params.graphId, params.expectedVersion, locked);\n      return;\n    }\n\n    // An empty locked read is not evidence of an absent active version. At\n    // `read committed`, a `FOR SHARE` read that blocks behind an in-flight\n    // schema commit rechecks only the row versions its own statement snapshot\n    // saw: once that commit lands, the row this statement waited on no longer\n    // satisfies `is_active = TRUE`, and the winner's freshly inserted active\n    // row was never in the snapshot to be substituted in.\n    //\n    // Either way this transaction holds no share lock on an active row, so the\n    // write is rejected. That is why the version reported below needs no lock\n    // of its own — and why the fence must NOT retry the locked read: the\n    // dropped row keeps the share lock the first read took on it, so a second\n    // `FOR SHARE` waits on the row the *next* schema commit has already taken\n    // `FOR UPDATE` while that commit waits on the dropped row in its\n    // deactivate-all. PostgreSQL breaks the cycle by killing one of the two,\n    // and the schema commit — waiting first, so timing out first — is the one\n    // that dies.\n    //\n    // A non-locking read names the version honestly: a schema commit's\n    // deactivate-then-insert pair is atomic, so no committed state has zero\n    // active rows for a graph that has one, and an ordinary read never waits\n    // and so has no recheck to be fooled by. It yields `0` only for a graph\n    // that genuinely has no active version. A rollback landing back on\n    // `expectedVersion` reports `expected === actual`; the rejection stands,\n    // because nothing is holding the fence.\n    const settled = await commonOperationMembers.getActiveSchema(\n      params.graphId,\n    );\n    throw new StaleVersionError({\n      graphId: params.graphId,\n      expected: params.expectedVersion,\n      actual: settled?.version ?? 0,\n    });\n  }\n\n  const operations = createEngineOperationBackend({\n    commonOperationMembers,\n    contributionOperationMembers,\n    vectorMembers,\n    fulltextMembers,\n    rawSqlMembers: {\n      ...executeRawMethod,\n      async execute<T>(query: CompiledRowsSql): Promise<readonly T[]> {\n        // Statements the compiler branded as containing an ANN index scan\n        // (inline `approximate: true`) get the same pgvector GUC wrapping\n        // the search facade applies — most importantly\n        // `hnsw.iterative_scan = strict_order`, without which a filtered\n        // approximate query starves at the default ef_search frontier.\n        // On pgvector < 0.8 the override list is empty and this falls\n        // through to the plain fast path.\n        const annTypes =\n          isSqlFragment(query) ? annIndexScanTypes(query) : undefined;\n        if (annTypes !== undefined && vectorStrategy !== undefined) {\n          const overrides: SearchGucOverride[] = [];\n          for (const indexType of annTypes) {\n            if (indexType !== \"hnsw\" && indexType !== \"ivfflat\") continue;\n            overrides.push(...(await vectorSearchGucOverrides({ indexType })));\n          }\n          return runVectorSearch<T>(overrides, query);\n        }\n        return executionAdapter.execute<T>(query);\n      },\n    },\n    lockSchemaVersionForWrite,\n    compile: executionAdapter.compile,\n    capabilities,\n    fulltextStrategy,\n    ...(vectorStrategy === undefined ? {} : { vectorStrategy }),\n    dialect: \"postgres\",\n    tableNames,\n    ...(fenceTarget.fenceSql === undefined ?\n      {}\n    : { fenceSql: fenceTarget.fenceSql }),\n  });\n\n  // `hybridSearch` is not part of the shared assembly — see\n  // `vectorEmbeddingMethods`'s own comment above. `catalog` is the root's\n  // own bag when the caller supplied one (`options.catalog`, threaded\n  // through from `EngineProvisioning.catalog` — the SAME object exposed as\n  // `backend.catalog`, built once); when absent — the transaction-scoped\n  // call, which shares no bag of its own — this builds a fresh one bound to\n  // THIS call's own `db`/`executionAdapter` (the pinned transaction client),\n  // so every catalog probe on a transaction-scoped backend runs on the\n  // transaction's own session. `lineage` and `recordedTime`, unlike\n  // `catalog`, have no transaction-scoped fallback to build: each is simply\n  // carried through (`options.lineage`/`options.recordedTime`, the SAME\n  // objects exposed as `backend.lineage`/`backend.recordedTime`) so a\n  // profile-supplied capability reaches a `transaction()` handle exactly as\n  // `catalog` does, and stays absent when the profile declares none.\n  return {\n    ...operations,\n    ...(transactionScoped ? {\n      async upsertHeterogeneousNodes(\n        params: HeterogeneousNodeUpsertParams,\n      ) {\n        if (params.entries.length === 0) return [];\n        const timestamp = nowIso();\n        const storedLowerBound = resolveStampedValidityLowerBound(\n          undefined,\n          undefined,\n          timestamp,\n        );\n        const inputRows = sql.join(\n          params.entries.map((entry, index) =>\n            sql`(${params.schemaFence.graphId}, ${entry.kind}, ${entry.id}, ${JSON.stringify(entry.props)}, ${JSON.stringify(entry.updateProps)}, ${index})`,\n          ),\n          sql`, `,\n        );\n        const nodes = sql.identifier(tableNames.nodes);\n        const schemaVersions = sql.identifier(\n          requireDefined(tableNames.schemaVersions),\n        );\n        const query = sql`\n          WITH \"schema_fence\" AS (\n            SELECT 1 FROM ${schemaVersions}\n            WHERE graph_id = ${params.schemaFence.graphId}\n              AND version = ${params.schemaFence.expectedVersion}\n              AND is_active = TRUE\n            FOR SHARE\n          ), \"input_rows\" (graph_id, kind, id, create_props, update_props, ord) AS (\n            VALUES ${inputRows}\n          ), \"upserted\" AS (\n            INSERT INTO ${nodes} AS \"target\"\n              (graph_id, kind, id, props, version, valid_from, valid_to, created_at, updated_at)\n            SELECT graph_id, kind, id, create_props::jsonb, 1, ${storedLowerBound}, NULL, ${timestamp}, ${timestamp}\n            FROM \"input_rows\" CROSS JOIN \"schema_fence\"\n            ON CONFLICT (graph_id, kind, id) DO UPDATE SET\n              props = CASE\n                WHEN \"target\".deleted_at IS NULL THEN \"target\".props || (\n                  SELECT update_props::jsonb FROM \"input_rows\"\n                  WHERE graph_id = \"target\".graph_id\n                    AND kind = \"target\".kind\n                    AND id = \"target\".id\n                )\n                ELSE EXCLUDED.props\n              END,\n              version = \"target\".version + 1,\n              valid_from = CASE WHEN \"target\".deleted_at IS NULL THEN \"target\".valid_from ELSE EXCLUDED.valid_from END,\n              valid_to = CASE WHEN \"target\".deleted_at IS NULL THEN \"target\".valid_to ELSE EXCLUDED.valid_to END,\n              deleted_at = NULL,\n              updated_at = EXCLUDED.updated_at\n            RETURNING *\n          )\n          SELECT \"upserted\".* FROM \"upserted\"\n          JOIN \"input_rows\" USING (graph_id, kind, id)\n          ORDER BY \"input_rows\".ord\n        `;\n        const rows = await execAll<Record<string, unknown>>(query);\n        return rows.map((row) => toNodeRow(row));\n      },\n    } : {}),\n    ...vectorEmbeddingMethods,\n    catalog:\n      catalog ??\n      createPostgresCatalogProbes(\n        db,\n        executionAdapter,\n        operationStrategy,\n        transactionScoped,\n      ),\n    ...(lineage === undefined ? {} : { lineage }),\n    ...(recordedTime === undefined ? {} : { recordedTime }),\n  };\n}\n\n/**\n * A transaction-scoped backend plus the hook that shuts its statement queue\n * at the transaction boundary. See {@link SerialExecutionAdapter.drainAndClose}.\n */\ntype BoundTransactionBackend = Readonly<{\n  backend: InternalOperationBackend;\n  drainAndClose: () => Promise<void>;\n}>;\n\nfunction resolvedSetOnlyEdgeMutationProgram(\n  executor: AtomicEdgeMutationProgramExecutor,\n): AtomicEdgeMutationProgramExecutor {\n  function execute(\n    input: AtomicEdgeResolvedMutationSetInput,\n  ): Promise<AtomicEdgeResolvedMutationSetResult>;\n  function execute(\n    input: AtomicEdgeConvergenceInput,\n  ): Promise<readonly AtomicEdgeConvergenceResult[]>;\n  function execute(\n    input: AtomicEdgeResolvedMutationSetInput | AtomicEdgeConvergenceInput,\n  ):\n    | Promise<AtomicEdgeResolvedMutationSetResult>\n    | Promise<readonly AtomicEdgeConvergenceResult[]> {\n    if (input.kind === \"resolved-set\") return executor(input);\n    return Promise.reject<readonly AtomicEdgeConvergenceResult[]>(\n      new CompilerInvariantError(\n        \"A transaction-session edge mutation profile received durable convergence outside its declared envelope.\",\n      ),\n    );\n  }\n\n  return Object.assign(execute, {\n    maxEntries: Object.freeze({\n      resolvedSet: executor.maxEntries.resolvedSet,\n      durableConvergence: 0,\n    }),\n  });\n}\n\nfunction createTransactionBackend(\n  options: CreatePostgresTransactionBackendOptions,\n): BoundTransactionBackend {\n  // Every statement this backend issues rides one pinned connection, which\n  // can carry exactly one query at a time. Serialize them here rather than\n  // relying on the driver's own queue: node-postgres deprecated\n  // `client.query()` on a busy client in 8.22 and removes the queue in pg@9.\n  // The wrap is unconditional because the overlap is created inside TypeGraph\n  // (the node write pipeline syncs embeddings and fulltext concurrently), not\n  // only by user code.\n  const operationExecutionAdapter = createPostgresExecutionAdapter(\n    options.db,\n    options.adapterOptions,\n  );\n  const compiledExecutionAdapter = createPostgresExecutionAdapter(options.db, {\n    ...options.adapterOptions,\n    useTransactionClient: true,\n  });\n  const executeCompiled = compiledExecutionAdapter.executeCompiled;\n  // Preserve the established Drizzle-routed execution surface for ordinary\n  // transaction work. Only a closed atomic program needs the pinned client's\n  // compiled-text seam; changing every statement to that seam would also\n  // bypass driver logging and other Drizzle session behavior merely because\n  // this transaction can execute programs.\n  const txExecutionAdapter = createSerialExecutionAdapter(\n    operationExecutionAdapter,\n  );\n  const runExclusive = txExecutionAdapter.runExclusive;\n  const sessionAtomicBatchAdapter =\n    executeCompiled === undefined ? undefined : (\n      createSessionAtomicBatchAdapter({ executeCompiled, runExclusive })\n    );\n  const sessionAtomicSqlProgramExecutor =\n    sessionAtomicBatchAdapter === undefined ? undefined : (\n      createAtomicSqlProgramExecutor(sessionAtomicBatchAdapter)\n    );\n  const sessionCapabilities = scopeAtomicBatchToSession(\n    options.capabilities,\n    sessionAtomicSqlProgramExecutor !== undefined,\n  );\n\n  // The transaction-scoped backend shares the outer backend's\n  // contribution materializer: the per-field vector table is provisioned\n  // (DDL) only by the privileged outer backend, so a tx-scoped vector op\n  // only ASSERTS the durable marker (SELECT, never DDL) and can't poison\n  // anything on rollback. The shared per-instance cache means a slot\n  // confirmed once stays a pure `Set.has` inside every later transaction.\n  const txOperationBackend = createPostgresOperationBackend({\n    db: options.db,\n    executionAdapter: txExecutionAdapter,\n    ...(sessionAtomicSqlProgramExecutor === undefined ?\n      {}\n    : { atomicSqlProgramExecutor: sessionAtomicSqlProgramExecutor }),\n    adapterOptions: options.adapterOptions,\n    operationStrategy: options.operationStrategy,\n    tableNames: options.tableNames,\n    capabilities: sessionCapabilities,\n    fulltextStrategy: options.fulltextStrategy,\n    vectorStrategy: options.vectorStrategy,\n    contributionMaterializer: options.contributionMaterializer,\n    // The probe is process-wide truth, so the outer instance's is reused\n    // rather than a fresh one per transaction.\n    iterativeScanProbe: options.iterativeScanProbe,\n    schemaVersionsTable: options.schemaVersionsTable,\n    fenceTarget: options.fenceTarget,\n    transactionScoped: true,\n    lineage: options.lineage,\n    recordedTime: options.recordedTime,\n  });\n  const backend =\n    options.isFirstParty ?\n      markFirstPartyFactory(txOperationBackend)\n    : txOperationBackend;\n\n  if (sessionAtomicBatchAdapter !== undefined) {\n    registerAtomicSqlProgram(backend, sessionAtomicBatchAdapter);\n    const mutateEdges = requireDefined(\n      backend.executeAtomicEdgeMutationProgram,\n    );\n    registerAtomicMutationPrograms(backend, {\n      mutateNodes: requireDefined(backend.executeAtomicNodeResolvedMutationSet),\n      mutateEdges: resolvedSetOnlyEdgeMutationProgram(mutateEdges),\n      replaceNodes: requireDefined(backend.executeAtomicNodeReplacementBatch),\n    });\n  }\n\n  return { backend, drainAndClose: txExecutionAdapter.drainAndClose };\n}\n\n// Re-export schema utilities\nexport type { PostgresTableNames, PostgresTables } from \"./schema/postgres\";\nexport { createPostgresTables, tables } from \"./schema/postgres\";\n","/**\n * Structural identity checks for @libsql/client.\n *\n * This module intentionally has no @libsql/client import: the Drizzle\n * adapter is bundled for runtimes where that optional peer is not installed.\n */\n\nexport type LibsqlClient = Readonly<{\n  protocol: string;\n  execute: (...args: readonly unknown[]) => Promise<unknown>;\n  batch: (...args: readonly unknown[]) => Promise<readonly unknown[]>;\n  executeMultiple: (...args: readonly unknown[]) => Promise<unknown>;\n}>;\n\n/** The one owner of the positive libSQL client-shape decision. */\nexport function isLibsqlClient(client: unknown): client is LibsqlClient {\n  if (typeof client !== \"object\" || client === null) return false;\n  const candidate = client as Readonly<Record<string, unknown>>;\n  return (\n    typeof candidate[\"protocol\"] === \"string\" &&\n    typeof candidate[\"execute\"] === \"function\" &&\n    typeof candidate[\"batch\"] === \"function\" &&\n    typeof candidate[\"executeMultiple\"] === \"function\"\n  );\n}\n\n/** Whether a positively identified libSQL client is backed by one local file. */\nexport function isLocalLibsqlClient(client: unknown): boolean {\n  return isLibsqlClient(client) && client.protocol === \"file\";\n}\n","import { type SQL as DrizzleSql, sql } from \"drizzle-orm\";\nimport { type BaseSQLiteDatabase } from \"drizzle-orm/sqlite-core\";\n\nimport { CompilerInvariantError, ConfigurationError } from \"../../../errors\";\nimport { isSqlFragment } from \"../../../query/sql-fragment\";\nimport {\n  D1_MAX_BIND_PARAMETERS,\n  DURABLE_OBJECT_MAX_BIND_PARAMETERS,\n  MODERN_SQLITE_MAX_BIND_PARAMETERS,\n  SQLITE_MAX_BIND_PARAMETERS,\n} from \"../../types\";\nimport { isLibsqlClient, type LibsqlClient } from \"../libsql-client\";\nimport { getOrCreateLru } from \"./lru\";\nimport {\n  type CompiledSqlQuery,\n  compileQueryWithDialect,\n  type ExecutableSql,\n  type PreparedSqlStatement,\n  type SqlExecutionAdapter,\n  toDrizzleSql,\n} from \"./types\";\n\nconst DEFAULT_PREPARED_STATEMENT_CACHE_MAX = 256;\n\nexport const ORDERED_AGGREGATE_PROBE_SQL =\n  \"SELECT json_group_array(value ORDER BY value) FROM (SELECT 1 AS value)\";\n\ntype PreparedAllStatement = Readonly<{\n  all: (...params: readonly unknown[]) => readonly unknown[];\n  /**\n   * Executes a statement that returns no rows. better-sqlite3 and\n   * bun:sqlite both expose it; better-sqlite3 additionally REQUIRES it for\n   * non-reader statements (`all()` on those throws).\n   */\n  run?: (...params: readonly unknown[]) => unknown;\n  /**\n   * better-sqlite3's \"does this statement return rows\" flag. bun:sqlite\n   * has no equivalent; `undefined` is treated as non-reader on the run\n   * path (bun's `run()` accepts any statement).\n   */\n  reader?: boolean;\n}>;\n\ntype SqliteClientWithPrepare = Readonly<{\n  prepare: (sqlText: string) => PreparedAllStatement;\n}>;\n\ntype SqliteClientCarrier = Readonly<{ $client?: unknown }>;\n\ntype D1PreparedStatement = Readonly<{\n  bind: (...params: readonly unknown[]) => D1PreparedStatement;\n}>;\n\ntype D1Client = Readonly<{\n  prepare: (sqlText: string) => D1PreparedStatement;\n  batch: (\n    statements: readonly D1PreparedStatement[],\n  ) => Promise<readonly unknown[]>;\n}>;\n\ntype DurableObjectSqlApi = Readonly<{\n  exec: (...args: readonly unknown[]) => unknown;\n}>;\n\n/**\n * Runtime shape of the Durable Object storage client exposed as\n * `drizzle(ctx.storage).$client`. Structural because Drizzle does not export\n * this client type and constructor names are not stable under bundling.\n */\nexport type DurableObjectStorageClient = Readonly<{\n  sql: DurableObjectSqlApi;\n  transaction: <Result>(run: () => Promise<Result>) => Promise<Result>;\n  transactionSync: <Result>(run: () => Result) => Result;\n}>;\n\ntype SqliteHostedPlatform = \"d1\" | \"durable-object\";\n\ntype SessionLike = Readonly<{\n  constructor?: Readonly<{\n    name?: string;\n  }>;\n}>;\n\ntype DatabaseWithSession = Readonly<{\n  _?: Readonly<{\n    session?: SessionLike;\n  }>;\n  session?: SessionLike;\n}>;\n\n/**\n * Controls how the backend manages SQLite transactions.\n *\n * - `\"sql\"`:     TypeGraph issues BEGIN / COMMIT / ROLLBACK SQL directly on\n *                the connection. Default for sync drivers (better-sqlite3,\n *                bun:sqlite); also selected by `createLibsqlBackend` for\n *                local `@libsql/client` connections (`file:` / `:memory:`),\n *                whose `client.transaction()` permanently abandons the\n *                current connection — fatal for an in-memory database.\n * - `\"drizzle\"`: Delegates to Drizzle's `db.transaction()` method.\n *                Default for async drivers (remote libsql/Turso, sql.js).\n * - `\"do-sqlite\"`: Delegates to the Cloudflare Durable Objects async\n *                storage transaction runner (`db.$client.transaction`,\n *                i.e. `ctx.storage.transaction(async ...)`). Drizzle's\n *                own `db.transaction()` on DO is\n *                `ctx.storage.transactionSync` and cannot span `await`,\n *                so it is deliberately not used. Auto-detected for\n *                `drizzle(ctx.storage)` (#140).\n * - `\"none\"`:    Transactions disabled. Default for Cloudflare D1\n *                (`D1Database.batch` is transactional but not an\n *                interactive runner — tracked separately).\n */\nexport type SqliteTransactionMode = \"sql\" | \"drizzle\" | \"none\" | \"do-sqlite\";\n\nexport type SqliteExecutionProfileHints = Readonly<{\n  isSync?: boolean;\n  transactionMode?: SqliteTransactionMode;\n}>;\n\ntype SqliteExecutionAdapterOptions = Readonly<{\n  profileHints?: SqliteExecutionProfileHints;\n  statementCacheMax?: number;\n}>;\n\nexport type AnySqliteDatabase = BaseSQLiteDatabase<\"sync\" | \"async\", unknown>;\n\nexport type SqliteExecutionProfile = Readonly<{\n  /** Hosted runtime detected independently of caller-supplied hints. */\n  hostedPlatform?: SqliteHostedPlatform;\n  /** Platform ceiling that capability overrides may lower but never raise. */\n  hardMaxBindParameters?: number;\n  isSync: boolean;\n  /**\n   * Detected per-statement bound-parameter ceiling for this connection:\n   * Cloudflare's documented D1 / Durable Objects cap, the probed\n   * `SQLITE_MAX_VARIABLE_NUMBER` on synchronous drivers, or the conservative\n   * 999 floor when the limit cannot be probed (async/remote drivers).\n   */\n  maxBindParameters: number;\n  /** Whether this connection accepts ORDER BY within aggregate calls. */\n  orderedAggregates: boolean;\n  supportsCompiledExecution: boolean;\n  transactionMode: SqliteTransactionMode;\n}>;\n\nexport type SqliteExecutionAdapter = Readonly<\n  SqlExecutionAdapter & {\n    clearStatementCache: () => void;\n    profile: SqliteExecutionProfile;\n    /**\n     * Executes a compiled statement that returns no rows through the\n     * prepared-statement cache. Present only on synchronous drivers with a\n     * preparable client — the CRUD write path falls back to drizzle's\n     * `db.run()` when absent.\n     */\n    executeCompiledRun?: (compiledQuery: CompiledSqlQuery) => Promise<void>;\n    /** Rebinds one cached non-reader statement for every parameter row. */\n    executePreparedRunBatch?: (\n      sqlText: string,\n      params: readonly (readonly unknown[])[],\n    ) => Promise<void>;\n  }\n>;\n\nfunction isD1Client(client: unknown): client is D1Client {\n  if (typeof client !== \"object\" || client === null) return false;\n  const candidate = client as Readonly<Record<string, unknown>>;\n  return (\n    typeof candidate[\"prepare\"] === \"function\" &&\n    typeof candidate[\"batch\"] === \"function\"\n  );\n}\n\nfunction rowsFromBatchResult(result: unknown): readonly unknown[] {\n  if (typeof result !== \"object\" || result === null) {\n    throw new CompilerInvariantError(\n      \"SQLite atomic batch returned a malformed result slot.\",\n      { resultType: typeof result },\n    );\n  }\n  const candidate = result as Readonly<Record<string, unknown>>;\n  if (Array.isArray(candidate[\"results\"])) return candidate[\"results\"];\n  if (Array.isArray(candidate[\"rows\"])) return candidate[\"rows\"];\n  throw new CompilerInvariantError(\n    \"SQLite atomic batch returned a result slot without rows.\",\n    { keys: Object.keys(candidate) },\n  );\n}\n\nfunction assertBatchStatementWithinBindLimit(\n  statement: CompiledSqlQuery,\n  maxBindParameters: number,\n): void {\n  if (statement.params.length <= maxBindParameters) return;\n  throw new ConfigurationError(\n    `SQLite statement uses ${statement.params.length} bound parameters, exceeding ` +\n      `this backend's limit of ${maxBindParameters}.`,\n    {\n      capability: \"maxBindParameters\",\n      maxBindParameters,\n      parameterCount: statement.params.length,\n    },\n    {\n      suggestion:\n        \"Split the operation into smaller batches or lower the batch size before retrying.\",\n    },\n  );\n}\n\ntype SqliteAtomicBatchClient =\n  | Readonly<{ kind: \"d1\"; client: D1Client }>\n  | Readonly<{ kind: \"libsql\"; client: LibsqlClient }>;\n\nfunction resolveAtomicBatchClient(\n  db: AnySqliteDatabase,\n  hostedPlatform: SqliteHostedPlatform | undefined,\n): SqliteAtomicBatchClient | undefined {\n  const client = (db as SqliteClientCarrier).$client;\n  if (hostedPlatform === \"d1\" && isD1Client(client)) {\n    return { kind: \"d1\", client };\n  }\n  if (isLibsqlClient(client)) return { kind: \"libsql\", client };\n  return undefined;\n}\n\nfunction getSessionName(db: AnySqliteDatabase): string | undefined {\n  const databaseWithSession = db as DatabaseWithSession;\n  const primarySessionName = databaseWithSession.session?.constructor?.name;\n  if (primarySessionName !== undefined) {\n    return primarySessionName;\n  }\n\n  return databaseWithSession._?.session?.constructor?.name;\n}\n\nfunction isD1DatabaseBySessionName(db: AnySqliteDatabase): boolean {\n  return getSessionName(db) === \"SQLiteD1Session\";\n}\n\nfunction isDurableObjectBySessionName(db: AnySqliteDatabase): boolean {\n  const sessionName = getSessionName(db);\n  // drizzle-orm/durable-sqlite's session class is `SQLiteDOSession`\n  // (verified drizzle 0.45.x). `SQLiteDurableObjectSession` is kept as\n  // a defensive alias against future drizzle renames.\n  return (\n    sessionName === \"SQLiteDOSession\" ||\n    sessionName === \"SQLiteDurableObjectSession\"\n  );\n}\n\nfunction isDurableObjectStorageClient(\n  value: unknown,\n): value is DurableObjectStorageClient {\n  if (typeof value !== \"object\" || value === null) return false;\n  const candidate = value as Record<string, unknown>;\n  const sqlApi = candidate[\"sql\"];\n  return (\n    typeof candidate[\"transaction\"] === \"function\" &&\n    typeof candidate[\"transactionSync\"] === \"function\" &&\n    typeof sqlApi === \"object\" &&\n    sqlApi !== null &&\n    typeof (sqlApi as Record<string, unknown>)[\"exec\"] === \"function\"\n  );\n}\n\n/**\n * Returns the real Durable Object storage client when the Drizzle connection\n * exposes its distinctive async + sync transaction runners and SQL API.\n * Requiring the full shape avoids mistaking better-sqlite3's transaction\n * wrapper factory for the Durable Object async runner.\n */\nexport function getDurableObjectStorageClient(\n  db: AnySqliteDatabase,\n): DurableObjectStorageClient | undefined {\n  const client = (db as SqliteClientCarrier).$client;\n  return isDurableObjectStorageClient(client) ? client : undefined;\n}\n\nfunction detectHostedPlatform(\n  db: AnySqliteDatabase,\n): SqliteHostedPlatform | undefined {\n  if (\n    getDurableObjectStorageClient(db) !== undefined ||\n    isDurableObjectBySessionName(db)\n  ) {\n    return \"durable-object\";\n  }\n  if (isD1DatabaseBySessionName(db)) return \"d1\";\n  return undefined;\n}\n\nfunction isSyncDatabaseBySessionName(db: AnySqliteDatabase): boolean {\n  const sessionName = getSessionName(db);\n  return (\n    sessionName === \"BetterSQLiteSession\" || sessionName === \"BunSQLiteSession\"\n  );\n}\n\nfunction detectSyncProfile(\n  db: AnySqliteDatabase,\n  profileHints: SqliteExecutionProfileHints,\n  hostedPlatform: SqliteHostedPlatform | undefined,\n): boolean {\n  if (hostedPlatform === \"durable-object\") return true;\n  if (hostedPlatform === \"d1\") return false;\n  if (profileHints.isSync !== undefined) {\n    return profileHints.isSync;\n  }\n\n  const sessionName = getSessionName(db);\n  if (\n    sessionName === \"BetterSQLiteSession\" ||\n    sessionName === \"BunSQLiteSession\"\n  ) {\n    return true;\n  }\n\n  try {\n    const probeResult = db.get(sql`SELECT 1 AS __typegraph_sync_probe__`);\n    return !(probeResult instanceof Promise);\n  } catch {\n    return isSyncDatabaseBySessionName(db);\n  }\n}\n\nfunction detectTransactionMode(\n  profileHints: SqliteExecutionProfileHints,\n  isSync: boolean,\n  hostedPlatform: SqliteHostedPlatform | undefined,\n): SqliteTransactionMode {\n  // Hosted platform identity is authoritative. A stale hint must not disable\n  // Durable Object rollback or opt D1 into unsupported interactive writes.\n  if (hostedPlatform === \"durable-object\") return \"do-sqlite\";\n  if (hostedPlatform === \"d1\") return \"none\";\n  if (profileHints.transactionMode !== undefined) {\n    return profileHints.transactionMode;\n  }\n  // Neither D1 nor Durable Object SQLite supports raw BEGIN/COMMIT SQL\n  // through Drizzle's db.run(), and Drizzle's own db.transaction() on\n  // Durable Objects is `ctx.storage.transactionSync` (cannot span an\n  // await). Durable Objects expose an async storage transaction runner\n  // (`ctx.storage.transaction(async ...)`, surfaced by Drizzle as\n  // `db.$client.transaction`) — route those through \"do-sqlite\" (#140).\n  // D1 has no equivalent interactive runner (only batch); it stays\n  // \"none\" pending a separate batch-mode investigation.\n  if (isSync) return \"sql\";\n  return \"drizzle\";\n}\n\n// SQLITE_MAX_VARIABLE_NUMBER's compiled-in default rose from 999 to 32,766\n// in SQLite 3.32.0. Builds that override the default list it in\n// `PRAGMA compile_options`; builds that keep it do not, so the version\n// decides the fallback.\nconst MAX_VARIABLE_NUMBER_COMPILE_OPTION = /^MAX_VARIABLE_NUMBER=(\\d+)$/;\nconst FIRST_MODERN_BIND_LIMIT_MAJOR = 3;\nconst FIRST_MODERN_BIND_LIMIT_MINOR = 32;\n\nfunction parseCompiledMaxVariableNumber(\n  rows: readonly unknown[],\n): number | undefined {\n  for (const row of rows) {\n    if (typeof row !== \"object\" || row === null) continue;\n    const option = (row as Record<string, unknown>)[\"compile_options\"];\n    if (typeof option !== \"string\") continue;\n    const match = MAX_VARIABLE_NUMBER_COMPILE_OPTION.exec(option);\n    if (match !== null) return Number(match[1]);\n  }\n  return undefined;\n}\n\nfunction hasModernBindLimitByVersion(rows: readonly unknown[]): boolean {\n  const first = rows[0];\n  if (typeof first !== \"object\" || first === null) return false;\n  const version = (first as Record<string, unknown>)[\"version\"];\n  if (typeof version !== \"string\") return false;\n  const [major = 0, minor = 0] = version.split(\".\").map(Number);\n  if (!Number.isFinite(major) || !Number.isFinite(minor)) return false;\n  return (\n    major > FIRST_MODERN_BIND_LIMIT_MAJOR ||\n    (major === FIRST_MODERN_BIND_LIMIT_MAJOR &&\n      minor >= FIRST_MODERN_BIND_LIMIT_MINOR)\n  );\n}\n\n/**\n * Resolves the connection's per-statement bound-parameter ceiling. Batch\n * chunk math derives from this value, so too high breaks batched writes at\n * runtime and too low wastes round trips (999 vs 32,766 is ~33× more\n * chunks per bulk insert).\n */\nfunction detectHardMaxBindParameters(\n  transactionMode: SqliteTransactionMode,\n  hostedPlatform: SqliteHostedPlatform | undefined,\n): number | undefined {\n  if (hostedPlatform === \"durable-object\" || transactionMode === \"do-sqlite\") {\n    return DURABLE_OBJECT_MAX_BIND_PARAMETERS;\n  }\n  if (hostedPlatform === \"d1\") return D1_MAX_BIND_PARAMETERS;\n  return undefined;\n}\n\nfunction detectMaxBindParameters(\n  sqliteClient: SqliteClientWithPrepare | undefined,\n  hardMaxBindParameters: number | undefined,\n): number {\n  if (hardMaxBindParameters !== undefined) return hardMaxBindParameters;\n  if (sqliteClient === undefined) return SQLITE_MAX_BIND_PARAMETERS;\n  try {\n    const compiled = parseCompiledMaxVariableNumber(\n      sqliteClient.prepare(\"PRAGMA compile_options\").all(),\n    );\n    if (compiled !== undefined) return compiled;\n    const isModern = hasModernBindLimitByVersion(\n      sqliteClient.prepare(\"SELECT sqlite_version() AS version\").all(),\n    );\n    return isModern ?\n        MODERN_SQLITE_MAX_BIND_PARAMETERS\n      : SQLITE_MAX_BIND_PARAMETERS;\n  } catch {\n    // A client that can't answer the probes keeps the conservative floor.\n    return SQLITE_MAX_BIND_PARAMETERS;\n  }\n}\n\n/**\n * The single spelling of \"this object prepares statements\": returns it as a\n * property bag when it does, `undefined` otherwise. Every driver predicate\n * below and {@link resolveSqliteClient} read it, so \"prepare-capable\" cannot\n * drift between the execution path and the serialized-resource marking.\n */\nfunction preparingClient(\n  client: unknown,\n): Readonly<Record<string, unknown>> | undefined {\n  if (typeof client !== \"object\" || client === null) return undefined;\n  const candidate = client as Readonly<Record<string, unknown>>;\n  return typeof candidate[\"prepare\"] === \"function\" ? candidate : undefined;\n}\n\n/** Whether every named member of `client` is a function. */\nfunction hasMethods(\n  client: Readonly<Record<string, unknown>>,\n  methods: readonly string[],\n): boolean {\n  return methods.every((method) => typeof client[method] === \"function\");\n}\n\n/**\n * Whether a driver client is better-sqlite3's `Database`.\n *\n * `pragma` is the discriminator: better-sqlite3 exposes it as a method, and\n * none of the other prepare-capable SQLite clients (bun:sqlite, sql.js,\n * node:sqlite) has any counterpart. Duck-typed rather than `instanceof`, so\n * the native addon is never imported by this bundler-friendly module.\n */\nexport function isBetterSqlite3Client(client: unknown): boolean {\n  const candidate = preparingClient(client);\n  return candidate !== undefined && hasMethods(candidate, [\"pragma\"]);\n}\n\n/**\n * Whether a driver client is a `bun:sqlite` `Database` — what\n * `drizzle-orm/bun-sqlite` exposes as `$client`.\n *\n * ONE synchronous connection: every statement from every wrapper over it runs\n * on it, in order, exactly like better-sqlite3.\n *\n * Structural, never the session's constructor name (which bundlers rename):\n * verified against `bun-types` 1.3.x `bun:sqlite`, a `Database` carries\n * `query` (the cached-statement factory better-sqlite3 does not have),\n * `prepare`, `run`/`exec`, `serialize`, and a `filename` string — where\n * better-sqlite3 names that property `name` and sql.js has neither. The\n * combination is not satisfied by any other client this package can meet.\n */\nexport function isBunSqliteClient(client: unknown): boolean {\n  const candidate = preparingClient(client);\n  return (\n    candidate !== undefined &&\n    hasMethods(candidate, [\"query\", \"run\", \"exec\", \"serialize\"]) &&\n    typeof candidate[\"filename\"] === \"string\"\n  );\n}\n\n/**\n * Whether a driver client is a `sql.js` `Database` — what\n * `drizzle-orm/sql-js` takes as its client.\n *\n * ONE in-WASM database handle, executed synchronously in-process, so two\n * wrappers over it serialize exactly as two wrappers over one better-sqlite3\n * handle do.\n *\n * Structural evidence (verified against `@types/sql.js` 1.4.x): `export`\n * (dump the database to bytes) and `getRowsModified` are sql.js's own API and\n * exist on no other SQLite client — better-sqlite3 and bun:sqlite spell the\n * dump `serialize` and have no rows-modified method at all — alongside the\n * `prepare`/`exec`/`run` trio every driver has.\n */\nexport function isSqlJsClient(client: unknown): boolean {\n  const candidate = preparingClient(client);\n  return (\n    candidate !== undefined &&\n    hasMethods(candidate, [\"exec\", \"run\", \"export\", \"getRowsModified\"])\n  );\n}\n\n/**\n * Returns the driver client a Drizzle SQLite database prepares statements on\n * for TypeGraph's COMPILED execution path, or `undefined` when it has none it\n * can drive.\n *\n * sql.js is excluded deliberately: its `prepare` returns a sql.js `Statement`\n * (`bind`/`step`/`getAsObject`/`free`) with no `all()`, so the compiled path's\n * `prepared.all(...params)` would throw on the first statement. Drizzle's own\n * sql-js session drives that statement shape correctly, so an excluded client\n * falls back to the Drizzle path and works instead of failing — the abstention\n * is what makes the advertised sql.js support real. Every other\n * prepare-capable client returns statements with `all()` (better-sqlite3,\n * bun:sqlite).\n */\nfunction resolveSqliteClient(\n  db: AnySqliteDatabase,\n): SqliteClientWithPrepare | undefined {\n  const sqliteClient = (db as SqliteClientCarrier).$client;\n  if (preparingClient(sqliteClient) === undefined) return;\n  if (isSqlJsClient(sqliteClient)) return;\n  return sqliteClient as SqliteClientWithPrepare;\n}\n\nfunction getOrCreatePreparedStatement(\n  cache: Map<string, PreparedAllStatement>,\n  sqliteClient: SqliteClientWithPrepare,\n  sqlText: string,\n  cacheMax: number,\n): PreparedAllStatement {\n  return getOrCreateLru(cache, sqlText, cacheMax, () =>\n    sqliteClient.prepare(sqlText),\n  );\n}\n\nfunction detectOrderedAggregates(\n  sqliteClient: SqliteClientWithPrepare | undefined,\n): boolean {\n  if (sqliteClient === undefined) return false;\n  try {\n    sqliteClient.prepare(ORDERED_AGGREGATE_PROBE_SQL);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n// Uses unconditional `await` because Drizzle returns SQLiteRaw thenables\n// that fail `instanceof Promise` checks (drizzle-team/drizzle-orm#2275).\nasync function executeDrizzleQuery<TRow>(\n  db: AnySqliteDatabase,\n  query: DrizzleSql,\n): Promise<readonly TRow[]> {\n  return await db.all(query);\n}\n\nfunction createPreparedStatementExecutor(\n  sqliteClient: SqliteClientWithPrepare,\n  cache: Map<string, PreparedAllStatement>,\n  sqlText: string,\n  cacheMax: number,\n): PreparedSqlStatement {\n  return {\n    execute<TRow>(params: readonly unknown[]): Promise<readonly TRow[]> {\n      const preparedStatement = getOrCreatePreparedStatement(\n        cache,\n        sqliteClient,\n        sqlText,\n        cacheMax,\n      );\n      const rows = preparedStatement.all(...params);\n      return Promise.resolve(rows as readonly TRow[]);\n    },\n  };\n}\n\nexport function createSqliteExecutionAdapter(\n  db: AnySqliteDatabase,\n  statementCacheMaxOrOptions: number | SqliteExecutionAdapterOptions = {},\n): SqliteExecutionAdapter {\n  const options: SqliteExecutionAdapterOptions =\n    typeof statementCacheMaxOrOptions === \"number\" ?\n      { statementCacheMax: statementCacheMaxOrOptions }\n    : statementCacheMaxOrOptions;\n  const statementCacheMax =\n    options.statementCacheMax ?? DEFAULT_PREPARED_STATEMENT_CACHE_MAX;\n  const profileHints = options.profileHints ?? {};\n\n  const hostedPlatform = detectHostedPlatform(db);\n  const isSync = detectSyncProfile(db, profileHints, hostedPlatform);\n  const sqliteClient = isSync ? resolveSqliteClient(db) : undefined;\n  const transactionMode = detectTransactionMode(\n    profileHints,\n    isSync,\n    hostedPlatform,\n  );\n  const hardMaxBindParameters = detectHardMaxBindParameters(\n    transactionMode,\n    hostedPlatform,\n  );\n  const maxBindParameters = detectMaxBindParameters(\n    sqliteClient,\n    hardMaxBindParameters,\n  );\n  const orderedAggregates = detectOrderedAggregates(sqliteClient);\n  const atomicBatchClient = resolveAtomicBatchClient(db, hostedPlatform);\n\n  const profile: SqliteExecutionProfile = {\n    ...(hostedPlatform === undefined ? {} : { hostedPlatform }),\n    ...(hardMaxBindParameters === undefined ? {} : { hardMaxBindParameters }),\n    isSync,\n    maxBindParameters,\n    orderedAggregates,\n    supportsCompiledExecution: sqliteClient !== undefined,\n    transactionMode,\n  };\n\n  const compile = (query: ExecutableSql): CompiledSqlQuery =>\n    compileQueryWithDialect(db, query, \"SQLite\");\n\n  const executeAtomicBatch =\n    atomicBatchClient === undefined ? undefined : (\n      async function executeSqliteAtomicBatch<TRow>(\n        statements: readonly CompiledSqlQuery[],\n      ): Promise<readonly (readonly TRow[])[]> {\n        for (const statement of statements) {\n          assertBatchStatementWithinBindLimit(statement, maxBindParameters);\n        }\n        if (statements.length === 0) return [];\n\n        const results =\n          atomicBatchClient.kind === \"d1\" ?\n            await atomicBatchClient.client.batch(\n              statements.map((statement) =>\n                atomicBatchClient.client\n                  .prepare(statement.sql)\n                  .bind(...statement.params),\n              ),\n            )\n          : await atomicBatchClient.client.batch(\n              statements.map((statement) => ({\n                sql: statement.sql,\n                args: [...statement.params],\n              })),\n            );\n        return results.map(\n          (result) => rowsFromBatchResult(result) as readonly TRow[],\n        );\n      }\n    );\n\n  if (sqliteClient !== undefined) {\n    const client = sqliteClient;\n    const statementCache = new Map<string, PreparedAllStatement>();\n\n    function executeCompiled<TRow>(\n      compiledQuery: CompiledSqlQuery,\n    ): Promise<readonly TRow[]> {\n      const preparedStatement = getOrCreatePreparedStatement(\n        statementCache,\n        client,\n        compiledQuery.sql,\n        statementCacheMax,\n      );\n      const rows = preparedStatement.all(...compiledQuery.params);\n      return Promise.resolve(rows as readonly TRow[]);\n    }\n\n    function executeCompiledRun(\n      compiledQuery: CompiledSqlQuery,\n    ): Promise<void> {\n      const preparedStatement = getOrCreatePreparedStatement(\n        statementCache,\n        client,\n        compiledQuery.sql,\n        statementCacheMax,\n      );\n      // better-sqlite3 rejects run() on reader statements and all() on\n      // non-reader statements, so pick by the statement's own flag; a\n      // client without run() (or without the reader flag but returning\n      // rows) drains through all() and discards.\n      if (\n        preparedStatement.run === undefined ||\n        preparedStatement.reader === true\n      ) {\n        preparedStatement.all(...compiledQuery.params);\n      } else {\n        preparedStatement.run(...compiledQuery.params);\n      }\n      return Promise.resolve();\n    }\n\n    function executePreparedRunBatch(\n      sqlText: string,\n      parameterRows: readonly (readonly unknown[])[],\n    ): Promise<void> {\n      const preparedStatement = getOrCreatePreparedStatement(\n        statementCache,\n        client,\n        sqlText,\n        statementCacheMax,\n      );\n      if (preparedStatement.run === undefined) {\n        throw new Error(\n          \"Trusted SQLite import requires a prepared statement run() method.\",\n        );\n      }\n      for (const params of parameterRows) {\n        preparedStatement.run(...params);\n      }\n      return Promise.resolve();\n    }\n\n    return {\n      clearStatementCache() {\n        statementCache.clear();\n      },\n      compile,\n      execute<TRow>(query: ExecutableSql): Promise<readonly TRow[]> {\n        const compiledQuery = compile(query);\n        return executeCompiled<TRow>(compiledQuery);\n      },\n      executeCompiled,\n      executeCompiledRun,\n      executePreparedRunBatch,\n      ...(executeAtomicBatch === undefined ? {} : { executeAtomicBatch }),\n      prepare(sqlText: string): PreparedSqlStatement {\n        return createPreparedStatementExecutor(\n          client,\n          statementCache,\n          sqlText,\n          statementCacheMax,\n        );\n      },\n      profile,\n    };\n  }\n\n  return {\n    clearStatementCache() {\n      // No-op: no statement cache in async/D1 mode\n    },\n    compile,\n    execute<TRow>(query: ExecutableSql): Promise<readonly TRow[]> {\n      return executeDrizzleQuery<TRow>(\n        db,\n        isSqlFragment(query) ? toDrizzleSql(query, \"sqlite\") : query,\n      );\n    },\n    ...(executeAtomicBatch === undefined ? {} : { executeAtomicBatch }),\n    profile,\n  };\n}\n","/**\n * SQLite engine profile for TypeGraph.\n *\n * `createSqliteBackend` builds a `SqlEngineProfile`\n * (`buildSqliteEngineProfile`) and hands it to `createSqlBackend`\n * (`./engine`), which assembles the mirrored member groups — fulltext,\n * vector, contribution, identity, graph-template, base-schema,\n * index-materialization, kind-removal, schema-version — that this file\n * shares with `postgres.ts` through `./engine/members/*.ts`. What stays\n * here is the SQLite-owned island `createSqlBackend` cannot share: the\n * execution adapter and its per-driver transaction-mode detection, the\n * per-connection write fence (SQLite has no per-graph lock to take),\n * transaction framing across all four transaction modes\n * (`EngineLateMembers.transactions` / `fence` / `rawSql` / `maintenance` /\n * `trustedImport` / `extensions`), the DDL provisioning `EngineProvisioning`\n * wires through, the dialect's own operation-backend construction (deferred,\n * via `assembleEngine`'s `buildOperations`, until the contribution\n * materializer exists), `hybridSearch` (an embedding-adjacent member kept\n * inline on both dialects rather than part of the shared assembly), and\n * the per-backend serialized execution queue that orders top-level\n * operations against SQLite's single-writer constraint.\n *\n * Works with any Drizzle SQLite database instance:\n * - better-sqlite3\n * - libsql / Turso\n * - Cloudflare D1\n * - bun:sqlite\n * - sql.js\n *\n * @example\n * ```typescript\n * import { drizzle } from \"drizzle-orm/better-sqlite3\";\n * import Database from \"better-sqlite3\";\n * import { createSqliteBackend, tables } from \"@nicia-ai/typegraph/adapters/drizzle/sqlite\";\n *\n * const sqlite = new Database(\"app.db\");\n * const db = drizzle(sqlite);\n * const backend = createSqliteBackend(db, { tables });\n * ```\n */\nimport {\n  and,\n  eq,\n  getTableName,\n  inArray,\n  isNull,\n  lte,\n  type SQL,\n  sql,\n} from \"drizzle-orm\";\nimport { BaseSQLiteDatabase, SQLiteTransaction } from \"drizzle-orm/sqlite-core\";\n\nimport { CompilerInvariantError, ConfigurationError, SchemaFenceTimeoutError } from \"../../errors\";\nimport {\n  sinceIndexAdoptionDdl,\n} from \"../../indexes/system\";\nimport { sqlValueList } from \"../../query/compiler/predicate-utils\";\nimport type { ResolvedSqlTableNames } from \"../../query/compiler/schema\";\nimport {\n  fts5Strategy,\n  type FulltextStrategy,\n} from \"../../query/dialect/fulltext-strategy\";\nimport {\n  assertVectorSearchLimit,\n  resolveEfSearchOverride,\n  vectorSearchFrontierTuning,\n  type VectorSlot,\n  type VectorStrategy,\n} from \"../../query/dialect/vector-strategy\";\nimport { isSqlFragment, sql as portableSql } from \"../../query/sql-fragment\";\nimport {\n  asCompiledRowsSql,\n  type CompiledRowsSql,\n} from \"../../query/sql-intent\";\nimport { requireDefined } from \"../../utils/presence\";\nimport {\n  isMissingTableError,\n  isSqliteDuplicateEdgeMatchIdentityColumnError,\n  isSqliteNotAuthorizedError,\n  isSqliteWriterSlotBusy,\n} from \"../../utils/sql-errors\";\nimport {\n  type AtomicSqlProgramExecutor,\n  createAtomicSqlProgramExecutor,\n} from \"../capabilities/atomic-sql-program\";\nimport {\n  batchRefusalDetails,\n  batchRefusalSuffix,\n  resolveBatchWriteVerdict,\n} from \"../capabilities/batch-write-verdict\";\nimport {\n  assertNoLegacyTransactionCapability,\n  sealCapabilityDeclaration,\n} from \"../capabilities/declarations\";\nimport { downgradeAtomicBatch } from \"../capabilities/execution\";\nimport { markSchemaFencedInsertEligibleUnderFence } from \"../capabilities/schema-fenced-insert\";\nimport {\n  markFirstPartyFactory,\n  registerFirstPartyProfile,\n  requireWriteFence,\n  resolveWriteFencePlan,\n  type WriteFenceTarget,\n} from \"../capabilities/write-fence\";\nimport { FIND_EDGES_ENDPOINT_FIXED_PARAM_COUNT } from \"../edge-endpoint-sets\";\nimport { buildLiveNodeCandidates } from \"../live-node-candidates\";\nimport {\n  createSerializedExecutionQueue,\n  runWithSerializedQueue,\n  type SerializedExecutionQueue,\n} from \"../serialized-execution-queue\";\nimport { engineSerializedWriterSlotStatement } from \"../sqlite-writer-slot\";\nimport {\n  type AdapterBackend,\n  type AdoptedSchemaWriteTransaction,\n  type BackendCapabilities,\n  type BackendCatalogProbes,\n  type BundledBackendCapabilityOverrides,\n  type CatalogColumn,\n  type EngineRecordedTimeMembers,\n  type GraphAnalyticsCapabilities,\n  type GraphBackend,\n  type HybridSearchParams,\n  type HybridSearchRow,\n  type IndexState,\n  INTERNAL_TEMPORARY_WRITES,\n  type InternalTransactionOptions,\n  type LineageMembers,\n  type LockSchemaVersionForWriteParams,\n  type NormalizedColumnKind,\n  normalizeGraphAnalyticsCapabilities,\n  type RecordKindRemovalParams,\n  type SchemaProvisioning,\n  type SchemaWriteTransactionBackend,\n  SQLITE_CAPABILITIES,\n  SQLITE_MAX_BIND_PARAMETERS,\n  type TableState,\n  type TransactionBackend,\n  type TrustedImportOptions,\n  type TrustedImportSession,\n  type VectorSearchParams,\n} from \"../types\";\nimport {\n  type AnySqliteDatabase,\n  createSqliteExecutionAdapter,\n  getDurableObjectStorageClient,\n  isBetterSqlite3Client,\n  isBunSqliteClient,\n  isSqlJsClient,\n  type SqliteExecutionAdapter,\n  type SqliteExecutionProfile,\n  type SqliteExecutionProfileHints,\n} from \"./execution/sqlite-execution\";\nimport { type ExecutableSql, toDrizzleSql } from \"./execution/types\";\nimport {\n  copyGraphTemplateContributionMarkersStatement,\n  sqliteInstantiateGraphTemplateStatement,\n} from \"./graph-template-sql\";\nimport { isLocalLibsqlClient } from \"./libsql-client\";\nimport {\n  EMBEDDING_UPSERT_PARAM_COUNT,\n  mapVectorWriteError,\n  vectorSlotFromParams,\n} from \"./vector-runtime\";\nexport type { SqliteTransactionMode } from \"./execution/sqlite-execution\";\nimport {\n  createEdgeRowMapper,\n  createNodeRowMapper,\n  createSchemaVersionRowMapper,\n  createUniqueRowMapper,\n  nowIso,\n  SQLITE_ROW_MAPPER_CONFIG,\n} from \"../row-mappers\";\nimport {\n  resolveDeclaredBackendResource,\n  type SerializedResourceDeclaration,\n} from \"../transaction-resource\";\nimport {\n  buildContributionInsertValues,\n  buildContributionOnConflictSet,\n  type ContributionMaterializer,\n  ensureAdoptedVectorSlots,\n  gateFulltext,\n  SQLITE_CONTRIBUTION_MAT_TIMESTAMPS,\n} from \"./contribution-materializations\";\nimport {\n  generateSqliteCreateIndexSQL,\n  generateSqliteCreateTableSQL,\n  generateSqliteDDL,\n  planSqliteEdgeMatchIdentityAdoption,\n  sqliteContributions,\n} from \"./ddl\";\nimport {\n  type BaseSchemaRuntime,\n  type ContributionRuntime,\n  createSqlBackend,\n  type EngineProvisioning,\n  type GraphTemplateRuntime,\n  type IdentityRuntime,\n  type IndexMaterializationRuntime,\n  type KindRemovalRuntime,\n  type SqlEngineProfile,\n} from \"./engine\";\nimport { assembleEngine } from \"./engine/assembly\";\nimport { createContributionOperationMembers } from \"./engine/members/contribution-members\";\nimport { createFulltextMembers } from \"./engine/members/fulltext-members\";\nimport { createVectorMembers } from \"./engine/members/vector-members\";\nimport {\n  buildCommonOperationOptions,\n  createEngineOperationBackend,\n} from \"./engine/operation-layer\";\nimport {\n  type EngineAssemblyContext,\n  type EngineLateMembers,\n  type EngineOperationsContext,\n  resolveSchemaProvisioning,\n} from \"./engine/profile\";\nimport {\n  buildMaterializationInsertValues,\n  buildMaterializationOnConflictSet,\n  SQLITE_INDEX_MAT_TIMESTAMPS,\n} from \"./index-materializations\";\nimport {\n  buildKindRemovalInsertValues,\n  buildKindRemovalOnConflictSet,\n  SQLITE_KIND_REMOVAL_TIMESTAMPS,\n} from \"./kind-removals\";\nimport {\n  assertActiveSchemaVersion,\n  assertAdoptedDialect,\n  createCommonOperationBackend,\n  type InternalOperationBackend,\n} from \"./operation-backend-core\";\nimport { mapHybridSearchRow } from \"./operations/hybrid\";\nimport {\n  createSqliteOperationStrategy,\n  tableExistsFromRow,\n} from \"./operations/strategy\";\nimport {\n  createSqliteTables as buildSqliteTables,\n  type SqliteTables,\n  tables as defaultTables,\n} from \"./schema/sqlite\";\nimport {\n  analyzeImportedTables,\n  assertTrustedImportDatabaseEmpty,\n  createSqliteTrustedImportSession,\n  restoreSecondaryIndexes,\n  suspendSqliteSecondaryIndexes,\n} from \"./trusted-import\";\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Options for creating a SQLite backend.\n */\nexport type SqliteBackendOptions = Readonly<{\n  /** Opt in to transactional DDL in a caller-owned schema transaction. */\n  schemaProvisioning?: SchemaProvisioning;\n  /**\n   * Custom table definitions. Use createSqliteTables() to customize table names.\n   * Defaults to standard TypeGraph table names.\n   */\n  tables?: SqliteTables;\n  /**\n   * Optional execution profile hints used to avoid runtime driver reflection.\n   * Set `transactionMode: \"none\"` for drivers without transactions (e.g.\n   * Cloudflare D1). Durable Objects (`drizzle(ctx.storage)`) auto-detect\n   * `transactionMode: \"do-sqlite\"` and do not need a hint. Hosted platform\n   * identity is authoritative when it conflicts with a stale hint.\n   */\n  executionProfile?: SqliteExecutionProfileHints;\n  /**\n   * Fulltext strategy override. Defaults to `fts5Strategy` (SQLite's\n   * built-in FTS5 virtual table). Most users should leave this alone.\n   *\n   * Pass `false` to disable fulltext support entirely. The backend then\n   * advertises no `capabilities.fulltext` and omits the fulltext CRUD/\n   * search methods, mirroring `vector` left unset. A fulltext predicate, a\n   * `searchable()` field, `store.search.fulltext`, and hybrid search all\n   * refuse with a typed error instead of running SQL against a table\n   * this backend never creates. Required for a SQLite build without\n   * FTS5 compiled in.\n   */\n  fulltext?: FulltextStrategy | false;\n  /**\n   * Vector strategy override. When present, the backend owns per-`(kind,\n   * field)` typed storage through this strategy (DDL, upsert, delete,\n   * similarity search, ANN index lifecycle) and advertises\n   * `strategy.capabilities` as `capabilities.vector`. `createLibsqlBackend`\n   * passes `libsqlVectorStrategy` unconditionally; `createLocalSqliteBackend`\n   * passes `sqliteVecStrategy` when the extension loads. When absent the\n   * backend exposes no vector capability and embedding values pass through\n   * writes without being indexed — matching existing behavior for SQLite\n   * connections without a vector extension.\n   */\n  vector?: VectorStrategy;\n  /**\n   * Override specific backend capabilities. Useful for custom SQLite builds\n   * or tests that need to simulate an engine-level capability gap. Overrides\n   * may lower, but cannot raise, a hosted platform's hard parameter ceiling.\n   */\n  capabilities?: BundledBackendCapabilityOverrides;\n  /**\n   * Declare the connection this backend serializes every statement onto, when\n   * TypeGraph's driver predicates cannot see it (`expo-sqlite`, `op-sqlite`,\n   * `sqlite-proxy`, a bespoke adapter) — or declare that it serializes on\n   * nothing, when detection is wrong for your topology.\n   *\n   * Defaults to `{ mode: \"detect\" }`. See\n   * {@link SerializedResourceDeclaration} for what each mode means and for the\n   * one refusal it cannot lift (`same-sqlite-backend`: one backend object\n   * exporting into itself).\n   */\n  serializedResource?: SerializedResourceDeclaration;\n}>;\n\nconst NODE_INSERT_PARAM_COUNT = 9;\nconst SCHEMA_FENCE_PARAM_COUNT = 2;\n/**\n * The keyed namespace a `row`-mechanism schema write fence acquires under —\n * the identical literal `postgres.ts`'s `acquireSchemaWriteFence` /\n * `lockActiveSchemaVersion` pair uses, so a `typegraph:schema-commit:<graphId>`\n * row means the same thing regardless of which dialect wrote it.\n */\nconst SCHEMA_COMMIT_FENCE_NAMESPACE = \"typegraph:schema-commit\";\n// Durable edge rows bind match-identity name and key in addition to the\n// ordinary edge shape. Budget for the widest supported row so native batches\n// never cross the driver's parameter ceiling.\nconst EDGE_INSERT_PARAM_COUNT = 14;\nconst GET_NODES_FIXED_PARAM_COUNT = 2;\nconst GET_EDGES_FIXED_PARAM_COUNT = 1;\nconst CHECK_UNIQUE_BATCH_FIXED_PARAM_COUNT = 3;\nconst FULLTEXT_UPSERT_PARAM_COUNT = 6;\nconst FULLTEXT_DELETE_FIXED_PARAM_COUNT = 2;\nconst UNIQUE_DELETE_FIXED_PARAM_COUNT = 2;\nconst UNIQUE_INSERT_PARAM_COUNT = 6;\n\n/**\n * `PRAGMA analysis_limit` value `refreshStatistics()` sets before running\n * `ANALYZE`. Unlike Postgres (whose `ANALYZE` always examines a bounded\n * sample sized off `default_statistics_target`), SQLite's `ANALYZE`\n * defaults to a full table/index scan — O(table size) per call. A caller\n * streaming a bulk load through repeated `bulkInsert()` calls (the only\n * practical pattern for a multi-million-row load) re-triggers\n * `refreshStatistics()` on every batch once that batch's row count crosses\n * `AUTO_REFRESH_STATISTICS_ROW_THRESHOLD`; without this bound, per-call\n * cost grows with total table size, integrating to O(n²) total load time.\n * 1000 is SQLite's own documented suggestion for large databases.\n */\nexport const SQLITE_ANALYZE_ROW_LIMIT = 1000;\n\n/**\n * Batch chunk sizes for the SQLite operation backend, derived from the\n * connection's bound-parameter budget. Keys mirror the operation backend's\n * `batchConfig`.\n */\nexport type SqliteBatchChunkSizes = Readonly<{\n  checkUniqueBatchChunkSize: number;\n  edgeInsertBatchSize: number;\n  edgeSchemaFencedInsertBatchSize: number;\n  /** Rows per embedding batch upsert (5 binds per row). */\n  embeddingUpsertBatchSize: number;\n  /** Rows per fulltext batch upsert (6 binds per row on FTS5). */\n  fulltextUpsertBatchSize: number;\n  /** Node ids per fulltext batch delete (2 fixed binds + one per id). */\n  fulltextDeleteChunkSize: number;\n  /** Endpoint ids per `findEdgesByKind` `fromIds` / `toIds` statement. */\n  findEdgesEndpointChunkSize: number;\n  getEdgesChunkSize: number;\n  getNodesChunkSize: number;\n  nodeInsertBatchSize: number;\n  /** Rows per node insert after reserving the two schema-fence binds. */\n  nodeSchemaFencedInsertBatchSize: number;\n  /** Node ids per uniqueness-sidecar hard delete. */\n  uniqueDeleteChunkSize: number;\n  uniqueInsertBatchSize: number;\n}>;\n\n/**\n * Derives batch chunk sizes from a per-statement bound-parameter budget.\n * The budget varies by driver — better-sqlite3 compiles in 32,766, D1 caps\n * at ~100, undetectable async drivers keep the 999 floor — so chunk math is\n * computed per backend instance rather than fixed at module scope.\n */\nexport function computeSqliteBatchChunkSizes(\n  maxBindParameters: number,\n): SqliteBatchChunkSizes {\n  return {\n    checkUniqueBatchChunkSize: Math.max(\n      1,\n      maxBindParameters - CHECK_UNIQUE_BATCH_FIXED_PARAM_COUNT,\n    ),\n    embeddingUpsertBatchSize: Math.max(\n      1,\n      Math.floor(maxBindParameters / EMBEDDING_UPSERT_PARAM_COUNT),\n    ),\n    fulltextUpsertBatchSize: Math.max(\n      1,\n      Math.floor(maxBindParameters / FULLTEXT_UPSERT_PARAM_COUNT),\n    ),\n    fulltextDeleteChunkSize: Math.max(\n      1,\n      maxBindParameters - FULLTEXT_DELETE_FIXED_PARAM_COUNT,\n    ),\n    edgeInsertBatchSize: Math.max(\n      1,\n      Math.floor(maxBindParameters / EDGE_INSERT_PARAM_COUNT),\n    ),\n    edgeSchemaFencedInsertBatchSize: Math.max(\n      1,\n      Math.floor(\n        (maxBindParameters - SCHEMA_FENCE_PARAM_COUNT) /\n          EDGE_INSERT_PARAM_COUNT,\n      ),\n    ),\n    findEdgesEndpointChunkSize: Math.max(\n      1,\n      maxBindParameters - FIND_EDGES_ENDPOINT_FIXED_PARAM_COUNT,\n    ),\n    getEdgesChunkSize: Math.max(\n      1,\n      maxBindParameters - GET_EDGES_FIXED_PARAM_COUNT,\n    ),\n    getNodesChunkSize: Math.max(\n      1,\n      maxBindParameters - GET_NODES_FIXED_PARAM_COUNT,\n    ),\n    nodeInsertBatchSize: Math.max(\n      1,\n      Math.floor(maxBindParameters / NODE_INSERT_PARAM_COUNT),\n    ),\n    nodeSchemaFencedInsertBatchSize: Math.max(\n      1,\n      Math.floor(\n        (maxBindParameters - SCHEMA_FENCE_PARAM_COUNT) /\n          NODE_INSERT_PARAM_COUNT,\n      ),\n    ),\n    uniqueDeleteChunkSize: Math.max(\n      1,\n      maxBindParameters - UNIQUE_DELETE_FIXED_PARAM_COUNT,\n    ),\n    uniqueInsertBatchSize: Math.max(\n      1,\n      Math.floor(maxBindParameters / UNIQUE_INSERT_PARAM_COUNT),\n    ),\n  };\n}\n\n// ============================================================\n// Utilities\n// ============================================================\n\nconst toNodeRow = createNodeRowMapper(SQLITE_ROW_MAPPER_CONFIG);\nconst toEdgeRow = createEdgeRowMapper(SQLITE_ROW_MAPPER_CONFIG);\nconst toUniqueRow = createUniqueRowMapper(SQLITE_ROW_MAPPER_CONFIG);\nconst toSchemaVersionRow = createSchemaVersionRowMapper(\n  SQLITE_ROW_MAPPER_CONFIG,\n);\n\n/** Every SQLite \"atomic transactions unavailable\" refusal shares this shape. */\nfunction throwSqliteTransactionsDisabled(\n  message: string,\n  details?: Readonly<Record<string, unknown>>,\n): never {\n  throw new ConfigurationError(message, {\n    backend: \"sqlite\",\n    capability: \"execution.interactiveTransactions\",\n    supportsInteractiveTransactions: false,\n    ...details,\n  });\n}\n\n// `fulltext` and `vector` are deliberately absent from the returned shape:\n// both are derived once, from `profile.fulltext` / `profile.vector`, by\n// `finalizeEngineCapabilities` (`./engine/capabilities`) — baking either\n// here would give this profile's `declaredCapabilities` a copy that a\n// caller overriding the strategy field could leave stale.\nfunction buildSqliteCapabilities(\n  options: Readonly<{\n    transactionMode: SqliteExecutionAdapter[\"profile\"][\"transactionMode\"];\n    maxBindParameters: number;\n    orderedAggregates: boolean;\n  }>,\n): BackendCapabilities {\n  const base =\n    options.transactionMode === \"none\" ?\n      {\n        ...SQLITE_CAPABILITIES,\n        execution: {\n          ...SQLITE_CAPABILITIES.execution,\n          interactiveTransactions: false,\n        },\n        graphAnalytics: {\n          ...(SQLITE_CAPABILITIES.graphAnalytics ?? {\n            mathFunctions: false,\n          }),\n          supported: false,\n        },\n      }\n    : SQLITE_CAPABILITIES;\n  return {\n    ...base,\n    maxBindParameters: options.maxBindParameters,\n    ...(options.orderedAggregates ? { orderedAggregates: true } : {}),\n  };\n}\n\nfunction resolveMaxBindParametersCapability(\n  profile: SqliteExecutionProfile,\n  override: number | undefined,\n): number {\n  const requested = override ?? profile.maxBindParameters;\n  return profile.hardMaxBindParameters === undefined ?\n      requested\n    : Math.min(requested, profile.hardMaxBindParameters);\n}\n\nfunction resolveSqliteGraphAnalyticsCapabilities(\n  profile: SqliteExecutionProfile,\n  override: GraphAnalyticsCapabilities | undefined,\n): GraphAnalyticsCapabilities {\n  const requested = override ??\n    SQLITE_CAPABILITIES.graphAnalytics ?? {\n      supported: false,\n      mathFunctions: false,\n    };\n  if (\n    profile.transactionMode !== \"do-sqlite\" &&\n    profile.transactionMode !== \"none\"\n  ) {\n    return requested;\n  }\n  return { ...requested, supported: false };\n}\n\n/**\n * Normalizes one SQLite declared column type to the family\n * `catalog.columnTypes` reports, by type AFFINITY — the same substring\n * rule SQLite itself applies when deciding how to store a value, since a\n * declared type is otherwise free text SQLite does not enforce.\n */\nfunction normalizeSqliteColumnKind(declaredType: string): NormalizedColumnKind {\n  if (declaredType.includes(\"int\")) return \"integer\";\n  if (\n    declaredType.includes(\"char\") ||\n    declaredType.includes(\"clob\") ||\n    declaredType.includes(\"text\")\n  ) {\n    return \"text\";\n  }\n  return \"other\";\n}\n\n/**\n * SQLite has no invalid-build leftover state\n * (`indexBehavior.hasInvalidIndexState` is `false`): every index either\n * exists and is usable, or does not exist. Nothing to drop.\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nasync function dropSqliteInvalidIndex(_name: string): Promise<void> {}\n\n/**\n * Builds this dialect's `catalog` probes bound to one execution session —\n * the profile's own connection for the root backend, or a transaction's\n * own adapter for a transaction-scoped backend, via `executionAdapter`\n * supplied by the caller. Bound this way rather than closed over the\n * profile's own connection, so a probe issued through a transaction-scoped\n * backend's `catalog` runs on that transaction's own session — reading its\n * own uncommitted state, not the outer connection's.\n *\n * Every probe runs through the SAME `serializedQueue` every other root\n * operation does (`undefined` on a transaction-scoped backend, which\n * carries no queue of its own — see `CreateSqliteTransactionBackendOptions`)\n * — a catalog read has no special exemption from the ordering guarantee\n * the queue gives every other backend call issued against this connection.\n */\nfunction createSqliteCatalogProbes(\n  executionAdapter: SqliteExecutionAdapter,\n  operationStrategy: ReturnType<typeof createSqliteOperationStrategy>,\n  serializedQueue: SerializedExecutionQueue | undefined,\n): BackendCatalogProbes {\n  return {\n    tableExists(tableName: string): Promise<boolean> {\n      return runWithSerializedQueue(serializedQueue, async () => {\n        const rows = await executionAdapter.execute<Record<string, unknown>>(\n          operationStrategy.buildTableExists(tableName),\n        );\n        return tableExistsFromRow(rows[0]);\n      });\n    },\n    tablesExist(names: readonly string[]): Promise<readonly TableState[]> {\n      return runWithSerializedQueue(serializedQueue, async () => {\n        if (names.length === 0) return [];\n        const rows = await executionAdapter.execute<{ name: string }>(\n          portableSql`\n          SELECT name\n          FROM sqlite_master\n          WHERE type = 'table'\n            AND name IN (${sqlValueList(names)})\n        `,\n        );\n        const existing = new Set(rows.map((row) => row.name));\n        return names.map((name) => ({ name, exists: existing.has(name) }));\n      });\n    },\n    indexStates(names: readonly string[]): Promise<readonly IndexState[]> {\n      return runWithSerializedQueue(serializedQueue, async () => {\n        if (names.length === 0) return [];\n        const rows = await executionAdapter.execute<{ name: string }>(\n          portableSql`\n          SELECT name\n          FROM sqlite_master\n          WHERE type = 'index'\n            AND name IN (${sqlValueList(names)})\n        `,\n        );\n        const existing = new Set(rows.map((row) => row.name));\n        return names.map((name) => ({\n          name,\n          exists: existing.has(name),\n          invalid: false,\n        }));\n      });\n    },\n    dropInvalidIndex: dropSqliteInvalidIndex,\n    columnTypes(table: string): Promise<readonly CatalogColumn[]> {\n      return runWithSerializedQueue(serializedQueue, async () => {\n        const rows = await executionAdapter.execute<{\n          name: unknown;\n          type: unknown;\n        }>(portableSql`PRAGMA table_info(${portableSql.identifier(table)})`);\n        return rows.flatMap((row) => {\n          if (typeof row.name !== \"string\" || typeof row.type !== \"string\") {\n            return [];\n          }\n          const declaredType = row.type.trim().toLowerCase();\n          return [\n            {\n              name: row.name,\n              kind: normalizeSqliteColumnKind(declaredType),\n              declaredType,\n            },\n          ];\n        });\n      });\n    },\n    indexBehavior: {\n      concurrentBuilds: false,\n      hasInvalidIndexState: false,\n      supportsGinFamily: false,\n    },\n  };\n}\n\n// ============================================================\n// Backend Factory\n// ============================================================\n\ntype CreateSqliteOperationBackendOptions = Readonly<{\n  capabilities: GraphBackend[\"capabilities\"];\n  db: AnySqliteDatabase;\n  executionAdapter: SqliteExecutionAdapter;\n  atomicSqlProgramExecutor?: AtomicSqlProgramExecutor;\n  operationStrategy: ReturnType<typeof createSqliteOperationStrategy>;\n  serializedQueue?: SerializedExecutionQueue;\n  tableNames: ResolvedSqlTableNames;\n  /** Absent when this backend has no fulltext support (`fulltext: false`). */\n  fulltextStrategy: FulltextStrategy | undefined;\n  /**\n   * Active vector strategy, or `undefined` when the connection has no\n   * vector extension. When present, the backend exposes upsertEmbedding /\n   * deleteEmbedding / vectorSearch / createVectorIndex / dropVectorIndex,\n   * all routed through this strategy's per-`(kind, field)` storage.\n   */\n  vectorStrategy?: VectorStrategy | undefined;\n  /**\n   * Shared durable-marker materializer. The vector methods assert a\n   * slot's marker (SELECT, never DDL) on the hot path and `createVectorIndex`\n   * ensures it (privileged) — replacing the old in-process ensure-latch.\n   * Shared across the outer backend and every transaction-scoped backend\n   * so a slot's marker is resolved at most once per process.\n   */\n  contributionMaterializer: ContributionMaterializer;\n  /** Whether this operation backend is bound to an explicit transaction. */\n  transactionScoped: boolean;\n  /**\n   * The factory's shared write-fence target. `lockSchemaVersionForWrite`\n   * resolves its plan instead of assuming the engine-serialized read is\n   * always correct, so a managed write and a `row`-mechanism schema commit\n   * (`postgres.ts`'s `acquireSchemaWriteFence`/`lockActiveSchemaVersion`\n   * pair, mirrored here) contend on the same fence row.\n   */\n  fenceTarget: WriteFenceTarget;\n  /**\n   * The root backend's own `catalog` bag, threaded through so this call\n   * exposes the SAME object rather than building a second one from `db` /\n   * `executionAdapter` — see `EngineProvisioning.catalog`. Omitted on the\n   * transaction-scoped call, which has no root bag to share and instead\n   * builds its own probes bound to the transaction's own session.\n   */\n  catalog?: BackendCatalogProbes | undefined;\n  /**\n   * The root backend's own `lineage` bag, threaded through so a\n   * transaction-scoped call exposes the SAME object — see\n   * `EngineProvisioning.lineage`. Unlike `catalog`, there is nothing to\n   * rebuild when this is omitted: a profile-supplied `lineage` is a\n   * read-only bag of engine-wide queries bound to nothing session-specific,\n   * so a transaction-scoped call with no `lineage` passed through simply\n   * carries none, matching the root.\n   */\n  lineage?: LineageMembers | undefined;\n  /**\n   * The root backend's own `recordedTime` bag, threaded through so a\n   * transaction-scoped call exposes the SAME object — see\n   * `EngineProvisioning.recordedTime`. Like `lineage`, there is nothing to\n   * rebuild when this is omitted: a profile-supplied `recordedTime` is a\n   * read-only source function and revision-clock read bound to nothing\n   * session-specific, so a transaction-scoped call with no `recordedTime`\n   * passed through simply carries none, matching the root.\n   */\n  recordedTime?: EngineRecordedTimeMembers | undefined;\n}>;\n\ntype CreateSqliteTransactionBackendOptions = Readonly<{\n  capabilities: GraphBackend[\"capabilities\"];\n  db: AnySqliteDatabase;\n  executionAdapter?: SqliteExecutionAdapter;\n  operationStrategy: ReturnType<typeof createSqliteOperationStrategy>;\n  profileHints: SqliteExecutionProfileHints;\n  tableNames: ResolvedSqlTableNames;\n  /** Absent when this backend has no fulltext support (`fulltext: false`). */\n  fulltextStrategy: FulltextStrategy | undefined;\n  /** Active vector strategy. See {@link CreateSqliteOperationBackendOptions}. */\n  vectorStrategy?: VectorStrategy | undefined;\n  /** Shared durable-marker materializer. See {@link CreateSqliteOperationBackendOptions}. */\n  contributionMaterializer: ContributionMaterializer;\n  /** Shared write-fence target. See {@link CreateSqliteOperationBackendOptions}. */\n  fenceTarget: WriteFenceTarget;\n  /**\n   * Whether the transaction handle this call builds should carry\n   * `markFirstPartyFactory` — the caller's own resolved standing, never\n   * re-derived here. `false` on the `adoptTransaction` path regardless of\n   * the profile's own standing: an adopted transaction's lifetime is the\n   * caller's, not one TypeGraph has audited.\n   */\n  isFirstParty: boolean;\n  /** The root backend's own `lineage` bag. See {@link CreateSqliteOperationBackendOptions}. */\n  lineage?: LineageMembers | undefined;\n  /** The root backend's own `recordedTime` bag. See {@link CreateSqliteOperationBackendOptions}. */\n  recordedTime?: EngineRecordedTimeMembers | undefined;\n}>;\n\nfunction createSqliteOperationBackend(\n  options: CreateSqliteOperationBackendOptions,\n): InternalOperationBackend {\n  const {\n    capabilities,\n    db,\n    executionAdapter,\n    atomicSqlProgramExecutor,\n    operationStrategy,\n    serializedQueue,\n    tableNames,\n    fulltextStrategy,\n    vectorStrategy,\n    contributionMaterializer,\n    transactionScoped,\n    fenceTarget,\n    catalog,\n    lineage,\n    recordedTime,\n  } = options;\n\n  // CRUD statements route through the execution adapter's compiled path on\n  // synchronous drivers so a repeated operation shape re-binds parameters\n  // against a cached prepared statement instead of re-preparing through\n  // drizzle's session on every call. Async drivers (remote libsql, D1)\n  // have no statement cache and keep the drizzle fallback.\n  const compiledExecute = executionAdapter.executeCompiled;\n  const compiledRun = executionAdapter.executeCompiledRun;\n\n  function execGet<T>(query: ExecutableSql): Promise<T | undefined> {\n    // Fallback uses db.all()[0], not db.get(): drizzle-team/drizzle-orm#1049\n    // — db.get() crashes with the libsql driver when no rows match\n    // (normalizeRow receives undefined).\n    //\n    // The fallback branches use `await` unconditionally rather than\n    // `instanceof Promise` because Drizzle returns SQLiteRaw thenables\n    // that are NOT Promise instances (drizzle-team/drizzle-orm#2275).\n    return runWithSerializedQueue(serializedQueue, async () => {\n      if (compiledExecute === undefined) {\n        const rows = await executionAdapter.execute<T>(query);\n        return rows[0];\n      }\n      const rows = await compiledExecute<T>(executionAdapter.compile(query));\n      return rows[0];\n    });\n  }\n\n  function execAll<T>(query: ExecutableSql): Promise<T[]> {\n    return runWithSerializedQueue(serializedQueue, async () => {\n      if (compiledExecute === undefined) {\n        return [...(await executionAdapter.execute<T>(query))];\n      }\n      return [...(await compiledExecute<T>(executionAdapter.compile(query)))];\n    });\n  }\n\n  function execRun(query: ExecutableSql): Promise<void> {\n    return runWithSerializedQueue(serializedQueue, async () => {\n      if (compiledRun === undefined) {\n        await db.run(\n          isSqlFragment(query) ? toDrizzleSql(query, \"sqlite\") : query,\n        );\n        return;\n      }\n      await compiledRun(executionAdapter.compile(query));\n    });\n  }\n\n  const batchConfig = computeSqliteBatchChunkSizes(\n    capabilities.maxBindParameters ?? SQLITE_MAX_BIND_PARAMETERS,\n  );\n\n  const fulltextMembers =\n    fulltextStrategy === undefined ?\n      createFulltextMembers({ fulltextStrategy: undefined })\n    : createFulltextMembers({\n        fulltextStrategy,\n        strategy: operationStrategy,\n        execution: { execAll, execRun },\n        batchConfig,\n      });\n\n  const contributionOperationMembers = createContributionOperationMembers({\n    execRun,\n    operationStrategy,\n  });\n\n  const commonOperationMembers = createCommonOperationBackend(\n    buildCommonOperationOptions({\n      batchConfig,\n      commandSession: transactionScoped ? \"transaction\" : \"root\",\n      execution: {\n        compile: executionAdapter.compile,\n        execAll,\n        execGet,\n        execRun,\n      },\n      atomicSqlProgramExecutor,\n      nowIso,\n      maxBindParameters:\n        capabilities.maxBindParameters ?? SQLITE_MAX_BIND_PARAMETERS,\n      operationStrategy,\n      rowMappers: {\n        toEdgeRow,\n        toNodeRow,\n        toSchemaVersionRow,\n        toUniqueRow,\n      },\n      schemaFenceLockClause: sql.raw(\"\"),\n      contributionMaterializer,\n      fusion: { atomicProgramsAtTransactionScope: false },\n    }),\n  );\n\n  const executeCompiled = executionAdapter.executeCompiled;\n  const executeRawMethod: Pick<TransactionBackend, \"executeRaw\"> =\n    executeCompiled === undefined ?\n      {}\n    : {\n        executeRaw<T>(\n          sqlText: string,\n          params: readonly unknown[],\n        ): Promise<readonly T[]> {\n          return runWithSerializedQueue(serializedQueue, async () =>\n            executeCompiled<T>({ params, sql: sqlText }),\n          );\n        },\n      };\n\n  // Embedding write/search/index methods are present only when a vector\n  // strategy is wired — mirroring a fulltext-less backend. Shared verbatim\n  // with the PostgreSQL backend via `createVectorMembers`; the two genuine\n  // per-engine differences (the GUC-wrapped, ceiling-validated search\n  // override and the serial-fallback index build) are threaded through as\n  // `applySearchOverrides` and `runIndexBuild`.\n  const vectorMembers =\n    vectorStrategy === undefined ?\n      createVectorMembers({ vectorStrategy: undefined })\n    : createVectorMembers({\n        vectorStrategy,\n        execution: { execRun },\n        batchConfig,\n        tableNames,\n        contributionMaterializer,\n        operationStrategy,\n        async applySearchOverrides(query, params) {\n          // Apply-or-refuse for the per-search ANN frontier. No SQLite\n          // engine TypeGraph bundles has one (sqlite-vec's vec0 takes only\n          // `k`; libSQL's `vector_top_k` takes only (index, query, k)), so\n          // the shared predicate refuses `efSearch` here with the engine's\n          // own reason instead of accepting it and searching as if it were\n          // never passed. `undefined` — the overwhelmingly common case —\n          // returns without touching anything.\n          resolveEfSearchOverride({\n            efSearch: params.efSearch,\n            indexType: params.indexType,\n            tuning: vectorSearchFrontierTuning(vectorStrategy),\n            interactiveTransactions:\n              capabilities.execution.interactiveTransactions,\n            dialect: \"SQLite\",\n            engine: vectorStrategy.name,\n          });\n          return execAll<{ node_id: string; score: number }>(query);\n        },\n        async runIndexBuild({ indexStatement }) {\n          await execRun(indexStatement);\n        },\n      });\n\n  // `hybridSearch` is the one embedding-adjacent member NOT shared with\n  // PostgreSQL (it composes the vector leg with `operationStrategy`'s\n  // single-statement hybrid SQL, which is dialect-owned) — kept inline,\n  // gated the same way `vectorEmbeddingMethods` always has been. It also\n  // needs an active fulltext strategy for its fulltext leg, so it is\n  // additionally gated on `fulltextStrategy` — a fulltext-off backend\n  // falls back to the store's multi-statement RRF path just like a\n  // vector-off one already does.\n  const vectorEmbeddingMethods =\n    vectorStrategy === undefined || fulltextStrategy === undefined ?\n      {}\n    : {\n        // Single-statement hybrid needs ROW_NUMBER(); a capability profile\n        // that disables window functions keeps the store's multi-statement\n        // fallback by simply not exposing the member.\n        ...(capabilities.windowFunctions ?\n          {\n            async hybridSearch(\n              params: HybridSearchParams,\n            ): Promise<readonly HybridSearchRow[]> {\n              assertVectorSearchLimit(params.limit);\n              // Source depths get the same boundary validation the\n              // fallback path applies (vectorSearch validates its limit;\n              // the fulltext depth is validated inside\n              // buildFulltextSearch).\n              assertVectorSearchLimit(params.vector.k);\n              // The hybrid statement's vector leg carries the same option on\n              // the same engine, so it takes the same refusal. This path built\n              // its own `VectorSearchParams` and dropped\n              // `params.vector.efSearch` while doing so — the silent ignore in\n              // its second location.\n              resolveEfSearchOverride({\n                efSearch: params.vector.efSearch,\n                indexType: params.vector.indexType,\n                tuning: vectorSearchFrontierTuning(vectorStrategy),\n                interactiveTransactions:\n                  capabilities.execution.interactiveTransactions,\n                dialect: \"SQLite\",\n                engine: vectorStrategy.name,\n              });\n              const slot = vectorSlotFromParams({\n                graphId: params.graphId,\n                nodeKind: params.nodeKind,\n                fieldPath: params.vector.fieldPath,\n                dimensions: params.vector.dimensions,\n                metric: params.vector.metric,\n                indexType: params.vector.indexType,\n              });\n              // Read-only, not marker-gated — see\n              // `createVectorMembers`'s vectorSearch\n              // (engine/members/vector-members.ts) for why.\n              const candidates =\n                params.candidates ??\n                buildLiveNodeCandidates(\n                  tableNames.nodes,\n                  params.graphId,\n                  params.nodeKind,\n                  nowIso(),\n                );\n              const vectorParams: VectorSearchParams = {\n                graphId: params.graphId,\n                nodeKind: params.nodeKind,\n                fieldPath: params.vector.fieldPath,\n                queryEmbedding: params.vector.queryEmbedding,\n                metric: params.vector.metric,\n                dimensions: params.vector.dimensions,\n                indexType: params.vector.indexType,\n                limit: params.vector.k,\n                ...(params.vector.minScore === undefined ?\n                  {}\n                : { minScore: params.vector.minScore }),\n              };\n              // The vector leg references the statement's shared\n              // tg_hybrid_cand CTE; the actual candidates SQL is emitted\n              // once by buildHybridSearch.\n              const vectorSql = vectorStrategy.buildSearch(\n                slot,\n                vectorParams,\n                portableSql.raw(\"SELECT node_id FROM tg_hybrid_cand\"),\n              );\n              const statement = operationStrategy.buildHybridSearch(\n                { ...params, candidates },\n                toDrizzleSql(vectorSql, \"sqlite\"),\n                params.vector.metric === \"cosine\",\n              );\n              let raw: readonly Record<string, unknown>[];\n              try {\n                raw = await execAll<Record<string, unknown>>(statement);\n              } catch (error) {\n                throw mapVectorWriteError(error, vectorParams);\n              }\n              return raw.map((row) => mapHybridSearchRow(row, toNodeRow));\n            },\n          }\n        : {}),\n      };\n\n  /**\n   * The write-fence half of a managed write on SQLite.\n   *\n   * Under this engine's default `mechanism: \"engine-serialized\"` (and under\n   * `\"caller-serialized\"`), an ordinary read suffices — unlike Postgres'\n   * `FOR SHARE` fence — because SQLite serializes writers through BEGIN\n   * IMMEDIATE (or the deployment's own promise): no schema commit can be\n   * mid-flight while this transaction holds the writer slot, and a SQLite\n   * read has no post-wait row recheck that could drop the active row from\n   * its own snapshot. An absent row here therefore always means the graph\n   * genuinely has no active schema.\n   *\n   * Under a declared `mechanism: \"row\"` that guarantee does not hold — a row\n   * target has no serialized-writer slot of its own — so this instead takes\n   * the SAME portable fence row `postgres.ts`'s `acquireSchemaWriteFence`/\n   * `lockActiveSchemaVersion` pair takes on both the commit and write sides,\n   * as a preceding statement in this transaction, before the plain read\n   * below. That gives a concurrent schema commit and this write the row to\n   * contend on, exactly as PostgreSQL's `FOR UPDATE`/`FOR SHARE` pair does\n   * under `mechanism: \"lock\"`. Resolving the plan here — rather than trusting\n   * the engine-serialized comment unconditionally — is what makes a declared\n   * `\"row\"` mechanism actually apply instead of silently being dropped at\n   * this site.\n   */\n  async function lockSchemaVersionForWrite(\n    params: LockSchemaVersionForWriteParams,\n  ): Promise<void> {\n    if (!transactionScoped) {\n      throw new ConfigurationError(\n        \"The schema write fence requires an explicit SQLite transaction.\",\n        {\n          code: \"SCHEMA_WRITE_FENCE_TRANSACTION_REQUIRED\",\n          graphId: params.graphId,\n        },\n      );\n    }\n    const plan = requireWriteFence(\n      resolveWriteFencePlan(fenceTarget),\n      \"The SQLite schema write fence\",\n      \"keyed\",\n    );\n    if (plan.kind === \"row\") {\n      await execRun(\n        toDrizzleSql(\n          plan.sql.acquireKeyed(SCHEMA_COMMIT_FENCE_NAMESPACE, params.graphId),\n          \"sqlite\",\n        ),\n      );\n    }\n    const active = await commonOperationMembers.getActiveSchema(params.graphId);\n    assertActiveSchemaVersion(\n      params.graphId,\n      params.expectedVersion,\n      active?.version ?? 0,\n    );\n  }\n\n  const operations = createEngineOperationBackend({\n    commonOperationMembers,\n    contributionOperationMembers,\n    vectorMembers,\n    fulltextMembers,\n    rawSqlMembers: {\n      ...executeRawMethod,\n      async execute<T>(query: CompiledRowsSql): Promise<readonly T[]> {\n        return runWithSerializedQueue(serializedQueue, async () =>\n          executionAdapter.execute<T>(query),\n        );\n      },\n    },\n    lockSchemaVersionForWrite,\n    compile: executionAdapter.compile,\n    capabilities,\n    dialect: \"sqlite\",\n    tableNames,\n    fulltextStrategy,\n    ...(vectorStrategy === undefined ? {} : { vectorStrategy }),\n  });\n\n  // `hybridSearch` is not part of the shared assembly — see\n  // `vectorEmbeddingMethods`'s own comment above. `catalog` is the root's\n  // own bag when the caller supplied one (`options.catalog`, threaded\n  // through from `EngineProvisioning.catalog` — the SAME object exposed as\n  // `backend.catalog`, built once); when absent — the transaction-scoped\n  // call, which shares no bag of its own — this builds a fresh one bound to\n  // THIS call's own `executionAdapter` (the transaction's own adapter), so\n  // every catalog probe on a transaction-scoped backend runs on the\n  // transaction's own session. `lineage` and `recordedTime`, unlike\n  // `catalog`, have no transaction-scoped fallback to build: each is simply\n  // carried through (`options.lineage`/`options.recordedTime`, the SAME\n  // objects exposed as `backend.lineage`/`backend.recordedTime`) so a\n  // profile-supplied capability reaches a `transaction()` handle exactly as\n  // `catalog` does, and stays absent when the profile declares none.\n  return {\n    ...operations,\n    ...vectorEmbeddingMethods,\n    catalog:\n      catalog ??\n      createSqliteCatalogProbes(\n        executionAdapter,\n        operationStrategy,\n        serializedQueue,\n      ),\n    ...(lineage === undefined ? {} : { lineage }),\n    ...(recordedTime === undefined ? {} : { recordedTime }),\n  };\n}\n\n/**\n * Whether a driver client is a LOCAL `@libsql/client`: one stable connection\n * that every statement from every wrapper over it runs on, in order.\n *\n * `protocol === \"file\"` is the client's own answer to \"am I local?\" — it covers\n * `file:` paths, `:memory:` databases, and an embedded replica's local file. An\n * embedded replica (`protocol: \"file\"` PLUS a `syncUrl`) is deliberately marked\n * on the same evidence as any other local client: `syncUrl` names where the\n * replica pulls FROM, while every statement this client executes still routes\n * through the one local handle, so an open export snapshot on one wrapper still\n * holds the connection another wrapper's import needs. A REMOTE client\n * (`http` / `ws`) opens an independent stream per transaction and\n * must never be treated as one serialized resource; refusing concurrent work\n * there would refuse work that succeeds. The libsql methods are required\n * alongside the protocol so an unrelated object that happens to carry\n * `protocol: \"file\"` is not adopted, and none of it imports `@libsql/client`,\n * which this bundler-friendly module must not depend on.\n *\n * Single owner of the local/remote distinction: `../sqlite/libsql.ts` picks its\n * transaction framing (raw BEGIN/COMMIT on the one local connection vs Drizzle's\n * per-stream `db.transaction()`) by asking here, so the framing and the\n * serialized-resource mark cannot drift apart.\n */\nexport { isLocalLibsqlClient } from \"./libsql-client\";\n\n/**\n * Returns the single connection a Drizzle database serializes every statement\n * onto, if its driver is one we can positively identify as such.\n *\n * Five drivers qualify, each by its own named predicate — a driver is marked on\n * evidence of WHAT IT IS, never on the absence of a disqualifier:\n *\n * - **better-sqlite3** ({@link isBetterSqlite3Client}): a single, synchronous\n *   connection, so an open transaction on one wrapper is an open transaction\n *   for all of them.\n * - **bun:sqlite** ({@link isBunSqliteClient}): the same one synchronous\n *   connection, reached through `drizzle-orm/bun-sqlite`.\n * - **sql.js** ({@link isSqlJsClient}): one in-WASM database handle; every\n *   wrapper's statements run on it in order.\n * - **Cloudflare Durable Object storage** (`drizzle(ctx.storage)`): one storage\n *   connection whose transaction frame is AMBIENT on the storage object rather\n *   than a handle passed to the callback (see `runDoSqliteStorageTransaction`:\n *   `transactionMode: \"do-sqlite\"` binds the OUTER `db`). A second wrapper's\n *   writes therefore land inside the first\n *   wrapper's open export snapshot, and because the DO backend reports\n *   `capabilities.execution.interactiveTransactions: true` nothing else abstains for it. Identified by\n *   {@link getDurableObjectStorageClient}, the same full-shape evidence the\n *   transaction runner requires, so the framing and the mark cannot drift apart.\n * - **a local `@libsql/client`**: also one stable connection — which is exactly\n *   why local clients frame transactions as raw BEGIN/COMMIT on it (see\n *   {@link isLocalLibsqlClient}). libsql clients expose no `prepare`, so no\n *   prepare-capable predicate can see them and the driver client is read\n *   directly here.\n *\n * Unrecognized clients stay unmarked: SEPARATE connections to the same file are\n * genuinely concurrent under WAL and must not be treated as one serialized\n * resource, and a driver whose dispatch we cannot attribute proves nothing.\n * The full classification — marked, deliberately unmarked, and the remaining\n * gaps — is the inventory in `../transaction-resource.ts`.\n */\nfunction getSerializedSqliteConnection(\n  db: AnySqliteDatabase,\n): object | undefined {\n  const client = (db as Readonly<{ $client?: unknown }>).$client;\n  if (\n    isBetterSqlite3Client(client) ||\n    isBunSqliteClient(client) ||\n    isSqlJsClient(client)\n  ) {\n    return client as object;\n  }\n  // The storage object IS the serialized resource: every wrapper built over the\n  // same `ctx.storage` shares its one connection and its ambient transaction.\n  const storageClient = getDurableObjectStorageClient(db);\n  if (storageClient !== undefined) return storageClient;\n  return isLocalLibsqlClient(client) ? (client as object) : undefined;\n}\n\n/**\n * Whether two backends built over `client` would be treated as one serialized\n * connection. The marking predicate itself, exposed for the driver-shape unit\n * tests (mirrors `isSerializedPostgresClient`); production code reaches it only\n * through {@link createSqliteBackend}.\n */\nexport function isSerializedSqliteClient(client: unknown): boolean {\n  return (\n    getSerializedSqliteConnection({\n      $client: client,\n    } as unknown as AnySqliteDatabase) !== undefined\n  );\n}\n\n/**\n * Creates a TypeGraph backend for SQLite databases (better-sqlite3, libsql,\n * Cloudflare D1, bun:sqlite, sql.js).\n *\n * @param db - A Drizzle SQLite database instance\n * @param options - Backend configuration\n * @returns A GraphBackend implementation\n */\nexport function createSqliteBackend(\n  db: AnySqliteDatabase,\n  options: SqliteBackendOptions = {},\n): AdapterBackend<AnySqliteDatabase> {\n  return createSqlBackend(buildSqliteEngineProfile(db, options));\n}\n\n/**\n * Builds the SQLite {@link SqlEngineProfile} `createSqlBackend` (from\n * `./engine`) assembles into a backend: the head data and dialect-owned\n * late members (`transactions`, `fence`, `rawSql`, `maintenance`,\n * `trustedImport`, `extensions`) only SQLite supplies, plus the runtime deps\n * (`contributionRuntime`, `identityRuntime`, `graphTemplateRuntime`,\n * `baseSchemaRuntime`, `indexMaterializationRuntime`, `kindRemovalRuntime`)\n * `createSqlBackend` uses to assemble the mirrored member groups from\n * `members/*.ts`.\n */\nexport function buildSqliteEngineProfile(\n  db: AnySqliteDatabase,\n  options: SqliteBackendOptions = {},\n): SqlEngineProfile<AnySqliteDatabase> {\n  assertNoLegacyTransactionCapability(options.capabilities);\n  // Resolved before the backend exists so marking below is a lookup, never\n  // work that could fail after wrappers already observed an unmarked backend.\n  // A `serializedResource` declaration that contradicts detection is refused\n  // here too, before any object a caller could hold has been built.\n  const resourceAudit = resolveDeclaredBackendResource(\n    getSerializedSqliteConnection(db),\n    options.serializedResource,\n  );\n  const tables = options.tables ?? defaultTables;\n  // `fulltext: false` disables fulltext entirely — mirroring `vector`\n  // left unset, required for a SQLite build with no FTS5 support to build\n  // a TypeGraph backend without a stub strategy.\n  const fulltextStrategy =\n    options.fulltext === false ? undefined : (options.fulltext ?? fts5Strategy);\n  const profileHints = options.executionProfile ?? {};\n  const executionAdapter = createSqliteExecutionAdapter(db, { profileHints });\n  const atomicSqlProgramExecutor =\n    createAtomicSqlProgramExecutor(executionAdapter);\n  const { isSync, transactionMode } = executionAdapter.profile;\n  // The active vector strategy gates upsertEmbedding / deleteEmbedding /\n  // vectorSearch and supplies the per-`(kind, field)` storage. Passed by\n  // the caller that knows the connection's vector capability\n  // (`createLibsqlBackend` always; `createLocalSqliteBackend` when the\n  // extension loads); absent for plain SQLite drivers with no extension.\n  const vectorStrategy = options.vector;\n  const capabilityOverrides = options.capabilities ?? {};\n  const baseCapabilities = buildSqliteCapabilities({\n    transactionMode,\n    maxBindParameters: executionAdapter.profile.maxBindParameters,\n    orderedAggregates: executionAdapter.profile.orderedAggregates,\n  });\n  const declaredCapabilities = sealCapabilityDeclaration(\n    normalizeGraphAnalyticsCapabilities({\n      ...baseCapabilities,\n      ...capabilityOverrides,\n      execution: {\n        ...baseCapabilities.execution,\n        ...capabilityOverrides.execution,\n      },\n      maxBindParameters: resolveMaxBindParametersCapability(\n        executionAdapter.profile,\n        capabilityOverrides.maxBindParameters,\n      ),\n      graphAnalytics: resolveSqliteGraphAnalyticsCapabilities(\n        executionAdapter.profile,\n        capabilityOverrides.graphAnalytics,\n      ),\n    }),\n  );\n  // `declaredCapabilities` above is this profile's contribution; the\n  // capability tail (`finalizeEngineCapabilities`, `./engine/capabilities`)\n  // that derives `execution.atomicBatch`, `vector` (from `vectorStrategy`\n  // below), `fulltext` (from `fulltextStrategy`), and `contributions` from it\n  // runs once, in `createSqlBackend`, which then hands the finalized result\n  // back through `EngineOperationsContext.capabilities` / `EngineAssemblyContext\n  // .capabilities` — `buildOperations` and `lateMembers` below read it off\n  // `ctx` rather than re-deriving a local copy.\n\n  const tableNames: ResolvedSqlTableNames = {\n    schemaVersions: getTableName(tables.schemaVersions),\n    nodes: getTableName(tables.nodes),\n    edges: getTableName(tables.edges),\n    recordedNodes: getTableName(tables.recordedNodes),\n    recordedEdges: getTableName(tables.recordedEdges),\n    recordedClock: getTableName(tables.recordedClock),\n    revisionOrigins: getTableName(tables.revisionOrigins),\n    identityAssertions: getTableName(tables.identityAssertions),\n    recordedIdentityAssertions: getTableName(tables.recordedIdentityAssertions),\n    identityClosure: getTableName(tables.identityClosure),\n    identitySeparation: getTableName(tables.identitySeparation),\n    fulltext: tables.fulltextTableName,\n    uniques: getTableName(tables.uniques),\n    edgeClaims: getTableName(tables.edgeClaims),\n    fences: getTableName(tables.fences),\n  };\n  // refreshStatistics() scopes ANALYZE to these — matching the Postgres\n  // backend, which never touches unrelated tables sharing the database.\n  // The recorded and identity relations are ANALYZEd separately under a\n  // missing-table guard: a schema created before recorded-time history or\n  // Operational Identity landed (bring-your-own-connection, no DDL re-run)\n  // has no recorded_* / identity_* tables.\n  const coreAnalyzeTables = [\n    tableNames.nodes,\n    tableNames.edges,\n    tableNames.uniques,\n    ...(fulltextStrategy === undefined ? [] : [tableNames.fulltext]),\n  ];\n  const guardedAnalyzeTables = [\n    tableNames.recordedNodes,\n    tableNames.recordedEdges,\n    tableNames.recordedClock,\n    tableNames.recordedIdentityAssertions,\n    tableNames.identityAssertions,\n    tableNames.identityClosure,\n    tableNames.identitySeparation,\n  ] as const;\n  const operationStrategy = createSqliteOperationStrategy(\n    tables,\n    fulltextStrategy,\n    vectorStrategy,\n  );\n  // Serialize top-level operations per backend on every transaction-capable\n  // mode (\"sql\", \"drizzle\", \"do-sqlite\"). SQLite is single-writer, and two\n  // concurrent `transaction()` calls on one connection open overlapping BEGINs\n  // and collide with SQLITE_BUSY; the queue makes each top-level operation —\n  // including a whole transaction — run to completion before the next starts.\n  // A transaction's inner reads/writes run on the tx-scoped backend, which\n  // does not carry the queue (see CreateSqliteTransactionBackendOptions);\n  // awaiting a ROOT-backend operation from inside the transaction callback\n  // would deadlock, so the queue rejects such re-entrant submissions with a\n  // typed error (see rejectReentrantQueueSubmission). `none` drivers (D1 /\n  // neon-http) have no transactions and manage their own concurrency, so they\n  // stay unqueued.\n  const serializedQueue =\n    transactionMode === \"none\" ?\n      undefined\n    : createSerializedExecutionQueue({\n        // Best-effort: undetected reentrancy here degrades to the deadlock\n        // this queue has always risked when AsyncLocalStorage is\n        // unavailable, not a broken correctness promise — SQLite's own\n        // engine-serialized fence never depended on this detection.\n        reentrancy: \"detect\",\n        subject: \"sqlite\",\n      });\n\n  // Durable fulltext + vector materialization (#135): the dialect-specific\n  // marker-table primitives. Orchestration (materialize / assert /\n  // per-instance cache) lives once in `createContributionMaterializer`,\n  // shared by the outer backend and every transaction-scoped backend so a\n  // slot's marker is resolved at most once per process. Built before\n  // `operations` so the operation backend's vector methods can assert/\n  // ensure through it instead of issuing DDL on the hot path.\n  const matTable = tables.contributionMaterializations;\n\n  // Runs one idempotent DDL statement — `CREATE ... IF NOT EXISTS`. SQLite\n  // has no concurrent-create race to retry, so this needs no retry logic,\n  // unlike PostgreSQL's `executeConcurrentCreateDdl`; it backs both the\n  // contribution members' `ensureTable` dep and `provisioning.ensureTable`\n  // below.\n  const runDdlStatement = async (ddl: string): Promise<void> => {\n    await db.run(sql.raw(ddl));\n  };\n\n  // Deps for `createContributionMembers` (`./engine/members/contribution-members`),\n  // beyond what `createSqlBackend` supplies itself: `dialect`/`fulltextStrategy`/\n  // `vectorStrategy` (the profile head), `fenceTarget` (built by `createSqlBackend`\n  // from its finalized capabilities), `ensureTable`/`execute`/`operationStrategy`\n  // (`provisioning`/`execution`/`strategy`), and `schemaWriteTransaction` (the\n  // fence's own late member, once it exists).\n  const contributionRuntime: ContributionRuntime = {\n    fulltextTableName: tables.fulltextTableName,\n    contributionTableDdl: generateSqliteCreateTableSQL(matTable),\n    reconciliationMarkersTableDdl: generateSqliteCreateTableSQL(\n      tables.reconciliationMarkers,\n    ),\n    timestamps: SQLITE_CONTRIBUTION_MAT_TIMESTAMPS,\n    contributionMarkerColumns: matTable,\n    contributionMarkerRows: {\n      selectWhere: (condition) => db.select().from(matTable).where(condition),\n      async upsert(params) {\n        await db\n          .insert(matTable)\n          .values(\n            buildContributionInsertValues(\n              params,\n              SQLITE_CONTRIBUTION_MAT_TIMESTAMPS.encode,\n            ),\n          )\n          .onConflictDoUpdate({\n            target: [\n              matTable.graphId,\n              matTable.logicalName,\n              matTable.owner,\n              matTable.tableName,\n            ],\n            set: buildContributionOnConflictSet(\n              matTable.materializedAt,\n              params.materializedAt,\n            ),\n          });\n      },\n      async deleteWhere(condition) {\n        await db.delete(matTable).where(condition);\n      },\n    },\n    reconciliationMarkerColumns: tables.reconciliationMarkers,\n    reconciliationMarkerRows: {\n      selectWhere: (condition) =>\n        db.select().from(tables.reconciliationMarkers).where(condition),\n      async upsert(graphId, version) {\n        await db\n          .insert(tables.reconciliationMarkers)\n          .values({ graphId, reconciledToVersion: version })\n          .onConflictDoUpdate({\n            target: tables.reconciliationMarkers.graphId,\n            set: { reconciledToVersion: version },\n          });\n      },\n    },\n  };\n\n  // Deps for `createIdentityMembers`, beyond `ensureTable` (`provisioning`)\n  // and `contributionTableExists` (from the contribution member group\n  // `createSqlBackend` builds first). No `primaryKeyConstraintNameFor`:\n  // SQLite does not name PRIMARY KEY constraints separately.\n  const identityRuntime: IdentityRuntime = {\n    revisionOriginsTableDdl: generateSqliteCreateTableSQL(\n      tables.revisionOrigins,\n    ),\n    contributionsForTableNames: (overrides) =>\n      sqliteContributions(\n        buildSqliteTables(overrides),\n        fulltextStrategy ?? false,\n      ),\n  };\n\n  /**\n   * Builds this profile's top-level `InternalOperationBackend`, deferred\n   * until `createSqlBackend` has resolved the assembled pipeline's\n   * capabilities and contribution materializer (`ctx` — its\n   * `buildCommonOperationOptions` assembly needs the materializer for the\n   * projection-evidence callbacks) — everything else here is a plain\n   * closure capture, unchanged from when this call site built `operations`\n   * directly.\n   */\n  function buildOperations(\n    ctx: EngineOperationsContext,\n  ): InternalOperationBackend {\n    return createSqliteOperationBackend({\n      capabilities: ctx.capabilities,\n      db,\n      executionAdapter,\n      ...(atomicSqlProgramExecutor === undefined ?\n        {}\n      : { atomicSqlProgramExecutor }),\n      operationStrategy,\n      tableNames,\n      fulltextStrategy,\n      vectorStrategy,\n      contributionMaterializer: ctx.contributionMaterializer,\n      transactionScoped: false,\n      fenceTarget: ctx.fenceTarget,\n      ...(serializedQueue === undefined ? {} : { serializedQueue }),\n      // The SAME object exposed as `backend.catalog` (via\n      // `provisioning.catalog`), not a second one built from this call's own\n      // `executionAdapter` — see `CreateSqliteOperationBackendOptions.catalog`.\n      catalog: provisioning.catalog,\n    });\n  }\n\n  async function ensureEdgeMatchIdentityStorage(): Promise<void> {\n    const edgeTableName = getTableName(tables.edges);\n    // SQLite has no ADD COLUMN IF NOT EXISTS. Re-read and re-plan after each\n    // precisely classified duplicate-column race; two retries cover the two\n    // additive columns even when concurrent cold starts interleave both.\n    for (let attempt = 0; attempt < 3; attempt += 1) {\n      const columnRows = await executionAdapter.execute<{\n        name?: unknown;\n      }>(sql`PRAGMA table_info(${sql.identifier(edgeTableName)})`);\n      const columns = new Set(\n        columnRows.flatMap((row) =>\n          typeof row.name === \"string\" ? [row.name] : [],\n        ),\n      );\n      try {\n        for (const statement of planSqliteEdgeMatchIdentityAdoption(\n          edgeTableName,\n          columns,\n        )) {\n          await db.run(sql.raw(statement));\n        }\n        return;\n      } catch (error) {\n        if (\n          attempt === 2 ||\n          !isSqliteDuplicateEdgeMatchIdentityColumnError(error)\n        ) {\n          throw error;\n        }\n      }\n    }\n    throw new CompilerInvariantError(\n      \"SQLite match-identity adoption exhausted its retry loop without returning or throwing.\",\n    );\n  }\n\n  async function readBaseSchemaVersion(): Promise<number | undefined> {\n    try {\n      const rows = await db\n        .select({ version: tables.baseSchemaVersions.version })\n        .from(tables.baseSchemaVersions)\n        .where(eq(tables.baseSchemaVersions.installation, 1));\n      return rows.at(0)?.version;\n    } catch (error) {\n      if (isMissingTableError(error)) return undefined;\n      throw error;\n    }\n  }\n\n  async function writeBaseSchemaVersion(\n    version: number,\n  ): Promise<number | undefined> {\n    const marker = tables.baseSchemaVersions;\n    const timestamp = nowIso();\n    await db\n      .insert(marker)\n      .values({ installation: 1, version, updatedAt: timestamp })\n      .onConflictDoUpdate({\n        target: marker.installation,\n        set: { version, updatedAt: timestamp },\n        setWhere: lte(marker.version, version),\n      });\n    // Read back on this backend's primary connection: remote adapters do not\n    // all support RETURNING. The monotonic upsert plus same-primary read makes\n    // this two-statement observation safe when a concurrent adopter is ahead.\n    return readBaseSchemaVersion();\n  }\n\n  const provisioning: EngineProvisioning = {\n    executeDdl: async (ddl) => {\n      await db.run(sql.raw(ddl));\n    },\n    ensureTable: runDdlStatement,\n    generateDdl: () => generateSqliteDDL(tables, fulltextStrategy ?? false),\n    catalog: createSqliteCatalogProbes(\n      executionAdapter,\n      operationStrategy,\n      serializedQueue,\n    ),\n  };\n\n  // Deps for `createGraphTemplateMembers`, beyond `ensureTable`\n  // (`provisioning`) and `execute` (the operation layer's own `execute`,\n  // built once `createSqlBackend` has a contribution materializer to hand\n  // `buildOperations`).\n  const graphTemplateRuntime: GraphTemplateRuntime = {\n    graphTemplatesTableDdl: generateSqliteCreateTableSQL(tables.graphTemplates),\n    tableNames: {\n      schemaVersions: getTableName(tables.schemaVersions),\n      graphTemplates: getTableName(tables.graphTemplates),\n      contributionMaterializations: getTableName(\n        tables.contributionMaterializations,\n      ),\n    },\n    instantiateStatement: (params, execute) =>\n      execute(\n        asCompiledRowsSql(sqliteInstantiateGraphTemplateStatement(params)),\n      ),\n    toSchemaVersionRow,\n    rowAccess: {\n      async insertIgnoringConflict(params) {\n        const t = tables.graphTemplates;\n        await db\n          .insert(t)\n          .values({\n            templateId: params.templateId,\n            schemaHash: params.schemaHash,\n            schemaDoc: JSON.stringify(params.schemaDoc),\n            createdAt: nowIso(),\n          })\n          .onConflictDoNothing();\n      },\n      async selectByTemplateId(templateId) {\n        const t = tables.graphTemplates;\n        const templateRows = await db\n          .select()\n          .from(t)\n          .where(eq(t.templateId, templateId));\n        const row = templateRows.at(0);\n        if (row === undefined) return;\n        return {\n          templateId: row.templateId,\n          schemaHash: row.schemaHash,\n          schemaDoc: row.schemaDoc,\n          createdAt: row.createdAt,\n        };\n      },\n    },\n    // SQLite cannot put a data-modifying CTE beside the schema INSERT, so\n    // the marker copy runs as a second DML statement after the schema row\n    // is confirmed (see `graph-template-sql.ts`). Takes `execute` as a\n    // parameter rather than closing over the operation layer directly: this\n    // closure is profile head data built before that layer exists, and\n    // `createGraphTemplateMembers` passes its own already-resolved `execute`\n    // when it actually invokes this callback.\n    async copyContributionMarkers(execute, params) {\n      await execute<Record<string, unknown>>(\n        copyGraphTemplateContributionMarkersStatement(params),\n      );\n    },\n  };\n\n  // Deps for `createBaseSchemaMembers`, beyond `ensureTable`/`executeDdl`/\n  // `generateDdl` (`provisioning`) and `ensureGraphTemplatesTable` (from the\n  // graph-template member group `createSqlBackend` builds first).\n  const baseSchemaRuntime: BaseSchemaRuntime = {\n    baseSchemaVersionsTableDdl: generateSqliteCreateTableSQL(\n      tables.baseSchemaVersions,\n    ),\n    readVersion: readBaseSchemaVersion,\n    writeVersion: writeBaseSchemaVersion,\n    ensureEdgeMatchIdentityStorage,\n    fencesTableDdl: generateSqliteCreateTableSQL(tables.fences),\n    sinceIndexDdl: [\n      generateSqliteCreateTableSQL(tables.recordedNodes),\n      ...generateSqliteCreateIndexSQL(tables.recordedNodes),\n      generateSqliteCreateTableSQL(tables.recordedEdges),\n      ...generateSqliteCreateIndexSQL(tables.recordedEdges),\n      generateSqliteCreateTableSQL(tables.recordedIdentityAssertions),\n      ...generateSqliteCreateIndexSQL(tables.recordedIdentityAssertions),\n      ...sinceIndexAdoptionDdl({\n        recordedNodes: getTableName(tables.recordedNodes),\n        recordedEdges: getTableName(tables.recordedEdges),\n        recordedIdentityAssertions: getTableName(\n          tables.recordedIdentityAssertions,\n        ),\n      }),\n    ],\n  };\n\n  // Deps for `createIndexMaterializationMembers`, beyond `ensureTable`\n  // (`provisioning`) — SQLite has no additive-column migration to run.\n  const indexMaterializationRuntime: IndexMaterializationRuntime = {\n    indexMaterializationsTableDdl: generateSqliteCreateTableSQL(\n      tables.indexMaterializations,\n    ),\n    tableName: getTableName(tables.indexMaterializations),\n    timestamps: SQLITE_INDEX_MAT_TIMESTAMPS,\n    rowAccess: {\n      async selectByIndexName(indexName) {\n        const t = tables.indexMaterializations;\n        return db.select().from(t).where(eq(t.indexName, indexName));\n      },\n      async selectByIndexNames(indexNames) {\n        const t = tables.indexMaterializations;\n        return db\n          .select()\n          .from(t)\n          .where(inArray(t.indexName, [...indexNames]));\n      },\n      async upsert(params) {\n        const t = tables.indexMaterializations;\n        await db\n          .insert(t)\n          .values(\n            buildMaterializationInsertValues(\n              params,\n              SQLITE_INDEX_MAT_TIMESTAMPS.encode,\n            ),\n          )\n          .onConflictDoUpdate({\n            target: t.indexName,\n            set: buildMaterializationOnConflictSet(params.materializedAt),\n          });\n      },\n    },\n  };\n\n  // Deps for `createKindRemovalMembers`, beyond `ensureTable` (`provisioning`).\n  const kindRemovalRuntime: KindRemovalRuntime = {\n    kindRemovalsTableDdl: generateSqliteCreateTableSQL(tables.kindRemovals),\n    timestamps: SQLITE_KIND_REMOVAL_TIMESTAMPS,\n    rowAccess: {\n      async selectPending(graphId) {\n        const t = tables.kindRemovals;\n        return db\n          .select()\n          .from(t)\n          .where(and(eq(t.graphId, graphId), isNull(t.removedAt)));\n      },\n      async selectAll(graphId) {\n        const t = tables.kindRemovals;\n        return db.select().from(t).where(eq(t.graphId, graphId));\n      },\n      async upsert(params: RecordKindRemovalParams) {\n        const t = tables.kindRemovals;\n        await db\n          .insert(t)\n          .values(\n            buildKindRemovalInsertValues(\n              params,\n              SQLITE_KIND_REMOVAL_TIMESTAMPS.encode,\n            ),\n          )\n          .onConflictDoUpdate({\n            target: [t.graphId, t.kindName, t.entity, t.schemaVersion],\n            set: buildKindRemovalOnConflictSet(t.removedAt, params.removedAt),\n          });\n      },\n    },\n  };\n\n  function lateMembers(\n    ctx: EngineAssemblyContext<AnySqliteDatabase>,\n  ): EngineLateMembers<AnySqliteDatabase> {\n    // The factory's finalized capabilities, resolved fence plan, and\n    // first-party standing — resolved once by `createSqlBackend`, never\n    // re-derived here. Aliased to bare names so every existing\n    // capabilities-gated call below reads exactly as it did when this\n    // dialect built its own (stale-prone) copy.\n    const { capabilities, fencePlan, fenceTarget, isFirstParty } = ctx;\n    const nativeRootClient = (db as Readonly<{ $client?: unknown }>).$client;\n    const supportsSchemaWriteAdoption =\n      transactionMode !== \"none\" && transactionMode !== \"do-sqlite\" &&\n      typeof nativeRootClient === \"object\" && nativeRootClient !== null &&\n      \"inTransaction\" in nativeRootClient;\n\n    /**\n     * #140: the `transactionMode: \"do-sqlite\"` primitive. Cloudflare\n     * Durable Objects expose an async storage transaction runner —\n     * `ctx.storage.transaction(async () => ...)`, surfaced by Drizzle as\n     * `db.$client.transaction` — that rolls back SQL writes across\n     * `await`. There is no Drizzle tx handle on DO: the storage\n     * transaction is ambient on the object, so callers bind the *outer*\n     * `db` (as the \"sql\" path binds the outer connection). Drizzle's own\n     * `db.transaction()` here is `ctx.storage.transactionSync` and cannot\n     * span an await, so it is deliberately not used. Shared by\n     * `transaction()` (business writes) and `runSchemaWriteTransaction()`.\n     * Ordinary schema-version commits are data-only; administrative removal\n     * cleanup may execute transaction-scoped DDL.\n     */\n    function runDoSqliteStorageTransaction<T>(\n      run: () => Promise<T>,\n    ): Promise<T> {\n      const storage = getDurableObjectStorageClient(db);\n      if (storage === undefined) {\n        throwSqliteTransactionsDisabled(\n          \"transactionMode 'do-sqlite' requires a Drizzle Durable Objects \" +\n            \"database (drizzle(ctx.storage)) whose `$client` exposes the SQL, \" +\n            \"transactionSync, and async transaction runners.\",\n        );\n      }\n      return runWithSerializedQueue(serializedQueue, () =>\n        storage.transaction(run),\n      );\n    }\n\n    /**\n     * Executes a transaction-frame statement (BEGIN IMMEDIATE / COMMIT /\n     * ROLLBACK) through the prepared-statement cache when the driver has one.\n     * These are the hottest statements on the per-write path (every single\n     * write is its own transaction). Local libsql also uses \"sql\" transaction\n     * mode but is async (no compiled path) and keeps the drizzle fallback.\n     */\n    async function runFrameStatement(query: SQL): Promise<void> {\n      const compiledRun = executionAdapter.executeCompiledRun;\n      if (compiledRun === undefined) {\n        await db.run(query);\n        return;\n      }\n      await compiledRun(executionAdapter.compile(query));\n    }\n\n    /**\n     * Rolls the manually framed transaction back on the failure path WITHOUT ever\n     * throwing: the caller rethrows the original error immediately after.\n     *\n     * SQLite rolls a transaction back by itself on some errors (SQLITE_FULL,\n     * SQLITE_IOERR, SQLITE_NOMEM), so by the time this runs the frame can already\n     * be gone and the ROLLBACK fails with \"cannot rollback - no transaction is\n     * active\". A bare `await ROLLBACK; throw error` replaces the caller's\n     * actionable failure (\"disk image is malformed\") with that secondary one and\n     * never reaches its own rethrow — the masking that `closeAfterFailure` and the\n     * index-materialization claim release exist to prevent, applied here too.\n     *\n     * The two reasons a ROLLBACK can fail are NOT told apart here, deliberately.\n     * SQLite reports the already-closed frame only as a message (\"cannot rollback\n     * - no transaction is active\"), with no result code that distinguishes it, so\n     * a classifier would have to match text through whatever wrapper the driver\n     * applied — and it would buy nothing, because the handling is identical\n     * either way: never mask the caller's error, always report. The report\n     * therefore states both possibilities rather than asserting the benign one,\n     * so an operator reading the log is not told \"nothing is leaked\" about a\n     * failure that did leave the frame open. When it did, nothing here can close\n     * it (the statement that would is the one that just failed) and the next\n     * BEGIN on this connection fails loudly rather than silently joining it.\n     */\n    async function rollbackFrameQuietly(): Promise<void> {\n      try {\n        await runFrameStatement(sql`ROLLBACK`);\n      } catch (rollbackError) {\n        console.warn(\n          \"typegraph: ROLLBACK failed while unwinding a failed SQLite \" +\n            \"transaction; the original failure is the one thrown. Either the \" +\n            \"frame was already closed (SQLite auto-rolls-back on SQLITE_FULL / \" +\n            \"SQLITE_IOERR / SQLITE_NOMEM) and nothing is leaked, or it is still \" +\n            \"open on this connection, in which case the next BEGIN here fails.\",\n          rollbackError,\n        );\n      }\n    }\n\n    /**\n     * Runs `fn` inside a SQLite write transaction (BEGIN IMMEDIATE) so that\n     * the read-then-write inside `commitSchemaVersion` / `setActiveVersion`\n     * is serialized against concurrent writers — a deferred BEGIN would let\n     * two transactions race past the CAS read and one would later fail\n     * with SQLITE_BUSY instead of producing a clean StaleVersionError. The\n     * same BEGIN IMMEDIATE already owns SQLite's serialized writer slot for\n     * `commitSchemaVersionIfKindsEmpty`'s populated-kind counts and its final\n     * schema CAS, so that multi-statement read-then-write shares this one\n     * ordinary-write fence too, with no locking of its own to add.\n     *\n     * Refuses on `transactionMode: \"none\"`. The orphan-row crash window\n     * cannot be eliminated without atomicity.\n     *\n     * Never wrapped in `runRetriedUnit`, unlike PostgreSQL's own\n     * `runSchemaWriteTransaction`: every path above takes SQLite's writer\n     * slot (`BEGIN IMMEDIATE`, or the Durable Object storage transaction)\n     * BEFORE the fence row's own statement ever runs, so a second acquirer\n     * WAITS for the slot rather than racing to a commit-time conflict at\n     * COMMIT. That holds even under a declaration naming `conflict:\n     * \"commit-time\"` — `capabilities.execution.unitOfWork` could still\n     * derive `\"optimistic-retry\"` for this backend, but no commit-time\n     * failure the retry would ever catch can occur here to retry.\n     */\n    function runSchemaWriteTransaction<T>(\n      fn: (tx: InternalOperationBackend) => Promise<T>,\n    ): Promise<T> {\n      if (transactionMode === \"none\") {\n        const verdict = resolveBatchWriteVerdict(ctx.self(), {\n          needs: \"schema-commit\",\n        });\n        throwSqliteTransactionsDisabled(\n          \"Schema writes and removal cleanup require atomic transactions, \" +\n            \"but this SQLite backend has transactions disabled. Configure a \" +\n            \"driver that supports transactions (better-sqlite3, libsql, \" +\n            \"bun:sqlite) to use schema commits.\" +\n            batchRefusalSuffix(verdict),\n          batchRefusalDetails(verdict),\n        );\n      }\n\n      if (transactionMode === \"sql\") {\n        return runWithSerializedQueue(serializedQueue, async () => {\n          // Write-lock is held here, so the schema-write-capable\n          // InternalOperationBackend is used intentionally (see its type).\n          const txBackend = createTransactionBackend({\n            capabilities,\n            db,\n            executionAdapter,\n            operationStrategy,\n            profileHints: { isSync },\n            tableNames,\n            fulltextStrategy,\n            vectorStrategy,\n            contributionMaterializer: ctx.contributionMaterializer,\n            fenceTarget,\n            lineage: provisioning.lineage,\n            recordedTime: provisioning.recordedTime,\n            isFirstParty,\n          });\n          await runFrameStatement(sql`BEGIN IMMEDIATE`);\n          try {\n            const result = await fn(txBackend);\n            await runFrameStatement(sql`COMMIT`);\n            return result;\n          } catch (error) {\n            await rollbackFrameQuietly();\n            throw error;\n          }\n        });\n      }\n\n      if (transactionMode === \"do-sqlite\") {\n        // No interactive lock-mode control on the DO storage runner; the\n        // serialized queue (always present — DO is sync) provides the\n        // single-writer ordering that \"immediate\" gives the other paths.\n        // Raw txBackend (no `gateFulltext`, unlike the business\n        // `transaction()` do-sqlite branch). Schema-version commits remain\n        // data-only; administrative removal cleanup may use the target's\n        // transaction-scoped DDL primitive.\n        return runDoSqliteStorageTransaction(async () => {\n          const txBackend = createTransactionBackend({\n            capabilities,\n            db,\n            operationStrategy,\n            profileHints: { isSync },\n            tableNames,\n            fulltextStrategy,\n            vectorStrategy,\n            contributionMaterializer: ctx.contributionMaterializer,\n            fenceTarget,\n            lineage: provisioning.lineage,\n            recordedTime: provisioning.recordedTime,\n            isFirstParty,\n          });\n          return fn(txBackend);\n        });\n      }\n\n      // transactionMode === \"drizzle\". Drizzle's sqlite-core transaction\n      // accepts a `behavior` option that maps to BEGIN / BEGIN IMMEDIATE /\n      // BEGIN EXCLUSIVE; \"immediate\" is what we need to acquire a reserved\n      // write lock at the start of the transaction.\n      return runWithSerializedQueue(\n        serializedQueue,\n        async () =>\n          db.transaction(\n            async (tx) => {\n              const txBackend = createTransactionBackend({\n                capabilities,\n                db: tx,\n                operationStrategy,\n                profileHints: { isSync },\n                tableNames,\n                fulltextStrategy,\n                vectorStrategy,\n                contributionMaterializer: ctx.contributionMaterializer,\n                fenceTarget,\n                lineage: provisioning.lineage,\n                recordedTime: provisioning.recordedTime,\n                isFirstParty,\n              });\n              return fn(txBackend);\n            },\n            { behavior: \"immediate\" },\n          ) as Promise<T>,\n      );\n    }\n\n    // Shared by the \"drizzle\"/\"do-sqlite\" branches of `transaction()`\n    // (TypeGraph opens the tx) and `adoptTransaction()` (#134 — the caller\n    // already opened it): bind a tx-scoped backend to the *literal* `tx`\n    // client and gate fulltext on the durable marker (a cached SELECT,\n    // never DDL). `txIsFirstParty` is threaded explicitly rather than\n    // closing over the outer `isFirstParty` alias: `adoptTransaction`\n    // passes `false` regardless of this profile's own standing, since an\n    // adopted transaction's lifetime is the caller's, not one TypeGraph has\n    // audited.\n    function bindTransactionBackend(\n      tx: AnySqliteDatabase,\n      txIsFirstParty: boolean,\n    ): TransactionBackend {\n      const txBackend = createTransactionBackend({\n        capabilities,\n        db: tx,\n        operationStrategy,\n        profileHints: { isSync },\n        tableNames,\n        fulltextStrategy,\n        vectorStrategy,\n        contributionMaterializer: ctx.contributionMaterializer,\n        fenceTarget,\n        lineage: provisioning.lineage,\n        recordedTime: provisioning.recordedTime,\n        isFirstParty: txIsFirstParty,\n      });\n      return gateFulltext(\n        txBackend,\n        ctx.contributionMaterializer.assertInitialized,\n        ctx.contributionMaterializer.refuseUnavailableFulltext,\n      );\n    }\n\n    function bindPrivilegedTransactionBackend(\n      tx: AnySqliteDatabase,\n    ): InternalOperationBackend {\n      return createTransactionBackend({\n        capabilities,\n        db: tx,\n        operationStrategy,\n        profileHints: { isSync },\n        tableNames,\n        fulltextStrategy,\n        vectorStrategy,\n        contributionMaterializer: ctx.contributionMaterializer,\n        fenceTarget,\n        lineage: provisioning.lineage,\n        recordedTime: provisioning.recordedTime,\n        isFirstParty: false,\n      });\n    }\n\n    return {\n      transactions: {\n        async transaction<T>(\n          fn: (tx: TransactionBackend) => Promise<T>,\n          options?: InternalTransactionOptions,\n        ): Promise<T> {\n          return ctx.self().transactionWithNative((tx) => fn(tx), options);\n        },\n\n        async transactionWithNative<T>(\n          fn: (tx: TransactionBackend, sql: AnySqliteDatabase) => Promise<T>,\n          options?: InternalTransactionOptions,\n        ): Promise<T> {\n          const temporaryWrites =\n            options?.temporaryWrites === INTERNAL_TEMPORARY_WRITES;\n          if (temporaryWrites && options.accessMode !== \"read_only\") {\n            throw new ConfigurationError(\n              \"Temporary-write transactions must be semantically read-only.\",\n              { dialect: \"sqlite\" },\n            );\n          }\n          if (transactionMode === \"none\") {\n            throwSqliteTransactionsDisabled(\n              \"This SQLite backend does not support atomic transactions. \" +\n                \"Operations within a transaction are not rolled back on failure. \" +\n                \"Use backend.capabilities.execution.interactiveTransactions to check for transaction support, \" +\n                \"or use individual operations with manual error handling.\",\n            );\n          }\n\n          // #134/#135: NO DDL or ensure here. The tx-scoped backend\n          // exposes raw fulltext methods without self-ensure wrappers; the\n          // single gate is `Store.transaction()`, which asserts the durable\n          // contribution marker (one cached SELECT) before this method is\n          // reached. The caller's BEGIN never carries CREATE statements.\n          if (transactionMode === \"sql\") {\n            return runWithSerializedQueue(serializedQueue, async () => {\n              // Not `bindTransactionBackend(...)`: this path frames the tx\n              // with manual BEGIN/COMMIT on the *outer* `db`, so it must\n              // reuse that connection's already-built `executionAdapter`\n              // rather than synthesize a fresh one for a distinct handle.\n              // Serves sync drivers AND local libsql connections: both keep\n              // one stable connection, where raw BEGIN/COMMIT composes and\n              // Drizzle's `db.transaction()` (which for libsql abandons the\n              // client's connection — fatal for `:memory:`) must be avoided.\n              const txBackend = createTransactionBackend({\n                capabilities,\n                db,\n                executionAdapter,\n                operationStrategy,\n                profileHints: { isSync },\n                tableNames,\n                fulltextStrategy,\n                vectorStrategy,\n                contributionMaterializer: ctx.contributionMaterializer,\n                fenceTarget,\n                lineage: provisioning.lineage,\n                recordedTime: provisioning.recordedTime,\n                isFirstParty,\n              });\n              // Read-only multi-statement operations need one snapshot but must not\n              // reserve SQLite's single writer slot. Business transactions retain\n              // BEGIN IMMEDIATE so read-then-write cannot lose a lock-upgrade race.\n              await runFrameStatement(\n                options?.accessMode === \"read_only\" || temporaryWrites ?\n                  sql`BEGIN`\n                : sql`BEGIN IMMEDIATE`,\n              );\n\n              try {\n                const result = await fn(\n                  markSchemaFencedInsertEligibleUnderFence(\n                    gateFulltext(\n                      txBackend,\n                      ctx.contributionMaterializer.assertInitialized,\n                      ctx.contributionMaterializer.refuseUnavailableFulltext,\n                    ),\n                    fencePlan,\n                  ),\n                  db,\n                );\n                await runFrameStatement(sql`COMMIT`);\n                return result;\n              } catch (error) {\n                await rollbackFrameQuietly();\n                throw error;\n              }\n            });\n          }\n\n          if (transactionMode === \"do-sqlite\") {\n            return runDoSqliteStorageTransaction(async () =>\n              fn(\n                markSchemaFencedInsertEligibleUnderFence(\n                  bindTransactionBackend(db, isFirstParty),\n                  fencePlan,\n                ),\n                db,\n              ),\n            );\n          }\n\n          // transactionMode === \"drizzle\". Read-only work uses a deferred snapshot;\n          // business transactions retain BEGIN IMMEDIATE for safe lock upgrades.\n          return runWithSerializedQueue(\n            serializedQueue,\n            async () =>\n              db.transaction(\n                async (tx) =>\n                  fn(\n                    markSchemaFencedInsertEligibleUnderFence(\n                      bindTransactionBackend(tx, isFirstParty),\n                      fencePlan,\n                    ),\n                    tx,\n                  ),\n                {\n                  behavior:\n                    options?.accessMode === \"read_only\" || temporaryWrites ?\n                      \"deferred\"\n                    : \"immediate\",\n                },\n              ) as Promise<T>,\n          );\n        },\n\n        adoptTransaction(externalTx: AnySqliteDatabase): TransactionBackend {\n          // #134: parity with Postgres. Cross-store atomicity needs real\n          // rollback; on a \"none\" driver the caller's relational write\n          // would commit with no way to undo the graph write. Refuse\n          // loudly rather than silently degrade.\n          if (transactionMode === \"none\") {\n            throwSqliteTransactionsDisabled(\n              \"Cross-store atomicity is unavailable on this SQLite backend: \" +\n                \"transactions are disabled (transactionMode: 'none'). Adopting \" +\n                \"an external transaction here would let the caller's relational \" +\n                \"write commit with no way to roll back the graph write. \" +\n                \"Configure a driver that supports transactions (better-sqlite3, \" +\n                \"libsql, bun:sqlite).\",\n            );\n          }\n          assertAdoptedDialect<AnySqliteDatabase>(\n            externalTx,\n            BaseSQLiteDatabase,\n            \"sqlite\",\n          );\n          // serializedQueue is deliberately NOT applied to an adopted tx: a\n          // sync better-sqlite3 driver runs the adopted statements on the\n          // caller's stack, so wrapping a caller-driven tx in our queue\n          // could deadlock against the caller's outer `db.transaction(...)`.\n          // `false` regardless of this profile's own first-party standing:\n          // the caller opened this transaction, its lifetime is not one\n          // TypeGraph has audited, and it must not qualify for the\n          // dialect-derivation fallback or the lazy schema-fence lease.\n          return bindTransactionBackend(externalTx, false);\n        },\n\n        ...(\n          supportsSchemaWriteAdoption ?\n            { adoptSchemaWriteTransaction: async function adoptSchemaWriteTransaction(\n          externalTx: AnySqliteDatabase,\n          graphId: string,\n          options: Readonly<{ waitBudgetMs: number }>,\n        ): Promise<AdoptedSchemaWriteTransaction> {\n          if (!Number.isSafeInteger(options.waitBudgetMs) || options.waitBudgetMs <= 0) {\n            throw new ConfigurationError(\n              \"Schema fence waitBudgetMs must be a positive finite integer.\",\n              { waitBudgetMs: options.waitBudgetMs },\n            );\n          }\n          assertAdoptedDialect<AnySqliteDatabase>(\n            externalTx,\n            BaseSQLiteDatabase,\n            \"sqlite\",\n          );\n\n          // SQLite has no SQL transaction-state query. The official sync\n          // client's inTransaction fact belongs to the exact connection this\n          // Drizzle transaction/session will execute on. A transaction-shaped\n          // object or a successful zero-row UPDATE alone proves neither fact.\n          const rootClient = (db as Readonly<{ $client?: unknown }>).$client;\n          const transactionClient =\n            externalTx instanceof SQLiteTransaction ?\n              (externalTx as unknown as Readonly<{\n                session?: Readonly<{ client?: unknown }>;\n              }>).session?.client\n            : (externalTx as Readonly<{ $client?: unknown }>).$client;\n          if (\n            typeof rootClient !== \"object\" || rootClient === null ||\n            rootClient !== transactionClient ||\n            !(\"inTransaction\" in rootClient) ||\n            rootClient.inTransaction !== true\n          ) {\n            throw new ConfigurationError(\n              \"Schema adoption requires the active transaction on this backend's exact SQLite connection.\",\n              { capability: \"sqliteClient.inTransaction\", transactionMode },\n            );\n          }\n\n          const backend = bindPrivilegedTransactionBackend(externalTx);\n          if (!(await backend.tableExists(tableNames.nodes))) {\n            throw new ConfigurationError(\n              \"Schema adoption requires TypeGraph bootstrap storage before the caller transaction.\",\n              { tableName: tableNames.nodes },\n            );\n          }\n          const [busyTimeout] = await externalTx.all<{ timeout: number }>(\n            sql`PRAGMA busy_timeout`,\n          );\n          if (busyTimeout === undefined || !Number.isFinite(busyTimeout.timeout)) {\n            throw new ConfigurationError(\n              \"This SQLite driver cannot report its busy_timeout for bounded schema adoption.\",\n              { capability: \"sqlite.busy_timeout\" },\n            );\n          }\n          const effectiveTimeout =\n            Math.min(busyTimeout.timeout, options.waitBudgetMs);\n          await externalTx.run(sql.raw(`PRAGMA busy_timeout = ${effectiveTimeout}`));\n          const deadline = performance.now() + options.waitBudgetMs;\n          let slotError: unknown;\n          try {\n            // On a DEFERRED caller transaction this no-op UPDATE reserves the\n            // one SQLite writer slot; in autocommit it would be meaningless,\n            // which is why the native inTransaction witness came first.\n            await backend.executeStatement(\n              engineSerializedWriterSlotStatement(\n                portableSql.identifier(tableNames.nodes),\n              ),\n            );\n          } catch (error) {\n            slotError = error;\n          }\n          try {\n            // busy_timeout belongs to the connection, not the transaction;\n            // even a failed or rolled-back frame must leave it unchanged.\n            await externalTx.run(sql.raw(`PRAGMA busy_timeout = ${busyTimeout.timeout}`));\n          } catch (restoreError) {\n            throw new ConfigurationError(\n              \"Could not restore the SQLite connection's busy_timeout after schema fencing.\",\n              { graphId, previousBusyTimeout: busyTimeout.timeout },\n              { cause: restoreError },\n            );\n          }\n          if (slotError !== undefined) {\n            if (isSqliteWriterSlotBusy(slotError)) {\n              throw new SchemaFenceTimeoutError(\n                graphId,\n                \"writer-slot\",\n                options.waitBudgetMs,\n                slotError,\n              );\n            }\n            throw slotError;\n          }\n          if (performance.now() >= deadline) {\n            throw new SchemaFenceTimeoutError(\n              graphId,\n              \"writer-slot\",\n              options.waitBudgetMs,\n            );\n          }\n          const activeSchema = await backend.getActiveSchema(graphId);\n          return {\n            backend: Object.defineProperty(backend, \"ensureVectorSlotContributions\", {\n              value: (slots: readonly VectorSlot[], slotOptions?: Readonly<{ onDrift?: \"throw\" | \"skip\" }>) =>\n                ensureAdoptedVectorSlots(backend, slots, slotOptions, {\n                  dialect: \"sqlite\",\n                  fenceTarget,\n                  vectorStrategy,\n                  fulltextStrategy,\n                  fulltextTableName: tables.fulltextTableName,\n                  markerTableName: getTableName(tables.contributionMaterializations),\n                  decodeMarkerTimestamp: SQLITE_CONTRIBUTION_MAT_TIMESTAMPS.decode,\n                }),\n              enumerable: true,\n            }) as unknown as AdoptedSchemaWriteTransaction[\"backend\"],\n            activeSchema,\n          };\n        } }\n          : {}\n        ),\n\n        async schemaWriteTransaction<T>(\n          _graphId: string,\n          fn: (tx: SchemaWriteTransactionBackend) => Promise<T>,\n        ): Promise<T> {\n          return runSchemaWriteTransaction((target) => fn(target));\n        },\n      },\n\n      fence: {\n        // The graph id is unused — this backend's schema lock is per\n        // connection, not per graph — but the signature stays uniform with\n        // PostgreSQL's, which does lock the named graph's schema row.\n        runSchemaWriteTransaction: (_graphId, fn) =>\n          runSchemaWriteTransaction(fn),\n      },\n\n      rawSql: {\n        execute: ctx.operations.execute,\n        ...(ctx.operations.executeRaw === undefined ?\n          {}\n        : { executeRaw: ctx.operations.executeRaw }),\n      },\n\n      maintenance: {\n        async refreshStatistics(): Promise<void> {\n          // `ANALYZE` populates `sqlite_stat1`. With no stat table, the\n          // planner falls back to heuristics that, at least for FTS5\n          // virtual-table queries and multi-column index selection, can be\n          // an order of magnitude slower. Running it explicitly makes the\n          // planner data-driven.\n          //\n          // Scoped to TypeGraph-managed tables only (matching the Postgres\n          // backend) — a bare `ANALYZE` touches every table in the database\n          // file, including unrelated ones sharing it. Bounded by\n          // `analysis_limit` (see its doc comment) so cost stays roughly\n          // constant per call regardless of table size — the value is a\n          // fixed internal constant, not user input, so inlining it via\n          // `sql.raw` is safe; SQLite's `PRAGMA` does not accept bound\n          // parameters for its value.\n          try {\n            await db.run(\n              toDrizzleSql(\n                portableSql`PRAGMA analysis_limit = ${portableSql.raw(String(SQLITE_ANALYZE_ROW_LIMIT))}`,\n                \"sqlite\",\n              ),\n            );\n          } catch (error) {\n            // Cloudflare D1 and Durable Object SQLite reject this performance-only\n            // tuning PRAGMA through their authorizer. Continue with scoped ANALYZE,\n            // which workerd permits, but keep every unexpected failure loud.\n            if (!isSqliteNotAuthorizedError(error)) throw error;\n          }\n          for (const tableName of coreAnalyzeTables) {\n            await db.run(\n              toDrizzleSql(\n                portableSql`ANALYZE ${portableSql.identifier(tableName)}`,\n                \"sqlite\",\n              ),\n            );\n          }\n          // The recorded and identity relations may be absent on a schema\n          // created before recorded-time history or Operational Identity landed\n          // (bring-your-own-connection, no DDL re-run); ANALYZE on a missing\n          // table errors, so skip those.\n          for (const tableName of guardedAnalyzeTables) {\n            try {\n              await db.run(\n                toDrizzleSql(\n                  portableSql`ANALYZE ${portableSql.identifier(tableName)}`,\n                  \"sqlite\",\n                ),\n              );\n            } catch (error) {\n              if (!isMissingTableError(error)) throw error;\n            }\n          }\n        },\n      },\n\n      ...((\n        isSync &&\n        transactionMode === \"sql\" &&\n        executionAdapter.executePreparedRunBatch !== undefined\n      ) ?\n        {\n          async trustedImport<T>(\n            fn: (session: TrustedImportSession) => Promise<T>,\n            options_?: TrustedImportOptions,\n          ): Promise<T> {\n            return ctx.self().transaction(async (tx) => {\n              if (options_?.schemaWrite !== undefined) {\n                await requireDefined(tx.lockSchemaVersionForWrite)({\n                  ...options_.schemaWrite,\n                });\n              }\n              await assertTrustedImportDatabaseEmpty(tx, tableNames);\n              const indexDefinitions = await suspendSqliteSecondaryIndexes(\n                tx,\n                tableNames,\n              );\n              const result = await fn(\n                createSqliteTrustedImportSession(executionAdapter, tableNames),\n              );\n              await restoreSecondaryIndexes(tx, indexDefinitions);\n              await analyzeImportedTables(tx, tableNames);\n              return result;\n            });\n          },\n        }\n      : {}),\n\n      extensions: {\n        ensureEdgeMatchIdentityStorage,\n      },\n    };\n  }\n\n  // Assigned to an explicitly typed `const` rather than passed to\n  // `registerFirstPartyProfile` as an inline literal: excess-property\n  // checking only runs against a fresh object literal assigned to a KNOWN\n  // type, and `registerFirstPartyProfile<T extends object>` would otherwise\n  // infer `T` from the literal itself, checking nothing. Registered by\n  // object identity on the exact object returned below — so\n  // `createSqlBackend` marks this backend and its fence target first-party\n  // — rather than by a field a copy or spread could carry forward.\n  const profile: SqlEngineProfile<AnySqliteDatabase> = {\n    dialect: \"sqlite\",\n    tableNames,\n    execution: executionAdapter,\n    strategy: operationStrategy,\n    fulltext: fulltextStrategy,\n    vector: vectorStrategy,\n    declaredCapabilities,\n    schemaProvisioning: resolveSchemaProvisioning(options.schemaProvisioning),\n    resourceAudit,\n    autocommit: { singleStatementDurable: true },\n    provisioning,\n    contributionRuntime,\n    identityRuntime,\n    graphTemplateRuntime,\n    baseSchemaRuntime,\n    indexMaterializationRuntime,\n    kindRemovalRuntime,\n    close(): Promise<void> {\n      serializedQueue?.dispose();\n      return Promise.resolve();\n    },\n    assembly: assembleEngine({ buildOperations, lateMembers }),\n  };\n  return registerFirstPartyProfile(profile);\n}\n\nfunction createTransactionBackend(\n  options: CreateSqliteTransactionBackendOptions,\n): InternalOperationBackend {\n  const txExecutionAdapter =\n    options.executionAdapter ??\n    createSqliteExecutionAdapter(options.db, {\n      profileHints: options.profileHints,\n    });\n\n  // The transaction-scoped backend shares the outer backend's\n  // contribution materializer: the per-field vector table is provisioned\n  // (DDL) only by the privileged outer backend, so a tx-scoped vector op\n  // only ASSERTS the durable marker (SELECT, never DDL) and can't poison\n  // anything on rollback. The shared per-instance cache means a slot\n  // confirmed once stays a pure `Set.has` inside every later transaction.\n  const txBackend = createSqliteOperationBackend({\n    capabilities: downgradeAtomicBatch(options.capabilities),\n    db: options.db,\n    executionAdapter: txExecutionAdapter,\n    operationStrategy: options.operationStrategy,\n    tableNames: options.tableNames,\n    fulltextStrategy: options.fulltextStrategy,\n    vectorStrategy: options.vectorStrategy,\n    contributionMaterializer: options.contributionMaterializer,\n    transactionScoped: true,\n    fenceTarget: options.fenceTarget,\n    lineage: options.lineage,\n    recordedTime: options.recordedTime,\n  });\n  return options.isFirstParty ? markFirstPartyFactory(txBackend) : txBackend;\n}\n\n// Re-export schema utilities\nexport type { SqliteTableNames, SqliteTables } from \"./schema/sqlite\";\nexport { createSqliteTables, tables } from \"./schema/sqlite\";\n"]}