# 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.

```bash
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.037` muestra `$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:

```sql
-- 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:
```bash
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)

1. Supabase Studio → Authentication → Add user (email/password, NO Google OAuth)
2. SQL Editor:
   ```sql
   insert into public.users (id, name, platform_role)
   values ('<uuid del usuario creado>', 'Nombre Test E2E', 'platform_admin');
   ```
3. Completar `.env.test` (gitignored, ver `.env.example`):
   ```
   TEST_USER_EMAIL=...
   TEST_USER_PASSWORD=...
   ```
4. `npx playwright test` genera `tests/e2e/setup/auth-state.json` automáticamente en cada corrida (también gitignored).
