TRAID · Specs de arranque · 23 de julio 2026

Qué hacemos ahora en cada proyecto

Plan ejecutable por cliente, según las instrucciones de Nacho + el relevamiento verificado de hoy. Cada sección se lanza en su propio repo.

Las instrucciones de Nacho (fuente de autoridad del "qué")

0 · Regla de tokens — vale para los tres

Esto lo ordenó Nacho y ya lo aplicamos: n8n es el ÚNICO que refresca el token. La app solo LEE de Postgres. Cero OAuth propio.

PiezaQué haceEstado hoy
Webhook (n8n)Arranque, una vez: el cliente aprueba en ML → siembra el primer token en Postgres.
Cron (n8n)Mantenimiento, cada 2 h: agarra el refresh y pide un access nuevo (el access dura 6 h). Es "el que trae el refresh".
La appLectora pura: getAccessToken() hace un SELECT. Ante un 401: un solo reintento que RE-LEE de Postgres. Jamás refresca.a construir (packet lector ~40 líneas)
VigilanciaComo la app ya no se auto-cura, hace falta errorWorkflow + aviso si un cron se cae o un token vence.a montar

Se cae del plan viejo todo el OAuth propio con candado (el "auth como el SaaS"). El packet @traid/ml-oauth pasa de módulo de login a lector. Lo único que se porta del SaaS es la taxonomía de errores terminal/transitorio de traid-saas/packages/ml/src/oauth.ts (classifyTokenError).

⚠️ El riesgo que esto asume (ya visto en vivo) Con n8n como único refrescador y sin alertas, si un cron se cae un domingo nadie se entera. Ya pasó: el callback de electrónica-ar estuvo 14 días en rojo en silencio. Por eso la vigilancia no es opcional.

1 · Gráfica Límite

Arranca ya — no depende de ML

Sebastián · Argentina (MLA) · repo traid-grafica-limite (fork de electronica-ar)

Meta de Nacho: levantarle la primera fase del ERP con el material que ya mandó (Excel + documento funcional), para mostrarle una primera versión pronto. NO es su cuenta de ML — es su planilla.

Qué ya está hecho (verificado)

PiezaRutaEstado
Motor de packaging / combos (función pura)traid-grafica-limite/lib/packaging/packaging.ts (151 L)24/24 tests ✓
Scaffold Next 16 + buildrepobuild verde

Qué construir para la "primera versión mostrable"

  1. Mergear el PR #1 (rama feat/f0-1-scaffold-packaging) — hoy main no tiene ni el scaffold ni el motor.
  2. Portar la pantalla del demo al repo, detrás del login. Reuso: TRAID/src/pages/DemoSebastianPage.tsx (390 L) + TRAID/src/lib/demoData.ts (90 L). Reescribir de React Router a Next 16.
  3. Componentes de tablero: traid-electronica-ar/components/dashboard/ (8 archivos: kpi-card, page-header, empty-state, coverage-panel…).
  4. Construcción nueva: importador de Excel (agregar dependencia xlsx), panel de números gruesos, estado vacío explicativo, y las primeras tablas Drizzle skus + presentaciones con RLS inline en la misma migración.
Lo primero que Seba ve: vista de stock por SKU base + simulador de venta, con su planilla. Aprieta "vender 1×10" y ve bajar 0,20 bultos del SKU base y recalcularse las presentaciones. No depende del click de ML. La diferencia con el demo del 10/07: ahora queda guardado y es suyo (persistido, detrás de su login).

Lo que espera al token de ML (después del auth)

Catálogo de ~2.000 publicaciones + sync. Portar de electronica-ar: lib/ml/oauth-token-manager.ts (65 L), items-api.ts (122 L), catalog-sync.ts (317 L, modo scan), lib/sync/sync-runs.ts (210 L). Cambiar MLA→MLA y sebastiansebagrafica.

🚦 Bloqueo de datos ML: el auth pendiente El callback de Gráfica está sano pero la tabla está vacía y no hay refresh recuperable (verificado: nunca se completó una autorización). Necesita que Seba/Nacho abran la URL de authorize real (MLA). Esto NO frena la primera versión mostrable (pasos 1-4), que corre con el Excel.

2 · Acero Plancheta

Arranca lectura — escritura espera re-auth

Gonza · Argentina (MLA), 2 cuentas · repo traid-acero-plancheta a crear · Neon crimson-frost-03476773 ya existe

Meta de Nacho: promociones + plataforma de métricas. Traducción exacta al alcance vendido: promociones = módulo #4 (central de promos con semáforo) · métricas = módulo #6 (plataforma de estadísticas). Nada más en esta tanda.

Fundación (lo único 100% autónomo hoy)

  1. Crear repo traid-acero-plancheta + Vercel. Fork del patrón de traid-electronica-ar (MLA + Neon + Drizzle, 620 tests verdes) — NO de traid-hernan.
  2. Migración 0000: ml_oauth_tokens por account_id UUID con índice único real + RLS ENABLE. El lector de token de ~40 líneas.

