hub-web-viewer
Dashboard
Vista derivada de hub/ (read-only).
Proyectos
46
37 activos · 2p · 2b · 3d
Pendientes abiertos
281
58 alta · 190 media · 33 baja
Clientes
8
7 reales + 1 pseudo
Cerrado reciente
6
resueltos visibles
🔴 Top prioridades (8 high · active)
-
machine-parity
active high personalActualizado 2026-05-31
-
electro-ia
active high electrosystemsActualizado 2026-05-29
-
es-antenas-new
active high electrosystemsActualizado 2026-05-29
-
orion-decommission
active high electrosystemsActualizado 2026-05-29
-
poseidon-root-triage
active high electrosystemsActualizado 2026-05-29
-
amadeus-consumos-milestone
active high electrosystemsActualizado 2026-05-28
-
telcel-capellina-lajunta
active high telcelActualizado 2026-05-28
-
monitoreo-collector
🥶active high electrosystemsActualizado 2026-05-12
📊 Actividad reciente
⏰ Próximas fechas (6)
- 2026-06-01 🔥 #249 Prender
ANALISIS_HOOK_CONSUMOS_ENABLED=true(validación automática al subir). Desbloqueado — workers ya listos (#371 cerrado). (Bloque 0) - 2026-06-01 #047 #047 Smoke piloto Selene — flujo manual end-to-end de inventarios desde
/movimientos-inventario(preparar → entregar → revisar). Probar tambiénMisEntregasyViajeCompras. Crear OT, asociar inventario, verificar descuento. - 2026-06-01 #206 Integración aprende-ingles ↔ tareas-hijo — marcar lección diaria automáticamente. Cuando el hijo complete una
LessonCompletionen aprende-ingles (Postgres en val-soft), una tarea correspondiente en tareas-hijo (Postgres en Fly.io) debería marcarse hecha automáticamente. Mecanismo posible: webhook desde aprende-ingles → endpoint Phoenix en tareas-hijo. Requiere: (a) tareas-hijo tener un endpoint público autenticado para "marcar tarea hecha por slug" (NO existe hoy — Fase 1 #184 está en bloque 1/4); (b) aprende-ingles tener un job/queue que dispatch al completar lección; (c) modelo de mapeo: en tareas-hijo, unatareas_definicionconslug='leccion-ingles-diaria'se vincula. Bloqueado por #184 Fase 1 completa de tareas-hijo (que tenga su esquema LiveView + auth). Cuando se desbloquee, decidir si la integración es push (webhook) o pull (cron en tareas-hijo consulta aprende-ingles). Estimación: chica una vez desbloqueado (1 endpoint + 1 job). - 2026-06-01 #ING-001 Después (no bloqueante): rate limit del lado app en
generatePlan(padre puede tirar N llamadas a OpenAI con clicks repetidos) + retry/backoff enLessonPlannerService. - 2026-06-01 #383 💰 FACTURABLE — Reducir fallos de WhatsApp (33% actual) con fix de calidad de dato en 2 capas: (1) upstream validar teléfono al capturar en POS/alta de cliente (10 dígitos + LADA mexicana válida, se apoya en PhoneNumber/libphonenumber del #197/#368) para atrapar typos antes de gastar envíos; (2) downstream en el webhook marcar números que rebotan con 131026 (flag suave
whatsapp_no_disponible, NO opt-out duro porque 131026 a veces es transitorio) + aviso en banda del POS "este número no recibe WhatsApp, verifícalo". Diagnóstico completo en bitácora 2026-05-28. Esperando que Aarón apruebe (Sergio le mostrará el reporte con la columna de causa de falla primero). - 2026-06-01 #409 Definir el proceso repetible para agregar más clientes WG road-warrior con acceso a las mismas redes. Base ya escrita (runbook en
electrosystems/servers/wireguard/README.md+ memoriareference_es_wireguard_roadwarrior). Pendiente: decidir si conviene un script/plantilla (genera llaves + arma el.confcliente con el AllowedIPs canónico + comando server listo), convención de IPs.16+, y dejar el bloqueAllowedIPscanónico en un solo lugar reutilizable. Toca infra ES (VMwireguard).
🔒 Disparo condicional (5)
- #393 amadeus Cimientos del bridge. Columna
traccar_device_idenvehiculos+ mapeo unidad↔device (consultandoGET http://201.218.172.10:8082/api/devices); permiso nuevonotificar_retornoenpermisos(Nova + modelo); crear token/usuario read-only en Traccar 6.6 (login admin de Sergio); montar scheduler (cron dephp artisan schedule:run, hoy inexistente). - #394 amadeus Bridge Amadeus↔Traccar. Comando programado que consulta la posición (
GET http://201.218.172.10:8082/api/positions?deviceId=en Traccar 6.6) de los vehículos en viaje activo (fecha_cierre IS NULLy destino fuera de Juárez); detecta transición fuera→dentro del bbox de Juárez; dispara eventoRetornoDetectadoEvent→ listener push+email a quienes tengannotificar_retorno. Mensaje con contexto: "Vehículo U09 (viaje folio X, técnico Y) regresó a Cd. Juárez a las HH:MM." Idempotente (no re-avisar). Alternativa más limpia: notificación web (webhook) de Traccar 6.6 al geofence → endpoint en Amadeus (evita scheduler). - #395 amadeus Fase futura: detección por celular del técnico. Para las contadas ocasiones en que el técnico viaja en avión (el vehículo no se mueve, así que Traccar no lo detecta). Geofence ligero vía la PWA de Amadeus (
navigator.geolocation), reusando el patrón de captura GPS de #381 (consumos) y del checador #387. Más invasivo (requiere permiso de ubicación / app abierta) — por eso es fase 2, solo el caso avión. - #387 amadeus Reloj checador en sitio (geolocalizado) para técnicos de viaje. Checada con captura de coordenada + cotejo contra el GPS del sitio asignado (geofence por radio) para validar que estén físicamente en el lugar de trabajo. Validación suave (bandera, no bloqueo), coherente con la filosofía del milestone. Diseño/ideas en Notas técnicas → Checador geolocalizado (#387). Depende de coords de sitios pobladas (#378).
- #388 amadeus Ingesta de facturas desde la bandeja de contabilidad + ligado automático a consumos. Leer los correos donde llegan las facturas (CFDI) de los viáticos, parsear el XML, y ligarlas automáticamente al consumo del técnico que corresponde (por monto + fecha + RFC/comercio) para que la contadora ya no cotije a mano al validar/imprimir. Diseño/ideas en Notas técnicas → Ingesta de facturas CFDI (#388).
Se disparan cuando se cumpla la condición (sin fecha fija).
📋 Proyectos con más pendientes abiertos (top 8)
Lista completa →- 34
amadeus
electrosystems · active · medium
- 30
amadeus-sprints
electrosystems · active · medium
- 23
projects-hub
electrosystems · paused · low
- 23
vpn-clientes
electrosystems · active · medium
- 19
backup-system
electrosystems · active · medium
- 15
electro-ia
electrosystems · active · high
- 13
wireguard-jrz-elp
electrosystems · active · medium
- 12
holbox
holbox · active · medium
⏱️ Activos sin tocar (6)
Filtrar todos →🧑 Por cliente
✅ Cerrado reciente
-
Fase 4 del AUDIT: repaso priorizado por error real + anclaje de vocabulario CEFR/NGSL. Mejora el motor IA sin rehacerlo. Parte B (anclaje, opción robusta elegida por Sergio): dataset local real CEFR-J Vocabulary Profile + NGSL fusionado (
database/data/vocabulary.csv, 6864 palabras con nivel CEFR mín + banda de frecuencia; pool preferente A1/A2 de alta frecuencia = 1678). Nueva tablavocabulary(migration) +VocabularySeeder(idempotente, en DatabaseSeeder) + modeloVocabulary+VocabularyService(cefrLevel/isA1A2/frequencyRank/preferredPool/classify/levelsFor). Parte A (mastery learning): accessorbox/is_mastered/is_strugglingenWordMastery(¡arregla bug de Fase 3, ver abajo!) +WordMasteryService::masterySnapshot()(dominadas box≥4 / prerrequisitos flojos box≤1). ElLessonPlannerServiceahora recibestudent_id(threadeado por Planner.vue→controller→PlanGeneration.inputs→GeneratePlanJob), inyecta al prompt: anclaje A1/A2 + pool preferente + palabras dominadas (no re-enseñar, usar como andamiaje) + consolidación de prerrequisitos en días 2-3 antes de subir dificultad; audita (loguea, no rechaza) el vocab generado fuera de A1/A2. Bug de Fase 3 encontrado y arreglado:progreso()hacíawhere('box',5)sobre la colección peroboxno era columna ni accessor → masteredCount siempre 0 y CEFR clavado en Pre-A1. El accessor lo arregla; además la estimación CEFR ahora se deriva del nivel real de las palabras consolidadas (caja≥4) víaVocabularyService, no de un conteo total, con desglose A1/A2 mostrado enProgreso.vue. +17 tests (VocabularyService, MasterySnapshot/box, PlannerMasteryAnchoring, ProgresoCefr). Suite 162/162 (era 145). Build OK (Progreso + Planner). Datos fuente abiertos (openlanguageprofiles/olp-en-cefrj + NGSL). Pendiente: commit + push + deploy (Sergio autoriza el commit; push pre-autorizado dispara GHA→val-soft). Verificar con Leonardo cuando genere un plan nuevo. -
heatmap de actividad en /projects/[slug]
-
chip 🤖 por pendiente + filtro clickeable en /pendientes
-
Smoke notif viaje creado — Sergio marcó como terminada la validación de push + email al crear un viaje real en prod.
-
Tanda C de #203: tipo
translation_long(traducción de texto con validación en tiempo real). Cierra #203 completo (A+B+C). Muestra 1-2 frases EN INGLÉS (content), el niño escribe la traducción al ESPAÑOL en un textarea; debajo, validación palabra-por-palabra EN VIVO: chips verde (bien) / rojo (revisa).options=null,translation=null,correct_answer=traducción esperada en español. Decisiones con Sergio (AskUserQuestion): umbral aprobar = ≥80% de las palabras, comparación posicional (palabra i vs palabra i), texto = 1-2 frases (8-16 palabras). Algoritmo (idéntico front y back): normaliza (minúsculas, sin puntuación, sin acentos de vocales — los niños los omiten), tokeniza por espacios, compara posicional tolerando dedazos con Levenshtein ≤min(2, len-1)(más estricto entre más corta la palabra, evita que "un"/"el" matcheen cualquier cosa). Backend usalevenshtein()nativo (por bytes → se trabaja en ASCII tras quitar acentos para que coincida con el JS). Sin migration. Tocado:ApprovePlanRequest(enum + options=null),LessonPlannerService(tipo 7 + ejemplo JSON + instrucción de 1 por lección desde día 3),StudentController::submitExercise(branch de calificación ≥80%),Exercise.vue(helpers levenshtein/tokenize + computedstranslationFeedback/translationStats+ textarea + panel de chips en vivo + chip "traducir";submitAnswerya enruta por elelse→studentAnswer). NO tiene fichas de pista (no hay opción que descartar). +8 tests (2 validación ApprovePlanValidationTest + 6 TranslationLongTest: exacta, dedazos, ignora acentos/may/punt, umbral 80% justo=4/5, <80% reprueba, desorden reprueba). Suite 137/137 (era 129).npm run buildOK (Exercise.vue 31.13 KB). Pendiente: commit + push + deploy (ver bitácora). Igual que A/B: los planes ya generados no traen translation_long — Sergio genera un plan nuevo como padre para que Leonardo lo vea. -
Auditoría integral + investigación de herramientas externas. Salida en
projects/aprende-ingles/AUDIT.md. Cubre los 6 ejes pedidos (UX, calidad IA en los 4 skills, gamification, métricas, gaps vs apps comerciales, herramientas externas). Hallazgo central: la app ya cubre lo de mayor impacto (4 skills, eval pronunciación Azure, Leitner, IA); los gaps reales NO son ligas/leaderboards/vidas (esos serían contraproducentes para un niño solo) sino: (1) sin input visual (imagen por palabra — gap universal en apps de niños), (2) celebración del éxito pobre (sin animación de cierre/sonido/barra que avance con error), (3) repaso solo por intervalo Leitner, no por error/prerrequisito (mastery learning estilo Khan), (4) sin dashboard de progreso longitudinal ni nivel CEFR estimado, (5) sin producción/conversación libre (ya hay ladrillos: IA + voz). Herramientas gratis recomendadas: Datamuse (sin key, 100k/día), Free Dictionary API (IPA+audio, con caché+fallback), datasets CEFR/NGSL locales, Pexels (imágenes), Iconify (iconos). Conjugación API de pago: NO (usar GPT o mlconjug3 local). Plan de 5 fases propuesto en el AUDIT (top: imagen+image_match→ celebración+manejo de error → streak con holgura+dashboard/progreso+CEFR → repaso priorizado por error → stretch: micro-historias i+1 + mini-roleplay IA). Pendiente operativo: Sergio decide cuáles fases convertir en pendientes#NNNy con qué fechas (ver entrada de bitácora 2026-05-29). Sin código tocado esta sesión.
Log diario
Ver todo →- 2026-06-01 lunes
1. Fase A (infra): rol+DB en Postgres 16 local, usuario tareas-hijo, directorios /var/lib/tareas-hijo/{fotos,tzdata}. · 2. Fase B (código): storage Tigris→disco local (token firmado 7d), fix tzdata (data_dir escribible), 88 tests verdes,…
- 2026-05-29 viernes
86dd2fa (viewer) — /pendientes derivado de projects/, fin de PENDIENTES.md como input. · 79d92da (hub) — eliminar PENDIENTES.md; fuente única en projects/. · dc6875a (hub) — #399 active+high (40 bullets).
- 2026-05-28 jueves
#396 — Sergio aclaró que hay un segundo host de VMs sin documentar (SSH alias ares, 192.168.3.2). Lo perfilé completo read-only: 2º hypervisor KVM (Ubuntu 20.04, dual Xeon X5675, 62 GiB, 3.6 TB), corre 5 VMs incl. el Traccar vivo. Docume…
- 2026-05-27 miércoles
holbox #197 — soporte WhatsApp internacional con libphonenumber-for-php. Commit 35ac39f ya estaba mergeado de sesión previa; cerrado administrativamente y restada bandera viva para LADA 915 (capturada como #368). · holbox #161 Entrega 1 …
- 2026-05-26 martes
1. Verificación de estado real vs el plan del 22. Inventario silencioso desde la última sesión: gh 2.92.0 ya estaba instalado (sin saber cuándo); wireguard-tools y wrappers Docker seguían faltando; aprende-ingles, es-antenas-new, tareas-…
- 2026-05-23 sábado
Sergio reportó dos síntomas: 63 dispositivos sin datos del colector + portal con error 500. Las causas resultaron ser dos bugs separados con efectos amplificadores: · 1. Endpoint /metrics colgaba PHP-FPM — Dispositivo::with('ultima_lectu…