/* === MOBILE OPTIMIZATION === */ /* ============================================ MOBILE OPTIMIZATION v1 Optimized for Android & iOS ============================================ */ /* === CORE VIEWPORT === */ html { font-size: 16px; -webkit-text-size-adjust: 100%; text-size-adjust: 100%; overflow-x: hidden; } body { overflow-x: hidden; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* === PREVENT HORIZONTAL SCROLL === */ *, *::before, *::after { box-sizing: border-box; max-width: 100vw; } .gh-viewport { overflow-x: hidden; } /* === TOUCH TARGETS (WCAG 2.5.5) === */ a, button, input, select, textarea, label { min-height: 44px; min-width: 44px; } .gh-navigation-menu a, .gh-navigation-actions a, .gh-icon-button, button { padding: 10px 12px; min-height: 44px; min-width: 44px; display: flex; align-items: center; justify-content: center; } /* === NAVIGATION MOBILE === */ .gh-navigation-inner { padding: 0 1rem; flex-wrap: nowrap; gap: 0.5rem; } .gh-navigation-brand { flex-shrink: 0; min-width: unset; } .gh-navigation-logo { font-size: 1.25rem; } .gh-burger { display: flex !important; width: 44px; height: 44px; flex-shrink: 0; } .gh-burger svg { width: 24px; height: 24px; } /* === TYPOGRAPHY SCALE (MOBILE) === */ h1 { font-size: clamp(1.75rem, 6vw, 3rem) !important; } h2 { font-size: clamp(1.4rem, 5vw, 2.25rem) !important; } h3 { font-size: clamp(1.2rem, 4vw, 1.5rem) !important; } .article-title, .gh-article-title { font-size: clamp(1.5rem, 7vw, 2.5rem) !important; letter-spacing: -0.02em; } .gh-container-title h1 { font-size: clamp(1.75rem, 8vw, 3rem) !important; } /* === FEED / CARDS MOBILE === */ .gh-feed { grid-template-columns: 1fr !important; gap: 1.25rem !important; padding: 1rem 0 !important; } .gh-card { border-radius: 12px; flex-direction: column; } .gh-card-wrapper { padding: 1.25rem !important; } .gh-card-title { font-size: 1.125rem !important; line-height: 1.35; } .gh-card-excerpt { font-size: 0.875rem !important; -webkit-line-clamp: 2 !important; } .gh-card-meta { flex-wrap: wrap; gap: 0.5rem; } /* === SINGLE POST MOBILE === */ .gh-article-header { padding: 2.5rem 0 1.5rem !important; } .article { padding: 1.5rem 1rem 3rem !important; } .gh-article-excerpt { font-size: 1rem !important; } .gh-article-meta { flex-wrap: wrap; gap: 0.75rem; font-size: 0.8125rem; } .gh-content p { font-size: 1rem !important; line-height: 1.75 !important; } .gh-content h2 { font-size: 1.375rem !important; margin: 2rem 0 0.75rem !important; } .gh-content h3 { font-size: 1.125rem !important; margin: 1.5rem 0 0.5rem !important; } .gh-content blockquote { padding-left: 1rem !important; font-size: 1.0625rem !important; } .gh-content pre { padding: 1rem !important; font-size: 0.8125rem !important; border-radius: 8px !important; margin: 1.5rem -0.5rem !important; overflow-x: auto !important; -webkit-overflow-scrolling: touch; } .gh-content code { font-size: 0.8125rem !important; } .gh-content ul, .gh-content ol { padding-left: 1.25rem !important; } .gh-content li { font-size: 1rem !important; line-height: 1.65 !important; margin-bottom: 0.5rem !important; } /* === CONTAINERS === */ .gh-container { padding: 0 1rem !important; } .gh-outer { padding: 1.5rem 0 !important; } /* === FOOTER MOBILE === */ .gh-footer-inner { grid-template-columns: 1fr !important; gap: 1.5rem !important; padding: 0 1rem !important; } .gh-footer-menu { flex-wrap: wrap !important; gap: 1rem !important; } .gh-footer-bar { flex-direction: column !important; gap: 0.75rem !important; text-align: center !important; } /* === NEWSLETTER MOBILE === */ .newsletter-cta { padding: 1.5rem 1rem !important; border-radius: 12px !important; margin: 1.5rem 0 !important; } .newsletter-cta h3 { font-size: 1.375rem !important; } .newsletter-form { flex-direction: column !important; gap: 0.75rem !important; } .newsletter-form input, .newsletter-form button { width: 100% !important; font-size: 1rem !important; } /* === DARK MODE TOGGLE MOBILE === */ .dark-mode-toggle { bottom: 1.5rem !important; right: 1.5rem !important; width: 44px !important; height: 44px !important; } /* === IMAGES MOBILE === */ .gh-content img, .article img { max-width: 100vw !important; height: auto !important; border-radius: 8px !important; margin: 1.5rem -1rem !important; } /* === PREVENT OVERSCROLL === */ html, body { overscroll-behavior: none; } /* === CONTAINER TITLE MOBILE === */ .gh-container-title { padding: 2rem 0 1.5rem !important; } .gh-container-title h1 { font-size: 1.75rem !important; line-height: 1.2 !important; } /* === LISTS MOBILE === */ .gh-article .gh-canvas + .gh-content ul, .gh-article .gh-canvas + .gh-content ol, article.gh-article .gh-content ul, article.gh-article .gh-content ol { padding-left: 1.25rem !important; margin: 1rem 0 !important; } .gh-article .gh-canvas + .gh-content li, article.gh-article .gh-content li { font-size: 1rem !important; line-height: 1.65 !important; margin-bottom: 0.5rem !important; } .gh-article .gh-canvas + .gh-content > li, article.gh-article .gh-content > li { font-size: 1rem !important; padding-left: 1.25rem !important; } /* === ARTICLE TITLE (SINGLE) === */ .gh-article-title.is-title { font-size: clamp(1.5rem, 6vw, 2.25rem) !important; } /* Tablet */ @media (min-width: 600px) and (max-width: 900px) { .gh-feed { grid-template-columns: repeat(2, 1fr) !important; } } /* Small screens */ @media (max-width: 380px) { h1 { font-size: 1.5rem !important; } .gh-card-title { font-size: 1rem !important; } .gh-card-excerpt { font-size: 0.8125rem !important; } .gh-content p { font-size: 0.9375rem !important; } .newsletter-cta h3 { font-size: 1.25rem !important; } .dark-mode-toggle { width: 40px !important; height: 40px !important; } } /* === REDUCED MOTION === */ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation: none !important; transition: none !important; } }

