From fdbdc42470f580e0cabb213546bb976e736767fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20Ben=C3=ADtez?= Date: Wed, 8 Jul 2026 11:46:29 -0300 Subject: [PATCH] =?UTF-8?q?El=20bug=20est=C3=A1=20en=20toRow()=20en=20proc?= =?UTF-8?q?ess-repo.ts,=20no=20en=20el=20ImportPage:=20typescript//=20toRo?= =?UTF-8?q?w()=20en=20process-repo.ts=20=E2=80=94=20l=C3=ADneas=204-24=20/?= =?UTF-8?q?/=20NUNCA=20incluye=20org=5Fid=20en=20el=20payload=20del=20upse?= =?UTF-8?q?rt=20const=20row=20=3D=20{=20=20=20id:=20process.id,=20=20=20na?= =?UTF-8?q?me:=20process.name,=20=20=20//=20...=20otros=20campos=20=20=20/?= =?UTF-8?q?/=20=E2=86=90=20org=5Fid=20ausente=20completamente=20}=20La=20c?= =?UTF-8?q?adena=20completa=20del=20fallo:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ImportPage.tsx sí tiene orgId: user!.orgId ?? null → el Process object tiene el valor correcto process-repo.ts llama toRow() para construir el payload de Supabase toRow() nunca pone org_id en el payload → Supabase recibe org_id = null (default) La RLS chequea org_id = current_org() → null ≠ '2a956076-...' → 403 El error propaga y sale como toast genérico de archivo dañado Esto pasó desapercibido hasta ahora porque platform_admin tiene is_platform_admin() que bypasea la verificación de org_id. La inserción con org_id = null le funciona a admins, nunca a client_editor. El fix es quirúrgico: agregar una sola línea en toRow(): typescriptorg_id: process.orgId ?? null, Eso es todo. Una línea en process-repo.ts. La restricción "no tocar process-repo.ts" de Etapa 5 era por razón equivocada (asumíamos que el repo no necesitaba cambios) — este es un bug que impide que Etapa 5 funcione en absoluto. --- src/persistence/supabase/process-repo.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/persistence/supabase/process-repo.ts b/src/persistence/supabase/process-repo.ts index 75b0f72..303655b 100644 --- a/src/persistence/supabase/process-repo.ts +++ b/src/persistence/supabase/process-repo.ts @@ -14,6 +14,7 @@ function toRow(process: Process, userId: string) { automation_investment: process.automationInvestment, group_id: process.groupId, area_id: process.areaId, + org_id: process.orgId ?? null, tags: process.tags, // owner_id se preserva del valor existente en el proceso; solo se inicializa con userId en creates owner_id: process.ownerId || userId,