Detección de equipos parados en el LED del widget HARNESS (staleness detection)
Contexto del problema
El widget HARNESS del dashboard mostraba el LED de cada perfil de acuerdo al último status publicado, sin considerar la antigüedad del dato. El estado se escribe por push cuando cada perfil ejecuta method-doctor (aproximadamente a diario en operación normal); sin embargo, un veredicto verde quedaba congelado para siempre aunque la máquina llevara días apagada.
Caso real: el PC de Txell llevaba parado desde el viernes pero su LED seguía verde. El dato ya no era fiable.
Solución implementada
Backend: /api/harness-leds (endpoint CF Workers)
La lógica de “staleness” se implementa directamente en el endpoint usando SQL:
SELECT profile, status, updated_at,
CAST((julianday('now') - julianday(updated_at)) AS REAL) AS age_days
FROM harness_status
Nueva constante:
const STALE_DAYS = 3;
Transformación de la respuesta: cada registro ahora incluye:
age_days: antigüedad en días (redondeada a entero)stale: booleano que indica siage_days > STALE_DAYS
Justificación del umbral:
STALE_DAYS = 3tolera un fin de semana normal (~2,5 días) sin generar falsos positivos- Si aparecen puentes o fiestas largas, es sencillo subir a 4-5
- Los sesiones activas publican casi a diario en operación normal
Frontend: HarnessLeds.tsx (componente React)
Nuevo estado visual: el LED adopta 3 colores + 1 apagado:
- 🟢 Verde = status
green(al 100%) — equipo sano - 🟠 Naranja = status
drift(desajustes) — equipo con problemas - ⚫ Gris apagado (sin halo) = stale: equipos parados — status no fiable
- 🔴 Rojo = nunca ha reportado — nunca publicó status
Cambios CSS:
- El LED stale pierde su halo (
boxShadow: none), claramente distinguible del ambar de drift - Color:
var(--fg-dim)(gris del esquema)
Tooltip mejorado:
- Normal:
"Txell: al 100% · 2026-07-12 15:30:42" - Stale:
"Txell: sin publicar desde hace 3d (posible equipo parado)"
Verificación
El cambio fue verificado visualmente tras el deploy:
- CF Access restringe el acceso a
/api/harness-ledsal staff - Edu confirmó en su sesión pasando el ratón sobre el LED de Txell, observando el tooltip y la ausencia de halo
Archivos modificados
functions/api/harness-leds/index.ts: cálculo deage_daysy banderastalesrc/components/widgets/HarnessLeds.tsx: lógica de color y tooltip
Véase también
- [[feature—harness—engineering]]
- [[feature—harness—osv-security-deps-freshness]]
- [[concept—general—como-se-propagan-las-global-skills-de-claude-metho]]