Skip to content

TML-2891: delete the SQL family placeholder namespace; SqlNamespace is now abstract#864

Merged
wmadden-electric merged 44 commits into
mainfrom
tml-2891-eliminate-the-sql-family-placeholder-namespace-concretion
Jun 26, 2026
Merged

TML-2891: delete the SQL family placeholder namespace; SqlNamespace is now abstract#864
wmadden-electric merged 44 commits into
mainfrom
tml-2891-eliminate-the-sql-family-placeholder-namespace-concretion

Conversation

@wmadden-electric

Copy link
Copy Markdown
Contributor

What & why

The SQL family carried a placeholder namespace concretion — SqlBoundNamespace (kind 'sql-namespace'), built by buildSqlNamespace from the misnamed SqlNamespaceTablesInput — used as a fallback when no target createNamespace was wired. It existed only to serve contracts built without a target, which is why the supabase extension emitted kind: 'sql-namespace' instead of the correct 'postgres-schema'.

Decision

There is no real-world contract without a target, so the placeholder is deleted, not demoted. SqlNamespace is now an abstract class; only target concretions (PostgresSchema, SqliteDatabase) are ever instantiated; createNamespace is required on ContractDefinition.

What changed

  • Deleted SqlBoundNamespace / buildSqlNamespace / buildSqlNamespaceMap / fromTablesInput / SqlUnboundNamespace / the 'sql-namespace' kind. Renamed the SqlNamespaceTablesInput misnomer → SqlNamespaceInput (it's the createNamespace factory input, not a tables-only type).
  • SqlNamespace is abstract. SqlStorageInput.namespaces stays nominal (construction requires real concretions), while SqlStorage.namespaces's read type is the structural SqlNamespaceShape so emitted .d.ts contract literals stay assignable (preserving the TML-2887: namespace entries becomes an open, kind-keyed dictionary (ADR 224/225) #812 "emitted literals satisfy structurally" property that the nominal-class change would otherwise have broken).
  • The serializer base's __unbound__ slot is materialized by a target-provided override (no family-level unbound singleton; no layering violation). The "is this a hydrated concretion?" check is a realm-safe structural guard (isMaterializedSqlNamespacetypeof qualifyTable === 'function') rather than instanceof NamespaceBase, which false-negatives across the built-dist bundle boundary (the item-G realm-safety concern the ticket flagged).
  • Tests that need a namespace use a test-only concrete createTestSqlNamespace (@prisma-next/sql-contract/test-support). Production has no constructable family namespace.

Wire change (isolated)

The only emitted-artifact delta is kind: 'sql-namespace''postgres-schema' in the generated .d.ts (supabase, paradedb, examples, fixtures). contract.json was already correct. fixtures:check is byte-clean.

Verification

  • Merged current main (TML-2916 namespace-defaulting + v0.14.0).
  • typecheck --force 138/138; test:packages and test:e2e green; test:integration clean modulo known parallel-load flakes + one network-dependent init-journey; fixtures:check byte-clean; lint / lint:deps clean; grep-clean of all deleted symbols.
  • Internal opus reviewer pass; its must-fixes all addressed (removed dead defaultNamespaceId surface; eliminated two avoidable blindCasts by typing createNamespace as => SqlNamespace; fixed a stale comment; switched a SQLite test off a Postgres-flavored dummy to the real concretion).

Follow-up B to TML-2887. The remaining follow-up is TML-2892 (migration-author accessor).

🤖 Generated with Claude Code

wmadden-electric and others added 23 commits June 16, 2026 12:25
…createNamespace

- Convert SqlNamespace from structural type alias to abstract class
  extending NamespaceBase; targets (PostgresSchema, SqliteDatabase,
  SqlUnboundNamespace, SqlBoundNamespace) now extend SqlNamespace
- Make ContractDefinition.createNamespace required; remove buildSqlNamespace
  fallbacks from build-contract.ts and all authoring chain types
  (ContractInput, BoundDefinitionInput, ContractScaffold, contract-dsl,
  contract-lowering, contract-psl interpreter + provider)
- Fix supabase and paradedb configs to supply postgresCreateNamespace
- Add createNamespace to emptyContract options interface
- Remove buildSqlNamespace fallback + instanceof guard from
  SqlContractSerializerBase.hydrateSqlNamespaceMap; throw instead
- Remove buildSqlNamespaceMap call from validateStorage; use blindCast
  to pass validated namespace map without materializing IR

Tests are expected to be red (Phase 2 fixes them).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
The previous validateStorage constructed `new SqlStorage({...})` and
blindCast raw validated JSON into `SqlStorageInput["namespaces"]`. Since
SqlNamespace is now a nominal abstract class, those raw objects are not
SqlNamespace instances — the cast was an unsound fake materialization of
the family namespace, exactly what this ticket forbids.

Make validateStorage validate-and-throw, returning void; construct
nothing. No validation is lost: the arktype StorageSchema (storageHash,
types, per-namespace entries via createNamespaceEntrySchema) is what
actually validates, and the SqlStorage constructor ran no namespace/table
checks. All semantic checks live in validateStorageSemantics /
validateSqlStorageConsistency / validateModelStorageReferences /
validateContractDomain, driven from validateSqlContractFully over the raw
validated entries. Every caller uses expect(...).toThrow()/not.toThrow()
and ignores the return, so void is compatible.

Drop the now-unused SqlStorageInput and ifDefined imports; SqlStorage is
now type-only.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…buildSqlNamespace

Replaces every `buildSqlNamespace` / `buildSqlNamespaceMap` /
`SqlNamespaceTablesInput` / `'sql-namespace'` reference in the 35 test
files across packages/3-targets and packages/3-extensions with the
appropriate target factory:

- Postgres tests → `postgresCreateNamespace` from `@prisma-next/target-postgres/types`
  (or relative `../../src/core/postgres-schema` inside the target package itself)
- SQLite tests → `sqliteCreateNamespace` from `@prisma-next/target-sqlite/control`
  (or relative `../../src/core/sqlite-unbound-database` inside the target package)
- `SqlUnboundNamespace.instance` → `PostgresUnboundSchema.instance` (pgvector)
  or `SqliteUnboundDatabase.instance` (sqlite target authoring-surface test)
- `kind: 'sql-namespace'` in test-d type fixtures → `kind: 'schema'`
  (the actual Postgres namespace kind)
- `buildSqlNamespaceMap(namespaces)` (pgvector planner.behavior) replaced
  with `namespaces ??` fallback since callers pass already-constructed
  SqlNamespace instances

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…ntract

Adds a concrete `TestSqlNamespace extends SqlNamespace` for use in tests
that need to instantiate a namespace without going through a real target.
Exports `createTestSqlNamespace(input)` from `@prisma-next/sql-contract/test-support`
with the package.json export and tsdown entry point.

Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…estSqlNamespace

Replaces all buildSqlNamespace call sites in packages/2-sql/** tests with
createTestSqlNamespace imported from @prisma-next/sql-contract/test-support.
Removes hand-rolled StubNamespace classes in contract-ts tests.
Deletes build-sql-namespace-map.test.ts (tests a function deleted in Phase 3).

Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…amespace API

All 39 test files in @prisma-next/sql-contract-ts now pass createNamespace
to defineContract/buildSqlContractFromDefinition. Also adds SqlNamespaceShape
interface so generated contract.d.ts JSON shapes satisfy Contract<SqlStorage>
without requiring qualifyTable.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
… and postgres serializer tests

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…nd cli fixture tests

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…hase-1 createNamespace API

Adds createNamespace to all remaining callsites across integration tests,
e2e harness, example configs, and the Postgres/SQLite facade define-contract
implementations. Also adds kind: string to SqlNamespaceShape so it satisfies
the Namespace interface structurally.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…dSqlNamespace; make SqlNamespace abstract

- Remove build-sql-namespace.ts and sql-unbound-namespace.ts
- SqlNamespace abstract; only PostgresSchema, SqliteDatabase, TestSqlNamespace instantiated
- All call sites updated to use target-specific factories (postgresCreateNamespace, sqliteCreateNamespace, createTestSqlNamespace)
- Emitter's sql-namespace kind fallback branch replaced with a hard throw
- Regenerate fixture .d.ts files: 'sql-namespace' → target-specific kinds ('postgres-schema', 'sqlite-namespace', 'test-sql-namespace')

Co-Authored-By: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…ment

- family-sql/test: introduce TestSqlContractSerializer (via src/core/ir/ + test-utils export)
  that overrides hydrateSqlNamespaceEntry to produce TestSqlNamespace; use it in
  namespace-hydration, cross-reference-roundtrip, and value-set-roundtrip tests
- adapter-postgres, adapter-sqlite, pgvector tests: switch from SqlContractSerializer
  (family-sql/ir) to TestSqlContractSerializer (family-sql/test-utils)
- emitter test fixture: revert createTestSqlNamespace in namespacedSqlStorage back
  to plain objects with explicit kind:'test-sql-namespace'; emitter only reads
  namespace.kind/id/entries as JSON, not class methods
- sqlite.ts runtime: switch from SqlContractSerializer to SqliteContractSerializer
  so JSON deserialization produces proper SqliteDatabase namespace instances

Co-Authored-By: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…ctSerializer

SqlContractSerializer (family-sql/ir) now throws when deserializing plain JSON
namespace objects — it requires a target-specific override. All test sites that
don't need target-specific namespace behaviour switch to TestSqlContractSerializer
from family-sql/test-utils.

Co-Authored-By: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
… integration tests

The emitter now throws when it encounters a namespace without a `kind`
property. Two tests in contract-imports.test.ts constructed inline IR
with plain namespace objects (no `kind`) before calling emit(). Add
`kind: 'schema' as const` to match what PostgresSchema carries, and
also fix a data bug where `post` table was at the wrong nesting level
(sibling of `user` instead of inside `entries.table`).

Co-Authored-By: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
The previous session removed the inline TestSqlContractSerializer class
and replaced it with an import, but dropped the `Contract` type import
from `@prisma-next/contract/types` that was used in the cast at lines
37 and 49.

Co-Authored-By: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…onfig mappings

The tsconfig paths in the contract-imports tests pointed to
dist/types.d.mts but the file lives at dist/exports/types.d.mts
(the package uses a nested exports/ directory in dist). Fix both
path mappings that reference this file.

Co-Authored-By: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…tract-imports tsconfig

Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…0.14.0)

Resolves 10 merge conflicts:
- Generated .d.ts fixtures: taken from rerere cache (regenerated in next commit)
- sql-contract-serializer-base.ts: rerere preserved this branch's throw + unboundNamespace seam; TML-2916 changes auto-merged cleanly
- contract-builder.namespaces.test.ts: rerere kept both sides (this branch's createTestSqlNamespace usage + TML-2916's __unbound__ undefined assertions)
- postgres-contract-serializer.test.ts: rerere preserved this branch's UNBOUND_NAMESPACE_ID-based probe using postgresCreateNamespace

Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
Updates examples/supabase/src/contract.{d.ts,json} to reflect the
v0.14.0 extension version bump from main; all other fixtures were
already up to date after the merge conflict resolution.

Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…lt; add defaultNamespaceId to TestSqlContractSerializer

`PostgresResult` and `SqliteResult` were changed to use `PostgresDefinition`
/ `SqliteDefinition` as the type argument to `buildBoundContract`, which
pulled in `naming?: NamingConfig` from the scaffold type. The conditional
type `DefinitionColumnNaming` then inferred `'identity' | 'snake_case'`
from the optional field's declared type, widening all column names to
include snake_case variants and breaking DSL type-inference tests.

Restore the minimal inline shape (types/models/extensionPacks/createNamespace)
that excludes `naming`, matching the pre-TML-2891 shape.

Also adds the missing `defaultNamespaceId` getter to `TestSqlContractSerializer`
(required by the abstract base after TML-2916 introduced the abstract member).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…te transaction test

createContract<SqlStorage>({ target: 'sqlite' }) without a storage
override produces DEFAULT_FRAMEWORK_STORAGE = { namespaces: {} }, so
sqlBuilder's proxy returns undefined for __unbound__ and tx.sql is
undefined. The ORM builder reads from contract.domain.namespaces
(always populated by createContract), which is why tx.orm was defined
while tx.sql was not.

Replace the createContract call with an explicit Contract<SqlStorage>
that carries a real __unbound__ SqlStorage namespace via
createTestSqlNamespace, matching the pattern already used in
supabase-runtime.test.ts.

Co-Authored-By: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…emplate

Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…erializedSqlNamespace guard

All four instanceof NamespaceBase checks in the serializer pipeline —
sql-contract-serializer-base (two sites), SqliteContractSerializer, and
PostgresContractSerializer — used class identity, which fails in the built
dist when @prisma-next/target-sqlite and @prisma-next/family-sql each
carry a separate copy of @prisma-next/framework-components.

Replace with isMaterializedSqlNamespace(x), a structural guard that
checks typeof x?.qualifyTable === 'function'. Every SqlNamespace
subclass (PostgresSchema, SqliteDatabase, TestSqlNamespace) implements
qualifyTable; raw SqlNamespaceInput ({id, entries}) does not. The guard
is purely structural so it is realm-safe.

Also fix the sqlite transaction e2e test: it was importing SqlContractSerializer
from @prisma-next/family-sql/ir (the base, with no hydrateSqlNamespaceEntry
override), which cannot deserialize namespace entries from raw JSON. Switch
to TestSqlContractSerializer from @prisma-next/family-sql/test-utils,
matching every other sqlite e2e test.

Co-Authored-By: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…s SqlNamespace, fix transaction test

FIX 1: Delete dead `protected abstract get defaultNamespaceId()` from
SqlContractSerializerBase and all overrides in SqlContractSerializer,
TestSqlContractSerializer, PostgresContractSerializer, and
SqliteContractSerializer. No call site read `this.defaultNamespaceId`
anywhere in the codebase.

FIX 2: Narrow `createNamespace` return type from `Namespace` to
`SqlNamespace` across all authoring seams: ContractDefinition,
ContractInput, BoundDefinitionInput, emptyContract, PrismaContractOptions,
PslInterpreterInput, and the two extension defineContract wrappers
(Postgres and SQLite). Remove the two now-unnecessary blindCasts in
build-contract.ts that existed only because the return type was too wide.

FIX 3: Rewrite the stale validators.ts comment that referenced a
`__unbound__` brand and `hydrateSqlStorage` injection path — neither
exists; the unbound slot is injected by ensureUnboundNamespaceSlot in
build-contract.ts.

FIX 4: Switch @prisma-next/sqlite transaction.test.ts `__unbound__` slot
from createTestSqlNamespace (Postgres-style quoting) to
sqliteCreateNamespace (the real SQLite concretion).

NIT 1: Replace `'kind' in result` guard in TestSqlContractSerializer with
the canonical isMaterializedSqlNamespace check.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
@wmadden-electric wmadden-electric requested a review from a team as a code owner June 22, 2026 16:14
@coderabbitai

coderabbitai Bot commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 310 files, which is 160 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

Run ID: 349d2861-7235-49a8-9e36-c8f0ba86e483

📥 Commits

Reviewing files that changed from the base of the PR and between 29e65f0 and c38f33d.

⛔ Files ignored due to path filters (3)
  • examples/bundle-size/src/mongo/generated/contract.d.ts is excluded by !**/generated/**
  • test/integration/test/mongo/fixtures/generated/contract.d.ts is excluded by !**/generated/**
  • test/integration/test/namespaced-accessors/fixtures/generated/contract.d.ts is excluded by !**/generated/**
📒 Files selected for processing (310)
  • apps/telemetry-backend/migrations/app/20260520T1317_migration/end-contract.d.ts
  • apps/telemetry-backend/migrations/app/20260601T1236_contract_hash_advance/end-contract.d.ts
  • apps/telemetry-backend/migrations/app/20260601T1347_contract_hash_advance/end-contract.d.ts
  • apps/telemetry-backend/migrations/app/20260601T1347_contract_hash_advance/start-contract.d.ts
  • examples/mongo-blog-leaderboard/src/contract.d.ts
  • examples/mongo-demo/migrations/app/20260409T1030_migration/end-contract.d.ts
  • examples/mongo-demo/migrations/app/20260415_add-posts-author-index/end-contract.d.ts
  • examples/mongo-demo/migrations/app/20260415_add-posts-author-index/start-contract.d.ts
  • examples/mongo-demo/src/contract.d.ts
  • examples/prisma-next-demo/fixtures/converging-branches/migrations/app/20260301T1000_init/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/converging-branches/migrations/app/20260302T1000_add_phone/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/converging-branches/migrations/app/20260302T1100_add_posts/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/converging-branches/migrations/app/20260302T1200_add_avatar/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/converging-branches/migrations/app/20260303T1000_merge_phone/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/converging-branches/migrations/app/20260303T1100_merge_posts/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/converging-branches/migrations/app/20260303T1200_merge_avatar/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/diamond/migrations/app/20260301T1000_init/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/diamond/migrations/app/20260302T1000_alice_add_phone/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/diamond/migrations/app/20260302T1100_bob_add_avatar/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/diamond/migrations/app/20260303T1000_merge_alice/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/diamond/migrations/app/20260303T1100_merge_bob/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/long-spine/migrations/app/20260301T1000_init/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/long-spine/migrations/app/20260302T1000_add_phone/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/long-spine/migrations/app/20260303T1000_add_bio/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/long-spine/migrations/app/20260304T1000_add_posts/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/long-spine/migrations/app/20260305T1000_add_avatar/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/long-spine/migrations/app/20260306T1000_add_comments/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/long-spine/migrations/app/20260307T1000_add_tags/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/long-spine/migrations/app/20260307T1100_late_branch/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/long-spine/migrations/app/20260308T1000_add_everything/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/multi-branch/migrations/app/20260301T1000_init/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/multi-branch/migrations/app/20260302T1000_add_phone/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/multi-branch/migrations/app/20260302T1100_add_posts/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/multi-branch/migrations/app/20260302T1200_add_avatar/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/multi-branch/migrations/app/20260303T1000_add_bio/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/multi-branch/migrations/app/20260304T1000_parallel_a/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/multi-branch/migrations/app/20260304T1000_parallel_b/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/multi-branch/migrations/app/20260304T1000_parallel_c/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/multi-branch/migrations/app/20260304T1000_parallel_d/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/showcase/migrations/app/20260601T0719_init/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/showcase/migrations/app/20260601T0725_add_name/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/showcase/migrations/app/20260601T0725_alice_phone/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/showcase/migrations/app/20260601T0725_bob_avatar/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/showcase/migrations/app/20260601T0726_add_bio/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/showcase/migrations/app/20260601T0726_add_locale/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/showcase/migrations/app/20260601T0726_fast_forward/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/showcase/migrations/app/20260601T0726_merge_alice/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/showcase/migrations/app/20260601T0726_merge_bob/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/showcase/migrations/app/20260601T0727_hotfix/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/showcase/migrations/app/20260601T0727_rollback_alice/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/showcase/migrations/app/20260601T0727_rollback_locale/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/showcase/migrations/app/20260601T0727_rollback_users/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/showcase/migrations/app/20260601T0728_promote_bob/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/showcase/migrations/app/20260601T0730_experiment/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/showcase/migrations/app/20260601T0730_revert_experiment/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/showcase/migrations/app/20260602T1624_rollback_to_users_from_tip/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/showcase/migrations/app/20260602T1626_rollback_to_users_from_bio/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/skip-rollback/migrations/app/20260301T1000_init/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/skip-rollback/migrations/app/20260302T1000_add_phone/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/skip-rollback/migrations/app/20260303T1000_add_bio/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/skip-rollback/migrations/app/20260304T1000_add_posts/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/skip-rollback/migrations/app/20260305T1000_rollback_to_phone/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/skip-rollback/migrations/app/20260306T1000_rollback_to_init/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/wide-fan/migrations/app/20260301T1000_init/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/wide-fan/migrations/app/20260302T1000_add_phone/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/wide-fan/migrations/app/20260302T1100_add_posts/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/wide-fan/migrations/app/20260302T1200_add_avatar/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/wide-fan/migrations/app/20260302T1300_add_category/end-contract.d.ts
  • examples/prisma-next-demo/fixtures/wide-fan/migrations/app/20260302T1400_add_settings/end-contract.d.ts
  • examples/retail-store/migrations/app/20260513T0505_initial/end-contract.d.ts
  • examples/retail-store/migrations/app/20260513T0507_add_product_category_index/end-contract.d.ts
  • examples/retail-store/migrations/app/20260513T0507_add_product_category_index/start-contract.d.ts
  • examples/retail-store/migrations/app/20260513T0508_backfill_product_status/end-contract.d.ts
  • examples/retail-store/migrations/app/20260513T0508_backfill_product_status/start-contract.d.ts
  • examples/retail-store/src/contract.d.ts
  • examples/supabase/prisma-next.config.ts
  • packages/1-framework/3-tooling/cli/src/control-api/client.ts
  • packages/1-framework/3-tooling/cli/src/control-api/operations/contract-emit.ts
  • packages/1-framework/3-tooling/cli/test/fixtures/custom-allowlist.ts
  • packages/1-framework/3-tooling/cli/test/fixtures/disallowed-import.ts
  • packages/1-framework/3-tooling/cli/test/fixtures/exact-prefix-import.ts
  • packages/1-framework/3-tooling/cli/test/fixtures/valid-contract-default.ts
  • packages/1-framework/3-tooling/cli/test/fixtures/valid-contract.ts
  • packages/1-framework/3-tooling/cli/tsconfig.test.json
  • packages/2-sql/1-core/contract/src/exports/types.ts
  • packages/2-sql/1-core/contract/src/ir/build-sql-namespace.ts
  • packages/2-sql/1-core/contract/src/ir/sql-storage.ts
  • packages/2-sql/1-core/contract/src/ir/sql-unbound-namespace.ts
  • packages/2-sql/1-core/contract/src/ir/storage-table.ts
  • packages/2-sql/1-core/contract/src/ir/storage-value-set.ts
  • packages/2-sql/1-core/contract/src/types.ts
  • packages/2-sql/1-core/contract/src/validators.ts
  • packages/2-sql/1-core/contract/test/build-sql-namespace-map.test.ts
  • packages/2-sql/1-core/contract/test/element-coordinates.test.ts
  • packages/2-sql/1-core/contract/test/resolve-storage-table.test.ts
  • packages/2-sql/1-core/contract/test/sql-namespace-entries.test.ts
  • packages/2-sql/1-core/contract/test/sql-storage.test.ts
  • packages/2-sql/1-core/contract/test/sql-storage.types.test-d.ts
  • packages/2-sql/1-core/contract/test/storage-column-many.test.ts
  • packages/2-sql/1-core/contract/test/storage-value-set.test.ts
  • packages/2-sql/1-core/contract/test/test-support.ts
  • packages/2-sql/2-authoring/contract-psl/src/interpreter.ts
  • packages/2-sql/2-authoring/contract-psl/src/provider.ts
  • packages/2-sql/2-authoring/contract-psl/test/composed-mutation-defaults.test.ts
  • packages/2-sql/2-authoring/contract-psl/test/fixtures.ts
  • packages/2-sql/2-authoring/contract-psl/test/interpreter.control-policy.test.ts
  • packages/2-sql/2-authoring/contract-psl/test/interpreter.defaults.test.ts
  • packages/2-sql/2-authoring/contract-psl/test/interpreter.diagnostics.test.ts
  • packages/2-sql/2-authoring/contract-psl/test/interpreter.enum.test.ts
  • packages/2-sql/2-authoring/contract-psl/test/interpreter.extensions.test.ts
  • packages/2-sql/2-authoring/contract-psl/test/interpreter.namespaces.test.ts
  • packages/2-sql/2-authoring/contract-psl/test/interpreter.polymorphism.test.ts
  • packages/2-sql/2-authoring/contract-psl/test/interpreter.relations.many-to-many.test.ts
  • packages/2-sql/2-authoring/contract-psl/test/interpreter.relations.test.ts
  • packages/2-sql/2-authoring/contract-psl/test/interpreter.test.ts
  • packages/2-sql/2-authoring/contract-psl/test/interpreter.types.test.ts
  • packages/2-sql/2-authoring/contract-psl/test/interpreter.value-objects.test.ts
  • packages/2-sql/2-authoring/contract-psl/test/provider.test.ts
  • packages/2-sql/2-authoring/contract-psl/test/psl-ts-namespace-parity.test.ts
  • packages/2-sql/2-authoring/contract-psl/test/ts-psl-parity.test.ts
  • packages/2-sql/2-authoring/contract-psl/tsconfig.json
  • packages/2-sql/2-authoring/contract-ts/src/build-contract.ts
  • packages/2-sql/2-authoring/contract-ts/src/config-types.ts
  • packages/2-sql/2-authoring/contract-ts/src/contract-builder.ts
  • packages/2-sql/2-authoring/contract-ts/src/contract-definition.ts
  • packages/2-sql/2-authoring/contract-ts/src/contract-dsl.ts
  • packages/2-sql/2-authoring/contract-ts/src/contract-lowering.ts
  • packages/2-sql/2-authoring/contract-ts/test/authoring-uuid-native-presets.test.ts
  • packages/2-sql/2-authoring/contract-ts/test/capability-defaults.test.ts
  • packages/2-sql/2-authoring/contract-ts/test/check-constraint.authoring.test.ts
  • packages/2-sql/2-authoring/contract-ts/test/config-types.test.ts
  • packages/2-sql/2-authoring/contract-ts/test/contract-builder.constraints.test.ts
  • packages/2-sql/2-authoring/contract-ts/test/contract-builder.contract-definition.test.ts
  • packages/2-sql/2-authoring/contract-ts/test/contract-builder.control-policy.test.ts
  • packages/2-sql/2-authoring/contract-ts/test/contract-builder.cross-namespace-same-table.test.ts
  • packages/2-sql/2-authoring/contract-ts/test/contract-builder.dsl.helpers.test.ts
  • packages/2-sql/2-authoring/contract-ts/test/contract-builder.dsl.portability.test.ts
  • packages/2-sql/2-authoring/contract-ts/test/contract-builder.dsl.test.ts
  • packages/2-sql/2-authoring/contract-ts/test/contract-builder.dsl.types.test.ts
  • packages/2-sql/2-authoring/contract-ts/test/contract-builder.entrypoint.test.ts
  • packages/2-sql/2-authoring/contract-ts/test/contract-builder.namespaces.test.ts
  • packages/2-sql/2-authoring/contract-ts/test/contract-builder.normalization.test.ts
  • packages/2-sql/2-authoring/contract-ts/test/contract-builder.per-model-namespace.test.ts
  • packages/2-sql/2-authoring/contract-ts/test/contract-builder.value-objects.test.ts
  • packages/2-sql/2-authoring/contract-ts/test/contract-lowering.runtime.test.ts
  • packages/2-sql/2-authoring/contract-ts/test/contract-parity.test.ts
  • packages/2-sql/2-authoring/contract-ts/test/cross-space-fk.test.ts
  • packages/2-sql/2-authoring/contract-ts/test/cross-space-relation.test.ts
  • packages/2-sql/2-authoring/contract-ts/test/entities-namespace.exemplar.test.ts
  • packages/2-sql/2-authoring/contract-ts/test/enum-type.authoring.test.ts
  • packages/2-sql/2-authoring/contract-ts/test/enum-type.codec-encoding.test.ts
  • packages/2-sql/2-authoring/contract-ts/test/enum-type.factory-form.test.ts
  • packages/2-sql/2-authoring/contract-ts/test/enum-type.field-output.test.ts
  • packages/2-sql/2-authoring/contract-ts/tsconfig.json
  • packages/2-sql/3-tooling/emitter/src/index.ts
  • packages/2-sql/3-tooling/emitter/test/sql-storage-fixture.ts
  • packages/2-sql/4-lanes/query-builder/test/enum-type.field-output.test-d.ts
  • packages/2-sql/4-lanes/relational-core/test/codec-descriptor-registry.test.ts
  • packages/2-sql/4-lanes/relational-core/test/codec-ref-for-column.test.ts
  • packages/2-sql/4-lanes/relational-core/tsconfig.json
  • packages/2-sql/4-lanes/sql-builder/test/enum-type.field-output.test-d.ts
  • packages/2-sql/4-lanes/sql-builder/test/runtime/field-proxy.test.ts
  • packages/2-sql/4-lanes/sql-builder/tsconfig.json
  • packages/2-sql/5-runtime/test/codec-integrity.test.ts
  • packages/2-sql/5-runtime/test/codec-mapping-validation.test.ts
  • packages/2-sql/5-runtime/test/context.types.test-d.ts
  • packages/2-sql/5-runtime/test/contract-codec-registry.test.ts
  • packages/2-sql/5-runtime/test/intercept-decoding.test.ts
  • packages/2-sql/5-runtime/test/marker-verification.test.ts
  • packages/2-sql/5-runtime/test/marker-vs-intercept-ordering.test.ts
  • packages/2-sql/5-runtime/test/mutation-default-generators.test.ts
  • packages/2-sql/5-runtime/test/parameterized-types.test.ts
  • packages/2-sql/5-runtime/test/raw-connection-seam.test.ts
  • packages/2-sql/5-runtime/test/runtime-ctx-passthrough.test.ts
  • packages/2-sql/5-runtime/test/same-bare-table-name.test.ts
  • packages/2-sql/5-runtime/test/scope-plumbing.test.ts
  • packages/2-sql/5-runtime/test/sql-context.codec-context.test.ts
  • packages/2-sql/5-runtime/test/sql-context.test.ts
  • packages/2-sql/5-runtime/test/sql-family-adapter.test.ts
  • packages/2-sql/5-runtime/test/sql-runtime-abort.test.ts
  • packages/2-sql/5-runtime/test/sql-runtime.test.ts
  • packages/2-sql/5-runtime/test/utils.ts
  • packages/2-sql/5-runtime/tsconfig.json
  • packages/2-sql/9-family/package.json
  • packages/2-sql/9-family/src/core/control-instance.ts
  • packages/2-sql/9-family/src/core/ir/sql-contract-serializer-base.ts
  • packages/2-sql/9-family/src/core/ir/sql-contract-serializer.ts
  • packages/2-sql/9-family/src/core/migrations/contract-to-schema-ir.ts
  • packages/2-sql/9-family/src/core/migrations/field-event-planner.ts
  • packages/2-sql/9-family/src/core/schema-verify/verify-sql-schema.ts
  • packages/2-sql/9-family/src/exports/test-utils.ts
  • packages/2-sql/9-family/test/contract-to-schema-ir.test.ts
  • packages/2-sql/9-family/test/control-instance.descriptor-self-consistency.test.ts
  • packages/2-sql/9-family/test/control-policy.test.ts
  • packages/2-sql/9-family/test/cross-contract-validation.test.ts
  • packages/2-sql/9-family/test/cross-reference-roundtrip.test.ts
  • packages/2-sql/9-family/test/field-event-planner.test.ts
  • packages/2-sql/9-family/test/namespace-hydration.test.ts
  • packages/2-sql/9-family/test/schema-verify.check-constraints.test.ts
  • packages/2-sql/9-family/test/schema-verify.helpers.ts
  • packages/2-sql/9-family/test/test-sql-contract-serializer.ts
  • packages/2-sql/9-family/test/value-set-roundtrip.test.ts
  • packages/2-sql/9-family/tsconfig.json
  • packages/2-sql/9-family/tsdown.config.ts
  • packages/3-extensions/paradedb/migrations/20260601T0000_install_pg_search_extension/end-contract.d.ts
  • packages/3-extensions/paradedb/prisma-next.config.ts
  • packages/3-extensions/paradedb/src/contract.d.ts
  • packages/3-extensions/pgvector/test/control-adapter-lower-parity.test.ts
  • packages/3-extensions/pgvector/test/migrations/planner.behavior.test.ts
  • packages/3-extensions/pgvector/test/migrations/planner.contract-to-schema-ir.test.ts
  • packages/3-extensions/pgvector/test/migrations/planner.storage-types.test.ts
  • packages/3-extensions/pgvector/test/operation-lowering.test.ts
  • packages/3-extensions/pgvector/test/rich-adapter.test.ts
  • packages/3-extensions/pgvector/test/sql-renderer.cast-policy.test.ts
  • packages/3-extensions/pgvector/tsconfig.json
  • packages/3-extensions/postgres/src/contract/define-contract.ts
  • packages/3-extensions/postgres/src/runtime/postgres-serverless.ts
  • packages/3-extensions/postgres/src/runtime/postgres.ts
  • packages/3-extensions/postgres/test/config/define-config.test.ts
  • packages/3-extensions/postgres/test/fixtures/namespaced-contract.ts
  • packages/3-extensions/sql-orm-client/test/contract-builder.ts
  • packages/3-extensions/sql-orm-client/test/create-input.test-d.ts
  • packages/3-extensions/sql-orm-client/test/enum-type.field-output.test-d.ts
  • packages/3-extensions/sql-orm-client/test/generated-contract-types.test-d.ts
  • packages/3-extensions/sql-orm-client/test/storage-resolution.test.ts
  • packages/3-extensions/sql-orm-client/test/unbound-tables.ts
  • packages/3-extensions/sqlite/src/contract/define-contract.ts
  • packages/3-extensions/sqlite/src/runtime/sqlite.ts
  • packages/3-extensions/sqlite/test/config/define-config.test.ts
  • packages/3-extensions/sqlite/test/fixtures/namespaced-contract.ts
  • packages/3-extensions/sqlite/test/transaction.test.ts
  • packages/3-extensions/supabase/prisma-next.config.ts
  • packages/3-extensions/supabase/src/runtime/supabase.ts
  • packages/3-extensions/supabase/test/classification.e2e.test.ts
  • packages/3-extensions/supabase/test/contract-handles.test.ts
  • packages/3-extensions/supabase/test/supabase-runtime.test.ts
  • packages/3-extensions/supabase/tsconfig.json
  • packages/3-targets/3-targets/postgres/src/core/postgres-contract-serializer.ts
  • packages/3-targets/3-targets/postgres/src/core/postgres-schema.ts
  • packages/3-targets/3-targets/postgres/test/migrations/planner.check-constraints.test.ts
  • packages/3-targets/3-targets/postgres/test/postgres-contract-serializer.test.ts
  • packages/3-targets/3-targets/sqlite/src/core/sqlite-contract-serializer.ts
  • packages/3-targets/3-targets/sqlite/src/core/sqlite-unbound-database.ts
  • packages/3-targets/3-targets/sqlite/test/migrations/issue-planner.test.ts
  • packages/3-targets/3-targets/sqlite/test/migrations/nullability-backfill.test.ts
  • packages/3-targets/3-targets/sqlite/test/migrations/planner-strategies.test.ts
  • packages/3-targets/3-targets/sqlite/test/migrations/planner.authoring-surface.test.ts
  • packages/3-targets/6-adapters/postgres/test/adapter-joins.test.ts
  • packages/3-targets/6-adapters/postgres/test/adapter.test.ts
  • packages/3-targets/6-adapters/postgres/test/control-adapter-lower-parity.test.ts
  • packages/3-targets/6-adapters/postgres/test/lower-to-execute-request.test.ts
  • packages/3-targets/6-adapters/postgres/test/migrations/cross-namespace-fk.integration.test.ts
  • packages/3-targets/6-adapters/postgres/test/migrations/db-init-update.cli.integration.test.ts
  • packages/3-targets/6-adapters/postgres/test/migrations/enum-check-constraint.integration.test.ts
  • packages/3-targets/6-adapters/postgres/test/migrations/fixtures/runner-fixtures.ts
  • packages/3-targets/6-adapters/postgres/test/migrations/native-array-columns.integration.test.ts
  • packages/3-targets/6-adapters/postgres/test/migrations/order-by-enum.integration.test.ts
  • packages/3-targets/6-adapters/postgres/test/migrations/planner.authoring-surface.test.ts
  • packages/3-targets/6-adapters/postgres/test/migrations/planner.codec-field-event.test.ts
  • packages/3-targets/6-adapters/postgres/test/migrations/planner.cross-space-fk-ddl.test.ts
  • packages/3-targets/6-adapters/postgres/test/migrations/planner.fk-config.test.ts
  • packages/3-targets/6-adapters/postgres/test/migrations/planner.reconciliation.integration.test.ts
  • packages/3-targets/6-adapters/postgres/test/migrations/planner.reconciliation.test.ts
  • packages/3-targets/6-adapters/postgres/test/migrations/planner.referential-actions.test.ts
  • packages/3-targets/6-adapters/postgres/test/migrations/planner.semantic-satisfaction.test.ts
  • packages/3-targets/6-adapters/postgres/test/migrations/planner.uuid.integration.test.ts
  • packages/3-targets/6-adapters/postgres/test/migrations/runner.across-spaces.integration.test.ts
  • packages/3-targets/6-adapters/postgres/test/migrations/runner.unbound-namespace.integration.test.ts
  • packages/3-targets/6-adapters/postgres/test/migrations/schema-verify.after-runner.integration.test.ts
  • packages/3-targets/6-adapters/postgres/test/raw-expr-lowering.test.ts
  • packages/3-targets/6-adapters/postgres/test/scalar-list-codec-roundtrip.integration.test.ts
  • packages/3-targets/6-adapters/postgres/test/sql-renderer.cast-policy.test.ts
  • packages/3-targets/6-adapters/postgres/test/test-utils.ts
  • packages/3-targets/6-adapters/postgres/tsconfig.json
  • packages/3-targets/6-adapters/sqlite/test/adapter.test.ts
  • packages/3-targets/6-adapters/sqlite/test/lower-to-execute-request.test.ts
  • packages/3-targets/6-adapters/sqlite/test/migrations/db-init-update.cli.test.ts
  • packages/3-targets/6-adapters/sqlite/test/migrations/fixtures/runner-fixtures.ts
  • packages/3-targets/6-adapters/sqlite/test/migrations/planner-introspection.integration.test.ts
  • packages/3-targets/6-adapters/sqlite/test/migrations/planner.codec-field-event.test.ts
  • packages/3-targets/6-adapters/sqlite/test/migrations/planner.test.ts
  • packages/3-targets/6-adapters/sqlite/test/migrations/runner.across-spaces.test.ts
  • packages/3-targets/6-adapters/sqlite/test/raw-expr-lowering.test.ts
  • packages/3-targets/6-adapters/sqlite/tsconfig.json
  • skills/extension-author/prisma-next-extension-upgrade/upgrades/0.14-to-0.15/instructions.md
  • skills/upgrade/prisma-next-upgrade/upgrades/0.14-to-0.15/instructions.md
  • test/e2e/framework/test/sqlite/migrations/harness.ts
  • test/e2e/framework/test/sqlite/raw-sql.test.ts
  • test/e2e/framework/test/sqlite/runtime.verify-marker.missing-table.test.ts
  • test/e2e/framework/test/sqlite/transaction.test.ts
  • test/e2e/framework/test/sqlite/utils.ts
  • test/e2e/framework/test/utils.ts
  • test/integration/test/authoring/cli.emit-parity-fixtures.test.ts
  • test/integration/test/authoring/psl-index-type-options.integration.test.ts
  • test/integration/test/authoring/side-by-side-contracts.test.ts
  • test/integration/test/cli.db-verify.e2e.test.ts
  • test/integration/test/cli.emit-cli-process.e2e.test.ts
  • test/integration/test/cli.emit.test.ts
  • test/integration/test/cli.migration-plan-ref-aware.e2e.test.ts
  • test/integration/test/contract-builder.test.ts
  • test/integration/test/contract-builder.types.test-d.ts
  • test/integration/test/contract-imports.test.ts
  • test/integration/test/contract-space-fixture/contract.ts
  • test/integration/test/dsl-type-inference.test-d.ts
  • test/integration/test/emitter.adapter-query-operation-types.test.ts
  • test/integration/test/extension-pgvector-scenario-a.e2e.integration.test.ts
  • test/integration/test/namespaced-accessors/fixtures/contract.ts
  • test/integration/test/pgvector.test.ts
  • test/integration/test/value-objects/value-objects.e2e.test.ts
  • test/integration/test/value-objects/value-objects.integration.test.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch tml-2891-eliminate-the-sql-family-placeholder-namespace-concretion

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Resolves 6 conflicts keeping both TML-2891 changes (no placeholder
namespace, createNamespace required) and TML-2794 M:N additions:

- validators.ts: take our pure structural validateStorage; add main's
  StorageColumn for validateRelationThroughConsistency; drop
  SqlUnboundNamespace and SqlStorageInput (not needed on this branch).
- interpreter.ts: take main's new CST/symbol-table imports; keep our
  SqlNamespaceInput/SqlNamespace types (SqlNamespaceTablesInput deleted);
  drop unused Namespace import.
- provider.ts: take main's buildSymbolTable/parse/rangeToPslSpan imports;
  keep our SqlNamespace/SqlNamespaceInput types; drop unused Namespace.
- fixtures.ts: take main's SymbolTable/buildSymbolTable/parse imports;
  keep our createTestSqlNamespace/SqlNamespace/SqlNamespaceInput; drop
  buildSqlNamespace (deleted) and unused Namespace import.
- composed-mutation-defaults.test.ts: import both createTestNamespace
  (our branch, used for createNamespace factory) and
  symbolTableInputFromParseArgs (main, used for parse input).
- ts-psl-parity.test.ts: import both createTestNamespace and
  symbolTableInputFromParseArgs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Will Madden <madden@prisma.io>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
@pkg-pr-new

pkg-pr-new Bot commented Jun 22, 2026

Copy link
Copy Markdown

Open in StackBlitz

@prisma-next/extension-author-tools

npm i https://pkg.pr.new/@prisma-next/extension-author-tools@864

@prisma-next/mongo-runtime

npm i https://pkg.pr.new/@prisma-next/mongo-runtime@864

@prisma-next/family-mongo

npm i https://pkg.pr.new/@prisma-next/family-mongo@864

@prisma-next/sql-runtime

npm i https://pkg.pr.new/@prisma-next/sql-runtime@864

@prisma-next/family-sql

npm i https://pkg.pr.new/@prisma-next/family-sql@864

@prisma-next/extension-arktype-json

npm i https://pkg.pr.new/@prisma-next/extension-arktype-json@864

@prisma-next/middleware-cache

npm i https://pkg.pr.new/@prisma-next/middleware-cache@864

@prisma-next/mongo

npm i https://pkg.pr.new/@prisma-next/mongo@864

@prisma-next/extension-paradedb

npm i https://pkg.pr.new/@prisma-next/extension-paradedb@864

@prisma-next/extension-pgvector

npm i https://pkg.pr.new/@prisma-next/extension-pgvector@864

@prisma-next/extension-postgis

npm i https://pkg.pr.new/@prisma-next/extension-postgis@864

@prisma-next/postgres

npm i https://pkg.pr.new/@prisma-next/postgres@864

@prisma-next/sql-orm-client

npm i https://pkg.pr.new/@prisma-next/sql-orm-client@864

@prisma-next/sqlite

npm i https://pkg.pr.new/@prisma-next/sqlite@864

@prisma-next/extension-supabase

npm i https://pkg.pr.new/@prisma-next/extension-supabase@864

@prisma-next/target-mongo

npm i https://pkg.pr.new/@prisma-next/target-mongo@864

@prisma-next/adapter-mongo

npm i https://pkg.pr.new/@prisma-next/adapter-mongo@864

@prisma-next/driver-mongo

npm i https://pkg.pr.new/@prisma-next/driver-mongo@864

@prisma-next/contract

npm i https://pkg.pr.new/@prisma-next/contract@864

@prisma-next/utils

npm i https://pkg.pr.new/@prisma-next/utils@864

@prisma-next/config

npm i https://pkg.pr.new/@prisma-next/config@864

@prisma-next/errors

npm i https://pkg.pr.new/@prisma-next/errors@864

@prisma-next/framework-components

npm i https://pkg.pr.new/@prisma-next/framework-components@864

@prisma-next/operations

npm i https://pkg.pr.new/@prisma-next/operations@864

@prisma-next/ts-render

npm i https://pkg.pr.new/@prisma-next/ts-render@864

@prisma-next/contract-authoring

npm i https://pkg.pr.new/@prisma-next/contract-authoring@864

@prisma-next/ids

npm i https://pkg.pr.new/@prisma-next/ids@864

@prisma-next/psl-parser

npm i https://pkg.pr.new/@prisma-next/psl-parser@864

@prisma-next/psl-printer

npm i https://pkg.pr.new/@prisma-next/psl-printer@864

@prisma-next/cli

npm i https://pkg.pr.new/@prisma-next/cli@864

@prisma-next/cli-telemetry

npm i https://pkg.pr.new/@prisma-next/cli-telemetry@864

@prisma-next/config-loader

npm i https://pkg.pr.new/@prisma-next/config-loader@864

@prisma-next/emitter

npm i https://pkg.pr.new/@prisma-next/emitter@864

@prisma-next/language-server

npm i https://pkg.pr.new/@prisma-next/language-server@864

@prisma-next/migration-tools

npm i https://pkg.pr.new/@prisma-next/migration-tools@864

prisma-next

npm i https://pkg.pr.new/prisma-next@864

@prisma-next/vite-plugin-contract-emit

npm i https://pkg.pr.new/@prisma-next/vite-plugin-contract-emit@864

@prisma-next/mongo-codec

npm i https://pkg.pr.new/@prisma-next/mongo-codec@864

@prisma-next/mongo-contract

npm i https://pkg.pr.new/@prisma-next/mongo-contract@864

@prisma-next/mongo-value

npm i https://pkg.pr.new/@prisma-next/mongo-value@864

@prisma-next/mongo-contract-psl

npm i https://pkg.pr.new/@prisma-next/mongo-contract-psl@864

@prisma-next/mongo-contract-ts

npm i https://pkg.pr.new/@prisma-next/mongo-contract-ts@864

@prisma-next/mongo-emitter

npm i https://pkg.pr.new/@prisma-next/mongo-emitter@864

@prisma-next/mongo-schema-ir

npm i https://pkg.pr.new/@prisma-next/mongo-schema-ir@864

@prisma-next/mongo-query-ast

npm i https://pkg.pr.new/@prisma-next/mongo-query-ast@864

@prisma-next/mongo-orm

npm i https://pkg.pr.new/@prisma-next/mongo-orm@864

@prisma-next/mongo-query-builder

npm i https://pkg.pr.new/@prisma-next/mongo-query-builder@864

@prisma-next/mongo-lowering

npm i https://pkg.pr.new/@prisma-next/mongo-lowering@864

@prisma-next/mongo-wire

npm i https://pkg.pr.new/@prisma-next/mongo-wire@864

@prisma-next/sql-contract

npm i https://pkg.pr.new/@prisma-next/sql-contract@864

@prisma-next/sql-errors

npm i https://pkg.pr.new/@prisma-next/sql-errors@864

@prisma-next/sql-operations

npm i https://pkg.pr.new/@prisma-next/sql-operations@864

@prisma-next/sql-schema-ir

npm i https://pkg.pr.new/@prisma-next/sql-schema-ir@864

@prisma-next/sql-contract-psl

npm i https://pkg.pr.new/@prisma-next/sql-contract-psl@864

@prisma-next/sql-contract-ts

npm i https://pkg.pr.new/@prisma-next/sql-contract-ts@864

@prisma-next/sql-contract-emitter

npm i https://pkg.pr.new/@prisma-next/sql-contract-emitter@864

@prisma-next/sql-lane-query-builder

npm i https://pkg.pr.new/@prisma-next/sql-lane-query-builder@864

@prisma-next/sql-relational-core

npm i https://pkg.pr.new/@prisma-next/sql-relational-core@864

@prisma-next/sql-builder

npm i https://pkg.pr.new/@prisma-next/sql-builder@864

@prisma-next/target-postgres

npm i https://pkg.pr.new/@prisma-next/target-postgres@864

@prisma-next/target-sqlite

npm i https://pkg.pr.new/@prisma-next/target-sqlite@864

@prisma-next/adapter-postgres

npm i https://pkg.pr.new/@prisma-next/adapter-postgres@864

@prisma-next/adapter-sqlite

npm i https://pkg.pr.new/@prisma-next/adapter-sqlite@864

@prisma-next/driver-postgres

npm i https://pkg.pr.new/@prisma-next/driver-postgres@864

@prisma-next/driver-sqlite

npm i https://pkg.pr.new/@prisma-next/driver-sqlite@864

commit: c38f33d

@github-actions

github-actions Bot commented Jun 22, 2026

Copy link
Copy Markdown

size-limit report 📦

Path Size
postgres / no-emit 159 KB (-0.27% 🔽)
postgres / emit 126.66 KB (-13.83% 🔽)
mongo / no-emit 78 KB (0%)
mongo / emit 72.09 KB (0%)
cf-worker / no-emit 186.44 KB (-0.25% 🔽)
cf-worker / emit 150.55 KB (-12.92% 🔽)

wmadden-electric and others added 2 commits June 22, 2026 18:36
validateRelationThroughConsistency (added by TML-2794 on main) uses
ifDefined but the import was absent after merge conflict resolution.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Will Madden <madden@prisma.io>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…-2928

TML-2891 made createNamespace required on ContractDefinition and
InterpretPslDocumentToSqlContractInput. Several tests added on main
after TML-2891 branched did not include createNamespace:

- interpreter.relations.many-to-many.test.ts (TML-2794): add
  createTestNamespace to baseInput
- config-types.test.ts (TML-2928): add createTestSqlNamespace to
  emptyContract() calls in the source format discriminator describe block
- contract-builder.cross-namespace-same-table.test.ts (TML-2928): add
  createTestSqlNamespace to the SQLite buildSqlContractFromDefinition call
- sql-orm-client test/contract-builder.ts: omit createNamespace from
  PostgresBaseScaffold (the defineContract factory always injects
  postgresCreateNamespace at runtime); add createNamespace to the
  PostgresResult type argument so buildBoundContract sees a valid
  BoundDefinitionInput and junction relation types resolve correctly

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…nt:casts ratchet

Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
… (in-operator, not isPlainRecord)

Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…teNamespace/type changes; app incidental)

Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
Comment thread packages/2-sql/1-core/contract/src/ir/sql-storage.ts Outdated
Comment thread packages/2-sql/1-core/contract/package.json
Comment thread packages/2-sql/1-core/contract/tsdown.config.ts Outdated
Comment thread packages/2-sql/2-authoring/contract-psl/test/fixtures.ts Outdated
Comment thread packages/2-sql/9-family/src/core/ir/sql-contract-serializer-base.ts
Comment thread packages/2-sql/9-family/src/exports/test-utils.ts Outdated
Comment thread test/integration/test/contract-imports.test.ts Outdated
wmadden-electric and others added 15 commits June 23, 2026 14:30
…ches

Removes the `if (isMaterializedSqlNamespace(raw)) return raw` guard in
the postgres and sqlite contract serializer overrides, and the
`if (isMaterializedSqlNamespace(result)) return result` check in
TestSqlContractSerializer. The base class already handles the materialized
case; the overrides can safely assume super returns a SqlNamespaceInput and
proceed directly to building the target concretion.

The base class pass-through (`hydrateSqlNamespaceEntry` in
`sql-contract-serializer-base.ts`) is retained — the emit path feeds
pre-hydrated Namespace instances through this method and the guard is live.
The postcondition in `hydrateSqlNamespaceMap` is also retained.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
Route enrichedIR through contractSerializer.serializeContract before
passing to familyInstance.deserializeContract, so deserializeContract
only ever receives raw JSON.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…ceives raw JSON or live-instance round-trips via JSON

Remove `isMaterializedSqlNamespace(raw) return raw` from `hydrateSqlNamespaceEntry`.
The pass-through was a workaround for callers that passed live `Contract<SqlStorage>`
class instances into `deserializeContract` instead of raw JSON.

This commit eliminates those callers:

- `contract-emit.ts` (PSL path): serialize before deserialize
- `sqlite.ts` `resolveContract`: branch on `contractJson` vs `contract` option
- `control-instance.ts` `deserializeWithTargetSerializer`: use `isPlainRecord` to
  detect live instances and serialize first when `targetSerializer` is present
- Integration tests (`cli.emit-parity-fixtures`, `side-by-side-contracts`): insert
  `contractSerializer.serializeContract` before `deserializeContract`

Where the public `deserializeContract` API is called with live instances directly
(e.g. runtime tests, `family.sign-database`), `hydrateSqlNamespaceEntry` now does a
`JSON.parse(JSON.stringify(raw))` round-trip on non-plain-record namespace inputs
rather than returning them unchanged. This keeps the public API usable while
ensuring every namespace goes through the same hydration path.

Also regenerates 13 mongo example/fixture `contract.d.ts` files from `mongo-namespace`
→ `mongo-database` (pre-existing kind rename, now reflected in fixtures:check).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Will Madden <madden@prisma.io>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…ialize built IR first

Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
Resolves conflicts in sql-storage.ts (imports), types.ts exports, interpreter.ts
(createNamespace call), provider.ts (imports + call), postgres-contract-serializer
(imports), test files, runner-fixtures, and upgrade instructions.

Preserves both TML-2891's SqlNamespaceInput rename (from SqlNamespaceTablesInput)
and main's new SqlAuthoringContributions / isSqlAuthoringContributions / RLS entity
kind additions.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…NamespaceShape→SqlNamespace (interface)

The abstract class takes the Base suffix per the NamespaceBase convention.
The clean name SqlNamespace now belongs to the structural interface, matching
how consumers read namespace values from SqlStorage.namespaces.

- sql-storage.ts: class SqlNamespace→SqlNamespaceBase, interface SqlNamespaceShape→SqlNamespace
- SqlStorageInput.namespaces: Record<string,SqlNamespaceBase> (construction type)
- SqlStorage.namespaces: Record<string,SqlNamespace> (structural read type)
- isMaterializedSqlNamespace: returns x is SqlNamespaceBase
- All extends/factory-return uses updated to SqlNamespaceBase
- PSL interpreter: simplified createNamespaceWithExtensions (createNamespace is now required)
- SqlNamespaceShape→SqlNamespace in per-model-namespace test

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…te all importers

- Delete `@prisma-next/sql-contract/test-support` and `@prisma-next/family-sql/test-utils` exports
- Move `TestSqlNamespace`/`createTestSqlNamespace` to `packages/2-sql/1-core/contract/test/test-support.ts`
- Move `TestSqlContractSerializer` to `packages/2-sql/9-family/test/test-sql-contract-serializer.ts`
- Update 62 test files to import via cross-package relative paths
- Widen `rootDir` in affected tsconfig files to cover the cross-package import depth
- Add vitest `resolve.alias` in `sql-contract`, `9-family`, and `contract-ts` to redirect
  `@prisma-next/sql-contract/*` imports to source so `instanceof` checks use the same class object
- Delete obsolete test "throws when ... no createNamespace factory" (now a compile-time constraint)
- Remove stale `createTestNamespace` re-export from `contract-psl/test/fixtures.ts`

Co-Authored-By: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…epoint top-level test imports

Replace the broad vitest resolve aliases (reverted to match main) with
realm-independent structural guards, matching the existing
isMaterializedSqlNamespace / isStorageTypeInstance pattern:

- Add isStorageTable / isStorageValueSet in sql-contract, exported from types
- 9-family production migration/verify code uses the guards instead of
  instanceof StorageTable / StorageValueSet (fixes cross-realm false negatives
  when a contract is built by a different copy of sql-contract)
- Convert the affected helper-built test assertions to the structural guards
- Restore typecheck-only rootDir widening (tsconfig.json, --noEmit) so test
  files that import a sibling package test helper by relative path resolve;
  this mirrors the existing sql-orm-client precedent on main and does not
  affect emitted dist (build uses tsconfig.prod.json without test/)
- Repoint top-level test/e2e and test/integration imports off the deleted
  @prisma-next/family-sql/test-utils and @prisma-next/sql-contract/test-support
  specifiers; the contract-imports synthetic file now exercises the real
  published PostgresContractSerializer

Co-Authored-By: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…e-sql-family-placeholder-namespace-concretion
…e-sql-family-placeholder-namespace-concretion
…ports typecheck

The cli test fixtures import the relocated createTestSqlNamespace helper from
packages/2-sql/1-core/contract/test/test-support by relative path. tsconfig.test.json
inherited rootDir "." from tsconfig.json, so tsc flagged the sibling-package source
as outside rootDir (TS6059). Widen the typecheck-only rootDir to packages/, matching
the existing precedent (postgres-adapter rootDir ../../.., contract-ts rootDir ../..).
Build uses tsconfig.prod.json and is unaffected.

Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…dSqlNamespace

TML-2911 (#846) merged in two new adapter-postgres tests that build a SqlStorage
namespace via buildSqlNamespace, which this branch deletes. Repoint them to the
createTestSqlNamespace helper (same SqlNamespaceInput shape, returns the
SqlNamespaceBase concretion SqlStorage.namespaces requires), matching the sibling
tests in this package.

Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…ion kind

TML-2886 (#841) and TML-2911 (#846) merged in tests that build SQL-storage
namespaces in the pre-TML-2891 kind-less form { id, entries }. This branch makes a
namespace kind required (every namespace is a target concretion). Inject
kind: test-sql-namespace for entries-form namespaces in the emitter fixture
normalizeRootSqlStorage, and add it to the three namespace literals in
storage-column-many.test.ts.

Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
validateStorage now validates-only (returns void); it previously returned a
hydrated SqlStorage built from the deleted placeholder namespace machinery. The
two merged TML-2911 round-trip tests captured its return; read the round-tripped
column from the JSON-parsed value instead.

Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
…ted dist + real serializer

The synthetic contract-imports test compiles a generated temp project against
workspace dist via tsconfig path maps. Two maps were wrong: sql-contract types
pointed at a nonexistent dist/exports/ subdir (it emits to top-level dist/), and
the switch to the real PostgresContractSerializer import
(@prisma-next/target-postgres/runtime) lacked an explicit .d.mts mapping (the /*
glob does not resolve a bare subpath under moduleResolution:bundler). Point both
at the real dist declarations.

Signed-off-by: willbot <w.a.madden+machine@gmail.com>
Signed-off-by: Will Madden <madden@prisma.io>
@wmadden-electric wmadden-electric requested a review from wmadden June 26, 2026 13:03
@wmadden-electric wmadden-electric added this pull request to the merge queue Jun 26, 2026
Merged via the queue into main with commit 9532c5f Jun 26, 2026
21 checks passed
@wmadden-electric wmadden-electric deleted the tml-2891-eliminate-the-sql-family-placeholder-namespace-concretion branch June 26, 2026 13:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants