ADR Index

August 14, 2026 · View on GitHub

This document provides a comprehensive index of all Architectural Decision Records (ADRs) for the Prisma Next prototype, organized by category and ADR number.

Core Architecture

ADRTitleDescriptionLink
001Migrations as EdgesDefines migrations as contract-to-contract transitions rather than sequential SQL filesADR 001 - Migrations as Edges.md
002Plans are ImmutableEstablishes Plans as immutable, auditable objects with contract hash and referencesADR 002 - Plans are Immutable.md
003One Query One StatementEnsures Plans map to single SQL statements for predictability and guardrailsADR 003 - One Query One Statement.md
004Storage Hash vs Profile HashSeparates storage identity hashing (storageHash) from pinned capability profile hashing (profileHash)ADR 004 - Storage Hash vs Profile Hash.md
005Thin Core Fat TargetsKeeps core minimal while pushing target-specific behavior into adaptersADR 005 - Thin Core Fat Targets.md
140Package Layering & Target-Family NamespacingEstablishes ring-based package layout and per-family namespaces; introduces target-agnostic runtime core and family runtimesADR 140 - Package Layering & Target-Family Namespacing.md
150Family-Agnostic CLI and Pack Entry PointsConfig-only CLI, /cli vs /runtime entrypoints, family helpers + TargetFamilyHookADR 150 - Family-Agnostic CLI and Pack Entry Points.md
204Domain actions vs composable primitives in the control planeDistinguishes action methods (single user intents, CLI envelopes, audit boundaries) from composable primitives (raw data, no audit), and forbids compound actions from calling peer actionsADR 204 - Domain actions vs composable primitives in the control plane.md

Contract & Schema

ADRTitleDescriptionLink
006Dual Authoring ModesSupports both PSL-first and TS-first authoring with identical canonical artifactsADR 006 - Dual Authoring Modes.md
007Types Only EmissionEmits only TypeScript declarations, no runtime client code generationADR 007 - Types Only Emission.md
008Dev Auto Emit CI Explicit EmitRemoves explicit generate step in development via plugins, requires explicit emit in CIADR 008 - Dev Auto Emit CI Explicit Emit.md
009Deterministic Naming SchemeEstablishes consistent naming patterns for constraints to ensure stable emissionADR 009 - Deterministic Naming Scheme.md
010Canonicalization RulesDefines exact key ordering and normalization rules for deterministic contract hashingADR 010 - Canonicalization Rules.md
021Contract Marker StorageDefines database storage for contract identity verification and alignment checksADR 021 - Contract Marker Storage.md
042Contract Marker EvolutionSpecifies marker table schema evolution and forward-compatible field additionsADR 042 - Contract Marker Evolution.md
156Storage sets and check constraintsPartially superseded. Adds storage.sets to express “column value is in this set” explicitly in storage — that half stands. Its structured checks[] ({ kind: "inSet", column, setRef }) shape is superseded by ADR 244: a check is now an opaque wire-named predicateADR 156 - Storage sets and check constraints.md
159Definition-only contracts and separate TypeMaps for lane typingKeeps contracts stack-independent and traversable; keeps runtime-real structural mappings on the runtime contract value; exports codec/operation type maps as a separate TypeMaps type (not part of Contract)ADR 159 - Definition-only contracts and type-only codec-operation maps.md
163Provider-invoked source interpretation packagesKeeps parsing/interpretation logic in provider-invoked authoring packages so CLI/control plane stay source-agnostic and IO-freeADR 163 - Provider-invoked source interpretation packages.md
167Typed default literal pipeline and extensibilityDocuments typed literal default flow across authoring/emission/verification/rendering and records deferred codec-keyed SPI follow-upADR 167 - Typed default literal pipeline and extensibility.md
170Pack-provided type constructors and field presetsComposed registries for parameterized types and presets across PSL + TS; dot namespacing; hard-error duplicates; presets may imply constraintsADR 170 - Pack-provided type constructors and field presets.md
171Parameterized native types in contractsContracts represent parameterized storage types as base nativeType + structured typeParams; expansion to SQL strings is hook-driven per componentADR 171 - Parameterized native types in contracts.md
246Option arguments and select templates for authoring helpersAdds a shared option argument kind (bare token in PSL, literal union in TS; one type across block parameters and helper arguments) and a select template node — registration-validated against the option's values — so preset vocabulary never leaks generator ids. An undefined execution-defaults phase omits the phase; an empty resolved typeParams omits the key — the two rules carry each other, and the updatedAt()timestamptz(now, now) shorthand is test-enforced, not structural. Per-codec preset name = codec base name. Records which check protects which surface (PSL validator vs TS literal union; the TS surface has no runtime validation) and which protects which argument object (weak type vs excess-property).ADR 246 - Option arguments and select templates for authoring helpers.md

