Esta entrega prepara el provisioning, pero no crea TENANT TEST ni ejecuta migraciones contra ningún entorno. NEMESIS (487e6c18-c75f-4661-9ffe-2a2cabf3faf2) permanece protegido.
014_platform_administration.sql: funciones de plataforma para listar, consultar y cambiar estado. La autorización se basa exclusivamente en auth.jwt()->app_metadata->platform_role.016_platform_provisioning.sql: configuración por tenant_id, catálogo regional, idempotencia, auditoría y RPC SECURITY DEFINER.017_platform_billing_modules.sql: planes, módulos, suscripciones y asignaciones tenant-scoped, sin datos iniciales.018_platform_console_rpcs.sql: dashboard, catálogos, detalle, admins, auditoría, gating y mutaciones platform protegidas.supabase/functions/platform-provision-tenant: valida el JWT, invita al usuario Auth, llama al RPC y elimina el usuario Auth recién creado si la transacción falla./platform: consola separada con inicio, tenants, suscripciones, módulos, facturación, admins, auditoría y configuración.01-SNAPSHOT-PRECHECK.sql y conservar el resultado fuera del repositorio.014_platform_administration.sql en staging.016_platform_provisioning.sql en staging. No usar supabase reset.017_platform_billing_modules.sql y 018_platform_console_rpcs.sql en staging.tenant_id, que configuracion.tenant_id es único y que ya no existe CHECK(id = 1).SUPABASE_SERVICE_ROLE_KEY únicamente como secreto del servidor.app_metadata.platform_role = platform_admin; no usar user_metadata, localStorage ni usuarios.rol para autorizar plataforma.TEST GAMING CENTER desde la UI. No copiar datos de NEMESIS.La RPC recibe el UUID del usuario Auth creado por la Edge Function y lo usa como public.usuarios.id. Así se mantiene la relación:
auth.users.id = public.usuarios.id = tenant_members.user_id
La RPC crea en una única transacción SQL:
tenant_id;La RPC no crea filas en auth.users. La Edge Function es el único componente con service_role y aplica compensación si el SQL falla.
current_tenant_id y Realtime rechazan el contexto de un tenant suspendido.016_platform_provisioning.rollback.sql es deliberadamente bloqueante: se detiene si encuentra tenants o configuraciones adicionales a NEMESIS. 017_platform_billing_modules.rollback.sql se detiene si existen datos de catálogo o asignaciones. Ejecutar ambos solo en staging o con aprobación explícita y snapshot.
No ejecutar durante esta fase:
supabase reset, supabase db reset o supabase stop sobre NEMESIS;