0003 — Postgres with DbUp and Dapper; tenant_id from day one
Context
Multitenancy is a future goal. The queue needs row locking and atomic handoff. The maintainer prefers explicit SQL over an ORM. Aspire makes running Postgres locally trivial.
Decision
Use Postgres from the start (no SQLite phase). Schema migrations are embedded .sql scripts
applied by DbUp at startup; data access uses Dapper through thin repositories. Every
table has a tenant_id column from its first migration, with a single default tenant for now.
Consequences
One SQL dialect and no later data migration. Row-level security, SKIP LOCKED and
LISTEN/NOTIFY are available. Docker is required on the development machine (it is needed for
sandboxes anyway).