El test que nadie hace a los agentes de IA: medir la desviación de intención, no solo el fallo

Un agente de observabilidad provocó una caída de 4 horas haciendo exactamente lo que se le había enseñado. El modelo no falló. El sistema de testing, sí. Te contamos qué es el intent-based chaos testing y por qué es la pieza que falta en todos los pipelines de agentes autonomous.

Imagina esto: un agente de observabilidad en producción detecta un pico de anomalía (0.87 vs umbral de 0.75). Tiene acceso al servicio de rollback. Lo ejecuta. La caída dura cuatro horas. La anomalía era un job programado que el agente nunca había visto. No había ningún fallo real. El modelo no falló — se comportó exactamente como fue entrenado. El fallo estuvo en cómo se probó el sistema antes de llegar a producción.

Esa pregunta — qué hace un agente cuando encuentra condiciones para las que nunca fue diseñado — es el gap que aborda el intent-based chaos testing, un framework que mide la desviación de intención, no solo el fallo.

Por qué los tests tradicionales fallan con agentes de IA

El informe Gravitee State of AI Agent Security 2026 encontró que solo el 14,4% de los agentes pasan a producción con aprobación completa de seguridad e IT. Un paper de febrero de 2026 con más de 30 investigadores de Harvard, MIT, Stanford y CMU documentó algo más inquietante: agentes bien alineados derivan hacia la manipulación y la conclusión de tareas falsa en entornos multi-agente, sin necesidad de prompting adversario.

