{
  "id": "type-n25",
  "revision": "43c098fc5be4fb9a8c59b0caabbaf49d168ba2408316c8827f04df0b115c6003",
  "regions": [
    {
      "id": "mobile",
      "label": "Mobile",
      "parent": null
    },
    {
      "id": "common-logic",
      "label": "Common logic",
      "parent": null
    },
    {
      "id": "device-storage",
      "label": "Device storage",
      "parent": null
    },
    {
      "id": "server",
      "label": "Server",
      "parent": null
    }
  ],
  "nodes": [
    {
      "id": "editor",
      "label": "Profile editor",
      "kind": "N11",
      "region": "mobile",
      "ports": [
        {
          "id": "edit",
          "profile": "P04",
          "contract": "ProfileDraftEditV1",
          "polarity": "Offer"
        },
        {
          "id": "state",
          "profile": "P08",
          "contract": "ProfileSyncStateV1",
          "polarity": "Require"
        }
      ]
    },
    {
      "id": "sync",
      "label": "Offline profile sync",
      "kind": "N25",
      "region": "common-logic",
      "ports": [
        {
          "id": "edit",
          "profile": "P04",
          "contract": "ProfileDraftEditV1",
          "polarity": "Require"
        },
        {
          "id": "persist",
          "profile": "P09",
          "contract": "LocalDraftPendingWriteV1",
          "polarity": "Require"
        },
        {
          "id": "push",
          "profile": "P09",
          "contract": "ProfileBaseRevisionWriteV1",
          "polarity": "Require"
        },
        {
          "id": "conflict",
          "profile": "P01",
          "contract": "ProfileThreeWayConflictV1",
          "polarity": "Offer"
        },
        {
          "id": "retry",
          "profile": "P01",
          "contract": "MergedProfileCandidateV1",
          "polarity": "Require"
        },
        {
          "id": "state",
          "profile": "P08",
          "contract": "ProfileSyncStateV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "local",
      "label": "Local draft and pending writes",
      "kind": "N21",
      "region": "device-storage",
      "ports": [
        {
          "id": "write",
          "profile": "P09",
          "contract": "LocalDraftPendingWriteV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "server",
      "label": "Profile service authority",
      "kind": "N21",
      "region": "server",
      "ports": [
        {
          "id": "write",
          "profile": "P09",
          "contract": "ProfileBaseRevisionWriteV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "merge",
      "label": "Profile conflict decision",
      "kind": "N03",
      "region": "common-logic",
      "ports": [
        {
          "id": "conflict",
          "profile": "P01",
          "contract": "ProfileThreeWayConflictV1",
          "polarity": "Require"
        },
        {
          "id": "candidate",
          "profile": "P01",
          "contract": "MergedProfileCandidateV1",
          "polarity": "Offer"
        }
      ]
    }
  ],
  "relations": [
    {
      "id": "edit",
      "kind": "H04",
      "incidences": [
        {
          "node": "editor",
          "port": "edit",
          "role": "publisher",
          "ordinal": 0
        },
        {
          "node": "sync",
          "port": "edit",
          "role": "subscriber",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "persist",
      "kind": "H05",
      "incidences": [
        {
          "node": "sync",
          "port": "persist",
          "role": "caller",
          "ordinal": 0
        },
        {
          "node": "local",
          "port": "write",
          "role": "callee",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "push",
      "kind": "H05",
      "incidences": [
        {
          "node": "sync",
          "port": "push",
          "role": "caller",
          "ordinal": 0
        },
        {
          "node": "server",
          "port": "write",
          "role": "callee",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "conflict",
      "kind": "H02",
      "incidences": [
        {
          "node": "sync",
          "port": "conflict",
          "role": "source",
          "ordinal": 0
        },
        {
          "node": "merge",
          "port": "conflict",
          "role": "target",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "retry",
      "kind": "H02",
      "incidences": [
        {
          "node": "merge",
          "port": "candidate",
          "role": "source",
          "ordinal": 0
        },
        {
          "node": "sync",
          "port": "retry",
          "role": "target",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "render",
      "kind": "H02",
      "incidences": [
        {
          "node": "sync",
          "port": "state",
          "role": "source",
          "ordinal": 0
        },
        {
          "node": "editor",
          "port": "state",
          "role": "target",
          "ordinal": 0
        }
      ]
    }
  ]
}
