THE UNIFIED PLATFORM BIBLE — ADDENDUM 07
Triple Verificación — Pipeline de Migración & Correcciones Junio 2026
Versión: 1.0
Fecha: 16 de junio de 2026
Autor: Alain Bessette, CFO/Product Owner, ABI Conglomerate
Dominio: GoWeBa.com
Estado: Addendum estratégico oficial — Especificación vinculante
Restricciones: CERO pérdida de datos · CERO force-reset · CERO interrupción de email
⚠️ AVISO CRÍTICO
Este addendum tiene la MISMA autoridad que la Parte 1, la Parte 2 y todos los addendums anteriores de la Biblia.
Todas las correcciones descritas están desplegadas en producción y guardadas en checkpoint.
No se realizaron cambios de esquema incompatibles.
📋 TABLA DE CONTENIDOS
- Contexto y Objetivo
- Fase M — Verificación del Google Pull
- Fase C — Verificación de la Clasificación V10
- Fase E — Corrección Email Forward/Reply
- Fase A — Pestaña ARCHIVED y Cuadrícula de 15 tarjetas
- Corrección de Dirección Bounce
- Registro de Dominios — Seed Inicial
- Estado de la Base de Datos
- Veredicto Final y Recomendaciones
- Archivos Modificados — Inventario Completo
- Cronología de Checkpoints
<a id="contexto"></a>
SECCIÓN 1: CONTEXTO Y OBJETIVO
Después de varias iteraciones en el pipeline de migración Google → GoWeBa, este addendum documenta la triple verificación exhaustiva realizada el 16 de junio de 2026, antes del lanzamiento oficial de las migraciones de usuario.
Las fases verificadas cubren todo el ciclo de vida:
| Fase | Alcance | Estado |
|---|---|---|
| M | Migración automatizada (Google Pull API) | ✅ Verificado |
| C | Clasificación V10 (cascada de 12 capas) | ✅ Verificado |
| E | Email Forward/Reply (adjuntos + From) | ✅ Corregido y desplegado |
| A | Pestaña ARCHIVED + cuadrícula 15 tarjetas | ✅ Corregido y desplegado |
| Bounce | Corrección de dirección bounce inbound | ✅ Corregido y desplegado |
| Registro de Dominios | Seed inicial de 333 dominios | ✅ Ejecutado |
<a id="fase-m"></a>
SECCIÓN 2: FASE M — VERIFICACIÓN DEL GOOGLE PULL
2.1 Arquitectura de Recuperación
El módulo lib/migration/google-pull.ts gestiona la extracción de datos de Google mediante APIs nativas (People, Gmail, Calendar, Drive) sin dependencia del paquete googleapis.
2.2 Parámetros de Rendimiento Verificados
| Parámetro | Valor | Justificación |
|---|---|---|
QUERIES_PER_MIN | 200 | Bajo el límite de Gmail de 250/min |
MICRO_BATCH | 8 solicitudes concurrentes | Paralelismo controlado |
DELAY_BETWEEN_BATCHES_MS | 2.400 ms | 8 / 2,4s ≈ 3,33 req/sec = 200/min |
MACRO_BATCH_SIZE | 2.250 | Procesamiento por chunks |
FLUSH_SIZE | 200 | Flush a DB cada 200 emails |
MAX_RETRIES | 4 | Intentos con backoff exponencial |
INITIAL_BACKOFF_MS | 2.000 ms | Backoff inicial (2s → 4s → 8s → 16s) |
MAX_CONSECUTIVE_ERRORS | 20 | Parada de seguridad |
2.3 Mecanismos de Robustez
- Backoff exponencial: 2s → 4s → 8s → 16s + jitter aleatorio de 1s
- Detección de rate limit:
isRateLimitError()detecta códigos HTTP 429 y errores específicos de Google - Parada preventiva: Después de 20 errores consecutivos, la importación se detiene limpiamente
- Flush progresivo: Los emails no se mantienen en memoria — se envían a la DB en lotes de 200
- Logs de progreso: Un log cada ~500 emails con el tiempo transcurrido
2.4 Veredicto
<a id="fase-c"></a>
SECCIÓN 3: FASE C — VERIFICACIÓN DE LA CLASIFICACIÓN V10
3.1 Cascada de 12 Capas
| Capa | Nombre | Confianza | Descripción |
|---|---|---|---|
| 1 | USER SENDER RULES | 1.00 | Reglas de usuario — BLOCK→SPAM, ALLOW→skip |
| 2 | GMAIL STARRED | 0.95 | isStarred=true → URGENT |
| 3 | EXPLICIT URGENCY | 0.92 | Regex jurídico/urgencia (FR/EN/ES) |
| 4 | DOMAIN REGISTRY | 0.90 | lookupDomain() — 333 dominios mapeados |
| 5 | FROM-ADDRESS PATTERNS | 0.88 | noreply→OFFICE, newsletter→JOURNAL |
| 6 | GMAIL CATEGORY LABELS | 0.85 | CATEGORY_SOCIAL→SOCIAL, etc. |
| 7 | SUBJECT LINE PATTERNS | 0.72 | Correspondencia de palabras clave trilingüe |
| 8 | TEMPORAL ANALYSIS | 0.70 | Deadlines→URGENT/IMPORTANT |
| 9 | CONTACT GRAPH | 0.68 | Contacto CRM conocido → IMPORTANT |
| 10 | LLM INTELLIGENCE | variable | GPT-4.1-mini + 6E few-shot |
| 11 | (parte de L10) | — | Few-shot inyectado en el prompt LLM |
| 12 | FALLBACK | 0.10 | NONE |
3.2 Feature Flags
Todos los flags V10 están activados por defecto:
| Flag | Función |
|---|---|
V10_WEBABOX_UI | Interfaz cuadrícula 4×4 |
V10_NEW_CATEGORIES | TRAVEL, SOCIAL, PROMOTIONS |
V10_AUTO_ARCHIVE | Auto-archivo cron 90 días |
V10_CONTACT_CLASSIFIER | Clasificación de tipos de contactos |
V10_SECURITY_SCORER | Puntuación de seguridad de emails |
V10_DOMAIN_REGISTRY | Registro de dominios (capa 4) |
V10_REALTIME_PIPELINE | Pipeline de cascada en tiempo real |
3.3 Veredicto
<a id="fase-e"></a>
SECCIÓN 4: FASE E — CORRECCIÓN EMAIL FORWARD/REPLY
4.1 Problemas Identificados
- Adjuntos no transferidos: Al reenviar, los adjuntos del email original no se incluían.
- Cuenta de envío incorrecta: El selector "From" no se posicionaba en la cuenta del thread.
4.2 Correcciones Aplicadas
compose-modal.tsx— PropinitialAttachments+ lógica de carga (presigned URL → base64)webabox-client.tsx— Adjuntos enreplyComposeStateongoing-client.tsx— Misma propagación para modo thread- Fix de sobreescritura de cuenta:
if (!initialAccountId && ...)
4.3 Veredicto
<a id="fase-a"></a>
SECCIÓN 5: FASE A — PESTAÑA ARCHIVED Y CUADRÍCULA DE 15 TARJETAS
5.1 Cambios de UI
| Antes | Después |
|---|---|
| Pestaña "Unread" arriba | Pestaña "Archived" arriba |
| 16 tarjetas (4×4 con ARCHIVED) | 15 tarjetas (3×4 + 1×3, sin ARCHIVED) |
5.2 Disposición de la Cuadrícula
| Fila | Categorías |
|---|---|
| 1 | Urgent · Important · Conversations · Awaiting |
| 2 | Journal · Office · Reply Later · Set Aside |
| 3 | Travel · Social · Promotions · Clips |
| 4 | Snooze · Spam · Trash |
5.3 Veredicto
<a id="bounce-fix"></a>
SECCIÓN 6: CORRECCIÓN DE DIRECCIÓN BOUNCE
6.1 Problema
Los emails entrantes mostraban direcciones de remitente como bounce+xxx@m.relayfi.com en lugar de la dirección real, haciendo Reply y Forward inutilizables.
6.2 Causa Raíz
Archivo: app/api/webhooks/sendgrid-inbound/route.ts — handleRawMode()
El código extraía correctamente la dirección real del encabezado MIME From:, pero luego la sobrescribía con envelope.from (la dirección técnica de rebote).
6.3 Impacto
| Contexto | Antes | Después |
|---|---|---|
fromEmail en DB | bounce+xxx@m.relayfi.com | remitentereal@dominio.com |
| Función Reply | Responde al bounce | Responde a la persona real |
| Contacto auto-creado | Contacto bounce | Contacto real |
6.4 Limitación Conocida
30 mensajes existentes aún tienen direcciones bounce. Solo los nuevos emails entrantes están corregidos.
6.5 Veredicto
<a id="domain-registry"></a>
SECCIÓN 7: REGISTRO DE DOMINIOS — SEED INICIAL
Durante la verificación se descubrió que la tabla DomainRegistry estaba vacía. Se ejecutó el seed:
- 333 dominios creados (SOCIAL, TRAVEL, PROMOTIONS, JOURNAL, OFFICE)
- La capa 4 de la cascada V10 ahora funciona correctamente
- Mejora en velocidad, precisión y costos de clasificación
<a id="estado-db"></a>
SECCIÓN 8: ESTADO DE LA BASE DE DATOS
8.1 Snapshot — 16 de junio de 2026
| Métrica | Valor |
|---|---|
| Threads de email | 884 |
| Mensajes de email | 1.284 |
| Threads archivados | 184 |
| Contactos | 1.045 |
| Logs de clasificación | 59 |
| Entradas registro de dominios | 333 |
| Proyectos de migración | 9 |
8.2 Distribución de Categorías
| Categoría | Threads | % |
|---|---|---|
| NONE | 781 | 88,3% |
| JOURNAL | 42 | 4,8% |
| IMPORTANT | 32 | 3,6% |
| OFFICE | 17 | 1,9% |
| URGENT | 8 | 0,9% |
| PROMOTIONS | 4 | 0,5% |
<a id="veredicto"></a>
SECCIÓN 9: VEREDICTO FINAL Y RECOMENDACIONES
🟢 EL PIPELINE DE MIGRACIÓN ESTÁ LISTO. Todas las verificaciones pasaron. Las correcciones críticas fueron aplicadas. El registro de dominios fue poblado. El sistema está listo para procesar nuevas migraciones con confianza.
Recomendaciones
- Ejecutar la clasificación V10 sobre los 781 threads
NONEexistentes - Ejecutar el auto-archivo para threads >90 días
- Verificar los primeros emails entrantes después de la corrección bounce
- Considerar un script de corrección retroactiva para los 30 mensajes con direcciones bounce
- Considerar agregar un campo
replyToal modeloEmailMessage
<a id="archivos"></a>
SECCIÓN 10: ARCHIVOS MODIFICADOS
| Archivo | Modificación |
|---|---|
compose-modal.tsx | Prop initialAttachments + presigned URL → base64 + fix cuenta |
webabox-client.tsx | replyComposeState + forward attachments + pestaña ARCHIVED + cuadrícula |
ongoing-client.tsx | composeState + forward attachments |
snapshot/route.ts | Contador archived en totales |
sendgrid-inbound/route.ts | Separación mimeFrom vs envelopeFrom |
<a id="checkpoints"></a>
SECCIÓN 11: CRONOLOGÍA DE CHECKPOINTS
| Fecha | Checkpoint | Descripción |
|---|---|---|
| 15 junio 2026 | Fase E | Forward attachments + From default fix |
| 15 junio 2026 | Fase A | Archived tab + 15-card grid |
| 16 junio 2026 | Bounce Fix | Fix bounce address in fromEmail |
Fin del Addendum 07 — Triple Verificación Migración