Query System

ADRTitleDescriptionLink
011Unified Plan ModelEstablishes common Plan structure across all query lanes with AST, SQL, and metadataADR 011 - Unified Plan Model.md
012Raw SQL Escape HatchPlan construction superseded by ADR 247. Provides safe raw SQL execution with required annotations and verification; the annotation schema stands, the AST-less plan shape does notADR 012 - Raw SQL Escape Hatch.md
013Lane Agnostic Plan IdentityEnsures Plan identity and hashing work consistently across all query lanesADR 013 - Lane Agnostic Plan Identity.md
162Kysely lane emits PN SQL ASTSuperseded. The Kysely lane was removed from Prisma Next; this ADR is retained for historical context onlyADR 162 - Kysely lane emits PN SQL AST.md
165ORM WhereArg literal normalizationRecords Phase 2 decision to validate bound ToWhereExpr payloads then normalize ParamRef values into literals at ORM boundariesADR 165 - ORM WhereArg literal normalization.md
018Plan Annotations SchemaDefines canonical JSON schema for Plan annotations and validation rulesADR 018 - Plan Annotations Schema.md
019TypedSQL as Separate CLIEstablishes TypedSQL as out-of-tree tool that emits Plan factoriesADR 019 - TypedSQL as Separate CLI.md
020Result Typing RulesDefines how DSL and ORM compute result types from projections and joinsADR 020 - Result Typing Rules.md
025Plan Caching MemoizationEstablishes Plan caching strategy with memoization and invalidationADR 025 - Plan Caching Memoization.md
180Dot-path field accessorCallable string accessor (u("homeAddress.city")) for value object fields and Mongo update operators; unified FieldAccessor used by both read and write callbacks in the Mongo query builderADR 180 - Dot-path field accessor.md
201State-machine pattern for typed DSL buildersThree-class state machine (CollectionHandleFilteredCollectionPipelineChain) with phantom marker types gating conditional terminals; pattern used in mongo-query-builder, candidate for reuse in a typed SQL query builderADR 201 - State-machine pattern for typed DSL builders.md
247Whole-query raw SQL is the fragment mechanism at statement positionA raw-query node in AnyQueryAst sharing the fragment tag's parts representation; .returnsRow(spec) / .affectedCount() terminators, a hybrid row spec (contract column refs or explicit codec ids), embeddable iff row-returning (so data-modifying CTEs compose), strict-on-missing / drop-surplus decode. Supersedes ADR 012's AST-less plan constructionADR 247 - Whole-query raw SQL is the fragment mechanism at statement position.md

Runtime & Execution

