decisions.md ('Migrations run as the database owner') splits DATABASE_URL_ADMIN from a least-privilege DATABASE_URL, but locally both are the postgres superuser and osds_dev is owned by postgres. The least-privilege path is therefore never exercised — a permission the app role lacks will first appear in a real deployment. Create the app role and grant set as part of the container entrypoint work.
decisions.md ('Migrations run as the database owner') splits DATABASE_URL_ADMIN from a least-privilege DATABASE_URL, but locally both are the postgres superuser and osds_dev is owned by postgres. The least-privilege path is therefore never exercised — a permission the app role lacks will first appear in a real deployment. Create the app role and grant set as part of the container entrypoint work.