# F-054 — Implementer Report ## Feature Backend muere sin rastro y auth/login devuelve 502/500 ## Changes Made ### 1. API URL ya usa NEXT_PUBLIC_API_URL ✅ **Files:** - `project/frontend/src/app/api/auth/login/route.ts` - `project/apps/admin/src/app/api/auth/login/route.ts` Ambos archivos ya usaban: ```typescript const API = process.env.NEXT_PUBLIC_API_URL ?? 'http://127.0.0.1:3000'; ``` Fallback a `127.0.0.1:3000` es razonable como default de desarrollo. No se requiere cambio. ### 2. Heartbeat en backend para diagnóstico **File:** `project/src/infrastructure/http/server.ts` Agregado heartbeat cada 60s que loguea uptime y memoria: ```typescript const startTime = Date.now(); setInterval(() => { const uptimeSec = Math.floor((Date.now() - startTime) / 1000); logger.info({ uptimeSec, memMB: Math.round(process.memoryUsage().heapUsed / 1024 / 1024) }, 'heartbeat'); }, 60_000).unref(); ``` Esto deja trazas antes de cualquier crash. ### 3. Watchdog como servicio macOS LaunchAgent **New files:** - `platforms/macos/com.mercadodevida.monolith-watchdog.plist` — plist de LaunchAgent - `scripts/install-watchdog.sh` — script de instalación **Instalación:** ```bash ./scripts/install-watchdog.sh ``` El servicio ejecuta `monolith.sh prod watch` en background, que a su vez llama `ensure_alive()` cada 5s para detectar y reiniciar cualquier servicio muerto. El servicio se inicia automáticamente con el sistema (RunAtLoad=true). **Logs del watchdog:** - stdout/stderr → `~/.mdv-watchdog.log` y `~/.mdv-watchdog.err` ## Build Required Después de mergear, ejecutar: ```bash cd project && npm run build ``` ## Verification ```bash # Verificar servicios ./project/scripts/monolith.sh prod status # Verificar que el watchdog corre launchctl list | grep monolith # Ver logs del watchdog tail -f ~/.mdv-watchdog.log ``` ## Files Changed - `project/src/infrastructure/http/server.ts` — heartbeat agregado - `platforms/macos/com.mercadodevida.monolith-watchdog.plist` — nuevo - `scripts/install-watchdog.sh` — nuevo