Tier 1 — Automatizado Build: ✅ limpio Lint: ✅ limpio en archivos nuevos de Sprint 4 (separé resource-types.ts de resource-display.tsx para sacar 2 warnings de Fast Refresh; quedan 0 errores/warnings nuevos). Quedó 1 error preexistente en ReportPage.tsx (no tocado desde Sprint 3, fuera de scope) y ~102 warnings no-explicit-any preexistentes en tests viejos. Tests unitarios: ✅ 521/521 verdes Tests E2E: ⚠️ 43-44/48 verdes (varía levemente entre corridas) — detalle abajo Auditoría inicial vs. estado final Antes: 39/39 specs (100%) fallaban — ROJO-AUTH puro, todos por #bpmn-file-input nunca apareciendo (esperaban el flujo pre-Sprint-4 directamente en /). Decisión tomada (con tu input): Opción A — sesión real. Creaste el usuario martin.bernal@inquality.com.py; yo verifiqué que no tenía fila en public.users y se la inserté con platform_role='platform_admin'. Implementé tests/e2e/setup/auth-setup.ts como globalSetup de Playwright: hace signInWithPassword, inyecta la sesión real en localStorage con el formato exacto que usa supabase-js v2, y genera tests/e2e/setup/auth-state.json (gitignored) en cada corrida. Fix adicional necesario: todos los specs navegaban a / esperando el input de archivo ahí — ahora vive en /import. Corregí los 18 page.goto('/') → /import, incluyendo reescribir el flujo obsoleto de prod-smoke.spec.ts (esperaba una landing pre-auth que ya no existe). Resultado: 33→43-44 specs pasan. Quedan 5-6 ROJO-OTRO, con dos causas raíz identificadas (no relacionadas con auth, fuera del mandato de esta etapa que pide no reescribir lógica de tests): Botón "Guardar" en ActivityPanel queda deshabilitado (3 specs de PDF) — encontré algo extraño: el texto del botón dice "Guardar cambios" (que solo se renderiza si isDirty=true) pero Playwright lo sigue viendo disabled. Esto contradice la lógica simple de disabled={!isDirty} en el componente — sospecho un bug real de re-render en producción, pero diagnosticarlo a fondo requiere debugging en vivo. Recomiendo abrir esto como bug dedicado en un sprint futuro. 2 specs usan IndexedDB/Dexie directamente (export-pdf.spec.ts, validate-dod-etapa4.spec.ts) — Dexie se eliminó completamente en Etapa 4. Estos tests necesitan reescritura para inyectar datos vía Supabase en vez de IndexedDB — eso sí es "reescribir lógica de tests", explícitamente fuera de este alcance. Los resultados varían levemente entre corridas porque Playwright corre specs en paralelo bajo la misma cuenta de test compartida — puede haber interferencia de datos entre specs concurrentes. Sugiero como mejora futura (no implementada ahora): --workers=1 para diagnóstico determinístico. Entregables nuevos tests/e2e/setup/auth-setup.ts — global setup con sesión real tests/e2e/sprint-4-smoke.spec.ts — 9 tests (4 sin auth: login, redirects de /, /workspace, /recursos; 5 con auth: biblioteca sin 500, sin 406 en simulations, catálogo carga, avatar visible, import navega a workspace) docs/CHECKLIST_ENTREGA.md — las 4 tiers completas .env.test (gitignored) + .env.example documentado .gitignore actualizado (.env.test, auth-state.json) Polish Textos de OwnershipBadge y "Compartir con equipo" ya estaban en español — sin cambios. Tooltip "Disponible próximamente" para "Compartir con equipo": no lo agregué, tal como pedía el propio brief, consultarte antes. ¿Lo querés?
4.4 KiB
Checklist de entrega — InQ ROI
Claude Code ejecuta este checklist ANTES de reportar una etapa como completada. El director ejecuta la sección "Validación visual" para el OK formal.
Tier 1 — Automatizado (bloquea entrega si falla)
Correr en este orden. Si cualquier comando falla, no entregar — corregir primero.
npm run build # 0 errores TypeScript, bundle generado
npm run lint # 0 errores ESLint
npm run test # todos los tests Vitest verdes (reportar N/N)
npx playwright test # todos los E2E verdes (reportar N/N)
Reportar en el mensaje de entrega:
- Build: ✅ limpio / ❌ N errores
- Lint: ✅ limpio / ❌ N warnings/errors
- Tests unitarios: ✅ N/N verdes
- Tests E2E: ✅ N/N verdes
Nota sobre E2E con auth: los specs que requieren sesión usan test.use({ storageState: 'tests/e2e/setup/auth-state.json' }). Ese archivo lo genera el globalSetup (tests/e2e/setup/auth-setup.ts) automáticamente al correr npx playwright test, usando el usuario de test (TEST_USER_EMAIL/TEST_USER_PASSWORD en .env.test, gitignored). Si .env.test no existe, el setup avisa por consola y los specs con auth fallan — no es necesario ningún paso manual previo más allá de tener .env.test configurado una vez.
Tier 2 — Deploy check (post-deploy en inq-roi.inqualityhq.com)
Abrir DevTools → Network tab. Realizar estas acciones y verificar:
| Acción | Verificar |
|---|---|
Cargar biblioteca (/) |
Sin 500, sin 406 en simulations |
| Abrir cualquier proceso en workspace | Sin 500, activities y gateways con 200 |
Abrir catálogo de recursos (/recursos) |
Sin 500, tabla carga con datos |
| Exportar PDF (cualquier proceso simulado) | Sin errores en consola, archivo descargado |
Tier 3 — Validación visual (director)
Esta sección la completa el director. Claude Code NO puede aprobarla.
Siempre verificar
- Header muestra avatar del usuario logueado
- Ningún texto dice "Process Cost Platform" (nombre viejo)
- Marca "InQ" escrita correctamente (no INQ, no Inq)
- Botones primarios en naranja
#F59845
Por área (verificar si la etapa tocó esa área)
Biblioteca
- Procesos cargan sin spinner infinito
- "Actualizado por [nombre]" visible en tarjetas
- Toggle Todos/Míos funciona
Workspace
- BPMN canvas renderiza el diagrama
- ActivityPanel abre al hacer click en una actividad
- ResourcesPanel muestra recursos usados en el proceso
Catálogo de recursos
- Tabla muestra recursos con badges de tipo coloreados
- Búsqueda por nombre funciona
- Filtro por tipo funciona
- Crear/editar recurso guarda en Supabase y aparece en la lista
- Recurso con costo
0.037muestra$0.037(no$0.04)
Auth
- Login muestra selector de cuentas de Google
- Logout redirige a
/login - Sin sesión, cualquier ruta protegida redirige a
/login
PDF (si la etapa tocó PDF)
- Footer dice "Powered by InQuality"
- Sin caracteres rotos ni encodings incorrectos
Tier 4 — Integridad de datos (si la etapa tocó schema o repos)
Correr en Supabase Studio SQL Editor:
-- Sin procesos huérfanos (sin owner)
SELECT COUNT(*) FROM processes WHERE owner_id IS NULL; -- debe ser 0
-- Sin actividades huérfanas
SELECT COUNT(*) FROM activities a
LEFT JOIN processes p ON p.id = a.process_id
WHERE p.id IS NULL; -- debe ser 0
-- Sin recursos con tipo inválido
SELECT DISTINCT type FROM resources;
-- debe mostrar solo: person, role, system, equipment, supply
Nota sobre regresiones de PDF
Los tests E2E de PDFs (etapa-4-pdfs.spec.ts etc.) son la red de contención para regresiones de PDF.
Si se tocó cualquier cosa de exportación o cálculos, correr específicamente:
npx playwright test tests/e2e/export-pdf.spec.ts tests/e2e/export-roi.spec.ts
Setup del usuario de test E2E (referencia, una sola vez por entorno)
- Supabase Studio → Authentication → Add user (email/password, NO Google OAuth)
- SQL Editor:
insert into public.users (id, name, platform_role) values ('<uuid del usuario creado>', 'Nombre Test E2E', 'platform_admin'); - Completar
.env.test(gitignored, ver.env.example):TEST_USER_EMAIL=... TEST_USER_PASSWORD=... npx playwright testgeneratests/e2e/setup/auth-state.jsonautomáticamente en cada corrida (también gitignored).