@sequenceholdings/orm 2.6.2 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -1
- package/dist/cli.cjs +81 -29
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +81 -29
- package/dist/cli.js.map +1 -1
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +4 -1
- package/dist/client.d.ts +4 -1
- package/dist/client.js.map +1 -1
- package/dist/compiler.cjs +68 -29
- package/dist/compiler.cjs.map +1 -1
- package/dist/compiler.js +68 -29
- package/dist/compiler.js.map +1 -1
- package/dist/index.cjs +73 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -4
- package/dist/index.d.ts +6 -4
- package/dist/index.js +72 -5
- package/dist/index.js.map +1 -1
- package/dist/ir.cjs +19 -3
- package/dist/ir.cjs.map +1 -1
- package/dist/ir.d.cts +13 -6
- package/dist/ir.d.ts +13 -6
- package/dist/ir.js +18 -4
- package/dist/ir.js.map +1 -1
- package/dist/predicate-v2.cjs +24 -2
- package/dist/predicate-v2.cjs.map +1 -1
- package/dist/predicate-v2.d.cts +4 -0
- package/dist/predicate-v2.d.ts +4 -0
- package/dist/predicate-v2.js +24 -2
- package/dist/predicate-v2.js.map +1 -1
- package/dist/sdl.cjs +16 -2
- package/dist/sdl.cjs.map +1 -1
- package/dist/sdl.js +16 -2
- package/dist/sdl.js.map +1 -1
- package/package.json +1 -1
- package/src/codegen-gql/preset.cjs +45 -8
- package/templates/orm-namespace/codegen.ts +5 -0
package/dist/sdl.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/compiler/sql.ts","../src/checks/compile.ts","../src/constants.ts","../src/canonical/policy.ts","../src/canonical/resolved.ts","../src/canonical/v2.ts","../src/sdl/naming.ts","../src/client/sql.ts","../src/ir/index.ts","../src/errors.ts","../src/hash.ts","../src/canonical/composition.ts","../src/sdl/generate.ts","../src/codegen-gql/errors.ts","../src/codegen-gql/manifest.ts","../src/codegen-gql/type-policies.ts"],"names":["identifier","column","z","index","GRAPHQL_NAME_RE","createHash"],"mappings":"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","file":"sdl.js","sourcesContent":["/** Claims are stamped per transaction by the Data API (`set_config('request.jwt.claims', …, true)`). */\nexport const CLAIMS_SETTING = 'request.jwt.claims'\n\n/** Claims JSON key holding the caller's granted capability pins (a string array). */\nexport const CAPABILITIES_CLAIM_KEY = 'capabilities'\n\n/** Claims JSON key holding the caller's granted custom roles (a string array). */\nexport const ROLES_CLAIM_KEY = 'roles'\n\nexport const quoteIdentifier = (name: string): string => `\"${name.replaceAll('\"', '\"\"')}\"`\n\nexport const quoteLiteral = (value: string): string => `'${value.replaceAll(\"'\", \"''\")}'`\n\n/** `nullif(…, '')` because a session that ever set the GUC reverts it to '' (not NULL) after the transaction — ''::jsonb is an error. */\nconst CLAIMS_SOURCE = `nullif(current_setting('${CLAIMS_SETTING}', true), '')::jsonb`\n\nexport const claimExpression = (key: string): string => `(${CLAIMS_SOURCE} ->> ${quoteLiteral(key)})`\n\n/** NULL claims (or a missing capabilities array) coalesce to false — capability checks fail closed. */\nconst scopedClaimsSource = (namespace?: string): string => namespace\n ? `(CASE WHEN ${CLAIMS_SOURCE} ? 'namespaces' THEN ${CLAIMS_SOURCE} -> 'namespaces' -> ${quoteLiteral(namespace)} ELSE ${CLAIMS_SOURCE} END)`\n : CLAIMS_SOURCE\n\nexport const capabilityExpression = (key: string, namespace?: string): string =>\n `coalesce(${scopedClaimsSource(namespace)} -> '${CAPABILITIES_CLAIM_KEY}' ? ${quoteLiteral(key)}, false)`\n\n/** NULL claims (or a missing roles array) coalesce to false — role checks fail closed. */\nexport const roleExpression = (key: string, namespace?: string): string =>\n `coalesce(${scopedClaimsSource(namespace)} -> '${ROLES_CLAIM_KEY}' ? ${quoteLiteral(key)}, false)`\n","import { quoteIdentifier, quoteLiteral } from '../compiler/sql.js'\n\n/** A deliberately small, data-only SQL predicate subset for PostgreSQL CHECK constraints. */\ntype Column = { name: string; columnName: string; type: string | { enum: string } }\ntype TokenKind = 'identifier' | 'string' | 'number' | 'operator' | 'lparen' | 'rparen' | 'comma' | 'end'\ntype Token = { kind: TokenKind; value: string; position: number }\ntype Value = { sql: string; column?: Column; literal?: boolean }\n\nfunction tokenize(source: string): Token[] {\n const tokens: Token[] = []\n for (let position = 0; position < source.length;) {\n const char = source[position]!\n if (/\\s/.test(char)) { position++; continue }\n if (char === '(' || char === ')' || char === ',') {\n tokens.push({ kind: char === '(' ? 'lparen' : char === ')' ? 'rparen' : 'comma', value: char, position })\n position++\n continue\n }\n if (char === \"'\") {\n const start = position++\n let value = ''\n let closed = false\n while (position < source.length) {\n if (source[position] !== \"'\") { value += source[position++]; continue }\n if (source[position + 1] === \"'\") { value += \"'\"; position += 2; continue }\n position++\n closed = true\n break\n }\n if (!closed) throw new Error(`unterminated string at position ${start}`)\n if (/[\\x00-\\x1f\\x7f]/.test(value)) throw new Error(`control character in string at position ${start}`)\n tokens.push({ kind: 'string', value, position: start })\n continue\n }\n const operator = /^(<=|>=|<>|!=|!~|=|<|>|~)/.exec(source.slice(position))\n if (operator) {\n tokens.push({ kind: 'operator', value: operator[0] === '<>' ? '!=' : operator[0], position })\n position += operator[0].length\n continue\n }\n const number = /^-?\\d+(?:\\.\\d+)?/.exec(source.slice(position))\n if (number) {\n tokens.push({ kind: 'number', value: number[0], position })\n position += number[0].length\n continue\n }\n const identifier = /^[a-zA-Z_][a-zA-Z_0-9]*/.exec(source.slice(position))\n if (identifier) {\n tokens.push({ kind: 'identifier', value: identifier[0], position })\n position += identifier[0].length\n continue\n }\n throw new Error(`unexpected character '${char}' at position ${position}`)\n }\n tokens.push({ kind: 'end', value: '', position: source.length })\n if (tokens.length > 256) throw new Error('check expression exceeds 256 tokens')\n return tokens\n}\n\nclass Parser {\n private index = 0\n private depth = 0\n private readonly columns: Map<string, Column>\n\n constructor(private readonly tokens: Token[], columns: readonly Column[]) {\n this.columns = new Map()\n for (const column of columns) {\n for (const alias of [column.name, column.columnName]) {\n const previous = this.columns.get(alias)\n if (previous && previous.columnName !== column.columnName) {\n throw new Error(`ambiguous check column '${alias}'`)\n }\n this.columns.set(alias, column)\n }\n }\n }\n\n parse(): string {\n const expression = this.parseOr()\n this.expect('end', 'end of expression')\n return expression\n }\n\n private parseOr(): string {\n let left = this.parseAnd()\n while (this.matchKeyword('or')) left = `(${left} OR ${this.parseAnd()})`\n return left\n }\n\n private parseAnd(): string {\n let left = this.parseNot()\n while (this.matchKeyword('and')) left = `(${left} AND ${this.parseNot()})`\n return left\n }\n\n private parseNot(): string {\n if (this.matchKeyword('not')) return `(NOT ${this.parseNot()})`\n return this.parsePrimary()\n }\n\n private parsePrimary(): string {\n if (this.peek().kind === 'lparen') {\n if (++this.depth > 32) throw new Error('check expression nesting exceeds 32 levels')\n this.advance()\n const expression = this.parseOr()\n this.expect('rparen', \"')'\")\n this.depth--\n return `(${expression})`\n }\n return this.parseComparison()\n }\n\n private parseComparison(): string {\n const left = this.parseValue()\n if (this.matchKeyword('is')) {\n const negate = this.matchKeyword('not')\n this.expectKeyword('null')\n return `${left.sql} IS ${negate ? 'NOT ' : ''}NULL`\n }\n if (this.matchKeyword('between')) {\n const lower = this.parseValue()\n this.expectKeyword('and')\n const upper = this.parseValue()\n return `${left.sql} BETWEEN ${lower.sql} AND ${upper.sql}`\n }\n if (this.matchKeyword('in')) {\n this.expect('lparen', \"'(' after IN\")\n const values = [this.parseValue()]\n while (this.peek().kind === 'comma') { this.advance(); values.push(this.parseValue()) }\n this.expect('rparen', \"')' after IN values\")\n if (values.some(value => !value.literal)) throw new Error('IN values must be literals')\n return `${left.sql} IN (${values.map(value => value.sql).join(', ')})`\n }\n const operator = this.expect('operator', 'a comparison operator')\n const right = this.parseValue()\n if (operator.value === '~' || operator.value === '!~') {\n if (left.column && left.column.type !== 'text') throw new Error('regex checks require a text column')\n if (!right.literal) throw new Error('regex pattern must be a literal')\n }\n return `${left.sql} ${operator.value} ${right.sql}`\n }\n\n private parseValue(): Value {\n const token = this.advance()\n if (token.kind === 'string') return { sql: quoteLiteral(token.value), literal: true }\n if (token.kind === 'number') {\n const number = Number(token.value)\n if (!Number.isFinite(number) || (Number.isInteger(number) && !Number.isSafeInteger(number))) {\n throw new Error(`unsafe numeric literal at position ${token.position}`)\n }\n return { sql: token.value, literal: true }\n }\n if (token.kind !== 'identifier') throw new Error(`expected a column or literal at position ${token.position}`)\n const keyword = token.value.toLowerCase()\n if (keyword === 'true' || keyword === 'false' || keyword === 'null') return { sql: keyword.toUpperCase(), literal: true }\n if (keyword === 'btrim') {\n this.expect('lparen', \"'(' after btrim\")\n const column = this.parseColumn()\n this.expect('rparen', \"')' after btrim column\")\n if (column.type !== 'text') throw new Error('btrim requires a text column')\n return { sql: `btrim(${quoteIdentifier(column.columnName)})`, column }\n }\n const column = this.columns.get(token.value)\n if (!column) throw new Error(`unknown check column '${token.value}'`)\n return { sql: quoteIdentifier(column.columnName), column }\n }\n\n private parseColumn(): Column {\n const token = this.expect('identifier', 'a column name')\n const column = this.columns.get(token.value)\n if (!column) throw new Error(`unknown check column '${token.value}'`)\n return column\n }\n\n private peek(): Token { return this.tokens[this.index]! }\n private advance(): Token { const token = this.peek(); if (token.kind !== 'end') this.index++; return token }\n private matchKeyword(keyword: string): boolean {\n if (this.peek().kind !== 'identifier' || this.peek().value.toLowerCase() !== keyword) return false\n this.advance()\n return true\n }\n private expectKeyword(keyword: string): void {\n if (!this.matchKeyword(keyword)) throw new Error(`expected '${keyword}' at position ${this.peek().position}`)\n }\n private expect(kind: TokenKind, description: string): Token {\n const token = this.peek()\n if (token.kind !== kind) throw new Error(`expected ${description} at position ${token.position}`)\n return this.advance()\n }\n}\n\nexport function compileCheckExpression(source: string, columns: readonly Column[]): string {\n return new Parser(tokenize(source), columns).parse()\n}\n","/** Shared grammar for namespace identifiers; never interpolate arbitrary paths.\n * orm_events and orm_native_sources are migration-owned control-plane schemas,\n * not builder namespaces. Exclude their suffixes at every API/authoring entry.\n */\nexport const NAMESPACE_PATTERN = /^(?!(?:events|native_sources)$)[a-z][a-z0-9_]{0,40}$/\n\n/** Caller-scoped delegated data credential, supplied by an authenticated host. */\nexport const ORM_DATA_TOKEN_HEADER = 'x-sequence-data-token'\n\n/** Separate service-identity credential; never used as an implicit fallback. */\nexport const ORM_SERVICE_DATA_TOKEN_HEADER = 'x-sequence-data-token-service'\n\nexport const IDENTIFIER_PATTERN = /^[a-z][a-z0-9_]*$/\n/** Native source columns may have one leading underscore; relation names may not. */\nexport const COLUMN_IDENTIFIER_PATTERN = /^_?[a-z][a-z0-9_]*$/\nexport const MAX_IDENTIFIER_LENGTH = 63\n\n/**\n * Custom Roles & Capabilities claim keys as policies reference them: a\n * host-scoped registry key, an org pin's `org/<key>`, or an Application\n * capability pin's `app/<application-id>/<key>`. Matches the registry\n * key grammar EXACTLY (`[a-z0-9-]`, 1–64 chars, no `_` — the FGA object-id\n * delimiter) so any capability that's declarable/attachable in namespace.yaml\n * can also be referenced here — a stricter pattern would let a valid key\n * register yet fail at apply (e.g. `org/2fa`, a one-char or digit-led key).\n */\nexport const CAPABILITY_KEY_PATTERN = /^(?:org\\/|app\\/[a-z][a-z0-9-]{0,63}\\/)?[a-z0-9-]{1,64}$/\n\n/** Hard ceiling for an explicitly authored flat persisted GraphQL read. */\nexport const MAX_PERSISTED_READ_ROWS = 50_001\n\nexport const CLAIM_KEY_PATTERN = /^[a-z][a-z0-9_]*$/\n\n/** Qualified reference to a table outside the defining file: `<schema>.<table>`. */\nexport const QUALIFIED_TABLE_PATTERN = /^[a-z][a-z0-9_]{0,62}\\.[a-z][a-z0-9_]{0,62}$/\n\n/** Qualified source syntax only; the serving installation controls authorized backing. */\nexport const SYNCED_SOURCE_PATTERN = QUALIFIED_TABLE_PATTERN\n\nexport const ORM_SCHEMA_PREFIX = 'orm_'\nexport const CONSUMER_ROLE_SUFFIX = '_consumer'\n\nexport const ormSchemaName = (namespace: string): string => {\n if (!NAMESPACE_PATTERN.test(namespace)) throw new Error(`invalid or reserved ORM namespace '${namespace}'`)\n return `${ORM_SCHEMA_PREFIX}${namespace}`\n}\nexport const consumerRoleName = (namespace: string): string =>\n `${ormSchemaName(namespace)}${CONSUMER_ROLE_SUFFIX}`\n\nexport const DEFINITION_FILE_EXTENSIONS = ['.yml', '.yaml'] as const\n\n/** Reserved basenames for the namespace-level config file (description, org capability pins). */\nexport const NAMESPACE_CONFIG_FILENAMES = new Set(['namespace.yaml', 'namespace.yml'])\n\nexport const HASH_DOMAIN = 'sequence-orm-definitions\\0'\n\n/**\n * A per-file byte cap where the loader reads untrusted YAML into memory — a real failure mode, not a product\n * limit. Counts of tables/indexes/params and policy/SQL lengths are\n * deliberately uncapped; Postgres enforces its own limits loudly at apply.\n */\nexport const MAX_DEFINITION_FILE_BYTES = 1024 * 1024\n\n/** Generated SDL aggregates every table/view; it is not an individual source file. */\nexport const MAX_GENERATED_SDL_BYTES = 16 * 1024 * 1024\n\n/** Registration and reviewed exports carry SDL, canonical metadata, snapshots and migrations. */\nexport const ORM_REGISTRATION_MAX_BYTES = 64 * 1024 * 1024\n\n/** `/api/data/<ns>/actions/…` and `/api/data/<ns>/query` share the table path segment. */\nexport const RESERVED_TABLE_NAMES = new Set(['actions', 'query'])\n\n/**\n * The Data API's query-string grammar owns these parameter names — a column\n * with one of them could never be filtered over the wire, so definitions\n * refuse it up front (\"validate rejects only what can never work\").\n */\nexport const RESERVED_COLUMN_NAMES = new Set(['select', 'order', 'limit', 'offset'])\n\n/**\n * Per-cell metadata (`cellMetadata: true`, and every resolved-table source) is\n * stored as typed system columns beside each tracked column `c`:\n *\n * - `c__at` timestamptz — when the cell was last written (NULL: never / no opinion)\n * - `c__by` text — who wrote it\n * - `c__rev` uuid — a resolved table's manual source only: the edit's\n * identity, so an async writeback confirmation clears\n * only the exact edit it delivered\n *\n * A resolved view additionally exposes, per resolved column, the winner's\n * `c__src` (source name) and `c__lost` (newer candidates that lost, jsonb).\n * None of these are GraphQL columns: they surface through the typed `cells`\n * object and are never client-writable.\n */\nexport const CELL_PARTS = ['at', 'by', 'rev', 'source', 'conflicts'] as const\nexport type CellPart = (typeof CELL_PARTS)[number]\nexport const CELL_PART_SUFFIX: Readonly<Record<CellPart, string>> = {\n at: '__at', by: '__by', rev: '__rev', source: '__src', conflicts: '__lost',\n}\n/** Longest physical column name that can carry cell parts (63 minus the longest suffix). */\nexport const MAX_TRACKED_COLUMN_NAME = MAX_IDENTIFIER_LENGTH - 6\n/** GraphQL field carrying a row's per-cell metadata object. */\nexport const CELLS_FIELD = 'cells'\n\n/** Physical (and logical) name of one cell part of a column. */\nexport function cellColumnName(column: string, part: CellPart): string {\n return `${column}${CELL_PART_SUFFIX[part]}`\n}\n\n/**\n * Actor recorded when the data plane computes a materialized resolved table's\n * rows for every caller. Its claims are what the compute view's synced\n * sources see (materialized ETL sources must be readable by anyone).\n */\nexport const MATERIALIZE_ACTOR = 'orm:materialize'\nexport const MATERIALIZE_CLAIMS_JSON = JSON.stringify({ sub: MATERIALIZE_ACTOR, org: null, roles: [], capabilities: [] })\n\n/**\n * Apply-generated function that reconciles a materialized resolved table with\n * its compute view: `SELECT * FROM orm_<ns>.\"<table>__refresh\"(wait)` returns\n * `(upserted, deleted, locked)`; without `wait` it skips when another refresh\n * holds the table's lock. The one refresh implementation — the Atlas\n * reconcile, the post-ETL hook, and an operator in psql all call it.\n */\nexport function materializedRefreshFunctionName(table: string): string {\n return `${table}__refresh`\n}\n\n/**\n * Advisory-lock key serializing a materialized table's refreshes (hashed with\n * `hashtext`). A full refresh holds it exclusively and every ORM write's\n * per-row refresh holds it shared, both before reading the compute view — so\n * a full refresh never reads a snapshot older than a write it then overwrites.\n */\nexport function materializeLockKey(schema: string, table: string): string {\n return `orm:materialize:${schema}.${table}`\n}\n","/**\n * Policy expression grammar shared by tables, views and resolved tables. The\n * DSL strings are parsed and claim-checked by predicate-v2 in both the CLI\n * and the server; variants follow §4c permissive-union semantics.\n */\nimport { z } from 'zod'\n\nexport const policyVariantSchema = z.object({\n /** Claims-only guard (capability()/role()/claim() comparisons — no columns). */\n when: z.string().min(1).max(1000),\n /** Exactly one of: allow-all bypass, or a row predicate. */\n allow: z.literal(true).optional(),\n policy: z.string().min(1).max(2000).optional(),\n}).refine((v) => (v.allow === true) !== (typeof v.policy === 'string'), {\n message: 'A variant declares exactly one of allow: true or policy',\n})\n\nexport const policyExpressionSchema = z.union([\n z.string().min(1).max(2000),\n z.object({\n default: z.string().min(1).max(2000),\n variants: z.array(policyVariantSchema).max(10).default([]),\n }),\n])\nexport type PolicyExpression = z.infer<typeof policyExpressionSchema>\n","/**\n * Canonical contract for resolved tables: one logical table (a generated\n * managed view) backed by N source tables of three kinds —\n *\n * - `manual` an internal ORM table holding sparse user edits (the only\n * GraphQL mutation target),\n * - `etl` a synced (`source: schema.table`) table fed by a pipeline,\n * - `prefetch` an internal ORM \"live\" table filled by a function that reads\n * the source system on demand (and confirms writebacks).\n *\n * Each column picks its value across candidate sources with a SQL comparator\n * compiled into the view, so policies, filters, sorting and nested relations\n * all see resolved values. This module owns the metadata the compiler (write\n * roots, directives) and data plane (prefetch, writeback) need; the view SQL\n * itself is generated at authoring time and validated like any managed view.\n */\nimport { z } from 'zod'\nimport { cellColumnName, type CellPart } from '../constants.js'\nimport { policyExpressionSchema } from './policy.js'\n\n/** `'1500ms'` / `'30s'` / `'5m'` (or a millisecond number) → milliseconds; undefined when malformed. */\nexport function parseDurationMs(input: number | string): number | undefined {\n if (typeof input === 'number') return Number.isInteger(input) && input > 0 ? input : undefined\n const match = /^(\\d+(?:\\.\\d+)?)(ms|s|m)$/.exec(input)\n if (!match) return undefined\n const factor = match[2] === 'ms' ? 1 : match[2] === 's' ? 1000 : 60_000\n const value = Math.round(Number(match[1]) * factor)\n return value > 0 ? value : undefined\n}\n\nconst identifier = z.string().min(1).max(63).regex(/^[a-z][a-z0-9_]*$/)\nconst durationMs = z.number().int().positive().max(24 * 60 * 60 * 1000)\n\n/**\n * Row-level system columns the generated view adds after the authored columns\n * (GraphQL fields). Per-cell provenance lives in typed cell parts instead —\n * see RESOLVED_VIEW_CELL_PARTS.\n */\nexport const RESOLVED_VIEW_SYSTEM_COLUMNS = {\n writebackStatus: { name: 'writebackStatus', columnName: '_writeback_status', type: 'text' },\n writebackError: { name: 'writebackError', columnName: '_writeback_error', type: 'text' },\n} as const\n\n/** System columns on the internal manual / live tables (never exposed in GraphQL). */\nexport const RESOLVED_SOURCE_SYSTEM_COLUMNS = {\n tombstoned: { name: 'sysTombstoned', columnName: '_tombstoned' },\n fetchedAt: { name: 'sysFetchedAt', columnName: '_fetched_at' },\n writebackStatus: { name: 'sysWritebackStatus', columnName: '_writeback_status' },\n writebackError: { name: 'sysWritebackError', columnName: '_writeback_error' },\n writebackAt: { name: 'sysWritebackAt', columnName: '_writeback_at' },\n} as const\n\n/** Cell parts the resolved view exposes per resolved column: the winner's source, time, actor, and newer losers. */\nexport const RESOLVED_VIEW_CELL_PARTS = ['source', 'at', 'by', 'conflicts'] as const satisfies readonly CellPart[]\n/** Cell parts on a resolved table's internal sources; only the manual source carries `rev`. */\nexport const RESOLVED_SOURCE_CELL_PARTS = { manual: ['at', 'by', 'rev'], prefetch: ['at', 'by'] } as const satisfies Record<'manual' | 'prefetch', readonly CellPart[]>\n\nexport const RESERVED_RESOLVED_COLUMN_NAMES: ReadonlySet<string> = new Set([\n ...Object.values(RESOLVED_VIEW_SYSTEM_COLUMNS).flatMap((c) => [c.name, c.columnName]),\n ...Object.values(RESOLVED_SOURCE_SYSTEM_COLUMNS).flatMap((c) => [c.name, c.columnName]),\n])\n\nexport const COMPARATORS = ['latest', 'highest', 'lowest', 'priority', 'nonNullFirst', 'custom'] as const\nexport type ComparatorKind = (typeof COMPARATORS)[number]\n\nexport const canonicalFunctionRefSchema = z.object({\n /** `managed` = a Managed Function id/slug; `native` = an in-process Atlas function (reserved). */\n kind: z.enum(['managed', 'native']),\n id: z.string().min(1).max(200),\n}).strict()\nexport type CanonicalFunctionRef = z.infer<typeof canonicalFunctionRefSchema>\n\n/** What the source API can fetch: one key per call, or a batch of up to maxKeys. */\nexport const canonicalFetchShapeSchema = z.union([\n z.object({ shape: z.literal('single') }).strict(),\n z.object({ shape: z.literal('batch'), maxKeys: z.number().int().min(2).max(500) }).strict(),\n])\nexport type CanonicalFetchShape = z.infer<typeof canonicalFetchShapeSchema>\n\nexport const canonicalResolvedSourceSchema = z.object({\n name: identifier,\n kind: z.enum(['manual', 'etl', 'prefetch']),\n /** Backing relation in this namespace: an internal table (manual/prefetch) or a synced table (etl). */\n table: identifier,\n /** Resolved columns (logical names) this source supplies — the primary key is implicit. */\n columns: z.array(z.string().min(1).max(63)).min(1).max(500),\n /** etl: logical timestamptz/date column on the synced table used as every cell's updated_at. */\n updatedAt: z.string().min(1).max(63).optional(),\n /** prefetch: resolved column holding the source system's key (may be the primary key). */\n key: z.string().min(1).max(63).optional(),\n fetch: canonicalFetchShapeSchema.optional(),\n function: canonicalFunctionRefSchema.optional(),\n prefetchDefaults: z.object({\n maxStalenessMs: durationMs,\n timeoutMs: durationMs,\n onError: z.enum(['fallback', 'fail']),\n }).strict().optional(),\n writeback: z.object({\n columns: z.array(z.string().min(1).max(63)).min(1).max(500),\n defaultMode: z.enum(['sync', 'async']),\n timeoutMs: durationMs,\n /** Remove confirmed cells from the manual source so a stale edit cannot shadow the source. */\n clearManualOnConfirm: z.boolean(),\n }).strict().optional(),\n}).strict()\nexport type CanonicalResolvedSource = z.infer<typeof canonicalResolvedSourceSchema>\n\nexport const canonicalResolveRuleSchema = z.object({\n column: z.string().min(1).max(63),\n comparator: z.enum(COMPARATORS),\n /** Source names, in tie-break order. */\n candidates: z.array(identifier).min(1).max(16),\n /** custom only: SQL ORDER BY key over value / updated_at / source / actor / ord. */\n orderBy: z.string().min(1).max(2000).optional(),\n}).strict()\nexport type CanonicalResolveRule = z.infer<typeof canonicalResolveRuleSchema>\n\nexport const canonicalResolvedSchema = z.object({\n sources: z.array(canonicalResolvedSourceSchema).min(1).max(16),\n /** One rule per resolved (non-pk) column; documents the generated view for tooling. */\n resolve: z.array(canonicalResolveRuleSchema).max(500),\n /** Sources whose tombstone hides the resolved row (v1: the manual source only). */\n deletedBy: z.array(identifier).max(1).default([]),\n /**\n * Materialized: the view reads an indexed internal table (`table`) that the\n * data plane keeps in step with `compute`, the internal view holding the\n * resolution query. Omitted when the view computes on read.\n */\n materialized: z.object({ table: identifier, compute: identifier }).strict().optional(),\n /** Write policies evaluated against the RESOLVED row (reads use the view's read policy). */\n policies: z.object({\n write: policyExpressionSchema.optional(),\n insert: policyExpressionSchema.optional(),\n update: policyExpressionSchema.optional(),\n }).strict().default({}),\n}).strict()\nexport type CanonicalResolved = z.infer<typeof canonicalResolvedSchema>\n\ninterface RelationShape {\n table: string\n source?: string\n internal?: true\n cellMetadata?: true\n materializes?: string\n policies?: { read?: string | { default: string; variants: unknown[] } }\n primaryKey?: string[]\n columns: Array<{ name: string; columnName: string; type: unknown; cell?: { of: string; part: CellPart } }>\n}\ninterface ViewShape {\n view: string\n internal?: true\n primaryKey?: string[]\n columns: Array<{ name: string; columnName: string; type: unknown; nullable?: boolean; cell?: { of: string; part: CellPart } }>\n resolved?: CanonicalResolved\n}\n\ntype Column = ViewShape['columns'][number]\n\ninterface ValidationScope {\n view: ViewShape\n resolved: CanonicalResolved\n pkColumn: Column\n dataColumns: Map<string, Column>\n sourceByName: Map<string, CanonicalResolvedSource>\n fail: (message: string) => void\n}\n\n/**\n * Cross-relation validation for one resolved view. Returns messages rather\n * than throwing so the definition-level superRefine can attach paths.\n */\nexport function validateResolvedView({ view, tables, views = [] }: { view: ViewShape; tables: readonly RelationShape[]; views?: readonly ViewShape[] }): string[] {\n const resolved = view.resolved\n if (!resolved) return []\n const errors: string[] = []\n const fail = (message: string) => errors.push(`resolved table '${view.view}': ${message}`)\n\n const pkColumn = view.primaryKey?.length === 1 ? view.columns.find((c) => c.columnName === view.primaryKey?.[0]) : undefined\n if (!pkColumn) {\n fail('requires exactly one primary-key column')\n return errors\n }\n const systemNames = new Set<string>(Object.values(RESOLVED_VIEW_SYSTEM_COLUMNS).map((c) => c.name))\n const scope: ValidationScope = {\n view,\n resolved,\n pkColumn,\n dataColumns: new Map(view.columns.filter((c) => !systemNames.has(c.name) && c.cell === undefined).map((c) => [c.name, c])),\n sourceByName: new Map(),\n fail,\n }\n if (resolved.sources.filter((source) => source.kind === 'manual').length !== 1) fail('requires exactly one manual source')\n\n const tableByName = new Map(tables.map((table) => [table.table, table]))\n for (const source of resolved.sources) {\n if (scope.sourceByName.has(source.name)) fail(`duplicate source '${source.name}'`)\n scope.sourceByName.set(source.name, source)\n const table = tableByName.get(source.table)\n if (!table) fail(`source '${source.name}' references unknown table '${source.table}'`)\n else validateSource({ scope, source, table })\n }\n validateRules(scope)\n validateViewCells(scope)\n if (resolved.materialized) validateMaterialized({ scope, tableByName, views })\n for (const name of resolved.deletedBy) {\n if (scope.sourceByName.get(name)?.kind !== 'manual') fail(`deletedBy '${name}' must be the manual source`)\n }\n return errors\n}\n\nfunction validateSource({ scope, source, table }: { scope: ValidationScope; source: CanonicalResolvedSource; table: RelationShape }): void {\n const { fail } = scope\n if (source.kind === 'etl' && table.source === undefined) fail(`etl source '${source.name}' must reference a synced table`)\n if (source.kind === 'etl' && table.primaryKey?.length === 0) fail(`etl source '${source.name}' cannot use an unkeyed synced table for resolved row identity`)\n if (source.kind !== 'etl' && (table.internal !== true || table.cellMetadata !== true)) {\n fail(`${source.kind} source '${source.name}' must reference an internal table with cell metadata`)\n }\n const hasRev = table.columns.some((column) => column.cell?.part === 'rev')\n if (source.kind === 'manual' && !hasRev) fail(`manual source '${source.name}' must carry '__rev' cell columns`)\n if (source.kind === 'prefetch' && hasRev) fail(`prefetch source '${source.name}' must not carry '__rev' cell columns`)\n const byName = new Map(table.columns.map((c) => [c.name, c]))\n validateSourceColumns({ scope, source, byName })\n if (source.kind === 'etl') {\n const updatedAt = source.updatedAt === undefined ? undefined : byName.get(source.updatedAt)\n if (source.updatedAt !== undefined && updatedAt?.type !== 'timestamptz' && updatedAt?.type !== 'date') {\n fail(`etl source '${source.name}' updatedAt must name a timestamptz/date column on '${source.table}'`)\n }\n }\n validatePrefetchFields({ scope, source })\n}\n\nfunction validatePrefetchFields({ scope, source }: { scope: ValidationScope; source: CanonicalResolvedSource }): void {\n const { fail, pkColumn } = scope\n if (source.kind !== 'prefetch') {\n if (source.key || source.fetch || source.function || source.prefetchDefaults || source.writeback) {\n fail(`only prefetch sources may declare key/fetch/function/prefetchDefaults/writeback ('${source.name}')`)\n }\n return\n }\n if (!source.key || !source.fetch || !source.function || !source.prefetchDefaults) {\n fail(`prefetch source '${source.name}' requires key, fetch, function and prefetchDefaults`)\n } else if (source.key !== pkColumn.name && !source.columns.includes(source.key)) {\n fail(`prefetch source '${source.name}' key '${source.key}' must be the primary key or one of its columns`)\n }\n for (const column of source.writeback?.columns ?? []) {\n if (!source.columns.includes(column)) fail(`prefetch source '${source.name}' writes back '${column}', which it does not supply`)\n }\n}\n\nfunction validateSourceColumns({ scope, source, byName }: {\n scope: ValidationScope\n source: CanonicalResolvedSource\n byName: Map<string, Column>\n}): void {\n const { fail, pkColumn, dataColumns } = scope\n for (const column of [pkColumn.name, ...source.columns]) {\n const own = column === pkColumn.name ? pkColumn : dataColumns.get(column)\n const theirs = byName.get(column)\n if (!own) fail(`source '${source.name}' supplies unknown column '${column}'`)\n else if (!theirs) fail(`source '${source.name}' table '${source.table}' has no column '${column}'`)\n else if (JSON.stringify(theirs.type) !== JSON.stringify(own.type)) fail(`column '${column}' has a different type on source '${source.name}'`)\n }\n}\n\nfunction validateRules({ resolved, pkColumn, dataColumns, sourceByName, fail }: ValidationScope): void {\n const ruled = new Set<string>()\n for (const rule of resolved.resolve) {\n if (!dataColumns.has(rule.column) || rule.column === pkColumn.name) {\n fail(`resolve rule targets unknown column '${rule.column}'`)\n continue\n }\n if (ruled.has(rule.column)) fail(`column '${rule.column}' has more than one resolve rule`)\n ruled.add(rule.column)\n if ((rule.comparator === 'custom') !== (rule.orderBy !== undefined)) {\n fail(`column '${rule.column}': orderBy is required for custom comparators and only allowed there`)\n }\n if (new Set(rule.candidates).size !== rule.candidates.length) fail(`column '${rule.column}' repeats a candidate`)\n for (const candidate of rule.candidates) {\n const source = sourceByName.get(candidate)\n if (!source) fail(`column '${rule.column}' names unknown candidate source '${candidate}'`)\n else if (!source.columns.includes(rule.column)) fail(`column '${rule.column}' candidate '${candidate}' does not supply it`)\n }\n }\n for (const column of dataColumns.keys()) {\n if (column !== pkColumn.name && !ruled.has(column)) fail(`column '${column}' has no resolve rule`)\n }\n}\n\nconst VIEW_CELL_TYPES: Readonly<Record<(typeof RESOLVED_VIEW_CELL_PARTS)[number], string>> = {\n source: 'text', at: 'timestamptz', by: 'text', conflicts: 'jsonb',\n}\n\n/** The view carries exactly source/at/by/conflicts per resolved (non-pk) column. */\nfunction validateViewCells({ view, dataColumns, pkColumn, fail }: ValidationScope): void {\n const expected = new Map<string, { part: string; columnName: string }>()\n for (const column of dataColumns.values()) {\n if (column.name === pkColumn.name) continue\n for (const part of RESOLVED_VIEW_CELL_PARTS) {\n expected.set(cellColumnName(column.name, part), { part, columnName: cellColumnName(column.columnName, part) })\n }\n }\n for (const column of view.columns) {\n if (!column.cell) continue\n const want = expected.get(column.name)\n if (!want || want.part !== column.cell.part || want.columnName !== column.columnName || cellColumnName(column.cell.of, column.cell.part) !== column.name) {\n fail(`unexpected cell column '${column.name}'`)\n continue\n }\n if (column.type !== VIEW_CELL_TYPES[column.cell.part as keyof typeof VIEW_CELL_TYPES]) fail(`cell column '${column.name}' must be ${VIEW_CELL_TYPES[column.cell.part as keyof typeof VIEW_CELL_TYPES]}`)\n expected.delete(column.name)\n }\n for (const name of expected.keys()) fail(`missing cell column '${name}'`)\n}\n\nconst columnSignature = (columns: ReadonlyArray<{ name: string; columnName: string; type: unknown }>) =>\n JSON.stringify(columns.map((column) => [column.name, column.columnName, column.type]))\n\n/**\n * A materialized resolved table: its internal table mirrors the view column\n * for column, its compute view produces those columns, and every ETL source\n * is readable by anyone — the copy is computed once for all callers, so no\n * source may filter rows per caller (the view's own read policy still does).\n */\nfunction validateMaterialized({ scope, tableByName, views }: {\n scope: ValidationScope\n tableByName: Map<string, RelationShape>\n views: readonly ViewShape[]\n}): void {\n const { view, resolved, fail } = scope\n const { table: tableName, compute: computeName } = resolved.materialized!\n const table = tableByName.get(tableName)\n if (!table || table.internal !== true || table.materializes !== view.view) {\n fail(`materialized table '${tableName}' must be an internal table that materializes '${view.view}'`)\n } else {\n if (columnSignature(table.columns) !== columnSignature(view.columns)) fail(`materialized table '${tableName}' must have exactly the view's columns`)\n if (JSON.stringify(table.primaryKey ?? []) !== JSON.stringify(view.primaryKey ?? [])) fail(`materialized table '${tableName}' must share the view's primary key`)\n }\n const compute = views.find((candidate) => candidate.view === computeName)\n if (!compute || compute.internal !== true) fail(`compute view '${computeName}' must be an internal view`)\n else if (columnSignature(compute.columns) !== columnSignature(view.columns)) fail(`compute view '${computeName}' must have exactly the view's columns`)\n for (const source of resolved.sources) {\n if (source.kind !== 'etl') continue\n const read = tableByName.get(source.table)?.policies?.read\n const unconditional = typeof read === 'string' ? read.trim() === 'true' : read !== undefined && read.default.trim() === 'true' && read.variants.length === 0\n if (!unconditional) {\n fail(`etl source '${source.name}' must have read policy 'true' to be materialized (the copy is shared by every caller)`)\n }\n }\n}\n","/**\n * Canonical namespace definition v2 — the data-only JSON a consumer's\n * TypeScript schema serializes to. This is v2's equivalent of the v1 YAML\n * `NamespaceDefinition`: the CLI's jiti loader produces it, the content hash\n * is computed over it, the server re-validates it (consumer TS never runs\n * server-side), and the SDL generator / GraphQL compiler / migration engine\n * all consume it.\n *\n * FROZEN CONTRACT (week 1): downstream tracks build against these shapes.\n * Additive evolution only; `definition_format` discriminates on the wire.\n */\nimport { z } from 'zod'\nexport { ontologyContractSchema, readOntologyContract, type OntologyContract } from '../ontology-contract.js'\nimport { compileCheckExpression } from '../checks/compile.js'\nimport {\n CELL_PART_SUFFIX, CELL_PARTS, COLUMN_IDENTIFIER_PATTERN, MAX_TRACKED_COLUMN_NAME, NAMESPACE_PATTERN, QUALIFIED_TABLE_PATTERN, cellColumnName, type CellPart,\n} from '../constants.js'\nimport { policyExpressionSchema } from './policy.js'\nimport { canonicalResolvedSchema, validateResolvedView, type CanonicalResolved } from './resolved.js'\n\nexport * from './resolved.js'\n\nexport const CANONICAL_FORMAT = 2 as const\n\n/** Identifier grammar shared with v1 (`^[a-z][a-z0-9_]*$`, ≤63 bytes). */\nexport const IDENTIFIER_RE = /^[a-z][a-z0-9_]*$/\nconst identifier = z.string().min(1).max(63).regex(IDENTIFIER_RE)\nconst columnIdentifier = z.string().min(1).max(63).regex(COLUMN_IDENTIFIER_PATTERN)\n\n/** The 10 v1 column types, unchanged in v2. */\nexport const COLUMN_TYPES = [\n 'uuid', 'text', 'integer', 'bigint', 'numeric', 'double',\n 'boolean', 'timestamptz', 'date', 'jsonb',\n] as const\nexport type ColumnType = (typeof COLUMN_TYPES)[number]\n\nconst columnTypeSchema = z.enum(COLUMN_TYPES)\n\n/** Enum columns reference a namespace-level `defineEnum` by name. */\nexport const canonicalEnumSchema = z.object({\n name: identifier,\n values: z.array(z.string().min(1).max(63)).min(1).max(100),\n})\nexport type CanonicalEnum = z.infer<typeof canonicalEnumSchema>\n\nexport const canonicalColumnSchema = z.object({\n /** Property name in TS (camelCase); columnName is the Postgres name. */\n name: z.string().min(1).max(63),\n columnName: columnIdentifier,\n type: z.union([columnTypeSchema, z.object({ enum: identifier })]),\n nullable: z.boolean().default(true),\n unique: z.boolean().default(false),\n /** Literal default, or one of the allowlisted SQL functions. */\n default: z.union([z.string(), z.number(), z.boolean(), z.null()]).optional(),\n defaultFn: z.enum(['gen_random_uuid()', 'now()']).optional(),\n /**\n * Stamp this column from the database clock on UPDATE (`now()`). The\n * column stays insertable (defaults fill gaps) but is omitted from\n * SetInput / settable so callers cannot backdate it.\n */\n onUpdateFn: z.enum(['now()']).optional(),\n description: z.string().max(500).optional(),\n /** Migration hints — same semantics as v1. */\n renamedFrom: columnIdentifier.optional(),\n cast: z.string().max(200).optional(),\n deprecated: z.boolean().default(false),\n /**\n * Marks a system cell-metadata column (see CELL_PARTS in constants): part\n * `part` of the cell of logical column `of`. Synthesized by authoring,\n * never client-writable, absent from GraphQL scalar fields. Omitted on\n * ordinary columns so their hashes are unchanged.\n */\n cell: z.object({ of: z.string().min(1).max(63), part: z.enum(CELL_PARTS) }).strict().optional(),\n}).superRefine((column, ctx) => {\n if (column.onUpdateFn === undefined) return\n if (typeof column.type !== 'string' || (column.type !== 'timestamptz' && column.type !== 'date')) {\n ctx.addIssue({\n code: 'custom',\n path: ['onUpdateFn'],\n message: `onUpdateFn '${column.onUpdateFn}' is only valid on timestamptz/date columns`,\n })\n }\n})\nexport type CanonicalColumn = z.infer<typeof canonicalColumnSchema>\n\nexport const canonicalLinkSchema = z.object({\n name: z.string().min(1).max(63),\n kind: z.enum(['toOne', 'toMany', 'toPlatformUser']),\n /** Target table name (namespace-local). Absent for toPlatformUser. */\n target: identifier.optional(),\n /** Owning namespace of an imported target; omitted for local links. */\n namespace: identifier.max(41).optional(),\n /** FK column on the owning side (toOne/toPlatformUser: on this table; toMany: on the target). */\n on: columnIdentifier,\n /** Referenced column on the target (default: target's PK / platform user `sub`). */\n references: columnIdentifier.optional(),\n /** enforce: true emits a real FK constraint (same-namespace toOne only). */\n enforce: z.boolean().default(false),\n onDelete: z.enum(['cascade', 'restrict', 'no action', 'set null', 'set default']).optional(),\n onUpdate: z.enum(['cascade', 'restrict', 'no action', 'set null', 'set default']).optional(),\n description: z.string().max(500).optional(),\n})\nexport type CanonicalLink = z.infer<typeof canonicalLinkSchema>\n\nexport const canonicalIndexSchema = z.object({\n columns: z.array(columnIdentifier).min(1),\n unique: z.boolean().default(false),\n name: identifier.optional(),\n})\n\nexport const canonicalCheckSchema = z.object({\n name: identifier,\n expression: z.string().min(1).max(2000),\n}).strict()\nexport type CanonicalCheck = z.infer<typeof canonicalCheckSchema>\n\n/**\n * Policy expressions stay DSL SOURCE STRINGS in the canonical form — parsing\n * and claim-key validation happen in both CLI and server via the shared\n * predicate parser. Variants follow §4c permissive-union semantics.\n */\nexport { policyExpressionSchema, policyVariantSchema, type PolicyExpression } from './policy.js'\n\nexport const canonicalPoliciesSchema = z.object({\n read: policyExpressionSchema.optional(),\n write: policyExpressionSchema.optional(),\n insert: policyExpressionSchema.optional(),\n update: policyExpressionSchema.optional(),\n})\n\n/**\n * View SQL is generated by Drizzle in the authoring process, then crosses the\n * CLI → Atlas JSON boundary. Keep the canonical form to one SELECT statement:\n * PostgreSQL validates the complete grammar when the view is created, while\n * this scanner prevents statement stacking before the text reaches DDL.\n */\nexport function isSingleViewQuerySql(value: string): boolean {\n const query = value.trim()\n if (!/^\\(*(?:select|with)\\b/i.test(query) || query.includes('\\0')) return false\n\n let state: 'normal' | 'single' | 'double' = 'normal'\n for (let index = 0; index < query.length; index += 1) {\n const char = query[index]\n const next = query[index + 1]\n if (state === 'single') {\n if (char === \"'\" && next === \"'\") index += 1\n else if (char === \"'\") state = 'normal'\n continue\n }\n if (state === 'double') {\n if (char === '\"' && next === '\"') index += 1\n else if (char === '\"') state = 'normal'\n continue\n }\n if (char === \"'\") state = 'single'\n else if (char === '\"') state = 'double'\n else if (char === ';' || (char === '-' && next === '-') || (char === '/' && next === '*')) return false\n }\n return state === 'normal' && !/\\$[a-z_0-9]*\\$/i.test(query)\n}\n\n/**\n * Managed views execute as the shared ORM relation owner. Treat function use\n * as a capability boundary: a new function is unavailable until it is\n * deliberately reviewed here as side-effect-free. The migration engine checks\n * the functions PostgreSQL actually resolved against this list and pg_catalog,\n * so qualification and same-named functions in a consumer schema cannot evade\n * the boundary.\n */\nexport const VIEW_QUERY_FUNCTION_ALLOWLIST = [\n 'abs',\n 'age',\n 'array_agg',\n 'array_append',\n 'array_cat',\n 'array_dims',\n 'array_length',\n 'array_lower',\n 'array_ndims',\n 'array_position',\n 'array_positions',\n 'array_prepend',\n 'array_remove',\n 'array_replace',\n 'array_to_string',\n 'array_trim',\n 'array_upper',\n 'ascii',\n 'avg',\n 'bit_and',\n 'bit_or',\n 'bit_xor',\n 'bool_and',\n 'bool_or',\n 'btrim',\n 'cardinality',\n 'cbrt',\n 'ceil',\n 'ceiling',\n 'char_length',\n 'character_length',\n 'chr',\n 'concat',\n 'concat_ws',\n 'count',\n 'cume_dist',\n 'date_bin',\n 'date_part',\n 'date_trunc',\n 'decode',\n 'degrees',\n 'dense_rank',\n 'encode',\n 'enum_first',\n 'enum_last',\n 'enum_range',\n 'every',\n 'exp',\n 'first_value',\n 'floor',\n 'format',\n 'grouping',\n 'initcap',\n 'json_agg',\n 'json_array_length',\n 'json_build_array',\n 'json_build_object',\n 'json_extract_path',\n 'json_extract_path_text',\n 'json_object_agg',\n 'json_object_keys',\n 'json_strip_nulls',\n 'json_typeof',\n 'jsonb_agg',\n 'jsonb_array_length',\n 'jsonb_build_array',\n 'jsonb_build_object',\n 'jsonb_extract_path',\n 'jsonb_extract_path_text',\n 'jsonb_insert',\n 'jsonb_object_agg',\n 'jsonb_object_keys',\n 'jsonb_path_exists',\n 'jsonb_path_match',\n 'jsonb_path_query',\n 'jsonb_path_query_array',\n 'jsonb_path_query_first',\n 'jsonb_pretty',\n 'jsonb_set',\n 'jsonb_set_lax',\n 'jsonb_strip_nulls',\n 'jsonb_typeof',\n 'justify_days',\n 'justify_hours',\n 'justify_interval',\n 'lag',\n 'last_value',\n 'lead',\n 'left',\n 'length',\n 'ln',\n 'log',\n 'lower',\n 'lpad',\n 'ltrim',\n 'make_date',\n 'make_interval',\n 'make_time',\n 'make_timestamp',\n 'make_timestamptz',\n 'max',\n 'md5',\n 'min',\n 'mod',\n 'nth_value',\n 'ntile',\n 'octet_length',\n 'percent_rank',\n 'pi',\n 'power',\n 'quote_ident',\n 'quote_literal',\n 'quote_nullable',\n 'radians',\n 'rank',\n 'regexp_count',\n 'regexp_instr',\n 'regexp_like',\n 'regexp_match',\n 'regexp_matches',\n 'regexp_replace',\n 'regexp_split_to_array',\n 'regexp_split_to_table',\n 'repeat',\n 'replace',\n 'reverse',\n 'right',\n 'round',\n 'row_number',\n 'rpad',\n 'rtrim',\n 'sign',\n 'split_part',\n 'sqrt',\n 'starts_with',\n 'string_agg',\n 'string_to_array',\n 'strpos',\n 'substr',\n 'substring',\n 'sum',\n 'timezone',\n 'to_ascii',\n 'to_char',\n 'to_date',\n 'to_hex',\n 'to_json',\n 'to_jsonb',\n 'to_number',\n 'to_timestamp',\n 'translate',\n 'trunc',\n 'unnest',\n 'upper',\n 'width_bucket',\n] as const\n\n/** Actions carry over from v1 as compiled named-SQL ops (plan: resolved OQ-1). */\nexport const canonicalActionSchema = z.object({\n name: identifier,\n requires: z.string().max(1000).optional(),\n params: z.record(z.string(), z.object({\n type: columnTypeSchema,\n nullable: z.boolean().default(false),\n })).default({}),\n executes: z.string().min(1).max(10_000),\n returns: z.enum(['rows', 'rowsAffected', 'scalar']).default('rowsAffected'),\n audit: z.object({ action: z.string(), resource: z.string() }).optional(),\n})\n\n/**\n * Copy-on-write mutations for overlay tables backed by a synced twin\n * (v2-only). Structured metadata, never authored SQL: the compiler and data\n * plane generate the INSERT…SELECT / UPDATE / DELETE statements from it, so\n * there is no SQL surface to validate and write policies inject like any\n * other mutation. `override` copies the synced row into the overlay\n * (ON CONFLICT DO NOTHING) then updates the `set` columns; `revert` deletes\n * the overlay row so the coalesce view falls back to synced.\n */\nexport const canonicalCowMutationSchema = z.object({\n kind: z.enum(['override', 'revert']),\n name: identifier,\n /** Synced table (same namespace) the overlay copies from / falls back to. */\n synced: identifier,\n /** Single-column primary key PROPERTY (TS camelCase, like column `name`) shared by overlay and synced. */\n pk: z.string().min(1).max(63),\n /** Override: contract properties copied INSERT…SELECT from synced (pk included). Empty for revert. */\n copy: z.array(z.string().min(1).max(63)).default([]),\n /** Override: overlay properties written by the UPDATE (never the pk). Empty for revert. */\n set: z.array(z.string().min(1).max(63)).default([]),\n}).superRefine((mutation, ctx) => {\n if (mutation.kind === 'override') {\n if (mutation.set.length === 0) {\n ctx.addIssue({ code: 'custom', path: ['set'], message: 'override mutations must set at least one column' })\n }\n if (!mutation.copy.includes(mutation.pk)) {\n ctx.addIssue({ code: 'custom', path: ['copy'], message: 'override copy list must include the pk' })\n }\n } else if (mutation.set.length > 0 || mutation.copy.length > 0) {\n ctx.addIssue({ code: 'custom', path: ['set'], message: 'revert mutations take no copy/set columns' })\n }\n if (mutation.set.includes(mutation.pk)) {\n ctx.addIssue({ code: 'custom', path: ['set'], message: 'set must not include the pk — identity columns are pinned' })\n }\n // Duplicates would reach the executor as a doubled INSERT column or SET\n // assignment — reject at the schema like the authoring helper does.\n for (const [field, values] of [['copy', mutation.copy], ['set', mutation.set]] as const) {\n if (new Set(values).size !== values.length) {\n ctx.addIssue({ code: 'custom', path: [field], message: `${field} must not contain duplicate columns` })\n }\n }\n})\nexport type CanonicalCowMutation = z.infer<typeof canonicalCowMutationSchema>\n\nexport const canonicalForeignKeySchema = z.object({\n name: identifier,\n columns: z.array(columnIdentifier).min(1).max(8),\n target: identifier,\n references: z.array(columnIdentifier).min(1).max(8),\n deferrable: z.enum(['initially-immediate', 'initially-deferred']).optional(),\n onDelete: z.enum(['cascade', 'restrict', 'no action', 'set null', 'set default']).optional(),\n onUpdate: z.enum(['cascade', 'restrict', 'no action', 'set null', 'set default']).optional(),\n}).strict()\nexport type CanonicalForeignKey = z.infer<typeof canonicalForeignKeySchema>\n\nexport const canonicalTableSchema = z.object({\n table: identifier,\n displayName: z.string().trim().min(1).max(120).optional(),\n description: z.string().max(2000).optional(),\n /** Table-level rename hint (new in v2). */\n renamedFrom: identifier.optional(),\n /** Synced/reflected read-only tables (`source: schema.table`) — v1 semantics. */\n source: z.string().regex(QUALIFIED_TABLE_PATTERN).optional(),\n columns: z.array(canonicalColumnSchema).default([]),\n primaryKey: z.array(columnIdentifier).max(8).optional(),\n links: z.array(canonicalLinkSchema).default([]),\n indexes: z.array(canonicalIndexSchema).default([]),\n /** Omitted by old definitions, preserving their existing content hashes. */\n checks: z.array(canonicalCheckSchema).max(100).optional(),\n policies: canonicalPoliciesSchema.default({}),\n /**\n * v1-conversion carry-over only. v2 has no action surface — the runtime\n * neither compiles nor executes these; writes are mutations. Kept parseable\n * so stored definitions and their content hashes stay stable.\n */\n actions: z.array(canonicalActionSchema).default([]),\n /** Optional (not defaulted) so pre-CoW canonical documents keep byte-identical hashes. */\n cowMutations: z.array(canonicalCowMutationSchema).optional(),\n /** Omitted by old definitions, preserving their existing content hashes. */\n foreignKeys: z.array(canonicalForeignKeySchema).max(100).optional(),\n /**\n * Per-cell edit metadata (`cellMetadata: true` in authoring): every tracked\n * column `c` carries typed `c__at` / `c__by` system columns (plus `c__rev`\n * on a resolved table's internal sources), listed explicitly in `columns`\n * with a `cell` marker so DDL and migrations treat them as ordinary columns.\n * Omitted when off so existing definitions hash unchanged.\n */\n cellMetadata: z.literal(true).optional(),\n /**\n * System-owned backing table of a resolved table (its manual or prefetch\n * source). Internal tables get DDL and IR metadata but no GraphQL surface;\n * only the data plane writes them. Omitted when false.\n */\n internal: z.literal(true).optional(),\n /**\n * The materialized copy of resolved table `materializes` (internal): the\n * same columns as that view, including its cell parts, maintained by the\n * data plane. Omitted otherwise.\n */\n materializes: identifier.optional(),\n}).superRefine((table, ctx) => {\n if (table.primaryKey?.length !== 0) return\n const fail = (message: string, path: Array<string | number> = ['primaryKey']) =>\n ctx.addIssue({ code: 'custom', path, message: `unkeyed table '${table.table}' ${message}` })\n if (table.source === undefined || table.columns.length === 0) {\n fail('requires a typed synced source')\n }\n if ([table.policies.write, table.policies.insert, table.policies.update].some(policy => policy !== undefined)) {\n fail('is read-only and cannot declare write policies', ['policies'])\n }\n const ownedCollections = [table.indexes, table.actions, table.checks, table.foreignKeys, table.cowMutations]\n const ownedMetadata = [table.cellMetadata, table.internal, table.materializes, table.renamedFrom]\n if (ownedCollections.some(items => items !== undefined && items.length > 0) || ownedMetadata.some(value => value !== undefined)) {\n fail('cannot declare owned storage, constraints or identity operations')\n }\n for (const [index, column] of table.columns.entries()) {\n const ownedColumnMetadata = [column.default, column.defaultFn, column.onUpdateFn, column.renamedFrom, column.cast, column.cell]\n if (column.unique || ownedColumnMetadata.some(value => value !== undefined)) {\n fail('cannot declare column uniqueness, mutation defaults or migration metadata', ['columns', index])\n }\n }\n for (const [index, link] of table.links.entries()) {\n if (link.enforce || link.kind === 'toMany') fail('cannot provide an identity for this link', ['links', index])\n }\n})\nexport type CanonicalTable = z.infer<typeof canonicalTableSchema>\n\n/** Authored view SQL. */\nconst MAX_VIEW_QUERY = 100_000\n/**\n * A resolved table's SQL is generated from its (bounded) metadata — at most\n * 500 columns × 16 candidates — not authored, so it gets a larger ceiling.\n */\nconst MAX_RESOLVED_VIEW_QUERY = 5_000_000\n\nexport const canonicalViewSchema = z.object({\n view: identifier,\n description: z.string().max(2000).optional(),\n columns: z.array(canonicalColumnSchema).min(1),\n /** Logical identity for GraphQL only; PostgreSQL views have no PK constraint. */\n primaryKey: z.array(columnIdentifier).min(1).max(8).optional(),\n links: z.array(canonicalLinkSchema).default([]),\n policies: z.object({ read: policyExpressionSchema }).strict(),\n query: z.string().min(1).max(MAX_RESOLVED_VIEW_QUERY).refine(isSingleViewQuerySql, {\n message: 'view query must be one SELECT/WITH statement without comments or dollar-quoted bodies',\n }),\n /** Namespace-local logical relation names, sorted for deterministic hashing. */\n dependencies: z.array(identifier).max(500),\n /**\n * Present when this view is a resolved table (defineResolvedTable): the\n * multi-source metadata behind its generated query. Omitted otherwise so\n * existing views hash unchanged.\n */\n resolved: canonicalResolvedSchema.optional(),\n /** System-owned view (a materialized resolved table's compute view): no GraphQL surface. */\n internal: z.literal(true).optional(),\n}).superRefine((view, ctx) => {\n if (view.resolved === undefined && view.query.length > MAX_VIEW_QUERY) {\n ctx.addIssue({ code: 'custom', path: ['query'], message: `view query must be at most ${MAX_VIEW_QUERY} characters` })\n }\n for (const [index, column] of view.columns.entries()) {\n if (column.default !== undefined || column.defaultFn !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['columns', index], message: `view column '${column.name}' cannot declare a default` })\n }\n if (column.onUpdateFn !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['columns', index], message: `view column '${column.name}' cannot declare onUpdateFn` })\n }\n if (column.unique) {\n ctx.addIssue({ code: 'custom', path: ['columns', index], message: `view column '${column.name}' cannot declare unique` })\n }\n if (column.renamedFrom !== undefined || column.cast !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['columns', index], message: `view column '${column.name}' cannot declare migration hints` })\n }\n }\n // A materialized resolved table's compute view (internal) produces the same\n // cell parts; validateResolvedView checks it against its public view.\n if (view.resolved === undefined && view.internal !== true) {\n for (const [index, column] of view.columns.entries()) {\n if (column.cell) ctx.addIssue({ code: 'custom', path: ['columns', index], message: `only resolved tables carry cell columns ('${column.name}')` })\n }\n }\n for (const [index, link] of view.links.entries()) {\n if (link.enforce) {\n ctx.addIssue({ code: 'custom', path: ['links', index, 'enforce'], message: `view link '${link.name}' cannot enforce a foreign key` })\n }\n if (link.onDelete !== undefined || link.onUpdate !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['links', index], message: `view link '${link.name}' cannot declare referential actions` })\n }\n }\n})\nexport type CanonicalView = z.infer<typeof canonicalViewSchema>\n\nfunction validateUnkeyedLinkIdentities({ definition, ctx }: {\n definition: { namespace: string; tables: CanonicalTable[]; views?: CanonicalView[] }\n ctx: z.RefinementCtx\n}): void {\n const tables = new Map(definition.tables.map(table => [table.table, table]))\n const relations = [\n ...definition.tables.map((table, index) => ({ kind: 'tables', index, links: table.links })),\n ...(definition.views ?? []).map((view, index) => ({ kind: 'views', index, links: view.links })),\n ]\n for (const relation of relations) {\n for (const [linkIndex, link] of relation.links.entries()) {\n if (link.kind !== 'toOne' || (link.namespace !== undefined && link.namespace !== definition.namespace)) continue\n const target = link.target === undefined ? undefined : tables.get(link.target)\n if (target?.source !== undefined && target.primaryKey?.length === 0) {\n ctx.addIssue({ code: 'custom', path: [relation.kind, relation.index, 'links', linkIndex],\n message: `link '${link.name}' cannot use unkeyed table '${target.table}' as a to-one identity` })\n }\n }\n }\n}\n\n/** The type each cell part is stored as. */\nexport const CELL_PART_TYPES: Readonly<Record<CellPart, ColumnType>> = {\n at: 'timestamptz', by: 'text', rev: 'uuid', source: 'text', conflicts: 'jsonb',\n}\n\ninterface TrackedShape {\n columns: ReadonlyArray<{ name: string; columnName: string; onUpdateFn?: string; cell?: { of: string; part: CellPart } }>\n primaryKey?: readonly string[]\n}\n\n/** Columns a cell-tracking table stamps: everything except the primary key, clock columns and cell parts. */\nexport function trackedCellColumns<T extends TrackedShape>(table: T): Array<T['columns'][number]> {\n const pk = new Set(table.primaryKey ?? [])\n return table.columns.filter((column) => column.cell === undefined && !pk.has(column.columnName) && column.onUpdateFn === undefined)\n}\n\nconst SUFFIXES = Object.values(CELL_PART_SUFFIX)\n\nfunction validateCellMetadata(table: CanonicalTable, index: number, ctx: z.RefinementCtx): void {\n const fail = (message: string, path: Array<string | number> = ['tables', index]) =>\n ctx.addIssue({ code: 'custom', path, message })\n const cells = table.columns.flatMap((column, position) => (column.cell ? [{ column, position, cell: column.cell }] : []))\n // A materialized resolved table mirrors its view's cell parts verbatim;\n // validateResolvedView checks it column for column.\n if (table.materializes !== undefined) return\n if (table.cellMetadata !== true) {\n for (const { position } of cells) fail(`cell-metadata columns require cellMetadata on table '${table.table}'`, ['tables', index, 'columns', position])\n return\n }\n if (table.source !== undefined) {\n fail(`synced table '${table.table}' cannot track cell metadata`)\n return\n }\n const tracked = trackedCellColumns(table)\n const byName = new Map(tracked.map((column) => [column.name, column]))\n const withRev = cells.some(({ cell }) => cell.part === 'rev')\n if (withRev && table.internal !== true) fail(`only a resolved table's internal sources carry '__rev' cell columns ('${table.table}')`)\n const seen = new Set<string>()\n for (const { column, position, cell } of cells) {\n const path = ['tables', index, 'columns', position]\n const owner = byName.get(cell.of)\n if (!owner) {\n fail(`cell column '${column.name}' belongs to '${cell.of}', which is not a tracked column`, path)\n continue\n }\n if (cell.part !== 'at' && cell.part !== 'by' && cell.part !== 'rev') fail(`a table cell column must be part at/by/rev, not '${cell.part}'`, path)\n if (column.name !== cellColumnName(owner.name, cell.part) || column.columnName !== cellColumnName(owner.columnName, cell.part)) {\n fail(`cell column for '${owner.name}' ${cell.part} must be named '${cellColumnName(owner.name, cell.part)}' / '${cellColumnName(owner.columnName, cell.part)}'`, path)\n }\n if (column.type !== CELL_PART_TYPES[cell.part] || !column.nullable || column.unique || column.default !== undefined || column.defaultFn !== undefined) {\n fail(`cell column '${column.name}' must be a nullable, default-less ${CELL_PART_TYPES[cell.part]}`, path)\n }\n const key = `${cell.of}:${cell.part}`\n if (seen.has(key)) fail(`duplicate cell column '${column.name}'`, path)\n seen.add(key)\n }\n for (const column of tracked) {\n if (column.columnName.length > MAX_TRACKED_COLUMN_NAME) {\n fail(`column '${column.columnName}' is too long to track cell metadata (max ${MAX_TRACKED_COLUMN_NAME} characters)`)\n }\n if (SUFFIXES.some((suffix) => column.columnName.endsWith(suffix))) {\n fail(`column '${column.columnName}' ends in a reserved cell-metadata suffix (${SUFFIXES.join(', ')})`)\n }\n for (const part of withRev ? (['at', 'by', 'rev'] as const) : (['at', 'by'] as const)) {\n if (!seen.has(`${column.name}:${part}`)) fail(`tracked column '${column.name}' is missing its '${cellColumnName(column.columnName, part)}' cell column`)\n }\n }\n}\n\nexport const exportGateSchema = z.union([z.literal(true), z.object({ capability: z.string().min(1) }).strict(), z.object({ role: z.string().min(1) }).strict()])\nexport const relationExportSchema = z.object({ read: exportGateSchema, write: exportGateSchema.optional() }).strict()\n\nexport const localDefinitionSchema = z.object({\n definition_format: z.literal(CANONICAL_FORMAT),\n namespace: identifier.max(41).regex(NAMESPACE_PATTERN, 'invalid or reserved ORM namespace'),\n description: z.string().max(2000).optional(),\n enums: z.array(canonicalEnumSchema).default([]),\n tables: z.array(canonicalTableSchema).min(0).max(500),\n /** Optional to preserve byte-identical hashes for pre-view canonical v2 documents. */\n views: z.array(canonicalViewSchema).max(500).optional(),\n /** Target-owned cross-namespace access contract, using existing namespace grants. */\n exports: z.record(identifier, relationExportSchema).optional(),\n /** Verbatim custom-roles grammar (@sequenceholdings/custom-roles-manifest). */\n capabilities: z.object({\n roles: z.unknown().optional(),\n uses: z.array(z.string()).default([]),\n }).default({ uses: [] }),\n}).superRefine((definition, ctx) => {\n const seen = new Set<string>()\n for (const [index, table] of definition.tables.entries()) {\n if (seen.has(table.table)) {\n ctx.addIssue({ code: 'custom', path: ['tables', index, 'table'], message: `duplicate relation '${table.table}'` })\n }\n seen.add(table.table)\n validateCellMetadata(table, index, ctx)\n if (table.source !== undefined) {\n for (const [columnIndex, column] of table.columns.entries()) {\n if (column.onUpdateFn !== undefined) {\n ctx.addIssue({\n code: 'custom',\n path: ['tables', index, 'columns', columnIndex],\n message: `synced table '${table.table}' column '${column.name}' cannot declare onUpdateFn`,\n })\n }\n }\n }\n }\n\n const fkTables = new Map(definition.tables.map(table => [table.table, table]))\n validateUnkeyedLinkIdentities({ definition, ctx })\n const relations = new Set([...fkTables.keys(), ...(definition.views ?? []).map(view => view.view)])\n for (const name of Object.keys(definition.exports ?? {})) {\n if (!relations.has(name)) ctx.addIssue({ code: 'custom', path: ['exports', name], message: `export '${name}' is not a local object` })\n }\n for (const [tableIndex, table] of definition.tables.entries()) {\n for (const [linkIndex, link] of table.links.entries()) {\n if (link.enforce && link.namespace !== undefined && link.namespace !== definition.namespace) {\n ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'links', linkIndex], message: 'physical foreign keys require a local target; use an ORM link without enforce' })\n }\n }\n const names = new Set([\n ...(table.primaryKey?.length ? [`${table.table}_pkey`] : []),\n ...table.columns.filter(column => column.unique && !(table.primaryKey?.length === 1 && table.primaryKey[0] === column.columnName)).map(column => `${table.table}_${column.columnName}_unique`),\n ...table.links.filter(link => link.enforce).map(link => `fk_${table.table}_${link.name}`),\n ])\n for (const [index, link] of table.links.entries()) {\n if ((link.onDelete !== undefined || link.onUpdate !== undefined) && (!link.enforce || link.kind !== 'toOne')) {\n ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'links', index], message: 'referential actions require an enforced toOne link' })\n }\n if (link.onDelete === 'set null' || link.onUpdate === 'set null') {\n const source = table.columns.find(column => column.columnName === link.on)\n if (source?.nullable === false || table.primaryKey?.includes(link.on)) ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'links', index], message: 'SET NULL requires a nullable source column' })\n }\n }\n for (const [index, check] of (table.checks ?? []).entries()) {\n const fail = (message: string) => ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'checks', index], message })\n if (table.source) fail('synced tables cannot declare checks')\n if (names.has(check.name)) fail(`duplicate constraint '${check.name}'`)\n names.add(check.name)\n try { compileCheckExpression(check.expression, table.columns) }\n catch (error) { fail(error instanceof Error ? error.message : String(error)) }\n }\n for (const [index, fk] of (table.foreignKeys ?? []).entries()) {\n const fail = (message: string) => ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'foreignKeys', index], message })\n if (names.has(fk.name)) fail(`duplicate foreign key '${fk.name}'`)\n names.add(fk.name)\n const target = fkTables.get(fk.target)\n if (table.source || !target || target.source) {\n fail('foreign keys must connect owned tables in the same namespace')\n continue\n }\n if (fk.columns.length !== fk.references.length) fail('foreign key columns and references must have the same number of columns')\n if (new Set(fk.columns).size !== fk.columns.length || new Set(fk.references).size !== fk.references.length) fail('foreign key columns must not repeat')\n for (const [position, name] of fk.columns.entries()) {\n const sourceColumn = table.columns.find(column => column.columnName === name)\n const targetColumn = target.columns.find(column => column.columnName === fk.references[position])\n if (!sourceColumn || !targetColumn) fail('foreign key references an unknown column')\n else if (JSON.stringify(sourceColumn.type) !== JSON.stringify(targetColumn.type)) fail('foreign key column types must match')\n }\n if (fk.onDelete === 'set null' || fk.onUpdate === 'set null') {\n if (fk.columns.some(name => table.columns.find(column => column.columnName === name)?.nullable === false || table.primaryKey?.includes(name))) fail('SET NULL requires nullable source columns')\n }\n const uniqueKeys = [target.primaryKey ?? [], ...target.indexes.filter(index => index.unique).map(index => index.columns), ...target.columns.filter(column => column.unique).map(column => [column.columnName])]\n if (!uniqueKeys.some(key => key.length === fk.references.length && key.every(column => fk.references.includes(column)))) fail('foreign key target columns must form a unique key')\n }\n }\n\n for (const [viewIndex, view] of (definition.views ?? []).entries()) {\n for (const message of validateResolvedView({ view, tables: definition.tables, views: definition.views ?? [] })) {\n ctx.addIssue({ code: 'custom', path: ['views', viewIndex, 'resolved'], message })\n }\n }\n\n // CoW mutations: overlay must be an owned table; synced twin must be a\n // synced table in this namespace; copy/set columns must exist on both sides.\n const tableByName = new Map(definition.tables.map((table) => [table.table, table]))\n for (const [tableIndex, table] of definition.tables.entries()) {\n const cowMutations = table.cowMutations ?? []\n if (cowMutations.length === 0) continue\n const path = (index: number, ...rest: Array<string | number>): Array<string | number> =>\n ['tables', tableIndex, 'cowMutations', index, ...rest]\n if (table.source !== undefined) {\n ctx.addIssue({ code: 'custom', path: path(0), message: `synced table '${table.table}' cannot declare cow mutations — it is read-only` })\n continue\n }\n for (const [index, mutation] of cowMutations.entries()) {\n const synced = tableByName.get(mutation.synced)\n if (!synced || synced.source === undefined) {\n ctx.addIssue({\n code: 'custom',\n path: path(index, 'synced'),\n message: `cow mutation '${mutation.name}' references '${mutation.synced}', which is not a synced table in this namespace`,\n })\n continue\n }\n // The full helper invariants, mirrored so hand-written canonical cannot\n // bypass them (the generated conflict/copy SQL depends on every one):\n // single-column PK identity on both sides, matching scalar types AND\n // Postgres column names for every copied column, and no nullable-synced\n // → NOT-NULL-overlay traps.\n const overlayColumnsByName = new Map(table.columns.map((column) => [column.name, column]))\n const syncedColumnsByName = new Map(synced.columns.map((column) => [column.name, column]))\n let columnsExist = true\n for (const property of [mutation.pk, ...mutation.copy, ...mutation.set]) {\n if (!overlayColumnsByName.has(property)) {\n columnsExist = false\n ctx.addIssue({ code: 'custom', path: path(index), message: `cow mutation '${mutation.name}': column '${property}' does not exist on overlay '${table.table}'` })\n }\n }\n for (const property of [mutation.pk, ...mutation.copy]) {\n if (!syncedColumnsByName.has(property)) {\n columnsExist = false\n ctx.addIssue({ code: 'custom', path: path(index), message: `cow mutation '${mutation.name}': column '${property}' does not exist on synced '${mutation.synced}'` })\n }\n }\n if (!columnsExist) continue\n\n const overlayPk = table.primaryKey ?? []\n const syncedPk = synced.primaryKey ?? []\n if (overlayPk.length !== 1 || overlayPk[0] !== mutation.pk || syncedPk.length !== 1 || syncedPk[0] !== mutation.pk) {\n ctx.addIssue({\n code: 'custom',\n path: path(index, 'pk'),\n message: `cow mutation '${mutation.name}': pk '${mutation.pk}' must be the single-column primary key on both '${table.table}' and '${mutation.synced}'`,\n })\n }\n for (const property of [mutation.pk, ...mutation.copy]) {\n const overlayColumn = overlayColumnsByName.get(property)\n const syncedColumn = syncedColumnsByName.get(property)\n if (!overlayColumn || !syncedColumn) continue\n if (JSON.stringify(overlayColumn.type) !== JSON.stringify(syncedColumn.type)) {\n ctx.addIssue({\n code: 'custom',\n path: path(index),\n message: `cow mutation '${mutation.name}': column '${property}' must have the same type on overlay and synced`,\n })\n }\n if (overlayColumn.columnName !== syncedColumn.columnName) {\n ctx.addIssue({\n code: 'custom',\n path: path(index),\n message: `cow mutation '${mutation.name}': column '${property}' maps to different Postgres names on overlay ('${overlayColumn.columnName}') and synced ('${syncedColumn.columnName}')`,\n })\n }\n if (syncedColumn.nullable !== false && overlayColumn.nullable === false) {\n ctx.addIssue({\n code: 'custom',\n path: path(index),\n message: `cow mutation '${mutation.name}': column '${property}' is nullable on synced but NOT NULL on overlay — a NULL synced value would fail the copy`,\n })\n }\n }\n }\n }\n for (const [index, view] of (definition.views ?? []).entries()) {\n if (seen.has(view.view)) {\n ctx.addIssue({ code: 'custom', path: ['views', index, 'view'], message: `duplicate relation '${view.view}'` })\n }\n seen.add(view.view)\n }\n\n const views = definition.views ?? []\n const viewByName = new Map(views.map((view) => [view.view, view]))\n for (const [viewIndex, view] of views.entries()) {\n for (const [dependencyIndex, dependency] of view.dependencies.entries()) {\n if (!seen.has(dependency)) {\n ctx.addIssue({\n code: 'custom',\n path: ['views', viewIndex, 'dependencies', dependencyIndex],\n message: `view '${view.view}' depends on unknown relation '${dependency}'`,\n })\n }\n }\n }\n\n const visiting = new Set<string>()\n const visited = new Set<string>()\n let cycleReported = false\n const visit = (name: string, path: string[]): void => {\n if (visited.has(name) || cycleReported) return\n if (visiting.has(name)) {\n cycleReported = true\n ctx.addIssue({\n code: 'custom',\n path: ['views'],\n message: `view dependencies form a cycle: ${[...path, name].join(' -> ')}`,\n })\n return\n }\n visiting.add(name)\n const view = viewByName.get(name)\n for (const dependency of view?.dependencies ?? []) {\n if (viewByName.has(dependency)) visit(dependency, [...path, name])\n }\n visiting.delete(name)\n visited.add(name)\n }\n for (const view of views) visit(view.view, [])\n})\nexport const canonicalDefinitionSchema = localDefinitionSchema.safeExtend({\n /** Flattened, pinned snapshots. Imported relations never participate in this namespace's DDL. */\n imports: z.array(localDefinitionSchema).max(32).optional(),\n})\nexport type CanonicalDefinition = z.infer<typeof canonicalDefinitionSchema>\n\n/**\n * Project namespace-local tables and views onto the shared read/query surface.\n * A view deliberately becomes a CanonicalTable-shaped relation with no write\n * policy, indexes, actions, defaults, or constraints. Keeping this adapter at\n * the canonical boundary makes SDL and compiler behavior identical without\n * pretending views are writable tables in the wire contract.\n */\n/** A table or view as the compiler/SDL see it; resolved views also carry their multi-source metadata. */\nexport type CanonicalRelation = CanonicalTable & { resolved?: CanonicalResolved }\n\nexport function canonicalRelations(definition: CanonicalDefinition): CanonicalRelation[] {\n const views = (definition.views ?? []).map<CanonicalRelation>((view) => ({\n table: view.view,\n ...(view.description !== undefined ? { description: view.description } : {}),\n columns: view.columns,\n ...(view.primaryKey !== undefined ? { primaryKey: view.primaryKey } : {}),\n links: view.links,\n indexes: [],\n // A resolved table's write policies (evaluated against the resolved row)\n // ride alongside the view's read policy.\n policies: { read: view.policies.read, ...(view.resolved?.policies ?? {}) },\n actions: [],\n ...(view.resolved !== undefined ? { resolved: view.resolved } : {}),\n ...(view.internal ? { internal: true as const } : {}),\n }))\n return [...definition.tables, ...views].sort((a, b) => a.table.localeCompare(b.table))\n}\n\n/**\n * Deterministic serialization discipline: tables sorted by name, columns in\n * declaration order (order is meaningful for DDL), links/indexes/actions\n * sorted by name, object keys emitted in schema order. `serializeNamespace`\n * (authoring layer) and the server-side re-validation both normalize through\n * this function before hashing so CLI and server hash identical bytes.\n */\nexport function normalizeCanonical(definition: CanonicalDefinition): CanonicalDefinition {\n const sortByName = <T extends { name: string }>(items: T[]): T[] =>\n [...items].sort((a, b) => a.name.localeCompare(b.name))\n const normalized: CanonicalDefinition = {\n ...definition,\n enums: sortByName(definition.enums),\n tables: [...definition.tables]\n .sort((a, b) => a.table.localeCompare(b.table))\n .map((t) => {\n const { cowMutations, foreignKeys, checks, ...rest } = t\n return {\n ...rest,\n links: sortByName(t.links),\n indexes: [...t.indexes].sort((a, b) =>\n (a.name ?? a.columns.join('_')).localeCompare(b.name ?? b.columns.join('_'))),\n actions: sortByName(t.actions),\n ...(foreignKeys?.length ? { foreignKeys: sortByName(foreignKeys) } : {}),\n ...(checks?.length ? { checks: sortByName(checks) } : {}),\n // Omitted entirely when absent/empty so pre-CoW documents hash unchanged.\n ...(cowMutations !== undefined && cowMutations.length > 0 ? { cowMutations: sortByName(cowMutations) } : {}),\n }\n }),\n }\n if (definition.views !== undefined) {\n normalized.views = [...definition.views]\n .sort((a, b) => a.view.localeCompare(b.view))\n .map((view) => ({\n ...view,\n links: sortByName(view.links),\n dependencies: [...view.dependencies].sort(),\n }))\n }\n if (definition.imports?.length) {\n normalized.imports = definition.imports.map(normalizeCanonical).sort((a, b) => a.namespace.localeCompare(b.namespace))\n } else {\n delete normalized.imports\n }\n return normalized\n}\n","/**\n * graphql-default (Hasura-style) camelCase naming for the v2 SDL generator.\n *\n * Verified against the bios marketplace corpus\n * (~/test/apps/marketplace/src/graphql, 871 ops):\n * - input types are singular PascalCase + suffix (`VideoClipBoolExp`,\n * `UserOrderBy`, `ProfileInsertInput`, `ThirdPartyIntegrationOnConflict`)\n * - roots keep the table's plurality camelCased (`videoClips`, `profileByPk`,\n * `profileAggregate`, `insertProfileOne`, `updateUserByPk`)\n * - order enum values: ASC / ASC_NULLS_FIRST / ... / DESC_NULLS_LAST\n * - SelectColumn / UpdateColumn enum values are camelCase field names\n * (`distinctOn: [role]`, `updateColumns: [sceneFile, buyerTagId]`)\n * - constraint enum values are raw Postgres constraint names\n * (`static_ad_pkey`, `audience_profile_id_name_key`)\n * - mutation args keep `_set` / `_append` / `_inc` underscores; everything\n * else camelCases (`pkColumns`, `updateColumns`, `distinctOn`,\n * `affectedRows`, `returning`)\n */\nimport { COLUMN_TYPES, type ColumnType } from '../canonical/v2.js'\n\n/** `deal_comments` → `dealComments`. Preserves already-camelCase input. */\nexport function camelCase(name: string): string {\n const segments = name.split('_').filter((segment) => segment.length > 0)\n const first = segments[0]\n if (first === undefined) return name\n const head = first.charAt(0).toLowerCase() + first.slice(1)\n return head + segments.slice(1).map(capitalizeFirst).join('')\n}\n\n/** `deal_comments` → `DealComments`. */\nexport function pascalCase(name: string): string {\n return capitalizeFirst(camelCase(name))\n}\n\nfunction capitalizeFirst(segment: string): string {\n return segment.charAt(0).toUpperCase() + segment.slice(1)\n}\n\n/**\n * Deterministic English-ish singularization of one word. Intentional,\n * documented misses exist (`statuses` → `statuse`): a full inflection engine\n * would make generated names depend on a dictionary. Ambiguous table names\n * are resolved by renaming the table (or a future explicit `graphqlName`\n * annotation), never by changing these rules — they are part of the wire\n * contract once a namespace ships.\n */\nfunction singularizeWord(word: string): string {\n if (word.endsWith('ies') && word.length > 3) return `${word.slice(0, -3)}y`\n for (const suffix of ['sses', 'xes', 'ches', 'shes']) {\n if (word.endsWith(suffix)) return word.slice(0, -2)\n }\n if (word.endsWith('ss')) return word\n if (word.endsWith('s') && word.length > 1) return word.slice(0, -1)\n return word\n}\n\n/** GraphQL object type name: `deal_comments` → `DealComment` (last word singularized). */\nexport function typeName(table: string): string {\n const segments = table.split('_').filter((segment) => segment.length > 0)\n const last = segments[segments.length - 1]\n if (last === undefined) return pascalCase(table)\n return [...segments.slice(0, -1), singularizeWord(last)].map(capitalizeFirst).join('')\n}\n\n/** Column → GraphQL field name: `author_sub` → `authorSub`. */\nexport function fieldName(column: string): string {\n return camelCase(column)\n}\n\n/** Postgres enum name → GraphQL enum type name: `deal_status` → `DealStatus`. */\nexport function enumTypeName(name: string): string {\n return pascalCase(name)\n}\n\n/** GraphQL type → comparison input name: `String` → `StringComparisonExp`, `uuid` → `UuidComparisonExp`. */\nexport function comparisonExpName(gqlTypeName: string): string {\n return `${capitalizeFirst(gqlTypeName)}ComparisonExp`\n}\n\n/** Maps the 10 canonical column types onto GraphQL scalar names. */\nconst SCALAR_FOR_COLUMN_TYPE: Record<ColumnType, string> = {\n uuid: 'uuid',\n text: 'String',\n integer: 'Int',\n bigint: 'bigint',\n numeric: 'numeric',\n double: 'Float',\n boolean: 'Boolean',\n timestamptz: 'timestamptz',\n date: 'date',\n jsonb: 'jsonb',\n}\n\nexport function graphqlScalarFor(type: ColumnType): string {\n return SCALAR_FOR_COLUMN_TYPE[type]\n}\n\n/**\n * GraphQL scalar name → canonical column type: the exact inverse of\n * SCALAR_FOR_COLUMN_TYPE plus the `ID` builtin (accepted as text). This is\n * the map the compiler's restrict pass classifies variable types with, so a\n * variable declared with a lowercase custom scalar exactly as the SDL\n * declares it (`$id: uuid!`, `$before: timestamptz`) resolves to the right\n * ColumnType — capitalized spellings (`Uuid`) are NOT names this schema\n * declares and never classify.\n */\nconst COLUMN_TYPE_BY_SCALAR: ReadonlyMap<string, ColumnType> = new Map<string, ColumnType>([\n ['ID', 'text'],\n ...COLUMN_TYPES.map((type): [string, ColumnType] => [graphqlScalarFor(type), type]),\n])\n\nexport function columnTypeForScalar(scalarName: string): ColumnType | undefined {\n return COLUMN_TYPE_BY_SCALAR.get(scalarName)\n}\n\n/** Every GraphQL scalar name usable as a variable type — for diagnostics. */\nexport const VARIABLE_SCALAR_NAMES: readonly string[] = [...COLUMN_TYPE_BY_SCALAR.keys()]\n\n/** The custom scalars every generated schema declares (plan §3). */\nexport const CUSTOM_SCALARS = ['bigint', 'date', 'jsonb', 'numeric', 'timestamptz', 'uuid'] as const\n\n/** Column types eligible for sum/avg aggregates and `_inc` updates. */\nexport const NUMERICISH_COLUMN_TYPES: readonly ColumnType[] = ['integer', 'bigint', 'numeric', 'double']\n\nexport const ORDER_BY_ENUM = 'OrderBy'\nexport const ORDER_BY_ENUM_VALUES = [\n 'ASC',\n 'ASC_NULLS_FIRST',\n 'ASC_NULLS_LAST',\n 'DESC',\n 'DESC_NULLS_FIRST',\n 'DESC_NULLS_LAST',\n] as const\n\n/** The built-in read-only platform users entity (plan §4b). */\nexport const PLATFORM_USER_TYPENAME = 'PlatformUser'\n\n/**\n * The shared date-bucket enum for grouped aggregates. Declared once per\n * schema (not per table) because the unit set is table-independent; its\n * members mirror `DATE_BUCKETS` in src/ir/index.ts, which is the contract the\n * executor reads.\n */\nexport const DATE_BUCKET_ENUM = 'DateBucket'\n\n/** Column types that may carry a `bucket:` in a group key. */\nexport const BUCKETABLE_COLUMN_TYPES: readonly ColumnType[] = ['timestamptz', 'date']\n\n/** Every generated GraphQL name derived from one table name. */\nexport interface TableNames {\n typename: string\n selectRoot: string\n byPkRoot: string\n aggregateRoot: string\n insertRoot: string\n insertOneRoot: string\n updateRoot: string\n updateByPkRoot: string\n deleteRoot: string\n deleteByPkRoot: string\n /** Resolved tables only: drop manual edits so other sources win again. */\n revertByPkRoot: string\n boolExp: string\n orderBy: string\n selectColumn: string\n insertInput: string\n setInput: string\n appendInput: string\n incInput: string\n onConflict: string\n pkColumnsInput: string\n constraintEnum: string\n updateColumnEnum: string\n mutationResponse: string\n aggregate: string\n aggregateFields: string\n sumFields: string\n avgFields: string\n aggregateBoolExp: string\n aggregateBoolExpCount: string\n aggregateGroupsRoot: string\n groupByColumnEnum: string\n groupByInput: string\n groupKey: string\n aggregateGroup: string\n}\n\nexport function tableNames(table: string): TableNames {\n const root = camelCase(table)\n const rootPascal = pascalCase(table)\n const type = typeName(table)\n return {\n typename: type,\n selectRoot: root,\n byPkRoot: `${root}ByPk`,\n aggregateRoot: `${root}Aggregate`,\n insertRoot: `insert${rootPascal}`,\n insertOneRoot: `insert${rootPascal}One`,\n updateRoot: `update${rootPascal}`,\n updateByPkRoot: `update${rootPascal}ByPk`,\n deleteRoot: `delete${rootPascal}`,\n deleteByPkRoot: `delete${rootPascal}ByPk`,\n revertByPkRoot: `revert${rootPascal}ByPk`,\n boolExp: `${type}BoolExp`,\n orderBy: `${type}OrderBy`,\n selectColumn: `${type}SelectColumn`,\n insertInput: `${type}InsertInput`,\n setInput: `${type}SetInput`,\n appendInput: `${type}AppendInput`,\n incInput: `${type}IncInput`,\n onConflict: `${type}OnConflict`,\n pkColumnsInput: `${type}PkColumnsInput`,\n constraintEnum: `${type}Constraint`,\n updateColumnEnum: `${type}UpdateColumn`,\n mutationResponse: `${type}MutationResponse`,\n aggregate: `${type}Aggregate`,\n aggregateFields: `${type}AggregateFields`,\n sumFields: `${type}SumFields`,\n avgFields: `${type}AvgFields`,\n aggregateBoolExp: `${type}AggregateBoolExp`,\n aggregateBoolExpCount: `${type}AggregateBoolExpCount`,\n aggregateGroupsRoot: `${root}AggregateGroups`,\n groupByColumnEnum: `${type}GroupByColumn`,\n groupByInput: `${type}GroupBy`,\n groupKey: `${type}GroupKey`,\n aggregateGroup: `${type}AggregateGroup`,\n }\n}\n\n/** Shared object types behind the typed `cells` field. */\nexport const CELL_TYPENAMES = {\n /** A plain table's cell: when and by whom it was last written. */\n stamp: 'CellStamp',\n /** A resolved table's cell: which source won, when, by whom, and newer losers. */\n resolved: 'ResolvedCell',\n /** A newer candidate that lost to the column's rule. */\n conflict: 'CellConflict',\n} as const\n\n/** `Loan` → `LoanCells`: the per-table object carrying one cell per tracked column. */\nexport function cellsTypename(typename: string): string {\n return `${typename}Cells`\n}\n","/** Runtime SQL inputs are values, never interpolated into the submitted SQL. */\n// SHA-256 of \"sequence-orm-builtin-sql-read-v1\". This identifies server-owned\n// behavior, independent of a namespace's authored operation manifest.\nexport const BUILTIN_SQL_READ_HASH = 'sha256:a50c477c952a5e0fe68ed158a4530e4aab573c09bcbb1a8ac454dc88a39a6258'\n\nexport type SqlQueryParameter =\n | { type: 'text' | 'uuid' | 'date' | 'timestamptz' | 'numeric' | 'bigint'; value: string | null }\n | { type: 'integer' | 'double'; value: number | null }\n | { type: 'boolean'; value: boolean | null }\n\nexport type SqlQueryVariables = {\n sql: string\n parameters?: Record<string, SqlQueryParameter>\n}\n\nexport interface SqlQueryResult {\n columns: Array<{ name: string; type: string; nullable: boolean }>\n rows: Array<Array<string | number | boolean | null>>\n truncated: boolean\n}\n","/**\n * Compiled-operation IR — THE frozen contract between the GraphQL compiler\n * (push time, CLI preview + canonical server compile) and the data-plane\n * executor (runtime). The artifact is inert, validated JSON: no generated\n * code ever crosses the registry (plan §4).\n *\n * Design invariants:\n * - Policies are BAKED IN at compile time: every table-touching node carries\n * its read policy AND-ed into `where` (or `writePolicy`/`insertCheck` for\n * mutation targets). Execution needs only (IR, claims, variables).\n * - §4f dynamic slots: a variable typed with a generated input type\n * (BoolExp/OrderBy/SelectColumn/InsertInput/SetInput/AppendInput/OnConflict)\n * marks a dynamic slot. The executor validates the runtime value against\n * the artifact's per-table whitelist metadata, lowers it to Drizzle, and\n * ANDs it with the baked policy — the policy is non-negotiable regardless\n * of what the client sends.\n * - `capability`/`role` predicate leaves resolve to booleans against the\n * caller's claims BEFORE execution, pruning dead branches per caller.\n * - Versioned via `irVersion` + `normalizeIr` (the normalizeSnapshot\n * pattern): executor upgrades decouple from artifact re-pushes.\n */\nimport { z } from 'zod'\nimport { COLUMN_TYPES, type ColumnType } from '../canonical/v2.js'\nimport { MAX_PERSISTED_READ_ROWS } from '../constants.js'\nimport { BUILTIN_SQL_READ_HASH } from '../client/sql.js'\nexport { CELL_PARTS, CELLS_FIELD, cellColumnName, type CellPart } from '../constants.js'\n\n/** Maximum supported version; emit the oldest version that preserves semantics. */\nexport const IR_VERSION = 5 as const\nexport const LEGACY_IR_VERSION = 1 as const\nexport const GUARDED_IR_VERSION = 2 as const\n/** Older v2 executors must not strip namespace-scoped authorization. */\nexport const COMPOSED_IR_VERSION = 3 as const\nexport const SQL_IR_VERSION = 4 as const\nexport const RUNTIME_SQL_IR_VERSION = 5 as const\nconst irVersionSchema = z.union([z.literal(LEGACY_IR_VERSION), z.literal(GUARDED_IR_VERSION), z.literal(COMPOSED_IR_VERSION), z.literal(SQL_IR_VERSION), z.literal(RUNTIME_SQL_IR_VERSION)])\nconst operationVersionSchema = z.object({ irVersion: irVersionSchema })\n\n/** Keep v1 artifact identity when assembling only legacy operations from registry rows. */\nexport function requiredArtifactIrVersion(operations: readonly unknown[]): z.infer<typeof irVersionSchema> {\n let required: z.infer<typeof irVersionSchema> = LEGACY_IR_VERSION\n for (const operation of operations) {\n const { irVersion } = operationVersionSchema.parse(operation)\n if (irVersion > required) required = irVersion\n }\n return required\n}\n\n// ---------------------------------------------------------------------------\n// Values & claims\n// ---------------------------------------------------------------------------\n\n/**\n * The exact claim keys the platform stamps — mirrors claims.ts.\n *\n * `ext_subject` and `ext_email` are verified-borrower claims: the subject and\n * (verified, lowercased) email of an external principal that reached the ORM\n * through an Artifact Next ingress. Only an embedding host's in-process\n * delegated credential carries them — never a bearer, data token or header —\n * and every other caller has them absent, which matches no row.\n */\nexport const CLAIMS_CONTRACT = {\n sub: 'string',\n org: 'string?',\n ext_subject: 'string?',\n ext_email: 'string?',\n roles: 'string[]',\n capabilities: 'string[]',\n} as const\n/** Verified-borrower claim keys; text-typed, compared to text columns with = only. */\nexport const EXTERNAL_POLICY_CLAIM_KEYS = ['ext_subject', 'ext_email'] as const\nexport type ExternalPolicyClaimKey = (typeof EXTERNAL_POLICY_CLAIM_KEYS)[number]\nexport type ClaimKey = 'sub' | 'org' | ExternalPolicyClaimKey\n\nexport function isExternalPolicyClaimKey(key: string): key is ExternalPolicyClaimKey {\n return (EXTERNAL_POLICY_CLAIM_KEYS as readonly string[]).includes(key)\n}\n\nconst scalarLiteral = z.union([z.string(), z.number(), z.boolean(), z.null()])\n\nexport const valueIrSchema = z.discriminatedUnion('kind', [\n z.object({ kind: z.literal('literal'), value: z.union([scalarLiteral, z.array(scalarLiteral)]) }),\n z.object({ kind: z.literal('variable'), name: z.string() }),\n z.object({ kind: z.literal('claim'), key: z.enum(['sub', 'org', ...EXTERNAL_POLICY_CLAIM_KEYS]) }),\n])\nexport type ValueIr = z.infer<typeof valueIrSchema>\n\n// ---------------------------------------------------------------------------\n// Predicates\n// ---------------------------------------------------------------------------\n\nexport const CMP_OPS = [\n 'eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'in', 'nin',\n 'like', 'ilike', 'isNull', 'contains', 'hasKey',\n] as const\nexport type CmpOp = (typeof CMP_OPS)[number]\n\nexport type PredIr =\n | { kind: 'and'; operands: PredIr[] }\n | { kind: 'or'; operands: PredIr[] }\n | { kind: 'not'; operand: PredIr }\n | { kind: 'cmp'; op: CmpOp; column: string; value: ValueIr }\n /** EXISTS through a declared link; `where` runs against the target table. */\n | { kind: 'exists'; link: string; where: PredIr }\n /** Aggregation predicate (Hasura `rel_aggregate: { count: { predicate } }`). */\n | { kind: 'aggPredicate'; link: string; fn: 'count'; op: Exclude<CmpOp, 'in' | 'nin' | 'like' | 'ilike' | 'isNull' | 'contains' | 'hasKey'>; value: number; where?: PredIr }\n /** Boolean claims leaves — pre-resolved against claims before execution. */\n | { kind: 'capability'; key: string; namespace?: string }\n | { kind: 'role'; key: string; namespace?: string }\n /** §4f: a client-supplied BoolExp variable lands here, validated + lowered at runtime. */\n | { kind: 'dynamicFilter'; slot: string }\n | { kind: 'const'; value: boolean }\n\nexport const predIrSchema: z.ZodType<PredIr> = z.lazy(() =>\n z.discriminatedUnion('kind', [\n z.object({ kind: z.literal('and'), operands: z.array(predIrSchema).min(1) }),\n z.object({ kind: z.literal('or'), operands: z.array(predIrSchema).min(1) }),\n z.object({ kind: z.literal('not'), operand: predIrSchema }),\n z.object({ kind: z.literal('cmp'), op: z.enum(CMP_OPS), column: z.string(), value: valueIrSchema }),\n z.object({ kind: z.literal('exists'), link: z.string(), where: predIrSchema }),\n z.object({\n kind: z.literal('aggPredicate'), link: z.string(), fn: z.literal('count'),\n op: z.enum(['eq', 'neq', 'gt', 'gte', 'lt', 'lte']), value: z.number(),\n where: predIrSchema.optional(),\n }),\n z.object({ kind: z.literal('capability'), key: z.string(), namespace: z.string().optional() }),\n z.object({ kind: z.literal('role'), key: z.string(), namespace: z.string().optional() }),\n z.object({ kind: z.literal('dynamicFilter'), slot: z.string() }),\n z.object({ kind: z.literal('const'), value: z.boolean() }),\n ]),\n) as z.ZodType<PredIr>\n\n// ---------------------------------------------------------------------------\n// Ordering / paging\n// ---------------------------------------------------------------------------\n\nexport const orderIrSchema = z.discriminatedUnion('kind', [\n z.object({\n kind: z.literal('column'),\n column: z.string(),\n /** Order through a to-one link: `link` is set and `column` is on the target. */\n link: z.string().optional(),\n direction: z.enum(['asc', 'desc']),\n nulls: z.enum(['first', 'last']).optional(),\n }),\n /** §4f: `$orderBy: [FooOrderBy!]` variable — validated + lowered at runtime. */\n z.object({ kind: z.literal('dynamic'), slot: z.string() }),\n])\nexport type OrderIr = z.infer<typeof orderIrSchema>\n\nexport const limitIrSchema = z.object({\n /** Fixed value or a variable, clamped to [1, max]; absent → default. */\n variable: z.string().optional(),\n value: z.number().int().positive().optional(),\n default: z.number().int().positive(),\n max: z.number().int().positive().max(MAX_PERSISTED_READ_ROWS),\n})\nexport type LimitIr = z.infer<typeof limitIrSchema>\n\n// ---------------------------------------------------------------------------\n// Selections\n// ---------------------------------------------------------------------------\n\n/** One cell of a `cells { … }` block: the parts selected for one column. */\nexport interface CellSelectionIr {\n alias: string\n /** Logical column whose cell this is. */\n column: string\n typename: string\n parts: Array<{\n alias: string\n part: 'source' | 'at' | 'by' | 'conflicts'\n /** `conflicts { … }`: the candidate fields selected, in order. */\n fields?: Array<{ alias: string; field: 'source' | 'at' | 'value' }>\n /** `conflicts { … }` element typename. */\n typename?: string\n }>\n}\n\nexport interface SelectionIr {\n /** GraphQL type name for __typename synthesis + Apollo normalization. */\n typename: string\n columns: Array<{ alias: string; column: string }>\n /** The typed `cells { … }` block (tables with cell metadata, resolved tables). */\n cells?: { alias: string; typename: string; fields: CellSelectionIr[] }\n relations: Array<{\n alias: string\n link: string\n selection: SelectionIr\n /** Fixed shape from the document; policy for the target table is ALSO\n * injected by the compiler into this `where` — never trust it absent. */\n where?: PredIr\n orderBy?: OrderIr[]\n limit?: LimitIr\n offset?: { variable?: string; value?: number }\n }>\n aggregates: Array<{\n alias: string\n /** Absent link = same-table aggregate (used by aggregate roots). */\n link?: string\n where?: PredIr\n count?: { columns?: string[]; distinct?: boolean }\n sum?: string[]\n avg?: string[]\n /** `nodes { }` selection inside an aggregate block. */\n nodes?: SelectionIr\n }>\n}\n\nconst selectionIrSchema: z.ZodType<SelectionIr> = z.lazy(() =>\n z.object({\n typename: z.string(),\n columns: z.array(z.object({ alias: z.string(), column: z.string() })),\n cells: z.object({\n alias: z.string(),\n typename: z.string(),\n fields: z.array(z.object({\n alias: z.string(),\n column: z.string(),\n typename: z.string(),\n parts: z.array(z.object({\n alias: z.string(),\n part: z.enum(['source', 'at', 'by', 'conflicts']),\n fields: z.array(z.object({ alias: z.string(), field: z.enum(['source', 'at', 'value']) })).optional(),\n typename: z.string().optional(),\n })),\n })),\n }).optional(),\n relations: z.array(z.object({\n alias: z.string(),\n link: z.string(),\n selection: selectionIrSchema,\n where: predIrSchema.optional(),\n orderBy: z.array(orderIrSchema).optional(),\n limit: limitIrSchema.optional(),\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n })),\n aggregates: z.array(z.object({\n alias: z.string(),\n link: z.string().optional(),\n where: predIrSchema.optional(),\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n nodes: selectionIrSchema.optional(),\n })),\n }),\n) as z.ZodType<SelectionIr>\n\nexport { selectionIrSchema }\n\n// ---------------------------------------------------------------------------\n// Roots\n// ---------------------------------------------------------------------------\n\n/** `@include(if: $var)` / `@skip(if: $var)` on a root field. */\nconst includeIfSchema = z.object({ variable: z.string(), negated: z.boolean() })\n\n/**\n * `@prefetch(source:)` on a resolved-table query root: before the SQL runs,\n * the data plane refreshes the named prefetch source for the keys this root\n * addresses. `key` is the single pk value (byPk / `pk: {_eq}`) or the pk list\n * (`pk: {_in}` on batch sources).\n */\nexport const prefetchPlanIrSchema = z.object({\n source: z.string(),\n maxStalenessMs: z.number().int().positive().optional(),\n key: z.union([z.object({ one: valueIrSchema }), z.object({ many: valueIrSchema })]),\n})\nexport type PrefetchPlanIr = z.infer<typeof prefetchPlanIrSchema>\n\nconst selectRootSchema = z.object({\n kind: z.literal('select'),\n alias: z.string(),\n table: z.string(),\n selection: selectionIrSchema,\n /** Composed at compile time: AND(policy, documentWhere?, dynamicFilter?). */\n where: predIrSchema,\n orderBy: z.array(orderIrSchema).default([]),\n distinctOn: z.union([z.array(z.string()), z.object({ slot: z.string() })]).optional(),\n limit: limitIrSchema,\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n includeIf: includeIfSchema.optional(),\n prefetch: z.array(prefetchPlanIrSchema).optional(),\n})\n\nconst byPkRootSchema = z.object({\n kind: z.literal('byPk'),\n alias: z.string(),\n table: z.string(),\n selection: selectionIrSchema,\n pk: z.array(z.object({ column: z.string(), value: valueIrSchema })).min(1),\n /** Policy predicate — ANDed with the PK match. */\n where: predIrSchema,\n includeIf: includeIfSchema.optional(),\n prefetch: z.array(prefetchPlanIrSchema).optional(),\n})\n\nconst aggregateRootSchema = z.object({\n kind: z.literal('aggregate'),\n alias: z.string(),\n table: z.string(),\n where: predIrSchema,\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n nodes: selectionIrSchema.optional(),\n includeIf: includeIfSchema.optional(),\n})\n\n/**\n * The date-bucket units a grouped aggregate may apply to a `date` /\n * `timestamptz` group key. A CLOSED enum on purpose: the executor maps each\n * member to a `date_trunc` literal, so no caller-supplied string ever reaches\n * SQL text. Adding a unit means adding it here AND to the executor's map —\n * the executor's exhaustive switch makes the omission a type error.\n */\nexport const DATE_BUCKETS = ['year', 'quarter', 'month', 'week', 'day', 'hour'] as const\nexport type DateBucket = (typeof DATE_BUCKETS)[number]\n\n/**\n * One group key: a column, optionally bucketed. `bucket` is only ever set on a\n * `date` / `timestamptz` column — the compiler rejects it on anything else, so\n * the executor can apply `date_trunc` without re-checking the column type.\n */\nconst groupByKeyIrSchema = z.object({\n column: z.string(),\n bucket: z.enum(DATE_BUCKETS).optional(),\n})\nexport type GroupByKeyIr = z.infer<typeof groupByKeyIrSchema>\n\n/**\n * A GROUPED aggregate root — `<t>AggregateGroups`. The ungrouped\n * `aggregateRootSchema` above stays exactly as it was; this is additive, so no\n * already-pushed artifact changes shape.\n *\n * Two deliberate omissions relative to the ungrouped root:\n * - no `nodes`. Per-group row lists are an unbounded fan-out (groups × rows)\n * and nothing needs them; the compiler rejects the field outright.\n * - `groupBy` is document-authored only — it is NOT a §4f dynamic slot. Group\n * keys pick which expressions reach GROUP BY, and dynamic-input.ts already\n * refuses aggregation shapes from client input for the same reason. The\n * `where` remains fully dynamic, which is what runtime filtering needs.\n */\nconst aggregateGroupsRootSchema = z.object({\n kind: z.literal('aggregateGroups'),\n alias: z.string(),\n table: z.string(),\n /** Composed at compile time: AND(policy, documentWhere?, dynamicFilter?). */\n where: predIrSchema,\n groupBy: z.array(groupByKeyIrSchema).min(1),\n /**\n * The `key { … }` projection: which group columns appear in each entry's key\n * object, in selection order. A subset of `groupBy` (the compiler rejects a\n * key field that is not a group key — it would be indeterminate within the\n * group). Empty when the document selects only `aggregate`.\n */\n key: z.array(z.object({ alias: z.string(), column: z.string() })).default([]),\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n /** Bounds the GROUP count, not the scanned rows — see MAX_GROUPS. */\n limit: limitIrSchema,\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n includeIf: includeIfSchema.optional(),\n})\n\n/** Column → value map for _set/_append/_inc, or a §4f whole-input slot. */\nconst writeValuesSchema = z.union([\n z.object({ slot: z.string() }),\n z.object({ entries: z.array(z.object({ column: z.string(), value: valueIrSchema })) }),\n])\n\nconst onConflictIrSchema = z.union([\n z.object({ slot: z.string() }),\n z.object({ constraint: z.string(), updateColumns: z.array(z.string()) }),\n])\n\nconst mutationRootSchema = z.object({\n kind: z.literal('mutation'),\n /**\n * CRUD verbs plus the structured copy-on-write ops. `cowOverride` copies the\n * synced row into the overlay (INSERT…SELECT, ON CONFLICT DO NOTHING) then\n * applies `set` — both statements generated by the executor from this\n * metadata, never authored SQL. `cowRevert` deletes the override so the\n * coalesce view falls back to synced. Both are gated on a matching synced\n * row and carry the write policy in `where` like update/delete.\n */\n op: z.enum(['insert', 'insertOne', 'update', 'updateByPk', 'delete', 'deleteByPk', 'cowOverride', 'cowRevert', 'resolvedWrite']),\n /**\n * resolvedWrite: a write to a resolved table (`table` is its view). The\n * executor gates on the resolved row (write policy in `where`), writes only\n * the touched cells into the manual source, then re-checks `insertCheck`\n * against the resolved row. `revert` clears `revertColumns` from the manual\n * source; `delete` tombstones the row there.\n */\n resolvedAction: z.enum(['insert', 'update', 'delete', 'revert']).optional(),\n revertColumns: z.array(z.string()).optional(),\n /** `@writeback(source:, mode:)` directives on this root. */\n writeback: z.array(z.object({ source: z.string(), mode: z.enum(['sync', 'async']) })).optional(),\n /** `@localOnly(source:)` — writeback columns deliberately kept local for these sources. */\n localOnly: z.array(z.string()).optional(),\n alias: z.string(),\n table: z.string(),\n /** CoW ops: logical name of the synced twin (read through its policy-filtered view). */\n cowSynced: z.string().optional(),\n /** cowOverride: logical properties copied INSERT…SELECT from synced (pk included). */\n cowCopyColumns: z.array(z.string()).optional(),\n /** cowOverride: insert-policy WITH CHECK evaluated over the copied rows. */\n cowCopyCheck: predIrSchema.optional(),\n /** insert/insertOne: rows come from a slot ($object/$objects) or literals. */\n objects: z.union([\n z.object({ slot: z.string() }),\n z.object({ rows: z.array(z.array(z.object({ column: z.string(), value: valueIrSchema }))) }),\n ]).optional(),\n /** Server-pinned columns (e.g. author_sub ← claim('sub')) merged into every inserted row. */\n pinnedColumns: z.array(z.object({ column: z.string(), value: valueIrSchema })).default([]),\n onConflict: onConflictIrSchema.optional(),\n set: writeValuesSchema.optional(),\n append: writeValuesSchema.optional(),\n inc: writeValuesSchema.optional(),\n /** update/delete row filter: AND(writePolicy, documentWhere/pk, dynamicFilter?). */\n where: predIrSchema.optional(),\n pk: z.array(z.object({ column: z.string(), value: valueIrSchema })).optional(),\n /** WITH CHECK analogue evaluated against NEW row values (insert/update). */\n insertCheck: predIrSchema.optional(),\n returning: selectionIrSchema.nullable(),\n affectedRows: z.boolean().default(false),\n /** v2: abort the transaction when the actual write count differs, regardless of selection. */\n assertAffectedRows: z.number().int().min(0).max(2147483647).optional(),\n includeIf: includeIfSchema.optional(),\n})\n\n// v2 has no action root kind — writes are mutations (CRUD or structured CoW\n// ops above). The former `kind: 'action'` scaffolding was removed before any\n// action operation was ever compiled into a registry artifact.\nexport const rootIrSchema = z.discriminatedUnion('kind', [\n selectRootSchema, byPkRootSchema, aggregateRootSchema, aggregateGroupsRootSchema, mutationRootSchema,\n])\nexport type RootIr = z.infer<typeof rootIrSchema>\n\n// ---------------------------------------------------------------------------\n// Variables (§4f dynamic slots) & operations\n// ---------------------------------------------------------------------------\n\nexport const INPUT_REF_KINDS = [\n 'boolExp', 'orderBy', 'selectColumn', 'insertInput', 'setInput', 'appendInput', 'onConflict',\n] as const\nexport type InputRefKind = (typeof INPUT_REF_KINDS)[number]\n\n/**\n * A declared GraphQL variable default, persisted verbatim so an omitted\n * variable resolves to it instead of silently becoming NULL. Wrapped in an\n * object so an explicit `= null` stays distinguishable from \"no default\".\n * Only shapes `ValueIr` can carry are representable — the restrict pass\n * rejects anything else (including §4f slot defaults) at compile time.\n */\nexport const variableDefaultIrSchema = z.object({\n value: z.union([scalarLiteral, z.array(scalarLiteral)]),\n})\nexport type VariableDefaultIr = z.infer<typeof variableDefaultIrSchema>\n\nexport const variableIrSchema = z.object({\n name: z.string(),\n type: z.union([\n z.object({ kind: z.literal('scalar'), scalar: z.enum(COLUMN_TYPES) }),\n /** `values` is the declared membership whitelist — the executor validates against it. */\n z.object({ kind: z.literal('enum'), name: z.string(), values: z.array(z.string()).min(1) }),\n /** §4f dynamic slot: validated against `tables[table]` whitelists at runtime. */\n z.object({ kind: z.literal('inputRef'), input: z.enum(INPUT_REF_KINDS), table: z.string() }),\n ]),\n nullable: z.boolean(),\n list: z.boolean(),\n /** Absent = no default declared; see {@link variableDefaultIrSchema}. */\n defaultValue: variableDefaultIrSchema.optional(),\n})\nexport type VariableIr = z.infer<typeof variableIrSchema>\n\nconst sqlColumnSchema = z.object({ name: z.string(), type: z.enum(['text', 'boolean', 'integer', 'bigint', 'numeric', 'double', 'uuid', 'date', 'timestamptz']), nullable: z.boolean() })\n\nexport const compiledOperationSchema = z.object({\n language: z.literal('sql').optional(),\n /** Server-compiled object catalog and permission ceiling, never caller SQL. */\n sqlQuery: z.object({\n catalog: z.object({\n identity: z.string(),\n objects: z.array(z.object({\n ref: z.string(), table: z.string(), columns: z.array(sqlColumnSchema.extend({ type: z.string() })).min(1),\n scan: z.string().min(1), read: z.array(z.string()).min(1),\n }).strict()).min(1).max(256),\n }).strict(),\n read: z.array(z.string()).min(1).max(256),\n maxRows: z.number().int().min(1).max(10_000),\n }).strict().optional(),\n sql: z.object({\n text: z.string().min(1).max(1_048_576),\n columns: z.array(sqlColumnSchema).min(1).max(256),\n parameters: z.array(z.string()).max(128),\n read: z.array(z.string()).min(1).max(256),\n maxRows: z.number().int().min(1).max(10_000),\n }).strict().optional(),\n irVersion: irVersionSchema,\n name: z.string(),\n opHash: z.string().regex(/^sha256:[0-9a-f]{64}$/),\n kind: z.enum(['query', 'mutation']),\n requires: z.object({\n capability: z.string().optional(),\n role: z.string().optional(),\n }).nullable(),\n variables: z.array(variableIrSchema),\n /** Every table the op touches — data-token scoping + audit. */\n tableSet: z.array(z.string()).min(1),\n roots: z.array(rootIrSchema),\n}).superRefine((operation, ctx) => {\n if (operation.language === 'sql') {\n const validPlan = operation.sqlQuery\n ? !operation.sql && operation.irVersion === RUNTIME_SQL_IR_VERSION\n : !!operation.sql && operation.irVersion === SQL_IR_VERSION\n const builtin = operation.name === 'BuiltinSqlRead'\n && operation.opHash === BUILTIN_SQL_READ_HASH\n && operation.requires === null\n if (!validPlan || operation.kind !== 'query' || operation.roots.length !== 0 || (!builtin && !operation.requires?.capability)) {\n ctx.addIssue({ code: 'custom', message: 'SQL operations require a query-only v4 plan or v5 runtime contract, capability, and no GraphQL roots' })\n }\n } else if (operation.sql || operation.sqlQuery || operation.roots.length === 0) {\n ctx.addIssue({ code: 'custom', message: 'GraphQL operations require roots and cannot carry SQL' })\n }\n for (const [index, root] of operation.roots.entries()) {\n if (root.kind !== 'mutation' || root.assertAffectedRows === undefined) continue\n if (operation.irVersion < 2 || operation.kind !== 'mutation' || root.includeIf !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['roots', index], message: 'affected-row assertions require unconditional mutation roots and IR v2' })\n }\n }\n})\nexport type CompiledOperation = z.infer<typeof compiledOperationSchema>\n\n// ---------------------------------------------------------------------------\n// Artifact: per-table runtime metadata + the operation set\n// ---------------------------------------------------------------------------\n\nexport const resolvedSourceIrSchema = z.object({\n name: z.string(),\n kind: z.enum(['manual', 'etl', 'prefetch']),\n /** Logical table key of the backing relation. */\n table: z.string(),\n columns: z.array(z.string()),\n key: z.string().optional(),\n fetch: z.union([\n z.object({ shape: z.literal('single') }),\n z.object({ shape: z.literal('batch'), maxKeys: z.number().int().positive() }),\n ]).optional(),\n function: z.object({ kind: z.enum(['managed', 'native']), id: z.string() }).optional(),\n prefetchDefaults: z.object({\n maxStalenessMs: z.number().int().positive(),\n timeoutMs: z.number().int().positive(),\n onError: z.enum(['fallback', 'fail']),\n }).optional(),\n writeback: z.object({\n columns: z.array(z.string()),\n defaultMode: z.enum(['sync', 'async']),\n timeoutMs: z.number().int().positive(),\n clearManualOnConfirm: z.boolean(),\n }).optional(),\n})\nexport type ResolvedSourceIr = z.infer<typeof resolvedSourceIrSchema>\n\nexport const resolvedMetaIrSchema = z.object({\n /** Logical pk column of the resolved view (single-column). */\n pk: z.string(),\n /** Source name of the manual source. */\n manual: z.string(),\n sources: z.array(resolvedSourceIrSchema),\n deletedBy: z.array(z.string()),\n /**\n * Materialized: the view reads `table`, which the data plane refreshes from\n * the `compute` view (claims-gated) whenever it writes a source row.\n */\n materialized: z.object({ table: z.string(), compute: z.string() }).optional(),\n})\nexport type ResolvedMetaIr = z.infer<typeof resolvedMetaIrSchema>\n\n/**\n * Runtime whitelist metadata per table — everything the executor needs to\n * build Drizzle table objects, validate §4f dynamic inputs, and lower them.\n * Derived from the canonical definition at compile time.\n */\nexport const tableMetaIrSchema = z.object({\n table: z.string(),\n namespace: z.string().optional(),\n dependencies: z.array(z.string()).optional(),\n foreignReferences: z.array(z.object({ column: z.string(), target: z.string(), targetColumn: z.string() })).optional(),\n exportRead: z.union([z.literal(true), z.object({ capability: z.string() }), z.object({ role: z.string() })]).optional(),\n exportWrite: z.union([z.literal(true), z.object({ capability: z.string() }), z.object({ role: z.string() })]).optional(),\n schema: z.string(),\n typename: z.string(),\n /**\n * True when statements over this relation evaluate a claims-gated synced\n * view: synced twins (`source: schema.table`) materialize as views whose baked\n * policy reads `current_setting('request.jwt.claims')`, and namespace views\n * inherit the gate transitively through their declared dependencies. The\n * executor must stamp that GUC (transaction-scoped) before any statement\n * touching such a relation, or the synced arm yields zero rows regardless\n * of the compiled predicates.\n */\n claimsGated: z.boolean().default(false),\n columns: z.array(z.object({\n name: z.string(),\n columnName: z.string(),\n type: z.union([z.enum(COLUMN_TYPES), z.object({ enum: z.string(), values: z.array(z.string()) })]),\n nullable: z.boolean(),\n })),\n /** Empty for keyless read-only views; keyed tables and views list logical columns. */\n primaryKey: z.array(z.string()),\n links: z.array(z.object({\n name: z.string(),\n kind: z.enum(['toOne', 'toMany', 'toPlatformUser']),\n target: z.string(),\n on: z.string(),\n references: z.string(),\n })),\n /** §4f whitelists: what dynamic inputs may reference. */\n filterable: z.array(z.string()),\n orderable: z.array(z.string()),\n insertable: z.array(z.string()),\n settable: z.array(z.string()),\n appendable: z.array(z.string()),\n /**\n * Logical columns stamped with Postgres `now()` on UPDATE (canonical\n * `onUpdateFn`). Omitted when empty so pre-onUpdate artifacts still parse.\n */\n touchOnUpdate: z.array(z.string()).optional(),\n /**\n * Per-cell metadata: logical column → the logical names of its cell-part\n * columns (which are listed in `columns`, but never filterable, orderable or\n * writable). Tables stamp `at`/`by` (and a manual source `rev`) on every\n * write; resolved views expose `source`/`at`/`by`/`conflicts`. Omitted when\n * the relation tracks no cells.\n */\n cells: z.record(z.string(), z.object({\n at: z.string().optional(),\n by: z.string().optional(),\n rev: z.string().optional(),\n source: z.string().optional(),\n conflicts: z.string().optional(),\n }).strict()).optional(),\n /** Resolved-table view metadata (sources, prefetch/writeback config) for the data plane. */\n resolved: resolvedMetaIrSchema.optional(),\n constraints: z.array(z.object({ name: z.string(), columns: z.array(z.string()) })),\n /** Depth/node caps for dynamic filter trees on this table. */\n dynamicFilterMaxDepth: z.number().int().positive().default(6),\n dynamicFilterMaxNodes: z.number().int().positive().default(64),\n})\nexport type TableMetaIr = z.infer<typeof tableMetaIrSchema>\n\nexport const compiledArtifactSchema = z.object({\n irVersion: irVersionSchema,\n namespace: z.string(),\n schemaHash: z.string(),\n ownSchemaHash: z.string().optional(),\n dependencies: z.record(z.string(), z.string()).optional(),\n readPolicies: z.record(z.string(), predIrSchema).optional(),\n opsHash: z.string(),\n /** Apply-observed synced objects without a serving backing; not part of the authored schema hash. */\n unbackedTables: z.array(z.string()).optional(),\n tables: z.record(z.string(), tableMetaIrSchema),\n operations: z.record(z.string(), compiledOperationSchema),\n}).superRefine((artifact, ctx) => {\n if (Object.keys(artifact.dependencies ?? {}).length > 0 && artifact.irVersion < COMPOSED_IR_VERSION) {\n ctx.addIssue({ code: 'custom', path: ['irVersion'], message: 'cross-namespace dependencies require IR v3' })\n }\n for (const [name, operation] of Object.entries(artifact.operations)) {\n if (operation.irVersion > artifact.irVersion) {\n ctx.addIssue({ code: 'custom', path: ['operations', name, 'irVersion'], message: 'operation requires a newer IR version than its artifact' })\n }\n }\n})\nexport type CompiledArtifact = z.infer<typeof compiledArtifactSchema>\n\n// ---------------------------------------------------------------------------\n// Versioning shim\n// ---------------------------------------------------------------------------\n\nexport class IrVersionError extends Error {\n constructor(found: unknown) {\n super(`Unsupported IR version ${String(found)} — this executor supports up to ${IR_VERSION}. ` +\n 'Upgrade @sequenceholdings/orm or re-push the namespace.')\n this.name = 'IrVersionError'\n }\n}\n\n/**\n * Validate + normalize a raw registry artifact (the normalizeSnapshot\n * pattern): future IR versions add upgrade branches here so executor\n * upgrades decouple from artifact re-pushes. Never trust registry jsonb —\n * the data plane calls this on every artifact load.\n */\nexport function normalizeIr(raw: unknown): CompiledArtifact {\n if (!raw || typeof raw !== 'object') throw new IrVersionError(undefined)\n const version = (raw as { irVersion?: unknown }).irVersion\n if (!irVersionSchema.safeParse(version).success) throw new IrVersionError(version)\n return compiledArtifactSchema.parse(raw)\n}\n\n/** Index an artifact's operations by opHash (the wire selector). */\nexport function indexByHash(artifact: CompiledArtifact): Map<string, CompiledOperation> {\n const map = new Map<string, CompiledOperation>()\n for (const op of Object.values(artifact.operations)) map.set(op.opHash, op)\n return map\n}\n","export class OrmDefinitionError extends Error {\n override readonly name = 'OrmDefinitionError'\n\n constructor(\n message: string,\n readonly file?: string,\n ) {\n super(file ? `${file}: ${message}` : message)\n }\n}\n\nexport class PredicateParseError extends Error {\n override readonly name = 'PredicateParseError'\n\n constructor(\n message: string,\n readonly position: number,\n ) {\n super(`${message} (at position ${position})`)\n }\n}\n","import { createHash } from 'node:crypto'\nimport { HASH_DOMAIN } from './constants.js'\nimport type { NamespaceCapabilities, NamespaceDefinition } from './schema/namespace.js'\nimport type { TableFile } from './schema/table.js'\n\ntype JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue }\n\n/** `Object.entries` widens Zod record values to `unknown` under tsup's DTS check. */\ntype RoleDefinition = NonNullable<NamespaceCapabilities['roles']['definitions'][string]>\ntype CapabilityDeclaration = NonNullable<NamespaceCapabilities['roles']['capabilities'][string]>\n\n/** Key-sorted, undefined-skipped JSON — identical definitions hash identically regardless of YAML key order. */\nexport function stableJson(value: unknown): string {\n if (value === null || typeof value !== 'object') return JSON.stringify(value)\n if (Array.isArray(value)) return `[${value.map(stableJson).join(',')}]`\n const entries = Object.entries(value as Record<string, unknown>)\n .filter(([, entryValue]) => entryValue !== undefined)\n .sort(([a], [b]) => (a < b ? -1 : 1))\n .map(([key, entryValue]) => `${JSON.stringify(key)}:${stableJson(entryValue)}`)\n return `{${entries.join(',')}}`\n}\n\n/** Empty collections hash as omitted — `indexes: []` and no indexes are the same definition. */\nfunction emptyToNull(value: unknown): JsonValue {\n if (value == null) return null\n if (Array.isArray(value)) return value.length === 0 ? null : (value as JsonValue)\n if (typeof value === 'object' && Object.keys(value).length === 0) return null\n return value as JsonValue\n}\n\n/** Predicates hash by their source text; parsed ASTs are derived and excluded. */\nfunction canonicalTable(table: TableFile): JsonValue {\n return {\n table: table.table,\n description: table.description ?? null,\n columns: (table.columns ?? null) as JsonValue,\n source: table.source ?? null,\n links: emptyToNull(table.links),\n indexes: emptyToNull(table.indexes),\n // insert/update are omitted rather than nulled when absent, so definitions\n // predating split policies keep the hash they were registered under.\n policies: {\n read: table.policies?.read?.source ?? null,\n write: table.policies?.write?.source ?? null,\n ...(table.policies?.insert !== undefined ? { insert: table.policies.insert.source } : {}),\n ...(table.policies?.update !== undefined ? { update: table.policies.update.source } : {}),\n } as JsonValue,\n actions: emptyToNull(\n Object.fromEntries(\n Object.entries(table.actions ?? {}).map(([name, action]) => [\n name,\n {\n description: action.description ?? null,\n requires: action.requires?.source ?? null,\n params: emptyToNull(action.params),\n validates: emptyToNull(action.validates?.map((entry) => entry.source)),\n executes: action.executes,\n returns: emptyToNull(action.returns),\n audit: (action.audit ?? null) as JsonValue,\n },\n ]),\n ),\n ),\n }\n}\n\n/**\n * The capabilities block, canonicalized: record keys sort via stableJson, and\n * we sort every array (uses, each role's inherits/grants) so authoring order\n * never changes the hash. Absent optional descriptions are omitted, not null,\n * so the canonical block round-trips back through the manifest schema. An empty\n * block hashes as omitted — \"no capabilities\" and an empty block are the same.\n */\nfunction canonicalCapabilities(capabilities: NamespaceCapabilities): JsonValue {\n const { definitions, capabilities: declared } = capabilities.roles\n const isEmpty =\n Object.keys(definitions).length === 0 && Object.keys(declared).length === 0 && capabilities.uses.length === 0\n if (isEmpty) return null\n // JSON-safe by construction (omitted optionals are dropped by stableJson); the\n // conditional spreads defeat structural inference, so assert the JsonValue shape.\n return {\n roles: {\n definitions: Object.fromEntries(\n (Object.entries(definitions) as [string, RoleDefinition][]).map(([key, def]) => [\n key,\n {\n ...(def.description !== undefined ? { description: def.description } : {}),\n default: def.default,\n inherits: [...def.inherits].sort(),\n grants: [...def.grants].sort(),\n },\n ]),\n ),\n capabilities: Object.fromEntries(\n (Object.entries(declared) as [string, CapabilityDeclaration][]).map(([key, cap]) => [\n key,\n cap.description !== undefined ? { description: cap.description } : {},\n ]),\n ),\n },\n uses: [...capabilities.uses].sort(),\n } as JsonValue\n}\n\nexport function canonicalizeDefinition(definition: NamespaceDefinition): JsonValue {\n return {\n namespace: definition.namespace,\n description: definition.description,\n capabilities: canonicalCapabilities(definition.capabilities),\n tables: definition.tables.map(canonicalTable),\n }\n}\n\nexport function computeDefinitionHash(definition: NamespaceDefinition): string {\n return createHash('sha256')\n .update(HASH_DOMAIN)\n .update(stableJson(canonicalizeDefinition(definition)))\n .digest('hex')\n}\n","import { canonicalRelations, localDefinitionSchema, normalizeCanonical, type CanonicalDefinition } from './v2.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { stableJson } from '../hash.js'\n\n/** The contract an owner publishes: its local schema/policies, without consumers' dependency copies. */\nexport function localContract(definition: CanonicalDefinition): CanonicalDefinition {\n return normalizeCanonical(localDefinitionSchema.parse(definition))\n}\n\n/** Accept generated contracts with transitive imports, pinning one local snapshot per namespace. */\nexport function flattenNamespaceImports(inputs: readonly unknown[]): CanonicalDefinition[] {\n const definitions = new Map<string, CanonicalDefinition>()\n const visit = (value: unknown, depth: number): void => {\n if (depth > 16 || definitions.size > 32) throw new OrmDefinitionError('namespace import graph is too large')\n const definition = localContract(localDefinitionSchema.parse(value))\n const previous = definitions.get(definition.namespace)\n if (previous) {\n if (stableJson(previous) !== stableJson(definition)) throw new OrmDefinitionError(`conflicting contracts for namespace '${definition.namespace}'`)\n }\n definitions.set(definition.namespace, definition)\n if (typeof value === 'object' && value !== null && 'imports' in value && Array.isArray(value.imports)) {\n for (const dependency of value.imports) visit(dependency, depth + 1)\n }\n }\n for (const input of inputs) visit(input, 0)\n return [...definitions.values()].sort((a, b) => a.namespace.localeCompare(b.namespace))\n}\n\n/** A compiler-only projection. DDL always consumes the original, uncomposed definition. */\nexport function composeNamespace(definition: CanonicalDefinition): {\n definition: CanonicalDefinition\n owners: Map<string, CanonicalDefinition>\n} {\n const all = [localContract(definition), ...(definition.imports ?? [])]\n const owners = new Map<string, CanonicalDefinition>()\n const namespaces = new Set<string>()\n const enums = new Map<string, CanonicalDefinition['enums'][number]>()\n for (const owner of all) {\n if (namespaces.has(owner.namespace)) throw new OrmDefinitionError(`duplicate imported namespace '${owner.namespace}'`)\n namespaces.add(owner.namespace)\n for (const value of owner.enums) {\n const previous = enums.get(value.name)\n if (previous && stableJson(previous) !== stableJson(value)) {\n throw new OrmDefinitionError(`conflicting imported enum '${value.name}'`)\n }\n enums.set(value.name, value)\n }\n for (const relation of canonicalRelations(owner)) {\n // Naming-collision product UX is separate; never silently select a different owner.\n if (owners.has(relation.table)) throw new OrmDefinitionError(`ambiguous imported relation '${relation.table}'`)\n owners.set(relation.table, owner)\n }\n }\n for (const owner of definition.imports?.length ? all : []) {\n for (const relation of canonicalRelations(owner)) {\n for (const link of relation.links) {\n if (link.kind === 'toPlatformUser') continue\n const target = owners.get(link.target ?? '')\n if (!target || target.namespace !== (link.namespace ?? owner.namespace)) {\n throw new OrmDefinitionError(`link '${owner.namespace}/${relation.table}.${link.name}' has no matching imported target`)\n }\n if (target.namespace !== owner.namespace && !target.exports?.[link.target ?? '']) {\n throw new OrmDefinitionError(`target '${target.namespace}/${link.target}' is not exported`)\n }\n }\n }\n }\n return {\n owners,\n definition: {\n ...localContract(definition),\n tables: all.flatMap(item => item.tables),\n views: all.flatMap(item => item.views ?? []),\n enums: [...enums.values()],\n },\n }\n}\n","/**\n * SDL generation (plan §3): pure `(canonical) → string`, offline and\n * byte-deterministic. The output is the schema consumers commit as\n * `schema.graphql` and point graphql-codegen at; the GraphQL→IR compiler\n * validates documents against the same SDL.\n *\n * Determinism discipline: the canonical definition is normalized\n * (`normalizeCanonical` — tables/links/indexes/enums sorted, columns kept in\n * declaration order), every derived collection is emitted in a fixed order,\n * and nothing time- or environment-dependent enters the output.\n */\nimport {\n canonicalRelations,\n canonicalDefinitionSchema,\n normalizeCanonical,\n type CanonicalColumn,\n type CanonicalDefinition,\n type CanonicalRelation,\n type CanonicalTable,\n type ColumnType,\n RESOLVED_VIEW_SYSTEM_COLUMNS,\n} from '../canonical/v2.js'\nimport { CELLS_FIELD } from '../constants.js'\nimport { DATE_BUCKETS } from '../ir/index.js'\nimport { composeNamespace } from '../canonical/composition.js'\nimport {\n CUSTOM_SCALARS,\n DATE_BUCKET_ENUM,\n NUMERICISH_COLUMN_TYPES,\n ORDER_BY_ENUM,\n ORDER_BY_ENUM_VALUES,\n PLATFORM_USER_TYPENAME,\n comparisonExpName,\n enumTypeName,\n fieldName,\n graphqlScalarFor,\n tableNames,\n CELL_TYPENAMES,\n cellsTypename,\n type TableNames,\n} from './naming.js'\n\nexport class SdlGenerationError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'SdlGenerationError'\n }\n}\n\nexport interface GenerateSdlOptions {\n /**\n * Server-pinned columns per table (computed by the compiler from write\n * policies — a column referenced via claim comparison, e.g.\n * `author_sub = claim('sub')`, is stamped server-side on insert and must\n * not be client-suppliable). Pinned columns are excluded from\n * `<Type>InsertInput` only; they remain readable, filterable, orderable,\n * and settable. Entries match either the column's TS `name` or its\n * Postgres `columnName`.\n */\n pinnedColumns?: Record<string, string[]>\n /**\n * Declare `_like`/`_ilike` on String only, as @sequenceholdings/orm 2.1.x\n * generated it, before integer and uuid columns took pattern filters. Atlas\n * regenerates this shape only to recognize a schema.graphql pushed by a\n * released CLI; operations always compile against the default shape.\n */\n stringOnlyPatternOperators?: boolean\n /** Reproduce earlier SDL for the server's compatibility check only. */\n omitReadBudgetDirective?: boolean\n}\n\nconst GRAPHQL_NAME_RE = /^[_A-Za-z][_0-9A-Za-z]*$/\nconst RESERVED_ENUM_VALUES = new Set(['true', 'false', 'null'])\n\nconst NUMERICISH = new Set<ColumnType>(NUMERICISH_COLUMN_TYPES)\n\n/** PlatformUser curated fields (plan §4b) in contract order. */\nconst PLATFORM_USER_FIELDS: ReadonlyArray<{ name: string; gqlType: string; nullable: boolean }> = [\n { name: 'sub', gqlType: 'String', nullable: false },\n { name: 'email', gqlType: 'String', nullable: true },\n { name: 'name', gqlType: 'String', nullable: true },\n { name: 'organization', gqlType: 'String', nullable: true },\n { name: 'role', gqlType: 'String', nullable: true },\n { name: 'managerId', gqlType: 'String', nullable: true },\n { name: 'accountEnabled', gqlType: 'Boolean', nullable: false },\n]\n\nexport function generateSdl(canonical: CanonicalDefinition, options: GenerateSdlOptions = {}): string {\n const def = composeNamespace(normalizeCanonical(canonicalDefinitionSchema.parse(canonical))).definition\n // Synced (`source: schema.table`) tables stay out of GraphQL roots in v2.0 (read via\n // materialization / managed views). Columns may still be declared for typing.\n // Internal tables (a resolved table's manual/prefetch sources) are data-plane\n // owned and never exposed.\n const exposed = canonicalRelations(def).filter((table) => table.source === undefined && table.internal !== true)\n // Cell-metadata columns never become scalar fields: they surface through the\n // typed `cells` object instead. Strip them once so every block below sees\n // data columns only.\n const cellsByTable = new Map(exposed.map((table) => [table.table, trackedCells(table)]))\n const tables = exposed.map((table) => ({ ...table, columns: table.columns.filter((column) => column.cell === undefined) }))\n if (tables.length === 0) {\n throw new SdlGenerationError(\n `Namespace \"${def.namespace}\" exposes no relations (synced tables are excluded from SDL in v2.0) — nothing to generate.`,\n )\n }\n for (const table of tables) {\n if (table.columns.length === 0) {\n throw new SdlGenerationError(`Relation \"${table.table}\" has no columns — cannot generate an object type.`)\n }\n }\n\n const namesByTable = new Map<string, TableNames>(tables.map((table) => [table.table, tableNames(table.table)]))\n const enumByName = new Map(def.enums.map((entry) => [entry.name, entry]))\n\n const hasPlatformUser = tables.some((table) => table.links.some((link) => link.kind === 'toPlatformUser'))\n\n /** Enums actually referenced by an exposed column — declared-but-unused enums are omitted. */\n const usedEnums = new Set<string>()\n for (const table of tables) {\n for (const column of table.columns) {\n if (typeof column.type === 'object') {\n if (!enumByName.has(column.type.enum)) {\n throw new SdlGenerationError(\n `Column \"${table.table}.${column.columnName}\" references undeclared enum \"${column.type.enum}\".`,\n )\n }\n usedEnums.add(column.type.enum)\n }\n }\n }\n\n /** Tables reachable through a toMany link get an aggregate predicate input (count only, §4d). */\n const aggregateBoolExpTargets = new Set<string>()\n for (const table of tables) {\n for (const link of table.links) {\n if (link.kind === 'toMany' && link.target !== undefined && namesByTable.has(link.target)) {\n aggregateBoolExpTargets.add(link.target)\n }\n }\n }\n\n const usedComparisonScalars = new Set<string>()\n for (const table of tables) {\n for (const column of table.columns) {\n if (typeof column.type !== 'object') usedComparisonScalars.add(graphqlScalarFor(column.type))\n }\n }\n if (hasPlatformUser) {\n usedComparisonScalars.add('String')\n usedComparisonScalars.add('Boolean')\n }\n // Aggregate predicates compare counts: `predicate: IntComparisonExp!`.\n if (aggregateBoolExpTargets.size > 0) usedComparisonScalars.add('Int')\n\n const blocks: string[] = []\n\n blocks.push(\n `# Generated by @sequenceholdings/orm — GraphQL SDL for namespace \"${def.namespace}\".\\n` +\n '# Do not edit: regenerate with `seq-studio orm generate`.',\n )\n\n blocks.push('directive @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT')\n blocks.push(\n '\"\"\"Gates an operation behind a platform capability or custom role — checked by the data plane before execution.\"\"\"\\n' +\n 'directive @requires(capability: String, role: String) on QUERY | MUTATION',\n )\n if (!options.omitReadBudgetDirective) blocks.push(\n '\"\"\"Sets a document-authored ceiling of 1–50001 rows for one flat select root. Runtime variables cannot raise it.\"\"\"\\n' +\n 'directive @readBudget(maxRows: Int!) on QUERY',\n )\n blocks.push('directive @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT')\n blocks.push(\n '\"\"\"Abort the entire mutation unless this root affects exactly the document-authored number of rows. Mutation roots only; cannot be conditional.\"\"\"\\n' +\n 'directive @assertAffectedRows(exactly: Int!) on FIELD',\n )\n if (tables.some((table) => table.resolved !== undefined)) blocks.push(...RESOLVED_DIRECTIVE_BLOCKS)\n\n for (const scalar of CUSTOM_SCALARS) blocks.push(`scalar ${scalar}`)\n blocks.push(...renderSharedCellTypes([...cellsByTable.values()]))\n\n blocks.push(renderEnum(ORDER_BY_ENUM, [...ORDER_BY_ENUM_VALUES]))\n // Shared by every table's grouped-aggregate root; the unit set is\n // table-independent, so it is declared once. SDL spells enum members\n // uppercase (as OrderBy does); the lowerer maps them back to the IR's\n // lowercase `DATE_BUCKETS` members.\n blocks.push(renderEnum(DATE_BUCKET_ENUM, DATE_BUCKETS.map((bucket) => bucket.toUpperCase())))\n\n for (const enumName of [...usedEnums].sort()) {\n const entry = enumByName.get(enumName)\n if (!entry) continue\n for (const value of entry.values) assertEnumValue(value, `enum \"${enumName}\"`)\n blocks.push(renderEnum(enumTypeName(enumName), entry.values))\n }\n\n const patternTypes = options.stringOnlyPatternOperators ? STRING_PATTERN_COMPARISON_TYPES : PATTERN_COMPARISON_TYPES\n for (const scalar of [...usedComparisonScalars].sort()) {\n blocks.push(renderComparisonExp({ gqlTypeName: scalar, patternTypes }))\n }\n for (const enumName of [...usedEnums].sort()) {\n blocks.push(renderComparisonExp({ gqlTypeName: enumTypeName(enumName), patternTypes }))\n }\n\n if (hasPlatformUser) blocks.push(...renderPlatformUserBlocks())\n\n for (const table of tables) {\n const names = namesByTable.get(table.table)\n if (!names) continue\n blocks.push(\n ...renderTableBlocks({\n table,\n names,\n namesByTable,\n emitAggregateBoolExp: aggregateBoolExpTargets.has(table.table),\n pinned: options.pinnedColumns?.[table.table] ?? [],\n cells: cellsByTable.get(table.table) ?? null,\n }),\n )\n }\n\n blocks.push(renderQueryRoot(tables, namesByTable))\n\n const mutationRoot = renderMutationRoot(tables, namesByTable)\n if (mutationRoot !== null) blocks.push(mutationRoot)\n\n assertNoDuplicateTypeNames(blocks)\n return `${blocks.join('\\n\\n')}\\n`\n}\n\n/** `type Foo {`, `input Foo {`, `enum Foo {`, `scalar foo` → the declared name. */\nconst TYPE_DECLARATION_RE = /^(?:type|input|enum|scalar|interface|union)\\s+([_A-Za-z][_0-9A-Za-z]*)/\n\n/**\n * Two schema-level declarations sharing a name produce SDL that `buildSchema`\n * rejects with \"There can be only one type named X\" — pointing at the schema\n * rather than at the definition that caused it.\n *\n * The collision is easy to reach because canonical names are PascalCased into\n * GraphQL type names, so a namespace enum called `date_bucket` renders as\n * `DateBucket` and lands on the shared bucket enum; `order_by` lands on\n * `OrderBy`. Table names can collide the same way (`typeName` singularizes, so\n * `deal` and `deals` both give `Deal`).\n *\n * Checked over the ASSEMBLED blocks rather than against a hand-maintained\n * reserved-name list, which would silently go stale the next time the\n * generator learns to emit a new shared type — as it just did.\n */\nfunction assertNoDuplicateTypeNames(blocks: readonly string[]): void {\n const seen = new Set<string>()\n for (const block of blocks) {\n const declared = TYPE_DECLARATION_RE.exec(block)?.[1]\n if (declared === undefined) continue\n if (seen.has(declared)) {\n throw new SdlGenerationError(\n `Generated schema declares \"${declared}\" twice. A canonical enum or table name is PascalCased into this GraphQL type name and collides with another declaration (for example an enum named \"date_bucket\" renders as \"DateBucket\", the shared bucket enum). Rename the offending enum or table.`,\n )\n }\n seen.add(declared)\n }\n}\n\n// ---------------------------------------------------------------------------\n// Rendering helpers\n// ---------------------------------------------------------------------------\n\nfunction assertEnumValue(value: string, context: string): void {\n if (!GRAPHQL_NAME_RE.test(value) || RESERVED_ENUM_VALUES.has(value)) {\n throw new SdlGenerationError(\n `Value \"${value}\" in ${context} is not a valid GraphQL enum value (must match ${GRAPHQL_NAME_RE} and not be true/false/null).`,\n )\n }\n}\n\nfunction renderEnum(name: string, values: readonly string[]): string {\n return `enum ${name} {\\n${values.map((value) => ` ${value}`).join('\\n')}\\n}`\n}\n\n/** `\"\"\"…\"\"\"` description block lines, with embedded triple-quotes escaped. */\nfunction descriptionLines(text: string, indent: string): string[] {\n const escaped = text.replace(/\"\"\"/g, '\\\\\"\"\"')\n return [`${indent}\"\"\"`, ...escaped.split('\\n').map((line) => `${indent}${line}`), `${indent}\"\"\"`]\n}\n\n/**\n * GraphQL types whose comparison input takes `_like`/`_ilike` (a String\n * pattern): text, and the integer and uuid types the executor matches by\n * their text form (`allowedOps`).\n */\nconst PATTERN_COMPARISON_TYPES: ReadonlySet<string> = new Set(['String', 'Int', 'bigint', 'uuid'])\n\n/** The 2.1.x set (`GenerateSdlOptions.stringOnlyPatternOperators`). */\nconst STRING_PATTERN_COMPARISON_TYPES: ReadonlySet<string> = new Set(['String'])\n\n/**\n * Comparison input for one GraphQL type. Uniform base operator set, plus\n * `_like`/`_ilike` on String, Int, bigint and uuid and `_contains`/`_hasKey`\n * on jsonb (§4d). Fields sort alphabetically for byte determinism.\n */\nfunction renderComparisonExp({ gqlTypeName, patternTypes }: {\n gqlTypeName: string\n patternTypes: ReadonlySet<string>\n}): string {\n const fields: Array<[string, string]> = [\n ['_eq', gqlTypeName],\n ['_neq', gqlTypeName],\n ['_gt', gqlTypeName],\n ['_gte', gqlTypeName],\n ['_lt', gqlTypeName],\n ['_lte', gqlTypeName],\n ['_in', `[${gqlTypeName}!]`],\n ['_nin', `[${gqlTypeName}!]`],\n ['_isNull', 'Boolean'],\n ]\n if (patternTypes.has(gqlTypeName)) {\n fields.push(['_like', 'String'], ['_ilike', 'String'])\n }\n if (gqlTypeName === 'jsonb') {\n fields.push(['_contains', 'jsonb'], ['_hasKey', 'String'])\n }\n fields.sort(([a], [b]) => a.localeCompare(b))\n const body = fields.map(([field, type]) => ` ${field}: ${type}`).join('\\n')\n return `input ${comparisonExpName(gqlTypeName)} {\\n${body}\\n}`\n}\n\nfunction renderPlatformUserBlocks(): string[] {\n const typeFields = PLATFORM_USER_FIELDS.map(\n (field) => ` ${field.name}: ${field.gqlType}${field.nullable ? '' : '!'}`,\n ).join('\\n')\n const boolExpName = `${PLATFORM_USER_TYPENAME}BoolExp`\n const boolFields = [\n ` _and: [${boolExpName}!]`,\n ` _not: ${boolExpName}`,\n ` _or: [${boolExpName}!]`,\n ...PLATFORM_USER_FIELDS.map((field) => ` ${field.name}: ${comparisonExpName(field.gqlType)}`),\n ].join('\\n')\n const orderFields = PLATFORM_USER_FIELDS.map((field) => ` ${field.name}: ${ORDER_BY_ENUM}`).join('\\n')\n return [\n '\"\"\"Curated read-only view over platform users (plan §4b) — reachable only through `toPlatformUser` links.\"\"\"\\n' +\n `type ${PLATFORM_USER_TYPENAME} {\\n${typeFields}\\n}`,\n `input ${boolExpName} {\\n${boolFields}\\n}`,\n `input ${PLATFORM_USER_TYPENAME}OrderBy {\\n${orderFields}\\n}`,\n ]\n}\n\n/** Declared only for namespaces with resolved tables, so other SDL is unchanged. */\nconst RESOLVED_DIRECTIVE_BLOCKS = [\n '\"\"\"Refresh this resolved-table root from a prefetch source before reading. Key-addressed roots only; the source must support the root shape.\"\"\"\\n' +\n 'directive @prefetch(source: String!, maxStaleness: String) repeatable on FIELD',\n renderEnum('WritebackMode', ['SYNC', 'ASYNC']),\n '\"\"\"Write this resolved-table mutation back to a prefetch source (SYNC rolls back on failure; ASYNC queues).\"\"\"\\n' +\n 'directive @writeback(source: String!, mode: WritebackMode) repeatable on FIELD',\n '\"\"\"Declare that this mutation deliberately keeps writeback columns local to the named source.\"\"\"\\n' +\n 'directive @localOnly(source: String!) repeatable on FIELD',\n]\n\ninterface TableRenderContext {\n table: CanonicalRelation\n names: TableNames\n namesByTable: Map<string, TableNames>\n emitAggregateBoolExp: boolean\n pinned: string[]\n /** Tracked cells, or null when the relation has no cell metadata. */\n cells: TrackedCells | null\n}\n\ninterface TrackedCells {\n resolved: boolean\n /** Logical column names, in declaration order. */\n columns: string[]\n}\n\nfunction trackedCells(table: CanonicalRelation): TrackedCells | null {\n const columns = [...new Set(table.columns.flatMap((column) => (column.cell ? [column.cell.of] : [])))]\n if (columns.length === 0) return null\n return { resolved: table.columns.some((column) => column.cell?.part === 'source'), columns }\n}\n\n/** The shared cell object types, declared only when some relation tracks cells. */\nfunction renderSharedCellTypes(all: ReadonlyArray<TrackedCells | null>): string[] {\n const present = all.filter((cells): cells is TrackedCells => cells !== null)\n const blocks: string[] = []\n if (present.some((cells) => !cells.resolved)) {\n blocks.push(`\"\"\"When, and by whom, a cell was last written.\"\"\"\\ntype ${CELL_TYPENAMES.stamp} {\\n at: timestamptz!\\n by: String\\n}`)\n }\n if (present.some((cells) => cells.resolved)) {\n blocks.push(`\"\"\"A newer candidate value that lost to the column's resolve rule.\"\"\"\\ntype ${CELL_TYPENAMES.conflict} {\\n source: String!\\n at: timestamptz\\n value: jsonb\\n}`)\n blocks.push(`\"\"\"How a resolved cell was decided: the winning source, its time and actor, and newer losers.\"\"\"\\ntype ${CELL_TYPENAMES.resolved} {\\n source: String!\\n at: timestamptz\\n by: String\\n conflicts: [${CELL_TYPENAMES.conflict}!]!\\n}`)\n }\n return blocks\n}\n\n/** `type LoanCells { status: CellStamp … }` — null cells were never written (or have no candidate). */\nfunction renderCellsType(ctx: TableRenderContext): string[] {\n if (!ctx.cells) return []\n const cellType = ctx.cells.resolved ? CELL_TYPENAMES.resolved : CELL_TYPENAMES.stamp\n const lines = ctx.cells.columns.map((column) => ` ${fieldName(column)}: ${cellType}`)\n return [`type ${cellsTypename(ctx.names.typename)} {\\n${lines.join('\\n')}\\n}`]\n}\n\n/** `where/orderBy/limit/offset` args for a to-many relation field. */\nfunction relationArgs(target: TableNames): string {\n return `where: ${target.boolExp}, orderBy: [${target.orderBy}!], limit: Int, offset: Int`\n}\n\n/** Root select/aggregate args — relations plus `distinctOn`. */\nfunction rootArgs(names: TableNames): string {\n return `where: ${names.boolExp}, orderBy: [${names.orderBy}!], distinctOn: [${names.selectColumn}!], limit: Int, offset: Int`\n}\n\n/** Resolve the PK identifiers to canonical columns (throws on a dangling reference). */\nfunction primaryKeyColumns(table: CanonicalTable): CanonicalColumn[] {\n if (!table.primaryKey || table.primaryKey.length === 0) return []\n return table.primaryKey.map((identifier) => {\n const column = table.columns.find((c) => c.columnName === identifier || c.name === identifier)\n if (!column) {\n throw new SdlGenerationError(`Primary key column \"${identifier}\" not found on table \"${table.table}\".`)\n }\n return column\n })\n}\n\nfunction pkArgs(table: CanonicalTable, ctx: TableRenderContext): string {\n return primaryKeyColumns(table)\n .map((column) => `${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}!`)\n .join(', ')\n}\n\nfunction renderTableBlocks(ctx: TableRenderContext): string[] {\n const { table, names } = ctx\n const blocks: string[] = [\n renderObjectType(ctx),\n ...renderCellsType(ctx),\n renderSelectColumnEnum(ctx),\n renderOrderByInput(ctx),\n renderBoolExp(ctx),\n ...renderAggregateTypes(ctx),\n ...renderGroupByTypes(ctx),\n ]\n if (ctx.emitAggregateBoolExp) blocks.push(...renderAggregateBoolExp(ctx))\n\n const pk = primaryKeyColumns(table)\n if (pk.length > 0) {\n const fields = pk\n .map((column) => ` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}!`)\n .join('\\n')\n blocks.push(`input ${names.pkColumnsInput} {\\n${fields}\\n}`)\n }\n\n if (ctx.table.resolved !== undefined) {\n blocks.push(...renderResolvedWriteBlocks(ctx))\n } else if (allowsInsert(table) || allowsUpdate(table)) {\n blocks.push(...renderWriteBlocks(ctx, { insert: allowsInsert(table), update: allowsUpdate(table) }))\n }\n return blocks\n}\n\n/** Columns a resolved-table mutation may write: authored data columns, never the view's system columns. */\nexport function resolvedWritableColumns(table: CanonicalRelation): CanonicalColumn[] {\n const system = new Set<string>(Object.values(RESOLVED_VIEW_SYSTEM_COLUMNS).map((column) => column.name))\n return table.columns.filter((column) => !system.has(column.name))\n}\n\nfunction renderResolvedWriteBlocks(ctx: TableRenderContext): string[] {\n const { table, names } = ctx\n const writable = resolvedWritableColumns(table)\n const pk = new Set(table.primaryKey ?? [])\n const settable = writable.filter((column) => !pk.has(column.columnName))\n const line = (column: CanonicalColumn) => ` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}`\n const blocks: string[] = []\n if (allowsInsert(table)) blocks.push(`input ${names.insertInput} {\\n${writable.map(line).join('\\n')}\\n}`)\n if (allowsUpdate(table)) {\n blocks.push(`input ${names.setInput} {\\n${settable.map(line).join('\\n')}\\n}`)\n blocks.push(renderEnum(names.updateColumnEnum, settable.map((column) => fieldName(column.name))))\n }\n return blocks\n}\n\nfunction renderResolvedMutationFields(table: CanonicalRelation, names: TableNames): string[] {\n const lines: string[] = []\n const pk = primaryKeyColumns(table)\n if (allowsInsert(table)) lines.push(` ${names.insertOneRoot}(object: ${names.insertInput}!): ${names.typename}`)\n if (allowsUpdate(table) && pk.length > 0) {\n lines.push(` ${names.updateByPkRoot}(pkColumns: ${names.pkColumnsInput}!, _set: ${names.setInput}!): ${names.typename}`)\n lines.push(` ${names.revertByPkRoot}(pkColumns: ${names.pkColumnsInput}!, columns: [${names.updateColumnEnum}!]!): ${names.typename}`)\n if ((table.resolved?.deletedBy.length ?? 0) > 0) {\n const args = pk.map((column) => `${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}!`).join(', ')\n lines.push(` ${names.deleteByPkRoot}(${args}): ${names.typename}`)\n }\n }\n return lines\n}\n\nfunction allowsInsert(table: CanonicalTable): boolean {\n return table.policies.write !== undefined || table.policies.insert !== undefined\n}\n\nfunction allowsUpdate(table: CanonicalTable): boolean {\n return table.policies.write !== undefined || table.policies.update !== undefined\n}\n\nfunction allowsOnConflict(table: CanonicalTable): boolean {\n if (!allowsInsert(table) || !allowsUpdate(table)) return false\n // onConflict DO UPDATE must authorize both insert and update principals; only\n // legacy write-only tables have a single predicate for both.\n if (table.policies.insert !== undefined || table.policies.update !== undefined) return false\n return table.policies.write !== undefined\n}\n\nfunction isWritable(table: CanonicalTable): boolean {\n return allowsInsert(table) || allowsUpdate(table)\n}\n\nfunction renderObjectType(ctx: TableRenderContext): string {\n const { table, names } = ctx\n const lines: string[] = []\n if (table.description !== undefined) lines.push(...descriptionLines(table.description, ''))\n lines.push(`type ${names.typename} {`)\n for (const column of table.columns) {\n if (column.description !== undefined) lines.push(...descriptionLines(column.description, ' '))\n const bang = column.nullable ? '' : '!'\n const deprecated = column.deprecated ? ' @deprecated' : ''\n lines.push(` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}${bang}${deprecated}`)\n }\n if (ctx.cells) {\n lines.push(' \"\"\"Per-cell metadata: when each field was last written, and by whom.\"\"\"')\n lines.push(` ${CELLS_FIELD}: ${cellsTypename(names.typename)}!`)\n }\n for (const link of table.links) {\n if (link.description !== undefined) lines.push(...descriptionLines(link.description, ' '))\n if (link.kind === 'toPlatformUser') {\n lines.push(` ${fieldName(link.name)}: ${PLATFORM_USER_TYPENAME}`)\n continue\n }\n // A link may target a synced/excluded table (valid in policies) — SDL skips it.\n const target = link.target !== undefined ? ctx.namesByTable.get(link.target) : undefined\n if (!target) continue\n if (link.kind === 'toOne') {\n lines.push(` ${fieldName(link.name)}: ${target.typename}`)\n } else {\n lines.push(` ${fieldName(link.name)}(${relationArgs(target)}): [${target.typename}!]!`)\n lines.push(` ${fieldName(link.name)}Aggregate(${relationArgs(target)}): ${target.aggregate}!`)\n }\n }\n lines.push('}')\n return lines.join('\\n')\n}\n\nfunction renderSelectColumnEnum(ctx: TableRenderContext): string {\n const values = ctx.table.columns.map((column) => fieldName(column.name))\n for (const value of values) assertEnumValue(value, `select-column enum for table \"${ctx.table.table}\"`)\n return renderEnum(ctx.names.selectColumn, values)\n}\n\nfunction renderOrderByInput(ctx: TableRenderContext): string {\n const { table, names } = ctx\n const lines = table.columns.map((column) => ` ${fieldName(column.name)}: ${ORDER_BY_ENUM}`)\n for (const link of table.links) {\n if (link.kind === 'toPlatformUser') {\n lines.push(` ${fieldName(link.name)}: ${PLATFORM_USER_TYPENAME}OrderBy`)\n } else if (link.kind === 'toOne' && link.target !== undefined) {\n const target = ctx.namesByTable.get(link.target)\n if (target) lines.push(` ${fieldName(link.name)}: ${target.orderBy}`)\n }\n // to-many ordering is not part of the v1 grammar (plan §4e: to-one only).\n }\n return `input ${names.orderBy} {\\n${lines.join('\\n')}\\n}`\n}\n\nfunction renderBoolExp(ctx: TableRenderContext): string {\n const { table, names } = ctx\n const lines: string[] = [\n ` _and: [${names.boolExp}!]`,\n ` _not: ${names.boolExp}`,\n ` _or: [${names.boolExp}!]`,\n ]\n for (const column of table.columns) {\n lines.push(` ${fieldName(column.name)}: ${comparisonExpName(columnGqlTypeOf(table, column))}`)\n }\n for (const link of table.links) {\n if (link.kind === 'toPlatformUser') {\n lines.push(` ${fieldName(link.name)}: ${PLATFORM_USER_TYPENAME}BoolExp`)\n continue\n }\n const target = link.target !== undefined ? ctx.namesByTable.get(link.target) : undefined\n if (!target) continue\n lines.push(` ${fieldName(link.name)}: ${target.boolExp}`)\n if (link.kind === 'toMany') {\n lines.push(` ${fieldName(link.name)}Aggregate: ${target.aggregateBoolExp}`)\n }\n }\n return `input ${names.boolExp} {\\n${lines.join('\\n')}\\n}`\n}\n\nfunction numericishColumns(table: CanonicalTable): CanonicalColumn[] {\n return table.columns.filter((column) => typeof column.type !== 'object' && NUMERICISH.has(column.type))\n}\n\n/** Appendable jsonb columns. */\nfunction jsonbColumns(table: CanonicalTable): CanonicalColumn[] {\n return clientWritableColumns(table).filter((column) => column.type === 'jsonb')\n}\n\n/** Columns a client may name in any write input (cell-metadata columns are already stripped). */\nfunction clientWritableColumns(table: CanonicalTable): CanonicalColumn[] {\n return table.columns\n}\n\nfunction renderAggregateTypes(ctx: TableRenderContext): string[] {\n const { table, names } = ctx\n const numericish = numericishColumns(table)\n const blocks: string[] = []\n blocks.push(\n `type ${names.aggregate} {\\n aggregate: ${names.aggregateFields}\\n nodes: [${names.typename}!]!\\n}`,\n )\n const fieldLines = [` count(columns: [${names.selectColumn}!], distinct: Boolean): Int!`]\n if (numericish.length > 0) {\n fieldLines.push(` avg: ${names.avgFields}`)\n fieldLines.push(` sum: ${names.sumFields}`)\n }\n blocks.push(`type ${names.aggregateFields} {\\n${fieldLines.join('\\n')}\\n}`)\n if (numericish.length > 0) {\n const avgLines = numericish.map((column) => ` ${fieldName(column.name)}: Float`)\n blocks.push(`type ${names.avgFields} {\\n${avgLines.join('\\n')}\\n}`)\n const sumLines = numericish.map((column) => ` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}`)\n blocks.push(`type ${names.sumFields} {\\n${sumLines.join('\\n')}\\n}`)\n }\n return blocks\n}\n\n/**\n * Columns eligible as a group key — everything except jsonb, matching what\n * `orderBy` already excludes. Grouping by a jsonb document is never the intent\n * and its key field would have no useful GraphQL type.\n */\nfunction groupableColumns(table: CanonicalTable): CanonicalColumn[] {\n return table.columns.filter((column) => column.type !== 'jsonb')\n}\n\n/**\n * The GROUPED aggregate surface (`<t>AggregateGroups`), additive alongside the\n * ungrouped `<t>Aggregate`. One entry per group, each carrying its key plus the\n * same `<T>AggregateFields` the ungrouped root returns — so `count`/`sum`/`avg`\n * mean exactly what they already mean, just per group instead of per scan.\n *\n * Every key field is nullable: only the columns named in a given query's\n * `groupBy` are populated, and a grouped NULL is itself a legitimate key.\n * `bucket` is offered on every key but the compiler accepts it only on\n * date/timestamptz columns — expressing that in the type system would need a\n * per-column input type per table, which is a lot of SDL for a check the\n * compiler makes anyway with a better error message.\n */\nfunction renderGroupByTypes(ctx: TableRenderContext): string[] {\n const { table, names } = ctx\n const groupable = groupableColumns(table)\n if (groupable.length === 0) return []\n const keyLines = groupable.map((column) => ` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}`)\n return [\n renderEnum(names.groupByColumnEnum, groupable.map((column) => fieldName(column.name))),\n `input ${names.groupByInput} {\\n column: ${names.groupByColumnEnum}!\\n bucket: ${DATE_BUCKET_ENUM}\\n}`,\n `type ${names.groupKey} {\\n${keyLines.join('\\n')}\\n}`,\n `type ${names.aggregateGroup} {\\n key: ${names.groupKey}!\\n aggregate: ${names.aggregateFields}\\n}`,\n ]\n}\n\n/**\n * `limit`/`offset` here bound the number of GROUPS returned, not the rows\n * scanned — the aggregation still sees every policy-visible row.\n */\nfunction groupRootArgs(names: TableNames): string {\n return `where: ${names.boolExp}, groupBy: [${names.groupByInput}!]!, limit: Int, offset: Int`\n}\n\n/** Hasura-parity aggregate predicate input — count only in v1 (§4d). */\nfunction renderAggregateBoolExp(ctx: TableRenderContext): string[] {\n const { names } = ctx\n return [\n `input ${names.aggregateBoolExp} {\\n count: ${names.aggregateBoolExpCount}\\n}`,\n `input ${names.aggregateBoolExpCount} {\\n` +\n ` arguments: [${names.selectColumn}!]\\n` +\n ' distinct: Boolean\\n' +\n ` filter: ${names.boolExp}\\n` +\n ' predicate: IntComparisonExp!\\n}',\n ]\n}\n\n/** Postgres constraint names selectable in `onConflict` — PK + unique indexes/columns. */\nfunction constraintValues(table: CanonicalTable): string[] {\n const values = new Set<string>()\n if (table.primaryKey && table.primaryKey.length > 0) values.add(`${table.table}_pkey`)\n for (const column of table.columns) {\n if (column.unique) values.add(`${table.table}_${column.columnName}_unique`)\n }\n for (const index of table.indexes) {\n if (index.unique) values.add(index.name ?? `${table.table}_${index.columns.join('_')}_key`)\n }\n return [...values].sort()\n}\n\nfunction clientSettableColumns(table: CanonicalTable): CanonicalColumn[] {\n return clientWritableColumns(table).filter((column) => column.onUpdateFn === undefined)\n}\n\nfunction renderWriteBlocks(\n ctx: TableRenderContext,\n access: { insert: boolean; update: boolean },\n): string[] {\n const { table, names, pinned } = ctx\n const blocks: string[] = []\n\n if (access.insert) {\n const pinnedSet = new Set(pinned)\n const insertable = clientWritableColumns(table).filter(\n (column) => !pinnedSet.has(column.name) && !pinnedSet.has(column.columnName),\n )\n if (insertable.length === 0) {\n throw new SdlGenerationError(\n `Table \"${table.table}\" has no insertable columns after excluding pinned columns [${pinned.join(', ')}].`,\n )\n }\n // Insert-input fields are all nullable (Hasura parity) — column defaults and\n // server-pinned values fill the gaps; NOT NULL is enforced by Postgres.\n const insertLines = insertable.map(\n (column) => ` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}`,\n )\n blocks.push(`input ${names.insertInput} {\\n${insertLines.join('\\n')}\\n}`)\n }\n\n if (access.update) {\n const setLines = clientSettableColumns(table).map(\n (column) => ` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}`,\n )\n blocks.push(`input ${names.setInput} {\\n${setLines.join('\\n')}\\n}`)\n }\n\n const jsonb = jsonbColumns(table)\n if (access.update && jsonb.length > 0) {\n const appendLines = jsonb.map((column) => ` ${fieldName(column.name)}: jsonb`)\n blocks.push(`input ${names.appendInput} {\\n${appendLines.join('\\n')}\\n}`)\n }\n\n const numericish = numericishColumns(table)\n if (access.update && numericish.length > 0) {\n const incLines = numericish.map(\n (column) => ` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}`,\n )\n blocks.push(`input ${names.incInput} {\\n${incLines.join('\\n')}\\n}`)\n }\n\n const constraints = constraintValues(table)\n if (access.insert && allowsOnConflict(table) && constraints.length > 0) {\n for (const value of constraints) assertEnumValue(value, `constraint enum for table \"${table.table}\"`)\n blocks.push(renderEnum(names.constraintEnum, constraints))\n const updateColumns = clientSettableColumns(table).map((column) => fieldName(column.name))\n blocks.push(renderEnum(names.updateColumnEnum, updateColumns))\n blocks.push(\n `input ${names.onConflict} {\\n` +\n ` constraint: ${names.constraintEnum}!\\n` +\n ` updateColumns: [${names.updateColumnEnum}!]! = []\\n` +\n ` where: ${names.boolExp}\\n}`,\n )\n }\n\n if (access.insert || access.update) {\n blocks.push(\n `type ${names.mutationResponse} {\\n affectedRows: Int!\\n returning: [${names.typename}!]!\\n}`,\n )\n }\n return blocks\n}\n\nfunction renderQueryRoot(tables: CanonicalRelation[], namesByTable: Map<string, TableNames>): string {\n const lines: string[] = ['type Query {']\n for (const table of tables) {\n const names = namesByTable.get(table.table)\n if (!names) continue\n lines.push(` ${names.selectRoot}(${rootArgs(names)}): [${names.typename}!]!`)\n const pk = primaryKeyColumns(table)\n if (pk.length > 0) {\n const args = pk\n .map((column) => `${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}!`)\n .join(', ')\n lines.push(` ${names.byPkRoot}(${args}): ${names.typename}`)\n }\n lines.push(` ${names.aggregateRoot}(${rootArgs(names)}): ${names.aggregate}!`)\n if (groupableColumns(table).length > 0) {\n lines.push(` ${names.aggregateGroupsRoot}(${groupRootArgs(names)}): [${names.aggregateGroup}!]!`)\n }\n }\n lines.push('}')\n return lines.join('\\n')\n}\n\nfunction columnGqlTypeOf(table: CanonicalTable, column: CanonicalColumn): string {\n return typeof column.type === 'object' ? enumTypeName(column.type.enum) : graphqlScalarFor(column.type)\n}\n\nfunction renderMutationRoot(tables: CanonicalRelation[], namesByTable: Map<string, TableNames>): string | null {\n const lines: string[] = []\n for (const table of tables) {\n const canInsert = allowsInsert(table)\n const canUpdate = allowsUpdate(table)\n if (!canInsert && !canUpdate) continue\n const names = namesByTable.get(table.table)\n if (!names) continue\n if (table.resolved !== undefined) {\n lines.push(...renderResolvedMutationFields(table, names))\n continue\n }\n const constraints = constraintValues(table)\n const onConflictArg =\n canInsert && allowsOnConflict(table) && constraints.length > 0 ? `, onConflict: ${names.onConflict}` : ''\n const updateArgs = [`_set: ${names.setInput}`]\n if (jsonbColumns(table).length > 0) updateArgs.push(`_append: ${names.appendInput}`)\n if (numericishColumns(table).length > 0) updateArgs.push(`_inc: ${names.incInput}`)\n const updateArgList = updateArgs.join(', ')\n\n if (canInsert) {\n lines.push(` ${names.insertRoot}(objects: [${names.insertInput}!]!${onConflictArg}): ${names.mutationResponse}`)\n lines.push(` ${names.insertOneRoot}(object: ${names.insertInput}!${onConflictArg}): ${names.typename}`)\n }\n if (canUpdate) {\n lines.push(` ${names.updateRoot}(where: ${names.boolExp}!, ${updateArgList}): ${names.mutationResponse}`)\n const pk = primaryKeyColumns(table)\n if (pk.length > 0) {\n lines.push(\n ` ${names.updateByPkRoot}(pkColumns: ${names.pkColumnsInput}!, ${updateArgList}): ${names.typename}`,\n )\n }\n lines.push(` ${names.deleteRoot}(where: ${names.boolExp}!): ${names.mutationResponse}`)\n if (pk.length > 0) {\n const args = pk\n .map((column) => `${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}!`)\n .join(', ')\n lines.push(` ${names.deleteByPkRoot}(${args}): ${names.typename}`)\n }\n }\n lines.push(...renderCowMutationFields(table, names))\n }\n if (lines.length === 0) return null\n return `type Mutation {\\n${lines.join('\\n')}\\n}`\n}\n\n/**\n * Copy-on-write mutation fields: flat args — the pk plus (override only)\n * every set column. Overrides are full snapshots of the set columns: every\n * set argument must be supplied (a nullable column accepts an explicit null),\n * so nullability mirrors the overlay column while lowering enforces presence.\n */\nfunction renderCowMutationFields(table: CanonicalTable, names: TableNames): string[] {\n const lines: string[] = []\n const columnByName = new Map(table.columns.map((column) => [column.name, column]))\n for (const mutation of table.cowMutations ?? []) {\n const pkColumn = columnByName.get(mutation.pk)\n if (!pkColumn) continue\n const pkArg = `${fieldName(mutation.pk)}: ${columnGqlTypeOf(table, pkColumn)}!`\n if (mutation.kind === 'revert') {\n lines.push(` ${fieldName(mutation.name)}(${pkArg}): ${names.typename}`)\n continue\n }\n const setArgs = mutation.set.map((property) => {\n const column = columnByName.get(property)\n if (!column) return null\n const bang = column.nullable === false ? '!' : ''\n return `${fieldName(property)}: ${columnGqlTypeOf(table, column)}${bang}`\n })\n if (setArgs.some((arg) => arg === null)) continue\n lines.push(` ${fieldName(mutation.name)}(${pkArg}, ${setArgs.join(', ')}): ${names.typename}`)\n }\n return lines\n}\n","/** Errors raised by the v2 client-codegen surface (manifest + generated sources). */\nexport class CodegenGqlError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'CodegenGqlError'\n }\n}\n","/**\n * `operations.manifest.json` (plan §7): the client-side registry of compiled\n * operations written by `orm generate` alongside `schema.graphql`. The Apollo\n * link / `executeOperation` resolve an operation NAME to its `opHash` here —\n * the wire carries only `{op: <hash>, variables}`, never document text.\n *\n * `opsHash` identifies the operation set (plan §6: document edits mint a new\n * ops hash, never a migration) and is computed over the sorted operation\n * entries, independent of input order.\n */\nimport { createHash } from 'node:crypto'\nimport { z } from 'zod'\nimport { stableJson } from '../hash.js'\nimport { CodegenGqlError } from './errors.js'\n\nexport const MANIFEST_VERSION = 1 as const\n\n/** Same grammar the IR contract enforces for `opHash` (frozen, plan §4). */\nconst OP_HASH_RE = /^sha256:[0-9a-f]{64}$/\nconst GRAPHQL_NAME_RE = /^[_A-Za-z][_0-9A-Za-z]*$/\n\nexport const manifestRequiresSchema = z\n .object({\n capability: z.string().min(1).optional(),\n role: z.string().min(1).optional(),\n })\n .nullable()\n\nexport const manifestOperationSchema = z.object({\n hash: z.string().regex(OP_HASH_RE),\n kind: z.enum(['query', 'mutation']),\n requires: manifestRequiresSchema,\n})\n\nexport const operationsManifestSchema = z.object({\n manifestVersion: z.literal(MANIFEST_VERSION),\n schemaHash: z.string().min(1),\n opsHash: z.string().regex(OP_HASH_RE),\n operations: z.record(z.string().regex(GRAPHQL_NAME_RE), manifestOperationSchema),\n})\nexport type OperationsManifest = z.infer<typeof operationsManifestSchema>\nexport type ManifestOperation = z.infer<typeof manifestOperationSchema>\n\nexport interface ManifestOperationInput {\n /** Operation name as authored in the document (the registry identity). */\n name: string\n /** Compiled op hash (`sha256:<64 hex>` — the wire selector). */\n hash: string\n kind: 'query' | 'mutation'\n /** `@requires` gate; absent/empty normalizes to null. */\n requires?: { capability?: string; role?: string } | null\n}\n\nexport function buildOperationsManifest({\n schemaHash,\n operations,\n}: {\n schemaHash: string\n operations: ManifestOperationInput[]\n}): OperationsManifest {\n if (schemaHash.length === 0) throw new CodegenGqlError('schemaHash must be a non-empty string.')\n\n const sorted = [...operations].sort((a, b) => a.name.localeCompare(b.name))\n const seen = new Set<string>()\n const entries = sorted.map((op) => {\n if (!GRAPHQL_NAME_RE.test(op.name)) {\n throw new CodegenGqlError(`Operation name \"${op.name}\" is not a valid GraphQL name.`)\n }\n if (seen.has(op.name)) {\n throw new CodegenGqlError(`Duplicate operation name \"${op.name}\" — operation names must be unique per namespace.`)\n }\n seen.add(op.name)\n if (!OP_HASH_RE.test(op.hash)) {\n throw new CodegenGqlError(`Operation \"${op.name}\" has malformed hash \"${op.hash}\" (expected sha256:<64 hex>).`)\n }\n return { name: op.name, hash: op.hash, kind: op.kind, requires: normalizeRequires(op.requires) }\n })\n\n const opsHash = `sha256:${createHash('sha256').update(stableJson(entries)).digest('hex')}`\n\n const operationsRecord: Record<string, ManifestOperation> = {}\n for (const entry of entries) {\n operationsRecord[entry.name] = { hash: entry.hash, kind: entry.kind, requires: entry.requires }\n }\n\n return {\n manifestVersion: MANIFEST_VERSION,\n schemaHash,\n opsHash,\n operations: operationsRecord,\n }\n}\n\nfunction normalizeRequires(\n requires: ManifestOperationInput['requires'],\n): { capability?: string; role?: string } | null {\n if (requires === undefined || requires === null) return null\n const normalized: { capability?: string; role?: string } = {}\n if (requires.capability !== undefined) normalized.capability = requires.capability\n if (requires.role !== undefined) normalized.role = requires.role\n return normalized.capability === undefined && normalized.role === undefined ? null : normalized\n}\n","/**\n * `typePolicies.gen.ts` generation (plan §7): Apollo InMemoryCache key fields\n * derived from primary keys (composite included), so persisted-operation\n * responses normalize identically to the bios Apollo setup.\n */\nimport {\n canonicalDefinitionSchema,\n canonicalRelations,\n normalizeCanonical,\n type CanonicalDefinition,\n} from '../canonical/v2.js'\nimport { PLATFORM_USER_TYPENAME, fieldName, tableNames } from '../sdl/naming.js'\nimport { CodegenGqlError } from './errors.js'\nimport { composeNamespace } from '../canonical/composition.js'\n\n/** Returns the TypeScript SOURCE of the consumer's `typePolicies.gen.ts`. */\nexport function generateTypePolicies(canonical: CanonicalDefinition): string {\n const def = composeNamespace(normalizeCanonical(canonicalDefinitionSchema.parse(canonical))).definition\n const entries: Array<{ typename: string; keyFields: string[] }> = []\n let hasPlatformUser = false\n\n for (const table of canonicalRelations(def)) {\n // Synced and internal tables are excluded from the GraphQL surface (mirrors generateSdl).\n if (table.source !== undefined || table.internal === true) continue\n if (table.links.some((link) => link.kind === 'toPlatformUser')) hasPlatformUser = true\n if (!table.primaryKey || table.primaryKey.length === 0) continue\n const keyFields = table.primaryKey.map((identifier) => {\n const column = table.columns.find((c) => c.columnName === identifier || c.name === identifier)\n if (!column) {\n throw new CodegenGqlError(`Primary key column \"${identifier}\" not found on relation \"${table.table}\".`)\n }\n return fieldName(column.name)\n })\n entries.push({ typename: tableNames(table.table).typename, keyFields })\n }\n\n if (hasPlatformUser) entries.push({ typename: PLATFORM_USER_TYPENAME, keyFields: ['sub'] })\n entries.sort((a, b) => a.typename.localeCompare(b.typename))\n\n const body = entries\n .map((entry) => ` ${entry.typename}: { keyFields: [${entry.keyFields.map((key) => `'${key}'`).join(', ')}] },`)\n .join('\\n')\n\n return (\n '/* Generated by @sequenceholdings/orm — Apollo cache type policies. Do not edit. */\\n' +\n \"import type { TypePolicies } from '@apollo/client'\\n\\n\" +\n `export const typePolicies: TypePolicies = {\\n${body}\\n}\\n`\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/compiler/sql.ts","../src/checks/compile.ts","../src/constants.ts","../src/canonical/policy.ts","../src/canonical/resolved.ts","../src/canonical/v2.ts","../src/sdl/naming.ts","../src/client/sql.ts","../src/ir/index.ts","../src/errors.ts","../src/hash.ts","../src/canonical/composition.ts","../src/sdl/generate.ts","../src/codegen-gql/errors.ts","../src/codegen-gql/manifest.ts","../src/codegen-gql/type-policies.ts"],"names":["identifier","column","z","index","GRAPHQL_NAME_RE","createHash"],"mappings":"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","file":"sdl.js","sourcesContent":["/** Claims are stamped per transaction by the Data API (`set_config('request.jwt.claims', …, true)`). */\nexport const CLAIMS_SETTING = 'request.jwt.claims'\n\n/** Claims JSON key holding the caller's granted capability pins (a string array). */\nexport const CAPABILITIES_CLAIM_KEY = 'capabilities'\n\n/** Claims JSON key holding the caller's granted custom roles (a string array). */\nexport const ROLES_CLAIM_KEY = 'roles'\n\nexport const quoteIdentifier = (name: string): string => `\"${name.replaceAll('\"', '\"\"')}\"`\n\nexport const quoteLiteral = (value: string): string => `'${value.replaceAll(\"'\", \"''\")}'`\n\n/** `nullif(…, '')` because a session that ever set the GUC reverts it to '' (not NULL) after the transaction — ''::jsonb is an error. */\nconst CLAIMS_SOURCE = `nullif(current_setting('${CLAIMS_SETTING}', true), '')::jsonb`\n\nexport const claimExpression = (key: string): string => `(${CLAIMS_SOURCE} ->> ${quoteLiteral(key)})`\n\n/** NULL claims (or a missing capabilities array) coalesce to false — capability checks fail closed. */\nconst scopedClaimsSource = (namespace?: string): string => namespace\n ? `(CASE WHEN ${CLAIMS_SOURCE} ? 'namespaces' THEN ${CLAIMS_SOURCE} -> 'namespaces' -> ${quoteLiteral(namespace)} ELSE ${CLAIMS_SOURCE} END)`\n : CLAIMS_SOURCE\n\nexport const capabilityExpression = (key: string, namespace?: string): string =>\n `coalesce(${scopedClaimsSource(namespace)} -> '${CAPABILITIES_CLAIM_KEY}' ? ${quoteLiteral(key)}, false)`\n\n/** NULL claims (or a missing roles array) coalesce to false — role checks fail closed. */\nexport const roleExpression = (key: string, namespace?: string): string =>\n `coalesce(${scopedClaimsSource(namespace)} -> '${ROLES_CLAIM_KEY}' ? ${quoteLiteral(key)}, false)`\n","import { quoteIdentifier, quoteLiteral } from '../compiler/sql.js'\n\n/** A deliberately small, data-only SQL predicate subset for PostgreSQL CHECK constraints. */\ntype Column = { name: string; columnName: string; type: string | { enum: string } }\ntype TokenKind = 'identifier' | 'string' | 'number' | 'operator' | 'lparen' | 'rparen' | 'comma' | 'end'\ntype Token = { kind: TokenKind; value: string; position: number }\ntype Value = { sql: string; column?: Column; literal?: boolean }\n\nfunction tokenize(source: string): Token[] {\n const tokens: Token[] = []\n for (let position = 0; position < source.length;) {\n const char = source[position]!\n if (/\\s/.test(char)) { position++; continue }\n if (char === '(' || char === ')' || char === ',') {\n tokens.push({ kind: char === '(' ? 'lparen' : char === ')' ? 'rparen' : 'comma', value: char, position })\n position++\n continue\n }\n if (char === \"'\") {\n const start = position++\n let value = ''\n let closed = false\n while (position < source.length) {\n if (source[position] !== \"'\") { value += source[position++]; continue }\n if (source[position + 1] === \"'\") { value += \"'\"; position += 2; continue }\n position++\n closed = true\n break\n }\n if (!closed) throw new Error(`unterminated string at position ${start}`)\n if (/[\\x00-\\x1f\\x7f]/.test(value)) throw new Error(`control character in string at position ${start}`)\n tokens.push({ kind: 'string', value, position: start })\n continue\n }\n const operator = /^(<=|>=|<>|!=|!~|=|<|>|~)/.exec(source.slice(position))\n if (operator) {\n tokens.push({ kind: 'operator', value: operator[0] === '<>' ? '!=' : operator[0], position })\n position += operator[0].length\n continue\n }\n const number = /^-?\\d+(?:\\.\\d+)?/.exec(source.slice(position))\n if (number) {\n tokens.push({ kind: 'number', value: number[0], position })\n position += number[0].length\n continue\n }\n const identifier = /^[a-zA-Z_][a-zA-Z_0-9]*/.exec(source.slice(position))\n if (identifier) {\n tokens.push({ kind: 'identifier', value: identifier[0], position })\n position += identifier[0].length\n continue\n }\n throw new Error(`unexpected character '${char}' at position ${position}`)\n }\n tokens.push({ kind: 'end', value: '', position: source.length })\n if (tokens.length > 256) throw new Error('check expression exceeds 256 tokens')\n return tokens\n}\n\nclass Parser {\n private index = 0\n private depth = 0\n private readonly columns: Map<string, Column>\n\n constructor(private readonly tokens: Token[], columns: readonly Column[]) {\n this.columns = new Map()\n for (const column of columns) {\n for (const alias of [column.name, column.columnName]) {\n const previous = this.columns.get(alias)\n if (previous && previous.columnName !== column.columnName) {\n throw new Error(`ambiguous check column '${alias}'`)\n }\n this.columns.set(alias, column)\n }\n }\n }\n\n parse(): string {\n const expression = this.parseOr()\n this.expect('end', 'end of expression')\n return expression\n }\n\n private parseOr(): string {\n let left = this.parseAnd()\n while (this.matchKeyword('or')) left = `(${left} OR ${this.parseAnd()})`\n return left\n }\n\n private parseAnd(): string {\n let left = this.parseNot()\n while (this.matchKeyword('and')) left = `(${left} AND ${this.parseNot()})`\n return left\n }\n\n private parseNot(): string {\n if (this.matchKeyword('not')) return `(NOT ${this.parseNot()})`\n return this.parsePrimary()\n }\n\n private parsePrimary(): string {\n if (this.peek().kind === 'lparen') {\n if (++this.depth > 32) throw new Error('check expression nesting exceeds 32 levels')\n this.advance()\n const expression = this.parseOr()\n this.expect('rparen', \"')'\")\n this.depth--\n return `(${expression})`\n }\n return this.parseComparison()\n }\n\n private parseComparison(): string {\n const left = this.parseValue()\n if (this.matchKeyword('is')) {\n const negate = this.matchKeyword('not')\n this.expectKeyword('null')\n return `${left.sql} IS ${negate ? 'NOT ' : ''}NULL`\n }\n if (this.matchKeyword('between')) {\n const lower = this.parseValue()\n this.expectKeyword('and')\n const upper = this.parseValue()\n return `${left.sql} BETWEEN ${lower.sql} AND ${upper.sql}`\n }\n if (this.matchKeyword('in')) {\n this.expect('lparen', \"'(' after IN\")\n const values = [this.parseValue()]\n while (this.peek().kind === 'comma') { this.advance(); values.push(this.parseValue()) }\n this.expect('rparen', \"')' after IN values\")\n if (values.some(value => !value.literal)) throw new Error('IN values must be literals')\n return `${left.sql} IN (${values.map(value => value.sql).join(', ')})`\n }\n const operator = this.expect('operator', 'a comparison operator')\n const right = this.parseValue()\n if (operator.value === '~' || operator.value === '!~') {\n if (left.column && left.column.type !== 'text') throw new Error('regex checks require a text column')\n if (!right.literal) throw new Error('regex pattern must be a literal')\n }\n return `${left.sql} ${operator.value} ${right.sql}`\n }\n\n private parseValue(): Value {\n const token = this.advance()\n if (token.kind === 'string') return { sql: quoteLiteral(token.value), literal: true }\n if (token.kind === 'number') {\n const number = Number(token.value)\n if (!Number.isFinite(number) || (Number.isInteger(number) && !Number.isSafeInteger(number))) {\n throw new Error(`unsafe numeric literal at position ${token.position}`)\n }\n return { sql: token.value, literal: true }\n }\n if (token.kind !== 'identifier') throw new Error(`expected a column or literal at position ${token.position}`)\n const keyword = token.value.toLowerCase()\n if (keyword === 'true' || keyword === 'false' || keyword === 'null') return { sql: keyword.toUpperCase(), literal: true }\n if (keyword === 'btrim') {\n this.expect('lparen', \"'(' after btrim\")\n const column = this.parseColumn()\n this.expect('rparen', \"')' after btrim column\")\n if (column.type !== 'text') throw new Error('btrim requires a text column')\n return { sql: `btrim(${quoteIdentifier(column.columnName)})`, column }\n }\n const column = this.columns.get(token.value)\n if (!column) throw new Error(`unknown check column '${token.value}'`)\n return { sql: quoteIdentifier(column.columnName), column }\n }\n\n private parseColumn(): Column {\n const token = this.expect('identifier', 'a column name')\n const column = this.columns.get(token.value)\n if (!column) throw new Error(`unknown check column '${token.value}'`)\n return column\n }\n\n private peek(): Token { return this.tokens[this.index]! }\n private advance(): Token { const token = this.peek(); if (token.kind !== 'end') this.index++; return token }\n private matchKeyword(keyword: string): boolean {\n if (this.peek().kind !== 'identifier' || this.peek().value.toLowerCase() !== keyword) return false\n this.advance()\n return true\n }\n private expectKeyword(keyword: string): void {\n if (!this.matchKeyword(keyword)) throw new Error(`expected '${keyword}' at position ${this.peek().position}`)\n }\n private expect(kind: TokenKind, description: string): Token {\n const token = this.peek()\n if (token.kind !== kind) throw new Error(`expected ${description} at position ${token.position}`)\n return this.advance()\n }\n}\n\nexport function compileCheckExpression(source: string, columns: readonly Column[]): string {\n return new Parser(tokenize(source), columns).parse()\n}\n","/** Shared grammar for namespace identifiers; never interpolate arbitrary paths.\n * orm_events and orm_native_sources are migration-owned control-plane schemas,\n * not builder namespaces. Exclude their suffixes at every API/authoring entry.\n */\nexport const NAMESPACE_PATTERN = /^(?!(?:events|native_sources)$)[a-z][a-z0-9_]{0,40}$/\n\n/** Caller-scoped delegated data credential, supplied by an authenticated host. */\nexport const ORM_DATA_TOKEN_HEADER = 'x-sequence-data-token'\n\n/** Separate service-identity credential; never used as an implicit fallback. */\nexport const ORM_SERVICE_DATA_TOKEN_HEADER = 'x-sequence-data-token-service'\n\nexport const IDENTIFIER_PATTERN = /^[a-z][a-z0-9_]*$/\n/** Native source columns may have one leading underscore; relation names may not. */\nexport const COLUMN_IDENTIFIER_PATTERN = /^_?[a-z][a-z0-9_]*$/\nexport const MAX_IDENTIFIER_LENGTH = 63\n\n/**\n * Custom Roles & Capabilities claim keys as policies reference them: a\n * host-scoped registry key, an org pin's `org/<key>`, or an Application\n * capability pin's `app/<application-id>/<key>`. Matches the registry\n * key grammar EXACTLY (`[a-z0-9-]`, 1–64 chars, no `_` — the FGA object-id\n * delimiter) so any capability that's declarable/attachable in namespace.yaml\n * can also be referenced here — a stricter pattern would let a valid key\n * register yet fail at apply (e.g. `org/2fa`, a one-char or digit-led key).\n */\nexport const CAPABILITY_KEY_PATTERN = /^(?:org\\/|app\\/[a-z][a-z0-9-]{0,63}\\/)?[a-z0-9-]{1,64}$/\n\n/** Hard ceiling for an explicitly authored flat persisted GraphQL read. */\nexport const MAX_PERSISTED_READ_ROWS = 50_001\n\nexport const CLAIM_KEY_PATTERN = /^[a-z][a-z0-9_]*$/\n\n/** Qualified reference to a table outside the defining file: `<schema>.<table>`. */\nexport const QUALIFIED_TABLE_PATTERN = /^[a-z][a-z0-9_]{0,62}\\.[a-z][a-z0-9_]{0,62}$/\n\n/** Qualified source syntax only; the serving installation controls authorized backing. */\nexport const SYNCED_SOURCE_PATTERN = QUALIFIED_TABLE_PATTERN\n\nexport const ORM_SCHEMA_PREFIX = 'orm_'\nexport const CONSUMER_ROLE_SUFFIX = '_consumer'\n\nexport const ormSchemaName = (namespace: string): string => {\n if (!NAMESPACE_PATTERN.test(namespace)) throw new Error(`invalid or reserved ORM namespace '${namespace}'`)\n return `${ORM_SCHEMA_PREFIX}${namespace}`\n}\nexport const consumerRoleName = (namespace: string): string =>\n `${ormSchemaName(namespace)}${CONSUMER_ROLE_SUFFIX}`\n\nexport const DEFINITION_FILE_EXTENSIONS = ['.yml', '.yaml'] as const\n\n/** Reserved basenames for the namespace-level config file (description, org capability pins). */\nexport const NAMESPACE_CONFIG_FILENAMES = new Set(['namespace.yaml', 'namespace.yml'])\n\nexport const HASH_DOMAIN = 'sequence-orm-definitions\\0'\n\n/**\n * A per-file byte cap where the loader reads untrusted YAML into memory — a real failure mode, not a product\n * limit. Counts of tables/indexes/params and policy/SQL lengths are\n * deliberately uncapped; Postgres enforces its own limits loudly at apply.\n */\nexport const MAX_DEFINITION_FILE_BYTES = 1024 * 1024\n\n/** Generated SDL aggregates every table/view; it is not an individual source file. */\nexport const MAX_GENERATED_SDL_BYTES = 16 * 1024 * 1024\n\n/** Registration and reviewed exports carry SDL, canonical metadata, snapshots and migrations. */\nexport const ORM_REGISTRATION_MAX_BYTES = 64 * 1024 * 1024\n\n/** `/api/data/<ns>/actions/…` and `/api/data/<ns>/query` share the table path segment. */\nexport const RESERVED_TABLE_NAMES = new Set(['actions', 'query'])\n\n/**\n * The Data API's query-string grammar owns these parameter names — a column\n * with one of them could never be filtered over the wire, so definitions\n * refuse it up front (\"validate rejects only what can never work\").\n */\nexport const RESERVED_COLUMN_NAMES = new Set(['select', 'order', 'limit', 'offset'])\n\n/**\n * Per-cell metadata (`cellMetadata: true`, and every resolved-table source) is\n * stored as typed system columns beside each tracked column `c`:\n *\n * - `c__at` timestamptz — when the cell was last written (NULL: never / no opinion)\n * - `c__by` text — who wrote it\n * - `c__rev` uuid — a resolved table's manual source only: the edit's\n * identity, so an async writeback confirmation clears\n * only the exact edit it delivered\n *\n * A resolved view additionally exposes, per resolved column, the winner's\n * `c__src` (source name) and `c__lost` (newer candidates that lost, jsonb).\n * None of these are GraphQL columns: they surface through the typed `cells`\n * object and are never client-writable.\n */\nexport const CELL_PARTS = ['at', 'by', 'rev', 'source', 'conflicts'] as const\nexport type CellPart = (typeof CELL_PARTS)[number]\nexport const CELL_PART_SUFFIX: Readonly<Record<CellPart, string>> = {\n at: '__at', by: '__by', rev: '__rev', source: '__src', conflicts: '__lost',\n}\n/** Longest physical column name that can carry cell parts (63 minus the longest suffix). */\nexport const MAX_TRACKED_COLUMN_NAME = MAX_IDENTIFIER_LENGTH - 6\n/** GraphQL field carrying a row's per-cell metadata object. */\nexport const CELLS_FIELD = 'cells'\n\n/** Physical (and logical) name of one cell part of a column. */\nexport function cellColumnName(column: string, part: CellPart): string {\n return `${column}${CELL_PART_SUFFIX[part]}`\n}\n\n/**\n * Actor recorded when the data plane computes a materialized resolved table's\n * rows for every caller. Its claims are what the compute view's synced\n * sources see (materialized ETL sources must be readable by anyone).\n */\nexport const MATERIALIZE_ACTOR = 'orm:materialize'\nexport const MATERIALIZE_CLAIMS_JSON = JSON.stringify({ sub: MATERIALIZE_ACTOR, org: null, roles: [], capabilities: [] })\n\n/**\n * Apply-generated function that reconciles a materialized resolved table with\n * its compute view: `SELECT * FROM orm_<ns>.\"<table>__refresh\"(wait)` returns\n * `(upserted, deleted, locked)`; without `wait` it skips when another refresh\n * holds the table's lock. The one refresh implementation — the Atlas\n * reconcile, the post-ETL hook, and an operator in psql all call it.\n */\nexport function materializedRefreshFunctionName(table: string): string {\n return `${table}__refresh`\n}\n\n/**\n * Advisory-lock key serializing a materialized table's refreshes (hashed with\n * `hashtext`). A full refresh holds it exclusively and every ORM write's\n * per-row refresh holds it shared, both before reading the compute view — so\n * a full refresh never reads a snapshot older than a write it then overwrites.\n */\nexport function materializeLockKey(schema: string, table: string): string {\n return `orm:materialize:${schema}.${table}`\n}\n","/**\n * Policy expression grammar shared by tables, views and resolved tables. The\n * DSL strings are parsed and claim-checked by predicate-v2 in both the CLI\n * and the server; variants follow §4c permissive-union semantics.\n */\nimport { z } from 'zod'\n\nexport const policyVariantSchema = z.object({\n /** Claims-only guard (capability()/role()/claim() comparisons — no columns). */\n when: z.string().min(1).max(1000),\n /** Exactly one of: allow-all bypass, or a row predicate. */\n allow: z.literal(true).optional(),\n policy: z.string().min(1).max(2000).optional(),\n}).refine((v) => (v.allow === true) !== (typeof v.policy === 'string'), {\n message: 'A variant declares exactly one of allow: true or policy',\n})\n\nexport const policyExpressionSchema = z.union([\n z.string().min(1).max(2000),\n z.object({\n default: z.string().min(1).max(2000),\n variants: z.array(policyVariantSchema).max(10).default([]),\n }),\n])\nexport type PolicyExpression = z.infer<typeof policyExpressionSchema>\n","/**\n * Canonical contract for resolved tables: one logical table (a generated\n * managed view) backed by N source tables of three kinds —\n *\n * - `manual` an internal ORM table holding sparse user edits (the only\n * GraphQL mutation target),\n * - `etl` a synced (`source: schema.table`) table fed by a pipeline,\n * - `prefetch` an internal ORM \"live\" table filled by a function that reads\n * the source system on demand (and confirms writebacks).\n *\n * Each column picks its value across candidate sources with a SQL comparator\n * compiled into the view, so policies, filters, sorting and nested relations\n * all see resolved values. This module owns the metadata the compiler (write\n * roots, directives) and data plane (prefetch, writeback) need; the view SQL\n * itself is generated at authoring time and validated like any managed view.\n */\nimport { z } from 'zod'\nimport { cellColumnName, type CellPart } from '../constants.js'\nimport { policyExpressionSchema } from './policy.js'\n\n/** `'1500ms'` / `'30s'` / `'5m'` (or a millisecond number) → milliseconds; undefined when malformed. */\nexport function parseDurationMs(input: number | string): number | undefined {\n if (typeof input === 'number') return Number.isInteger(input) && input > 0 ? input : undefined\n const match = /^(\\d+(?:\\.\\d+)?)(ms|s|m)$/.exec(input)\n if (!match) return undefined\n const factor = match[2] === 'ms' ? 1 : match[2] === 's' ? 1000 : 60_000\n const value = Math.round(Number(match[1]) * factor)\n return value > 0 ? value : undefined\n}\n\nconst identifier = z.string().min(1).max(63).regex(/^[a-z][a-z0-9_]*$/)\nconst durationMs = z.number().int().positive().max(24 * 60 * 60 * 1000)\n\n/**\n * Row-level system columns the generated view adds after the authored columns\n * (GraphQL fields). Per-cell provenance lives in typed cell parts instead —\n * see RESOLVED_VIEW_CELL_PARTS.\n */\nexport const RESOLVED_VIEW_SYSTEM_COLUMNS = {\n writebackStatus: { name: 'writebackStatus', columnName: '_writeback_status', type: 'text' },\n writebackError: { name: 'writebackError', columnName: '_writeback_error', type: 'text' },\n} as const\n\n/** System columns on the internal manual / live tables (never exposed in GraphQL). */\nexport const RESOLVED_SOURCE_SYSTEM_COLUMNS = {\n tombstoned: { name: 'sysTombstoned', columnName: '_tombstoned' },\n fetchedAt: { name: 'sysFetchedAt', columnName: '_fetched_at' },\n writebackStatus: { name: 'sysWritebackStatus', columnName: '_writeback_status' },\n writebackError: { name: 'sysWritebackError', columnName: '_writeback_error' },\n writebackAt: { name: 'sysWritebackAt', columnName: '_writeback_at' },\n} as const\n\n/** Cell parts the resolved view exposes per resolved column: the winner's source, time, actor, and newer losers. */\nexport const RESOLVED_VIEW_CELL_PARTS = ['source', 'at', 'by', 'conflicts'] as const satisfies readonly CellPart[]\n/** Cell parts on a resolved table's internal sources; only the manual source carries `rev`. */\nexport const RESOLVED_SOURCE_CELL_PARTS = { manual: ['at', 'by', 'rev'], prefetch: ['at', 'by'] } as const satisfies Record<'manual' | 'prefetch', readonly CellPart[]>\n\nexport const RESERVED_RESOLVED_COLUMN_NAMES: ReadonlySet<string> = new Set([\n ...Object.values(RESOLVED_VIEW_SYSTEM_COLUMNS).flatMap((c) => [c.name, c.columnName]),\n ...Object.values(RESOLVED_SOURCE_SYSTEM_COLUMNS).flatMap((c) => [c.name, c.columnName]),\n])\n\nexport const COMPARATORS = ['latest', 'highest', 'lowest', 'priority', 'nonNullFirst', 'custom'] as const\nexport type ComparatorKind = (typeof COMPARATORS)[number]\n\nexport const canonicalFunctionRefSchema = z.object({\n /** `managed` = a Managed Function id/slug; `native` = an in-process Atlas function (reserved). */\n kind: z.enum(['managed', 'native']),\n id: z.string().min(1).max(200),\n}).strict()\nexport type CanonicalFunctionRef = z.infer<typeof canonicalFunctionRefSchema>\n\n/** What the source API can fetch: one key per call, or a batch of up to maxKeys. */\nexport const canonicalFetchShapeSchema = z.union([\n z.object({ shape: z.literal('single') }).strict(),\n z.object({ shape: z.literal('batch'), maxKeys: z.number().int().min(2).max(500) }).strict(),\n])\nexport type CanonicalFetchShape = z.infer<typeof canonicalFetchShapeSchema>\n\nexport const canonicalResolvedSourceSchema = z.object({\n name: identifier,\n kind: z.enum(['manual', 'etl', 'prefetch']),\n /** Backing relation in this namespace: an internal table (manual/prefetch) or a synced table (etl). */\n table: identifier,\n /** Resolved columns (logical names) this source supplies — the primary key is implicit. */\n columns: z.array(z.string().min(1).max(63)).min(1).max(500),\n /** etl: logical timestamptz/date column on the synced table used as every cell's updated_at. */\n updatedAt: z.string().min(1).max(63).optional(),\n /** prefetch: resolved column holding the source system's key (may be the primary key). */\n key: z.string().min(1).max(63).optional(),\n fetch: canonicalFetchShapeSchema.optional(),\n function: canonicalFunctionRefSchema.optional(),\n prefetchDefaults: z.object({\n maxStalenessMs: durationMs,\n timeoutMs: durationMs,\n onError: z.enum(['fallback', 'fail']),\n }).strict().optional(),\n writeback: z.object({\n columns: z.array(z.string().min(1).max(63)).min(1).max(500),\n defaultMode: z.enum(['sync', 'async']),\n timeoutMs: durationMs,\n /** Remove confirmed cells from the manual source so a stale edit cannot shadow the source. */\n clearManualOnConfirm: z.boolean(),\n }).strict().optional(),\n}).strict()\nexport type CanonicalResolvedSource = z.infer<typeof canonicalResolvedSourceSchema>\n\nexport const canonicalResolveRuleSchema = z.object({\n column: z.string().min(1).max(63),\n comparator: z.enum(COMPARATORS),\n /** Source names, in tie-break order. */\n candidates: z.array(identifier).min(1).max(16),\n /** custom only: SQL ORDER BY key over value / updated_at / source / actor / ord. */\n orderBy: z.string().min(1).max(2000).optional(),\n}).strict()\nexport type CanonicalResolveRule = z.infer<typeof canonicalResolveRuleSchema>\n\nexport const canonicalResolvedSchema = z.object({\n sources: z.array(canonicalResolvedSourceSchema).min(1).max(16),\n /** One rule per resolved (non-pk) column; documents the generated view for tooling. */\n resolve: z.array(canonicalResolveRuleSchema).max(500),\n /** Sources whose tombstone hides the resolved row (v1: the manual source only). */\n deletedBy: z.array(identifier).max(1).default([]),\n /**\n * Materialized: the view reads an indexed internal table (`table`) that the\n * data plane keeps in step with `compute`, the internal view holding the\n * resolution query. Omitted when the view computes on read.\n */\n materialized: z.object({ table: identifier, compute: identifier }).strict().optional(),\n /** Write policies evaluated against the RESOLVED row (reads use the view's read policy). */\n policies: z.object({\n write: policyExpressionSchema.optional(),\n insert: policyExpressionSchema.optional(),\n update: policyExpressionSchema.optional(),\n }).strict().default({}),\n}).strict()\nexport type CanonicalResolved = z.infer<typeof canonicalResolvedSchema>\n\ninterface RelationShape {\n table: string\n source?: string\n internal?: true\n cellMetadata?: true\n materializes?: string\n policies?: { read?: string | { default: string; variants: unknown[] } }\n primaryKey?: string[]\n columns: Array<{ name: string; columnName: string; type: unknown; cell?: { of: string; part: CellPart } }>\n}\ninterface ViewShape {\n view: string\n internal?: true\n primaryKey?: string[]\n columns: Array<{ name: string; columnName: string; type: unknown; nullable?: boolean; cell?: { of: string; part: CellPart } }>\n resolved?: CanonicalResolved\n}\n\ntype Column = ViewShape['columns'][number]\n\ninterface ValidationScope {\n view: ViewShape\n resolved: CanonicalResolved\n pkColumn: Column\n dataColumns: Map<string, Column>\n sourceByName: Map<string, CanonicalResolvedSource>\n fail: (message: string) => void\n}\n\n/**\n * Cross-relation validation for one resolved view. Returns messages rather\n * than throwing so the definition-level superRefine can attach paths.\n */\nexport function validateResolvedView({ view, tables, views = [] }: { view: ViewShape; tables: readonly RelationShape[]; views?: readonly ViewShape[] }): string[] {\n const resolved = view.resolved\n if (!resolved) return []\n const errors: string[] = []\n const fail = (message: string) => errors.push(`resolved table '${view.view}': ${message}`)\n\n const pkColumn = view.primaryKey?.length === 1 ? view.columns.find((c) => c.columnName === view.primaryKey?.[0]) : undefined\n if (!pkColumn) {\n fail('requires exactly one primary-key column')\n return errors\n }\n const systemNames = new Set<string>(Object.values(RESOLVED_VIEW_SYSTEM_COLUMNS).map((c) => c.name))\n const scope: ValidationScope = {\n view,\n resolved,\n pkColumn,\n dataColumns: new Map(view.columns.filter((c) => !systemNames.has(c.name) && c.cell === undefined).map((c) => [c.name, c])),\n sourceByName: new Map(),\n fail,\n }\n if (resolved.sources.filter((source) => source.kind === 'manual').length !== 1) fail('requires exactly one manual source')\n\n const tableByName = new Map(tables.map((table) => [table.table, table]))\n for (const source of resolved.sources) {\n if (scope.sourceByName.has(source.name)) fail(`duplicate source '${source.name}'`)\n scope.sourceByName.set(source.name, source)\n const table = tableByName.get(source.table)\n if (!table) fail(`source '${source.name}' references unknown table '${source.table}'`)\n else validateSource({ scope, source, table })\n }\n validateRules(scope)\n validateViewCells(scope)\n if (resolved.materialized) validateMaterialized({ scope, tableByName, views })\n for (const name of resolved.deletedBy) {\n if (scope.sourceByName.get(name)?.kind !== 'manual') fail(`deletedBy '${name}' must be the manual source`)\n }\n return errors\n}\n\nfunction validateSource({ scope, source, table }: { scope: ValidationScope; source: CanonicalResolvedSource; table: RelationShape }): void {\n const { fail } = scope\n if (source.kind === 'etl' && table.source === undefined) fail(`etl source '${source.name}' must reference a synced table`)\n if (source.kind === 'etl' && table.primaryKey?.length === 0) fail(`etl source '${source.name}' cannot use an unkeyed synced table for resolved row identity`)\n if (source.kind !== 'etl' && (table.internal !== true || table.cellMetadata !== true)) {\n fail(`${source.kind} source '${source.name}' must reference an internal table with cell metadata`)\n }\n const hasRev = table.columns.some((column) => column.cell?.part === 'rev')\n if (source.kind === 'manual' && !hasRev) fail(`manual source '${source.name}' must carry '__rev' cell columns`)\n if (source.kind === 'prefetch' && hasRev) fail(`prefetch source '${source.name}' must not carry '__rev' cell columns`)\n const byName = new Map(table.columns.map((c) => [c.name, c]))\n validateSourceColumns({ scope, source, byName })\n if (source.kind === 'etl') {\n const updatedAt = source.updatedAt === undefined ? undefined : byName.get(source.updatedAt)\n if (source.updatedAt !== undefined && updatedAt?.type !== 'timestamptz' && updatedAt?.type !== 'date') {\n fail(`etl source '${source.name}' updatedAt must name a timestamptz/date column on '${source.table}'`)\n }\n }\n validatePrefetchFields({ scope, source })\n}\n\nfunction validatePrefetchFields({ scope, source }: { scope: ValidationScope; source: CanonicalResolvedSource }): void {\n const { fail, pkColumn } = scope\n if (source.kind !== 'prefetch') {\n if (source.key || source.fetch || source.function || source.prefetchDefaults || source.writeback) {\n fail(`only prefetch sources may declare key/fetch/function/prefetchDefaults/writeback ('${source.name}')`)\n }\n return\n }\n if (!source.key || !source.fetch || !source.function || !source.prefetchDefaults) {\n fail(`prefetch source '${source.name}' requires key, fetch, function and prefetchDefaults`)\n } else if (source.key !== pkColumn.name && !source.columns.includes(source.key)) {\n fail(`prefetch source '${source.name}' key '${source.key}' must be the primary key or one of its columns`)\n }\n for (const column of source.writeback?.columns ?? []) {\n if (!source.columns.includes(column)) fail(`prefetch source '${source.name}' writes back '${column}', which it does not supply`)\n }\n}\n\nfunction validateSourceColumns({ scope, source, byName }: {\n scope: ValidationScope\n source: CanonicalResolvedSource\n byName: Map<string, Column>\n}): void {\n const { fail, pkColumn, dataColumns } = scope\n for (const column of [pkColumn.name, ...source.columns]) {\n const own = column === pkColumn.name ? pkColumn : dataColumns.get(column)\n const theirs = byName.get(column)\n if (!own) fail(`source '${source.name}' supplies unknown column '${column}'`)\n else if (!theirs) fail(`source '${source.name}' table '${source.table}' has no column '${column}'`)\n else if (JSON.stringify(theirs.type) !== JSON.stringify(own.type)) fail(`column '${column}' has a different type on source '${source.name}'`)\n }\n}\n\nfunction validateRules({ resolved, pkColumn, dataColumns, sourceByName, fail }: ValidationScope): void {\n const ruled = new Set<string>()\n for (const rule of resolved.resolve) {\n if (!dataColumns.has(rule.column) || rule.column === pkColumn.name) {\n fail(`resolve rule targets unknown column '${rule.column}'`)\n continue\n }\n if (ruled.has(rule.column)) fail(`column '${rule.column}' has more than one resolve rule`)\n ruled.add(rule.column)\n if ((rule.comparator === 'custom') !== (rule.orderBy !== undefined)) {\n fail(`column '${rule.column}': orderBy is required for custom comparators and only allowed there`)\n }\n if (new Set(rule.candidates).size !== rule.candidates.length) fail(`column '${rule.column}' repeats a candidate`)\n for (const candidate of rule.candidates) {\n const source = sourceByName.get(candidate)\n if (!source) fail(`column '${rule.column}' names unknown candidate source '${candidate}'`)\n else if (!source.columns.includes(rule.column)) fail(`column '${rule.column}' candidate '${candidate}' does not supply it`)\n }\n }\n for (const column of dataColumns.keys()) {\n if (column !== pkColumn.name && !ruled.has(column)) fail(`column '${column}' has no resolve rule`)\n }\n}\n\nconst VIEW_CELL_TYPES: Readonly<Record<(typeof RESOLVED_VIEW_CELL_PARTS)[number], string>> = {\n source: 'text', at: 'timestamptz', by: 'text', conflicts: 'jsonb',\n}\n\n/** The view carries exactly source/at/by/conflicts per resolved (non-pk) column. */\nfunction validateViewCells({ view, dataColumns, pkColumn, fail }: ValidationScope): void {\n const expected = new Map<string, { part: string; columnName: string }>()\n for (const column of dataColumns.values()) {\n if (column.name === pkColumn.name) continue\n for (const part of RESOLVED_VIEW_CELL_PARTS) {\n expected.set(cellColumnName(column.name, part), { part, columnName: cellColumnName(column.columnName, part) })\n }\n }\n for (const column of view.columns) {\n if (!column.cell) continue\n const want = expected.get(column.name)\n if (!want || want.part !== column.cell.part || want.columnName !== column.columnName || cellColumnName(column.cell.of, column.cell.part) !== column.name) {\n fail(`unexpected cell column '${column.name}'`)\n continue\n }\n if (column.type !== VIEW_CELL_TYPES[column.cell.part as keyof typeof VIEW_CELL_TYPES]) fail(`cell column '${column.name}' must be ${VIEW_CELL_TYPES[column.cell.part as keyof typeof VIEW_CELL_TYPES]}`)\n expected.delete(column.name)\n }\n for (const name of expected.keys()) fail(`missing cell column '${name}'`)\n}\n\nconst columnSignature = (columns: ReadonlyArray<{ name: string; columnName: string; type: unknown }>) =>\n JSON.stringify(columns.map((column) => [column.name, column.columnName, column.type]))\n\n/**\n * A materialized resolved table: its internal table mirrors the view column\n * for column, its compute view produces those columns, and every ETL source\n * is readable by anyone — the copy is computed once for all callers, so no\n * source may filter rows per caller (the view's own read policy still does).\n */\nfunction validateMaterialized({ scope, tableByName, views }: {\n scope: ValidationScope\n tableByName: Map<string, RelationShape>\n views: readonly ViewShape[]\n}): void {\n const { view, resolved, fail } = scope\n const { table: tableName, compute: computeName } = resolved.materialized!\n const table = tableByName.get(tableName)\n if (!table || table.internal !== true || table.materializes !== view.view) {\n fail(`materialized table '${tableName}' must be an internal table that materializes '${view.view}'`)\n } else {\n if (columnSignature(table.columns) !== columnSignature(view.columns)) fail(`materialized table '${tableName}' must have exactly the view's columns`)\n if (JSON.stringify(table.primaryKey ?? []) !== JSON.stringify(view.primaryKey ?? [])) fail(`materialized table '${tableName}' must share the view's primary key`)\n }\n const compute = views.find((candidate) => candidate.view === computeName)\n if (!compute || compute.internal !== true) fail(`compute view '${computeName}' must be an internal view`)\n else if (columnSignature(compute.columns) !== columnSignature(view.columns)) fail(`compute view '${computeName}' must have exactly the view's columns`)\n for (const source of resolved.sources) {\n if (source.kind !== 'etl') continue\n const read = tableByName.get(source.table)?.policies?.read\n const unconditional = typeof read === 'string' ? read.trim() === 'true' : read !== undefined && read.default.trim() === 'true' && read.variants.length === 0\n if (!unconditional) {\n fail(`etl source '${source.name}' must have read policy 'true' to be materialized (the copy is shared by every caller)`)\n }\n }\n}\n","/**\n * Canonical namespace definition v2 — the data-only JSON a consumer's\n * TypeScript schema serializes to. This is v2's equivalent of the v1 YAML\n * `NamespaceDefinition`: the CLI's jiti loader produces it, the content hash\n * is computed over it, the server re-validates it (consumer TS never runs\n * server-side), and the SDL generator / GraphQL compiler / migration engine\n * all consume it.\n *\n * FROZEN CONTRACT (week 1): downstream tracks build against these shapes.\n * Additive evolution only; `definition_format` discriminates on the wire.\n */\nimport { z } from 'zod'\nexport { ontologyContractSchema, readOntologyContract, type OntologyContract } from '../ontology-contract.js'\nimport { compileCheckExpression } from '../checks/compile.js'\nimport {\n CELL_PART_SUFFIX, CELL_PARTS, COLUMN_IDENTIFIER_PATTERN, MAX_TRACKED_COLUMN_NAME, NAMESPACE_PATTERN, QUALIFIED_TABLE_PATTERN, cellColumnName, type CellPart,\n} from '../constants.js'\nimport { policyExpressionSchema } from './policy.js'\nimport { canonicalResolvedSchema, validateResolvedView, type CanonicalResolved } from './resolved.js'\n\nexport * from './resolved.js'\n\nexport const CANONICAL_FORMAT = 2 as const\n\n/** Identifier grammar shared with v1 (`^[a-z][a-z0-9_]*$`, ≤63 bytes). */\nexport const IDENTIFIER_RE = /^[a-z][a-z0-9_]*$/\nconst identifier = z.string().min(1).max(63).regex(IDENTIFIER_RE)\nconst columnIdentifier = z.string().min(1).max(63).regex(COLUMN_IDENTIFIER_PATTERN)\n\n/** The 10 v1 column types, unchanged in v2. */\nexport const COLUMN_TYPES = [\n 'uuid', 'text', 'integer', 'bigint', 'numeric', 'double',\n 'boolean', 'timestamptz', 'date', 'jsonb',\n] as const\nexport type ColumnType = (typeof COLUMN_TYPES)[number]\n\nconst columnTypeSchema = z.enum(COLUMN_TYPES)\n\n/** Enum columns reference a namespace-level `defineEnum` by name. */\nexport const canonicalEnumSchema = z.object({\n name: identifier,\n values: z.array(z.string().min(1).max(63)).min(1).max(100),\n})\nexport type CanonicalEnum = z.infer<typeof canonicalEnumSchema>\n\nexport const canonicalColumnSchema = z.object({\n /** Property name in TS (camelCase); columnName is the Postgres name. */\n name: z.string().min(1).max(63),\n columnName: columnIdentifier,\n type: z.union([columnTypeSchema, z.object({ enum: identifier })]),\n nullable: z.boolean().default(true),\n unique: z.boolean().default(false),\n /** Literal default, or one of the allowlisted SQL functions. */\n default: z.union([z.string(), z.number(), z.boolean(), z.null()]).optional(),\n defaultFn: z.enum(['gen_random_uuid()', 'now()']).optional(),\n /**\n * Stamp this column from the database clock on UPDATE (`now()`). The\n * column stays insertable (defaults fill gaps) but is omitted from\n * SetInput / settable so callers cannot backdate it.\n */\n onUpdateFn: z.enum(['now()']).optional(),\n description: z.string().max(500).optional(),\n /** Migration hints — same semantics as v1. */\n renamedFrom: columnIdentifier.optional(),\n cast: z.string().max(200).optional(),\n deprecated: z.boolean().default(false),\n /**\n * Marks a system cell-metadata column (see CELL_PARTS in constants): part\n * `part` of the cell of logical column `of`. Synthesized by authoring,\n * never client-writable, absent from GraphQL scalar fields. Omitted on\n * ordinary columns so their hashes are unchanged.\n */\n cell: z.object({ of: z.string().min(1).max(63), part: z.enum(CELL_PARTS) }).strict().optional(),\n}).superRefine((column, ctx) => {\n if (column.onUpdateFn === undefined) return\n if (typeof column.type !== 'string' || (column.type !== 'timestamptz' && column.type !== 'date')) {\n ctx.addIssue({\n code: 'custom',\n path: ['onUpdateFn'],\n message: `onUpdateFn '${column.onUpdateFn}' is only valid on timestamptz/date columns`,\n })\n }\n})\nexport type CanonicalColumn = z.infer<typeof canonicalColumnSchema>\n\nexport const canonicalLinkSchema = z.object({\n name: z.string().min(1).max(63),\n kind: z.enum(['toOne', 'toMany', 'toPlatformUser']),\n /** Target table name (namespace-local). Absent for toPlatformUser. */\n target: identifier.optional(),\n /** Owning namespace of an imported target; omitted for local links. */\n namespace: identifier.max(41).optional(),\n /** FK column on the owning side (toOne/toPlatformUser: on this table; toMany: on the target). */\n on: columnIdentifier,\n /** Referenced column on the target (default: target's PK / platform user `sub`). */\n references: columnIdentifier.optional(),\n /** enforce: true emits a real FK constraint (same-namespace toOne only). */\n enforce: z.boolean().default(false),\n onDelete: z.enum(['cascade', 'restrict', 'no action', 'set null', 'set default']).optional(),\n onUpdate: z.enum(['cascade', 'restrict', 'no action', 'set null', 'set default']).optional(),\n description: z.string().max(500).optional(),\n})\nexport type CanonicalLink = z.infer<typeof canonicalLinkSchema>\n\nexport const canonicalIndexSchema = z.object({\n columns: z.array(columnIdentifier).min(1),\n unique: z.boolean().default(false),\n name: identifier.optional(),\n})\n\nexport const canonicalCheckSchema = z.object({\n name: identifier,\n expression: z.string().min(1).max(2000),\n}).strict()\nexport type CanonicalCheck = z.infer<typeof canonicalCheckSchema>\n\n/**\n * Policy expressions stay DSL SOURCE STRINGS in the canonical form — parsing\n * and claim-key validation happen in both CLI and server via the shared\n * predicate parser. Variants follow §4c permissive-union semantics.\n */\nexport { policyExpressionSchema, policyVariantSchema, type PolicyExpression } from './policy.js'\n\nexport const canonicalPoliciesSchema = z.object({\n read: policyExpressionSchema.optional(),\n write: policyExpressionSchema.optional(),\n insert: policyExpressionSchema.optional(),\n update: policyExpressionSchema.optional(),\n})\n\n/**\n * View SQL is generated by Drizzle in the authoring process, then crosses the\n * CLI → Atlas JSON boundary. Keep the canonical form to one SELECT statement:\n * PostgreSQL validates the complete grammar when the view is created, while\n * this scanner prevents statement stacking before the text reaches DDL.\n */\nexport function isSingleViewQuerySql(value: string): boolean {\n const query = value.trim()\n if (!/^\\(*(?:select|with)\\b/i.test(query) || query.includes('\\0')) return false\n\n let state: 'normal' | 'single' | 'double' = 'normal'\n for (let index = 0; index < query.length; index += 1) {\n const char = query[index]\n const next = query[index + 1]\n if (state === 'single') {\n if (char === \"'\" && next === \"'\") index += 1\n else if (char === \"'\") state = 'normal'\n continue\n }\n if (state === 'double') {\n if (char === '\"' && next === '\"') index += 1\n else if (char === '\"') state = 'normal'\n continue\n }\n if (char === \"'\") state = 'single'\n else if (char === '\"') state = 'double'\n else if (char === ';' || (char === '-' && next === '-') || (char === '/' && next === '*')) return false\n }\n return state === 'normal' && !/\\$[a-z_0-9]*\\$/i.test(query)\n}\n\n/**\n * Managed views execute as the shared ORM relation owner. Treat function use\n * as a capability boundary: a new function is unavailable until it is\n * deliberately reviewed here as side-effect-free. The migration engine checks\n * the functions PostgreSQL actually resolved against this list and pg_catalog,\n * so qualification and same-named functions in a consumer schema cannot evade\n * the boundary.\n */\nexport const VIEW_QUERY_FUNCTION_ALLOWLIST = [\n 'abs',\n 'age',\n 'array_agg',\n 'array_append',\n 'array_cat',\n 'array_dims',\n 'array_length',\n 'array_lower',\n 'array_ndims',\n 'array_position',\n 'array_positions',\n 'array_prepend',\n 'array_remove',\n 'array_replace',\n 'array_to_string',\n 'array_trim',\n 'array_upper',\n 'ascii',\n 'avg',\n 'bit_and',\n 'bit_or',\n 'bit_xor',\n 'bool_and',\n 'bool_or',\n 'btrim',\n 'cardinality',\n 'cbrt',\n 'ceil',\n 'ceiling',\n 'char_length',\n 'character_length',\n 'chr',\n 'concat',\n 'concat_ws',\n 'count',\n 'cume_dist',\n 'date_bin',\n 'date_part',\n 'date_trunc',\n 'decode',\n 'degrees',\n 'dense_rank',\n 'encode',\n 'enum_first',\n 'enum_last',\n 'enum_range',\n 'every',\n 'exp',\n 'first_value',\n 'floor',\n 'format',\n 'grouping',\n 'initcap',\n 'json_agg',\n 'json_array_length',\n 'json_build_array',\n 'json_build_object',\n 'json_extract_path',\n 'json_extract_path_text',\n 'json_object_agg',\n 'json_object_keys',\n 'json_strip_nulls',\n 'json_typeof',\n 'jsonb_agg',\n 'jsonb_array_length',\n 'jsonb_build_array',\n 'jsonb_build_object',\n 'jsonb_extract_path',\n 'jsonb_extract_path_text',\n 'jsonb_insert',\n 'jsonb_object_agg',\n 'jsonb_object_keys',\n 'jsonb_path_exists',\n 'jsonb_path_match',\n 'jsonb_path_query',\n 'jsonb_path_query_array',\n 'jsonb_path_query_first',\n 'jsonb_pretty',\n 'jsonb_set',\n 'jsonb_set_lax',\n 'jsonb_strip_nulls',\n 'jsonb_typeof',\n 'justify_days',\n 'justify_hours',\n 'justify_interval',\n 'lag',\n 'last_value',\n 'lead',\n 'left',\n 'length',\n 'ln',\n 'log',\n 'lower',\n 'lpad',\n 'ltrim',\n 'make_date',\n 'make_interval',\n 'make_time',\n 'make_timestamp',\n 'make_timestamptz',\n 'max',\n 'md5',\n 'min',\n 'mod',\n 'nth_value',\n 'ntile',\n 'octet_length',\n 'percent_rank',\n 'pi',\n 'power',\n 'quote_ident',\n 'quote_literal',\n 'quote_nullable',\n 'radians',\n 'rank',\n 'regexp_count',\n 'regexp_instr',\n 'regexp_like',\n 'regexp_match',\n 'regexp_matches',\n 'regexp_replace',\n 'regexp_split_to_array',\n 'regexp_split_to_table',\n 'repeat',\n 'replace',\n 'reverse',\n 'right',\n 'round',\n 'row_number',\n 'rpad',\n 'rtrim',\n 'sign',\n 'split_part',\n 'sqrt',\n 'starts_with',\n 'string_agg',\n 'string_to_array',\n 'strpos',\n 'substr',\n 'substring',\n 'sum',\n 'timezone',\n 'to_ascii',\n 'to_char',\n 'to_date',\n 'to_hex',\n 'to_json',\n 'to_jsonb',\n 'to_number',\n 'to_timestamp',\n 'translate',\n 'trunc',\n 'unnest',\n 'upper',\n 'width_bucket',\n] as const\n\n/** Actions carry over from v1 as compiled named-SQL ops (plan: resolved OQ-1). */\nexport const canonicalActionSchema = z.object({\n name: identifier,\n requires: z.string().max(1000).optional(),\n params: z.record(z.string(), z.object({\n type: columnTypeSchema,\n nullable: z.boolean().default(false),\n })).default({}),\n executes: z.string().min(1).max(10_000),\n returns: z.enum(['rows', 'rowsAffected', 'scalar']).default('rowsAffected'),\n audit: z.object({ action: z.string(), resource: z.string() }).optional(),\n})\n\n/**\n * Copy-on-write mutations for overlay tables backed by a synced twin\n * (v2-only). Structured metadata, never authored SQL: the compiler and data\n * plane generate the INSERT…SELECT / UPDATE / DELETE statements from it, so\n * there is no SQL surface to validate and write policies inject like any\n * other mutation. `override` copies the synced row into the overlay\n * (ON CONFLICT DO NOTHING) then updates the `set` columns; `revert` deletes\n * the overlay row so the coalesce view falls back to synced.\n */\nexport const canonicalCowMutationSchema = z.object({\n kind: z.enum(['override', 'revert']),\n name: identifier,\n /** Synced table (same namespace) the overlay copies from / falls back to. */\n synced: identifier,\n /** Single-column primary key PROPERTY (TS camelCase, like column `name`) shared by overlay and synced. */\n pk: z.string().min(1).max(63),\n /** Override: contract properties copied INSERT…SELECT from synced (pk included). Empty for revert. */\n copy: z.array(z.string().min(1).max(63)).default([]),\n /** Override: overlay properties written by the UPDATE (never the pk). Empty for revert. */\n set: z.array(z.string().min(1).max(63)).default([]),\n}).superRefine((mutation, ctx) => {\n if (mutation.kind === 'override') {\n if (mutation.set.length === 0) {\n ctx.addIssue({ code: 'custom', path: ['set'], message: 'override mutations must set at least one column' })\n }\n if (!mutation.copy.includes(mutation.pk)) {\n ctx.addIssue({ code: 'custom', path: ['copy'], message: 'override copy list must include the pk' })\n }\n } else if (mutation.set.length > 0 || mutation.copy.length > 0) {\n ctx.addIssue({ code: 'custom', path: ['set'], message: 'revert mutations take no copy/set columns' })\n }\n if (mutation.set.includes(mutation.pk)) {\n ctx.addIssue({ code: 'custom', path: ['set'], message: 'set must not include the pk — identity columns are pinned' })\n }\n // Duplicates would reach the executor as a doubled INSERT column or SET\n // assignment — reject at the schema like the authoring helper does.\n for (const [field, values] of [['copy', mutation.copy], ['set', mutation.set]] as const) {\n if (new Set(values).size !== values.length) {\n ctx.addIssue({ code: 'custom', path: [field], message: `${field} must not contain duplicate columns` })\n }\n }\n})\nexport type CanonicalCowMutation = z.infer<typeof canonicalCowMutationSchema>\n\nexport const canonicalForeignKeySchema = z.object({\n name: identifier,\n columns: z.array(columnIdentifier).min(1).max(8),\n target: identifier,\n references: z.array(columnIdentifier).min(1).max(8),\n deferrable: z.enum(['initially-immediate', 'initially-deferred']).optional(),\n onDelete: z.enum(['cascade', 'restrict', 'no action', 'set null', 'set default']).optional(),\n onUpdate: z.enum(['cascade', 'restrict', 'no action', 'set null', 'set default']).optional(),\n}).strict()\nexport type CanonicalForeignKey = z.infer<typeof canonicalForeignKeySchema>\n\nexport const canonicalTableSchema = z.object({\n table: identifier,\n displayName: z.string().trim().min(1).max(120).optional(),\n description: z.string().max(2000).optional(),\n /** Table-level rename hint (new in v2). */\n renamedFrom: identifier.optional(),\n /** Synced/reflected read-only tables (`source: schema.table`) — v1 semantics. */\n source: z.string().regex(QUALIFIED_TABLE_PATTERN).optional(),\n columns: z.array(canonicalColumnSchema).default([]),\n primaryKey: z.array(columnIdentifier).max(8).optional(),\n links: z.array(canonicalLinkSchema).default([]),\n indexes: z.array(canonicalIndexSchema).default([]),\n /** Omitted by old definitions, preserving their existing content hashes. */\n checks: z.array(canonicalCheckSchema).max(100).optional(),\n policies: canonicalPoliciesSchema.default({}),\n /**\n * v1-conversion carry-over only. v2 has no action surface — the runtime\n * neither compiles nor executes these; writes are mutations. Kept parseable\n * so stored definitions and their content hashes stay stable.\n */\n actions: z.array(canonicalActionSchema).default([]),\n /** Optional (not defaulted) so pre-CoW canonical documents keep byte-identical hashes. */\n cowMutations: z.array(canonicalCowMutationSchema).optional(),\n /** Omitted by old definitions, preserving their existing content hashes. */\n foreignKeys: z.array(canonicalForeignKeySchema).max(100).optional(),\n /**\n * Per-cell edit metadata (`cellMetadata: true` in authoring): every tracked\n * column `c` carries typed `c__at` / `c__by` system columns (plus `c__rev`\n * on a resolved table's internal sources), listed explicitly in `columns`\n * with a `cell` marker so DDL and migrations treat them as ordinary columns.\n * Omitted when off so existing definitions hash unchanged.\n */\n cellMetadata: z.literal(true).optional(),\n /**\n * System-owned backing table of a resolved table (its manual or prefetch\n * source). Internal tables get DDL and IR metadata but no GraphQL surface;\n * only the data plane writes them. Omitted when false.\n */\n internal: z.literal(true).optional(),\n /**\n * The materialized copy of resolved table `materializes` (internal): the\n * same columns as that view, including its cell parts, maintained by the\n * data plane. Omitted otherwise.\n */\n materializes: identifier.optional(),\n}).superRefine((table, ctx) => {\n if (table.primaryKey?.length !== 0) return\n const fail = (message: string, path: Array<string | number> = ['primaryKey']) =>\n ctx.addIssue({ code: 'custom', path, message: `unkeyed table '${table.table}' ${message}` })\n if (table.source === undefined || table.columns.length === 0) {\n fail('requires a typed synced source')\n }\n if ([table.policies.write, table.policies.insert, table.policies.update].some(policy => policy !== undefined)) {\n fail('is read-only and cannot declare write policies', ['policies'])\n }\n const ownedCollections = [table.indexes, table.actions, table.checks, table.foreignKeys, table.cowMutations]\n const ownedMetadata = [table.cellMetadata, table.internal, table.materializes, table.renamedFrom]\n if (ownedCollections.some(items => items !== undefined && items.length > 0) || ownedMetadata.some(value => value !== undefined)) {\n fail('cannot declare owned storage, constraints or identity operations')\n }\n for (const [index, column] of table.columns.entries()) {\n const ownedColumnMetadata = [column.default, column.defaultFn, column.onUpdateFn, column.renamedFrom, column.cast, column.cell]\n if (column.unique || ownedColumnMetadata.some(value => value !== undefined)) {\n fail('cannot declare column uniqueness, mutation defaults or migration metadata', ['columns', index])\n }\n }\n for (const [index, link] of table.links.entries()) {\n if (link.enforce || link.kind === 'toMany') fail('cannot provide an identity for this link', ['links', index])\n }\n})\nexport type CanonicalTable = z.infer<typeof canonicalTableSchema>\n\n/** Authored view SQL. */\nconst MAX_VIEW_QUERY = 100_000\n/**\n * A resolved table's SQL is generated from its (bounded) metadata — at most\n * 500 columns × 16 candidates — not authored, so it gets a larger ceiling.\n */\nconst MAX_RESOLVED_VIEW_QUERY = 5_000_000\n\nexport const canonicalViewSchema = z.object({\n view: identifier,\n description: z.string().max(2000).optional(),\n columns: z.array(canonicalColumnSchema).min(1),\n /** Logical identity for GraphQL only; PostgreSQL views have no PK constraint. */\n primaryKey: z.array(columnIdentifier).min(1).max(8).optional(),\n links: z.array(canonicalLinkSchema).default([]),\n policies: z.object({ read: policyExpressionSchema }).strict(),\n query: z.string().min(1).max(MAX_RESOLVED_VIEW_QUERY).refine(isSingleViewQuerySql, {\n message: 'view query must be one SELECT/WITH statement without comments or dollar-quoted bodies',\n }),\n /** Namespace-local logical relation names, sorted for deterministic hashing. */\n dependencies: z.array(identifier).max(500),\n /**\n * Present when this view is a resolved table (defineResolvedTable): the\n * multi-source metadata behind its generated query. Omitted otherwise so\n * existing views hash unchanged.\n */\n resolved: canonicalResolvedSchema.optional(),\n /** System-owned view (a materialized resolved table's compute view): no GraphQL surface. */\n internal: z.literal(true).optional(),\n}).superRefine((view, ctx) => {\n if (view.resolved === undefined && view.query.length > MAX_VIEW_QUERY) {\n ctx.addIssue({ code: 'custom', path: ['query'], message: `view query must be at most ${MAX_VIEW_QUERY} characters` })\n }\n for (const [index, column] of view.columns.entries()) {\n if (column.default !== undefined || column.defaultFn !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['columns', index], message: `view column '${column.name}' cannot declare a default` })\n }\n if (column.onUpdateFn !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['columns', index], message: `view column '${column.name}' cannot declare onUpdateFn` })\n }\n if (column.unique) {\n ctx.addIssue({ code: 'custom', path: ['columns', index], message: `view column '${column.name}' cannot declare unique` })\n }\n if (column.renamedFrom !== undefined || column.cast !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['columns', index], message: `view column '${column.name}' cannot declare migration hints` })\n }\n }\n // A materialized resolved table's compute view (internal) produces the same\n // cell parts; validateResolvedView checks it against its public view.\n if (view.resolved === undefined && view.internal !== true) {\n for (const [index, column] of view.columns.entries()) {\n if (column.cell) ctx.addIssue({ code: 'custom', path: ['columns', index], message: `only resolved tables carry cell columns ('${column.name}')` })\n }\n }\n for (const [index, link] of view.links.entries()) {\n if (link.enforce) {\n ctx.addIssue({ code: 'custom', path: ['links', index, 'enforce'], message: `view link '${link.name}' cannot enforce a foreign key` })\n }\n if (link.onDelete !== undefined || link.onUpdate !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['links', index], message: `view link '${link.name}' cannot declare referential actions` })\n }\n }\n})\nexport type CanonicalView = z.infer<typeof canonicalViewSchema>\n\nfunction validateUnkeyedLinkIdentities({ definition, ctx }: {\n definition: { namespace: string; tables: CanonicalTable[]; views?: CanonicalView[] }\n ctx: z.RefinementCtx\n}): void {\n const tables = new Map(definition.tables.map(table => [table.table, table]))\n const relations = [\n ...definition.tables.map((table, index) => ({ kind: 'tables', index, links: table.links })),\n ...(definition.views ?? []).map((view, index) => ({ kind: 'views', index, links: view.links })),\n ]\n for (const relation of relations) {\n for (const [linkIndex, link] of relation.links.entries()) {\n if (link.kind !== 'toOne' || (link.namespace !== undefined && link.namespace !== definition.namespace)) continue\n const target = link.target === undefined ? undefined : tables.get(link.target)\n if (target?.source !== undefined && target.primaryKey?.length === 0) {\n ctx.addIssue({ code: 'custom', path: [relation.kind, relation.index, 'links', linkIndex],\n message: `link '${link.name}' cannot use unkeyed table '${target.table}' as a to-one identity` })\n }\n }\n }\n}\n\n/** The type each cell part is stored as. */\nexport const CELL_PART_TYPES: Readonly<Record<CellPart, ColumnType>> = {\n at: 'timestamptz', by: 'text', rev: 'uuid', source: 'text', conflicts: 'jsonb',\n}\n\ninterface TrackedShape {\n columns: ReadonlyArray<{ name: string; columnName: string; onUpdateFn?: string; cell?: { of: string; part: CellPart } }>\n primaryKey?: readonly string[]\n}\n\n/** Columns a cell-tracking table stamps: everything except the primary key, clock columns and cell parts. */\nexport function trackedCellColumns<T extends TrackedShape>(table: T): Array<T['columns'][number]> {\n const pk = new Set(table.primaryKey ?? [])\n return table.columns.filter((column) => column.cell === undefined && !pk.has(column.columnName) && column.onUpdateFn === undefined)\n}\n\nconst SUFFIXES = Object.values(CELL_PART_SUFFIX)\n\nfunction validateCellMetadata(table: CanonicalTable, index: number, ctx: z.RefinementCtx): void {\n const fail = (message: string, path: Array<string | number> = ['tables', index]) =>\n ctx.addIssue({ code: 'custom', path, message })\n const cells = table.columns.flatMap((column, position) => (column.cell ? [{ column, position, cell: column.cell }] : []))\n // A materialized resolved table mirrors its view's cell parts verbatim;\n // validateResolvedView checks it column for column.\n if (table.materializes !== undefined) return\n if (table.cellMetadata !== true) {\n for (const { position } of cells) fail(`cell-metadata columns require cellMetadata on table '${table.table}'`, ['tables', index, 'columns', position])\n return\n }\n if (table.source !== undefined) {\n fail(`synced table '${table.table}' cannot track cell metadata`)\n return\n }\n const tracked = trackedCellColumns(table)\n const byName = new Map(tracked.map((column) => [column.name, column]))\n const withRev = cells.some(({ cell }) => cell.part === 'rev')\n if (withRev && table.internal !== true) fail(`only a resolved table's internal sources carry '__rev' cell columns ('${table.table}')`)\n const seen = new Set<string>()\n for (const { column, position, cell } of cells) {\n const path = ['tables', index, 'columns', position]\n const owner = byName.get(cell.of)\n if (!owner) {\n fail(`cell column '${column.name}' belongs to '${cell.of}', which is not a tracked column`, path)\n continue\n }\n if (cell.part !== 'at' && cell.part !== 'by' && cell.part !== 'rev') fail(`a table cell column must be part at/by/rev, not '${cell.part}'`, path)\n if (column.name !== cellColumnName(owner.name, cell.part) || column.columnName !== cellColumnName(owner.columnName, cell.part)) {\n fail(`cell column for '${owner.name}' ${cell.part} must be named '${cellColumnName(owner.name, cell.part)}' / '${cellColumnName(owner.columnName, cell.part)}'`, path)\n }\n if (column.type !== CELL_PART_TYPES[cell.part] || !column.nullable || column.unique || column.default !== undefined || column.defaultFn !== undefined) {\n fail(`cell column '${column.name}' must be a nullable, default-less ${CELL_PART_TYPES[cell.part]}`, path)\n }\n const key = `${cell.of}:${cell.part}`\n if (seen.has(key)) fail(`duplicate cell column '${column.name}'`, path)\n seen.add(key)\n }\n for (const column of tracked) {\n if (column.columnName.length > MAX_TRACKED_COLUMN_NAME) {\n fail(`column '${column.columnName}' is too long to track cell metadata (max ${MAX_TRACKED_COLUMN_NAME} characters)`)\n }\n if (SUFFIXES.some((suffix) => column.columnName.endsWith(suffix))) {\n fail(`column '${column.columnName}' ends in a reserved cell-metadata suffix (${SUFFIXES.join(', ')})`)\n }\n for (const part of withRev ? (['at', 'by', 'rev'] as const) : (['at', 'by'] as const)) {\n if (!seen.has(`${column.name}:${part}`)) fail(`tracked column '${column.name}' is missing its '${cellColumnName(column.columnName, part)}' cell column`)\n }\n }\n}\n\nexport const exportGateSchema = z.union([z.literal(true), z.object({ capability: z.string().min(1) }).strict(), z.object({ role: z.string().min(1) }).strict()])\nexport const relationExportSchema = z.object({ read: exportGateSchema, write: exportGateSchema.optional() }).strict()\n\nexport const localDefinitionSchema = z.object({\n definition_format: z.literal(CANONICAL_FORMAT),\n namespace: identifier.max(41).regex(NAMESPACE_PATTERN, 'invalid or reserved ORM namespace'),\n description: z.string().max(2000).optional(),\n enums: z.array(canonicalEnumSchema).default([]),\n tables: z.array(canonicalTableSchema).min(0).max(500),\n /** Optional to preserve byte-identical hashes for pre-view canonical v2 documents. */\n views: z.array(canonicalViewSchema).max(500).optional(),\n /** Target-owned cross-namespace access contract, using existing namespace grants. */\n exports: z.record(identifier, relationExportSchema).optional(),\n /** Verbatim custom-roles grammar (@sequenceholdings/custom-roles-manifest). */\n capabilities: z.object({\n roles: z.unknown().optional(),\n uses: z.array(z.string()).default([]),\n }).default({ uses: [] }),\n}).superRefine((definition, ctx) => {\n const seen = new Set<string>()\n for (const [index, table] of definition.tables.entries()) {\n if (seen.has(table.table)) {\n ctx.addIssue({ code: 'custom', path: ['tables', index, 'table'], message: `duplicate relation '${table.table}'` })\n }\n seen.add(table.table)\n validateCellMetadata(table, index, ctx)\n if (table.source !== undefined) {\n for (const [columnIndex, column] of table.columns.entries()) {\n if (column.onUpdateFn !== undefined) {\n ctx.addIssue({\n code: 'custom',\n path: ['tables', index, 'columns', columnIndex],\n message: `synced table '${table.table}' column '${column.name}' cannot declare onUpdateFn`,\n })\n }\n }\n }\n }\n\n const fkTables = new Map(definition.tables.map(table => [table.table, table]))\n validateUnkeyedLinkIdentities({ definition, ctx })\n const relations = new Set([...fkTables.keys(), ...(definition.views ?? []).map(view => view.view)])\n for (const name of Object.keys(definition.exports ?? {})) {\n if (!relations.has(name)) ctx.addIssue({ code: 'custom', path: ['exports', name], message: `export '${name}' is not a local object` })\n }\n for (const [tableIndex, table] of definition.tables.entries()) {\n for (const [linkIndex, link] of table.links.entries()) {\n if (link.enforce && link.namespace !== undefined && link.namespace !== definition.namespace) {\n ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'links', linkIndex], message: 'physical foreign keys require a local target; use an ORM link without enforce' })\n }\n }\n const names = new Set([\n ...(table.primaryKey?.length ? [`${table.table}_pkey`] : []),\n ...table.columns.filter(column => column.unique && !(table.primaryKey?.length === 1 && table.primaryKey[0] === column.columnName)).map(column => `${table.table}_${column.columnName}_unique`),\n ...table.links.filter(link => link.enforce).map(link => `fk_${table.table}_${link.name}`),\n ])\n for (const [index, link] of table.links.entries()) {\n if ((link.onDelete !== undefined || link.onUpdate !== undefined) && (!link.enforce || link.kind !== 'toOne')) {\n ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'links', index], message: 'referential actions require an enforced toOne link' })\n }\n if (link.onDelete === 'set null' || link.onUpdate === 'set null') {\n const source = table.columns.find(column => column.columnName === link.on)\n if (source?.nullable === false || table.primaryKey?.includes(link.on)) ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'links', index], message: 'SET NULL requires a nullable source column' })\n }\n }\n for (const [index, check] of (table.checks ?? []).entries()) {\n const fail = (message: string) => ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'checks', index], message })\n if (table.source) fail('synced tables cannot declare checks')\n if (names.has(check.name)) fail(`duplicate constraint '${check.name}'`)\n names.add(check.name)\n try { compileCheckExpression(check.expression, table.columns) }\n catch (error) { fail(error instanceof Error ? error.message : String(error)) }\n }\n for (const [index, fk] of (table.foreignKeys ?? []).entries()) {\n const fail = (message: string) => ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'foreignKeys', index], message })\n if (names.has(fk.name)) fail(`duplicate foreign key '${fk.name}'`)\n names.add(fk.name)\n const target = fkTables.get(fk.target)\n if (table.source || !target || target.source) {\n fail('foreign keys must connect owned tables in the same namespace')\n continue\n }\n if (fk.columns.length !== fk.references.length) fail('foreign key columns and references must have the same number of columns')\n if (new Set(fk.columns).size !== fk.columns.length || new Set(fk.references).size !== fk.references.length) fail('foreign key columns must not repeat')\n for (const [position, name] of fk.columns.entries()) {\n const sourceColumn = table.columns.find(column => column.columnName === name)\n const targetColumn = target.columns.find(column => column.columnName === fk.references[position])\n if (!sourceColumn || !targetColumn) fail('foreign key references an unknown column')\n else if (JSON.stringify(sourceColumn.type) !== JSON.stringify(targetColumn.type)) fail('foreign key column types must match')\n }\n if (fk.onDelete === 'set null' || fk.onUpdate === 'set null') {\n if (fk.columns.some(name => table.columns.find(column => column.columnName === name)?.nullable === false || table.primaryKey?.includes(name))) fail('SET NULL requires nullable source columns')\n }\n const uniqueKeys = [target.primaryKey ?? [], ...target.indexes.filter(index => index.unique).map(index => index.columns), ...target.columns.filter(column => column.unique).map(column => [column.columnName])]\n if (!uniqueKeys.some(key => key.length === fk.references.length && key.every(column => fk.references.includes(column)))) fail('foreign key target columns must form a unique key')\n }\n }\n\n for (const [viewIndex, view] of (definition.views ?? []).entries()) {\n for (const message of validateResolvedView({ view, tables: definition.tables, views: definition.views ?? [] })) {\n ctx.addIssue({ code: 'custom', path: ['views', viewIndex, 'resolved'], message })\n }\n }\n\n // CoW mutations: overlay must be an owned table; synced twin must be a\n // synced table in this namespace; copy/set columns must exist on both sides.\n const tableByName = new Map(definition.tables.map((table) => [table.table, table]))\n for (const [tableIndex, table] of definition.tables.entries()) {\n const cowMutations = table.cowMutations ?? []\n if (cowMutations.length === 0) continue\n const path = (index: number, ...rest: Array<string | number>): Array<string | number> =>\n ['tables', tableIndex, 'cowMutations', index, ...rest]\n if (table.source !== undefined) {\n ctx.addIssue({ code: 'custom', path: path(0), message: `synced table '${table.table}' cannot declare cow mutations — it is read-only` })\n continue\n }\n for (const [index, mutation] of cowMutations.entries()) {\n const synced = tableByName.get(mutation.synced)\n if (!synced || synced.source === undefined) {\n ctx.addIssue({\n code: 'custom',\n path: path(index, 'synced'),\n message: `cow mutation '${mutation.name}' references '${mutation.synced}', which is not a synced table in this namespace`,\n })\n continue\n }\n // The full helper invariants, mirrored so hand-written canonical cannot\n // bypass them (the generated conflict/copy SQL depends on every one):\n // single-column PK identity on both sides, matching scalar types AND\n // Postgres column names for every copied column, and no nullable-synced\n // → NOT-NULL-overlay traps.\n const overlayColumnsByName = new Map(table.columns.map((column) => [column.name, column]))\n const syncedColumnsByName = new Map(synced.columns.map((column) => [column.name, column]))\n let columnsExist = true\n for (const property of [mutation.pk, ...mutation.copy, ...mutation.set]) {\n if (!overlayColumnsByName.has(property)) {\n columnsExist = false\n ctx.addIssue({ code: 'custom', path: path(index), message: `cow mutation '${mutation.name}': column '${property}' does not exist on overlay '${table.table}'` })\n }\n }\n for (const property of [mutation.pk, ...mutation.copy]) {\n if (!syncedColumnsByName.has(property)) {\n columnsExist = false\n ctx.addIssue({ code: 'custom', path: path(index), message: `cow mutation '${mutation.name}': column '${property}' does not exist on synced '${mutation.synced}'` })\n }\n }\n if (!columnsExist) continue\n\n const overlayPk = table.primaryKey ?? []\n const syncedPk = synced.primaryKey ?? []\n if (overlayPk.length !== 1 || overlayPk[0] !== mutation.pk || syncedPk.length !== 1 || syncedPk[0] !== mutation.pk) {\n ctx.addIssue({\n code: 'custom',\n path: path(index, 'pk'),\n message: `cow mutation '${mutation.name}': pk '${mutation.pk}' must be the single-column primary key on both '${table.table}' and '${mutation.synced}'`,\n })\n }\n for (const property of [mutation.pk, ...mutation.copy]) {\n const overlayColumn = overlayColumnsByName.get(property)\n const syncedColumn = syncedColumnsByName.get(property)\n if (!overlayColumn || !syncedColumn) continue\n if (JSON.stringify(overlayColumn.type) !== JSON.stringify(syncedColumn.type)) {\n ctx.addIssue({\n code: 'custom',\n path: path(index),\n message: `cow mutation '${mutation.name}': column '${property}' must have the same type on overlay and synced`,\n })\n }\n if (overlayColumn.columnName !== syncedColumn.columnName) {\n ctx.addIssue({\n code: 'custom',\n path: path(index),\n message: `cow mutation '${mutation.name}': column '${property}' maps to different Postgres names on overlay ('${overlayColumn.columnName}') and synced ('${syncedColumn.columnName}')`,\n })\n }\n if (syncedColumn.nullable !== false && overlayColumn.nullable === false) {\n ctx.addIssue({\n code: 'custom',\n path: path(index),\n message: `cow mutation '${mutation.name}': column '${property}' is nullable on synced but NOT NULL on overlay — a NULL synced value would fail the copy`,\n })\n }\n }\n }\n }\n for (const [index, view] of (definition.views ?? []).entries()) {\n if (seen.has(view.view)) {\n ctx.addIssue({ code: 'custom', path: ['views', index, 'view'], message: `duplicate relation '${view.view}'` })\n }\n seen.add(view.view)\n }\n\n const views = definition.views ?? []\n const viewByName = new Map(views.map((view) => [view.view, view]))\n for (const [viewIndex, view] of views.entries()) {\n for (const [dependencyIndex, dependency] of view.dependencies.entries()) {\n if (!seen.has(dependency)) {\n ctx.addIssue({\n code: 'custom',\n path: ['views', viewIndex, 'dependencies', dependencyIndex],\n message: `view '${view.view}' depends on unknown relation '${dependency}'`,\n })\n }\n }\n }\n\n const visiting = new Set<string>()\n const visited = new Set<string>()\n let cycleReported = false\n const visit = (name: string, path: string[]): void => {\n if (visited.has(name) || cycleReported) return\n if (visiting.has(name)) {\n cycleReported = true\n ctx.addIssue({\n code: 'custom',\n path: ['views'],\n message: `view dependencies form a cycle: ${[...path, name].join(' -> ')}`,\n })\n return\n }\n visiting.add(name)\n const view = viewByName.get(name)\n for (const dependency of view?.dependencies ?? []) {\n if (viewByName.has(dependency)) visit(dependency, [...path, name])\n }\n visiting.delete(name)\n visited.add(name)\n }\n for (const view of views) visit(view.view, [])\n})\nexport const canonicalDefinitionSchema = localDefinitionSchema.safeExtend({\n /** Flattened, pinned snapshots. Imported relations never participate in this namespace's DDL. */\n imports: z.array(localDefinitionSchema).max(32).optional(),\n})\nexport type CanonicalDefinition = z.infer<typeof canonicalDefinitionSchema>\n\n/**\n * Project namespace-local tables and views onto the shared read/query surface.\n * A view deliberately becomes a CanonicalTable-shaped relation with no write\n * policy, indexes, actions, defaults, or constraints. Keeping this adapter at\n * the canonical boundary makes SDL and compiler behavior identical without\n * pretending views are writable tables in the wire contract.\n */\n/** A table or view as the compiler/SDL see it; resolved views also carry their multi-source metadata. */\nexport type CanonicalRelation = CanonicalTable & { resolved?: CanonicalResolved }\n\nexport function canonicalRelations(definition: CanonicalDefinition): CanonicalRelation[] {\n const views = (definition.views ?? []).map<CanonicalRelation>((view) => ({\n table: view.view,\n ...(view.description !== undefined ? { description: view.description } : {}),\n columns: view.columns,\n ...(view.primaryKey !== undefined ? { primaryKey: view.primaryKey } : {}),\n links: view.links,\n indexes: [],\n // A resolved table's write policies (evaluated against the resolved row)\n // ride alongside the view's read policy.\n policies: { read: view.policies.read, ...(view.resolved?.policies ?? {}) },\n actions: [],\n ...(view.resolved !== undefined ? { resolved: view.resolved } : {}),\n ...(view.internal ? { internal: true as const } : {}),\n }))\n return [...definition.tables, ...views].sort((a, b) => a.table.localeCompare(b.table))\n}\n\n/**\n * Deterministic serialization discipline: tables sorted by name, columns in\n * declaration order (order is meaningful for DDL), links/indexes/actions\n * sorted by name, object keys emitted in schema order. `serializeNamespace`\n * (authoring layer) and the server-side re-validation both normalize through\n * this function before hashing so CLI and server hash identical bytes.\n */\nexport function normalizeCanonical(definition: CanonicalDefinition): CanonicalDefinition {\n const sortByName = <T extends { name: string }>(items: T[]): T[] =>\n [...items].sort((a, b) => a.name.localeCompare(b.name))\n const normalized: CanonicalDefinition = {\n ...definition,\n enums: sortByName(definition.enums),\n tables: [...definition.tables]\n .sort((a, b) => a.table.localeCompare(b.table))\n .map((t) => {\n const { cowMutations, foreignKeys, checks, ...rest } = t\n return {\n ...rest,\n links: sortByName(t.links),\n indexes: [...t.indexes].sort((a, b) =>\n (a.name ?? a.columns.join('_')).localeCompare(b.name ?? b.columns.join('_'))),\n actions: sortByName(t.actions),\n ...(foreignKeys?.length ? { foreignKeys: sortByName(foreignKeys) } : {}),\n ...(checks?.length ? { checks: sortByName(checks) } : {}),\n // Omitted entirely when absent/empty so pre-CoW documents hash unchanged.\n ...(cowMutations !== undefined && cowMutations.length > 0 ? { cowMutations: sortByName(cowMutations) } : {}),\n }\n }),\n }\n if (definition.views !== undefined) {\n normalized.views = [...definition.views]\n .sort((a, b) => a.view.localeCompare(b.view))\n .map((view) => ({\n ...view,\n links: sortByName(view.links),\n dependencies: [...view.dependencies].sort(),\n }))\n }\n if (definition.imports?.length) {\n normalized.imports = definition.imports.map(normalizeCanonical).sort((a, b) => a.namespace.localeCompare(b.namespace))\n } else {\n delete normalized.imports\n }\n return normalized\n}\n","/**\n * graphql-default (Hasura-style) camelCase naming for the v2 SDL generator.\n *\n * Verified against the bios marketplace corpus\n * (~/test/apps/marketplace/src/graphql, 871 ops):\n * - input types are singular PascalCase + suffix (`VideoClipBoolExp`,\n * `UserOrderBy`, `ProfileInsertInput`, `ThirdPartyIntegrationOnConflict`)\n * - roots keep the table's plurality camelCased (`videoClips`, `profileByPk`,\n * `profileAggregate`, `insertProfileOne`, `updateUserByPk`)\n * - order enum values: ASC / ASC_NULLS_FIRST / ... / DESC_NULLS_LAST\n * - SelectColumn / UpdateColumn enum values are camelCase field names\n * (`distinctOn: [role]`, `updateColumns: [sceneFile, buyerTagId]`)\n * - constraint enum values are raw Postgres constraint names\n * (`static_ad_pkey`, `audience_profile_id_name_key`)\n * - mutation args keep `_set` / `_append` / `_inc` underscores; everything\n * else camelCases (`pkColumns`, `updateColumns`, `distinctOn`,\n * `affectedRows`, `returning`)\n */\nimport { COLUMN_TYPES, type ColumnType } from '../canonical/v2.js'\n\n/** `deal_comments` → `dealComments`. Preserves already-camelCase input. */\nexport function camelCase(name: string): string {\n const segments = name.split('_').filter((segment) => segment.length > 0)\n const first = segments[0]\n if (first === undefined) return name\n const head = first.charAt(0).toLowerCase() + first.slice(1)\n return head + segments.slice(1).map(capitalizeFirst).join('')\n}\n\n/** `deal_comments` → `DealComments`. */\nexport function pascalCase(name: string): string {\n return capitalizeFirst(camelCase(name))\n}\n\nfunction capitalizeFirst(segment: string): string {\n return segment.charAt(0).toUpperCase() + segment.slice(1)\n}\n\n/**\n * Deterministic English-ish singularization of one word. Intentional,\n * documented misses exist (`statuses` → `statuse`): a full inflection engine\n * would make generated names depend on a dictionary. Ambiguous table names\n * are resolved by renaming the table (or a future explicit `graphqlName`\n * annotation), never by changing these rules — they are part of the wire\n * contract once a namespace ships.\n */\nfunction singularizeWord(word: string): string {\n if (word.endsWith('ies') && word.length > 3) return `${word.slice(0, -3)}y`\n for (const suffix of ['sses', 'xes', 'ches', 'shes']) {\n if (word.endsWith(suffix)) return word.slice(0, -2)\n }\n if (word.endsWith('ss')) return word\n if (word.endsWith('s') && word.length > 1) return word.slice(0, -1)\n return word\n}\n\n/** GraphQL object type name: `deal_comments` → `DealComment` (last word singularized). */\nexport function typeName(table: string): string {\n const segments = table.split('_').filter((segment) => segment.length > 0)\n const last = segments[segments.length - 1]\n if (last === undefined) return pascalCase(table)\n return [...segments.slice(0, -1), singularizeWord(last)].map(capitalizeFirst).join('')\n}\n\n/** Column → GraphQL field name: `author_sub` → `authorSub`. */\nexport function fieldName(column: string): string {\n return camelCase(column)\n}\n\n/** Postgres enum name → GraphQL enum type name: `deal_status` → `DealStatus`. */\nexport function enumTypeName(name: string): string {\n return pascalCase(name)\n}\n\n/** GraphQL type → comparison input name: `String` → `StringComparisonExp`, `uuid` → `UuidComparisonExp`. */\nexport function comparisonExpName(gqlTypeName: string): string {\n return `${capitalizeFirst(gqlTypeName)}ComparisonExp`\n}\n\n/** Maps the 10 canonical column types onto GraphQL scalar names. */\nconst SCALAR_FOR_COLUMN_TYPE: Record<ColumnType, string> = {\n uuid: 'uuid',\n text: 'String',\n integer: 'Int',\n bigint: 'bigint',\n numeric: 'numeric',\n double: 'Float',\n boolean: 'Boolean',\n timestamptz: 'timestamptz',\n date: 'date',\n jsonb: 'jsonb',\n}\n\nexport function graphqlScalarFor(type: ColumnType): string {\n return SCALAR_FOR_COLUMN_TYPE[type]\n}\n\n/**\n * GraphQL scalar name → canonical column type: the exact inverse of\n * SCALAR_FOR_COLUMN_TYPE plus the `ID` builtin (accepted as text). This is\n * the map the compiler's restrict pass classifies variable types with, so a\n * variable declared with a lowercase custom scalar exactly as the SDL\n * declares it (`$id: uuid!`, `$before: timestamptz`) resolves to the right\n * ColumnType — capitalized spellings (`Uuid`) are NOT names this schema\n * declares and never classify.\n */\nconst COLUMN_TYPE_BY_SCALAR: ReadonlyMap<string, ColumnType> = new Map<string, ColumnType>([\n ['ID', 'text'],\n ...COLUMN_TYPES.map((type): [string, ColumnType] => [graphqlScalarFor(type), type]),\n])\n\nexport function columnTypeForScalar(scalarName: string): ColumnType | undefined {\n return COLUMN_TYPE_BY_SCALAR.get(scalarName)\n}\n\n/** Every GraphQL scalar name usable as a variable type — for diagnostics. */\nexport const VARIABLE_SCALAR_NAMES: readonly string[] = [...COLUMN_TYPE_BY_SCALAR.keys()]\n\n/** The custom scalars every generated schema declares (plan §3). */\nexport const CUSTOM_SCALARS = ['bigint', 'date', 'jsonb', 'numeric', 'timestamptz', 'uuid'] as const\n\n/** Column types eligible for sum/avg aggregates and `_inc` updates. */\nexport const NUMERICISH_COLUMN_TYPES: readonly ColumnType[] = ['integer', 'bigint', 'numeric', 'double']\n\nexport const ORDER_BY_ENUM = 'OrderBy'\nexport const ORDER_BY_ENUM_VALUES = [\n 'ASC',\n 'ASC_NULLS_FIRST',\n 'ASC_NULLS_LAST',\n 'DESC',\n 'DESC_NULLS_FIRST',\n 'DESC_NULLS_LAST',\n] as const\n\n/** The built-in read-only platform users entity (plan §4b). */\nexport const PLATFORM_USER_TYPENAME = 'PlatformUser'\n\n/**\n * The shared date-bucket enum for grouped aggregates. Declared once per\n * schema (not per table) because the unit set is table-independent; its\n * members mirror `DATE_BUCKETS` in src/ir/index.ts, which is the contract the\n * executor reads.\n */\nexport const DATE_BUCKET_ENUM = 'DateBucket'\n\n/** Column types that may carry a `bucket:` in a group key. */\nexport const BUCKETABLE_COLUMN_TYPES: readonly ColumnType[] = ['timestamptz', 'date']\n\n/** Every generated GraphQL name derived from one table name. */\nexport interface TableNames {\n typename: string\n selectRoot: string\n byPkRoot: string\n aggregateRoot: string\n insertRoot: string\n insertOneRoot: string\n updateRoot: string\n updateByPkRoot: string\n deleteRoot: string\n deleteByPkRoot: string\n /** Resolved tables only: drop manual edits so other sources win again. */\n revertByPkRoot: string\n boolExp: string\n orderBy: string\n selectColumn: string\n insertInput: string\n setInput: string\n appendInput: string\n incInput: string\n onConflict: string\n pkColumnsInput: string\n constraintEnum: string\n updateColumnEnum: string\n mutationResponse: string\n aggregate: string\n aggregateFields: string\n sumFields: string\n avgFields: string\n aggregateBoolExp: string\n aggregateBoolExpCount: string\n aggregateGroupsRoot: string\n groupByColumnEnum: string\n groupByInput: string\n groupKey: string\n aggregateGroup: string\n}\n\nexport function tableNames(table: string): TableNames {\n const root = camelCase(table)\n const rootPascal = pascalCase(table)\n const type = typeName(table)\n return {\n typename: type,\n selectRoot: root,\n byPkRoot: `${root}ByPk`,\n aggregateRoot: `${root}Aggregate`,\n insertRoot: `insert${rootPascal}`,\n insertOneRoot: `insert${rootPascal}One`,\n updateRoot: `update${rootPascal}`,\n updateByPkRoot: `update${rootPascal}ByPk`,\n deleteRoot: `delete${rootPascal}`,\n deleteByPkRoot: `delete${rootPascal}ByPk`,\n revertByPkRoot: `revert${rootPascal}ByPk`,\n boolExp: `${type}BoolExp`,\n orderBy: `${type}OrderBy`,\n selectColumn: `${type}SelectColumn`,\n insertInput: `${type}InsertInput`,\n setInput: `${type}SetInput`,\n appendInput: `${type}AppendInput`,\n incInput: `${type}IncInput`,\n onConflict: `${type}OnConflict`,\n pkColumnsInput: `${type}PkColumnsInput`,\n constraintEnum: `${type}Constraint`,\n updateColumnEnum: `${type}UpdateColumn`,\n mutationResponse: `${type}MutationResponse`,\n aggregate: `${type}Aggregate`,\n aggregateFields: `${type}AggregateFields`,\n sumFields: `${type}SumFields`,\n avgFields: `${type}AvgFields`,\n aggregateBoolExp: `${type}AggregateBoolExp`,\n aggregateBoolExpCount: `${type}AggregateBoolExpCount`,\n aggregateGroupsRoot: `${root}AggregateGroups`,\n groupByColumnEnum: `${type}GroupByColumn`,\n groupByInput: `${type}GroupBy`,\n groupKey: `${type}GroupKey`,\n aggregateGroup: `${type}AggregateGroup`,\n }\n}\n\n/** Shared object types behind the typed `cells` field. */\nexport const CELL_TYPENAMES = {\n /** A plain table's cell: when and by whom it was last written. */\n stamp: 'CellStamp',\n /** A resolved table's cell: which source won, when, by whom, and newer losers. */\n resolved: 'ResolvedCell',\n /** A newer candidate that lost to the column's rule. */\n conflict: 'CellConflict',\n} as const\n\n/** `Loan` → `LoanCells`: the per-table object carrying one cell per tracked column. */\nexport function cellsTypename(typename: string): string {\n return `${typename}Cells`\n}\n","/** Runtime SQL inputs are values, never interpolated into the submitted SQL. */\n// SHA-256 of \"sequence-orm-builtin-sql-read-v1\". This identifies server-owned\n// behavior, independent of a namespace's authored operation manifest.\nexport const BUILTIN_SQL_READ_HASH = 'sha256:a50c477c952a5e0fe68ed158a4530e4aab573c09bcbb1a8ac454dc88a39a6258'\n\nexport type SqlQueryParameter =\n | { type: 'text' | 'uuid' | 'date' | 'timestamptz' | 'numeric' | 'bigint'; value: string | null }\n | { type: 'integer' | 'double'; value: number | null }\n | { type: 'boolean'; value: boolean | null }\n\nexport type SqlQueryVariables = {\n sql: string\n parameters?: Record<string, SqlQueryParameter>\n}\n\ntype SqlQueryCell = string | number | boolean | null | SqlQueryCell[] | { [key: string]: SqlQueryCell }\n\nexport interface SqlQueryResult {\n columns: Array<{ name: string; type: string; nullable: boolean }>\n rows: Array<Array<SqlQueryCell>>\n truncated: boolean\n}\n","/**\n * Compiled-operation IR — THE frozen contract between the GraphQL compiler\n * (push time, CLI preview + canonical server compile) and the data-plane\n * executor (runtime). The artifact is inert, validated JSON: no generated\n * code ever crosses the registry (plan §4).\n *\n * Design invariants:\n * - Policies are BAKED IN at compile time: every table-touching node carries\n * its read policy AND-ed into `where` (or `writePolicy`/`insertCheck` for\n * mutation targets). Execution needs only (IR, claims, variables).\n * - §4f dynamic slots: a variable typed with a generated input type\n * (BoolExp/OrderBy/SelectColumn/InsertInput/SetInput/AppendInput/OnConflict)\n * marks a dynamic slot. The executor validates the runtime value against\n * the artifact's per-table whitelist metadata, lowers it to Drizzle, and\n * ANDs it with the baked policy — the policy is non-negotiable regardless\n * of what the client sends.\n * - `capability`/`role` predicate leaves resolve to booleans against the\n * caller's claims BEFORE execution, pruning dead branches per caller.\n * - Versioned via `irVersion` + `normalizeIr` (the normalizeSnapshot\n * pattern): executor upgrades decouple from artifact re-pushes.\n */\nimport { z } from 'zod'\nimport { COLUMN_TYPES, type ColumnType } from '../canonical/v2.js'\nimport { MAX_PERSISTED_READ_ROWS } from '../constants.js'\nimport { BUILTIN_SQL_READ_HASH } from '../client/sql.js'\nexport { CELL_PARTS, CELLS_FIELD, cellColumnName, type CellPart } from '../constants.js'\n\n/** Maximum supported version; emit the oldest version that preserves semantics. */\nexport const IR_VERSION = 6 as const\nexport const LEGACY_IR_VERSION = 1 as const\nexport const GUARDED_IR_VERSION = 2 as const\n/** Older v2 executors must not strip namespace-scoped authorization. */\nexport const COMPOSED_IR_VERSION = 3 as const\nexport const SQL_IR_VERSION = 4 as const\nexport const RUNTIME_SQL_IR_VERSION = 5 as const\nexport const SERVICE_PRINCIPAL_IR_VERSION = 6 as const\nconst irVersionSchema = z.union([z.literal(LEGACY_IR_VERSION), z.literal(GUARDED_IR_VERSION), z.literal(COMPOSED_IR_VERSION), z.literal(SQL_IR_VERSION), z.literal(RUNTIME_SQL_IR_VERSION), z.literal(SERVICE_PRINCIPAL_IR_VERSION)])\nconst operationVersionSchema = z.object({ irVersion: irVersionSchema })\n\n/** Every carrier of a service identity predicate must require the new executor. */\nexport function usesServicePrincipal(value: unknown): boolean {\n if (value === null || typeof value !== 'object') return false\n if (Array.isArray(value)) return value.some(usesServicePrincipal)\n const row = value as Record<string, unknown>\n return row.kind === 'servicePrincipal' || Object.values(row).some(usesServicePrincipal)\n}\n\n\n/** Keep v1 artifact identity when assembling only legacy operations from registry rows. */\nexport function requiredArtifactIrVersion(operations: readonly unknown[]): z.infer<typeof irVersionSchema> {\n let required: z.infer<typeof irVersionSchema> = LEGACY_IR_VERSION\n for (const operation of operations) {\n const { irVersion } = operationVersionSchema.parse(operation)\n if (irVersion > required) required = irVersion\n }\n return required\n}\n\n// ---------------------------------------------------------------------------\n// Values & claims\n// ---------------------------------------------------------------------------\n\n/**\n * The exact claim keys the platform stamps — mirrors claims.ts.\n *\n * `ext_subject` and `ext_email` are verified-borrower claims: the subject and\n * (verified, lowercased) email of an external principal that reached the ORM\n * through an Artifact Next ingress. Only an embedding host's in-process\n * delegated credential carries them — never a bearer, data token or header —\n * and every other caller has them absent, which matches no row.\n */\nexport const CLAIMS_CONTRACT = {\n sub: 'string',\n org: 'string?',\n ext_subject: 'string?',\n ext_email: 'string?',\n roles: 'string[]',\n capabilities: 'string[]',\n} as const\n/** Verified-borrower claim keys; text-typed, compared to text columns with = only. */\nexport const EXTERNAL_POLICY_CLAIM_KEYS = ['ext_subject', 'ext_email'] as const\nexport type ExternalPolicyClaimKey = (typeof EXTERNAL_POLICY_CLAIM_KEYS)[number]\nexport type ClaimKey = 'sub' | 'org' | ExternalPolicyClaimKey\n\nexport function isExternalPolicyClaimKey(key: string): key is ExternalPolicyClaimKey {\n return (EXTERNAL_POLICY_CLAIM_KEYS as readonly string[]).includes(key)\n}\n\nconst scalarLiteral = z.union([z.string(), z.number(), z.boolean(), z.null()])\n\nexport const valueIrSchema = z.discriminatedUnion('kind', [\n z.object({ kind: z.literal('literal'), value: z.union([scalarLiteral, z.array(scalarLiteral)]) }),\n z.object({ kind: z.literal('variable'), name: z.string() }),\n z.object({ kind: z.literal('claim'), key: z.enum(['sub', 'org', ...EXTERNAL_POLICY_CLAIM_KEYS]) }),\n])\nexport type ValueIr = z.infer<typeof valueIrSchema>\n\n// ---------------------------------------------------------------------------\n// Predicates\n// ---------------------------------------------------------------------------\n\nexport const CMP_OPS = [\n 'eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'in', 'nin',\n 'like', 'ilike', 'isNull', 'contains', 'hasKey',\n] as const\nexport type CmpOp = (typeof CMP_OPS)[number]\n\nexport type PredIr =\n | { kind: 'and'; operands: PredIr[] }\n | { kind: 'or'; operands: PredIr[] }\n | { kind: 'not'; operand: PredIr }\n | { kind: 'cmp'; op: CmpOp; column: string; value: ValueIr }\n /** EXISTS through a declared link; `where` runs against the target table. */\n | { kind: 'exists'; link: string; where: PredIr }\n /** Aggregation predicate (Hasura `rel_aggregate: { count: { predicate } }`). */\n | { kind: 'aggPredicate'; link: string; fn: 'count'; op: Exclude<CmpOp, 'in' | 'nin' | 'like' | 'ilike' | 'isNull' | 'contains' | 'hasKey'>; value: number; where?: PredIr }\n /** Boolean claims leaves — pre-resolved against claims before execution. */\n | { kind: 'capability'; key: string; namespace?: string }\n | { kind: 'role'; key: string; namespace?: string }\n | { kind: 'servicePrincipal' }\n /** §4f: a client-supplied BoolExp variable lands here, validated + lowered at runtime. */\n | { kind: 'dynamicFilter'; slot: string }\n | { kind: 'const'; value: boolean }\n\nexport const predIrSchema: z.ZodType<PredIr> = z.lazy(() =>\n z.discriminatedUnion('kind', [\n z.object({ kind: z.literal('and'), operands: z.array(predIrSchema).min(1) }),\n z.object({ kind: z.literal('or'), operands: z.array(predIrSchema).min(1) }),\n z.object({ kind: z.literal('not'), operand: predIrSchema }),\n z.object({ kind: z.literal('cmp'), op: z.enum(CMP_OPS), column: z.string(), value: valueIrSchema }),\n z.object({ kind: z.literal('exists'), link: z.string(), where: predIrSchema }),\n z.object({\n kind: z.literal('aggPredicate'), link: z.string(), fn: z.literal('count'),\n op: z.enum(['eq', 'neq', 'gt', 'gte', 'lt', 'lte']), value: z.number(),\n where: predIrSchema.optional(),\n }),\n z.object({ kind: z.literal('capability'), key: z.string(), namespace: z.string().optional() }),\n z.object({ kind: z.literal('role'), key: z.string(), namespace: z.string().optional() }),\n z.object({ kind: z.literal('dynamicFilter'), slot: z.string() }),\n z.object({ kind: z.literal('servicePrincipal') }).strict(),\n z.object({ kind: z.literal('const'), value: z.boolean() }),\n ]),\n) as z.ZodType<PredIr>\n\n// ---------------------------------------------------------------------------\n// Ordering / paging\n// ---------------------------------------------------------------------------\n\nexport const orderIrSchema = z.discriminatedUnion('kind', [\n z.object({\n kind: z.literal('column'),\n column: z.string(),\n /** Order through a to-one link: `link` is set and `column` is on the target. */\n link: z.string().optional(),\n direction: z.enum(['asc', 'desc']),\n nulls: z.enum(['first', 'last']).optional(),\n }),\n /** §4f: `$orderBy: [FooOrderBy!]` variable — validated + lowered at runtime. */\n z.object({ kind: z.literal('dynamic'), slot: z.string() }),\n])\nexport type OrderIr = z.infer<typeof orderIrSchema>\n\nexport const limitIrSchema = z.object({\n /** Fixed value or a variable, clamped to [1, max]; absent → default. */\n variable: z.string().optional(),\n value: z.number().int().positive().optional(),\n default: z.number().int().positive(),\n max: z.number().int().positive().max(MAX_PERSISTED_READ_ROWS),\n})\nexport type LimitIr = z.infer<typeof limitIrSchema>\n\n// ---------------------------------------------------------------------------\n// Selections\n// ---------------------------------------------------------------------------\n\n/** One cell of a `cells { … }` block: the parts selected for one column. */\nexport interface CellSelectionIr {\n alias: string\n /** Logical column whose cell this is. */\n column: string\n typename: string\n parts: Array<{\n alias: string\n part: 'source' | 'at' | 'by' | 'conflicts'\n /** `conflicts { … }`: the candidate fields selected, in order. */\n fields?: Array<{ alias: string; field: 'source' | 'at' | 'value' }>\n /** `conflicts { … }` element typename. */\n typename?: string\n }>\n}\n\nexport interface SelectionIr {\n /** GraphQL type name for __typename synthesis + Apollo normalization. */\n typename: string\n columns: Array<{ alias: string; column: string }>\n /** The typed `cells { … }` block (tables with cell metadata, resolved tables). */\n cells?: { alias: string; typename: string; fields: CellSelectionIr[] }\n relations: Array<{\n alias: string\n link: string\n selection: SelectionIr\n /** Fixed shape from the document; policy for the target table is ALSO\n * injected by the compiler into this `where` — never trust it absent. */\n where?: PredIr\n orderBy?: OrderIr[]\n limit?: LimitIr\n offset?: { variable?: string; value?: number }\n }>\n aggregates: Array<{\n alias: string\n /** Absent link = same-table aggregate (used by aggregate roots). */\n link?: string\n where?: PredIr\n count?: { columns?: string[]; distinct?: boolean }\n sum?: string[]\n avg?: string[]\n /** `nodes { }` selection inside an aggregate block. */\n nodes?: SelectionIr\n }>\n}\n\nconst selectionIrSchema: z.ZodType<SelectionIr> = z.lazy(() =>\n z.object({\n typename: z.string(),\n columns: z.array(z.object({ alias: z.string(), column: z.string() })),\n cells: z.object({\n alias: z.string(),\n typename: z.string(),\n fields: z.array(z.object({\n alias: z.string(),\n column: z.string(),\n typename: z.string(),\n parts: z.array(z.object({\n alias: z.string(),\n part: z.enum(['source', 'at', 'by', 'conflicts']),\n fields: z.array(z.object({ alias: z.string(), field: z.enum(['source', 'at', 'value']) })).optional(),\n typename: z.string().optional(),\n })),\n })),\n }).optional(),\n relations: z.array(z.object({\n alias: z.string(),\n link: z.string(),\n selection: selectionIrSchema,\n where: predIrSchema.optional(),\n orderBy: z.array(orderIrSchema).optional(),\n limit: limitIrSchema.optional(),\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n })),\n aggregates: z.array(z.object({\n alias: z.string(),\n link: z.string().optional(),\n where: predIrSchema.optional(),\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n nodes: selectionIrSchema.optional(),\n })),\n }),\n) as z.ZodType<SelectionIr>\n\nexport { selectionIrSchema }\n\n// ---------------------------------------------------------------------------\n// Roots\n// ---------------------------------------------------------------------------\n\n/** `@include(if: $var)` / `@skip(if: $var)` on a root field. */\nconst includeIfSchema = z.object({ variable: z.string(), negated: z.boolean() })\n\n/**\n * `@prefetch(source:)` on a resolved-table query root: before the SQL runs,\n * the data plane refreshes the named prefetch source for the keys this root\n * addresses. `key` is the single pk value (byPk / `pk: {_eq}`) or the pk list\n * (`pk: {_in}` on batch sources).\n */\nexport const prefetchPlanIrSchema = z.object({\n source: z.string(),\n maxStalenessMs: z.number().int().positive().optional(),\n key: z.union([z.object({ one: valueIrSchema }), z.object({ many: valueIrSchema })]),\n})\nexport type PrefetchPlanIr = z.infer<typeof prefetchPlanIrSchema>\n\nconst selectRootSchema = z.object({\n kind: z.literal('select'),\n alias: z.string(),\n table: z.string(),\n selection: selectionIrSchema,\n /** Composed at compile time: AND(policy, documentWhere?, dynamicFilter?). */\n where: predIrSchema,\n orderBy: z.array(orderIrSchema).default([]),\n distinctOn: z.union([z.array(z.string()), z.object({ slot: z.string() })]).optional(),\n limit: limitIrSchema,\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n includeIf: includeIfSchema.optional(),\n prefetch: z.array(prefetchPlanIrSchema).optional(),\n})\n\nconst byPkRootSchema = z.object({\n kind: z.literal('byPk'),\n alias: z.string(),\n table: z.string(),\n selection: selectionIrSchema,\n pk: z.array(z.object({ column: z.string(), value: valueIrSchema })).min(1),\n /** Policy predicate — ANDed with the PK match. */\n where: predIrSchema,\n includeIf: includeIfSchema.optional(),\n prefetch: z.array(prefetchPlanIrSchema).optional(),\n})\n\nconst aggregateRootSchema = z.object({\n kind: z.literal('aggregate'),\n alias: z.string(),\n table: z.string(),\n where: predIrSchema,\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n nodes: selectionIrSchema.optional(),\n includeIf: includeIfSchema.optional(),\n})\n\n/**\n * The date-bucket units a grouped aggregate may apply to a `date` /\n * `timestamptz` group key. A CLOSED enum on purpose: the executor maps each\n * member to a `date_trunc` literal, so no caller-supplied string ever reaches\n * SQL text. Adding a unit means adding it here AND to the executor's map —\n * the executor's exhaustive switch makes the omission a type error.\n */\nexport const DATE_BUCKETS = ['year', 'quarter', 'month', 'week', 'day', 'hour'] as const\nexport type DateBucket = (typeof DATE_BUCKETS)[number]\n\n/**\n * One group key: a column, optionally bucketed. `bucket` is only ever set on a\n * `date` / `timestamptz` column — the compiler rejects it on anything else, so\n * the executor can apply `date_trunc` without re-checking the column type.\n */\nconst groupByKeyIrSchema = z.object({\n column: z.string(),\n bucket: z.enum(DATE_BUCKETS).optional(),\n})\nexport type GroupByKeyIr = z.infer<typeof groupByKeyIrSchema>\n\n/**\n * A GROUPED aggregate root — `<t>AggregateGroups`. The ungrouped\n * `aggregateRootSchema` above stays exactly as it was; this is additive, so no\n * already-pushed artifact changes shape.\n *\n * Two deliberate omissions relative to the ungrouped root:\n * - no `nodes`. Per-group row lists are an unbounded fan-out (groups × rows)\n * and nothing needs them; the compiler rejects the field outright.\n * - `groupBy` is document-authored only — it is NOT a §4f dynamic slot. Group\n * keys pick which expressions reach GROUP BY, and dynamic-input.ts already\n * refuses aggregation shapes from client input for the same reason. The\n * `where` remains fully dynamic, which is what runtime filtering needs.\n */\nconst aggregateGroupsRootSchema = z.object({\n kind: z.literal('aggregateGroups'),\n alias: z.string(),\n table: z.string(),\n /** Composed at compile time: AND(policy, documentWhere?, dynamicFilter?). */\n where: predIrSchema,\n groupBy: z.array(groupByKeyIrSchema).min(1),\n /**\n * The `key { … }` projection: which group columns appear in each entry's key\n * object, in selection order. A subset of `groupBy` (the compiler rejects a\n * key field that is not a group key — it would be indeterminate within the\n * group). Empty when the document selects only `aggregate`.\n */\n key: z.array(z.object({ alias: z.string(), column: z.string() })).default([]),\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n /** Bounds the GROUP count, not the scanned rows — see MAX_GROUPS. */\n limit: limitIrSchema,\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n includeIf: includeIfSchema.optional(),\n})\n\n/** Column → value map for _set/_append/_inc, or a §4f whole-input slot. */\nconst writeValuesSchema = z.union([\n z.object({ slot: z.string() }),\n z.object({ entries: z.array(z.object({ column: z.string(), value: valueIrSchema })) }),\n])\n\nconst onConflictIrSchema = z.union([\n z.object({ slot: z.string() }),\n z.object({ constraint: z.string(), updateColumns: z.array(z.string()) }),\n])\n\nconst mutationRootSchema = z.object({\n kind: z.literal('mutation'),\n /**\n * CRUD verbs plus the structured copy-on-write ops. `cowOverride` copies the\n * synced row into the overlay (INSERT…SELECT, ON CONFLICT DO NOTHING) then\n * applies `set` — both statements generated by the executor from this\n * metadata, never authored SQL. `cowRevert` deletes the override so the\n * coalesce view falls back to synced. Both are gated on a matching synced\n * row and carry the write policy in `where` like update/delete.\n */\n op: z.enum(['insert', 'insertOne', 'update', 'updateByPk', 'delete', 'deleteByPk', 'cowOverride', 'cowRevert', 'resolvedWrite']),\n /**\n * resolvedWrite: a write to a resolved table (`table` is its view). The\n * executor gates on the resolved row (write policy in `where`), writes only\n * the touched cells into the manual source, then re-checks `insertCheck`\n * against the resolved row. `revert` clears `revertColumns` from the manual\n * source; `delete` tombstones the row there.\n */\n resolvedAction: z.enum(['insert', 'update', 'delete', 'revert']).optional(),\n revertColumns: z.array(z.string()).optional(),\n /** `@writeback(source:, mode:)` directives on this root. */\n writeback: z.array(z.object({ source: z.string(), mode: z.enum(['sync', 'async']) })).optional(),\n /** `@localOnly(source:)` — writeback columns deliberately kept local for these sources. */\n localOnly: z.array(z.string()).optional(),\n alias: z.string(),\n table: z.string(),\n /** CoW ops: logical name of the synced twin (read through its policy-filtered view). */\n cowSynced: z.string().optional(),\n /** cowOverride: logical properties copied INSERT…SELECT from synced (pk included). */\n cowCopyColumns: z.array(z.string()).optional(),\n /** cowOverride: insert-policy WITH CHECK evaluated over the copied rows. */\n cowCopyCheck: predIrSchema.optional(),\n /** insert/insertOne: rows come from a slot ($object/$objects) or literals. */\n objects: z.union([\n z.object({ slot: z.string() }),\n z.object({ rows: z.array(z.array(z.object({ column: z.string(), value: valueIrSchema }))) }),\n ]).optional(),\n /** Server-pinned columns (e.g. author_sub ← claim('sub')) merged into every inserted row. */\n pinnedColumns: z.array(z.object({ column: z.string(), value: valueIrSchema })).default([]),\n onConflict: onConflictIrSchema.optional(),\n set: writeValuesSchema.optional(),\n append: writeValuesSchema.optional(),\n inc: writeValuesSchema.optional(),\n /** update/delete row filter: AND(writePolicy, documentWhere/pk, dynamicFilter?). */\n where: predIrSchema.optional(),\n pk: z.array(z.object({ column: z.string(), value: valueIrSchema })).optional(),\n /** WITH CHECK analogue evaluated against NEW row values (insert/update). */\n insertCheck: predIrSchema.optional(),\n returning: selectionIrSchema.nullable(),\n affectedRows: z.boolean().default(false),\n /** v2: abort the transaction when the actual write count differs, regardless of selection. */\n assertAffectedRows: z.number().int().min(0).max(2147483647).optional(),\n includeIf: includeIfSchema.optional(),\n})\n\n// v2 has no action root kind — writes are mutations (CRUD or structured CoW\n// ops above). The former `kind: 'action'` scaffolding was removed before any\n// action operation was ever compiled into a registry artifact.\nexport const rootIrSchema = z.discriminatedUnion('kind', [\n selectRootSchema, byPkRootSchema, aggregateRootSchema, aggregateGroupsRootSchema, mutationRootSchema,\n])\nexport type RootIr = z.infer<typeof rootIrSchema>\n\n// ---------------------------------------------------------------------------\n// Variables (§4f dynamic slots) & operations\n// ---------------------------------------------------------------------------\n\nexport const INPUT_REF_KINDS = [\n 'boolExp', 'orderBy', 'selectColumn', 'insertInput', 'setInput', 'appendInput', 'onConflict',\n] as const\nexport type InputRefKind = (typeof INPUT_REF_KINDS)[number]\n\n/**\n * A declared GraphQL variable default, persisted verbatim so an omitted\n * variable resolves to it instead of silently becoming NULL. Wrapped in an\n * object so an explicit `= null` stays distinguishable from \"no default\".\n * Only shapes `ValueIr` can carry are representable — the restrict pass\n * rejects anything else (including §4f slot defaults) at compile time.\n */\nexport const variableDefaultIrSchema = z.object({\n value: z.union([scalarLiteral, z.array(scalarLiteral)]),\n})\nexport type VariableDefaultIr = z.infer<typeof variableDefaultIrSchema>\n\nexport const variableIrSchema = z.object({\n name: z.string(),\n type: z.union([\n z.object({ kind: z.literal('scalar'), scalar: z.enum(COLUMN_TYPES) }),\n /** `values` is the declared membership whitelist — the executor validates against it. */\n z.object({ kind: z.literal('enum'), name: z.string(), values: z.array(z.string()).min(1) }),\n /** §4f dynamic slot: validated against `tables[table]` whitelists at runtime. */\n z.object({ kind: z.literal('inputRef'), input: z.enum(INPUT_REF_KINDS), table: z.string() }),\n ]),\n nullable: z.boolean(),\n list: z.boolean(),\n /** Absent = no default declared; see {@link variableDefaultIrSchema}. */\n defaultValue: variableDefaultIrSchema.optional(),\n})\nexport type VariableIr = z.infer<typeof variableIrSchema>\n\nconst sqlColumnSchema = z.object({ name: z.string(), type: z.enum(['text', 'boolean', 'integer', 'bigint', 'numeric', 'double', 'uuid', 'date', 'timestamptz', 'jsonb']), nullable: z.boolean() })\n\nexport const compiledOperationSchema = z.object({\n language: z.literal('sql').optional(),\n /** Server-compiled object catalog and permission ceiling, never caller SQL. */\n sqlQuery: z.object({\n catalog: z.object({\n identity: z.string(),\n objects: z.array(z.object({\n ref: z.string(), table: z.string(), columns: z.array(sqlColumnSchema.extend({ type: z.string() })).min(1),\n scan: z.string().min(1), read: z.array(z.string()).min(1),\n }).strict()).min(1).max(256),\n }).strict(),\n read: z.array(z.string()).min(1).max(256),\n maxRows: z.number().int().min(1).max(10_000),\n }).strict().optional(),\n sql: z.object({\n text: z.string().min(1).max(1_048_576),\n columns: z.array(sqlColumnSchema).min(1).max(256),\n parameters: z.array(z.string()).max(128),\n read: z.array(z.string()).min(1).max(256),\n maxRows: z.number().int().min(1).max(10_000),\n }).strict().optional(),\n irVersion: irVersionSchema,\n name: z.string(),\n opHash: z.string().regex(/^sha256:[0-9a-f]{64}$/),\n kind: z.enum(['query', 'mutation']),\n requires: z.object({\n capability: z.string().optional(),\n role: z.string().optional(),\n }).nullable(),\n variables: z.array(variableIrSchema),\n /** Every table the op touches — data-token scoping + audit. */\n tableSet: z.array(z.string()).min(1),\n roots: z.array(rootIrSchema),\n}).superRefine((operation, ctx) => {\n if (operation.irVersion < SERVICE_PRINCIPAL_IR_VERSION && usesServicePrincipal(operation.roots)) {\n ctx.addIssue({ code: 'custom', message: 'servicePrincipal() requires IR v6' })\n }\n if (operation.language === 'sql') {\n const validPlan = operation.sqlQuery\n ? !operation.sql && operation.irVersion === RUNTIME_SQL_IR_VERSION\n : !!operation.sql && operation.irVersion === SQL_IR_VERSION\n const builtin = operation.name === 'BuiltinSqlRead'\n && operation.opHash === BUILTIN_SQL_READ_HASH\n && operation.requires === null\n if (!validPlan || operation.kind !== 'query' || operation.roots.length !== 0 || (!builtin && !operation.requires?.capability)) {\n ctx.addIssue({ code: 'custom', message: 'SQL operations require a query-only v4 plan or v5 runtime contract, capability, and no GraphQL roots' })\n }\n } else if (operation.sql || operation.sqlQuery || operation.roots.length === 0) {\n ctx.addIssue({ code: 'custom', message: 'GraphQL operations require roots and cannot carry SQL' })\n }\n for (const [index, root] of operation.roots.entries()) {\n if (root.kind !== 'mutation' || root.assertAffectedRows === undefined) continue\n if (operation.irVersion < 2 || operation.kind !== 'mutation' || root.includeIf !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['roots', index], message: 'affected-row assertions require unconditional mutation roots and IR v2' })\n }\n }\n})\nexport type CompiledOperation = z.infer<typeof compiledOperationSchema>\n\n// ---------------------------------------------------------------------------\n// Artifact: per-table runtime metadata + the operation set\n// ---------------------------------------------------------------------------\n\nexport const resolvedSourceIrSchema = z.object({\n name: z.string(),\n kind: z.enum(['manual', 'etl', 'prefetch']),\n /** Logical table key of the backing relation. */\n table: z.string(),\n columns: z.array(z.string()),\n key: z.string().optional(),\n fetch: z.union([\n z.object({ shape: z.literal('single') }),\n z.object({ shape: z.literal('batch'), maxKeys: z.number().int().positive() }),\n ]).optional(),\n function: z.object({ kind: z.enum(['managed', 'native']), id: z.string() }).optional(),\n prefetchDefaults: z.object({\n maxStalenessMs: z.number().int().positive(),\n timeoutMs: z.number().int().positive(),\n onError: z.enum(['fallback', 'fail']),\n }).optional(),\n writeback: z.object({\n columns: z.array(z.string()),\n defaultMode: z.enum(['sync', 'async']),\n timeoutMs: z.number().int().positive(),\n clearManualOnConfirm: z.boolean(),\n }).optional(),\n})\nexport type ResolvedSourceIr = z.infer<typeof resolvedSourceIrSchema>\n\nexport const resolvedMetaIrSchema = z.object({\n /** Logical pk column of the resolved view (single-column). */\n pk: z.string(),\n /** Source name of the manual source. */\n manual: z.string(),\n sources: z.array(resolvedSourceIrSchema),\n deletedBy: z.array(z.string()),\n /**\n * Materialized: the view reads `table`, which the data plane refreshes from\n * the `compute` view (claims-gated) whenever it writes a source row.\n */\n materialized: z.object({ table: z.string(), compute: z.string() }).optional(),\n})\nexport type ResolvedMetaIr = z.infer<typeof resolvedMetaIrSchema>\n\n/**\n * Runtime whitelist metadata per table — everything the executor needs to\n * build Drizzle table objects, validate §4f dynamic inputs, and lower them.\n * Derived from the canonical definition at compile time.\n */\nexport const tableMetaIrSchema = z.object({\n table: z.string(),\n namespace: z.string().optional(),\n dependencies: z.array(z.string()).optional(),\n foreignReferences: z.array(z.object({ column: z.string(), target: z.string(), targetColumn: z.string() })).optional(),\n exportRead: z.union([z.literal(true), z.object({ capability: z.string() }), z.object({ role: z.string() })]).optional(),\n exportWrite: z.union([z.literal(true), z.object({ capability: z.string() }), z.object({ role: z.string() })]).optional(),\n schema: z.string(),\n typename: z.string(),\n /**\n * True when statements over this relation evaluate a claims-gated synced\n * view: synced twins (`source: schema.table`) materialize as views whose baked\n * policy reads `current_setting('request.jwt.claims')`, and namespace views\n * inherit the gate transitively through their declared dependencies. The\n * executor must stamp that GUC (transaction-scoped) before any statement\n * touching such a relation, or the synced arm yields zero rows regardless\n * of the compiled predicates.\n */\n claimsGated: z.boolean().default(false),\n columns: z.array(z.object({\n name: z.string(),\n columnName: z.string(),\n type: z.union([z.enum(COLUMN_TYPES), z.object({ enum: z.string(), values: z.array(z.string()) })]),\n nullable: z.boolean(),\n })),\n /** Empty for keyless read-only views; keyed tables and views list logical columns. */\n primaryKey: z.array(z.string()),\n links: z.array(z.object({\n name: z.string(),\n kind: z.enum(['toOne', 'toMany', 'toPlatformUser']),\n target: z.string(),\n on: z.string(),\n references: z.string(),\n })),\n /** §4f whitelists: what dynamic inputs may reference. */\n filterable: z.array(z.string()),\n orderable: z.array(z.string()),\n insertable: z.array(z.string()),\n settable: z.array(z.string()),\n appendable: z.array(z.string()),\n /**\n * Logical columns stamped with Postgres `now()` on UPDATE (canonical\n * `onUpdateFn`). Omitted when empty so pre-onUpdate artifacts still parse.\n */\n touchOnUpdate: z.array(z.string()).optional(),\n /**\n * Per-cell metadata: logical column → the logical names of its cell-part\n * columns (which are listed in `columns`, but never filterable, orderable or\n * writable). Tables stamp `at`/`by` (and a manual source `rev`) on every\n * write; resolved views expose `source`/`at`/`by`/`conflicts`. Omitted when\n * the relation tracks no cells.\n */\n cells: z.record(z.string(), z.object({\n at: z.string().optional(),\n by: z.string().optional(),\n rev: z.string().optional(),\n source: z.string().optional(),\n conflicts: z.string().optional(),\n }).strict()).optional(),\n /** Resolved-table view metadata (sources, prefetch/writeback config) for the data plane. */\n resolved: resolvedMetaIrSchema.optional(),\n constraints: z.array(z.object({ name: z.string(), columns: z.array(z.string()) })),\n /** Depth/node caps for dynamic filter trees on this table. */\n dynamicFilterMaxDepth: z.number().int().positive().default(6),\n dynamicFilterMaxNodes: z.number().int().positive().default(64),\n})\nexport type TableMetaIr = z.infer<typeof tableMetaIrSchema>\n\nexport const compiledArtifactSchema = z.object({\n irVersion: irVersionSchema,\n namespace: z.string(),\n schemaHash: z.string(),\n ownSchemaHash: z.string().optional(),\n dependencies: z.record(z.string(), z.string()).optional(),\n readPolicies: z.record(z.string(), predIrSchema).optional(),\n opsHash: z.string(),\n /** Apply-observed synced objects without a serving backing; not part of the authored schema hash. */\n unbackedTables: z.array(z.string()).optional(),\n tables: z.record(z.string(), tableMetaIrSchema),\n operations: z.record(z.string(), compiledOperationSchema),\n}).superRefine((artifact, ctx) => {\n if (artifact.irVersion < SERVICE_PRINCIPAL_IR_VERSION && usesServicePrincipal(artifact)) {\n ctx.addIssue({ code: 'custom', message: 'servicePrincipal() requires IR v6' })\n }\n if (Object.keys(artifact.dependencies ?? {}).length > 0 && artifact.irVersion < COMPOSED_IR_VERSION) {\n ctx.addIssue({ code: 'custom', path: ['irVersion'], message: 'cross-namespace dependencies require IR v3' })\n }\n for (const [name, operation] of Object.entries(artifact.operations)) {\n if (operation.irVersion > artifact.irVersion) {\n ctx.addIssue({ code: 'custom', path: ['operations', name, 'irVersion'], message: 'operation requires a newer IR version than its artifact' })\n }\n }\n})\nexport type CompiledArtifact = z.infer<typeof compiledArtifactSchema>\n\n// ---------------------------------------------------------------------------\n// Versioning shim\n// ---------------------------------------------------------------------------\n\nexport class IrVersionError extends Error {\n constructor(found: unknown) {\n super(`Unsupported IR version ${String(found)} — this executor supports up to ${IR_VERSION}. ` +\n 'Upgrade @sequenceholdings/orm or re-push the namespace.')\n this.name = 'IrVersionError'\n }\n}\n\n/**\n * Validate + normalize a raw registry artifact (the normalizeSnapshot\n * pattern): future IR versions add upgrade branches here so executor\n * upgrades decouple from artifact re-pushes. Never trust registry jsonb —\n * the data plane calls this on every artifact load.\n */\nexport function normalizeIr(raw: unknown): CompiledArtifact {\n if (!raw || typeof raw !== 'object') throw new IrVersionError(undefined)\n const version = (raw as { irVersion?: unknown }).irVersion\n if (!irVersionSchema.safeParse(version).success) throw new IrVersionError(version)\n return compiledArtifactSchema.parse(raw)\n}\n\n/** Index an artifact's operations by opHash (the wire selector). */\nexport function indexByHash(artifact: CompiledArtifact): Map<string, CompiledOperation> {\n const map = new Map<string, CompiledOperation>()\n for (const op of Object.values(artifact.operations)) map.set(op.opHash, op)\n return map\n}\n","export class OrmDefinitionError extends Error {\n override readonly name = 'OrmDefinitionError'\n\n constructor(\n message: string,\n readonly file?: string,\n ) {\n super(file ? `${file}: ${message}` : message)\n }\n}\n\nexport class PredicateParseError extends Error {\n override readonly name = 'PredicateParseError'\n\n constructor(\n message: string,\n readonly position: number,\n ) {\n super(`${message} (at position ${position})`)\n }\n}\n","import { createHash } from 'node:crypto'\nimport { HASH_DOMAIN } from './constants.js'\nimport type { NamespaceCapabilities, NamespaceDefinition } from './schema/namespace.js'\nimport type { TableFile } from './schema/table.js'\n\ntype JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue }\n\n/** `Object.entries` widens Zod record values to `unknown` under tsup's DTS check. */\ntype RoleDefinition = NonNullable<NamespaceCapabilities['roles']['definitions'][string]>\ntype CapabilityDeclaration = NonNullable<NamespaceCapabilities['roles']['capabilities'][string]>\n\n/** Key-sorted, undefined-skipped JSON — identical definitions hash identically regardless of YAML key order. */\nexport function stableJson(value: unknown): string {\n if (value === null || typeof value !== 'object') return JSON.stringify(value)\n if (Array.isArray(value)) return `[${value.map(stableJson).join(',')}]`\n const entries = Object.entries(value as Record<string, unknown>)\n .filter(([, entryValue]) => entryValue !== undefined)\n .sort(([a], [b]) => (a < b ? -1 : 1))\n .map(([key, entryValue]) => `${JSON.stringify(key)}:${stableJson(entryValue)}`)\n return `{${entries.join(',')}}`\n}\n\n/** Empty collections hash as omitted — `indexes: []` and no indexes are the same definition. */\nfunction emptyToNull(value: unknown): JsonValue {\n if (value == null) return null\n if (Array.isArray(value)) return value.length === 0 ? null : (value as JsonValue)\n if (typeof value === 'object' && Object.keys(value).length === 0) return null\n return value as JsonValue\n}\n\n/** Predicates hash by their source text; parsed ASTs are derived and excluded. */\nfunction canonicalTable(table: TableFile): JsonValue {\n return {\n table: table.table,\n description: table.description ?? null,\n columns: (table.columns ?? null) as JsonValue,\n source: table.source ?? null,\n links: emptyToNull(table.links),\n indexes: emptyToNull(table.indexes),\n // insert/update are omitted rather than nulled when absent, so definitions\n // predating split policies keep the hash they were registered under.\n policies: {\n read: table.policies?.read?.source ?? null,\n write: table.policies?.write?.source ?? null,\n ...(table.policies?.insert !== undefined ? { insert: table.policies.insert.source } : {}),\n ...(table.policies?.update !== undefined ? { update: table.policies.update.source } : {}),\n } as JsonValue,\n actions: emptyToNull(\n Object.fromEntries(\n Object.entries(table.actions ?? {}).map(([name, action]) => [\n name,\n {\n description: action.description ?? null,\n requires: action.requires?.source ?? null,\n params: emptyToNull(action.params),\n validates: emptyToNull(action.validates?.map((entry) => entry.source)),\n executes: action.executes,\n returns: emptyToNull(action.returns),\n audit: (action.audit ?? null) as JsonValue,\n },\n ]),\n ),\n ),\n }\n}\n\n/**\n * The capabilities block, canonicalized: record keys sort via stableJson, and\n * we sort every array (uses, each role's inherits/grants) so authoring order\n * never changes the hash. Absent optional descriptions are omitted, not null,\n * so the canonical block round-trips back through the manifest schema. An empty\n * block hashes as omitted — \"no capabilities\" and an empty block are the same.\n */\nfunction canonicalCapabilities(capabilities: NamespaceCapabilities): JsonValue {\n const { definitions, capabilities: declared } = capabilities.roles\n const isEmpty =\n Object.keys(definitions).length === 0 && Object.keys(declared).length === 0 && capabilities.uses.length === 0\n if (isEmpty) return null\n // JSON-safe by construction (omitted optionals are dropped by stableJson); the\n // conditional spreads defeat structural inference, so assert the JsonValue shape.\n return {\n roles: {\n definitions: Object.fromEntries(\n (Object.entries(definitions) as [string, RoleDefinition][]).map(([key, def]) => [\n key,\n {\n ...(def.description !== undefined ? { description: def.description } : {}),\n default: def.default,\n inherits: [...def.inherits].sort(),\n grants: [...def.grants].sort(),\n },\n ]),\n ),\n capabilities: Object.fromEntries(\n (Object.entries(declared) as [string, CapabilityDeclaration][]).map(([key, cap]) => [\n key,\n cap.description !== undefined ? { description: cap.description } : {},\n ]),\n ),\n },\n uses: [...capabilities.uses].sort(),\n } as JsonValue\n}\n\nexport function canonicalizeDefinition(definition: NamespaceDefinition): JsonValue {\n return {\n namespace: definition.namespace,\n description: definition.description,\n capabilities: canonicalCapabilities(definition.capabilities),\n tables: definition.tables.map(canonicalTable),\n }\n}\n\nexport function computeDefinitionHash(definition: NamespaceDefinition): string {\n return createHash('sha256')\n .update(HASH_DOMAIN)\n .update(stableJson(canonicalizeDefinition(definition)))\n .digest('hex')\n}\n","import { canonicalRelations, localDefinitionSchema, normalizeCanonical, type CanonicalDefinition } from './v2.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { stableJson } from '../hash.js'\n\n/** The contract an owner publishes: its local schema/policies, without consumers' dependency copies. */\nexport function localContract(definition: CanonicalDefinition): CanonicalDefinition {\n return normalizeCanonical(localDefinitionSchema.parse(definition))\n}\n\n/** Accept generated contracts with transitive imports, pinning one local snapshot per namespace. */\nexport function flattenNamespaceImports(inputs: readonly unknown[]): CanonicalDefinition[] {\n const definitions = new Map<string, CanonicalDefinition>()\n const visit = (value: unknown, depth: number): void => {\n if (depth > 16 || definitions.size > 32) throw new OrmDefinitionError('namespace import graph is too large')\n const definition = localContract(localDefinitionSchema.parse(value))\n const previous = definitions.get(definition.namespace)\n if (previous) {\n if (stableJson(previous) !== stableJson(definition)) throw new OrmDefinitionError(`conflicting contracts for namespace '${definition.namespace}'`)\n }\n definitions.set(definition.namespace, definition)\n if (typeof value === 'object' && value !== null && 'imports' in value && Array.isArray(value.imports)) {\n for (const dependency of value.imports) visit(dependency, depth + 1)\n }\n }\n for (const input of inputs) visit(input, 0)\n return [...definitions.values()].sort((a, b) => a.namespace.localeCompare(b.namespace))\n}\n\n/** A compiler-only projection. DDL always consumes the original, uncomposed definition. */\nexport function composeNamespace(definition: CanonicalDefinition): {\n definition: CanonicalDefinition\n owners: Map<string, CanonicalDefinition>\n} {\n const all = [localContract(definition), ...(definition.imports ?? [])]\n const owners = new Map<string, CanonicalDefinition>()\n const namespaces = new Set<string>()\n const enums = new Map<string, CanonicalDefinition['enums'][number]>()\n for (const owner of all) {\n if (namespaces.has(owner.namespace)) throw new OrmDefinitionError(`duplicate imported namespace '${owner.namespace}'`)\n namespaces.add(owner.namespace)\n for (const value of owner.enums) {\n const previous = enums.get(value.name)\n if (previous && stableJson(previous) !== stableJson(value)) {\n throw new OrmDefinitionError(`conflicting imported enum '${value.name}'`)\n }\n enums.set(value.name, value)\n }\n for (const relation of canonicalRelations(owner)) {\n // Naming-collision product UX is separate; never silently select a different owner.\n if (owners.has(relation.table)) throw new OrmDefinitionError(`ambiguous imported relation '${relation.table}'`)\n owners.set(relation.table, owner)\n }\n }\n for (const owner of definition.imports?.length ? all : []) {\n for (const relation of canonicalRelations(owner)) {\n for (const link of relation.links) {\n if (link.kind === 'toPlatformUser') continue\n const target = owners.get(link.target ?? '')\n if (!target || target.namespace !== (link.namespace ?? owner.namespace)) {\n throw new OrmDefinitionError(`link '${owner.namespace}/${relation.table}.${link.name}' has no matching imported target`)\n }\n if (target.namespace !== owner.namespace && !target.exports?.[link.target ?? '']) {\n throw new OrmDefinitionError(`target '${target.namespace}/${link.target}' is not exported`)\n }\n }\n }\n }\n return {\n owners,\n definition: {\n ...localContract(definition),\n tables: all.flatMap(item => item.tables),\n views: all.flatMap(item => item.views ?? []),\n enums: [...enums.values()],\n },\n }\n}\n","/**\n * SDL generation (plan §3): pure `(canonical) → string`, offline and\n * byte-deterministic. The output is the schema consumers commit as\n * `schema.graphql` and point graphql-codegen at; the GraphQL→IR compiler\n * validates documents against the same SDL.\n *\n * Determinism discipline: the canonical definition is normalized\n * (`normalizeCanonical` — tables/links/indexes/enums sorted, columns kept in\n * declaration order), every derived collection is emitted in a fixed order,\n * and nothing time- or environment-dependent enters the output.\n */\nimport {\n canonicalRelations,\n canonicalDefinitionSchema,\n normalizeCanonical,\n type CanonicalColumn,\n type CanonicalDefinition,\n type CanonicalRelation,\n type CanonicalTable,\n type ColumnType,\n RESOLVED_VIEW_SYSTEM_COLUMNS,\n} from '../canonical/v2.js'\nimport { CELLS_FIELD } from '../constants.js'\nimport { DATE_BUCKETS } from '../ir/index.js'\nimport { composeNamespace } from '../canonical/composition.js'\nimport {\n CUSTOM_SCALARS,\n DATE_BUCKET_ENUM,\n NUMERICISH_COLUMN_TYPES,\n ORDER_BY_ENUM,\n ORDER_BY_ENUM_VALUES,\n PLATFORM_USER_TYPENAME,\n comparisonExpName,\n enumTypeName,\n fieldName,\n graphqlScalarFor,\n tableNames,\n CELL_TYPENAMES,\n cellsTypename,\n type TableNames,\n} from './naming.js'\n\nexport class SdlGenerationError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'SdlGenerationError'\n }\n}\n\nexport interface GenerateSdlOptions {\n /**\n * Server-pinned columns per table (computed by the compiler from write\n * policies — a column referenced via claim comparison, e.g.\n * `author_sub = claim('sub')`, is stamped server-side on insert and must\n * not be client-suppliable). Pinned columns are excluded from\n * `<Type>InsertInput` only; they remain readable, filterable, orderable,\n * and settable. Entries match either the column's TS `name` or its\n * Postgres `columnName`.\n */\n pinnedColumns?: Record<string, string[]>\n /**\n * Declare `_like`/`_ilike` on String only, as @sequenceholdings/orm 2.1.x\n * generated it, before integer and uuid columns took pattern filters. Atlas\n * regenerates this shape only to recognize a schema.graphql pushed by a\n * released CLI; operations always compile against the default shape.\n */\n stringOnlyPatternOperators?: boolean\n /** Reproduce earlier SDL for the server's compatibility check only. */\n omitReadBudgetDirective?: boolean\n}\n\nconst GRAPHQL_NAME_RE = /^[_A-Za-z][_0-9A-Za-z]*$/\nconst RESERVED_ENUM_VALUES = new Set(['true', 'false', 'null'])\n\nconst NUMERICISH = new Set<ColumnType>(NUMERICISH_COLUMN_TYPES)\n\n/** PlatformUser curated fields (plan §4b) in contract order. */\nconst PLATFORM_USER_FIELDS: ReadonlyArray<{ name: string; gqlType: string; nullable: boolean }> = [\n { name: 'sub', gqlType: 'String', nullable: false },\n { name: 'email', gqlType: 'String', nullable: true },\n { name: 'name', gqlType: 'String', nullable: true },\n { name: 'organization', gqlType: 'String', nullable: true },\n { name: 'role', gqlType: 'String', nullable: true },\n { name: 'managerId', gqlType: 'String', nullable: true },\n { name: 'accountEnabled', gqlType: 'Boolean', nullable: false },\n]\n\nexport function generateSdl(canonical: CanonicalDefinition, options: GenerateSdlOptions = {}): string {\n const def = composeNamespace(normalizeCanonical(canonicalDefinitionSchema.parse(canonical))).definition\n // Synced (`source: schema.table`) tables stay out of GraphQL roots in v2.0 (read via\n // materialization / managed views). Columns may still be declared for typing.\n // Internal tables (a resolved table's manual/prefetch sources) are data-plane\n // owned and never exposed.\n const exposed = canonicalRelations(def).filter((table) => table.source === undefined && table.internal !== true)\n // Cell-metadata columns never become scalar fields: they surface through the\n // typed `cells` object instead. Strip them once so every block below sees\n // data columns only.\n const cellsByTable = new Map(exposed.map((table) => [table.table, trackedCells(table)]))\n const tables = exposed.map((table) => ({ ...table, columns: table.columns.filter((column) => column.cell === undefined) }))\n if (tables.length === 0) {\n throw new SdlGenerationError(\n `Namespace \"${def.namespace}\" exposes no relations (synced tables are excluded from SDL in v2.0) — nothing to generate.`,\n )\n }\n for (const table of tables) {\n if (table.columns.length === 0) {\n throw new SdlGenerationError(`Relation \"${table.table}\" has no columns — cannot generate an object type.`)\n }\n }\n\n const namesByTable = new Map<string, TableNames>(tables.map((table) => [table.table, tableNames(table.table)]))\n const enumByName = new Map(def.enums.map((entry) => [entry.name, entry]))\n\n const hasPlatformUser = tables.some((table) => table.links.some((link) => link.kind === 'toPlatformUser'))\n\n /** Enums actually referenced by an exposed column — declared-but-unused enums are omitted. */\n const usedEnums = new Set<string>()\n for (const table of tables) {\n for (const column of table.columns) {\n if (typeof column.type === 'object') {\n if (!enumByName.has(column.type.enum)) {\n throw new SdlGenerationError(\n `Column \"${table.table}.${column.columnName}\" references undeclared enum \"${column.type.enum}\".`,\n )\n }\n usedEnums.add(column.type.enum)\n }\n }\n }\n\n /** Tables reachable through a toMany link get an aggregate predicate input (count only, §4d). */\n const aggregateBoolExpTargets = new Set<string>()\n for (const table of tables) {\n for (const link of table.links) {\n if (link.kind === 'toMany' && link.target !== undefined && namesByTable.has(link.target)) {\n aggregateBoolExpTargets.add(link.target)\n }\n }\n }\n\n const usedComparisonScalars = new Set<string>()\n for (const table of tables) {\n for (const column of table.columns) {\n if (typeof column.type !== 'object') usedComparisonScalars.add(graphqlScalarFor(column.type))\n }\n }\n if (hasPlatformUser) {\n usedComparisonScalars.add('String')\n usedComparisonScalars.add('Boolean')\n }\n // Aggregate predicates compare counts: `predicate: IntComparisonExp!`.\n if (aggregateBoolExpTargets.size > 0) usedComparisonScalars.add('Int')\n\n const blocks: string[] = []\n\n blocks.push(\n `# Generated by @sequenceholdings/orm — GraphQL SDL for namespace \"${def.namespace}\".\\n` +\n '# Do not edit: regenerate with `seq-studio orm generate`.',\n )\n\n blocks.push('directive @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT')\n blocks.push(\n '\"\"\"Gates an operation behind a platform capability or custom role — checked by the data plane before execution.\"\"\"\\n' +\n 'directive @requires(capability: String, role: String) on QUERY | MUTATION',\n )\n if (!options.omitReadBudgetDirective) blocks.push(\n '\"\"\"Sets a document-authored ceiling of 1–50001 rows for one flat select root. Runtime variables cannot raise it.\"\"\"\\n' +\n 'directive @readBudget(maxRows: Int!) on QUERY',\n )\n blocks.push('directive @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT')\n blocks.push(\n '\"\"\"Abort the entire mutation unless this root affects exactly the document-authored number of rows. Mutation roots only; cannot be conditional.\"\"\"\\n' +\n 'directive @assertAffectedRows(exactly: Int!) on FIELD',\n )\n if (tables.some((table) => table.resolved !== undefined)) blocks.push(...RESOLVED_DIRECTIVE_BLOCKS)\n\n for (const scalar of CUSTOM_SCALARS) blocks.push(`scalar ${scalar}`)\n blocks.push(...renderSharedCellTypes([...cellsByTable.values()]))\n\n blocks.push(renderEnum(ORDER_BY_ENUM, [...ORDER_BY_ENUM_VALUES]))\n // Shared by every table's grouped-aggregate root; the unit set is\n // table-independent, so it is declared once. SDL spells enum members\n // uppercase (as OrderBy does); the lowerer maps them back to the IR's\n // lowercase `DATE_BUCKETS` members.\n blocks.push(renderEnum(DATE_BUCKET_ENUM, DATE_BUCKETS.map((bucket) => bucket.toUpperCase())))\n\n for (const enumName of [...usedEnums].sort()) {\n const entry = enumByName.get(enumName)\n if (!entry) continue\n for (const value of entry.values) assertEnumValue(value, `enum \"${enumName}\"`)\n blocks.push(renderEnum(enumTypeName(enumName), entry.values))\n }\n\n const patternTypes = options.stringOnlyPatternOperators ? STRING_PATTERN_COMPARISON_TYPES : PATTERN_COMPARISON_TYPES\n for (const scalar of [...usedComparisonScalars].sort()) {\n blocks.push(renderComparisonExp({ gqlTypeName: scalar, patternTypes }))\n }\n for (const enumName of [...usedEnums].sort()) {\n blocks.push(renderComparisonExp({ gqlTypeName: enumTypeName(enumName), patternTypes }))\n }\n\n if (hasPlatformUser) blocks.push(...renderPlatformUserBlocks())\n\n for (const table of tables) {\n const names = namesByTable.get(table.table)\n if (!names) continue\n blocks.push(\n ...renderTableBlocks({\n table,\n names,\n namesByTable,\n emitAggregateBoolExp: aggregateBoolExpTargets.has(table.table),\n pinned: options.pinnedColumns?.[table.table] ?? [],\n cells: cellsByTable.get(table.table) ?? null,\n }),\n )\n }\n\n blocks.push(renderQueryRoot(tables, namesByTable))\n\n const mutationRoot = renderMutationRoot(tables, namesByTable)\n if (mutationRoot !== null) blocks.push(mutationRoot)\n\n assertNoDuplicateTypeNames(blocks)\n return `${blocks.join('\\n\\n')}\\n`\n}\n\n/** `type Foo {`, `input Foo {`, `enum Foo {`, `scalar foo` → the declared name. */\nconst TYPE_DECLARATION_RE = /^(?:type|input|enum|scalar|interface|union)\\s+([_A-Za-z][_0-9A-Za-z]*)/\n\n/**\n * Two schema-level declarations sharing a name produce SDL that `buildSchema`\n * rejects with \"There can be only one type named X\" — pointing at the schema\n * rather than at the definition that caused it.\n *\n * The collision is easy to reach because canonical names are PascalCased into\n * GraphQL type names, so a namespace enum called `date_bucket` renders as\n * `DateBucket` and lands on the shared bucket enum; `order_by` lands on\n * `OrderBy`. Table names can collide the same way (`typeName` singularizes, so\n * `deal` and `deals` both give `Deal`).\n *\n * Checked over the ASSEMBLED blocks rather than against a hand-maintained\n * reserved-name list, which would silently go stale the next time the\n * generator learns to emit a new shared type — as it just did.\n */\nfunction assertNoDuplicateTypeNames(blocks: readonly string[]): void {\n const seen = new Set<string>()\n for (const block of blocks) {\n const declared = TYPE_DECLARATION_RE.exec(block)?.[1]\n if (declared === undefined) continue\n if (seen.has(declared)) {\n throw new SdlGenerationError(\n `Generated schema declares \"${declared}\" twice. A canonical enum or table name is PascalCased into this GraphQL type name and collides with another declaration (for example an enum named \"date_bucket\" renders as \"DateBucket\", the shared bucket enum). Rename the offending enum or table.`,\n )\n }\n seen.add(declared)\n }\n}\n\n// ---------------------------------------------------------------------------\n// Rendering helpers\n// ---------------------------------------------------------------------------\n\nfunction assertEnumValue(value: string, context: string): void {\n if (!GRAPHQL_NAME_RE.test(value) || RESERVED_ENUM_VALUES.has(value)) {\n throw new SdlGenerationError(\n `Value \"${value}\" in ${context} is not a valid GraphQL enum value (must match ${GRAPHQL_NAME_RE} and not be true/false/null).`,\n )\n }\n}\n\nfunction renderEnum(name: string, values: readonly string[]): string {\n return `enum ${name} {\\n${values.map((value) => ` ${value}`).join('\\n')}\\n}`\n}\n\n/** `\"\"\"…\"\"\"` description block lines, with embedded triple-quotes escaped. */\nfunction descriptionLines(text: string, indent: string): string[] {\n const escaped = text.replace(/\"\"\"/g, '\\\\\"\"\"')\n return [`${indent}\"\"\"`, ...escaped.split('\\n').map((line) => `${indent}${line}`), `${indent}\"\"\"`]\n}\n\n/**\n * GraphQL types whose comparison input takes `_like`/`_ilike` (a String\n * pattern): text, and the integer and uuid types the executor matches by\n * their text form (`allowedOps`).\n */\nconst PATTERN_COMPARISON_TYPES: ReadonlySet<string> = new Set(['String', 'Int', 'bigint', 'uuid'])\n\n/** The 2.1.x set (`GenerateSdlOptions.stringOnlyPatternOperators`). */\nconst STRING_PATTERN_COMPARISON_TYPES: ReadonlySet<string> = new Set(['String'])\n\n/**\n * Comparison input for one GraphQL type. Uniform base operator set, plus\n * `_like`/`_ilike` on String, Int, bigint and uuid and `_contains`/`_hasKey`\n * on jsonb (§4d). Fields sort alphabetically for byte determinism.\n */\nfunction renderComparisonExp({ gqlTypeName, patternTypes }: {\n gqlTypeName: string\n patternTypes: ReadonlySet<string>\n}): string {\n const fields: Array<[string, string]> = [\n ['_eq', gqlTypeName],\n ['_neq', gqlTypeName],\n ['_gt', gqlTypeName],\n ['_gte', gqlTypeName],\n ['_lt', gqlTypeName],\n ['_lte', gqlTypeName],\n ['_in', `[${gqlTypeName}!]`],\n ['_nin', `[${gqlTypeName}!]`],\n ['_isNull', 'Boolean'],\n ]\n if (patternTypes.has(gqlTypeName)) {\n fields.push(['_like', 'String'], ['_ilike', 'String'])\n }\n if (gqlTypeName === 'jsonb') {\n fields.push(['_contains', 'jsonb'], ['_hasKey', 'String'])\n }\n fields.sort(([a], [b]) => a.localeCompare(b))\n const body = fields.map(([field, type]) => ` ${field}: ${type}`).join('\\n')\n return `input ${comparisonExpName(gqlTypeName)} {\\n${body}\\n}`\n}\n\nfunction renderPlatformUserBlocks(): string[] {\n const typeFields = PLATFORM_USER_FIELDS.map(\n (field) => ` ${field.name}: ${field.gqlType}${field.nullable ? '' : '!'}`,\n ).join('\\n')\n const boolExpName = `${PLATFORM_USER_TYPENAME}BoolExp`\n const boolFields = [\n ` _and: [${boolExpName}!]`,\n ` _not: ${boolExpName}`,\n ` _or: [${boolExpName}!]`,\n ...PLATFORM_USER_FIELDS.map((field) => ` ${field.name}: ${comparisonExpName(field.gqlType)}`),\n ].join('\\n')\n const orderFields = PLATFORM_USER_FIELDS.map((field) => ` ${field.name}: ${ORDER_BY_ENUM}`).join('\\n')\n return [\n '\"\"\"Curated read-only view over platform users (plan §4b) — reachable only through `toPlatformUser` links.\"\"\"\\n' +\n `type ${PLATFORM_USER_TYPENAME} {\\n${typeFields}\\n}`,\n `input ${boolExpName} {\\n${boolFields}\\n}`,\n `input ${PLATFORM_USER_TYPENAME}OrderBy {\\n${orderFields}\\n}`,\n ]\n}\n\n/** Declared only for namespaces with resolved tables, so other SDL is unchanged. */\nconst RESOLVED_DIRECTIVE_BLOCKS = [\n '\"\"\"Refresh this resolved-table root from a prefetch source before reading. Key-addressed roots only; the source must support the root shape.\"\"\"\\n' +\n 'directive @prefetch(source: String!, maxStaleness: String) repeatable on FIELD',\n renderEnum('WritebackMode', ['SYNC', 'ASYNC']),\n '\"\"\"Write this resolved-table mutation back to a prefetch source (SYNC rolls back on failure; ASYNC queues).\"\"\"\\n' +\n 'directive @writeback(source: String!, mode: WritebackMode) repeatable on FIELD',\n '\"\"\"Declare that this mutation deliberately keeps writeback columns local to the named source.\"\"\"\\n' +\n 'directive @localOnly(source: String!) repeatable on FIELD',\n]\n\ninterface TableRenderContext {\n table: CanonicalRelation\n names: TableNames\n namesByTable: Map<string, TableNames>\n emitAggregateBoolExp: boolean\n pinned: string[]\n /** Tracked cells, or null when the relation has no cell metadata. */\n cells: TrackedCells | null\n}\n\ninterface TrackedCells {\n resolved: boolean\n /** Logical column names, in declaration order. */\n columns: string[]\n}\n\nfunction trackedCells(table: CanonicalRelation): TrackedCells | null {\n const columns = [...new Set(table.columns.flatMap((column) => (column.cell ? [column.cell.of] : [])))]\n if (columns.length === 0) return null\n return { resolved: table.columns.some((column) => column.cell?.part === 'source'), columns }\n}\n\n/** The shared cell object types, declared only when some relation tracks cells. */\nfunction renderSharedCellTypes(all: ReadonlyArray<TrackedCells | null>): string[] {\n const present = all.filter((cells): cells is TrackedCells => cells !== null)\n const blocks: string[] = []\n if (present.some((cells) => !cells.resolved)) {\n blocks.push(`\"\"\"When, and by whom, a cell was last written.\"\"\"\\ntype ${CELL_TYPENAMES.stamp} {\\n at: timestamptz!\\n by: String\\n}`)\n }\n if (present.some((cells) => cells.resolved)) {\n blocks.push(`\"\"\"A newer candidate value that lost to the column's resolve rule.\"\"\"\\ntype ${CELL_TYPENAMES.conflict} {\\n source: String!\\n at: timestamptz\\n value: jsonb\\n}`)\n blocks.push(`\"\"\"How a resolved cell was decided: the winning source, its time and actor, and newer losers.\"\"\"\\ntype ${CELL_TYPENAMES.resolved} {\\n source: String!\\n at: timestamptz\\n by: String\\n conflicts: [${CELL_TYPENAMES.conflict}!]!\\n}`)\n }\n return blocks\n}\n\n/** `type LoanCells { status: CellStamp … }` — null cells were never written (or have no candidate). */\nfunction renderCellsType(ctx: TableRenderContext): string[] {\n if (!ctx.cells) return []\n const cellType = ctx.cells.resolved ? CELL_TYPENAMES.resolved : CELL_TYPENAMES.stamp\n const lines = ctx.cells.columns.map((column) => ` ${fieldName(column)}: ${cellType}`)\n return [`type ${cellsTypename(ctx.names.typename)} {\\n${lines.join('\\n')}\\n}`]\n}\n\n/** `where/orderBy/limit/offset` args for a to-many relation field. */\nfunction relationArgs(target: TableNames): string {\n return `where: ${target.boolExp}, orderBy: [${target.orderBy}!], limit: Int, offset: Int`\n}\n\n/** Root select/aggregate args — relations plus `distinctOn`. */\nfunction rootArgs(names: TableNames): string {\n return `where: ${names.boolExp}, orderBy: [${names.orderBy}!], distinctOn: [${names.selectColumn}!], limit: Int, offset: Int`\n}\n\n/** Resolve the PK identifiers to canonical columns (throws on a dangling reference). */\nfunction primaryKeyColumns(table: CanonicalTable): CanonicalColumn[] {\n if (!table.primaryKey || table.primaryKey.length === 0) return []\n return table.primaryKey.map((identifier) => {\n const column = table.columns.find((c) => c.columnName === identifier || c.name === identifier)\n if (!column) {\n throw new SdlGenerationError(`Primary key column \"${identifier}\" not found on table \"${table.table}\".`)\n }\n return column\n })\n}\n\nfunction pkArgs(table: CanonicalTable, ctx: TableRenderContext): string {\n return primaryKeyColumns(table)\n .map((column) => `${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}!`)\n .join(', ')\n}\n\nfunction renderTableBlocks(ctx: TableRenderContext): string[] {\n const { table, names } = ctx\n const blocks: string[] = [\n renderObjectType(ctx),\n ...renderCellsType(ctx),\n renderSelectColumnEnum(ctx),\n renderOrderByInput(ctx),\n renderBoolExp(ctx),\n ...renderAggregateTypes(ctx),\n ...renderGroupByTypes(ctx),\n ]\n if (ctx.emitAggregateBoolExp) blocks.push(...renderAggregateBoolExp(ctx))\n\n const pk = primaryKeyColumns(table)\n if (pk.length > 0) {\n const fields = pk\n .map((column) => ` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}!`)\n .join('\\n')\n blocks.push(`input ${names.pkColumnsInput} {\\n${fields}\\n}`)\n }\n\n if (ctx.table.resolved !== undefined) {\n blocks.push(...renderResolvedWriteBlocks(ctx))\n } else if (allowsInsert(table) || allowsUpdate(table)) {\n blocks.push(...renderWriteBlocks(ctx, { insert: allowsInsert(table), update: allowsUpdate(table) }))\n }\n return blocks\n}\n\n/** Columns a resolved-table mutation may write: authored data columns, never the view's system columns. */\nexport function resolvedWritableColumns(table: CanonicalRelation): CanonicalColumn[] {\n const system = new Set<string>(Object.values(RESOLVED_VIEW_SYSTEM_COLUMNS).map((column) => column.name))\n return table.columns.filter((column) => !system.has(column.name))\n}\n\nfunction renderResolvedWriteBlocks(ctx: TableRenderContext): string[] {\n const { table, names } = ctx\n const writable = resolvedWritableColumns(table)\n const pk = new Set(table.primaryKey ?? [])\n const settable = writable.filter((column) => !pk.has(column.columnName))\n const line = (column: CanonicalColumn) => ` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}`\n const blocks: string[] = []\n if (allowsInsert(table)) blocks.push(`input ${names.insertInput} {\\n${writable.map(line).join('\\n')}\\n}`)\n if (allowsUpdate(table)) {\n blocks.push(`input ${names.setInput} {\\n${settable.map(line).join('\\n')}\\n}`)\n blocks.push(renderEnum(names.updateColumnEnum, settable.map((column) => fieldName(column.name))))\n }\n return blocks\n}\n\nfunction renderResolvedMutationFields(table: CanonicalRelation, names: TableNames): string[] {\n const lines: string[] = []\n const pk = primaryKeyColumns(table)\n if (allowsInsert(table)) lines.push(` ${names.insertOneRoot}(object: ${names.insertInput}!): ${names.typename}`)\n if (allowsUpdate(table) && pk.length > 0) {\n lines.push(` ${names.updateByPkRoot}(pkColumns: ${names.pkColumnsInput}!, _set: ${names.setInput}!): ${names.typename}`)\n lines.push(` ${names.revertByPkRoot}(pkColumns: ${names.pkColumnsInput}!, columns: [${names.updateColumnEnum}!]!): ${names.typename}`)\n if ((table.resolved?.deletedBy.length ?? 0) > 0) {\n const args = pk.map((column) => `${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}!`).join(', ')\n lines.push(` ${names.deleteByPkRoot}(${args}): ${names.typename}`)\n }\n }\n return lines\n}\n\nfunction allowsInsert(table: CanonicalTable): boolean {\n return table.policies.write !== undefined || table.policies.insert !== undefined\n}\n\nfunction allowsUpdate(table: CanonicalTable): boolean {\n return table.policies.write !== undefined || table.policies.update !== undefined\n}\n\nfunction allowsOnConflict(table: CanonicalTable): boolean {\n if (!allowsInsert(table) || !allowsUpdate(table)) return false\n // onConflict DO UPDATE must authorize both insert and update principals; only\n // legacy write-only tables have a single predicate for both.\n if (table.policies.insert !== undefined || table.policies.update !== undefined) return false\n return table.policies.write !== undefined\n}\n\nfunction isWritable(table: CanonicalTable): boolean {\n return allowsInsert(table) || allowsUpdate(table)\n}\n\nfunction renderObjectType(ctx: TableRenderContext): string {\n const { table, names } = ctx\n const lines: string[] = []\n if (table.description !== undefined) lines.push(...descriptionLines(table.description, ''))\n lines.push(`type ${names.typename} {`)\n for (const column of table.columns) {\n if (column.description !== undefined) lines.push(...descriptionLines(column.description, ' '))\n const bang = column.nullable ? '' : '!'\n const deprecated = column.deprecated ? ' @deprecated' : ''\n lines.push(` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}${bang}${deprecated}`)\n }\n if (ctx.cells) {\n lines.push(' \"\"\"Per-cell metadata: when each field was last written, and by whom.\"\"\"')\n lines.push(` ${CELLS_FIELD}: ${cellsTypename(names.typename)}!`)\n }\n for (const link of table.links) {\n if (link.description !== undefined) lines.push(...descriptionLines(link.description, ' '))\n if (link.kind === 'toPlatformUser') {\n lines.push(` ${fieldName(link.name)}: ${PLATFORM_USER_TYPENAME}`)\n continue\n }\n // A link may target a synced/excluded table (valid in policies) — SDL skips it.\n const target = link.target !== undefined ? ctx.namesByTable.get(link.target) : undefined\n if (!target) continue\n if (link.kind === 'toOne') {\n lines.push(` ${fieldName(link.name)}: ${target.typename}`)\n } else {\n lines.push(` ${fieldName(link.name)}(${relationArgs(target)}): [${target.typename}!]!`)\n lines.push(` ${fieldName(link.name)}Aggregate(${relationArgs(target)}): ${target.aggregate}!`)\n }\n }\n lines.push('}')\n return lines.join('\\n')\n}\n\nfunction renderSelectColumnEnum(ctx: TableRenderContext): string {\n const values = ctx.table.columns.map((column) => fieldName(column.name))\n for (const value of values) assertEnumValue(value, `select-column enum for table \"${ctx.table.table}\"`)\n return renderEnum(ctx.names.selectColumn, values)\n}\n\nfunction renderOrderByInput(ctx: TableRenderContext): string {\n const { table, names } = ctx\n const lines = table.columns.map((column) => ` ${fieldName(column.name)}: ${ORDER_BY_ENUM}`)\n for (const link of table.links) {\n if (link.kind === 'toPlatformUser') {\n lines.push(` ${fieldName(link.name)}: ${PLATFORM_USER_TYPENAME}OrderBy`)\n } else if (link.kind === 'toOne' && link.target !== undefined) {\n const target = ctx.namesByTable.get(link.target)\n if (target) lines.push(` ${fieldName(link.name)}: ${target.orderBy}`)\n }\n // to-many ordering is not part of the v1 grammar (plan §4e: to-one only).\n }\n return `input ${names.orderBy} {\\n${lines.join('\\n')}\\n}`\n}\n\nfunction renderBoolExp(ctx: TableRenderContext): string {\n const { table, names } = ctx\n const lines: string[] = [\n ` _and: [${names.boolExp}!]`,\n ` _not: ${names.boolExp}`,\n ` _or: [${names.boolExp}!]`,\n ]\n for (const column of table.columns) {\n lines.push(` ${fieldName(column.name)}: ${comparisonExpName(columnGqlTypeOf(table, column))}`)\n }\n for (const link of table.links) {\n if (link.kind === 'toPlatformUser') {\n lines.push(` ${fieldName(link.name)}: ${PLATFORM_USER_TYPENAME}BoolExp`)\n continue\n }\n const target = link.target !== undefined ? ctx.namesByTable.get(link.target) : undefined\n if (!target) continue\n lines.push(` ${fieldName(link.name)}: ${target.boolExp}`)\n if (link.kind === 'toMany') {\n lines.push(` ${fieldName(link.name)}Aggregate: ${target.aggregateBoolExp}`)\n }\n }\n return `input ${names.boolExp} {\\n${lines.join('\\n')}\\n}`\n}\n\nfunction numericishColumns(table: CanonicalTable): CanonicalColumn[] {\n return table.columns.filter((column) => typeof column.type !== 'object' && NUMERICISH.has(column.type))\n}\n\n/** Appendable jsonb columns. */\nfunction jsonbColumns(table: CanonicalTable): CanonicalColumn[] {\n return clientWritableColumns(table).filter((column) => column.type === 'jsonb')\n}\n\n/** Columns a client may name in any write input (cell-metadata columns are already stripped). */\nfunction clientWritableColumns(table: CanonicalTable): CanonicalColumn[] {\n return table.columns\n}\n\nfunction renderAggregateTypes(ctx: TableRenderContext): string[] {\n const { table, names } = ctx\n const numericish = numericishColumns(table)\n const blocks: string[] = []\n blocks.push(\n `type ${names.aggregate} {\\n aggregate: ${names.aggregateFields}\\n nodes: [${names.typename}!]!\\n}`,\n )\n const fieldLines = [` count(columns: [${names.selectColumn}!], distinct: Boolean): Int!`]\n if (numericish.length > 0) {\n fieldLines.push(` avg: ${names.avgFields}`)\n fieldLines.push(` sum: ${names.sumFields}`)\n }\n blocks.push(`type ${names.aggregateFields} {\\n${fieldLines.join('\\n')}\\n}`)\n if (numericish.length > 0) {\n const avgLines = numericish.map((column) => ` ${fieldName(column.name)}: Float`)\n blocks.push(`type ${names.avgFields} {\\n${avgLines.join('\\n')}\\n}`)\n const sumLines = numericish.map((column) => ` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}`)\n blocks.push(`type ${names.sumFields} {\\n${sumLines.join('\\n')}\\n}`)\n }\n return blocks\n}\n\n/**\n * Columns eligible as a group key — everything except jsonb, matching what\n * `orderBy` already excludes. Grouping by a jsonb document is never the intent\n * and its key field would have no useful GraphQL type.\n */\nfunction groupableColumns(table: CanonicalTable): CanonicalColumn[] {\n return table.columns.filter((column) => column.type !== 'jsonb')\n}\n\n/**\n * The GROUPED aggregate surface (`<t>AggregateGroups`), additive alongside the\n * ungrouped `<t>Aggregate`. One entry per group, each carrying its key plus the\n * same `<T>AggregateFields` the ungrouped root returns — so `count`/`sum`/`avg`\n * mean exactly what they already mean, just per group instead of per scan.\n *\n * Every key field is nullable: only the columns named in a given query's\n * `groupBy` are populated, and a grouped NULL is itself a legitimate key.\n * `bucket` is offered on every key but the compiler accepts it only on\n * date/timestamptz columns — expressing that in the type system would need a\n * per-column input type per table, which is a lot of SDL for a check the\n * compiler makes anyway with a better error message.\n */\nfunction renderGroupByTypes(ctx: TableRenderContext): string[] {\n const { table, names } = ctx\n const groupable = groupableColumns(table)\n if (groupable.length === 0) return []\n const keyLines = groupable.map((column) => ` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}`)\n return [\n renderEnum(names.groupByColumnEnum, groupable.map((column) => fieldName(column.name))),\n `input ${names.groupByInput} {\\n column: ${names.groupByColumnEnum}!\\n bucket: ${DATE_BUCKET_ENUM}\\n}`,\n `type ${names.groupKey} {\\n${keyLines.join('\\n')}\\n}`,\n `type ${names.aggregateGroup} {\\n key: ${names.groupKey}!\\n aggregate: ${names.aggregateFields}\\n}`,\n ]\n}\n\n/**\n * `limit`/`offset` here bound the number of GROUPS returned, not the rows\n * scanned — the aggregation still sees every policy-visible row.\n */\nfunction groupRootArgs(names: TableNames): string {\n return `where: ${names.boolExp}, groupBy: [${names.groupByInput}!]!, limit: Int, offset: Int`\n}\n\n/** Hasura-parity aggregate predicate input — count only in v1 (§4d). */\nfunction renderAggregateBoolExp(ctx: TableRenderContext): string[] {\n const { names } = ctx\n return [\n `input ${names.aggregateBoolExp} {\\n count: ${names.aggregateBoolExpCount}\\n}`,\n `input ${names.aggregateBoolExpCount} {\\n` +\n ` arguments: [${names.selectColumn}!]\\n` +\n ' distinct: Boolean\\n' +\n ` filter: ${names.boolExp}\\n` +\n ' predicate: IntComparisonExp!\\n}',\n ]\n}\n\n/** Postgres constraint names selectable in `onConflict` — PK + unique indexes/columns. */\nfunction constraintValues(table: CanonicalTable): string[] {\n const values = new Set<string>()\n if (table.primaryKey && table.primaryKey.length > 0) values.add(`${table.table}_pkey`)\n for (const column of table.columns) {\n if (column.unique) values.add(`${table.table}_${column.columnName}_unique`)\n }\n for (const index of table.indexes) {\n if (index.unique) values.add(index.name ?? `${table.table}_${index.columns.join('_')}_key`)\n }\n return [...values].sort()\n}\n\nfunction clientSettableColumns(table: CanonicalTable): CanonicalColumn[] {\n return clientWritableColumns(table).filter((column) => column.onUpdateFn === undefined)\n}\n\nfunction renderWriteBlocks(\n ctx: TableRenderContext,\n access: { insert: boolean; update: boolean },\n): string[] {\n const { table, names, pinned } = ctx\n const blocks: string[] = []\n\n if (access.insert) {\n const pinnedSet = new Set(pinned)\n const insertable = clientWritableColumns(table).filter(\n (column) => !pinnedSet.has(column.name) && !pinnedSet.has(column.columnName),\n )\n if (insertable.length === 0) {\n throw new SdlGenerationError(\n `Table \"${table.table}\" has no insertable columns after excluding pinned columns [${pinned.join(', ')}].`,\n )\n }\n // Insert-input fields are all nullable (Hasura parity) — column defaults and\n // server-pinned values fill the gaps; NOT NULL is enforced by Postgres.\n const insertLines = insertable.map(\n (column) => ` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}`,\n )\n blocks.push(`input ${names.insertInput} {\\n${insertLines.join('\\n')}\\n}`)\n }\n\n if (access.update) {\n const setLines = clientSettableColumns(table).map(\n (column) => ` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}`,\n )\n blocks.push(`input ${names.setInput} {\\n${setLines.join('\\n')}\\n}`)\n }\n\n const jsonb = jsonbColumns(table)\n if (access.update && jsonb.length > 0) {\n const appendLines = jsonb.map((column) => ` ${fieldName(column.name)}: jsonb`)\n blocks.push(`input ${names.appendInput} {\\n${appendLines.join('\\n')}\\n}`)\n }\n\n const numericish = numericishColumns(table)\n if (access.update && numericish.length > 0) {\n const incLines = numericish.map(\n (column) => ` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}`,\n )\n blocks.push(`input ${names.incInput} {\\n${incLines.join('\\n')}\\n}`)\n }\n\n const constraints = constraintValues(table)\n if (access.insert && allowsOnConflict(table) && constraints.length > 0) {\n for (const value of constraints) assertEnumValue(value, `constraint enum for table \"${table.table}\"`)\n blocks.push(renderEnum(names.constraintEnum, constraints))\n const updateColumns = clientSettableColumns(table).map((column) => fieldName(column.name))\n blocks.push(renderEnum(names.updateColumnEnum, updateColumns))\n blocks.push(\n `input ${names.onConflict} {\\n` +\n ` constraint: ${names.constraintEnum}!\\n` +\n ` updateColumns: [${names.updateColumnEnum}!]! = []\\n` +\n ` where: ${names.boolExp}\\n}`,\n )\n }\n\n if (access.insert || access.update) {\n blocks.push(\n `type ${names.mutationResponse} {\\n affectedRows: Int!\\n returning: [${names.typename}!]!\\n}`,\n )\n }\n return blocks\n}\n\nfunction renderQueryRoot(tables: CanonicalRelation[], namesByTable: Map<string, TableNames>): string {\n const lines: string[] = ['type Query {']\n for (const table of tables) {\n const names = namesByTable.get(table.table)\n if (!names) continue\n lines.push(` ${names.selectRoot}(${rootArgs(names)}): [${names.typename}!]!`)\n const pk = primaryKeyColumns(table)\n if (pk.length > 0) {\n const args = pk\n .map((column) => `${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}!`)\n .join(', ')\n lines.push(` ${names.byPkRoot}(${args}): ${names.typename}`)\n }\n lines.push(` ${names.aggregateRoot}(${rootArgs(names)}): ${names.aggregate}!`)\n if (groupableColumns(table).length > 0) {\n lines.push(` ${names.aggregateGroupsRoot}(${groupRootArgs(names)}): [${names.aggregateGroup}!]!`)\n }\n }\n lines.push('}')\n return lines.join('\\n')\n}\n\nfunction columnGqlTypeOf(table: CanonicalTable, column: CanonicalColumn): string {\n return typeof column.type === 'object' ? enumTypeName(column.type.enum) : graphqlScalarFor(column.type)\n}\n\nfunction renderMutationRoot(tables: CanonicalRelation[], namesByTable: Map<string, TableNames>): string | null {\n const lines: string[] = []\n for (const table of tables) {\n const canInsert = allowsInsert(table)\n const canUpdate = allowsUpdate(table)\n if (!canInsert && !canUpdate) continue\n const names = namesByTable.get(table.table)\n if (!names) continue\n if (table.resolved !== undefined) {\n lines.push(...renderResolvedMutationFields(table, names))\n continue\n }\n const constraints = constraintValues(table)\n const onConflictArg =\n canInsert && allowsOnConflict(table) && constraints.length > 0 ? `, onConflict: ${names.onConflict}` : ''\n const updateArgs = [`_set: ${names.setInput}`]\n if (jsonbColumns(table).length > 0) updateArgs.push(`_append: ${names.appendInput}`)\n if (numericishColumns(table).length > 0) updateArgs.push(`_inc: ${names.incInput}`)\n const updateArgList = updateArgs.join(', ')\n\n if (canInsert) {\n lines.push(` ${names.insertRoot}(objects: [${names.insertInput}!]!${onConflictArg}): ${names.mutationResponse}`)\n lines.push(` ${names.insertOneRoot}(object: ${names.insertInput}!${onConflictArg}): ${names.typename}`)\n }\n if (canUpdate) {\n lines.push(` ${names.updateRoot}(where: ${names.boolExp}!, ${updateArgList}): ${names.mutationResponse}`)\n const pk = primaryKeyColumns(table)\n if (pk.length > 0) {\n lines.push(\n ` ${names.updateByPkRoot}(pkColumns: ${names.pkColumnsInput}!, ${updateArgList}): ${names.typename}`,\n )\n }\n lines.push(` ${names.deleteRoot}(where: ${names.boolExp}!): ${names.mutationResponse}`)\n if (pk.length > 0) {\n const args = pk\n .map((column) => `${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}!`)\n .join(', ')\n lines.push(` ${names.deleteByPkRoot}(${args}): ${names.typename}`)\n }\n }\n lines.push(...renderCowMutationFields(table, names))\n }\n if (lines.length === 0) return null\n return `type Mutation {\\n${lines.join('\\n')}\\n}`\n}\n\n/**\n * Copy-on-write mutation fields: flat args — the pk plus (override only)\n * every set column. Overrides are full snapshots of the set columns: every\n * set argument must be supplied (a nullable column accepts an explicit null),\n * so nullability mirrors the overlay column while lowering enforces presence.\n */\nfunction renderCowMutationFields(table: CanonicalTable, names: TableNames): string[] {\n const lines: string[] = []\n const columnByName = new Map(table.columns.map((column) => [column.name, column]))\n for (const mutation of table.cowMutations ?? []) {\n const pkColumn = columnByName.get(mutation.pk)\n if (!pkColumn) continue\n const pkArg = `${fieldName(mutation.pk)}: ${columnGqlTypeOf(table, pkColumn)}!`\n if (mutation.kind === 'revert') {\n lines.push(` ${fieldName(mutation.name)}(${pkArg}): ${names.typename}`)\n continue\n }\n const setArgs = mutation.set.map((property) => {\n const column = columnByName.get(property)\n if (!column) return null\n const bang = column.nullable === false ? '!' : ''\n return `${fieldName(property)}: ${columnGqlTypeOf(table, column)}${bang}`\n })\n if (setArgs.some((arg) => arg === null)) continue\n lines.push(` ${fieldName(mutation.name)}(${pkArg}, ${setArgs.join(', ')}): ${names.typename}`)\n }\n return lines\n}\n","/** Errors raised by the v2 client-codegen surface (manifest + generated sources). */\nexport class CodegenGqlError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'CodegenGqlError'\n }\n}\n","/**\n * `operations.manifest.json` (plan §7): the client-side registry of compiled\n * operations written by `orm generate` alongside `schema.graphql`. The Apollo\n * link / `executeOperation` resolve an operation NAME to its `opHash` here —\n * the wire carries only `{op: <hash>, variables}`, never document text.\n *\n * `opsHash` identifies the operation set (plan §6: document edits mint a new\n * ops hash, never a migration) and is computed over the sorted operation\n * entries, independent of input order.\n */\nimport { createHash } from 'node:crypto'\nimport { z } from 'zod'\nimport { stableJson } from '../hash.js'\nimport { CodegenGqlError } from './errors.js'\n\nexport const MANIFEST_VERSION = 1 as const\n\n/** Same grammar the IR contract enforces for `opHash` (frozen, plan §4). */\nconst OP_HASH_RE = /^sha256:[0-9a-f]{64}$/\nconst GRAPHQL_NAME_RE = /^[_A-Za-z][_0-9A-Za-z]*$/\n\nexport const manifestRequiresSchema = z\n .object({\n capability: z.string().min(1).optional(),\n role: z.string().min(1).optional(),\n })\n .nullable()\n\nexport const manifestOperationSchema = z.object({\n hash: z.string().regex(OP_HASH_RE),\n kind: z.enum(['query', 'mutation']),\n requires: manifestRequiresSchema,\n})\n\nexport const operationsManifestSchema = z.object({\n manifestVersion: z.literal(MANIFEST_VERSION),\n schemaHash: z.string().min(1),\n opsHash: z.string().regex(OP_HASH_RE),\n operations: z.record(z.string().regex(GRAPHQL_NAME_RE), manifestOperationSchema),\n})\nexport type OperationsManifest = z.infer<typeof operationsManifestSchema>\nexport type ManifestOperation = z.infer<typeof manifestOperationSchema>\n\nexport interface ManifestOperationInput {\n /** Operation name as authored in the document (the registry identity). */\n name: string\n /** Compiled op hash (`sha256:<64 hex>` — the wire selector). */\n hash: string\n kind: 'query' | 'mutation'\n /** `@requires` gate; absent/empty normalizes to null. */\n requires?: { capability?: string; role?: string } | null\n}\n\nexport function buildOperationsManifest({\n schemaHash,\n operations,\n}: {\n schemaHash: string\n operations: ManifestOperationInput[]\n}): OperationsManifest {\n if (schemaHash.length === 0) throw new CodegenGqlError('schemaHash must be a non-empty string.')\n\n const sorted = [...operations].sort((a, b) => a.name.localeCompare(b.name))\n const seen = new Set<string>()\n const entries = sorted.map((op) => {\n if (!GRAPHQL_NAME_RE.test(op.name)) {\n throw new CodegenGqlError(`Operation name \"${op.name}\" is not a valid GraphQL name.`)\n }\n if (seen.has(op.name)) {\n throw new CodegenGqlError(`Duplicate operation name \"${op.name}\" — operation names must be unique per namespace.`)\n }\n seen.add(op.name)\n if (!OP_HASH_RE.test(op.hash)) {\n throw new CodegenGqlError(`Operation \"${op.name}\" has malformed hash \"${op.hash}\" (expected sha256:<64 hex>).`)\n }\n return { name: op.name, hash: op.hash, kind: op.kind, requires: normalizeRequires(op.requires) }\n })\n\n const opsHash = `sha256:${createHash('sha256').update(stableJson(entries)).digest('hex')}`\n\n const operationsRecord: Record<string, ManifestOperation> = {}\n for (const entry of entries) {\n operationsRecord[entry.name] = { hash: entry.hash, kind: entry.kind, requires: entry.requires }\n }\n\n return {\n manifestVersion: MANIFEST_VERSION,\n schemaHash,\n opsHash,\n operations: operationsRecord,\n }\n}\n\nfunction normalizeRequires(\n requires: ManifestOperationInput['requires'],\n): { capability?: string; role?: string } | null {\n if (requires === undefined || requires === null) return null\n const normalized: { capability?: string; role?: string } = {}\n if (requires.capability !== undefined) normalized.capability = requires.capability\n if (requires.role !== undefined) normalized.role = requires.role\n return normalized.capability === undefined && normalized.role === undefined ? null : normalized\n}\n","/**\n * `typePolicies.gen.ts` generation (plan §7): Apollo InMemoryCache key fields\n * derived from primary keys (composite included), so persisted-operation\n * responses normalize identically to the bios Apollo setup.\n */\nimport {\n canonicalDefinitionSchema,\n canonicalRelations,\n normalizeCanonical,\n type CanonicalDefinition,\n} from '../canonical/v2.js'\nimport { PLATFORM_USER_TYPENAME, fieldName, tableNames } from '../sdl/naming.js'\nimport { CodegenGqlError } from './errors.js'\nimport { composeNamespace } from '../canonical/composition.js'\n\n/** Returns the TypeScript SOURCE of the consumer's `typePolicies.gen.ts`. */\nexport function generateTypePolicies(canonical: CanonicalDefinition): string {\n const def = composeNamespace(normalizeCanonical(canonicalDefinitionSchema.parse(canonical))).definition\n const entries: Array<{ typename: string; keyFields: string[] }> = []\n let hasPlatformUser = false\n\n for (const table of canonicalRelations(def)) {\n // Synced and internal tables are excluded from the GraphQL surface (mirrors generateSdl).\n if (table.source !== undefined || table.internal === true) continue\n if (table.links.some((link) => link.kind === 'toPlatformUser')) hasPlatformUser = true\n if (!table.primaryKey || table.primaryKey.length === 0) continue\n const keyFields = table.primaryKey.map((identifier) => {\n const column = table.columns.find((c) => c.columnName === identifier || c.name === identifier)\n if (!column) {\n throw new CodegenGqlError(`Primary key column \"${identifier}\" not found on relation \"${table.table}\".`)\n }\n return fieldName(column.name)\n })\n entries.push({ typename: tableNames(table.table).typename, keyFields })\n }\n\n if (hasPlatformUser) entries.push({ typename: PLATFORM_USER_TYPENAME, keyFields: ['sub'] })\n entries.sort((a, b) => a.typename.localeCompare(b.typename))\n\n const body = entries\n .map((entry) => ` ${entry.typename}: { keyFields: [${entry.keyFields.map((key) => `'${key}'`).join(', ')}] },`)\n .join('\\n')\n\n return (\n '/* Generated by @sequenceholdings/orm — Apollo cache type policies. Do not edit. */\\n' +\n \"import type { TypePolicies } from '@apollo/client'\\n\\n\" +\n `export const typePolicies: TypePolicies = {\\n${body}\\n}\\n`\n )\n}\n"]}
|