{
  "id": "mobile-feature-update",
  "revision": "dfd0f654fb38c3b54d0b8241a5bfe11e1505a653c827882767c264dc12b251c5",
  "regions": [
    {
      "id": "device",
      "label": "Mobile device"
    },
    {
      "id": "edge",
      "label": "Edge services"
    }
  ],
  "nodes": [
    {
      "id": "shell",
      "label": "Stable app shell",
      "kind": "N27",
      "region": "device",
      "ports": [
        {
          "id": "routes",
          "profile": "P19",
          "contract": "RouteExportsV1",
          "polarity": "Require"
        },
        {
          "id": "feature",
          "profile": "P02",
          "contract": "FeatureContractV1",
          "polarity": "Require"
        }
      ]
    },
    {
      "id": "routes",
      "label": "Feature route exports",
      "kind": "N12",
      "region": "device",
      "ports": [
        {
          "id": "export",
          "profile": "P19",
          "contract": "RouteExportsV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "old",
      "label": "Active feature epoch",
      "kind": "N10",
      "region": "device",
      "ports": [
        {
          "id": "feature",
          "profile": "P02",
          "contract": "FeatureContractV1",
          "polarity": "Offer"
        },
        {
          "id": "epoch",
          "profile": "P24",
          "contract": "ActivationRefV1",
          "polarity": "Neutral"
        }
      ]
    },
    {
      "id": "loader",
      "label": "JS host / FFI adapter",
      "kind": "N15",
      "region": "device",
      "ports": [
        {
          "id": "bundle",
          "profile": "P23",
          "contract": "BundleRefV1",
          "polarity": "Require"
        },
        {
          "id": "admission",
          "profile": "P20",
          "contract": "AdmissionV1",
          "polarity": "Require"
        },
        {
          "id": "publisher",
          "profile": "P24",
          "contract": "HostRefV1",
          "polarity": "Neutral"
        }
      ]
    },
    {
      "id": "build",
      "label": "Feature packager",
      "kind": "N34",
      "region": "edge",
      "ports": [
        {
          "id": "bundle",
          "profile": "P23",
          "contract": "BundleRefV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "artifact",
      "label": "Signed bundle",
      "kind": "N35",
      "region": "edge",
      "ports": [
        {
          "id": "input",
          "profile": "P23",
          "contract": "BundleRefV1",
          "polarity": "Require"
        },
        {
          "id": "bundle",
          "profile": "P23",
          "contract": "BundleRefV1",
          "polarity": "Offer"
        },
        {
          "id": "revision",
          "profile": "P24",
          "contract": "RevisionRefV1",
          "polarity": "Neutral"
        }
      ]
    },
    {
      "id": "gate",
      "label": "Host admission gate",
      "kind": "N33",
      "region": "device",
      "ports": [
        {
          "id": "decision",
          "profile": "P20",
          "contract": "AdmissionV1",
          "polarity": "Offer"
        }
      ]
    }
  ],
  "relations": [
    {
      "id": "routes",
      "kind": "H30",
      "incidences": [
        {
          "node": "routes",
          "port": "export",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "shell",
          "port": "routes",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "calls",
      "kind": "H05",
      "incidences": [
        {
          "node": "old",
          "port": "feature",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "shell",
          "port": "feature",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "bundle",
      "kind": "H26",
      "incidences": [
        {
          "node": "build",
          "port": "bundle",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "artifact",
          "port": "input",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "fetch",
      "kind": "H26",
      "incidences": [
        {
          "node": "artifact",
          "port": "bundle",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "loader",
          "port": "bundle",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "admit",
      "kind": "H23",
      "incidences": [
        {
          "node": "gate",
          "port": "decision",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "loader",
          "port": "admission",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "cohort",
      "kind": "H29",
      "incidences": [
        {
          "node": "old",
          "port": "epoch",
          "role": "oldActivation",
          "ordinal": 0
        },
        {
          "node": "artifact",
          "port": "revision",
          "role": "candidate",
          "ordinal": 1
        },
        {
          "node": "loader",
          "port": "publisher",
          "role": "publisher",
          "ordinal": 2
        }
      ]
    }
  ]
}
