Volver a la wiki

Auditoría Suprema 2 · Cola config-ia: IA del workspace, drivers CNS y saneado de prompts

Cuándo

05-09-2026 · commit f5792359 (PR #506, v1.114.0). Cola MEDIA/BAJA del dominio config-ia en la Auditoría Suprema 2 (task #286): de 19 hallazgos del catálogo, 17 se cierran en este commit, 1 ya estaba cerrado en v1.112.0 (#16, whitelist Junos) y 1 se descarta tras verificación (#1). Implementado por un agente Opus en worktree con las decisiones fijadas por hallazgo; revisado, ajustado y verificado por Claude Fable 5.1 — el agente no pudo ejecutar nada por un fallo de aislamiento del harness, así que ruff, pytest y mypy los corrió la sesión principal sobre el worktree. 48 tests nuevos en tests/config_ia/test_cola_auditoria_config_ia.py.

Síntomas visibles

  1. La síntesis de IA del panel interno (informe de rendimiento, informe FinOps) devolvía la frase fija “AI analysis temporarily unavailable” como si fuera un veredicto real: nada distinguía un fallo del proveedor de un análisis genuino que dijera “todo va bien” (#5).
  2. Si un helper del informe de rendimiento o de costes fallaba a mitad de recogida, el except lo tragaba en silencio y el informe salía incompleto sin avisar (#3).
  3. Los dos SDK de la cadena de respaldo de IA (google-genai, Anthropic) no llevaban timeout: un proveedor colgado se llevaba consigo, sin límite de tiempo, la petición web que lo había invocado (#6).
  4. El log de fallo de esos mismos SDK podía arrastrar la URL con la API key o el cuerpo de la petición (#7).
  5. El bloque monitors.alerts del endpoint de métricas del workspace no reflejaba alertas reales (#8).
  6. Con Valkey caído, las llamadas de pago del workspace a Gemma corrían sin ningún tope de gasto (#11).
  7. Una clave o contraseña escrita al estilo de la consola de un equipo de red — enable secret 5 <hash>, username admin password 7 <hash>, snmp-server community <valor> — llegaba íntegra al LLM: el filtro de secretos solo cubría el formato clave=valor (#12).
  8. Una recomendación de la IA de diagnóstico marcada como riesgo ALTO, con comandos de escritura y sin comandos de vuelta atrás, se guardaba igual que una completa: la ausencia solo restaba 0,05 al score de validación (#13).
  9. config/wsgi.py apuntaba a un módulo de settings (config.settings.prod) que nunca existió: un arranque WSGI sin la variable de entorno puesta a mano reventaba con ModuleNotFoundError (#2).
  10. config/settings/production.py pisaba con 10 MB el límite de 100 MB que fija base.py para el tamaño de una petición sin ficheros — un cuerpo JSON/base64 grande pasaba en desarrollo y moría en producción con RequestDataTooBig (#4).

Causa raíz

Fix aplicado

Commit f5792359 (PR #506):

Lecciones

Preventivos futuros

Véase también

Subir