onboarding-debug-001
Cultiva Growth SaaS 76.4 s 3 errores 3 páginas
Duración total
76.4s
3 páginas · 76.400 ms
Eventos CDP totales
420
Network · Console · Page · Runtime
Fallos de red
2
CORS bloqueado + timeout 429
Screenshots capturadas
38
Intervalo 2 s · DOM dumps: 38
Resumen sesión
Página 0 · /signup
Página 1 · /plan
Página 2 · /payment ⚠
🔍
Diagnóstico automático — Causa raíz identificada
⚠ Fallo principal: CORS bloqueado en /onboarding/payment (Página 2)

La llamada a https://api.stripe.com/v1/payment_intents es bloqueada por el navegador con error CORS policy: No 'Access-Control-Allow-Origin' header. El origen de la petición es https://app.cultivagrowth.io, pero el servidor proxy intermedio (payment-proxy.cultivagrowth.io) no incluye la cabecera Access-Control-Allow-Origin cuando el método es POST con Content-Type: application/json. La petición OPTIONS preflight (t=+38.211 s) recibe 200 OK pero sin las cabeceras CORS requeridas, bloqueando la petición principal. El componente React de Stripe no maneja este rechazo y se desmonta sin mostrar mensaje de error — pantalla en blanco.

⚠ Problema secundario: Rate limiting 429 en /api/plans (Página 1)

La petición GET /api/plans?currency=EUR recibe un 429 Too Many Requests en el 2.º intento (t=+18.441 s). El cliente React hace retry sin backoff exponencial, causando un bucle de 3 peticiones en 800 ms. No impide el flujo pero añade 1.2 s de latencia.

Solución recomendada

1. Añadir cabeceras CORS en payment-proxy.cultivagrowth.io: Access-Control-Allow-Origin: https://app.cultivagrowth.io y Access-Control-Allow-Methods: POST, OPTIONS en la respuesta al preflight.

2. Añadir manejo de error en el componente <PaymentForm> para capturar TypeError: Failed to fetch y mostrar mensaje al usuario en lugar de desmontar silenciosamente.

3. Implementar retry con backoff en /api/plans: usar retry-after header o backoff de 200/400/800 ms con máximo 3 intentos.

