{
  "id": "type-h33",
  "revision": "2f2999dadbaf5ac46563870288ba912dab803060440d787b33ab4e038a141b30",
  "regions": [
    {
      "id": "device-storage",
      "label": "Device storage",
      "parent": null
    },
    {
      "id": "server",
      "label": "Server",
      "parent": null
    },
    {
      "id": "common-logic",
      "label": "Common logic",
      "parent": null
    },
    {
      "id": "web",
      "label": "Web",
      "parent": null
    }
  ],
  "nodes": [
    {
      "id": "cache",
      "label": "Content cache",
      "kind": "N25",
      "region": "device-storage",
      "ports": [
        {
          "id": "offer",
          "profile": "P19",
          "contract": "ContentProviderPreferenceV1",
          "polarity": "Offer"
        },
        {
          "id": "read",
          "profile": "P02",
          "contract": "GetContentWithFreshnessV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "network",
      "label": "Content service",
      "kind": "N19",
      "region": "server",
      "ports": [
        {
          "id": "offer",
          "profile": "P19",
          "contract": "ContentProviderPreferenceV1",
          "polarity": "Offer"
        },
        {
          "id": "read",
          "profile": "P02",
          "contract": "GetContentWithFreshnessV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "choose",
      "label": "Freshness-aware content choice",
      "kind": "N03",
      "region": "common-logic",
      "ports": [
        {
          "id": "providers",
          "profile": "P19",
          "contract": "ContentProviderPreferenceV1",
          "polarity": "Require"
        },
        {
          "id": "requirement",
          "profile": "P01",
          "contract": "ContentFreshnessRequirementV1",
          "polarity": "Require"
        },
        {
          "id": "cache",
          "profile": "P02",
          "contract": "GetContentWithFreshnessV1",
          "polarity": "Require"
        },
        {
          "id": "network",
          "profile": "P02",
          "contract": "GetContentWithFreshnessV1",
          "polarity": "Require"
        },
        {
          "id": "state",
          "profile": "P08",
          "contract": "ContentResultStateV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "ui",
      "label": "Article Surface",
      "kind": "N11",
      "region": "web",
      "ports": [
        {
          "id": "state",
          "profile": "P08",
          "contract": "ContentResultStateV1",
          "polarity": "Require"
        }
      ]
    },
    {
      "id": "policy",
      "label": "Freshness requirement",
      "kind": "N31",
      "region": "common-logic",
      "ports": [
        {
          "id": "requirement",
          "profile": "P01",
          "contract": "ContentFreshnessRequirementV1",
          "polarity": "Offer"
        }
      ]
    }
  ],
  "relations": [
    {
      "id": "preferences",
      "kind": "H33",
      "incidences": [
        {
          "node": "cache",
          "port": "offer",
          "role": "candidate",
          "ordinal": 0
        },
        {
          "node": "network",
          "port": "offer",
          "role": "candidate",
          "ordinal": 1
        },
        {
          "node": "choose",
          "port": "providers",
          "role": "result",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "freshness",
      "kind": "H02",
      "incidences": [
        {
          "node": "policy",
          "port": "requirement",
          "role": "source",
          "ordinal": 0
        },
        {
          "node": "choose",
          "port": "requirement",
          "role": "target",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "cache",
      "kind": "H05",
      "incidences": [
        {
          "node": "choose",
          "port": "cache",
          "role": "caller",
          "ordinal": 0
        },
        {
          "node": "cache",
          "port": "read",
          "role": "callee",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "network",
      "kind": "H05",
      "incidences": [
        {
          "node": "choose",
          "port": "network",
          "role": "caller",
          "ordinal": 0
        },
        {
          "node": "network",
          "port": "read",
          "role": "callee",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "render",
      "kind": "H02",
      "incidences": [
        {
          "node": "choose",
          "port": "state",
          "role": "source",
          "ordinal": 0
        },
        {
          "node": "ui",
          "port": "state",
          "role": "target",
          "ordinal": 0
        }
      ]
    }
  ]
}
