# OBSERVATIONS — Sprint 5 > 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 4 cerrado el 2026-06-18.** 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 ### [RESOLVED] Etapa 1 — Workspace loading fix + carry-over skeleton **Estado:** OK formal del director — 2026-06-19. **Fix principal:** `process-store.ts` y `useReportData.ts` usaban `getSession()` sin timeout; reemplazados por `getSessionSafe()`. Error Boundary + estado `error` inline con retry button agregados. **Carry-over a Etapa 2:** `WorkspaceSkeleton.tsx` fue creado pero el spinner del router-level guard (TanStack Router) intercepta antes de que el componente monte. El skeleton no aparece en la práctica. Corregir en Etapa 2 como Fix 0 (bajo esfuerzo). **SupabaseAuthService.ts:** su `getSession()` directo documentado como excepción intencional (necesita el objeto sesión real, no es barrera descartable). Sin callers activos. Migrar a `getSessionSafe()` cuando tenga callers — pendiente registrar en TECH_DEBT. --- ## Hallazgos resueltos durante el sprint ### [RESOLVED] Etapa 2 — Zoom BPMN fix + controles + skeleton **Estado:** OK formal del director — 2026-06-19. **Fixes:** fit-viewport `'auto'` agregado (una línea), zoom-in/zoom-out en esquina inferior derecha (Lucide icons, 1.2x factor, límites 0.1x–4x), skeleton wired correctamente en WorkspacePage (guard `isLoading` simple sin `!currentProcess`). **Carry-over a Etapa 3:** controles de zoom solapan el logo bpmn.io (esquina inferior derecha). Fix: mover a esquina inferior izquierda (`left: 12` en lugar de `right: 12`). Una línea CSS. --- ### [RESOLVED] Etapa 3 — Heatmap gradiente 4 stops + persistencia de modo + zoom position **Estado:** pendiente OK formal del director. **Fixes Etapa 3:** - `colors.ts`: gradiente continuo verde→amarillo→naranja→rojo (interpolación genérica N-stops), modos `'percentile'`/`'minmax'` reemplazan `'relative'`/`'absolute'` - `useHeatmapMode.ts` (hook nuevo): persiste preferencia en `localStorage` con lazy initializer en `useState` - `ReportPage.tsx`: reemplaza `useState('relative')` por `useHeatmapMode()` - `BpmnCanvas.tsx`: zoom-in/zoom-out movidos de `right:12` a `left:12` (evita solapar logo bpmn.io) - PDF: leyenda de 4 stops con interpolación. Tests: 528 Vitest verdes. E2E recalibrados con distancia euclidiana. **Fixes Etapa 3B verificados (incluidos en Etapa 3):** - Fix 1 (repintado de canvas al cambiar toggle): `mode` ya estaba como dependencia del `useEffect` en `HeatmapCanvas.tsx` desde el MVP. El bug fue observado durante implementación intermedia; resuelto con los renombres de Etapa 3. - Fix 2 (persistencia localStorage): `useHeatmapMode()` con lazy initializer correcto; `ReportPage` usa el hook. - Fix 3 (zoom position): `left: 12` en `BpmnCanvas.tsx`. --- ## Hallazgos diferidos (promocionar al cerrar sprint) *(vacío)* --- ## 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 ```