{
  "schema": "ai-architect-reactflow/v1",
  "pattern": "ai-governance-plane",
  "provider": "gcp",
  "nodes": [
    {
      "id": "teams",
      "type": "architecture",
      "position": {
        "x": 40,
        "y": 220
      },
      "data": {
        "label": "Product teams",
        "role": "user",
        "layer": "people",
        "detail": "Request models, keys and budgets; ship workloads.",
        "dataClass": "internal",
        "service": "Person",
        "serviceId": null,
        "docs": null,
        "officialIcon": null
      }
    },
    {
      "id": "portal",
      "type": "architecture",
      "position": {
        "x": 340,
        "y": 220
      },
      "data": {
        "label": "Developer portal",
        "role": "experience",
        "layer": "people",
        "detail": "Model catalog, key issuance, budgets, eval results.",
        "dataClass": "internal",
        "service": "Cloud Run",
        "serviceId": "gcp.cloud-run",
        "docs": "https://cloud.google.com/run",
        "officialIcon": "cloud_run"
      }
    },
    {
      "id": "identity",
      "type": "architecture",
      "position": {
        "x": 340,
        "y": 40
      },
      "data": {
        "label": "Workload identity",
        "role": "identity",
        "layer": "control",
        "detail": "Keys and tokens bound to a workload and environment.",
        "dataClass": "identity",
        "service": "Identity Platform",
        "serviceId": "gcp.identity-platform",
        "docs": "https://cloud.google.com/security/products/identity-platform",
        "officialIcon": null
      }
    },
    {
      "id": "gateway",
      "type": "architecture",
      "position": {
        "x": 640,
        "y": 220
      },
      "data": {
        "label": "Central AI gateway",
        "role": "gateway",
        "layer": "control",
        "detail": "Routing, fallback, cache, quotas, attribution tags.",
        "dataClass": "confidential",
        "service": "Apigee (AI gateway policies)",
        "serviceId": "gcp.apigee",
        "docs": "https://cloud.google.com/apigee",
        "officialIcon": null
      }
    },
    {
      "id": "guardrails",
      "type": "architecture",
      "position": {
        "x": 640,
        "y": 40
      },
      "data": {
        "label": "Guardrails",
        "role": "guardrail",
        "layer": "control",
        "detail": "PII redaction, injection and secret detection, content policy.",
        "dataClass": "confidential",
        "service": "Model Armor",
        "serviceId": "gcp.model-armor",
        "docs": "https://cloud.google.com/security/products/model-armor",
        "officialIcon": null
      }
    },
    {
      "id": "policy",
      "type": "architecture",
      "position": {
        "x": 640,
        "y": 400
      },
      "data": {
        "label": "Model catalog and routing policy",
        "role": "store",
        "layer": "knowledge",
        "detail": "Approved models, regions, data classes, fallbacks per workload.",
        "dataClass": "internal",
        "service": "Firestore",
        "serviceId": "gcp.firestore",
        "docs": "https://cloud.google.com/firestore",
        "officialIcon": null
      }
    },
    {
      "id": "models",
      "type": "architecture",
      "position": {
        "x": 940,
        "y": 220
      },
      "data": {
        "label": "Approved model pool",
        "role": "model",
        "layer": "intelligence",
        "detail": "Several providers and sizes behind one interface.",
        "dataClass": "confidential",
        "service": "Gemini 3.8 Flash (Agent Platform)",
        "serviceId": "gcp.gemini",
        "docs": "https://docs.cloud.google.com/gemini-enterprise-agent-platform/models/guides/gemini-3-8-flash",
        "officialIcon": "vertexai"
      }
    },
    {
      "id": "keys",
      "type": "architecture",
      "position": {
        "x": 940,
        "y": 40
      },
      "data": {
        "label": "Provider keys and BYOK",
        "role": "secrets",
        "layer": "control",
        "detail": "Held by the plane, never by teams.",
        "dataClass": "secret",
        "service": "Secret Manager",
        "serviceId": "gcp.secret-manager",
        "docs": "https://cloud.google.com/security/products/secret-manager",
        "officialIcon": null
      }
    },
    {
      "id": "lake",
      "type": "architecture",
      "position": {
        "x": 1240,
        "y": 220
      },
      "data": {
        "label": "Telemetry and cost lake",
        "role": "observability",
        "layer": "assurance",
        "detail": "Every call: workload, model, tokens, latency, cache, cost.",
        "dataClass": "operational",
        "service": "BigQuery + Looker Studio",
        "serviceId": "gcp.bigquery",
        "docs": "https://cloud.google.com/bigquery",
        "officialIcon": null
      }
    },
    {
      "id": "chargeback",
      "type": "architecture",
      "position": {
        "x": 1540,
        "y": 220
      },
      "data": {
        "label": "Chargeback dashboards",
        "role": "analytics",
        "layer": "knowledge",
        "detail": "Cost per workload, per team and per accepted result.",
        "dataClass": "operational",
        "service": "BigQuery + Looker Studio",
        "serviceId": "gcp.bigquery",
        "docs": "https://cloud.google.com/bigquery",
        "officialIcon": null
      }
    },
    {
      "id": "gate",
      "type": "architecture",
      "position": {
        "x": 1240,
        "y": 400
      },
      "data": {
        "label": "Release eval gate",
        "role": "evals",
        "layer": "assurance",
        "detail": "Workload eval suites run in CI; regression blocks deploy.",
        "dataClass": "internal",
        "service": "Evaluation service (Agent Platform)",
        "serviceId": "gcp.evaluation",
        "docs": "https://docs.cloud.google.com/gemini-enterprise-agent-platform",
        "officialIcon": "vertexai"
      }
    },
    {
      "id": "board",
      "type": "architecture",
      "position": {
        "x": 940,
        "y": 400
      },
      "data": {
        "label": "AI review board",
        "role": "review",
        "layer": "assurance",
        "detail": "Approves new models, data classes and high-risk workloads.",
        "dataClass": "internal",
        "service": "Review console on Cloud Run",
        "serviceId": "gcp.review-console",
        "docs": "https://cloud.google.com/run",
        "officialIcon": "cloud_run"
      }
    },
    {
      "id": "pipelines",
      "type": "architecture",
      "position": {
        "x": 1540,
        "y": 400
      },
      "data": {
        "label": "CI/CD pipelines",
        "role": "system",
        "layer": "people",
        "detail": "Call the gate before promotion.",
        "dataClass": "internal",
        "service": "External system",
        "serviceId": null,
        "docs": null,
        "officialIcon": null
      }
    }
  ],
  "edges": [
    {
      "id": "request-access",
      "source": "teams",
      "target": "portal",
      "label": "Workload registration",
      "type": "smoothstep",
      "animated": true,
      "data": {
        "kind": "data",
        "dataClass": "internal"
      }
    },
    {
      "id": "issue",
      "source": "portal",
      "target": "identity",
      "label": "Workload-bound key",
      "type": "smoothstep",
      "animated": false,
      "data": {
        "kind": "control",
        "dataClass": "identity"
      }
    },
    {
      "id": "register",
      "source": "portal",
      "target": "policy",
      "label": "Models, budget, data class",
      "type": "smoothstep",
      "animated": true,
      "data": {
        "kind": "data",
        "dataClass": "internal"
      }
    },
    {
      "id": "approve",
      "source": "board",
      "target": "policy",
      "label": "Approval for new model or data class",
      "type": "smoothstep",
      "animated": false,
      "data": {
        "kind": "control",
        "dataClass": "internal"
      }
    },
    {
      "id": "traffic",
      "source": "teams",
      "target": "gateway",
      "label": "Model calls with workload key",
      "type": "smoothstep",
      "animated": true,
      "data": {
        "kind": "data",
        "dataClass": "confidential"
      }
    },
    {
      "id": "check",
      "source": "gateway",
      "target": "guardrails",
      "label": "Scan request and response",
      "type": "smoothstep",
      "animated": false,
      "data": {
        "kind": "control",
        "dataClass": "confidential"
      }
    },
    {
      "id": "route-policy",
      "source": "gateway",
      "target": "policy",
      "label": "Routing and budget lookup",
      "type": "smoothstep",
      "animated": false,
      "data": {
        "kind": "control",
        "dataClass": "internal"
      }
    },
    {
      "id": "route",
      "source": "gateway",
      "target": "models",
      "label": "Routed call",
      "type": "smoothstep",
      "animated": true,
      "data": {
        "kind": "data",
        "dataClass": "confidential"
      }
    },
    {
      "id": "authenticate",
      "source": "models",
      "target": "keys",
      "label": "Provider credential",
      "type": "smoothstep",
      "animated": false,
      "data": {
        "kind": "control",
        "dataClass": "secret"
      }
    },
    {
      "id": "emit",
      "source": "gateway",
      "target": "lake",
      "label": "Call record",
      "type": "smoothstep",
      "animated": false,
      "data": {
        "kind": "telemetry",
        "dataClass": "operational"
      }
    },
    {
      "id": "attribute",
      "source": "lake",
      "target": "chargeback",
      "label": "Cost per workload",
      "type": "smoothstep",
      "animated": true,
      "data": {
        "kind": "data",
        "dataClass": "operational"
      }
    },
    {
      "id": "gate-run",
      "source": "pipelines",
      "target": "gate",
      "label": "Run workload evals",
      "type": "smoothstep",
      "animated": false,
      "data": {
        "kind": "control",
        "dataClass": "internal"
      }
    },
    {
      "id": "gate-result",
      "source": "gate",
      "target": "portal",
      "label": "Pass or block with diff",
      "type": "smoothstep",
      "animated": true,
      "data": {
        "kind": "data",
        "dataClass": "internal"
      }
    }
  ],
  "viewport": {
    "x": 0,
    "y": 0,
    "zoom": 1
  }
}
