{
  "id": "type-n33",
  "revision": "58610d9eb5cd8317deead45f0b28a33c4f521e04499ded1677331cb14e1c6731",
  "regions": [
    {
      "id": "request",
      "label": "Request",
      "parent": null
    },
    {
      "id": "server",
      "label": "Server",
      "parent": null
    },
    {
      "id": "storage",
      "label": "Storage",
      "parent": null
    },
    {
      "id": "web",
      "label": "Web",
      "parent": null
    }
  ],
  "nodes": [
    {
      "id": "principal",
      "label": "Authenticated request context adapter",
      "kind": "N15",
      "region": "request",
      "ports": [
        {
          "id": "context",
          "profile": "P01",
          "contract": "PrincipalWorkspaceContextV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "policy",
      "label": "Conversation access policy",
      "kind": "N33",
      "region": "server",
      "ports": [
        {
          "id": "context",
          "profile": "P01",
          "contract": "PrincipalWorkspaceContextV1",
          "polarity": "Require"
        },
        {
          "id": "membership",
          "profile": "P02",
          "contract": "ConversationMembershipReadV1",
          "polarity": "Require"
        },
        {
          "id": "grant",
          "profile": "P20",
          "contract": "ConversationReadScopeGrantV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "membership",
      "label": "Membership authority",
      "kind": "N21",
      "region": "storage",
      "ports": [
        {
          "id": "read",
          "profile": "P02",
          "contract": "ConversationMembershipReadV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "retrieval",
      "label": "Conversation evidence query",
      "kind": "N22",
      "region": "server",
      "ports": [
        {
          "id": "grant",
          "profile": "P20",
          "contract": "ConversationReadScopeGrantV1",
          "polarity": "Require"
        },
        {
          "id": "cut",
          "profile": "P01",
          "contract": "AuthorizedConversationCutV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "surface",
      "label": "Authorized conversation view",
      "kind": "N11",
      "region": "web",
      "ports": [
        {
          "id": "cut",
          "profile": "P01",
          "contract": "AuthorizedConversationCutV1",
          "polarity": "Require"
        }
      ]
    }
  ],
  "relations": [
    {
      "id": "identity",
      "kind": "H02",
      "incidences": [
        {
          "node": "principal",
          "port": "context",
          "role": "source",
          "ordinal": 0
        },
        {
          "node": "policy",
          "port": "context",
          "role": "target",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "membership",
      "kind": "H05",
      "incidences": [
        {
          "node": "policy",
          "port": "membership",
          "role": "caller",
          "ordinal": 0
        },
        {
          "node": "membership",
          "port": "read",
          "role": "callee",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "grant",
      "kind": "H23",
      "incidences": [
        {
          "node": "policy",
          "port": "grant",
          "role": "principal",
          "ordinal": 0
        },
        {
          "node": "retrieval",
          "port": "grant",
          "role": "resource",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "read",
      "kind": "H02",
      "incidences": [
        {
          "node": "retrieval",
          "port": "cut",
          "role": "source",
          "ordinal": 0
        },
        {
          "node": "surface",
          "port": "cut",
          "role": "target",
          "ordinal": 0
        }
      ]
    }
  ]
}
