{
  "schema_version": 1,
  "diagram_type": "workflow",
  "meta": {
    "title": "Guía de respuesta a incidentes",
    "output": "examples/incident-response.html",
    "animation": "trace",
    "visual_preset": "signal-flow",
    "quality_profile": "showcase",
    "views": [
      {
        "id": "detect-and-triage",
        "label": "Detectar y asignar el mando",
        "focus": [
          "alert",
          "page",
          "triage",
          "declare"
        ],
        "note": "Sigue los primeros minutos desde la señal hasta la asignación de un responsable."
      },
      {
        "id": "mitigate-and-verify",
        "label": "Mitigar y verificar recuperación",
        "focus": [
          "triage",
          "contain",
          "recover",
          "verify",
          "close"
        ],
        "note": "Distingue la mitigación de las pruebas necesarias para cerrar el incidente."
      },
      {
        "id": "escalate-and-communicate",
        "label": "Escalamiento y comunicación",
        "focus": [
          "declare",
          "escalate",
          "update",
          "rollback"
        ],
        "note": "Consulta a quién se avisa, qué se comunica y cuándo empieza la reversión."
      }
    ],
    "locale": "es"
  },
  "lanes": [
    {
      "id": "signals",
      "label": "Señales"
    },
    {
      "id": "responders",
      "label": "Mando del incidente"
    },
    {
      "id": "mitigation",
      "label": "Mitigación del servicio"
    },
    {
      "id": "recovery",
      "label": "Evidencia de recuperación"
    },
    {
      "id": "communication",
      "label": "Comunicación a interesados"
    },
    {
      "id": "exceptions",
      "label": "Escalamiento y reversión",
      "variant": "exception"
    }
  ],
  "phases": [
    {
      "id": "detect",
      "label": "Detectar",
      "fromCol": 0,
      "toCol": 1
    },
    {
      "id": "respond",
      "label": "Evaluar y mitigar",
      "fromCol": 2,
      "toCol": 3,
      "variant": "emphasis"
    },
    {
      "id": "recover",
      "label": "Verificar y cerrar",
      "fromCol": 4,
      "toCol": 5,
      "variant": "dashed"
    }
  ],
  "groups": [
    {
      "id": "command",
      "label": "Mando del incidente",
      "lane": "responders",
      "fromCol": 1,
      "toCol": 3,
      "variant": "emphasis"
    },
    {
      "id": "exception_actions",
      "label": "Si persiste el impacto",
      "lane": "exceptions",
      "fromCol": 3,
      "toCol": 5,
      "variant": "security"
    }
  ],
  "mainPath": [
    "alert",
    "page",
    "triage",
    "contain",
    "recover",
    "verify",
    "close"
  ],
  "nodes": [
    {
      "id": "alert",
      "lane": "signals",
      "col": 0,
      "type": "messagebus",
      "label": "Alerta de SLO",
      "sublabel": "ritmo de consumo"
    },
    {
      "id": "page",
      "lane": "responders",
      "col": 1,
      "width": 76,
      "type": "external",
      "label": "Guardia",
      "sublabel": "confirmar"
    },
    {
      "id": "triage",
      "lane": "responders",
      "col": 2,
      "width": 64,
      "type": "backend",
      "label": "Evaluar",
      "sublabel": "medir impacto"
    },
    {
      "id": "declare",
      "lane": "responders",
      "col": 3,
      "type": "security",
      "label": "Declarar",
      "sublabel": "asignar responsable",
      "tag": "SEV-1/2"
    },
    {
      "id": "contain",
      "lane": "mitigation",
      "col": 3,
      "width": 72,
      "type": "backend",
      "label": "Contener",
      "sublabel": "frenar impacto"
    },
    {
      "id": "recover",
      "lane": "mitigation",
      "col": 4,
      "width": 52,
      "type": "cloud",
      "label": "Reponer",
      "sublabel": "restaurar"
    },
    {
      "id": "verify",
      "lane": "recovery",
      "col": 5,
      "type": "database",
      "label": "Verificar",
      "sublabel": "SLO y trazas",
      "tag": "15 min estables"
    },
    {
      "id": "close",
      "lane": "communication",
      "col": 5,
      "type": "external",
      "label": "Resolver",
      "sublabel": "informe final"
    },
    {
      "id": "update",
      "lane": "communication",
      "col": 3,
      "type": "frontend",
      "label": "Informe",
      "sublabel": "impacto y plazo"
    },
    {
      "id": "escalate",
      "lane": "exceptions",
      "col": 3,
      "width": 72,
      "type": "security",
      "label": "Escalar",
      "sublabel": "especialista"
    },
    {
      "id": "rollback",
      "lane": "exceptions",
      "col": 5,
      "type": "messagebus",
      "label": "Revertir",
      "sublabel": "último válido"
    }
  ],
  "edges": [
    {
      "from": "alert",
      "to": "page",
      "label": "avisar",
      "variant": "emphasis",
      "route": "drop",
      "fromSide": "bottom",
      "toSide": "top"
    },
    {
      "from": "page",
      "to": "triage",
      "route": "bottom-channel",
      "fromSide": "bottom",
      "toSide": "bottom"
    },
    {
      "from": "triage",
      "to": "contain",
      "variant": "emphasis",
      "route": "drop",
      "fromSide": "bottom",
      "toSide": "top"
    },
    {
      "from": "contain",
      "to": "recover",
      "route": "bottom-channel",
      "fromSide": "bottom",
      "toSide": "bottom"
    },
    {
      "from": "recover",
      "to": "verify",
      "variant": "emphasis",
      "route": "drop",
      "fromSide": "bottom",
      "toSide": "top"
    },
    {
      "from": "verify",
      "to": "close",
      "variant": "emphasis",
      "route": "drop",
      "fromSide": "bottom",
      "toSide": "top"
    },
    {
      "from": "triage",
      "to": "declare",
      "variant": "security"
    },
    {
      "from": "declare",
      "to": "update",
      "variant": "dashed",
      "fromSide": "top",
      "toSide": "left",
      "via": [
        [
          430,
          16
        ],
        [
          20,
          16
        ],
        [
          20,
          615
        ]
      ]
    },
    {
      "from": "update",
      "to": "escalate",
      "variant": "security",
      "route": "drop",
      "fromSide": "bottom",
      "toSide": "top"
    },
    {
      "from": "verify",
      "to": "rollback",
      "variant": "security",
      "role": "error",
      "route": "outside-right",
      "fromSide": "right",
      "toSide": "right"
    }
  ],
  "cards": [
    {
      "dot": "rose",
      "title": "Primero, un responsable",
      "items": [
        "Una alerta necesita un responsable que dirija la respuesta",
        "La gravedad y el alcance se definen antes de ampliar la mitigación",
        "El escalamiento identifica la especialidad que falta"
      ]
    },
    {
      "dot": "emerald",
      "title": "La recuperación se demuestra",
      "items": [
        "La mitigación puede reducir el impacto sin demostrar la recuperación",
        "Los SLO y las trazas deben permanecer saludables durante un periodo definido",
        "El informe final se emite después de verificar la recuperación"
      ]
    },
    {
      "dot": "cyan",
      "title": "Reglas de comunicación",
      "items": [
        "Los interesados reciben el impacto, las acciones y la hora del siguiente informe",
        "La reversión se mantiene visible como una respuesta deliberada",
        "Cada rama tiene un responsable y una salida observable"
      ]
    }
  ]
}