ADRTitleDescriptionLink
014Runtime Hook APIDefines composable hook system for Plan lifecycle events and plugin integrationADR 014 - Runtime Hook API.md
015ORM as Optional ExtensionEstablishes ORM layer as optional extension built on core DSL primitivesADR 015 - ORM as Optional Extension.md
016Adapter SPI for LoweringDefines stable adapter interface for SQL lowering and dialect-specific behaviorADR 016 - Adapter SPI for Lowering.md
030Result decoding & codecs registryEstablishes codec registry for type-safe result decoding and parameter encodingADR 030 - Result decoding & codecs registry.md
031Adapter capability discovery & negotiationDefines capability discovery and negotiation flow between adapters and runtimeADR 031 - Adapter capability discovery & negotiation.md
155Driver/Codec boundary and lowering responsibilitiesSeparates lowering vs codec encoding/decoding vs driver transport; standardizes codec↔driver boundary values as string | Uint8Array | nullADR 155 - Driver Codec Boundary and Lowering Responsibilities.md
157Execution enumsDefines execution-plane enum behavior derived from explicit storage enforcement; builds on ADR 155 and ADR 156ADR 157 - Execution enums.md
158Execution mutation defaultsDefines execution-plane mutation defaults (execution.mutations.defaults) and a section-owned hashing model to avoid marker churnADR 158 - Execution mutation defaults.md
168Postgres JSON and JSONB typed columnsAdds first-class PostgreSQL json/jsonb codec and column support with Standard Schema-based typed emission in contract.d.tsADR 168 - Postgres JSON and JSONB typed columns.md
186Codec-dispatched type renderingCodecs own TypeScript type rendering via renderOutputType and FieldOutputTypes; removes EmissionSpi.generateModelsType? override and legacy renderer infrastructureADR 186 - Codec-dispatched type rendering.md
169Declared applicability for mutation default generatorsRecords the decision to validate generator/column compatibility via contributor-declared applicability and to assemble generator implementations via composed registriesADR 169 - Declared applicability for mutation default generators.md
160Plan grouping keys for multi-statement orchestrationAdds meta.groupingKey to correlate multiple statement executions that serve one higher-level operationADR 160 - Plan grouping keys for multi-statement orchestration.md
164Repository LayerDefines @internal/sql-orm-client as a multi-query orchestration surface in the extensions integrations layerADR 164 - Repository Layer.md
202Codec trait systemSemantic capability traits (equality, order, numeric, textual, boolean) declared on codecs and consumed by query surfaces to gate operator availability by data typeADR 202 - Codec trait system.md
203Trait-targeted operation argumentsExtends operation argument specs with traits to accept any codec carrying the required capability, alongside exact codecId targetingADR 203 - Trait-targeted operation arguments.md
204Single-tier runtimeCollapses runtime-executor into framework-components; family runtimes (@internal/sql-runtime, @internal/mongo-runtime) extend RuntimeCore directly via the /runtime subpath. Partially supersedes ADR 140's "Runtime Separation" two-tier model.ADR 204 - Single-tier runtime.md
206Operations as TypeScript functionsOperations are authored as real TS functions — signature is the type surface, body builds the AST — with a minimal self dispatch hint for ORM column-helper reachabilityADR 206 - Operations as TypeScript functions.md
210Prepared Statements: Author Surface and Driver SPIAdds runtime.prepare(declaration, callback) (re-exposed on each DB facade as db.prepare(...)) and prepared execution through the existing query() driver SPI; lazy driver-allocated opaque handle, no global cache, cache lifetime bounded by user reference and connection. Family-level: per-driver caching strategies are out of scope here.ADR 210 - Prepared Statements - Author Surface and Driver SPI.md
215Runtime middleware lifecycle: beforeExecute fires before encodeParamsReorders the SQL family runtime so beforeExecute fires between lowerToDraft and encodeDraftParams, with a pre-encode paramsMutator over user-domain values. Extracts runBeforeExecuteChain from runWithMiddleware; intercept always observes a post-beforeExecute plan. SPI shape unchanged.ADR 215 - Runtime middleware lifecycle beforeExecute before encodeParams.md
220Plan execution identity for middleware correlationAdds planExecutionId: string to RuntimeMiddlewareContext, minted by the runtime via crypto.randomUUID() at the start of every runtime operation (query, prepared statement query, or execute). Per-operation identity (not per-plan), shared across all hooks within one operation, distinct across two operations of the same plan. Lives on the per-operation context, not on PlanMeta. Distinct from ADR 013's content-based planId and ADR 160's groupingKey.ADR 220 - Plan execution identity for middleware correlation.md

Migration System