Promociones (módulo #4) — reuso exacto

PiezaRuta origen
Filas del centro de promostraid-electronica-ar/lib/promos/centro-rows.ts (319 L)
Comisión real de ML (no hardcodeada)traid-electronica-ar/lib/charges/mla.ts (101 L)
API de promostraid-electronica-ar/lib/ml/promos-api.ts
Pantalla (declara "SOLO LECTURA de ML")traid-electronica-ar/app/(dashboard)/promociones/centro/ (page 59 L + client 515 L)

Semáforo (necesita el costo)

Packet traid-saas/packages/costos/src (13 archivos, 93 tests, dep @traid/port) + traid-electronica-ar/lib/costos/import.ts + lib/promos/margen-iva.ts (141 L, IVA AR 21/10,5) + lib/promos/resolve-tasa-iva.ts (49 L).

Métricas (módulo #6) — reuso exacto

Las 12 vistas materializadas de traid-pablo/supabase/migrations/20260526_materialized_views.sql (362 L): daily_revenue (evolución) · pareto_products (ranking 80/20) · neto_meli_monthly (cargos desglosados). Cambiar account_label texto → account_id UUID y limpiar el filtro is_whitelabel (concepto del negocio de Pablo).

Lo primero que Gonza ve: "Un saque por publicación" — cada publicación con sus ofertas de ML, el % que fija ML, cuánto pone ML de su bolsillo y lo que le queda. Read-only, no escribe a ML, y no necesita el Excel (sin costo, el margen muestra un guion, nunca un número inventado).
✓ El token ya funciona (parcial) 1 fila viva El cron ya siembra: 1 cuenta autorizada, access vigente. Como casi todo lo que pidió Nacho es LECTURA (semáforo, métricas, ads read-only), se puede arrancar con este token ya.
⚠️ Lo que espera re-auth de Gonza 2 pendientes (a) El token actual es read-only → enrolar promos (escritura) necesita re-autorizar con scopes offers+metrics. (b) Falta la 2ª cuenta. (c) El Excel de costos de Gonza para que el semáforo tenga color (sin él, todo en "sin costo").
Prohibido copiar traid-hernan 11 de 36 módulos de su promo-enroller traen economía de Colombia (IVA 19%, envíos en COP, comisiones MCO hardcodeadas, seller_id de Hernán en el código). En una fábrica argentina, el semáforo mostraría márgenes falsos el día 1. El drop-in correcto es electronica-ar.

3 · Alan Balanceado

Solo higiene — cero build

Sin deal firmado · 3 cuentas MLA · Neon crimson-breeze-34033409

Meta de Nacho: "todavía nada, vos tranqui". Cero features. Lo que SÍ corresponde es higiene (es el único con tokens vivos) + evaluar los bots de Vito.

Higiene (no consume horas de fee)

  1. Sacar la sticky note con los tokens de Plancheta que está dentro del workflow de Alan (fuga cruzada entre clientes).
  2. Migrar el cron a leer el refresh de Postgres en vez del literal congelado (mismo patrón sano). STOP-humano: cuenta viva, ~300 ventas/día.
  3. errorWorkflow + alerta en los callbacks y sacar onError=continueRegularOutput de los nodos Postgres (o chequeo por conteo de filas).

Bots de Vito / iupi — evaluar antes de replicar

⚠️ Los bots de Vito están en sombra Verificado: el nodo que publica la respuesta a ML (SEND HTTP ANSWER3) está deshabilitado. Ningún comprador de iupi recibió nunca una respuesta. Replicar ahora es copiar una promesa, no un resultado.

Antes de replicar: una sesión para sacar un bot de sombra en Vito (banco de pruebas traid-vito/docs/SPEC-...banco-pruebas-bots-gate-golive.md, npm run bots:test-loop). Camino de replicado ya probado: mati-satine-software/docs/kit-bots-portable/ (así nació Vito). Si es para el producto, el origen correcto es traid-saas/packages/agents, no traid-vito.

Lo primero "mostrable" de Alan: nada de build — y está bien. Lo operativo: sus 3 cuentas conectadas, renovándose solas y con alerta si se caen, que hoy no tienen.

Orden de ejecución y qué bloquea a qué

#QuéDepende deEstado
0Higiene de tokens transversal (errorWorkflow + alertas + cron de Alan leyendo de DB)nadiea hacer
1Gráfica — primera versión mostrable (packaging + Excel, sin ML)nadie · el material ya estáarranca ya
2Plancheta — fundación + promos/métricas en LECTURAtoken read-only (ya vivo)arranca ya
1bGráfica — catálogo + dashboard con datos ML realesauth de Sebabloqueado
2bPlancheta — escritura de promos + 2ª cuenta + semáforo con colorre-auth de Gonza (scopes) + Excel de costosbloqueado
3Alan — higiene de seguridadnadiea hacer
3bAlan — bots (evaluación, no replicado)sacar 1 bot de sombra en Vitocondicionado

La lectura corta: Gráfica y Plancheta arrancan hoy sin depender de nadie (Gráfica con el Excel, Plancheta con el token de lectura que ya vive). Lo que necesita el click del cliente es la segunda mitad de cada uno (datos ML reales / escritura). Alan es solo higiene. El auth de Gráfica corre en paralelo — se lo pedimos a Nacho/Seba mientras construimos lo que no lo necesita.