todos-contra-el-fuego-web/PENDIENTE.md

4.7 KiB

Pendiente — web "Todos contra el fuego" (rama meteor3-wip)

Estado a 2026-07-18. La migración Meteor 1.6 → 3.1 + MongoDB 7 está completa y verificada (server async, React 18, web renderiza, smoke REST byte-idéntico). Lo que falta, agrupado. Ver UPGRADE.md para el detalle de lo ya hecho.


1. Modernización de librerías react-* antiguas (deuda de front grande)

Funcionan en React 18 por compatibilidad heredada, pero ensucian la consola en desarrollo (no en producción) y bloquean el salto a React 19. Orden y riesgo:

Lib Actual Objetivo Riesgo
react-helmet 5.2 react-helmet-async bajo
react-i18next + i18next 7.4 / 10.5 11+ / moderno medio (mecánico, muchos ficheros)
react-bootstrap + reactstrap 0.31 / 5.0-alpha 2 / 9 alto (Bootstrap 3→5, renombra componentes y afecta al SCSS)
react-router-dom 4.2 6/7 alto (API totalmente distinta)
react-leaflet + leaflet 1.8 / 1.3 4 / moderno alto (reescritura hooks, sin leafletElement/refs)

Prompt de arranque preparado (pedir al asistente "el prompt de las libs react"). El smoke REST no cubre nada de esto → la red real es la verificación visual en navegador (rutas: /, /fires, /fire/archive/<hex>, /login, /subscriptions).


2. Deuda funcional / de calidad de la web (independiente de prod)

  • Comentarios (feature React nueva): verificación manual en staging. No la cubre el smoke. Probar en una página de fuego: publicar/editar/borrar, like/dislike, embed de imagen y YouTube, y el email a otros comentaristas.
  • FireContainer usa FiresCollection.findOne() sin selector (imports/ui/pages/Fires/Fires.js): puede devolver un doc de una suscripción previa. Endurecer filtrando por el _id de la URL. (Preexistente, no bloquea, pero conviene antes de prod.)
  • Suite de tests sin runner. El stack de test (meteortesting:mocha, chai…) se eliminó en la migración 2.x (arrastraba coffeescript que crasheaba el build). Quedan tests Jest en test/ (rest.test.js, email.test.js, …) y npm test → jest, pero hay que verificar/actualizar que pasan sobre el código async de Meteor 3. Hoy la ÚNICA red automática es smoke/.
  • Rate-limit de publications pendiente (imports/startup/server/api.js:18).
  • Google Maps se carga sin loading=async (aviso de rendimiento); el loader google-maps npm es viejo → valorar el loader async moderno.
  • i18n de cuentas (meteor-accounts-t9n, T9n): paquete antiguo aún usado (Login, VerifyEmail, i18n). Verificar que funciona en Meteor 3; traducción gallega (gl) incompleta (varios TODO en i18n.js).
  • SCSS acoplado a Bootstrap 3: al subir react-bootstrap a v2 (Bootstrap 5), revisar new-age.scss, custom.scss, bootstrap-overrides.scss y las clases de layout (Grid/Row/Col).
  • Limpieza menor: migración 217 // TODO remove falsepositives lowercase collection; prerender.js gating comentado; sección per-fire del sitemap eliminada (era código muerto tras firesMapEnabled=false).

3. Observabilidad (Sentry/GlitchTip) — casi cerrado

  • Server-side reporta a GlitchTip; cliente vía túnel /sentry-tunnel (esquiva el 503 de Cloudflare). DSN en settings-development.json (gitignored).
  • Pendiente: poner el DSN en el METEOR_SETTINGS de producción y confirmar que el servidor de prod alcanza GlitchTip (IPv4). Nota: el túnel es un relay acotado al proyecto propio (aceptable, documentado).
  • Consola de dev: warnings de librería restantes solo se van con el punto 1.

4. Cutover a producción (infra — fase 3, es lo grande)

  • Migrar datos Mongo 3.2 → 7 (mongodump/restore) en el servidor real.
  • Desplegar el stack (Docker) al servidor limpio vía el ansible de Comunes — NO al viejo shiva. Ver RUNBOOK.md (stack compose local validado).
  • Coordinar orden con notificaciones: la web NO debe desplegarse antes de que el microservicio tcef-notifications emita en prod (si no, los usuarios dejan de recibir avisos). Ver dependencia en UPGRADE.md.
  • Secretos de prod (METEOR_SETTINGS, no el fichero gitignored), cron del GeoLite2 City (MaxMind) en el nuevo host, proxy/TLS por el ansible compartido.

5. Fuera del repo web (bloquean el "hecho" global, pistas aparte)

  • tcef-notifications: rollout por canal shadow→canary→full (FCM en canary superado; email y telegram pendientes) y redeploy del servicio actualizado.
  • App móvil fires_flutter: republicación en Play Store.

Regla de trabajo en todo lo anterior: commits locales atómicos en meteor3-wip, smoke REST byte-idéntico tras cada cambio, verificación visual en navegador, y NUNCA git push.