{
  "id": "capability-code-push",
  "revision": "7823300823163d4e5ac905949bc0725e0934fc8f6ac1ce9794b4ab1c875c65fc",
  "regions": [
    {
      "id": "control",
      "label": "Control plane"
    },
    {
      "id": "data",
      "label": "Data plane"
    }
  ],
  "nodes": [
    {
      "id": "candidate",
      "label": "Replacement region",
      "kind": "N10",
      "region": "control",
      "ports": [
        {
          "id": "source",
          "profile": "P23",
          "contract": "SourceRevisionV1",
          "polarity": "Offer"
        },
        {
          "id": "stateSchema",
          "profile": "P24",
          "contract": "SchemaRefV1",
          "polarity": "Neutral"
        },
        {
          "id": "definition",
          "profile": "P24",
          "contract": "DefinitionRefV1",
          "polarity": "Neutral"
        }
      ]
    },
    {
      "id": "build",
      "label": "Kotlin/JS packager",
      "kind": "N34",
      "region": "control",
      "ports": [
        {
          "id": "source",
          "profile": "P23",
          "contract": "SourceRevisionV1",
          "polarity": "Require"
        },
        {
          "id": "bundle",
          "profile": "P23",
          "contract": "BundleRefV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "check",
      "label": "Compatibility / Shadow checks",
      "kind": "N36",
      "region": "control",
      "ports": [
        {
          "id": "bundle",
          "profile": "P23",
          "contract": "BundleRefV1",
          "polarity": "Require"
        },
        {
          "id": "evidence",
          "profile": "P24",
          "contract": "EvidenceSetV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "policy",
      "label": "Publication authority",
      "kind": "N33",
      "region": "control",
      "ports": [
        {
          "id": "evidence",
          "profile": "P24",
          "contract": "EvidenceSetV1",
          "polarity": "Require"
        },
        {
          "id": "decision",
          "profile": "P20",
          "contract": "PublishDecisionV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "host",
      "label": "Target host loader",
      "kind": "N27",
      "region": "data",
      "ports": [
        {
          "id": "admission",
          "profile": "P20",
          "contract": "PublishDecisionV1",
          "polarity": "Require"
        },
        {
          "id": "state",
          "profile": "P02",
          "contract": "MigrationCommitV1",
          "polarity": "Require"
        },
        {
          "id": "publisher",
          "profile": "P24",
          "contract": "HostRefV1",
          "polarity": "Neutral"
        }
      ]
    },
    {
      "id": "old",
      "label": "Old activation epoch",
      "kind": "N10",
      "region": "data",
      "ports": [
        {
          "id": "stateSchema",
          "profile": "P24",
          "contract": "SchemaRefV1",
          "polarity": "Neutral"
        },
        {
          "id": "epoch",
          "profile": "P24",
          "contract": "ActivationRefV1",
          "polarity": "Neutral"
        }
      ]
    },
    {
      "id": "state",
      "label": "State authority",
      "kind": "N21",
      "region": "data",
      "ports": [
        {
          "id": "conditional",
          "profile": "P02",
          "contract": "MigrationCommitV1",
          "polarity": "Offer"
        },
        {
          "id": "version",
          "profile": "P24",
          "contract": "StateVersionV1",
          "polarity": "Neutral"
        }
      ]
    }
  ],
  "relations": [
    {
      "id": "build",
      "kind": "H26",
      "incidences": [
        {
          "node": "candidate",
          "port": "source",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "build",
          "port": "source",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "test",
      "kind": "H26",
      "incidences": [
        {
          "node": "build",
          "port": "bundle",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "check",
          "port": "bundle",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "evidence",
      "kind": "H28",
      "incidences": [
        {
          "node": "check",
          "port": "evidence",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "policy",
          "port": "evidence",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "publish",
      "kind": "H23",
      "incidences": [
        {
          "node": "policy",
          "port": "decision",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "host",
          "port": "admission",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "state",
      "kind": "H05",
      "incidences": [
        {
          "node": "state",
          "port": "conditional",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "host",
          "port": "state",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "migration",
      "kind": "H35",
      "incidences": [
        {
          "node": "old",
          "port": "stateSchema",
          "role": "old",
          "ordinal": 0
        },
        {
          "node": "candidate",
          "port": "stateSchema",
          "role": "new",
          "ordinal": 1
        },
        {
          "node": "state",
          "port": "version",
          "role": "authority",
          "ordinal": 2
        }
      ]
    },
    {
      "id": "activation",
      "kind": "H29",
      "incidences": [
        {
          "node": "old",
          "port": "epoch",
          "role": "old",
          "ordinal": 0
        },
        {
          "node": "candidate",
          "port": "definition",
          "role": "new",
          "ordinal": 1
        },
        {
          "node": "host",
          "port": "publisher",
          "role": "publisher",
          "ordinal": 2
        }
      ]
    }
  ]
}
