# ADR 0004 — PostgreSQL + Drizzle

**Status:** Accepted

## Context

AWP requires one authoritative relational product state with transactions spanning lifecycle state, events/audit/outbox and durable orchestration integration.

## Decision

Use PostgreSQL as authoritative product persistence and Drizzle as the TypeScript schema/query layer. Large objects may use S3-compatible storage by immutable reference.

## Consequences

Strong relational constraints/transactions, straightforward DBOS co-location, explicit migrations. Kubernetes/GitHub/Fabro observations remain non-authoritative. Secrets are references, not ordinary DB values.

## Rejected Alternatives

- provider state as truth;
- Mongo/document-first model;
- embedded/local DB as the product authority;
- bespoke ORM/query layer.

## Increment Realization

I0 establishes schema/migration/transaction/event foundations; domain tables expand incrementally without moving authority.