ADRTitleDescriptionLink
028Migration Structure & OperationsDefines migration file structure, on-disk formats, schemas, and operations for working with migration graphsADR 028 - Migration Structure & Operations.md
037Transactional DDL FallbackSpecifies fallback behavior when adapters lack full transactional DDL supportADR 037 - Transactional DDL Fallback.md
038Operation idempotency classification & enforcementDefines idempotency classification and enforcement for migration operationsADR 038 - Operation idempotency classification & enforcement.md
039Migration graph path resolution & integritySpecifies migration graph path computation, cycle detection, and deterministic tie-breakingADR 039 - Migration graph path resolution & integrity.md
040Node task execution environment & sandboxingDefines execution environment and sandboxing for migration node tasksADR 040 - Node task execution environment & sandboxing.md
041Custom operation loading via local packages + preflight bundlesEstablishes custom operation loading with security constraints and bundle supportADR 041 - Custom operation loading via local packages + preflight bundles.md
043Advisory lock domain & key strategyDefines advisory locking strategy for migration coordination and collision preventionADR 043 - Advisory lock domain & key strategy.md
044Pre & post check vocabulary v1Superseded. Check shapes are now per-family: { description, sql } for SQL (ADR 028), { description, source, filter, expect } for MongoDB (ADR 188)ADR 044 - Pre & post check vocabulary v1.md
154Component-owned database dependenciesSets component-owned verification as the target architecture; v1 uses adapter-owned ID-presence checks as a temporary compromiseADR 154 - Component-owned database dependencies.md
161Explicit foreign key constraint and index configurationAdds two independent knobs (foreignKeys.constraints, foreignKeys.indexes) to control FK constraint and FK-backing index emission in migration DDLADR 161 - Explicit foreign key constraint and index configuration.md
166Referential actions for foreign keysAdds optional onDelete / onUpdate action semantics to foreign keys and Postgres planner DDL emission (ON DELETE / ON UPDATE)ADR 166 - Referential actions for foreign keys.md
227Migration read commands share one graphical renderer with command-specific annotationsmigration list, graph, and status all draw the same condensed tree; commands diverge only in per-edge MigrationEdgeAnnotation overlays keyed by migrationHash. Dagre deleted. Trunk = live-contract chain. @contract is app-space-only. Machine output stays flat.ADR 227 - Migration read commands share one graphical renderer with command-specific annotations.md
228Migration apply ledger is a per-migration journalOne ledger row per applied edge (space + migrationName + migrationHash + from/to + operationCount + appliedAt). migration status reads it for applied/pending classification; migration log reads the unscoped flat table as the real apply history.ADR 228 - Migration apply ledger is a per-migration journal.md
229Migration graph renderer uses a line/plane/occlusion modelThe renderer is modelled around lines (not cells): each edge is a routed line carrying its own identity and colour, cells hold a z-ordered stack of lines, and the topmost line is drawn while the rest are occluded. Layout guarantees one drawable owner per cell (no tees, two columns per lane), so colour is correct by construction with no junction logic.ADR 229 - Migration graph renderer uses a line-plane-occlusion model.md
234Content-addressed wire names for Postgres-normalized objectsA Postgres-normalized object's physical name is <user prefix>_<8 hex of SHA-256(canonical content)>, so equivalence is a name match and the verifier never compares bodies the database reprints; a matching suffix under a different prefix is the rename signalADR 234 - Content-addressed wire names for Postgres-normalized objects.md
240Contract snapshots live in a content-addressed storeEvery distinct migration contract is stored once per migrations root at migrations/snapshots/<hex>/contract.{json,d.ts}, keyed by storage hash; the old per-package sibling contract files and per-space head copies are gone, and migration.ts imports resolve through the store. Amends ADR 197 and ADR 232.ADR 240 - Contract snapshots live in a content-addressed store.md
243Name-identified indexes and exact-name adoptionExtends ADR 234's content-addressed wire names from RLS policies to every index, so expression and partial indexes become authorable and verifiable without comparing SQL bodies; adds an exact-name mode (map:/@@map) whose equivalence is content comparison, which makes a foreign database adoptable with zero operations; naming is a two-arm union (wire/exact) at construction with flat derived storage. Constraints stay outside the rule (amended: check constraints joined it in ADR 244).ADR 243 - Name-identified indexes and exact-name adoption.md
244Check constraints are opaque wire-named expressionsExtends ADR 234's content-addressed wire names to a third object kind: a check is one opaque SQL predicate whose name commits to its content, so equivalence is name equality and introspection never parses a predicate. Supersedes ADR 156's structured inSet check shape (its storage.sets half stands). The target renders the SQL, the family composes and byte-caps the wire prefix, legacy exact-named checks adopt by drop + add rather than rename, and derivation is scoped to managed tables — the contract describes an external schema without prescribing enforcement for it.ADR 244 - Check constraints are opaque wire-named expressions.md
239Errors are structural envelopes with dotted namespace codesEvery user-facing error is a structural envelope with a dotted NAMESPACE.SUBCODE code, recognized by field shape rather than instanceof, so it survives the control/execution split, the wire, and duplicate library copies; bugs take the separate InternalError path; the numeric PN-DOMAIN-NNNN codes retire against a published crosswalk. Amended 2026-08-11: a command that ran to its end and found problems reports them as diagnostics in a completed envelope with a documented 499 exit code (never a thrown failure at exit 2), and the freeform fix prose field becomes typed nextActions.ADR 239 - Errors are structural envelopes with dotted namespace codes.md
245Errors are structured at origin; results carry one ok discriminatorGoverns how ADR 239’s envelopes are built and carried: every surfaced failure is structured where it is raised, with its own dotted code, why, and typed nextActions (no catch-all codes; the generic factory takes the code as a required first argument; a non-structured error at a process boundary is a bug, exit 1); code is the error’s only machine identity (meta never carries an alternative one, and the error-reference registry records each code’s producing sites and meta shapes); every operation returns the shared Result with the single ok discriminator and a CliStructuredError failure (per-operation outcome enums banned). Error subclasses extend the one base class — structured data in meta, name untouched so structural recognition holds, no boundary mappers. Composer records the same rules as its ADR-0043/0044.ADR 245 - Errors are structured at origin; results carry one ok discriminator.md

