Deploy de preview de Aquazaku (PR de Vercel)

Deploy de preview de Aquazaku (PR de Vercel) A workflow diagram generated by Archify. 01 / Git 02 / Vercel 03 / Railway 04 / Reviewer 05 / Supabase EX / Si falla Push Build + deploy Sync a preview Verificar Push a PR · feature → main · Git › Push Push a PR feature → main Preview URL · *.vercel.app · Vercel › Build + deploy Preview URL *.vercel.app Build stg · Dockerfile · Railway › Build + deploy Build stg Dockerfile db:sync-preview · migrate + audit + seed · Railway › Sync a preview · automático db:sync-preview migrate + audit + seed automático Sign-in · Better Auth · Reviewer › Verificar Sign-in Better Auth Auditoría · audit_log append-only · Supabase › Verificar Auditoría audit_log append-only Preview vivo · schema preview · Supabase › Verificar Preview vivo schema preview espera API URL preview 200 GRANTs OK Legend User UI Agent logic Policy Context / trace Cloud service

El happy path

  • • Push a una PR dispara Vercel (preview URL) y Railway staging en paralelo.
  • • Railway staging corre db:sync-preview: las 16 migraciones + auditoría de permisos + seed. Si la auditoría falla, el deploy aborta.
  • • Vercel y staging se conectan por la variable API_INTERNAL_URL del preview — Better Auth valida el Origin con *.vercel.app.

Por qué staging sincroniza su schema, no el de prod

  • • Staging lee AQUAZAKU_ENV=preview. El migrador consulta searchPathFor(env) — apunta a schema preview, no a public.
  • • Si el sync a preview falla, la producción sigue arriba: ningún path toca el schema public desde staging.
  • • Cada merge a main resetea el schema preview. Es descartable: si quedó mal, se tira a la basura.

El 403 de Better Auth es la señal canaria

  • • Si después de un deploy el sign-in devuelve 403, el wildcard *.vercel.app en trustedOrigins no está cubriendo el subdominio que emite Vercel.
  • • La fix es agregar el subdominio explícito o ajustar el patrón. La auditoría de CI no lo detecta — es runtime, y es la única verificación que prueba que el ciclo preview funciona end-to-end.