Timeline de eventos clave
+0.241 s 200 OK Document cargado — signup.html (1.2 KB)
Network.responseReceived · Document · TTFB 241 ms
+1.433 s 200 OK POST /api/auth/register — cuenta creada
XHR · 387 ms · body: {email, plan_intent: "pro"}
+18.441 s 429 GET /api/plans?currency=EUR — Rate limit hit
Retry-After: 1 s · cliente no respeta cabecera · reintentos sin backoff (x3)
+38.211 s 200 OK OPTIONS preflight a payment-proxy.cultivagrowth.io — sin cabeceras CORS
200 OK pero Access-Control-Allow-Origin ausente · Browser bloqueará POST
+38.219 s CORS ERR POST a payment-proxy.cultivagrowth.io BLOQUEADO
Network.loadingFailed · errorText: "CORS policy: No 'Access-Control-Allow-Origin' header"
+38.221 s JS ERR TypeError: Failed to fetch — sin handler, componente se desmonta
Console.exceptionThrown · source: PaymentForm.tsx:142 · pantalla en blanco
+38.224 s UNHANDLED React: "Uncaught Error: Cannot read properties of undefined (reading 'id')"
Runtime.exceptionThrown · stackTrace → PaymentIntent.js:88 → PaymentForm.tsx:198
Peticiones de red — Página 2 /payment (extracto)
Estado Método URL Tipo Tamaño Duración Inicio
200 GET paymentapp.cultivagrowth.io/onboarding/payment Document 2.1 KB 188 ms +18.021 s
200 GET main.chunk.jscdn.cultivagrowth.io/static/js Script 142 KB 412 ms +18.209 s
200 GET js.stripe.com/v3/ Script 88 KB 321 ms +18.631 s
200 POST /api/payment/initapp.cultivagrowth.io XHR 0.8 KB 234 ms +19.441 s
200 OPTIONS preflight CORSpayment-proxy.cultivagrowth.io Preflight 0 B 91 ms +38.211 s
CORS POST BLOQUEADOpayment-proxy.cultivagrowth.io/stripe-proxy XHR 0 ms +38.219 s
200 GET m.stripe.com/6/m.js Script 12 KB 198 ms +40.112 s
>_
Consola DevTools — Errores capturados
4 errores 1 advertencia 7 logs Página 2 /payment · t +38 s
+18.441 s WARN React: Each child in a list should have a unique "key" prop. at PlanCard (PlanCard.tsx:23) pg 1
+38.219 s ERROR Access to fetch at 'https://payment-proxy.cultivagrowth.io/stripe-proxy' from origin 'https://app.cultivagrowth.io' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. pg 2
+38.221 s ERROR TypeError: Failed to fetch at PaymentForm.tsx:142:18 at async submitPayment (PaymentForm.tsx:98:5) pg 2
+38.223 s ERROR Uncaught TypeError: Cannot read properties of undefined (reading 'id') at PaymentIntent.js:88:14 at PaymentForm.tsx:198:9 at commitHookEffectListMount (react-dom.production.min.js:212:26) pg 2
+38.226 s ERROR The above error occurred in the <PaymentForm> component. React will try to recreate this component tree from scratch using the error boundary. (No boundary found — unmounting tree) pg 2
Desglose por página — dominios CDP
Página 0 · /signup
60
eventos · 5.9 s · 0 errores
Página 1 · /plan
143
eventos · 12.1 s · 1 warn (429)
Página 2 · /payment
217
eventos · 58.4 s · 3 errores críticos
Distribución de eventos — Página 2
Network
98 ev
Page
61 ev
Runtime
37 ev
Console
14 ev
Log
7 ev
Red — Página 2 por tipo
Document
2
Script
5
XHR / fetch
9
Imagen
1
Fallidas
1
$
Comandos query.mjs usados en este análisis
# Listado de páginas del run
node scripts/query.mjs onboarding-debug-001 list

  pid  url                                         events  errors  duration
  ───  ──────────────────────────────────────────  ──────  ──────  ────────
    0  https://app.cultivagrowth.io/signup              60       0    5.9 s
    1  https://app.cultivagrowth.io/onboarding/plan    143       1   12.1 s
    2  https://app.cultivagrowth.io/onboarding/payment 217       3   58.4 s

# Todos los errores de la página 2
node scripts/query.mjs onboarding-debug-001 errors 2

  [+38.219s] Network · CORS · payment-proxy.cultivagrowth.io/stripe-proxy
  [+38.221s] Console · error · TypeError: Failed to fetch (PaymentForm.tsx:142)
  [+38.223s] Console · error · Cannot read properties of undefined 'id' (PaymentIntent.js:88)

# Peticiones fallidas en toda la sesión
jq -c '.params' .o11y/onboarding-debug-001/cdp/network/failed.jsonl

  {"url":"https://payment-proxy.cultivagrowth.io/stripe-proxy","errorText":"net::ERR_FAILED","blockedReason":"CORS"}

# Hosts más activos por request count
node scripts/query.mjs onboarding-debug-001 hosts

  host                               requests  failed  bytes
  ─────────────────────────────────  ────────  ──────  ─────
  app.cultivagrowth.io                     14       0  48 KB
  cdn.cultivagrowth.io                      5       0  312 KB
  js.stripe.com                             3       0  102 KB
  payment-proxy.cultivagrowth.io            2       1  0 B   ← CORS fail
{}
manifest.json — metadatos del run
{
  "runId": "onboarding-debug-001",
  "target": "ws://localhost:9222/devtools/browser/4f2a1...",
  "domains": ["Network", "Console", "Runtime", "Log", "Page"],
  "started_at": "2026-06-16T09:14:00.000Z",
  "stopped_at": "2026-06-16T09:15:16.400Z",
  "sample_interval_ms": 2000,
  "screenshots_taken": 38,
  "dom_dumps": 38,
  "total_events": 420,
  "pages": 3
}
trazado-navegador-cdp · CULTIVA IA · run: onboarding-debug-001 Generado: 2026-06-16 09:15:17 UTC · Apache-2.0