Guardrails & CI

ADRTitleDescriptionLink
022Lint Rule TaxonomyDefines taxonomy and classification system for lint rules and violationsADR 022 - Lint Rule Taxonomy.md
023Budget EvaluationEstablishes query budget evaluation and enforcement mechanismsADR 023 - Budget Evaluation.md
024Telemetry SchemaDefines telemetry schema and privacy controls for runtime observabilityADR 024 - Telemetry Schema.md
029Shadow DB preflight semanticsSuperseded — no shadow database will ever exist; diffing is fully offline against on-disk snapshotsADR 029 - Shadow DB preflight semantics.md
051PPg preflight-as-a-service contractSuperseded — the preflight concept is abandoned; no shadow database will ever existADR 051 - PPg preflight-as-a-service contract.md

Extensions & Packs

ADRTitleDescriptionLink
017Extension Compatibility PolicyEstablishes compatibility policy for extensions and alternate runtimesADR 017 - Extension Compatibility Policy.md
104PSL extension namespacing & syntaxDefines namespaced PSL extension syntax and mapping to contract JSONADR 104 - PSL extension namespacing & syntax.md
105Contract extension encodingSpecifies canonical extension section structure in contract JSONADR 105 - Contract extension encoding.md
106Canonicalization for extensionsDefines deterministic normalization rules for extension dataADR 106 - Canonicalization for extensions.md
112Target Extension PacksEstablishes extension pack model as versioned, installable modulesADR 112 - Target Extension Packs.md
113Extension function & operator registryDefines function and operator registry for extension capabilitiesADR 113 - Extension function & operator registry.md
114Extension codecs & branded typesEstablishes codec model and branded types for extension valuesADR 114 - Extension codecs & branded types.md
115Extension guardrails & EXPLAIN policiesDefines guardrails and EXPLAIN policies for extension operationsADR 115 - Extension guardrails & EXPLAIN policies.md
116Extension-aware migration opsSpecifies extension-aware migration operations and capability gatingADR 116 - Extension-aware migration ops.md
117Extension capability keysDefines canonical capability keys and reserved namespacesADR 117 - Extension capability keys.md
118Bundle inclusion policy for packsEstablishes bundle inclusion policy and security constraints for packsADR 118 - Bundle inclusion policy for packs.md
121Contract.d.ts structure and relation typingComplete specification for Tables, Models, and Relations namespaces with proper relation field typingADR 121 - Contract.d.ts structure and relation typing.md
126PSL top-level block SPIDefines SPI for packs to register new top-level blocks (views, enums, etc.) with parsing, validation, and deterministic emissionADR 126 - PSL top-level block SPI.md
153Extension Package Naming ConventionStandardizes on extension-* prefix exclusively for extension pack npm namesADR 153 - Extension Package Naming Convention.md
214Extension operator surface: namespaced replacement operators and the predicate/helper splitPattern for extension operators whose codec output cannot back a framework built-in's wire semantics: declare zero of the relevant traits + ship namespaced replacements. Predicate operators register as column methods through the operation registry; non-predicate operators (sort comparators, SELECT-expression accessors) ship as free-standing helper functions. Cipherstash is the canonical worked example.ADR 214 - Extension operator surface namespaced replacement operators.md

Adapters & Targets

ADRTitleDescriptionLink
065Adapter capability schema & negotiation v1Defines adapter capability schema and negotiation protocolADR 065 - Adapter capability schema & negotiation v1.md
068Error mapping to RuntimeErrorEstablishes stable mapping from engine/driver errors to RuntimeError envelopeADR 068 - Error mapping to RuntimeError.md
207Per-environment facade asymmetryRecords why postgres() (long-lived) and postgresServerless() (per-request) ship asymmetric runtime-bound surfaces — same authoring surface, different lifecycle ergonomics — and rejects AsyncLocalStorage / single-facade / per-product alternativesADR 207 - Per-environment facade asymmetry.md

