{
  "id": "iot-sensor",
  "revision": "120a91db6121e8d92f1d0a4ceef8b562284679ecebac1ab725f1648b5f995a35",
  "regions": [
    {
      "id": "device",
      "label": "Constrained devices"
    },
    {
      "id": "gateway",
      "label": "Gateway"
    },
    {
      "id": "cloud",
      "label": "Cloud authority"
    }
  ],
  "nodes": [
    {
      "id": "sensor",
      "label": "Sensor firmware boundary",
      "kind": "N30",
      "region": "device",
      "ports": [
        {
          "id": "sample",
          "profile": "P04",
          "contract": "SensorSampleV1",
          "polarity": "Offer"
        },
        {
          "id": "identity",
          "profile": "P24",
          "contract": "DeviceRefV1",
          "polarity": "Neutral"
        }
      ]
    },
    {
      "id": "gateway",
      "label": "Gateway actor",
      "kind": "N05",
      "region": "gateway",
      "ports": [
        {
          "id": "sample",
          "profile": "P04",
          "contract": "SensorSampleV1",
          "polarity": "Require"
        },
        {
          "id": "buffer",
          "profile": "P02",
          "contract": "GatewayAppendV1",
          "polarity": "Require"
        },
        {
          "id": "upload",
          "profile": "P02",
          "contract": "SensorBatchV1",
          "polarity": "Require"
        },
        {
          "id": "health",
          "profile": "P24",
          "contract": "DeviceHealthV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "buffer",
      "label": "Gateway durable buffer",
      "kind": "N24",
      "region": "gateway",
      "ports": [
        {
          "id": "append",
          "profile": "P02",
          "contract": "GatewayAppendV1",
          "polarity": "Offer"
        },
        {
          "id": "position",
          "profile": "P24",
          "contract": "LogPositionV1",
          "polarity": "Neutral"
        }
      ]
    },
    {
      "id": "ingest",
      "label": "Cloud ingestion",
      "kind": "N19",
      "region": "cloud",
      "ports": [
        {
          "id": "batch",
          "profile": "P02",
          "contract": "SensorBatchV1",
          "polarity": "Offer"
        },
        {
          "id": "storage",
          "profile": "P02",
          "contract": "SeriesAppendV1",
          "polarity": "Require"
        }
      ]
    },
    {
      "id": "series",
      "label": "Time-series authority",
      "kind": "N21",
      "region": "cloud",
      "ports": [
        {
          "id": "append",
          "profile": "P02",
          "contract": "SeriesAppendV1",
          "polarity": "Offer"
        },
        {
          "id": "receipt",
          "profile": "P24",
          "contract": "ReceiptRefV1",
          "polarity": "Neutral"
        }
      ]
    },
    {
      "id": "health",
      "label": "Fleet health view",
      "kind": "N22",
      "region": "cloud",
      "ports": [
        {
          "id": "events",
          "profile": "P24",
          "contract": "DeviceHealthV1",
          "polarity": "Require"
        }
      ]
    }
  ],
  "relations": [
    {
      "id": "sample",
      "kind": "H02",
      "incidences": [
        {
          "node": "sensor",
          "port": "sample",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "gateway",
          "port": "sample",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "buffer",
      "kind": "H05",
      "incidences": [
        {
          "node": "buffer",
          "port": "append",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "gateway",
          "port": "buffer",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "upload",
      "kind": "H05",
      "incidences": [
        {
          "node": "ingest",
          "port": "batch",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "gateway",
          "port": "upload",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "store",
      "kind": "H05",
      "incidences": [
        {
          "node": "series",
          "port": "append",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "ingest",
          "port": "storage",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "health",
      "kind": "H04",
      "incidences": [
        {
          "node": "gateway",
          "port": "health",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "health",
          "port": "events",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "lineage",
      "kind": "H27",
      "incidences": [
        {
          "node": "sensor",
          "port": "identity",
          "role": "device",
          "ordinal": 0
        },
        {
          "node": "buffer",
          "port": "position",
          "role": "gateway",
          "ordinal": 1
        },
        {
          "node": "series",
          "port": "receipt",
          "role": "cloud",
          "ordinal": 2
        }
      ]
    }
  ]
}
