--- asset_id: DOC-CorpBrainOS-Arquitectura-Supabase-v01 tipo: Documento Técnico de Arquitectura version: v1.0 proyecto: DOIX — EmpowerLabs Piloto 0 owner: Victor Heredia / EmpowerLabs sherpa: Jacob fecha: 2026-03-31 estado: Borrador activo tags: [BrainOS, Supabase, IntelliBank, DOIX, SherpaX, arquitectura, seguridad] --- # Corp Brain OS — Arquitectura Supabase ## Diseño de infraestructura para DOIX en EmpowerLabs (Piloto 0) --- ## PRINCIPIO FUNDACIONAL > **El IntelliBank no se distribuye. Se ensambla.** El error de diseño más común en sistemas de IA organizacional es tratar el conocimiento como archivos que se copian y distribuyen. En la arquitectura Corp Brain OS, el IntelliBank es una base de datos particionada. Cada persona no "tiene" un kit estático — cada vez que abre una sesión, el sistema ensambla en tiempo real el contexto que le corresponde según su rol, área y nivel de acceso. **Consecuencia directa:** Nadie puede llevarse el IntelliBank. Nadie puede acceder a lo que no le corresponde. Si alguien sale de la organización, su acceso desaparece instantáneamente. Esto no es solo seguridad técnica — es la materialización arquitectónica del Principio 1 de DOIX: *el contexto es infraestructura, no privilegio*. --- ## VISIÓN GENERAL DEL SISTEMA ``` ┌─────────────────────────────────────────────────────────────┐ │ CORP BRAIN OS │ │ (1 proyecto Supabase) │ │ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ CAPA DE ALMACENAMIENTO │ │ │ │ (IntelliBank Particionado) │ │ │ │ │ │ │ │ corp_shared ──────── acceso universal (lectura) │ │ │ │ area_ops ─────────── solo Operaciones │ │ │ │ area_rh ──────────── solo RH + CEO │ │ │ │ area_finanzas ─────── solo Finanzas + CEO │ │ │ │ area_comercial ────── solo Comercial + CEO │ │ │ │ area_tech ─────────── solo Tech + CEO │ │ │ └──────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ CAPA DE CONTROL DE ACCESO │ │ │ │ (RBAC + RLS) │ │ │ │ │ │ │ │ CEO ──────────────── ALL schemas R/W │ │ │ │ Director de Área ──── corp_shared R + área propia │ │ │ │ Miembro de Área ───── corp_shared R + área propia R │ │ │ │ SherpaX Agent ─────── contexto ensamblado only │ │ │ └──────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ KIT ASSEMBLER │ │ │ │ (el mecanismo central de seguridad) │ │ │ │ │ │ │ │ f(usuario, rol, área, proyecto) → │ │ │ │ → contexto efímero para la sesión │ │ │ │ → no se almacena, expira al cerrar sesión │ │ │ └──────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## CAPA 1: ESTRUCTURA DE DATOS EN SUPABASE ### Schemas (uno por área + compartido) | Schema | Propósito | Quién puede acceder | |--------|-----------|---------------------| | `corp_shared` | Cultura, valores, procesos transversales, playbooks corporativos, memoria organizacional | TODOS (lectura). Admins (escritura). | | `area_ops` | Protocolos de operación, proveedores, procesos internos | Director Ops + equipo Ops + CEO | | `area_rh` | Perfiles de colaboradores, políticas de personal, datos de compensación | Director RH + CEO únicamente | | `area_finanzas` | P&L, presupuestos, flujo de caja, proyecciones | Director Finanzas + CEO únicamente | | `area_comercial` | Pipeline, clientes, propuestas, estrategia comercial | Equipo comercial + CEO | | `area_tech` | Arquitectura, documentación técnica, deuda técnica | Equipo tech + CEO | ### Tabla estándar en cada schema Cada schema tiene la misma estructura de tabla base — esto permite queries uniformes desde el Kit Assembler: ```sql -- Tabla: intellibank_entries (replicada en cada schema) CREATE TABLE {schema}.intellibank_entries ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), tipo TEXT, -- 'playbook' | 'protocolo' | 'criterio' | 'memoria' | 'contexto_rol' titulo TEXT NOT NULL, contenido TEXT NOT NULL, autor_id UUID REFERENCES auth.users(id), area TEXT, -- redundante para queries cross-schema por CEO version TEXT DEFAULT 'v1.0', tags TEXT[], activo BOOLEAN DEFAULT true, fecha_creacion TIMESTAMPTZ DEFAULT now(), fecha_update TIMESTAMPTZ DEFAULT now() ); -- Row Level Security habilitado en todas las tablas ALTER TABLE {schema}.intellibank_entries ENABLE ROW LEVEL SECURITY; ``` ### Tabla de perfiles de usuarios ```sql -- En schema: corp_shared CREATE TABLE corp_shared.user_profiles ( user_id UUID REFERENCES auth.users(id) PRIMARY KEY, nombre TEXT NOT NULL, rol TEXT, -- 'ceo' | 'director' | 'member' | 'externo' area TEXT, -- 'ops' | 'rh' | 'finanzas' | 'comercial' | 'tech' nivel_acceso INTEGER, -- 1-5, controla granularidad del kit activo BOOLEAN DEFAULT true, sherpax_config JSONB -- configuración personalizada de su SherpaX ); ``` --- ## CAPA 2: CONTROL DE ACCESO (RBAC + Row Level Security) ### Matriz de permisos | Rol | corp_shared | área propia | otras áreas | área_rh | área_finanzas | |-----|-------------|-------------|-------------|---------|---------------| | CEO | R/W completo | R/W completo | R/W completo | R/W | R/W | | Director de Área | Lectura | R/W completo | ✗ | ✗ | ✗ | | Miembro de Área | Lectura | Lectura | ✗ | ✗ | ✗ | | Externo / Cliente | Solo subset de corp_shared | ✗ | ✗ | ✗ | ✗ | ### Políticas RLS (Row Level Security) Supabase ejecuta estas políticas en cada query — el acceso se verifica a nivel de fila, no solo de tabla: ```sql -- Política para corp_shared: todos los usuarios activos pueden leer CREATE POLICY "corp_shared_read" ON corp_shared.intellibank_entries FOR SELECT USING ( EXISTS ( SELECT 1 FROM corp_shared.user_profiles WHERE user_id = auth.uid() AND activo = true ) ); -- Política para área restringida (ej: área_rh): solo director RH o CEO CREATE POLICY "area_rh_read" ON area_rh.intellibank_entries FOR SELECT USING ( EXISTS ( SELECT 1 FROM corp_shared.user_profiles WHERE user_id = auth.uid() AND activo = true AND (area = 'rh' OR rol = 'ceo') ) ); -- Escritura: solo directores y CEO pueden agregar al IntelliBank CREATE POLICY "intellibank_write" ON {schema}.intellibank_entries FOR INSERT USING ( EXISTS ( SELECT 1 FROM corp_shared.user_profiles WHERE user_id = auth.uid() AND rol IN ('ceo', 'director') AND (area = '{area}' OR rol = 'ceo') ) ); ``` --- ## CAPA 3: KIT ASSEMBLER — El mecanismo central Este es el componente más importante de la arquitectura. El Kit Assembler reemplaza la distribución de archivos estáticos (el problema de seguridad del modelo actual). ### Lógica de ensamblaje ```javascript async function assembleContextKit(userId) { const user = await getUserProfile(userId); let kit = { identity: {}, // quién es el usuario en la org shared: [], // IntelliBank corporativo area: [], // IntelliBank del área role: [], // instrucciones específicas del rol projects: [] // contexto de proyectos activos }; // 1. SIEMPRE incluir — contexto corporativo compartido kit.shared = await query(` SELECT titulo, contenido, tipo FROM corp_shared.intellibank_entries WHERE activo = true ORDER BY tipo, fecha_update DESC LIMIT 50 `); // 2. Contexto de área (RLS hace el control de acceso automáticamente) kit.area = await query(` SELECT titulo, contenido, tipo FROM area_${user.area}.intellibank_entries WHERE activo = true ORDER BY tipo, fecha_update DESC `); // 3. Perfil del rol (instrucciones de comportamiento del SherpaX) kit.role = await query(` SELECT * FROM corp_shared.sherpax_configs WHERE area = '${user.area}' AND rol = '${user.rol}' `); // 4. Proyectos activos del usuario kit.projects = await query(` SELECT * FROM corp_shared.proyectos_activos WHERE '${userId}' = ANY(participantes) AND estado = 'activo' `); // 5. Ensamblar como string de contexto para Claude return formatAsClaudeContext(kit); // → este string va al CLAUDE.md efímero de la sesión // → NUNCA se guarda en disco // → expira cuando la sesión termina } ``` ### Por qué esto es más seguro que el modelo actual | Modelo actual (archivos) | Corp Brain OS (dinámico) | |--------------------------|--------------------------| | CLAUDE.md estático en disco | Contexto ensamblado en RAM, efímero | | Si alguien accede al disco, tiene todo | No hay "todo" en ningún lugar | | Actualizar = editar archivos manualmente | Actualizar = entry en DB, aplica a todos en tiempo real | | Si un colaborador sale, hay que ir a buscar sus archivos | Desactivar user_id = acceso cortado inmediatamente | | No hay audit trail de qué vio quién | Supabase logs cada query con timestamp + user_id | --- ## CAPA 4: PROTOCOLO DE SINCRONIZACIÓN ### Flujo de actualización del IntelliBank ``` COLABORADOR detecta nuevo aprendizaje en sesión │ ▼ Propone IntelliBank Update (IBU) → Tipo: playbook / protocolo / criterio / memoria → Área: la suya → Contenido: el aprendizaje │ ▼ Director de Área revisa y aprueba → Si aprueba: entry se activa en DB (visible para todos del área en próxima sesión) → Si rechaza: se devuelve con feedback │ ▼ Si es conocimiento transversal → Director propone a CEO para corp_shared │ ▼ Supabase Realtime notifica a sesiones activas → "IntelliBank actualizado. Reinicia sesión para incorporar." ``` ### Cadencia de actualización recomendada | Frecuencia | Tipo de actualización | |------------|----------------------| | Post-sesión (inmediato) | Decisiones de proyecto, nuevos criterios, errores documentados | | Semanal | Review de IntelliBank del área — ¿qué aprendimos esta semana? | | Mensual | Revisión de corp_shared — ¿qué nuevo conocimiento es transversal? | | Trimestral | Auditoría completa — ¿qué entries ya no son relevantes? (activo = false) | --- ## CAPA 5: SEGURIDAD EN PROFUNDIDAD ### Para el Corp Brain OS en Supabase | Amenaza | Mecanismo de mitigación | |---------|-------------------------| | Empleado accede a datos de otro área | RLS a nivel de fila — imposible desde la aplicación | | Empleado descarga el IntelliBank completo | No existe "IntelliBank completo" — es particionado y se ensambla efímeramente | | Empleado sale y sigue usando su SherpaX | Desactivar user_id corta acceso en tiempo real | | Acceso no autorizado a Supabase | Service Role Key nunca expuesta al cliente; Row Level Security en todas las tablas | | Alguien roba el token de sesión | Tokens con TTL corto + refresh tokens; sesiones con expiración | | Filtración de datos sensibles (RH, Finanzas) | Schemas separados + políticas RLS estrictas + audit log automático | ### Para la arquitectura actual (SherpaX en Cowork / Claude) Esta pregunta la hacen los prospectos: *¿Qué pasa con mis datos cuando hablo con el SherpaX de EmpowerLabs?* **Respuesta estructurada para prospecto:** **¿Dónde vive el IntelliBank?** En archivos `.md` en la computadora del usuario (CLAUDE.md, carpeta `/skills`). No en servidores de EmpowerLabs. El cliente controla sus propios archivos. **¿Qué ve Anthropic?** El contenido de las conversaciones pasa por la API de Anthropic bajo su política de privacidad. Con planes Team o Enterprise: **Anthropic no entrena sus modelos con el contenido de las conversaciones**. Con el plan personal (claude.ai): revisar política vigente. **¿EmpowerLabs tiene acceso a las conversaciones?** No. EmpowerLabs configura el IntelliBank (los archivos de contexto), pero las conversaciones son entre el usuario y Claude directamente. EmpowerLabs no tiene acceso a transcripts a menos que el cliente los comparta explícitamente. **¿Qué tan sensible puede ser el IntelliBank?** Recomendación: el IntelliBank debe contener **modelos mentales, criterios, procesos y frameworks** — no datos raw sensibles (contraseñas, datos de clientes nominales, información financiera específica). El IntelliBank es una capa de inteligencia, no una base de datos operativa. **Hoja de ruta de seguridad:** - Fase 1 (ahora): Arquitectura de archivos locales — datos en computadora del cliente - Fase 2 (Corp Brain OS): Supabase del cliente — datos en infraestructura propia del cliente, cero dependencia de EmpowerLabs - Fase 3 (Enterprise): On-premise o VPC dedicado — total soberanía de datos --- ## IMPLEMENTACIÓN — RUTA CRÍTICA PARA EMPOWERLABS PILOTO 0 ### Fase 0 — Arquitectura con archivos (hoy) El sistema actual funciona pero con IntelliBank personal por persona. No hay particionado real. **Equipo EmpowerLabs actual:** ``` Victor → CLAUDE.md completo (CEO, acceso total) Anahí → CLAUDE.md de EmpowerTeams X (su área) [próximos] → CLAUDE.md por área cuando escale ``` ### Fase 1 — Supabase MVP (próximos 60-90 días) Pasos en orden: 1. **Crear proyecto Supabase** para EmpowerLabs Corp Brain OS 2. **Migrar el IntelliBank actual de Victor** a `corp_shared` como v1.0 base 3. **Crear schema `area_empowerteams`** para Anahí con su IntelliBank específico 4. **Construir Kit Assembler básico** (función Edge de Supabase que genera el CLAUDE.md dinámico) 5. **Integrar con Cowork**: al abrir sesión, se llama al assembler y se genera el contexto de la sesión 6. **Activar audit log**: quién abrió sesión, qué área de IntelliBank usó, cuándo ### Fase 2 — Scale a equipo completo Una vez validado con Victor + Anahí: - Crear schemas por área para cada colaborador nuevo - Activar el flujo de IntelliBank Updates (propuesta → aprobación → publicación) - Dashboard de madurez DOIX: ¿cuántas entries por área? ¿frecuencia de actualización? --- ## MÉTRICAS DEL CORP BRAIN OS Una organización puede medir la madurez de su Brain OS con estas métricas: | Métrica | Qué indica | |---------|------------| | # entries en `corp_shared` | Madurez del conocimiento corporativo transversal | | # entries por área | Profundidad del IntelliBank de cada área | | Frecuencia de actualizaciones | Velocidad de aprendizaje organizacional | | % colaboradores con SherpaX activo | Penetración de DOIX en el equipo | | Tiempo promedio de onboarding | Reducción vs. modelo sin DOIX | | Decisiones documentadas en IntelliBank | Acumulación de criterio ejecutivo | --- ## NOTAS DE JACOB Este documento responde la arquitectura técnica. Pero hay una dimensión más importante: **El Corp Brain OS no es un proyecto de IT — es un proyecto de diseño organizacional.** Las decisiones más críticas no son técnicas: - ¿Qué va en `corp_shared`? → Esto define la identidad y cultura codificada de la organización - ¿Quién puede escribir en el IntelliBank? → Esto define cómo aprende la organización - ¿Qué tan granular es el particionado? → Esto define el balance entre colaboración y privacidad La tecnología (Supabase + RLS + Kit Assembler) es el vehículo. El diseño de qué conocimiento vive dónde y quién puede accederlo es la arquitectura real. **EmpowerLabs como Piloto 0 tiene una ventaja enorme:** Victor entiende ambas dimensiones. La mayoría de las organizaciones van a necesitar un consultor que entienda el diseño organizacional tanto como la tecnología. Eso es el DOIX Practitioner. --- *Documento generado: Jacob — IA Lab Thinking Room, Sesión 002* *Versión 1.0 — Borrador activo* *Actualizar cuando se avance en implementación de Fase 1*