Development & Tooling

ADRTitleDescriptionLink
026Conformance Kit CertificationDefines conformance testing levels and certification requirementsADR 026 - Conformance Kit Certification.md
027Error Envelope Stable CodesEstablishes stable error codes and envelope structure for consistent error handlingADR 027 - Error Envelope Stable Codes.md
032Dev Auto Emit IntegrationSpecifies development tool integration for automatic contract emissionADR 032 - Dev Auto Emit Integration.md
034Raw Plan factory manifestDefines optional manifest for raw Plan factories with metadataADR 034 - Raw Plan factory manifest.md
035Dual authoring conflict resolutionSpecifies conflict resolution when both PSL and TS authoring existADR 035 - Dual authoring conflict resolution.md
216CLI telemetry installation ID is a stored random UUID, not a system fingerprintAdopts a stored v4 UUID under the user's config dir as the MAU dedup key; rejects MAC-hash, machine-id, IORegistry UUID, and Windows MachineGuid alternatives on trust, regulatory, and reset-symmetry groundsADR 216 - CLI telemetry installation ID is a stored random UUID not a system fingerprint.md
217CLI telemetry runs in a detached subprocess spawned at command startForks the telemetry sender via child_process.fork() at command start (not exit); parent disconnects and unrefs immediately; child owns all I/O and swallows all errors; satisfies the strict isolation contract by construction rather than diligenceADR 217 - CLI telemetry runs in a detached subprocess spawned at command start.md
242Public npm surface: single @prisma scope with consolidated publish packagesThe public surface is 17 @prisma/* packages — database facades, extension packs, framework/toolchain, families, targets — plus the prisma bin shim, all under packages/9-public/; every other workspace package is private and reaches npm only as a subpath entrypoint of a published shell (one module, one package, preserving registry/instanceof identity); framework runtime and tooling publish separately for serverless bundle weight; rejects a second @prisma-orm scopeADR 242 - Public npm surface - single @prisma scope with consolidated publish packages.md

No-Emit Workflow

ADRTitleDescriptionLink
096TS-authored contract parity & purity rulesEnsures TS-authored contracts produce identical artifacts to PSL-first modeADR 096 - TS-authored contract parity & purity rules.md
097Tooling runs on canonical JSON onlyEnsures tools consume canonical JSON artifacts, not TS source codeADR 097 - Tooling runs on canonical JSON only.md
098Runtime accepts contract object or JSONDefines runtime API for accepting both TS objects and JSON artifactsADR 098 - Runtime accepts contract object or JSON.md
099Contract authoring lint rulesEstablishes ESLint rules for preventing non-deterministic contract authoringADR 099 - Contract authoring lint rules.md
100CI contract emission trust modelDefines sandbox and trust model for TS evaluation in CI environmentsADR 100 - CI contract emission trust model.md

Migration Advisors

ADRTitleDescriptionLink
101Advisors FrameworkEstablishes uniform API for computing and surfacing migration advisoriesADR 101 - Advisors Framework.md
102Squash-first policy & squash advisorDefines policy for keeping migration graphs small through regular baselinesADR 102 - Squash-first policy & squash advisor.md
122Database Initialization & AdoptionCovers greenfield, brownfield-conservative, and brownfield-incremental adoption strategies including introspection, multi-service namespacing, and incremental contract expansionADR 122 - Database Initialization & Adoption.md
123Drift Detection, Recovery & ReconciliationComprehensive drift taxonomy (marker, schema, graph, capability, transactional, cache, canonicalization), detection mechanisms, and recovery strategies with idempotency patternsADR 123 - Drift Detection, Recovery & Reconciliation.md

Notes

  • ADRs 029 and 051 are superseded: the shadow-DB preflight design is abandoned (diffing is fully offline against on-disk snapshots)
  • ADR 156 is partially superseded by ADR 244: its check-constraint half only; storage.sets remains in force
  • ADRs 104-118 form the core extension system architecture (decorators, attributes, capabilities, packs)
  • ADRs 126-127 introduce PSL top-level blocks and views as composable extensions
  • ADRs 096-100 cover the no-emit workflow for TypeScript-authored contracts