<mxfile host="ai-architect-catalog"><diagram id="ai-governance-plane-gcp" name="AI governance plane / gcp"><mxGraphModel grid="1" gridSize="10"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="teams" value="Product teams
Person" data-role="user" data-service="external" data-class="internal" style="rounded=1;whiteSpace=wrap;html=0;arcSize=10;fillColor=#8AB4FF33;strokeColor=#8AB4FF;fontColor=#0f1017;fontSize=12;" vertex="1" parent="1"><mxGeometry x="40" y="220" width="252" height="112" as="geometry"/></mxCell><mxCell id="portal" value="Developer portal
Cloud Run" data-role="experience" data-service="gcp.cloud-run" data-class="internal" style="rounded=1;whiteSpace=wrap;html=0;arcSize=10;fillColor=#8AB4FF33;strokeColor=#8AB4FF;fontColor=#0f1017;fontSize=12;" vertex="1" parent="1"><mxGeometry x="340" y="220" width="252" height="112" as="geometry"/></mxCell><mxCell id="identity" value="Workload identity
Identity Platform" data-role="identity" data-service="gcp.identity-platform" data-class="identity" style="rounded=1;whiteSpace=wrap;html=0;arcSize=10;fillColor=#B9A7FF33;strokeColor=#B9A7FF;fontColor=#0f1017;fontSize=12;" vertex="1" parent="1"><mxGeometry x="340" y="40" width="252" height="112" as="geometry"/></mxCell><mxCell id="gateway" value="Central AI gateway
Apigee (AI gateway policies)" data-role="gateway" data-service="gcp.apigee" data-class="confidential" style="rounded=1;whiteSpace=wrap;html=0;arcSize=10;fillColor=#B9A7FF33;strokeColor=#B9A7FF;fontColor=#0f1017;fontSize=12;" vertex="1" parent="1"><mxGeometry x="640" y="220" width="252" height="112" as="geometry"/></mxCell><mxCell id="guardrails" value="Guardrails
Model Armor" data-role="guardrail" data-service="gcp.model-armor" data-class="confidential" style="rounded=1;whiteSpace=wrap;html=0;arcSize=10;fillColor=#B9A7FF33;strokeColor=#B9A7FF;fontColor=#0f1017;fontSize=12;" vertex="1" parent="1"><mxGeometry x="640" y="40" width="252" height="112" as="geometry"/></mxCell><mxCell id="policy" value="Model catalog and routing policy
Firestore" data-role="store" data-service="gcp.firestore" data-class="internal" style="rounded=1;whiteSpace=wrap;html=0;arcSize=10;fillColor=#FFC07A33;strokeColor=#FFC07A;fontColor=#0f1017;fontSize=12;" vertex="1" parent="1"><mxGeometry x="640" y="400" width="252" height="112" as="geometry"/></mxCell><mxCell id="models" value="Approved model pool
Gemini 3.8 Flash (Agent Platform)" data-role="model" data-service="gcp.gemini" data-class="confidential" style="rounded=1;whiteSpace=wrap;html=0;arcSize=10;fillColor=#5EE6CF33;strokeColor=#5EE6CF;fontColor=#0f1017;fontSize=12;" vertex="1" parent="1"><mxGeometry x="940" y="220" width="252" height="112" as="geometry"/></mxCell><mxCell id="keys" value="Provider keys and BYOK
Secret Manager" data-role="secrets" data-service="gcp.secret-manager" data-class="secret" style="rounded=1;whiteSpace=wrap;html=0;arcSize=10;fillColor=#B9A7FF33;strokeColor=#B9A7FF;fontColor=#0f1017;fontSize=12;" vertex="1" parent="1"><mxGeometry x="940" y="40" width="252" height="112" as="geometry"/></mxCell><mxCell id="lake" value="Telemetry and cost lake
BigQuery + Looker Studio" data-role="observability" data-service="gcp.bigquery" data-class="operational" style="rounded=1;whiteSpace=wrap;html=0;arcSize=10;fillColor=#FF9FCB33;strokeColor=#FF9FCB;fontColor=#0f1017;fontSize=12;" vertex="1" parent="1"><mxGeometry x="1240" y="220" width="252" height="112" as="geometry"/></mxCell><mxCell id="chargeback" value="Chargeback dashboards
BigQuery + Looker Studio" data-role="analytics" data-service="gcp.bigquery" data-class="operational" style="rounded=1;whiteSpace=wrap;html=0;arcSize=10;fillColor=#FFC07A33;strokeColor=#FFC07A;fontColor=#0f1017;fontSize=12;" vertex="1" parent="1"><mxGeometry x="1540" y="220" width="252" height="112" as="geometry"/></mxCell><mxCell id="gate" value="Release eval gate
Evaluation service (Agent Platform)" data-role="evals" data-service="gcp.evaluation" data-class="internal" style="rounded=1;whiteSpace=wrap;html=0;arcSize=10;fillColor=#FF9FCB33;strokeColor=#FF9FCB;fontColor=#0f1017;fontSize=12;" vertex="1" parent="1"><mxGeometry x="1240" y="400" width="252" height="112" as="geometry"/></mxCell><mxCell id="board" value="AI review board
Review console on Cloud Run" data-role="review" data-service="gcp.review-console" data-class="internal" style="rounded=1;whiteSpace=wrap;html=0;arcSize=10;fillColor=#FF9FCB33;strokeColor=#FF9FCB;fontColor=#0f1017;fontSize=12;" vertex="1" parent="1"><mxGeometry x="940" y="400" width="252" height="112" as="geometry"/></mxCell><mxCell id="pipelines" value="CI/CD pipelines
External system" data-role="system" data-service="external" data-class="internal" style="rounded=1;whiteSpace=wrap;html=0;arcSize=10;fillColor=#8AB4FF33;strokeColor=#8AB4FF;fontColor=#0f1017;fontSize=12;" vertex="1" parent="1"><mxGeometry x="1540" y="400" width="252" height="112" as="geometry"/></mxCell><mxCell id="request-access" value="Workload registration" data-kind="data" data-class="internal" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=0;fontSize=10;" edge="1" source="teams" target="portal" parent="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="issue" value="Workload-bound key" data-kind="control" data-class="identity" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=0;fontSize=10;dashed=1;" edge="1" source="portal" target="identity" parent="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="register" value="Models, budget, data class" data-kind="data" data-class="internal" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=0;fontSize=10;" edge="1" source="portal" target="policy" parent="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="approve" value="Approval for new model or data class" data-kind="control" data-class="internal" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=0;fontSize=10;dashed=1;" edge="1" source="board" target="policy" parent="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="traffic" value="Model calls with workload key" data-kind="data" data-class="confidential" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=0;fontSize=10;" edge="1" source="teams" target="gateway" parent="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="check" value="Scan request and response" data-kind="control" data-class="confidential" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=0;fontSize=10;dashed=1;" edge="1" source="gateway" target="guardrails" parent="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="route-policy" value="Routing and budget lookup" data-kind="control" data-class="internal" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=0;fontSize=10;dashed=1;" edge="1" source="gateway" target="policy" parent="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="route" value="Routed call" data-kind="data" data-class="confidential" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=0;fontSize=10;" edge="1" source="gateway" target="models" parent="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="authenticate" value="Provider credential" data-kind="control" data-class="secret" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=0;fontSize=10;dashed=1;" edge="1" source="models" target="keys" parent="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="emit" value="Call record" data-kind="telemetry" data-class="operational" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=0;fontSize=10;dashed=1;dashPattern=1 3;" edge="1" source="gateway" target="lake" parent="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="attribute" value="Cost per workload" data-kind="data" data-class="operational" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=0;fontSize=10;" edge="1" source="lake" target="chargeback" parent="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="gate-run" value="Run workload evals" data-kind="control" data-class="internal" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=0;fontSize=10;dashed=1;" edge="1" source="pipelines" target="gate" parent="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="gate-result" value="Pass or block with diff" data-kind="data" data-class="internal" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=0;fontSize=10;" edge="1" source="gate" target="portal" parent="1"><mxGeometry relative="1" as="geometry"/></mxCell></root></mxGraphModel></diagram></mxfile>
