{
  "id": "distributed-release",
  "revision": "8e854359c8e4e8a7da2e4149c7cfeed85fe3ab5897c4b598c0a363c93c49bd88",
  "regions": [
    {
      "id": "control",
      "label": "Control plane"
    },
    {
      "id": "data",
      "label": "Data plane"
    }
  ],
  "nodes": [
    {
      "id": "build",
      "label": "Compiler / packager",
      "kind": "N34",
      "region": "control",
      "ports": [
        {
          "id": "artifacts",
          "profile": "P23",
          "contract": "ArtifactVectorV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "bundle",
      "label": "Release artifacts",
      "kind": "N35",
      "region": "control",
      "ports": [
        {
          "id": "input",
          "profile": "P23",
          "contract": "ArtifactVectorV1",
          "polarity": "Require"
        },
        {
          "id": "artifacts",
          "profile": "P23",
          "contract": "ArtifactVectorV1",
          "polarity": "Offer"
        },
        {
          "id": "revision",
          "profile": "P24",
          "contract": "RevisionRefV1",
          "polarity": "Neutral"
        }
      ]
    },
    {
      "id": "shadow",
      "label": "Shadow scenarios",
      "kind": "N36",
      "region": "control",
      "ports": [
        {
          "id": "candidate",
          "profile": "P23",
          "contract": "ArtifactVectorV1",
          "polarity": "Require"
        },
        {
          "id": "evidence",
          "profile": "P24",
          "contract": "EvidenceSetV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "gate",
      "label": "Independent release gate",
      "kind": "N33",
      "region": "control",
      "ports": [
        {
          "id": "evidence",
          "profile": "P24",
          "contract": "EvidenceSetV1",
          "polarity": "Require"
        },
        {
          "id": "decision",
          "profile": "P20",
          "contract": "ReleaseDecisionV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "rollout",
      "label": "Rollout controller",
      "kind": "N40",
      "region": "control",
      "ports": [
        {
          "id": "authority",
          "profile": "P20",
          "contract": "ReleaseDecisionV1",
          "polarity": "Require"
        },
        {
          "id": "a",
          "profile": "P02",
          "contract": "AdmissionRequestV1",
          "polarity": "Require"
        },
        {
          "id": "b",
          "profile": "P02",
          "contract": "AdmissionRequestV1",
          "polarity": "Require"
        },
        {
          "id": "reconciler",
          "profile": "P24",
          "contract": "ControllerRefV1",
          "polarity": "Neutral"
        }
      ]
    },
    {
      "id": "a",
      "label": "Host cohort A",
      "kind": "N27",
      "region": "data",
      "ports": [
        {
          "id": "admit",
          "profile": "P02",
          "contract": "AdmissionRequestV1",
          "polarity": "Offer"
        },
        {
          "id": "epoch",
          "profile": "P24",
          "contract": "ActivationRefV1",
          "polarity": "Neutral"
        }
      ]
    },
    {
      "id": "b",
      "label": "Host cohort B",
      "kind": "N27",
      "region": "data",
      "ports": [
        {
          "id": "admit",
          "profile": "P02",
          "contract": "AdmissionRequestV1",
          "polarity": "Offer"
        },
        {
          "id": "epoch",
          "profile": "P24",
          "contract": "ActivationRefV1",
          "polarity": "Neutral"
        }
      ]
    }
  ],
  "relations": [
    {
      "id": "bundle",
      "kind": "H26",
      "incidences": [
        {
          "node": "build",
          "port": "artifacts",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "bundle",
          "port": "input",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "test",
      "kind": "H26",
      "incidences": [
        {
          "node": "bundle",
          "port": "artifacts",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "shadow",
          "port": "candidate",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "proof",
      "kind": "H28",
      "incidences": [
        {
          "node": "shadow",
          "port": "evidence",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "gate",
          "port": "evidence",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "decision",
      "kind": "H23",
      "incidences": [
        {
          "node": "gate",
          "port": "decision",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "rollout",
          "port": "authority",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "a",
      "kind": "H05",
      "incidences": [
        {
          "node": "a",
          "port": "admit",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "rollout",
          "port": "a",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "b",
      "kind": "H05",
      "incidences": [
        {
          "node": "b",
          "port": "admit",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "rollout",
          "port": "b",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "cohort",
      "kind": "H29",
      "incidences": [
        {
          "node": "bundle",
          "port": "revision",
          "role": "candidate",
          "ordinal": 0
        },
        {
          "node": "a",
          "port": "epoch",
          "role": "host",
          "ordinal": 1
        },
        {
          "node": "b",
          "port": "epoch",
          "role": "host",
          "ordinal": 2
        },
        {
          "node": "rollout",
          "port": "reconciler",
          "role": "reconciler",
          "ordinal": 3
        }
      ]
    }
  ]
}