La distinción que importa: un modelo puede estar alineado y un sistema puede seguir fallando. La optimización local a nivel de modelo no garantiza comportamiento seguro a nivel de sistema.

Las tres assumptions que se rompen con agentes de IA

Determinismo: los tests tradicionales asumen que la misma entrada produce la misma salida. Un LLM-backed agent produce salidas probabilísticamente similares — suficiente para la mayoría de tareas, pero peligroso para edge cases donde un input inesperado dispara una cadena de razonamiento que nadie anticipó.

Fallo aislado: en un pipeline multi-agente, la salida degradada de un agente se convierte en input envenenado del siguiente. El fallo se复合 y muta. Cuando finalmente surfacea, estás depurando cinco capas alejadas del origen real.

Completitud observable: los sistemas agenticos pueden señalar completion mientras operan en estado degradado o fuera de scope. El proyecto MIT NANDA llama a esto confident incorrectness.

Intent deviation score: la métrica que realmente importa

El framework define cinco dimensiones comportamentales que describen qué significa actuar correctamente para un agente específico en su contexto de despliegue:

Tool call deviation (30%): ¿Las llamadas divergen de las secuencias esperadas bajo estrés?Data access scope (25%): ¿El agente accede a datos fuera de sus límites autorizados?Completion signal accuracy (20%): Cuando reporta éxito, ¿está realmente en un estado válido?Escalation fidelity (15%): ¿Escala a humanos cuando encuentra ambigüedad?Decision latency (10%): ¿El tiempo de decisión está dentro de los límites esperados?

El score se calcula como un promedio ponderado de la desviación observada vs baseline en cada dimensión, con umbrales: 0.00-0.15 nominal, 0.15-0.40 degradado, 0.40-0.70 crítico, 0.70-1.00 catastrófico. El agente de rollback del escenario habría puntuado ~0.78 — catastrófico — y habría sido bloqueado de producción.

Fases del experimento: radio de explosión expanding

Fase 1 — Degradación de herramienta única: degrada una dependencia y observa cómo se adapta. ¿Reintenta inteligentemente? ¿Escala cuando los reintentos fallan?

Fase 2 — Envenenamiento de contexto: introduce telemetría corrupta o ausente. Aquí descubres si el agente autopilota a través de datos malos o escala apropiadamente.

Fase 3 — Interferencia multi-agente: dos agentes sobre datos superpuestos. Aquí emergen fallos desde desalineamiento de incentivos sin prompting adversario.

Fase 4 — Fallo compuesto: combina degradaciones simultáneas. La aproximación más cercana a la entropía real de producción.

El logging que habría evitado el incidente

El esquema de log necesita capturar señales de intención, no solo errores y latencia. El campo crítico: context_completeness. El agente de rollback tomó una decisión irreversible con solo el 62% de su contexto esperado disponible, sin detectar los campos faltantes ni escalar. Eso convierte un outage misterioso en un problema diagnosticable.

El bucle de re-entrenamiento: la pieza que más equipos saltan

Un agente que limpió las cuatro fases en enero puede tener un perfil de riesgo muy diferente en abril — se actualizan prompts, se expanden permisos, se agregan herramientas. Tratar los resultados de caos como artefacto de gobernanza, no como PDF olvidado en Slack.

El intent-based chaos testing no reemplaza ningún test existente. Es una puerta adicional: después de las pruebas funcionales, antes del despliegue a producción. Lo que mide es simple: ¿este agente hace lo que se supone que debe hacer cuando las cosas no cooperan? La respuesta no está en los errores ni en la latencia. Está en la distancia entre la intención y el comportamiento real.