{
  "schema_version": 1,
  "diagram_type": "workflow",
  "meta": {
    "title": "Flujo de entrega de versiones",
    "output": "examples/release-delivery.html",
    "animation": "trace",
    "quality_profile": "showcase",
    "views": [
      {
        "id": "commit-to-checks",
        "label": "Del cambio a la compilación correcta",
        "focus": [
          "commit",
          "pull_request",
          "build",
          "checks"
        ],
        "note": "Sigue el cambio por la compilación reproducible y los controles de calidad obligatorios."
      },
      {
        "id": "approval-to-production",
        "label": "Aprobar y publicar",
        "focus": [
          "checks",
          "approval",
          "deploy",
          "verify_prod",
          "announce"
        ],
        "note": "Consulta quién autoriza la producción y cómo se verifica el resultado."
      },
      {
        "id": "rollback-path",
        "label": "Error y reversión",
        "focus": [
          "checks",
          "failed",
          "verify_prod",
          "rollback",
          "deploy"
        ],
        "note": "Explora dónde se detiene la entrega o se revierte de forma segura."
      }
    ],
    "locale": "es"
  },
  "lanes": [
    {
      "id": "dev",
      "label": "Desarrollador"
    },
    {
      "id": "ci",
      "label": "Integración continua"
    },
    {
      "id": "approval",
      "label": "Control del lanzamiento"
    },
    {
      "id": "environment",
      "label": "Entorno de producción"
    },
    {
      "id": "communication",
      "label": "Comunicación del lanzamiento"
    },
    {
      "id": "exceptions",
      "label": "Error y reversión",
      "variant": "exception"
    }
  ],
  "phases": [
    {
      "id": "change",
      "label": "Cambio",
      "fromCol": 0,
      "toCol": 1
    },
    {
      "id": "verify",
      "label": "Compilar y verificar",
      "fromCol": 2,
      "toCol": 3,
      "variant": "emphasis"
    },
    {
      "id": "promote",
      "label": "Publicar y observar",
      "fromCol": 4,
      "toCol": 5,
      "variant": "dashed"
    }
  ],
  "groups": [
    {
      "id": "blocking_checks",
      "label": "Controles obligatorios",
      "lane": "ci",
      "fromCol": 2,
      "toCol": 3,
      "variant": "emphasis"
    },
    {
      "id": "rollback_work",
      "label": "Ruta de recuperación",
      "lane": "exceptions",
      "fromCol": 3,
      "toCol": 5,
      "variant": "security"
    }
  ],
  "mainPath": [
    "commit",
    "pull_request",
    "build",
    "checks",
    "approval",
    "deploy",
    "verify_prod",
    "announce"
  ],
  "nodes": [
    {
      "id": "commit",
      "lane": "dev",
      "col": 0,
      "type": "frontend",
      "label": "Cambio",
      "sublabel": "cambio firmado"
    },
    {
      "id": "pull_request",
      "lane": "dev",
      "col": 1,
      "type": "frontend",
      "label": "Petición",
      "sublabel": "cambios revisados"
    },
    {
      "id": "build",
      "lane": "ci",
      "col": 2,
      "type": "backend",
      "label": "Compilar",
      "sublabel": "entradas fijadas",
      "tag": "reproducible"
    },
    {
      "id": "checks",
      "lane": "ci",
      "col": 3,
      "type": "security",
      "label": "Calidad",
      "sublabel": "pruebas y análisis",
      "tag": "obligatorio"
    },
    {
      "id": "approval",
      "lane": "approval",
      "col": 4,
      "type": "security",
      "label": "Aprobar",
      "sublabel": "responsable",
      "tag": "control humano"
    },
    {
      "id": "deploy",
      "lane": "environment",
      "col": 4,
      "type": "cloud",
      "label": "Desplegar",
      "sublabel": "piloto al 10%",
      "tag": "producción"
    },
    {
      "id": "verify_prod",
      "lane": "environment",
      "col": 5,
      "type": "backend",
      "label": "Verificar",
      "sublabel": "prueba básica y SLO"
    },
    {
      "id": "announce",
      "lane": "communication",
      "col": 5,
      "type": "external",
      "label": "Anunciar",
      "sublabel": "estado y notas"
    },
    {
      "id": "failed",
      "lane": "exceptions",
      "col": 2,
      "type": "security",
      "label": "Detener",
      "sublabel": "control fallido"
    },
    {
      "id": "rollback",
      "lane": "exceptions",
      "col": 4,
      "width": 64,
      "type": "messagebus",
      "label": "Revertir",
      "sublabel": "imagen válida",
      "tag": "de guardia"
    }
  ],
  "edges": [
    {
      "from": "commit",
      "to": "pull_request"
    },
    {
      "from": "pull_request",
      "to": "build",
      "label": "integrar",
      "variant": "emphasis",
      "route": "drop",
      "fromSide": "bottom",
      "toSide": "top"
    },
    {
      "from": "build",
      "to": "checks"
    },
    {
      "from": "checks",
      "to": "approval",
      "variant": "emphasis",
      "route": "drop",
      "fromSide": "bottom",
      "toSide": "top"
    },
    {
      "from": "approval",
      "to": "deploy",
      "variant": "security",
      "route": "drop",
      "fromSide": "bottom",
      "toSide": "top"
    },
    {
      "from": "deploy",
      "to": "verify_prod"
    },
    {
      "from": "verify_prod",
      "to": "announce",
      "label": "saludable",
      "variant": "emphasis",
      "route": "drop",
      "fromSide": "bottom",
      "toSide": "top"
    },
    {
      "from": "checks",
      "to": "failed",
      "label": "fallido",
      "variant": "security",
      "role": "error",
      "route": "drop",
      "fromSide": "bottom",
      "toSide": "top"
    },
    {
      "from": "verify_prod",
      "to": "rollback",
      "variant": "security",
      "role": "error",
      "route": "outside-right",
      "fromSide": "right",
      "toSide": "right"
    },
    {
      "from": "rollback",
      "to": "deploy",
      "label": "restaurar",
      "variant": "dashed",
      "role": "return",
      "route": "return-left",
      "fromSide": "left",
      "toSide": "left"
    }
  ],
  "cards": [
    {
      "dot": "emerald",
      "title": "Una ruta correcta",
      "items": [
        "Cada cambio se revisa antes de la compilación reproducible",
        "Los controles obligatorios deben pasar antes de la aprobación humana",
        "La producción se completa después de verificar las pruebas básicas y los SLO"
      ]
    },
    {
      "dot": "rose",
      "title": "Condiciones de detención",
      "items": [
        "Un fallo de pruebas o seguridad detiene la publicación",
        "Los problemas de salud en producción pueden provocar una reversión",
        "El responsable de la reversión se identifica antes de un incidente"
      ]
    },
    {
      "dot": "cyan",
      "title": "Evidencia del lanzamiento",
      "items": [
        "Se conservan la aprobación, la imagen inmutable y los resultados de las comprobaciones",
        "El lanzamiento se anuncia después de verificarlo",
        "La ruta principal sigue siendo legible sin ocultar los fallos"
      ]
    }
  ]
}
