Files
inq-roi-simulador-web/OBSERVATIONS.md
2026-07-06 18:52:24 -03:00

75 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# OBSERVATIONS — Sprint 6
> Hallazgos descubiertos durante el sprint actual.
> Este archivo se vacía al cerrar el sprint: los hallazgos se promocionan a TECH_DEBT.md o BACKLOG.md, o quedan resueltos.
>
> **Sprint 5 cerrado el 2026-06-23.** Observaciones archivadas — ítems migrados a BACKLOG.md y TECH_DEBT.md.
---
## Convención de etiquetas
- `[CURRENT-SPRINT]` — Se resuelve en este sprint
- `[DEFERRED-TECH-DEBT]` — Se va a TECH_DEBT.md al cerrar el sprint
- `[DEFERRED-BACKLOG]` — Se va a BACKLOG.md al cerrar el sprint
- `[RESOLVED]` — Resuelto durante el sprint, archivar al cierre
---
## Hallazgos activos
*(vacío)*
---
## Hallazgos resueltos durante el sprint
### [RESOLVED] Etapa 3 — Fix localStorage key + setTimeout cleanup + specs E2E de auth
**Bug real confirmado:** `ProfileSheet.getAccessToken()` leía `'supabase.auth.token'` (clave inexistente en supabase-js v2). El guardado de nombre y empresa nunca llegó a Supabase desde que se implementó ProfileSheet en Sprint 4. Fix: calcular `sb-${projectRef}-auth-token` igual que auth-setup.ts. Verificado end-to-end: PATCH 204 + reload confirma persistencia.
**setTimeout(350) eliminado:** fix de sheet.tsx es suficiente por sí solo.
**Specs E2E:** `auth-localStorage-key.spec.ts` (diagnóstico de clave) y `auth-real.spec.ts` (validación de auth real). 552 tests, 11/11 E2E verdes.
**OK formal del director:** 2026-06-24.
### [RESOLVED] Etapa 1 — Logo InQuality en header de PDFs (págs 2+)
**Observación 1:** Claude Code implementó inicialmente el logo con dimensiones hardcodeadas (32×9mm, ratio 3.56:1) cuando el PNG real es 724×474px (ratio 1.53:1) → logo aplastado horizontalmente. Fix: pasar dimensiones reales del bitmap y calcular el alto proporcional en `drawSharedHeader`.
**Observación 2:** Claude Code agregó "UN PRODUCTO DE InQ InQuality" y logo en la portada (página 1) sin que estuviera en el scope del prompt — violación de la restricción explícita "No agregar el logo en páginas 1 con su propio diseño de portada." Revertido en fix posterior.
**Aprendizaje del método:** cuando el prompt incluye restricciones del tipo "NO hacer X en archivo Y", el agente puede introducir el cambio equivalente en archivos relacionados no listados. Auditar activamente los archivos adyacentes al scope declarado.
**Resultado final:** logo isotipo a 15mm de ancho, alto proporcional (~9.8mm), páginas 2+ de los 3 PDFs. Portada intacta. whitespace-nowrap en MetricCell de Eficiencia incluido como fold-in.
**OK formal del director:** 2026-06-24.
---
### [RESOLVED] Etapa 2 — Panel de análisis de sensibilidad
**Resultado:** SensitivityPanel con dos sliders nativos (volumen -50%/+100%, inversión -50%/+100%), badge "Análisis activo", botón Restablecer. adjustedRoi via useMemo en ReportPage, sin re-simulación. Versión wow implementada: doble línea en CumulativeSavingsChart (base gris dashed + área sombreada + ajustada naranja). 552 tests (542 + 10 nuevos).
**Fix post-validación:** layout del tab ROI reordenado — CumulativeSavingsChart sube por encima de ComparisonTable para mantener adyacencia con los sliders y la doble línea del gráfico. ComparisonTable queda como detalle granular al final.
**Nota técnica a documentar:** CumulativeSavingsChart deriva la inversión original del base case desde `roiBase.cumulativeSavingsHorizon` algebraicamente en lugar de recibir prop `investmentBase`. Correcto hoy (horizonYears del chart = horizonYears de calculateRoi), frágil si divergen. Registrar en TECH_DEBT.md al cerrar el sprint.
**OK formal del director:** 2026-06-24.
## Hallazgos diferidos (promocionar al cerrar sprint)
### [DEFERRED-TECH-DEBT] Selector frágil en auth-real.spec.ts
`tests/e2e/auth-real.spec.ts` usa `header button[title]` para encontrar el avatar del usuario en AppHeader. Si el atributo `title` cambia, el test rompe sin advertencia. Candidato a agregar `data-testid="app-header-user-btn"` en una etapa futura (mismo patrón que `save-activity-btn`).
**Migrar a:** TECH_DEBT.md al cerrar Sprint 6.
---
## Notas operativas
- Los hallazgos resueltos quedan acá hasta el cierre del sprint. Al cerrar, se archiva o purga.
- Los hallazgos sin resolver se promocionan a `TECH_DEBT.md` o `BACKLOG.md` según corresponda.
- Este archivo NO contiene roadmap futuro ni deuda histórica — solo hallazgos del sprint en curso.
---
## Cierre del sprint (checklist)
Cuando el sprint cierre, ejecutar:
```
[ ] Verificar que todos los items [CURRENT-SPRINT] están RESOLVED
[ ] Mover items [DEFERRED-TECH-DEBT] a TECH_DEBT.md (si no están ya)
[ ] Mover items [DEFERRED-BACKLOG] a BACKLOG.md (si no están ya)
[ ] Archivar o purgar este archivo
[ ] Crear OBSERVATIONS.md vacío para el sprint siguiente
```