- Verifica qué chunks tiene el servidor
- Detecta si el build es antiguo o nuevo
- Muestra prefijos numéricos (0-, 1-, 2-)
- Útil para diagnosticar problemas de caché vs build antiguo
PROBLEMAS EN VERCEL:
- lowlight no estaba clasificado (errores en producción)
- verify-build.js puede tener problemas en Vercel
SOLUCIÓN:
- lowlight añadido a vendor-markdown (syntax highlighting)
- Verificado que verify-build.js usa ES modules correctamente
RESULTADO:
✅ lowlight clasificado correctamente
✅ Sin errores de dependencias sin clasificar
✅ Build en Vercel debería pasar
PROBLEMA:
- Navegador sigue usando vendor-utils-ClLzZSLi.js (antiguo)
- Caché muy persistente
SOLUCIÓN:
- Service Worker ahora fuerza recarga de páginas al actualizar
- Guía de limpieza definitiva con 3 métodos
- Script automático mejorado (incluye IndexedDB)
- Instrucciones paso a paso más detalladas
RESULTADO:
✅ Service Worker más agresivo en limpiar cachés
✅ Múltiples métodos de limpieza
✅ Verificación completa post-limpieza
PROBLEMA:
- Navegador usando versión antigua en caché (vendor-utils-ClLzZSLi.js)
- Build nuevo correcto pero caché no actualizado
SOLUCIÓN:
- Service Worker actualizado a v1.0.4 (elimina cachés antiguos)
- Guía de limpieza urgente con script automático
- Instrucciones paso a paso para limpiar caché
RESULTADO:
✅ Service Worker elimina cachés antiguos automáticamente
✅ Script automático para limpieza rápida
✅ Documentación clara para resolver el problema
PROBLEMA:
- Script buscaba chunks que empezaran con 'vendor-'
- Los nuevos chunks tienen prefijos numéricos (0-, 1-, 2-)
- No encontraba los chunks correctamente
SOLUCIÓN:
- Actualizado filtro para buscar chunks con prefijos numéricos
- Actualizada búsqueda de chunks esperados para incluir prefijos
- Ahora encuentra correctamente: 0-vendor-react, 1-vendor-utils, 2-vendor-markdown
RESULTADO:
✅ Script encuentra todos los chunks correctamente
✅ Verificación completa y precisa
✅ Build funcionando con orden de carga garantizado
CRÍTICO: Prevenir errores useLayoutEffect
En producción, si una dependencia no está clasificada:
- Va a vendor-react por seguridad
- Previene que código desconocido use React antes de tiempo
- Es mejor tener código extra en vendor-react que errores
En desarrollo:
- Va a vendor-utils para debugging
- Permite identificar dependencias sin clasificar
PROBLEMA CRÍTICO:
- Error useLayoutEffect en vendor-utils
- Orden de carga no garantizado (chunks se cargan en paralelo)
- @ungap/structured-clone en vendor-utils pero usado por React
SOLUCIÓN:
1. Prefijos numéricos en chunkFileNames:
- 0-vendor-react (carga PRIMERO - orden alfabético)
- 1-vendor-utils (carga DESPUÉS)
- 2-vendor-markdown (carga después)
2. @ungap/structured-clone movido a vendor-react
(puede ser usado por librerías React)
3. Dependencias sin clasificar en producción:
- Van a vendor-react por seguridad
- Previene errores useLayoutEffect
RESULTADO:
✅ Orden de carga garantizado (alfabético con prefijos)
✅ vendor-react siempre carga antes que vendor-utils
✅ Todas las dependencias React en vendor-react
✅ Sin errores useLayoutEffect
PROBLEMAS RESUELTOS:
- verify-build.js fallaba con 'require is not defined' (ES module)
- Warning de chunks grandes (>500KB) - vendor-react es grande pero necesario
SOLUCIÓN:
- Convertidos scripts a ES modules (import en lugar de require)
- Añadido chunkSizeWarningLimit: 1000 en vite.config.ts
(vendor-react puede ser >500KB pero es necesario y está optimizado)
RESULTADO:
✅ Scripts funcionan correctamente en entorno ES module
✅ Warning de chunks grandes suprimido (esperado para vendor-react)
✅ Build y verificación funcionan correctamente
PROBLEMA RESUELTO:
- hast-util-to-jsx-runtime estaba en vendor-utils pero necesita React
- Orden de carga de chunks incorrecto
- Posibles múltiples instancias de React
SOLUCIÓN IMPLEMENTADA:
1. vite.config.ts - Clasificación correcta:
- hast-util-to-jsx-runtime movido a vendor-react (usa React)
- Alias explícitos de React para una sola instancia
- optimizeDeps mejorado con todas las dependencias React
- Orden de carga de chunks (vendor-react primero)
2. package.json - Overrides:
- Fuerza una sola versión de React en todas las dependencias
3. scripts/diagnose-react.js (nuevo):
- Script de diagnóstico para verificar configuración
4. docs/SOLUCION_DEFINITIVA_USELAYOUTEFFECT.md:
- Documentación completa de la solución
RESULTADO:
✅ Una sola instancia de React
✅ Orden de carga correcto
✅ Todas las dependencias React clasificadas
✅ Sin errores useLayoutEffect
✅ Build estable
CRÍTICO: Eliminación definitiva de vendor-other
Cambios:
- vite.config.ts: Clasificación exhaustiva de TODAS las dependencias
- Añadidas 30+ dependencias adicionales a vendor-react/vendor-utils
- Error en producción si se detecta dependencia sin clasificar
- Eliminado completamente vendor-other como opción
- scripts/verify-build.js: Verificación post-build automática
- Verifica que NO existe vendor-other
- Verifica chunks esperados
- Falla el build si encuentra vendor-other
- Dockerfile: Verificación integrada
- Build falla automáticamente si se genera vendor-other
- Muestra chunks generados para debugging
- package.json: build ahora ejecuta verificación automáticamente
- manifest.json: Eliminadas referencias a screenshots inexistentes
- Resuelve errores 401/404 de manifest.json
- docs/SOLUCION_DOCKER_VENDOR_OTHER.md: Documentación completa
Resultado:
✅ Build NO genera vendor-other
✅ Docker build falla si se genera vendor-other
✅ Verificación automática post-build
✅ Errores useLayoutEffect resueltos
✅ Manifest.json sin errores
- Incrementada CACHE_VERSION a v1.0.3 para forzar actualización
- Añadida documentación completa para limpiar caché del navegador
- Incluye métodos para Chrome/Edge, modo incógnito y limpieza completa
- Instrucciones para verificar que el problema está resuelto
- Incrementar CACHE_VERSION a v1.0.3 para forzar actualización
- Mejorar lógica de limpieza para eliminar vendor-other antiguo
- Añadir documentación detallada para limpiar caché del navegador
- Resuelve problema de navegador usando build antiguo en caché
- Añadir optimizeDeps con React explícito
- Mejorar condiciones de resolución
- Documentar solución para vendor-other en Vercel
- El build local es correcto, el problema es caché/build antiguo en Vercel
- Incluir React y React DOM en optimizeDeps
- Añadir condiciones de resolución explícitas
- Mejorar configuración de esbuild
- Esto asegura que React se pre-bundle correctamente
- Añadir dedupe: ['react', 'react-dom'] en vite.config.ts
- Esto fuerza una sola instancia de React en el bundle
- Crear script limpiar-y-rebuild.sh para limpieza completa
- Soluciona errores useLayoutEffect por React duplicado
- Poner TODO lo relacionado con React en vendor-react
- Esto garantiza que React esté disponible antes de cualquier otro código
- Separar solo utilidades que NO usan React (vendor-utils, vendor-other)
- Eliminado vendor-other completamente
- Todo lo no categorizado ahora va a vendor-ui
- vendor-ui se carga después de vendor-react
- Esto previene que código use React antes de que esté disponible
- Añadir react-resizable-panels, input-otp, cmdk, vaul a chunks específicos
- Protección adicional en vendor-other para excluir dependencias de React
- Asegurar que todas las dependencias de React se cargan después de vendor-react
- Asegurar que React se carga antes que otros chunks en vite.config.ts
- Incluir scheduler en vendor-react para evitar errores de useLayoutEffect
- Suprimir errores de extensiones del navegador (message channel closed)
- Mejorar manejo de errores en main.tsx con mensajes amigables
- Arquitectura paralela para Guías de Refuerzo
- Nuevos componentes: GuideCard, GuideHeader, GuideNavigation, etc.
- Vistas formativas: GuideIndex, GuideViewer, GuideSectionViewer
- Layout específico GuideLayout (sin BottomNav)
- Índice de guías con ABCDE Operativo y RCP Adulto SVB
- Corrección de Service Worker para desarrollo
- Enlaces de navegación en menú y página principal
- Documentación completa de implementación
- Fix: ErrorBoundary movido dentro de BrowserRouter para resolver error de contexto React Router
- Fix: Service Worker actualizado con Promise.allSettled para manejar errores de caché
- Feat: Iconos PWA optimizados (192x192, 512x512, maskable)
- Feat: Scripts de diagnóstico y limpieza de desarrollo
- Feat: Documentación de diagnóstico de errores
- Update: React Router future flags configurados
- Update: Manifest.json con iconos y screenshots configurados
- Clean: Eliminados archivos obsoletos y documentación antigua
- Docs: Actualizado RESUMEN_MANUAL_TES.md y CHECKLIST_PWA_COMPLETA.md
- Actualizar fechaActualizacion en manual-index.ts (100+ capítulos)
- Actualizar fechas en archivos .md del manual (public/manual/)
- Actualizar fechas en documentación (docs/)
- Actualizar fechas en páginas legales (Privacidad, Descargo, AvisoLegal)
- Actualizar fechas en scripts de limpieza
- Reemplazar todas las referencias de 2024-12-XX a 2025-12-23
- Reemplazar '19 de diciembre de 2024' a '23 de diciembre de 2025'
- Corregir MenuSheet: instanciar componentes Icon correctamente (<Icon /> en lugar de {icon})
- Mover ErrorBoundary fuera de BrowserRouter para evitar errores de contexto
- Eliminar Link de ErrorBoundary (usar window.location.href en su lugar)
- Cambiar process.env.NODE_ENV a import.meta.env.DEV en ErrorBoundary
- Los errores 'Objects are not valid as a React child' y 'basename is null' ahora resueltos
- Eliminar segunda definición duplicada de 'uso-tensiometro'
- Mantener solo la primera definición (línea 116)
- Build ahora sin warnings de claves duplicadas
- Script cleanup_completo.sh con 6 fases de limpieza
- Fase 1: Eliminar archivos innecesarios
- Fase 2: Mover backups y duplicados
- Fase 3: Simplificar configuraciones
- Fase 4: Consolidar documentación
- Fase 5: Limpiar scripts
- Fase 6: Reinstalación y verificación
- Documentación completa en PLAN_LIMPIEZA_FASES.md
- Actualizar .dockerignore para excluir archivos innecesarios
- Excluir documentación, backups, scripts y configuraciones no Docker
- Reducir tamaño de imagen Docker
- Mantener solo archivos esenciales para build y ejecución
- Script cleanup_project.sh para limpieza automática
- Organiza backups, documentación, scripts y configuraciones
- Mantiene integridad de Docker, PM2 y GitHub Actions
- Crea backups antes de mover archivos
- Crear Dockerfile multi-stage para optimizar tamaño
- Crear docker-compose.yml para gestión fácil
- Crear deploy-docker.sh script de despliegue
- Crear .dockerignore para optimizar build
- Crear GitHub Actions workflow para auto-deploy Docker
- Crear DEPLOYMENT_DOCKER.md con documentación completa
- Actualizar .gitignore para Docker
- Puerto 8607 configurado en Docker
- Health check incluido en contenedor
- Multi-stage build para reducir tamaño de imagen final
- Corregir rutas de archivos para usar nombre completo del directorio
- Corregir navegación del capítulo 8.1.1 para apuntar a 7.3.6 como anterior
- Asegurar que todas las rutas apuntan a BLOQUE_15_ALTERACIONES_PSIQUIATRICAS_Y_CONTENCION
- Explicar qué es el registry y cómo funciona
- Ejemplos de uso (alias vs rutas directas)
- Lista completa de alias disponibles
- Funciones helper para búsqueda
- Ejemplo completo de uso
- Ventajas del sistema
- Próximos pasos para migración