From 6e9c3a55700d2427b2b214b69417cb84148ca9f9 Mon Sep 17 00:00:00 2001 From: vjrj Date: Sat, 18 Jul 2026 05:47:44 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20PENDIENTE.md=20=E2=80=94=20outstanding?= =?UTF-8?q?=20work=20beyond=20the=20Meteor=203=20migration?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PENDIENTE.md | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 PENDIENTE.md diff --git a/PENDIENTE.md b/PENDIENTE.md new file mode 100644 index 0000000..5e8d92d --- /dev/null +++ b/PENDIENTE.md @@ -0,0 +1,91 @@ +# 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/`, `/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`.