From a2dfad6ee6a4f71bc50e1b0d61773e7783dcf18d Mon Sep 17 00:00:00 2001 From: Kevin Su Date: Tue, 21 Apr 2026 13:44:40 -0700 Subject: [PATCH 01/12] Add system architecture documentation Document the Flyte 2 backend architecture including component diagrams, data flow, plugin system, API surface, deployment modes, and infrastructure dependencies. Signed-off-by: Kevin Su --- docs/architecture.md | 619 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 619 insertions(+) create mode 100644 docs/architecture.md diff --git a/docs/architecture.md b/docs/architecture.md new file mode 100644 index 0000000000..1d84feddb4 --- /dev/null +++ b/docs/architecture.md @@ -0,0 +1,619 @@ +# Flyte 2 System Architecture + +**Reliably orchestrate ML pipelines, models, and agents at scale — in pure Python.** + +This document describes the backend architecture of Flyte 2: its major components, how data flows through the system, and the role each component plays. + +--- + +## Table of Contents + +- [High-Level Overview](#high-level-overview) +- [System Architecture Diagram](#system-architecture-diagram) +- [Data Flow](#data-flow) +- [Component Reference](#component-reference) + - [Runs Service](#runs-service) + - [Executor Service](#executor-service) + - [Actions Service](#actions-service) + - [DataProxy Service](#dataproxy-service) + - [Cache Service](#cache-service) + - [Events Service](#events-service) + - [Secret Service](#secret-service) + - [App Service](#app-service) + - [Flyte Copilot](#flyte-copilot) + - [Manager (Unified Binary)](#manager-unified-binary) +- [Shared Libraries](#shared-libraries) + - [flytestdlib](#flytestdlib) + - [flyteplugins](#flyteplugins) + - [flyteidl2 (IDL)](#flyteidl2-idl) +- [Plugin System](#plugin-system) +- [Infrastructure Dependencies](#infrastructure-dependencies) +- [API Surface](#api-surface) +- [Deployment Modes](#deployment-modes) +- [Security](#security) + +--- + +## High-Level Overview + +Flyte 2 is a Kubernetes-native workflow orchestration platform. The backend is a collection of Go microservices that communicate over **gRPC (buf connect)**, persist state in **PostgreSQL**, execute tasks as **Kubernetes Pods**, and store artifacts in **object storage** (S3 / GCS / Azure Blob / RustFS). + +``` +┌──────────────────────────────────────────────────────────────────────┐ +│ User / SDK / CLI │ +└───────────────────────────────┬──────────────────────────────────────┘ + │ gRPC (buf connect) + ▼ +┌──────────────────────────────────────────────────────────────────────┐ +│ Control Plane │ +│ ┌────────────┐ ┌─────────┐ ┌───────────┐ ┌───────┐ ┌────────────┐ │ +│ │ Runs │ │ Actions │ │ DataProxy │ │ Cache │ │ Events │ │ +│ │ Service │ │ Service │ │ Service │ │Service│ │ Service │ │ +│ └─────┬──────┘ └────┬────┘ └─────┬─────┘ └───┬───┘ └─────┬──────┘ │ +│ │ │ │ │ │ │ +│ └──────────────┼────────────┼────────────┼────────────┘ │ +│ │ │ │ │ +│ ┌────▼────┐ ┌────▼─────┐ ┌──▼───┐ │ +│ │PostgreSQL│ │ Object │ │Secret│ │ +│ │ │ │ Storage │ │ Svc │ │ +│ └─────────┘ └──────────┘ └──────┘ │ +└──────────────────────────────────────────────────────────────────────┘ + │ + TaskAction CRDs + │ + ▼ +┌──────────────────────────────────────────────────────────────────────┐ +│ Data Plane (Kubernetes) │ +│ │ +│ ┌────────────────┐ ┌──────────────────────────────────┐ │ +│ │ Executor │ │ Task Pod │ │ +│ │ (K8s Controller│─────▶│ ┌──────────┐ ┌─────────────┐ │ │ +│ │ + Plugins) │ │ │ User │ │ Copilot │ │ │ +│ └────────────────┘ │ │ Container │ │ (sidecar) │ │ │ +│ │ └──────────┘ └──────┬──────┘ │ │ +│ └───────────────────────┼─────────┘ │ +│ │ │ +│ Upload outputs │ +│ │ │ +│ ┌──────▼──────┐ │ +│ │ Object │ │ +│ │ Storage │ │ +│ └─────────────┘ │ +└──────────────────────────────────────────────────────────────────────┘ +``` + +--- + +## System Architecture Diagram + +``` + ┌───────────────────────┐ + │ User / SDK / CLI │ + └───────────┬───────────┘ + │ + CreateRun │ WatchRuns + (gRPC) │ (streaming) + ▼ + ┌──────────────────────────┐ + │ Runs Service │ + │ (port 8090) │ + │ │ + │ • RunService (public) │ + │ • InternalRunService │ + │ • TaskService │ + │ • TriggerService │ + │ • ProjectService │ + │ • RunLogsService │ + └──┬───────┬───────┬───────┘ + │ │ │ + ┌──────────────┘ │ └─────────────────┐ + ▼ ▼ ▼ + ┌─────────────────┐ ┌─────────────────┐ ┌──────────────────┐ + │ PostgreSQL │ │ Actions Service │ │ DataProxy │ + │ │ │ │ │ Service │ + │ • runs │ │ • Watch │ │ (port 8088) │ + │ • actions │ │ TaskAction │ │ │ + │ • action_attempts│ │ CRDs │ │ • Signed URLs │ + │ • cache entries │ │ • CRUD on │ │ • Artifact mgmt │ + └─────────────────┘ │ actions │ │ • Log streaming │ + └────────┬─────────┘ └────────┬─────────┘ + │ │ + TaskAction CRD │ + created in K8s ┌──────▼──────┐ + │ │ Object │ + ▼ │ Storage │ + ┌──────────────────┐ │ (S3/GCS/ │ + │ Executor │ │ Azure/ │ + │ (K8s Controller) │ │ RustFS) │ + │ │ └─────────────┘ + │ • Watches CRDs │ ▲ + │ • Provisions Pods │ │ + │ • Runs plugins │ │ + └────────┬─────────┘ Upload outputs + │ │ + ┌────────▼─────────┐ ┌──────┴──────┐ + │ Task Pod │ │ Copilot │ + │ │────────▶│ (sidecar) │ + │ User Container │ │ │ + └──────────────────┘ └──────────────┘ + │ + Status update (gRPC) + │ + ▼ + ┌──────────────────┐ + │ InternalRunService│──▶ PostgreSQL ──▶ WatchRunDetails + │ (UpdateAction │ stream to client + │ Status) │ + └──────────────────┘ + + ┌─────────────────────────────────────────────────────────┐ + │ Supporting Services │ + │ │ + │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────┐ │ + │ │ Cache │ │ Events │ │ Secret │ │ App │ │ + │ │ Service │ │ Service │ │ Service │ │ Service│ │ + │ │ │ │ │ │ │ │ │ │ + │ │ Dedup │ │ Event │ │ Secret │ │ App │ │ + │ │ caching │ │ streaming│ │ storage │ │ meta │ │ + │ └──────────┘ └──────────┘ └──────────┘ └────────┘ │ + └─────────────────────────────────────────────────────────┘ +``` + +--- + +## Data Flow + +### End-to-End Execution + +The following describes what happens when a user submits a workflow: + +``` + Step What happens Where + ──── ──────────────────────────────────────────────────── ───────────────── + 1 User calls RunService.CreateRun() Client → Runs Service + 2 Run record + root action written to PostgreSQL Runs Service → DB + 3 Actions controller detects new action Actions Service + 4 TaskAction CRD created in Kubernetes Actions Service → K8s + 5 Executor controller sees the CRD Executor + 6 Plugin resolves task spec, creates Pod + Copilot Executor → K8s + 7 Copilot init-container downloads inputs from storage Copilot → Object Storage + 8 User container executes K8s Pod + 9 Copilot sidecar uploads outputs to object storage Copilot → Object Storage + 10 Executor calls InternalRunService.UpdateActionStatus() Executor → Runs Service + 11 Action status updated in PostgreSQL Runs Service → DB + 12 Client receives update via WatchRunDetails() stream Runs Service → Client +``` + +### Data Access (Artifacts) + +``` +Client ──GetUploadURL()──▶ DataProxy ──▶ Signed URL +Client ──PUT───────────────────────────▶ Object Storage + +Client ──GetDownloadURL()──▶ DataProxy ──▶ Signed URL +Client ──GET────────────────────────────▶ Object Storage +``` + +### Caching (Deduplication) + +``` +Executor ──lookup(task_key)──▶ Cache Service + ◀── HIT: cached output ──┘ + ◀── MISS ────────────────┘ + │ + ▼ (execute task, then) +Executor ──put(task_key, output)──▶ Cache Service +``` + +--- + +## Component Reference + +### Runs Service + +| | | +|---|---| +| **Source** | `/runs` | +| **Entry point** | `runs/cmd/main.go` | +| **Default port** | 8090 | +| **Database** | PostgreSQL (runs, actions, action_attempts tables) | + +The central control-plane service. It owns the **run lifecycle**: creation, monitoring, abort, and streaming of status updates. It exposes both public APIs (for users/SDKs) and internal APIs (for the Executor). + +**Public gRPC services:** +- `RunService` — CreateRun, AbortRun, GetRunDetails, WatchRunDetails, ListRuns, WatchRuns +- `TaskService` — GetTask, ListTasks +- `TriggerService` — manage triggers for scheduled/event-driven runs +- `ProjectService` — project and domain management +- `RunLogsService` — stream pod logs from Kubernetes + +**Internal gRPC services:** +- `InternalRunService` — RecordAction, UpdateActionStatus, RecordActionEvents (used by the Executor) +- `TranslatorService` — convert between execution models + +--- + +### Executor Service + +| | | +|---|---| +| **Source** | `/executor` | +| **Entry point** | `executor/cmd/main.go` | +| **Type** | Kubernetes controller (no HTTP port) | + +A **Kubernetes controller** that watches `TaskAction` CRDs and executes them as Pods. It uses the **plugin system** to handle different task types (container, Spark, Ray, Dask, etc.). + +**Responsibilities:** +- Watch TaskAction custom resources +- Resolve task specifications and select the appropriate plugin +- Create Pods with the user container + Flyte Copilot sidecar +- Monitor pod lifecycle and capture execution status +- Report results back to the Runs Service via `InternalRunService` +- Handle admission webhooks for pod validation/mutation + +**CRD:** `TaskAction` — defined in `executor/api/v1/taskaction_types.go` + +--- + +### Actions Service + +| | | +|---|---| +| **Source** | `/actions` | + +Bridges the Runs Service and Kubernetes. It watches `TaskAction` CRDs and provides CRUD operations and streaming status updates on actions. + +**gRPC service:** `ActionsService` — GetAction, WatchAction, CreateAction + +--- + +### DataProxy Service + +| | | +|---|---| +| **Source** | `/dataproxy` | +| **Default port** | 8088 | + +Manages **artifact storage and data access**. Generates time-limited signed URLs so clients can upload/download data directly from object storage without exposing credentials. + +**gRPC services:** +- `DataProxyService` — GetUploadURL, GetDownloadURL, GetArtifact +- `ClusterService` — cluster capability queries + +--- + +### Cache Service + +| | | +|---|---| +| **Source** | `/cache_service` | + +Provides **deterministic task deduplication**. When a task with identical inputs has already run, the cache returns the stored output instead of re-executing. + +**gRPC service:** `CacheService` — Get, Put, Delete, GetOrExtendReservation + +--- + +### Events Service + +| | | +|---|---| +| **Source** | `/events` | + +Aggregates execution events from all sources and streams them to subscribers. Useful for building dashboards, audit logs, and external integrations. + +**gRPC service:** `EventsProxyService` — WatchClusterEvents + +--- + +### Secret Service + +| | | +|---|---| +| **Source** | `/secret` | + +Centralized secret management. Stores and retrieves secrets, with optional integration to cloud secret managers (AWS Secrets Manager, GCP Secret Manager, Azure Key Vault). + +--- + +### App Service + +| | | +|---|---| +| **Source** | `/app` | + +Serves application metadata and configurations for long-running services (model serving, apps). + +**gRPC services:** +- `AppService` — GetApp, ListApps +- `AppLogsService` — stream app logs + +--- + +### Flyte Copilot + +| | | +|---|---| +| **Source** | `/flytecopilot` | + +A **sidecar binary** injected into every task pod. Operates in two modes: + +| Mode | Phase | What it does | +|------|-------|--------------| +| **Downloader** | Init container | Fetches task metadata and input data from object storage before the user container starts | +| **Sidecar** | Runtime | Monitors the user container, uploads outputs to object storage after execution completes | + +--- + +### Manager (Unified Binary) + +| | | +|---|---| +| **Source** | `/manager` | +| **Entry point** | `manager/cmd/main.go` | + +Runs **all services in a single process** for simplified deployment. Aggregates Runs, Executor, Actions, DataProxy, Events, Cache, and Secret services into one binary. + +--- + +## Shared Libraries + +### flytestdlib + +| | | +|---|---| +| **Source** | `/flytestdlib` | + +Shared infrastructure library used by all services: + +| Module | Purpose | +|--------|---------| +| `database` | PostgreSQL connectivity (pgx/gorm) | +| `storage` | Object storage abstraction (S3, GCS, Azure, RustFS) | +| `logger` | Structured logging with request context | +| `config` | Configuration management (flags, YAML, env vars) | +| `app` | Service framework (HTTP server, graceful shutdown, health checks) | +| `promutils` | Prometheus metrics helpers | +| `k8s` | Kubernetes client utilities | +| `cache` | In-memory caching (freecache, redis) | +| `grpcutils` | gRPC interceptors and utilities | + +--- + +### flyteplugins + +| | | +|---|---| +| **Source** | `/flyteplugins` | + +The plugin framework and built-in plugins for task execution. See [Plugin System](#plugin-system) below. + +--- + +### flyteidl2 (IDL) + +| | | +|---|---| +| **Source** | `/flyteidl2` | +| **Generated code** | `/gen/go/flyteidl2/` | + +Protocol Buffer definitions for all APIs. Organized into sub-packages: + +| Package | Contents | +|---------|----------| +| `core` | TaskTemplate, Literal, TaskSpec | +| `workflow` | Run, Action, RunSpec | +| `task` | Task execution and metadata | +| `common` | Identifier, Phase, InputOutput | +| `cacheservice` | Cache entry types | +| `dataproxy` | Signed URL request/response | +| `actions` | Action management types | +| `auth` | Authentication/authorization | +| `app` | Application service types | +| `trigger` | Trigger and scheduling | +| `plugins` | Plugin-specific configs (Spark, Ray, Dask) | + +--- + +## Plugin System + +Plugins extend the Executor to handle different task types. When a task is submitted, the Executor matches the `task_type` field to a registered plugin. + +### Plugin Lifecycle + +``` +TaskAction CRD arrives + │ + ▼ +Executor looks up plugin by task_type + │ + ▼ +Plugin validates task spec + │ + ▼ +Plugin creates K8s resource (Pod / SparkApplication / RayJob / ...) + │ + ▼ +Plugin monitors execution + │ + ▼ +Plugin captures outputs + │ + ▼ +Plugin reports status → InternalRunService +``` + +### Built-in Plugins + +| Category | Plugin | Description | +|----------|--------|-------------| +| **K8s** | Pod | Standard container execution (default) | +| **K8s** | Spark | Distributed Spark jobs | +| **K8s** | Ray | Ray cluster jobs | +| **K8s** | Dask | Dask distributed computing | +| **K8s** | Kubeflow | Training operators (TF, PyTorch, MPI) | +| **Core** | Container | OCI container execution | +| **Web API** | HTTP | REST-based task execution | +| **AWS** | Batch | AWS Batch job submission | +| **AWS** | Athena | SQL query execution | +| **AWS** | SageMaker | ML model training/inference | + +**Source:** `/flyteplugins/go/tasks/plugins/` + +**Plugin machinery** (base interfaces): `/flyteplugins/go/tasks/pluginmachinery/` + +--- + +## Infrastructure Dependencies + +``` +┌──────────────────────────────────────────────────────────────────┐ +│ Infrastructure │ +│ │ +│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │ +│ │ Kubernetes │ │ PostgreSQL │ │ Object Storage │ │ +│ │ │ │ │ │ │ │ +│ │ • API server │ │ • Run state │ │ • S3 / GCS / Azure │ │ +│ │ • Pod exec │ │ • Actions │ │ • Task inputs/ │ │ +│ │ • CRDs │ │ • Cache │ │ outputs │ │ +│ │ • RBAC │ │ • Migrations │ │ • Artifacts │ │ +│ │ • Volumes │ │ │ │ • Logs │ │ +│ └──────────────┘ └──────────────┘ └──────────────────────┘ │ +│ │ +│ ┌──────────────────────────────────────┐ │ +│ │ (Optional) Secret Managers │ │ +│ │ AWS Secrets Manager / GCP Secret │ │ +│ │ Manager / Azure Key Vault │ │ +│ └──────────────────────────────────────┘ │ +└──────────────────────────────────────────────────────────────────┘ +``` + +| Dependency | Role | Required? | +|------------|------|-----------| +| **Kubernetes** | Task execution, CRD storage, RBAC, pod scheduling | Yes | +| **PostgreSQL** | Persistent state for runs, actions, cache entries | Yes | +| **Object Storage** | Artifact storage (inputs, outputs, logs) | Yes | +| **Secret Manager** | External secret backend (AWS/GCP/Azure) | Optional (falls back to K8s secrets) | + +--- + +## API Surface + +All APIs use **buf connect** (gRPC over HTTP/2 and HTTP/1.1). + +### User-Facing APIs + +| Service | Proto Path | Key RPCs | +|---------|-----------|----------| +| RunService | `flyteidl2.workflow.RunService` | CreateRun, AbortRun, GetRunDetails, WatchRunDetails, ListRuns, WatchRuns | +| TaskService | `flyteidl2.task.TaskService` | GetTask, ListTasks | +| DataProxyService | `flyteidl2.dataproxy.DataProxyService` | GetUploadURL, GetDownloadURL, GetArtifact | +| CacheService | `flyteidl2.cacheservice.CacheService` | Get, Put, Delete, GetOrExtendReservation | +| TriggerService | `flyteidl2.trigger.TriggerService` | CreateTrigger, GetTrigger, ListTriggers | +| ProjectService | `flyteidl2.project.ProjectService` | GetProject, ListProjects | +| AuthService | `flyteidl2.auth.AuthService` | OAuth/OIDC endpoints | + +### Internal APIs (component-to-component) + +| Service | Proto Path | Key RPCs | +|---------|-----------|----------| +| InternalRunService | `flyteidl2.workflow.InternalRunService` | RecordAction, UpdateActionStatus, RecordActionEvents | +| ActionsService | `flyteidl2.actions.ActionsService` | GetAction, WatchAction, CreateAction | +| EventsProxyService | `flyteidl2.workflow.EventsProxyService` | WatchClusterEvents | +| AppService | `flyteidl2.app.AppService` | GetApp, GetAppLogs | +| ClusterService | `flyteidl2.cluster.ClusterService` | GetCluster | + +### Communication Patterns + +| Pattern | Example | +|---------|---------| +| **Synchronous gRPC** | Client → RunService.CreateRun, Executor → InternalRunService.UpdateActionStatus | +| **Server-streaming gRPC** | RunService.WatchRunDetails, EventsProxyService.WatchClusterEvents | +| **K8s Watch** | Executor watches TaskAction CRDs, Actions Service watches TaskAction CRDs | + +--- + +## Deployment Modes + +### Unified Mode (Single Binary) + +All services run in one process via the **Manager** binary. Suitable for development, testing, and small-scale production. + +``` +Client ──▶ Manager:8090 ──▶ [All services in-process, no network hops] +``` + +```bash +# Single container runs everything +flyte --config config.yaml +``` + +### Split Mode (Multiple Binaries) + +Each service runs independently for horizontal scaling and isolation. + +``` +Client ──▶ Runs:8090 + ├──▶ Actions Service + ├──▶ DataProxy:8088 + ├──▶ Cache Service + └──▶ Executor (via K8s CRDs) +``` + +### Multi-Cluster + +Executors run on multiple Kubernetes clusters, all reporting to a central Runs Service. TaskAction CRDs include a `cluster` field to route execution. + +``` + ┌──────────────┐ + │ Runs Service │ (central) + └──────┬───────┘ + │ + ┌───────────┼───────────┐ + ▼ ▼ ▼ + ┌──────────┐ ┌──────────┐ ┌──────────┐ + │Executor A│ │Executor B│ │Executor C│ + │(Cluster 1)│ │(Cluster 2)│ │(Cluster 3)│ + └──────────┘ └──────────┘ └──────────┘ +``` + +### Helm Chart + +Production Kubernetes deployment via `/charts/flyte-binary/`. + +--- + +## Security + +| Layer | Mechanism | +|-------|-----------| +| **Authentication** | Optional OAuth/OIDC via AuthService | +| **Pod identity** | Kubernetes ServiceAccount tokens | +| **Transport** | TLS for all gRPC connections (configurable) | +| **Data access** | Time-limited signed URLs from DataProxy | +| **Secrets** | Centralized Secret Service with external vault integration | +| **Authorization** | Kubernetes RBAC for CRD operations; project-level access control | + +--- + +## Key Source Locations + +| What | Path | +|------|------| +| Unified binary entry point | `manager/cmd/main.go` | +| Runs Service | `runs/` | +| Executor controller | `executor/` | +| Actions Service | `actions/` | +| DataProxy Service | `dataproxy/` | +| Cache Service | `cache_service/` | +| Events Service | `events/` | +| Secret Service | `secret/` | +| App Service | `app/` | +| Copilot sidecar | `flytecopilot/` | +| IDL (proto definitions) | `flyteidl2/` | +| Generated Go code | `gen/go/flyteidl2/` | +| Plugin framework | `flyteplugins/go/tasks/pluginmachinery/` | +| Built-in plugins | `flyteplugins/go/tasks/plugins/` | +| Shared library | `flytestdlib/` | +| Helm chart | `charts/flyte-binary/` | +| Dockerfile | `Dockerfile` | From 6f5d9d858f0a60d4cc02e14664bab03a23a038cc Mon Sep 17 00:00:00 2001 From: Kevin Su Date: Wed, 22 Apr 2026 12:32:25 -0700 Subject: [PATCH 02/12] Fix diagram alignment by converting to Mermaid Signed-off-by: Kevin Su --- docs/architecture.md | 230 ++++++++++++++++--------------------------- 1 file changed, 86 insertions(+), 144 deletions(-) diff --git a/docs/architecture.md b/docs/architecture.md index 1d84feddb4..11791251a1 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -38,125 +38,81 @@ This document describes the backend architecture of Flyte 2: its major component Flyte 2 is a Kubernetes-native workflow orchestration platform. The backend is a collection of Go microservices that communicate over **gRPC (buf connect)**, persist state in **PostgreSQL**, execute tasks as **Kubernetes Pods**, and store artifacts in **object storage** (S3 / GCS / Azure Blob / RustFS). -``` -┌──────────────────────────────────────────────────────────────────────┐ -│ User / SDK / CLI │ -└───────────────────────────────┬──────────────────────────────────────┘ - │ gRPC (buf connect) - ▼ -┌──────────────────────────────────────────────────────────────────────┐ -│ Control Plane │ -│ ┌────────────┐ ┌─────────┐ ┌───────────┐ ┌───────┐ ┌────────────┐ │ -│ │ Runs │ │ Actions │ │ DataProxy │ │ Cache │ │ Events │ │ -│ │ Service │ │ Service │ │ Service │ │Service│ │ Service │ │ -│ └─────┬──────┘ └────┬────┘ └─────┬─────┘ └───┬───┘ └─────┬──────┘ │ -│ │ │ │ │ │ │ -│ └──────────────┼────────────┼────────────┼────────────┘ │ -│ │ │ │ │ -│ ┌────▼────┐ ┌────▼─────┐ ┌──▼───┐ │ -│ │PostgreSQL│ │ Object │ │Secret│ │ -│ │ │ │ Storage │ │ Svc │ │ -│ └─────────┘ └──────────┘ └──────┘ │ -└──────────────────────────────────────────────────────────────────────┘ - │ - TaskAction CRDs - │ - ▼ -┌──────────────────────────────────────────────────────────────────────┐ -│ Data Plane (Kubernetes) │ -│ │ -│ ┌────────────────┐ ┌──────────────────────────────────┐ │ -│ │ Executor │ │ Task Pod │ │ -│ │ (K8s Controller│─────▶│ ┌──────────┐ ┌─────────────┐ │ │ -│ │ + Plugins) │ │ │ User │ │ Copilot │ │ │ -│ └────────────────┘ │ │ Container │ │ (sidecar) │ │ │ -│ │ └──────────┘ └──────┬──────┘ │ │ -│ └───────────────────────┼─────────┘ │ -│ │ │ -│ Upload outputs │ -│ │ │ -│ ┌──────▼──────┐ │ -│ │ Object │ │ -│ │ Storage │ │ -│ └─────────────┘ │ -└──────────────────────────────────────────────────────────────────────┘ +```mermaid +flowchart TB + Client["User / SDK / CLI"] + + subgraph ControlPlane["Control Plane"] + Runs["Runs
Service"] + Actions["Actions
Service"] + DataProxy["DataProxy
Service"] + Cache["Cache
Service"] + Events["Events
Service"] + Secret["Secret
Service"] + end + + DB[("PostgreSQL")] + Storage[("Object Storage
S3 / GCS / Azure / RustFS")] + + subgraph DataPlane["Data Plane (Kubernetes)"] + Executor["Executor
(K8s Controller + Plugins)"] + subgraph Pod["Task Pod"] + User["User
Container"] + Copilot["Copilot
(sidecar)"] + end + end + + Client -- "gRPC (buf connect)" --> Runs + Runs <--> DB + Actions <--> DB + Cache <--> DB + DataProxy <--> Storage + Actions -- "TaskAction CRDs" --> Executor + Executor --> Pod + Copilot -- "Upload outputs" --> Storage + Executor -- "Status updates" --> Runs ``` --- ## System Architecture Diagram -``` - ┌───────────────────────┐ - │ User / SDK / CLI │ - └───────────┬───────────┘ - │ - CreateRun │ WatchRuns - (gRPC) │ (streaming) - ▼ - ┌──────────────────────────┐ - │ Runs Service │ - │ (port 8090) │ - │ │ - │ • RunService (public) │ - │ • InternalRunService │ - │ • TaskService │ - │ • TriggerService │ - │ • ProjectService │ - │ • RunLogsService │ - └──┬───────┬───────┬───────┘ - │ │ │ - ┌──────────────┘ │ └─────────────────┐ - ▼ ▼ ▼ - ┌─────────────────┐ ┌─────────────────┐ ┌──────────────────┐ - │ PostgreSQL │ │ Actions Service │ │ DataProxy │ - │ │ │ │ │ Service │ - │ • runs │ │ • Watch │ │ (port 8088) │ - │ • actions │ │ TaskAction │ │ │ - │ • action_attempts│ │ CRDs │ │ • Signed URLs │ - │ • cache entries │ │ • CRUD on │ │ • Artifact mgmt │ - └─────────────────┘ │ actions │ │ • Log streaming │ - └────────┬─────────┘ └────────┬─────────┘ - │ │ - TaskAction CRD │ - created in K8s ┌──────▼──────┐ - │ │ Object │ - ▼ │ Storage │ - ┌──────────────────┐ │ (S3/GCS/ │ - │ Executor │ │ Azure/ │ - │ (K8s Controller) │ │ RustFS) │ - │ │ └─────────────┘ - │ • Watches CRDs │ ▲ - │ • Provisions Pods │ │ - │ • Runs plugins │ │ - └────────┬─────────┘ Upload outputs - │ │ - ┌────────▼─────────┐ ┌──────┴──────┐ - │ Task Pod │ │ Copilot │ - │ │────────▶│ (sidecar) │ - │ User Container │ │ │ - └──────────────────┘ └──────────────┘ - │ - Status update (gRPC) - │ - ▼ - ┌──────────────────┐ - │ InternalRunService│──▶ PostgreSQL ──▶ WatchRunDetails - │ (UpdateAction │ stream to client - │ Status) │ - └──────────────────┘ - - ┌─────────────────────────────────────────────────────────┐ - │ Supporting Services │ - │ │ - │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────┐ │ - │ │ Cache │ │ Events │ │ Secret │ │ App │ │ - │ │ Service │ │ Service │ │ Service │ │ Service│ │ - │ │ │ │ │ │ │ │ │ │ - │ │ Dedup │ │ Event │ │ Secret │ │ App │ │ - │ │ caching │ │ streaming│ │ storage │ │ meta │ │ - │ └──────────┘ └──────────┘ └──────────┘ └────────┘ │ - └─────────────────────────────────────────────────────────┘ +```mermaid +flowchart TB + Client["User / SDK / CLI"] + + Runs["Runs Service (port 8090)
• RunService (public)
• InternalRunService
• TaskService
• TriggerService
• ProjectService
• RunLogsService"] + + DB[("PostgreSQL
• runs
• actions
• action_attempts
• cache entries")] + ActionsSvc["Actions Service
• Watch TaskAction CRDs
• CRUD on actions"] + DataProxy["DataProxy Service (port 8088)
• Signed URLs
• Artifact mgmt
• Log streaming"] + Storage[("Object Storage
S3 / GCS / Azure / RustFS")] + + Executor["Executor (K8s Controller)
• Watches CRDs
• Provisions Pods
• Runs plugins"] + Pod["Task Pod
User Container"] + Copilot["Copilot
(sidecar)"] + + Internal["InternalRunService
(UpdateActionStatus)"] + + subgraph Support["Supporting Services"] + CacheSvc["Cache Service
Dedup caching"] + EventsSvc["Events Service
Event streaming"] + SecretSvc["Secret Service
Secret storage"] + AppSvc["App Service
App metadata"] + end + + Client -- "CreateRun / WatchRuns (gRPC)" --> Runs + Runs --> DB + Runs --> ActionsSvc + Runs --> DataProxy + ActionsSvc -- "TaskAction CRD" --> Executor + Executor --> Pod + Pod --> Copilot + Copilot -- "Upload outputs" --> Storage + DataProxy --> Storage + Pod -- "Status update (gRPC)" --> Internal + Internal --> DB + DB -. "WatchRunDetails stream" .-> Client ``` --- @@ -466,26 +422,14 @@ Plugin reports status → InternalRunService ## Infrastructure Dependencies -``` -┌──────────────────────────────────────────────────────────────────┐ -│ Infrastructure │ -│ │ -│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │ -│ │ Kubernetes │ │ PostgreSQL │ │ Object Storage │ │ -│ │ │ │ │ │ │ │ -│ │ • API server │ │ • Run state │ │ • S3 / GCS / Azure │ │ -│ │ • Pod exec │ │ • Actions │ │ • Task inputs/ │ │ -│ │ • CRDs │ │ • Cache │ │ outputs │ │ -│ │ • RBAC │ │ • Migrations │ │ • Artifacts │ │ -│ │ • Volumes │ │ │ │ • Logs │ │ -│ └──────────────┘ └──────────────┘ └──────────────────────┘ │ -│ │ -│ ┌──────────────────────────────────────┐ │ -│ │ (Optional) Secret Managers │ │ -│ │ AWS Secrets Manager / GCP Secret │ │ -│ │ Manager / Azure Key Vault │ │ -│ └──────────────────────────────────────┘ │ -└──────────────────────────────────────────────────────────────────┘ +```mermaid +flowchart LR + subgraph Infra["Infrastructure"] + K8s["Kubernetes
• API server
• Pod exec
• CRDs
• RBAC
• Volumes"] + DB[("PostgreSQL
• Run state
• Actions
• Cache
• Migrations")] + Storage[("Object Storage
• S3 / GCS / Azure
• Task inputs/outputs
• Artifacts
• Logs")] + Secrets["(Optional) Secret Managers
AWS Secrets Manager /
GCP Secret Manager /
Azure Key Vault"] + end ``` | Dependency | Role | Required? | @@ -564,17 +508,15 @@ Client ──▶ Runs:8090 Executors run on multiple Kubernetes clusters, all reporting to a central Runs Service. TaskAction CRDs include a `cluster` field to route execution. -``` - ┌──────────────┐ - │ Runs Service │ (central) - └──────┬───────┘ - │ - ┌───────────┼───────────┐ - ▼ ▼ ▼ - ┌──────────┐ ┌──────────┐ ┌──────────┐ - │Executor A│ │Executor B│ │Executor C│ - │(Cluster 1)│ │(Cluster 2)│ │(Cluster 3)│ - └──────────┘ └──────────┘ └──────────┘ +```mermaid +flowchart TB + Runs["Runs Service
(central)"] + ExA["Executor A
(Cluster 1)"] + ExB["Executor B
(Cluster 2)"] + ExC["Executor C
(Cluster 3)"] + Runs --> ExA + Runs --> ExB + Runs --> ExC ``` ### Helm Chart From cd13a3ac18842e47cb1100c9674a71c1b1bf1f48 Mon Sep 17 00:00:00 2001 From: Kevin Su Date: Wed, 22 Apr 2026 12:35:25 -0700 Subject: [PATCH 03/12] Show user container reads/writes to object storage Signed-off-by: Kevin Su --- docs/architecture.md | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/docs/architecture.md b/docs/architecture.md index 11791251a1..f4ab3e3fad 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -69,6 +69,7 @@ flowchart TB DataProxy <--> Storage Actions -- "TaskAction CRDs" --> Executor Executor --> Pod + User <-- "Read inputs / write outputs" --> Storage Copilot -- "Upload outputs" --> Storage Executor -- "Status updates" --> Runs ``` @@ -89,8 +90,10 @@ flowchart TB Storage[("Object Storage
S3 / GCS / Azure / RustFS")] Executor["Executor (K8s Controller)
• Watches CRDs
• Provisions Pods
• Runs plugins"] - Pod["Task Pod
User Container"] - Copilot["Copilot
(sidecar)"] + subgraph TaskPod["Task Pod"] + PodUser["User Container"] + PodCopilot["Copilot (sidecar)"] + end Internal["InternalRunService
(UpdateActionStatus)"] @@ -106,11 +109,11 @@ flowchart TB Runs --> ActionsSvc Runs --> DataProxy ActionsSvc -- "TaskAction CRD" --> Executor - Executor --> Pod - Pod --> Copilot - Copilot -- "Upload outputs" --> Storage + Executor --> TaskPod + PodUser <-- "Read inputs / write outputs" --> Storage + PodCopilot -- "Upload outputs" --> Storage DataProxy --> Storage - Pod -- "Status update (gRPC)" --> Internal + PodCopilot -- "Status update (gRPC)" --> Internal Internal --> DB DB -. "WatchRunDetails stream" .-> Client ``` @@ -133,8 +136,8 @@ The following describes what happens when a user submits a workflow: 5 Executor controller sees the CRD Executor 6 Plugin resolves task spec, creates Pod + Copilot Executor → K8s 7 Copilot init-container downloads inputs from storage Copilot → Object Storage - 8 User container executes K8s Pod - 9 Copilot sidecar uploads outputs to object storage Copilot → Object Storage + 8 User container executes; reads inputs / writes outputs User container ↔ Object Storage + 9 Copilot sidecar uploads remaining outputs to storage Copilot → Object Storage 10 Executor calls InternalRunService.UpdateActionStatus() Executor → Runs Service 11 Action status updated in PostgreSQL Runs Service → DB 12 Client receives update via WatchRunDetails() stream Runs Service → Client From d5296a85d5b59b5f9b459a8fa98faf25cfecf727 Mon Sep 17 00:00:00 2001 From: Kevin Su Date: Wed, 22 Apr 2026 12:44:40 -0700 Subject: [PATCH 04/12] Annotate diagrams with gRPC service / method names Signed-off-by: Kevin Su --- docs/architecture.md | 70 ++++++++++++++++++++++++++++++++------------ 1 file changed, 52 insertions(+), 18 deletions(-) diff --git a/docs/architecture.md b/docs/architecture.md index f4ab3e3fad..4f3814edfd 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -62,16 +62,16 @@ flowchart TB end end - Client -- "gRPC (buf connect)" --> Runs + Client -- "gRPC: RunService
DataProxyService
TriggerService" --> Runs Runs <--> DB Actions <--> DB Cache <--> DB DataProxy <--> Storage - Actions -- "TaskAction CRDs" --> Executor - Executor --> Pod - User <-- "Read inputs / write outputs" --> Storage - Copilot -- "Upload outputs" --> Storage - Executor -- "Status updates" --> Runs + Actions -- "K8s API: TaskAction CRDs" --> Executor + Executor -- "K8s API: create Pod" --> Pod + User <-- "S3/GCS/Azure:
read inputs / write outputs" --> Storage + Copilot -- "S3/GCS/Azure:
upload outputs" --> Storage + Executor -- "gRPC: InternalRunService
UpdateActionStatus" --> Runs ``` --- @@ -104,20 +104,54 @@ flowchart TB AppSvc["App Service
App metadata"] end - Client -- "CreateRun / WatchRuns (gRPC)" --> Runs - Runs --> DB - Runs --> ActionsSvc - Runs --> DataProxy - ActionsSvc -- "TaskAction CRD" --> Executor - Executor --> TaskPod - PodUser <-- "Read inputs / write outputs" --> Storage - PodCopilot -- "Upload outputs" --> Storage - DataProxy --> Storage - PodCopilot -- "Status update (gRPC)" --> Internal - Internal --> DB - DB -. "WatchRunDetails stream" .-> Client + Client -- "gRPC: RunService.CreateRun
AbortRun / GetRunDetails / ListRuns" --> Runs + Client -- "gRPC: RunService.WatchRuns
WatchRunDetails (server-stream)" --> Runs + Client -- "gRPC: DataProxyService.GetUploadURL
GetDownloadURL" --> DataProxy + Client -- "gRPC: TriggerService / ProjectService
TaskService" --> Runs + + Runs -- "SQL (pgx)" --> DB + Runs -- "gRPC: ActionsService.CreateAction
WatchAction / GetAction" --> ActionsSvc + Runs -- "gRPC: CacheService.Get / Put
GetOrExtendReservation" --> CacheSvc + Runs -- "gRPC: SecretService" --> SecretSvc + Runs -- "gRPC: EventsProxyService.WatchClusterEvents" --> EventsSvc + + ActionsSvc -- "K8s API: create/watch
TaskAction CRD" --> Executor + Executor -- "K8s API: create Pod" --> TaskPod + PodUser <-- "S3/GCS/Azure API
read inputs / write outputs" --> Storage + PodCopilot -- "S3/GCS/Azure API
upload outputs" --> Storage + DataProxy -- "S3/GCS/Azure API
signed URLs" --> Storage + + PodCopilot -- "gRPC: InternalRunService.RecordAction
UpdateActionStatus / RecordActionEvents" --> Internal + Executor -- "gRPC: InternalRunService
UpdateActionStatus" --> Internal + Internal -- "SQL (pgx)" --> DB + DB -. "LISTEN/NOTIFY → gRPC stream
WatchRunDetails" .-> Client ``` +### gRPC Calls Between Components + +Summary of the gRPC wiring shown in the diagram above: + +| From | To | Service | Key RPCs | Direction | +|------|----|---------|----------|-----------| +| Client / SDK | Runs Service | `RunService` | CreateRun, AbortRun, GetRunDetails, ListRuns | unary | +| Client / SDK | Runs Service | `RunService` | WatchRuns, WatchRunDetails | server-stream | +| Client / SDK | Runs Service | `TaskService` | GetTask, ListTasks | unary | +| Client / SDK | Runs Service | `TriggerService` | CreateTrigger, GetTrigger, ListTriggers | unary | +| Client / SDK | Runs Service | `ProjectService` | GetProject, ListProjects | unary | +| Client / SDK | Runs Service | `RunLogsService` | TailLogs | server-stream | +| Client / SDK | DataProxy | `DataProxyService` | GetUploadURL, GetDownloadURL, GetArtifact | unary | +| Runs Service | Actions Service | `ActionsService` | CreateAction, GetAction, WatchAction | unary / stream | +| Runs Service | Cache Service | `CacheService` | Get, Put, Delete, GetOrExtendReservation | unary | +| Runs Service | Events Service | `EventsProxyService` | WatchClusterEvents | server-stream | +| Runs Service | Secret Service | `SecretService` | Get, Put | unary | +| Executor / Copilot | Runs Service | `InternalRunService` | RecordAction, UpdateActionStatus, RecordActionEvents | unary | +| Actions Service | Kubernetes | K8s API | Create/Watch `TaskAction` CRD | watch | +| Executor | Kubernetes | K8s API | Create/Watch Pods | watch | +| User container / Copilot | Object Storage | S3 / GCS / Azure | Get/Put object | REST | +| DataProxy | Object Storage | S3 / GCS / Azure | Sign URL | REST | + +All gRPC traffic uses **buf connect** (HTTP/2 with HTTP/1.1 fallback). + --- ## Data Flow From 8c3c96bb1bce91a7a78957d2aba0d4ee733507e7 Mon Sep 17 00:00:00 2001 From: Kevin Su Date: Wed, 22 Apr 2026 12:46:51 -0700 Subject: [PATCH 05/12] Clarify Runs Service enqueues to Actions via CreateAction Signed-off-by: Kevin Su --- docs/architecture.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/architecture.md b/docs/architecture.md index 4f3814edfd..d15a0486e1 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -165,8 +165,8 @@ The following describes what happens when a user submits a workflow: ──── ──────────────────────────────────────────────────── ───────────────── 1 User calls RunService.CreateRun() Client → Runs Service 2 Run record + root action written to PostgreSQL Runs Service → DB - 3 Actions controller detects new action Actions Service - 4 TaskAction CRD created in Kubernetes Actions Service → K8s + 3 Runs Service calls ActionsService.CreateAction() Runs Service → Actions Service + 4 Actions Service creates TaskAction CRD in Kubernetes Actions Service → K8s 5 Executor controller sees the CRD Executor 6 Plugin resolves task spec, creates Pod + Copilot Executor → K8s 7 Copilot init-container downloads inputs from storage Copilot → Object Storage From d7b32269914835d8781e7b02fea21cf04f223315 Mon Sep 17 00:00:00 2001 From: Kevin Su Date: Wed, 22 Apr 2026 12:50:49 -0700 Subject: [PATCH 06/12] Use actual RPC names from protobuf definitions Signed-off-by: Kevin Su --- docs/architecture.md | 98 +++++++++++++++++++++++--------------------- 1 file changed, 52 insertions(+), 46 deletions(-) diff --git a/docs/architecture.md b/docs/architecture.md index d15a0486e1..8406236fe3 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -106,14 +106,14 @@ flowchart TB Client -- "gRPC: RunService.CreateRun
AbortRun / GetRunDetails / ListRuns" --> Runs Client -- "gRPC: RunService.WatchRuns
WatchRunDetails (server-stream)" --> Runs - Client -- "gRPC: DataProxyService.GetUploadURL
GetDownloadURL" --> DataProxy - Client -- "gRPC: TriggerService / ProjectService
TaskService" --> Runs + Client -- "gRPC: DataProxyService.CreateUploadLocation
CreateDownloadLink / GetActionData" --> DataProxy + Client -- "gRPC: TaskService.DeployTask / GetTaskDetails
TriggerService.DeployTrigger / ListTriggers
ProjectService.CreateProject / GetProject" --> Runs Runs -- "SQL (pgx)" --> DB - Runs -- "gRPC: ActionsService.CreateAction
WatchAction / GetAction" --> ActionsSvc - Runs -- "gRPC: CacheService.Get / Put
GetOrExtendReservation" --> CacheSvc - Runs -- "gRPC: SecretService" --> SecretSvc - Runs -- "gRPC: EventsProxyService.WatchClusterEvents" --> EventsSvc + Runs -- "gRPC: ActionsService.Enqueue
Update / Abort / WatchForUpdates" --> ActionsSvc + Runs -- "gRPC: CacheService.Get / Put
GetOrExtendReservation / ReleaseReservation" --> CacheSvc + Runs -- "gRPC: SecretService.GetSecret / CreateSecret" --> SecretSvc + Runs -- "gRPC: EventsProxyService.Record" --> EventsSvc ActionsSvc -- "K8s API: create/watch
TaskAction CRD" --> Executor Executor -- "K8s API: create Pod" --> TaskPod @@ -133,21 +133,24 @@ Summary of the gRPC wiring shown in the diagram above: | From | To | Service | Key RPCs | Direction | |------|----|---------|----------|-----------| -| Client / SDK | Runs Service | `RunService` | CreateRun, AbortRun, GetRunDetails, ListRuns | unary | -| Client / SDK | Runs Service | `RunService` | WatchRuns, WatchRunDetails | server-stream | -| Client / SDK | Runs Service | `TaskService` | GetTask, ListTasks | unary | -| Client / SDK | Runs Service | `TriggerService` | CreateTrigger, GetTrigger, ListTriggers | unary | -| Client / SDK | Runs Service | `ProjectService` | GetProject, ListProjects | unary | +| Client / SDK | Runs Service | `RunService` | CreateRun, AbortRun, GetRunDetails, ListRuns, ListActions, GetActionDetails, GetActionData, AbortAction | unary | +| Client / SDK | Runs Service | `RunService` | WatchRuns, WatchRunDetails, WatchActions, WatchActionDetails, WatchGroups, WatchClusterEvents | server-stream | +| Client / SDK | Runs Service | `TaskService` | DeployTask, GetTaskDetails, ListTasks, ListVersions | unary | +| Client / SDK | Runs Service | `TriggerService` | DeployTrigger, GetTriggerDetails, ListTriggers, UpdateTriggers, DeleteTriggers | unary | +| Client / SDK | Runs Service | `ProjectService` | CreateProject, UpdateProject, GetProject, ListProjects | unary | | Client / SDK | Runs Service | `RunLogsService` | TailLogs | server-stream | -| Client / SDK | DataProxy | `DataProxyService` | GetUploadURL, GetDownloadURL, GetArtifact | unary | -| Runs Service | Actions Service | `ActionsService` | CreateAction, GetAction, WatchAction | unary / stream | -| Runs Service | Cache Service | `CacheService` | Get, Put, Delete, GetOrExtendReservation | unary | -| Runs Service | Events Service | `EventsProxyService` | WatchClusterEvents | server-stream | -| Runs Service | Secret Service | `SecretService` | Get, Put | unary | +| Client / SDK | DataProxy | `DataProxyService` | CreateUploadLocation, CreateDownloadLink, UploadInputs, GetActionData | unary | +| Client / SDK | DataProxy | `DataProxyService` | TailLogs | server-stream | +| Runs Service | Actions Service | `ActionsService` | Enqueue, Update, Abort, Signal, GetLatestState | unary | +| Runs Service | Actions Service | `ActionsService` | WatchForUpdates | server-stream | +| Runs Service | Cache Service | `CacheService` | Get, Put, Delete, GetOrExtendReservation, ReleaseReservation | unary | +| Runs Service | Events Service | `EventsProxyService` | Record | unary | +| Runs Service | Secret Service | `SecretService` | CreateSecret, UpdateSecret, GetSecret, DeleteSecret, ListSecrets | unary | | Executor / Copilot | Runs Service | `InternalRunService` | RecordAction, UpdateActionStatus, RecordActionEvents | unary | -| Actions Service | Kubernetes | K8s API | Create/Watch `TaskAction` CRD | watch | -| Executor | Kubernetes | K8s API | Create/Watch Pods | watch | -| User container / Copilot | Object Storage | S3 / GCS / Azure | Get/Put object | REST | +| Executor / Copilot | Runs Service | `InternalRunService` | RecordActionStream, UpdateActionStatusStream, RecordActionEventStream | bidi-stream | +| Actions Service | Kubernetes | K8s API | Create / Watch `TaskAction` CRD | watch | +| Executor | Kubernetes | K8s API | Create / Watch Pods | watch | +| User container / Copilot | Object Storage | S3 / GCS / Azure | Get / Put object | REST | | DataProxy | Object Storage | S3 / GCS / Azure | Sign URL | REST | All gRPC traffic uses **buf connect** (HTTP/2 with HTTP/1.1 fallback). @@ -165,7 +168,7 @@ The following describes what happens when a user submits a workflow: ──── ──────────────────────────────────────────────────── ───────────────── 1 User calls RunService.CreateRun() Client → Runs Service 2 Run record + root action written to PostgreSQL Runs Service → DB - 3 Runs Service calls ActionsService.CreateAction() Runs Service → Actions Service + 3 Runs Service calls ActionsService.Enqueue() Runs Service → Actions Service 4 Actions Service creates TaskAction CRD in Kubernetes Actions Service → K8s 5 Executor controller sees the CRD Executor 6 Plugin resolves task spec, creates Pod + Copilot Executor → K8s @@ -214,15 +217,15 @@ Executor ──put(task_key, output)──▶ Cache Service The central control-plane service. It owns the **run lifecycle**: creation, monitoring, abort, and streaming of status updates. It exposes both public APIs (for users/SDKs) and internal APIs (for the Executor). **Public gRPC services:** -- `RunService` — CreateRun, AbortRun, GetRunDetails, WatchRunDetails, ListRuns, WatchRuns -- `TaskService` — GetTask, ListTasks -- `TriggerService` — manage triggers for scheduled/event-driven runs -- `ProjectService` — project and domain management -- `RunLogsService` — stream pod logs from Kubernetes +- `RunService` — CreateRun, AbortRun, GetRunDetails, WatchRunDetails, ListRuns, WatchRuns, ListActions, WatchActions, GetActionDetails, GetActionData, AbortAction, WatchGroups, WatchClusterEvents +- `TaskService` — DeployTask, GetTaskDetails, ListTasks, ListVersions +- `TriggerService` — DeployTrigger, GetTriggerDetails, ListTriggers, UpdateTriggers, DeleteTriggers +- `ProjectService` — CreateProject, UpdateProject, GetProject, ListProjects +- `RunLogsService` — TailLogs (stream pod logs from Kubernetes) **Internal gRPC services:** -- `InternalRunService` — RecordAction, UpdateActionStatus, RecordActionEvents (used by the Executor) -- `TranslatorService` — convert between execution models +- `InternalRunService` — RecordAction, UpdateActionStatus, RecordActionEvents (+ streaming variants) — used by the Executor +- `TranslatorService` — convert literals ↔ JSON launch-form representations --- @@ -256,7 +259,7 @@ A **Kubernetes controller** that watches `TaskAction` CRDs and executes them as Bridges the Runs Service and Kubernetes. It watches `TaskAction` CRDs and provides CRUD operations and streaming status updates on actions. -**gRPC service:** `ActionsService` — GetAction, WatchAction, CreateAction +**gRPC service:** `ActionsService` — Enqueue, Update, Abort, Signal, GetLatestState, WatchForUpdates --- @@ -270,8 +273,7 @@ Bridges the Runs Service and Kubernetes. It watches `TaskAction` CRDs and provid Manages **artifact storage and data access**. Generates time-limited signed URLs so clients can upload/download data directly from object storage without exposing credentials. **gRPC services:** -- `DataProxyService` — GetUploadURL, GetDownloadURL, GetArtifact -- `ClusterService` — cluster capability queries +- `DataProxyService` — CreateUploadLocation, CreateDownloadLink, UploadInputs, GetActionData, TailLogs --- @@ -283,7 +285,7 @@ Manages **artifact storage and data access**. Generates time-limited signed URLs Provides **deterministic task deduplication**. When a task with identical inputs has already run, the cache returns the stored output instead of re-executing. -**gRPC service:** `CacheService` — Get, Put, Delete, GetOrExtendReservation +**gRPC service:** `CacheService` — Get, Put, Delete, GetOrExtendReservation, ReleaseReservation --- @@ -295,7 +297,9 @@ Provides **deterministic task deduplication**. When a task with identical inputs Aggregates execution events from all sources and streams them to subscribers. Useful for building dashboards, audit logs, and external integrations. -**gRPC service:** `EventsProxyService` — WatchClusterEvents +**gRPC service:** `EventsProxyService` — Record + +> Note: `WatchClusterEvents` is a server-streaming RPC on `RunService`, not on `EventsProxyService`. --- @@ -318,8 +322,8 @@ Centralized secret management. Stores and retrieves secrets, with optional integ Serves application metadata and configurations for long-running services (model serving, apps). **gRPC services:** -- `AppService` — GetApp, ListApps -- `AppLogsService` — stream app logs +- `AppService` — Create, Get, Update, UpdateStatus, Delete, List, Watch, Lease +- `AppLogsService` — TailLogs (server-stream) --- @@ -486,23 +490,25 @@ All APIs use **buf connect** (gRPC over HTTP/2 and HTTP/1.1). | Service | Proto Path | Key RPCs | |---------|-----------|----------| -| RunService | `flyteidl2.workflow.RunService` | CreateRun, AbortRun, GetRunDetails, WatchRunDetails, ListRuns, WatchRuns | -| TaskService | `flyteidl2.task.TaskService` | GetTask, ListTasks | -| DataProxyService | `flyteidl2.dataproxy.DataProxyService` | GetUploadURL, GetDownloadURL, GetArtifact | -| CacheService | `flyteidl2.cacheservice.CacheService` | Get, Put, Delete, GetOrExtendReservation | -| TriggerService | `flyteidl2.trigger.TriggerService` | CreateTrigger, GetTrigger, ListTriggers | -| ProjectService | `flyteidl2.project.ProjectService` | GetProject, ListProjects | -| AuthService | `flyteidl2.auth.AuthService` | OAuth/OIDC endpoints | +| RunService | `flyteidl2.workflow.RunService` | CreateRun, AbortRun, GetRunDetails, WatchRunDetails, ListRuns, WatchRuns, ListActions, WatchActions, GetActionDetails, WatchActionDetails, GetActionData, AbortAction, WatchGroups, WatchClusterEvents | +| TaskService | `flyteidl2.task.TaskService` | DeployTask, GetTaskDetails, ListTasks, ListVersions | +| DataProxyService | `flyteidl2.dataproxy.DataProxyService` | CreateUploadLocation, CreateDownloadLink, UploadInputs, GetActionData, TailLogs | +| CacheService | `flyteidl2.cacheservice.CacheService` | Get, Put, Delete, GetOrExtendReservation, ReleaseReservation | +| TriggerService | `flyteidl2.trigger.TriggerService` | DeployTrigger, GetTriggerDetails, ListTriggers, UpdateTriggers, DeleteTriggers | +| ProjectService | `flyteidl2.project.ProjectService` | CreateProject, UpdateProject, GetProject, ListProjects | +| SecretService | `flyteidl2.secret.SecretService` | CreateSecret, UpdateSecret, GetSecret, DeleteSecret, ListSecrets | +| RunLogsService | `flyteidl2.workflow.RunLogsService` | TailLogs | ### Internal APIs (component-to-component) | Service | Proto Path | Key RPCs | |---------|-----------|----------| -| InternalRunService | `flyteidl2.workflow.InternalRunService` | RecordAction, UpdateActionStatus, RecordActionEvents | -| ActionsService | `flyteidl2.actions.ActionsService` | GetAction, WatchAction, CreateAction | -| EventsProxyService | `flyteidl2.workflow.EventsProxyService` | WatchClusterEvents | -| AppService | `flyteidl2.app.AppService` | GetApp, GetAppLogs | -| ClusterService | `flyteidl2.cluster.ClusterService` | GetCluster | +| InternalRunService | `flyteidl2.workflow.InternalRunService` | RecordAction, UpdateActionStatus, RecordActionEvents (+ streaming variants) | +| ActionsService | `flyteidl2.actions.ActionsService` | Enqueue, Update, Abort, Signal, GetLatestState, WatchForUpdates | +| EventsProxyService | `flyteidl2.workflow.EventsProxyService` | Record | +| AppService | `flyteidl2.app.AppService` | Create, Get, Update, UpdateStatus, Delete, List, Watch, Lease | +| AppLogsService | `flyteidl2.app.AppLogsService` | TailLogs | +| TranslatorService | `flyteidl2.workflow.TranslatorService` | LiteralsToLaunchFormJson, LaunchFormJsonToLiterals, TaskSpecToLaunchFormJson, JsonValuesToLiterals | ### Communication Patterns From 5a10dbf690aab5b523efc6adbd07b881a830bef7 Mon Sep 17 00:00:00 2001 From: Kevin Su Date: Wed, 22 Apr 2026 13:19:31 -0700 Subject: [PATCH 07/12] Fix InternalRunService callers and Copilot scope - InternalRunService is called by the Actions Service (CRD watcher) and Events Service, not by the Executor or Copilot. - Copilot sidecar is only injected for raw-container tasks; regular Python tasks read/write object storage directly from user code. Signed-off-by: Kevin Su --- docs/architecture.md | 46 +++++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/docs/architecture.md b/docs/architecture.md index 8406236fe3..0fd8336ba2 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -58,7 +58,7 @@ flowchart TB Executor["Executor
(K8s Controller + Plugins)"] subgraph Pod["Task Pod"] User["User
Container"] - Copilot["Copilot
(sidecar)"] + Copilot["Copilot sidecar
(raw-container only)"] end end @@ -71,7 +71,7 @@ flowchart TB Executor -- "K8s API: create Pod" --> Pod User <-- "S3/GCS/Azure:
read inputs / write outputs" --> Storage Copilot -- "S3/GCS/Azure:
upload outputs" --> Storage - Executor -- "gRPC: InternalRunService
UpdateActionStatus" --> Runs + Actions -- "gRPC: InternalRunService
RecordAction / UpdateActionStatus" --> Runs ``` --- @@ -92,7 +92,7 @@ flowchart TB Executor["Executor (K8s Controller)
• Watches CRDs
• Provisions Pods
• Runs plugins"] subgraph TaskPod["Task Pod"] PodUser["User Container"] - PodCopilot["Copilot (sidecar)"] + PodCopilot["Copilot sidecar
(raw-container only)"] end Internal["InternalRunService
(UpdateActionStatus)"] @@ -121,8 +121,8 @@ flowchart TB PodCopilot -- "S3/GCS/Azure API
upload outputs" --> Storage DataProxy -- "S3/GCS/Azure API
signed URLs" --> Storage - PodCopilot -- "gRPC: InternalRunService.RecordAction
UpdateActionStatus / RecordActionEvents" --> Internal - Executor -- "gRPC: InternalRunService
UpdateActionStatus" --> Internal + ActionsSvc -- "gRPC: InternalRunService.RecordAction
UpdateActionStatus" --> Internal + EventsSvc -- "gRPC: InternalRunService.RecordActionEvents" --> Internal Internal -- "SQL (pgx)" --> DB DB -. "LISTEN/NOTIFY → gRPC stream
WatchRunDetails" .-> Client ``` @@ -146,11 +146,12 @@ Summary of the gRPC wiring shown in the diagram above: | Runs Service | Cache Service | `CacheService` | Get, Put, Delete, GetOrExtendReservation, ReleaseReservation | unary | | Runs Service | Events Service | `EventsProxyService` | Record | unary | | Runs Service | Secret Service | `SecretService` | CreateSecret, UpdateSecret, GetSecret, DeleteSecret, ListSecrets | unary | -| Executor / Copilot | Runs Service | `InternalRunService` | RecordAction, UpdateActionStatus, RecordActionEvents | unary | -| Executor / Copilot | Runs Service | `InternalRunService` | RecordActionStream, UpdateActionStatusStream, RecordActionEventStream | bidi-stream | +| Actions Service | Runs Service | `InternalRunService` | RecordAction, UpdateActionStatus | unary | +| Events Service | Runs Service | `InternalRunService` | RecordActionEvents | unary | | Actions Service | Kubernetes | K8s API | Create / Watch `TaskAction` CRD | watch | | Executor | Kubernetes | K8s API | Create / Watch Pods | watch | -| User container / Copilot | Object Storage | S3 / GCS / Azure | Get / Put object | REST | +| User container | Object Storage | S3 / GCS / Azure | Get / Put object (Python SDK does I/O directly) | REST | +| Copilot (raw-container only) | Object Storage | S3 / GCS / Azure | Download inputs / upload outputs | REST | | DataProxy | Object Storage | S3 / GCS / Azure | Sign URL | REST | All gRPC traffic uses **buf connect** (HTTP/2 with HTTP/1.1 fallback). @@ -171,13 +172,18 @@ The following describes what happens when a user submits a workflow: 3 Runs Service calls ActionsService.Enqueue() Runs Service → Actions Service 4 Actions Service creates TaskAction CRD in Kubernetes Actions Service → K8s 5 Executor controller sees the CRD Executor - 6 Plugin resolves task spec, creates Pod + Copilot Executor → K8s - 7 Copilot init-container downloads inputs from storage Copilot → Object Storage + 6 Plugin resolves task spec, creates Pod (+ Copilot Executor → K8s + sidecar for raw-container tasks only) + 7 For raw-container: Copilot init downloads inputs Copilot → Object Storage 8 User container executes; reads inputs / writes outputs User container ↔ Object Storage - 9 Copilot sidecar uploads remaining outputs to storage Copilot → Object Storage - 10 Executor calls InternalRunService.UpdateActionStatus() Executor → Runs Service - 11 Action status updated in PostgreSQL Runs Service → DB - 12 Client receives update via WatchRunDetails() stream Runs Service → Client + directly (Python SDK handles I/O; raw-container + delegates I/O to Copilot) + 9 For raw-container: Copilot sidecar uploads outputs Copilot → Object Storage + 10 Executor updates TaskAction CRD status Executor → K8s + 11 Actions Service (CRD watcher) calls InternalRunService Actions Service → Runs Service + .RecordAction / .UpdateActionStatus + 12 Action status updated in PostgreSQL Runs Service → DB + 13 Client receives update via WatchRunDetails() stream Runs Service → Client ``` ### Data Access (Artifacts) @@ -243,10 +249,11 @@ A **Kubernetes controller** that watches `TaskAction` CRDs and executes them as - Watch TaskAction custom resources - Resolve task specifications and select the appropriate plugin - Create Pods with the user container + Flyte Copilot sidecar -- Monitor pod lifecycle and capture execution status -- Report results back to the Runs Service via `InternalRunService` +- Monitor pod lifecycle and update TaskAction CRD status - Handle admission webhooks for pod validation/mutation +Status is propagated back to the Runs Service by the **Actions Service** (which watches TaskAction CRDs), not by the Executor directly. + **CRD:** `TaskAction` — defined in `executor/api/v1/taskaction_types.go` --- @@ -332,8 +339,11 @@ Serves application metadata and configurations for long-running services (model | | | |---|---| | **Source** | `/flytecopilot` | +| **Used by** | `raw-container` task type only | + +A **sidecar binary** injected into pods for the `raw-container` task type — i.e., when a user brings an arbitrary container image that isn't Flyte-aware. Regular Python tasks do **not** use Copilot; the Python SDK reads inputs and writes outputs to object storage directly from inside the user code. -A **sidecar binary** injected into every task pod. Operates in two modes: +For raw-container tasks, Copilot operates in two modes: | Mode | Phase | What it does | |------|-------|--------------| @@ -514,7 +524,7 @@ All APIs use **buf connect** (gRPC over HTTP/2 and HTTP/1.1). | Pattern | Example | |---------|---------| -| **Synchronous gRPC** | Client → RunService.CreateRun, Executor → InternalRunService.UpdateActionStatus | +| **Synchronous gRPC** | Client → RunService.CreateRun, Actions Service → InternalRunService.UpdateActionStatus | | **Server-streaming gRPC** | RunService.WatchRunDetails, EventsProxyService.WatchClusterEvents | | **K8s Watch** | Executor watches TaskAction CRDs, Actions Service watches TaskAction CRDs | From 2563dbf923148a6f9edfeeb34a2f58b94af07064 Mon Sep 17 00:00:00 2001 From: Kevin Su Date: Wed, 22 Apr 2026 13:24:21 -0700 Subject: [PATCH 08/12] Show flyte SDK interactions with backend (controlplane + ControllerClient) Signed-off-by: Kevin Su --- docs/architecture.md | 87 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 78 insertions(+), 9 deletions(-) diff --git a/docs/architecture.md b/docs/architecture.md index 0fd8336ba2..bf41d6ad9e 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -40,7 +40,8 @@ Flyte 2 is a Kubernetes-native workflow orchestration platform. The backend is a ```mermaid flowchart TB - Client["User / SDK / CLI"] + Dev["Developer
(Python code / CLI)"] + SDK["flyte SDK (Python)
• controlplane client
• ControllerClient"] subgraph ControlPlane["Control Plane"] Runs["Runs
Service"] @@ -57,18 +58,21 @@ flowchart TB subgraph DataPlane["Data Plane (Kubernetes)"] Executor["Executor
(K8s Controller + Plugins)"] subgraph Pod["Task Pod"] - User["User
Container"] + User["User Container
(embeds flyte SDK)"] Copilot["Copilot sidecar
(raw-container only)"] end end - Client -- "gRPC: RunService
DataProxyService
TriggerService" --> Runs + Dev --> SDK + SDK -- "gRPC: RunService / TaskService
DataProxyService / TriggerService" --> Runs + SDK -- "upload code bundle + inputs" --> Storage Runs <--> DB Actions <--> DB Cache <--> DB DataProxy <--> Storage Actions -- "K8s API: TaskAction CRDs" --> Executor Executor -- "K8s API: create Pod" --> Pod + User -- "gRPC: ActionsService.Enqueue
(spawn child actions)" --> Actions User <-- "S3/GCS/Azure:
read inputs / write outputs" --> Storage Copilot -- "S3/GCS/Azure:
upload outputs" --> Storage Actions -- "gRPC: InternalRunService
RecordAction / UpdateActionStatus" --> Runs @@ -80,7 +84,8 @@ flowchart TB ```mermaid flowchart TB - Client["User / SDK / CLI"] + Dev["Developer / CLI
(Python code)"] + SDK["flyte SDK (Python)
— controlplane client (remote/_client/controlplane.py)
— ControllerClient (_internal/controllers/remote/_client.py)"] Runs["Runs Service (port 8090)
• RunService (public)
• InternalRunService
• TaskService
• TriggerService
• ProjectService
• RunLogsService"] @@ -104,10 +109,12 @@ flowchart TB AppSvc["App Service
App metadata"] end - Client -- "gRPC: RunService.CreateRun
AbortRun / GetRunDetails / ListRuns" --> Runs - Client -- "gRPC: RunService.WatchRuns
WatchRunDetails (server-stream)" --> Runs - Client -- "gRPC: DataProxyService.CreateUploadLocation
CreateDownloadLink / GetActionData" --> DataProxy - Client -- "gRPC: TaskService.DeployTask / GetTaskDetails
TriggerService.DeployTrigger / ListTriggers
ProjectService.CreateProject / GetProject" --> Runs + Dev --> SDK + SDK -- "gRPC: RunService.CreateRun
AbortRun / GetRunDetails / ListRuns" --> Runs + SDK -- "gRPC: RunService.WatchRuns
WatchRunDetails (server-stream)" --> Runs + SDK -- "gRPC: DataProxyService.CreateUploadLocation
CreateDownloadLink / GetActionData" --> DataProxy + SDK -- "gRPC: TaskService.DeployTask / GetTaskDetails
TriggerService.DeployTrigger / ListTriggers
ProjectService.CreateProject / GetProject" --> Runs + PodUser -- "gRPC: ActionsService.Enqueue
(via SDK ControllerClient —
spawn child actions)" --> ActionsSvc Runs -- "SQL (pgx)" --> DB Runs -- "gRPC: ActionsService.Enqueue
Update / Abort / WatchForUpdates" --> ActionsSvc @@ -124,7 +131,8 @@ flowchart TB ActionsSvc -- "gRPC: InternalRunService.RecordAction
UpdateActionStatus" --> Internal EventsSvc -- "gRPC: InternalRunService.RecordActionEvents" --> Internal Internal -- "SQL (pgx)" --> DB - DB -. "LISTEN/NOTIFY → gRPC stream
WatchRunDetails" .-> Client + DB -. "LISTEN/NOTIFY → gRPC stream
WatchRunDetails" .-> SDK + SDK -. "status / outputs" .-> Dev ``` ### gRPC Calls Between Components @@ -156,6 +164,67 @@ Summary of the gRPC wiring shown in the diagram above: All gRPC traffic uses **buf connect** (HTTP/2 with HTTP/1.1 fallback). +### SDK ↔ Backend + +The [**flyte SDK**](https://github.com/flyteorg/flyte-sdk) (Python) is how users interact with the backend. It exposes two distinct client surfaces — the **same SDK package** acts differently depending on whether it's running on a developer's machine or inside a task pod. + +```mermaid +flowchart LR + subgraph Local["Developer machine / CLI"] + Dev["user's Python code"] + CP["controlplane client
(flyte/remote/_client/
controlplane.py)"] + Dev --> CP + end + + subgraph PodCtx["Inside a running Task Pod"] + UserCode["user's task code"] + CC["ControllerClient
(flyte/_internal/controllers/
remote/_client.py)"] + UserCode --> CC + end + + CP -- "RunService / TaskService
DataProxyService / TriggerService
ProjectService / SecretService
AppService / RunLogsService" --> Backend["Flyte Backend"] + CC -- "ActionsService.Enqueue
(+ legacy QueueService /
StateService)" --> Backend +``` + +**1. Control-plane client** — `src/flyte/remote/_client/controlplane.py` + +Used by developers on their laptop (or in CI) and by the `flyte` CLI. Responsible for: + +| Action | RPC(s) | +|--------|--------| +| Register a task with the backend | `TaskService.DeployTask` | +| Upload task inputs + code bundle | `DataProxyService.CreateUploadLocation` / `UploadInputs` | +| Trigger a run | `RunService.CreateRun` | +| Stream run status | `RunService.WatchRunDetails` (server-stream) | +| List / get runs, actions | `RunService.ListRuns`, `GetRunDetails`, `GetActionDetails` | +| Manage triggers / projects / secrets / apps | `TriggerService`, `ProjectService`, `SecretService`, `AppService` | +| Tail logs | `RunLogsService.TailLogs` | + +Client instances created via `RunServiceClient`, `TaskServiceClient`, `DataProxyServiceClient`, etc. — see imports in `controlplane.py`. + +**2. ControllerClient** — `src/flyte/_internal/controllers/remote/_client.py` + +Used **inside a running task pod** when the user's code spawns child tasks or sub-actions. The SDK is embedded in the user container (via the auto-generated image). When user code calls `task.aio(...)`, the SDK's ControllerClient submits the child action directly to the Actions Service without going through RunService: + +| Action | RPC | +|--------|-----| +| Spawn a child task / trace / condition | `ActionsService.Enqueue` | +| Poll latest state | `ActionsService.GetLatestState` (or legacy `StateService.Get`) | +| Watch child action updates | `ActionsService.WatchForUpdates` | + +This is why nested / fanout workflows scale: the parent task pod talks directly to Actions Service, not through the RunService hot path. + +**Deploy flow (what `flyte run` does under the hood):** + +``` +1. SDK builds a code bundle (wheel / tar) from the user's Python module +2. SDK calls DataProxyService.CreateUploadLocation → gets signed URL +3. SDK uploads the bundle + serialized inputs to object storage +4. SDK calls TaskService.DeployTask to register the task definition +5. SDK calls RunService.CreateRun to launch +6. SDK opens a WatchRunDetails stream to report back to the developer +``` + --- ## Data Flow From dc72dd4f54dfafc7456c1624cc29158c6bcbdf0e Mon Sep 17 00:00:00 2001 From: Kevin Su Date: Wed, 22 Apr 2026 13:31:35 -0700 Subject: [PATCH 09/12] Fix diagram label overlaps; expand SDK ControllerClient RPCs (Enqueue/WatchForUpdates/Abort) Signed-off-by: Kevin Su --- docs/architecture.md | 29 +- .../flyte-architecture.excalidraw | 2441 +++++++++++++++++ 2 files changed, 2461 insertions(+), 9 deletions(-) create mode 100644 docs/architecture/flyte-architecture.excalidraw diff --git a/docs/architecture.md b/docs/architecture.md index bf41d6ad9e..c34279ad34 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -72,7 +72,7 @@ flowchart TB DataProxy <--> Storage Actions -- "K8s API: TaskAction CRDs" --> Executor Executor -- "K8s API: create Pod" --> Pod - User -- "gRPC: ActionsService.Enqueue
(spawn child actions)" --> Actions + User -- "gRPC: ActionsService
Enqueue / WatchForUpdates / Abort
(via SDK ControllerClient)" --> Actions User <-- "S3/GCS/Azure:
read inputs / write outputs" --> Storage Copilot -- "S3/GCS/Azure:
upload outputs" --> Storage Actions -- "gRPC: InternalRunService
RecordAction / UpdateActionStatus" --> Runs @@ -114,7 +114,7 @@ flowchart TB SDK -- "gRPC: RunService.WatchRuns
WatchRunDetails (server-stream)" --> Runs SDK -- "gRPC: DataProxyService.CreateUploadLocation
CreateDownloadLink / GetActionData" --> DataProxy SDK -- "gRPC: TaskService.DeployTask / GetTaskDetails
TriggerService.DeployTrigger / ListTriggers
ProjectService.CreateProject / GetProject" --> Runs - PodUser -- "gRPC: ActionsService.Enqueue
(via SDK ControllerClient —
spawn child actions)" --> ActionsSvc + PodUser -- "gRPC: ActionsService.Enqueue
ActionsService.WatchForUpdates
ActionsService.Abort
(via SDK ControllerClient)" --> ActionsSvc Runs -- "SQL (pgx)" --> DB Runs -- "gRPC: ActionsService.Enqueue
Update / Abort / WatchForUpdates" --> ActionsSvc @@ -151,6 +151,8 @@ Summary of the gRPC wiring shown in the diagram above: | Client / SDK | DataProxy | `DataProxyService` | TailLogs | server-stream | | Runs Service | Actions Service | `ActionsService` | Enqueue, Update, Abort, Signal, GetLatestState | unary | | Runs Service | Actions Service | `ActionsService` | WatchForUpdates | server-stream | +| In-pod SDK (ControllerClient) | Actions Service | `ActionsService` | Enqueue, Abort | unary | +| In-pod SDK (ControllerClient) | Actions Service | `ActionsService` | WatchForUpdates | server-stream | | Runs Service | Cache Service | `CacheService` | Get, Put, Delete, GetOrExtendReservation, ReleaseReservation | unary | | Runs Service | Events Service | `EventsProxyService` | Record | unary | | Runs Service | Secret Service | `SecretService` | CreateSecret, UpdateSecret, GetSecret, DeleteSecret, ListSecrets | unary | @@ -204,15 +206,24 @@ Client instances created via `RunServiceClient`, `TaskServiceClient`, `DataProxy **2. ControllerClient** — `src/flyte/_internal/controllers/remote/_client.py` -Used **inside a running task pod** when the user's code spawns child tasks or sub-actions. The SDK is embedded in the user container (via the auto-generated image). When user code calls `task.aio(...)`, the SDK's ControllerClient submits the child action directly to the Actions Service without going through RunService: +Used **inside a running task pod** when the user's code spawns child tasks or sub-actions. The SDK is embedded in the user container (via the auto-generated image). When user code calls `task.aio(...)`, the SDK's ControllerClient submits the child action directly to the Actions Service without going through RunService. -| Action | RPC | -|--------|-----| -| Spawn a child task / trace / condition | `ActionsService.Enqueue` | -| Poll latest state | `ActionsService.GetLatestState` (or legacy `StateService.Get`) | -| Watch child action updates | `ActionsService.WatchForUpdates` | +The service surface is defined in [`_service_protocol.py`](https://github.com/flyteorg/flyte-sdk/blob/main/src/flyte/_internal/controllers/remote/_service_protocol.py) — the unified `ActionsService` exposes three methods: -This is why nested / fanout workflows scale: the parent task pod talks directly to Actions Service, not through the RunService hot path. +| Method | RPC | Purpose | +|--------|-----|---------| +| `enqueue()` | `ActionsService.Enqueue` | Submit a new child action for execution | +| `watch_for_updates()` | `ActionsService.WatchForUpdates` (server-stream) | Stream state updates for all child actions of a parent | +| `abort()` | `ActionsService.Abort` | Cancel a previously queued/running action (cascades to descendants) | + +Feature-flagged via the `_U_USE_ACTIONS` env var. When disabled, the SDK falls back to the legacy split: + +| Legacy service | RPCs used | +|----------------|-----------| +| `QueueService` | `EnqueueAction`, `AbortQueuedRun`, `AbortQueuedAction` | +| `StateService` | `Put`, `Get`, `Watch` | + +This direct SDK → ActionsService path is why nested / fanout workflows scale — the parent task pod talks to Actions Service directly, not through the RunService hot path. **Deploy flow (what `flyte run` does under the hood):** diff --git a/docs/architecture/flyte-architecture.excalidraw b/docs/architecture/flyte-architecture.excalidraw new file mode 100644 index 0000000000..8f255ffe74 --- /dev/null +++ b/docs/architecture/flyte-architecture.excalidraw @@ -0,0 +1,2441 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw-jetbrains-plugin", + "elements": [ + { + "id": "group-control-plane", + "type": "rectangle", + "x": 40, + "y": 180, + "width": 1100, + "height": 130, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 1001, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false + }, + { + "id": "group-control-plane-label", + "type": "text", + "x": 55, + "y": 155, + "width": 150, + "height": 22, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 1002, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 18, + "fontFamily": 1, + "text": "Control Plane", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Control Plane", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "group-data-plane", + "type": "rectangle", + "x": 40, + "y": 340, + "width": 820, + "height": 170, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 1003, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false + }, + { + "id": "group-data-plane-label", + "type": "text", + "x": 55, + "y": 315, + "width": 240, + "height": 22, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 1004, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 18, + "fontFamily": 1, + "text": "Data Plane (Kubernetes)", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Data Plane (Kubernetes)", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "group-infrastructure", + "type": "rectangle", + "x": 40, + "y": 550, + "width": 1000, + "height": 130, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 1005, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false + }, + { + "id": "group-infrastructure-label", + "type": "text", + "x": 55, + "y": 525, + "width": 180, + "height": 22, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 1006, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 18, + "fontFamily": 1, + "text": "Infrastructure", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Infrastructure", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "client", + "type": "ellipse", + "x": 330, + "y": 60, + "width": 200, + "height": 70, + "strokeColor": "#1971c2", + "backgroundColor": "#e7f5ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2001, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "client-text" + } + ], + "updated": 1, + "link": null, + "locked": false + }, + { + "id": "client-text", + "type": "text", + "x": 340, + "y": 82, + "width": 180, + "height": 25, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2002, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 18, + "fontFamily": 1, + "text": "Developer / CLI", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "client", + "originalText": "Developer / CLI", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "sdk", + "type": "rectangle", + "x": 600, + "y": 60, + "width": 240, + "height": 70, + "strokeColor": "#1971c2", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2003, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "sdk-text" + } + ], + "updated": 1, + "link": null, + "locked": false + }, + { + "id": "sdk-text", + "type": "text", + "x": 615, + "y": 72, + "width": 210, + "height": 44, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2004, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "flyte SDK (Python)\ncontrolplane + ControllerClient", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "sdk", + "originalText": "flyte SDK (Python)\ncontrolplane + ControllerClient", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "arrow-dev-sdk", + "type": "arrow", + "x": 530, + "y": 95, + "width": 70, + "height": 0, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "roundness": null, + "elbowed": true, + "opacity": 100, + "angle": 0, + "seed": 3110, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "startBinding": { + "elementId": "client", + "focus": 0, + "gap": 1 + }, + "endBinding": { + "elementId": "sdk", + "focus": 0, + "gap": 1 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 70, + 0 + ] + ] + }, + { + "id": "runs", + "type": "rectangle", + "x": 60, + "y": 210, + "width": 160, + "height": 70, + "strokeColor": "#c92a2a", + "backgroundColor": "#ffa8a8", + "fillStyle": "solid", + "strokeWidth": 3, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2010, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "runs-text" + } + ], + "updated": 1, + "link": null, + "locked": false + }, + { + "id": "runs-text", + "type": "text", + "x": 75, + "y": 225, + "width": 130, + "height": 44, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2011, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Runs Service\n:8090", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "runs", + "originalText": "Runs Service\n:8090", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "actions", + "type": "rectangle", + "x": 240, + "y": 210, + "width": 160, + "height": 70, + "strokeColor": "#7048e8", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2020, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "actions-text" + } + ], + "updated": 1, + "link": null, + "locked": false + }, + { + "id": "actions-text", + "type": "text", + "x": 260, + "y": 232, + "width": 120, + "height": 25, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2021, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Actions Service", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "actions", + "originalText": "Actions Service", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "dataproxy", + "type": "rectangle", + "x": 420, + "y": 210, + "width": 160, + "height": 70, + "strokeColor": "#7048e8", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2030, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "dataproxy-text" + } + ], + "updated": 1, + "link": null, + "locked": false + }, + { + "id": "dataproxy-text", + "type": "text", + "x": 435, + "y": 225, + "width": 130, + "height": 44, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2031, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "DataProxy\n:8088", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "dataproxy", + "originalText": "DataProxy\n:8088", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "cache", + "type": "rectangle", + "x": 600, + "y": 210, + "width": 160, + "height": 70, + "strokeColor": "#7048e8", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2040, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "cache-text" + } + ], + "updated": 1, + "link": null, + "locked": false + }, + { + "id": "cache-text", + "type": "text", + "x": 620, + "y": 232, + "width": 120, + "height": 25, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2041, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Cache Service", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "cache", + "originalText": "Cache Service", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "events", + "type": "rectangle", + "x": 780, + "y": 210, + "width": 160, + "height": 70, + "strokeColor": "#7048e8", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2050, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "events-text" + } + ], + "updated": 1, + "link": null, + "locked": false + }, + { + "id": "events-text", + "type": "text", + "x": 800, + "y": 232, + "width": 120, + "height": 25, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2051, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Events Service", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "events", + "originalText": "Events Service", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "secret", + "type": "rectangle", + "x": 960, + "y": 210, + "width": 160, + "height": 70, + "strokeColor": "#7048e8", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2060, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "secret-text" + } + ], + "updated": 1, + "link": null, + "locked": false + }, + { + "id": "secret-text", + "type": "text", + "x": 980, + "y": 232, + "width": 120, + "height": 25, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2061, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Secret Service", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "secret", + "originalText": "Secret Service", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "executor", + "type": "rectangle", + "x": 100, + "y": 390, + "width": 200, + "height": 70, + "strokeColor": "#7048e8", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2070, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "executor-text" + } + ], + "updated": 1, + "link": null, + "locked": false + }, + { + "id": "executor-text", + "type": "text", + "x": 115, + "y": 405, + "width": 170, + "height": 44, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2071, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Executor\n(K8s controller)", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "executor", + "originalText": "Executor\n(K8s controller)", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "taskpod", + "type": "rectangle", + "x": 400, + "y": 360, + "width": 420, + "height": 130, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2080, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false + }, + { + "id": "taskpod-label", + "type": "text", + "x": 412, + "y": 370, + "width": 100, + "height": 22, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2081, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "Task Pod", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Task Pod", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "user-container", + "type": "rectangle", + "x": 420, + "y": 400, + "width": 180, + "height": 70, + "strokeColor": "#1971c2", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2090, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "user-container-text" + } + ], + "updated": 1, + "link": null, + "locked": false + }, + { + "id": "user-container-text", + "type": "text", + "x": 440, + "y": 422, + "width": 140, + "height": 25, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2091, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "User Container", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "user-container", + "originalText": "User Container", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "copilot", + "type": "rectangle", + "x": 620, + "y": 400, + "width": 180, + "height": 70, + "strokeColor": "#1971c2", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2100, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "copilot-text" + } + ], + "updated": 1, + "link": null, + "locked": false + }, + { + "id": "copilot-text", + "type": "text", + "x": 640, + "y": 415, + "width": 140, + "height": 44, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2101, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Copilot\n(sidecar)", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "copilot", + "originalText": "Copilot\n(sidecar)", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "postgres", + "type": "rectangle", + "x": 60, + "y": 580, + "width": 180, + "height": 70, + "strokeColor": "#2f9e44", + "backgroundColor": "#b2f2bb", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2110, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "postgres-text" + } + ], + "updated": 1, + "link": null, + "locked": false + }, + { + "id": "postgres-text", + "type": "text", + "x": 80, + "y": 602, + "width": 140, + "height": 25, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2111, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "PostgreSQL", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "postgres", + "originalText": "PostgreSQL", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "kubernetes", + "type": "rectangle", + "x": 400, + "y": 580, + "width": 200, + "height": 70, + "strokeColor": "#fab005", + "backgroundColor": "#fff3bf", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2120, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "kubernetes-text" + } + ], + "updated": 1, + "link": null, + "locked": false + }, + { + "id": "kubernetes-text", + "type": "text", + "x": 420, + "y": 595, + "width": 160, + "height": 44, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2121, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Kubernetes\n(TaskAction CRD)", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "kubernetes", + "originalText": "Kubernetes\n(TaskAction CRD)", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "storage", + "type": "rectangle", + "x": 760, + "y": 580, + "width": 200, + "height": 70, + "strokeColor": "#f08c00", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2130, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "storage-text" + } + ], + "updated": 1, + "link": null, + "locked": false + }, + { + "id": "storage-text", + "type": "text", + "x": 775, + "y": 595, + "width": 170, + "height": 44, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2131, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Object Storage\n(S3/GCS/Azure)", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "storage", + "originalText": "Object Storage\n(S3/GCS/Azure)", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "arrow-client-runs", + "type": "arrow", + "x": 680, + "y": 130, + "width": 540, + "height": 80, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "roundness": null, + "elbowed": true, + "opacity": 100, + "angle": 0, + "seed": 3001, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "arrow-client-runs-text" + } + ], + "updated": 1, + "link": null, + "locked": false, + "startBinding": { + "elementId": "sdk", + "focus": 0, + "gap": 1 + }, + "endBinding": { + "elementId": "runs", + "focus": 0, + "gap": 1 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -540, + 0 + ], + [ + -540, + 80 + ] + ] + }, + { + "id": "arrow-client-runs-text", + "type": "text", + "x": 200, + "y": 95, + "width": 200, + "height": 22, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 3002, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "gRPC: RunService", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "gRPC: RunService", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "arrow-client-dataproxy", + "type": "arrow", + "x": 720, + "y": 130, + "width": 220, + "height": 80, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "roundness": null, + "elbowed": true, + "opacity": 100, + "angle": 0, + "seed": 3010, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "arrow-client-dataproxy-text" + } + ], + "updated": 1, + "link": null, + "locked": false, + "startBinding": { + "elementId": "sdk", + "focus": 0, + "gap": 1 + }, + "endBinding": { + "elementId": "dataproxy", + "focus": 0, + "gap": 1 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -220, + 0 + ], + [ + -220, + 80 + ] + ] + }, + { + "id": "arrow-client-dataproxy-text", + "type": "text", + "x": 530, + "y": 160, + "width": 230, + "height": 22, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 3011, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "gRPC: DataProxyService", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "gRPC: DataProxyService", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "arrow-runs-actions", + "type": "arrow", + "x": 220, + "y": 245, + "width": 20, + "height": 0, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "roundness": null, + "elbowed": true, + "opacity": 100, + "angle": 0, + "seed": 3020, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "arrow-runs-actions-text" + } + ], + "updated": 1, + "link": null, + "locked": false, + "startBinding": { + "elementId": "runs", + "focus": 0, + "gap": 1 + }, + "endBinding": { + "elementId": "actions", + "focus": 0, + "gap": 1 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 20, + 0 + ] + ] + }, + { + "id": "arrow-runs-actions-text", + "type": "text", + "x": 222, + "y": 183, + "width": 60, + "height": 22, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 3021, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "Enqueue", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Enqueue", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "arrow-runs-postgres", + "type": "arrow", + "x": 140, + "y": 280, + "width": 130, + "height": 300, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "roundness": null, + "elbowed": true, + "opacity": 100, + "angle": 0, + "seed": 3030, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "arrow-runs-postgres-text" + } + ], + "updated": 1, + "link": null, + "locked": false, + "startBinding": { + "elementId": "runs", + "focus": 0, + "gap": 1 + }, + "endBinding": { + "elementId": "postgres", + "focus": 0, + "gap": 1 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -120, + 0 + ], + [ + -120, + 300 + ], + [ + 10, + 300 + ] + ] + }, + { + "id": "arrow-runs-postgres-text", + "type": "text", + "x": 30, + "y": 450, + "width": 40, + "height": 22, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 3031, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "SQL", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "SQL", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "arrow-actions-k8s", + "type": "arrow", + "x": 320, + "y": 280, + "width": 180, + "height": 300, + "strokeColor": "#fab005", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "roundness": null, + "elbowed": true, + "opacity": 100, + "angle": 0, + "seed": 3040, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "arrow-actions-k8s-text" + } + ], + "updated": 1, + "link": null, + "locked": false, + "startBinding": { + "elementId": "actions", + "focus": 0, + "gap": 1 + }, + "endBinding": { + "elementId": "kubernetes", + "focus": 0, + "gap": 1 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 180, + 0 + ], + [ + 180, + 300 + ] + ] + }, + { + "id": "arrow-actions-k8s-text", + "type": "text", + "x": 510, + "y": 518, + "width": 160, + "height": 22, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 3041, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "create TaskAction CRD", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "create TaskAction CRD", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "arrow-k8s-executor", + "type": "arrow", + "x": 430, + "y": 580, + "width": 230, + "height": 120, + "strokeColor": "#fab005", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "roundness": null, + "elbowed": true, + "opacity": 100, + "angle": 0, + "seed": 3050, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "arrow-k8s-executor-text" + } + ], + "updated": 1, + "link": null, + "locked": false, + "startBinding": { + "elementId": "kubernetes", + "focus": 0, + "gap": 1 + }, + "endBinding": { + "elementId": "executor", + "focus": 0, + "gap": 1 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -230, + 0 + ], + [ + -230, + -120 + ] + ] + }, + { + "id": "arrow-k8s-executor-text", + "type": "text", + "x": 210, + "y": 520, + "width": 100, + "height": 22, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 3051, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "watch CRDs", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "watch CRDs", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "arrow-executor-pod", + "type": "arrow", + "x": 300, + "y": 425, + "width": 120, + "height": 0, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "roundness": null, + "elbowed": true, + "opacity": 100, + "angle": 0, + "seed": 3060, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "arrow-executor-pod-text" + } + ], + "updated": 1, + "link": null, + "locked": false, + "startBinding": { + "elementId": "executor", + "focus": 0, + "gap": 1 + }, + "endBinding": { + "elementId": "user-container", + "focus": 0, + "gap": 1 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 120, + 0 + ] + ] + }, + { + "id": "arrow-executor-pod-text", + "type": "text", + "x": 315, + "y": 378, + "width": 100, + "height": 22, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 3061, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "create Pod", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "create Pod", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "arrow-user-storage", + "type": "arrow", + "x": 510, + "y": 470, + "width": 350, + "height": 110, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "roundness": null, + "elbowed": true, + "opacity": 100, + "angle": 0, + "seed": 3070, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "arrow-user-storage-text" + } + ], + "updated": 1, + "link": null, + "locked": false, + "startBinding": { + "elementId": "user-container", + "focus": 0, + "gap": 1 + }, + "endBinding": { + "elementId": "storage", + "focus": 0, + "gap": 1 + }, + "lastCommittedPoint": null, + "startArrowhead": "arrow", + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 290, + 0 + ], + [ + 290, + 110 + ] + ] + }, + { + "id": "arrow-user-storage-text", + "type": "text", + "x": 540, + "y": 515, + "width": 220, + "height": 22, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 3071, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "read inputs / write outputs", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "read inputs / write outputs", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "arrow-copilot-storage", + "type": "arrow", + "x": 710, + "y": 470, + "width": 210, + "height": 110, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "roundness": null, + "elbowed": true, + "opacity": 100, + "angle": 0, + "seed": 3080, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "arrow-copilot-storage-text" + } + ], + "updated": 1, + "link": null, + "locked": false, + "startBinding": { + "elementId": "copilot", + "focus": 0, + "gap": 1 + }, + "endBinding": { + "elementId": "storage", + "focus": 0, + "gap": 1 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 210, + 0 + ], + [ + 210, + 110 + ] + ] + }, + { + "id": "arrow-copilot-storage-text", + "type": "text", + "x": 720, + "y": 540, + "width": 120, + "height": 22, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 3081, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "upload outputs", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "upload outputs", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "arrow-dataproxy-storage", + "type": "arrow", + "x": 500, + "y": 280, + "width": 360, + "height": 300, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 0, + "roundness": null, + "elbowed": true, + "opacity": 100, + "angle": 0, + "seed": 3090, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "arrow-dataproxy-storage-text" + } + ], + "updated": 1, + "link": null, + "locked": false, + "startBinding": { + "elementId": "dataproxy", + "focus": 0, + "gap": 1 + }, + "endBinding": { + "elementId": "storage", + "focus": 0, + "gap": 1 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 360, + 0 + ], + [ + 360, + 300 + ] + ] + }, + { + "id": "arrow-dataproxy-storage-text", + "type": "text", + "x": 870, + "y": 420, + "width": 90, + "height": 22, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 3091, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "signed URLs", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "signed URLs", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "arrow-copilot-runs", + "type": "arrow", + "x": 710, + "y": 400, + "width": 570, + "height": 230, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "roundness": null, + "elbowed": true, + "opacity": 100, + "angle": 0, + "seed": 3100, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "arrow-copilot-runs-text" + } + ], + "updated": 1, + "link": null, + "locked": false, + "startBinding": { + "elementId": "copilot", + "focus": 0, + "gap": 1 + }, + "endBinding": { + "elementId": "runs", + "focus": 0, + "gap": 1 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 0, + -230 + ], + [ + -570, + -230 + ], + [ + -570, + -190 + ] + ] + }, + { + "id": "arrow-copilot-runs-text", + "type": "text", + "x": 280, + "y": 160, + "width": 380, + "height": 22, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 3101, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "InternalRunService.UpdateActionStatus", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "InternalRunService.UpdateActionStatus", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "arrow-pod-actions", + "type": "arrow", + "x": 510, + "y": 400, + "width": 190, + "height": 155, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 0, + "roundness": null, + "elbowed": true, + "opacity": 100, + "angle": 0, + "seed": 3120, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "arrow-pod-actions-text" + } + ], + "updated": 1, + "link": null, + "locked": false, + "startBinding": { + "elementId": "user-container", + "focus": 0, + "gap": 1 + }, + "endBinding": { + "elementId": "actions", + "focus": 0, + "gap": 1 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 0, + -155 + ], + [ + -190, + -155 + ] + ] + }, + { + "id": "arrow-pod-actions-text", + "type": "text", + "x": 520, + "y": 318, + "width": 330, + "height": 44, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 3121, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 13, + "fontFamily": 1, + "text": "SDK ControllerClient \u2192 ActionsService:\nEnqueue / WatchForUpdates / Abort", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "SDK ControllerClient \u2192 ActionsService:\nEnqueue / WatchForUpdates / Abort", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "legend-title", + "type": "text", + "x": 60, + "y": 720, + "width": 220, + "height": 25, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 4001, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Flyte 2 \u2014 System Architecture", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Flyte 2 \u2014 System Architecture", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "legend-subtitle", + "type": "text", + "x": 60, + "y": 748, + "width": 800, + "height": 22, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 4002, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 13, + "fontFamily": 1, + "text": "Solid arrows = gRPC / K8s API \u2022 Orange arrows = object storage (S3/GCS/Azure) \u2022 Dashed = proxied access", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Solid arrows = gRPC / K8s API \u2022 Orange arrows = object storage (S3/GCS/Azure) \u2022 Dashed = proxied access", + "autoResize": true, + "lineHeight": 1.25 + } + ], + "appState": { + "gridSize": null, + "viewBackgroundColor": "#ffffff" + }, + "files": {} +} \ No newline at end of file From 0a78f7d49973de99e5ac33512f41491a9ab98670 Mon Sep 17 00:00:00 2001 From: Kevin Su Date: Wed, 22 Apr 2026 13:37:27 -0700 Subject: [PATCH 10/12] Fix remaining diagram label overlaps Signed-off-by: Kevin Su --- .../flyte-architecture.excalidraw | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/docs/architecture/flyte-architecture.excalidraw b/docs/architecture/flyte-architecture.excalidraw index 8f255ffe74..d703e59d4a 100644 --- a/docs/architecture/flyte-architecture.excalidraw +++ b/docs/architecture/flyte-architecture.excalidraw @@ -1285,8 +1285,8 @@ { "id": "arrow-client-runs-text", "type": "text", - "x": 200, - "y": 95, + "x": 140, + "y": 135, "width": 200, "height": 22, "strokeColor": "#1971c2", @@ -1381,7 +1381,7 @@ "id": "arrow-client-dataproxy-text", "type": "text", "x": 530, - "y": 160, + "y": 135, "width": 230, "height": 22, "strokeColor": "#1971c2", @@ -1665,9 +1665,9 @@ { "id": "arrow-actions-k8s-text", "type": "text", - "x": 510, + "x": 410, "y": 518, - "width": 160, + "width": 180, "height": 22, "strokeColor": "#e67700", "backgroundColor": "transparent", @@ -1760,8 +1760,8 @@ { "id": "arrow-k8s-executor-text", "type": "text", - "x": 210, - "y": 520, + "x": 230, + "y": 518, "width": 100, "height": 22, "strokeColor": "#e67700", @@ -1851,9 +1851,9 @@ { "id": "arrow-executor-pod-text", "type": "text", - "x": 315, + "x": 300, "y": 378, - "width": 100, + "width": 96, "height": 22, "strokeColor": "#495057", "backgroundColor": "transparent", @@ -1946,9 +1946,9 @@ { "id": "arrow-user-storage-text", "type": "text", - "x": 540, - "y": 515, - "width": 220, + "x": 600, + "y": 518, + "width": 180, "height": 22, "strokeColor": "#f08c00", "backgroundColor": "transparent", @@ -2041,9 +2041,9 @@ { "id": "arrow-copilot-storage-text", "type": "text", - "x": 720, - "y": 540, - "width": 120, + "x": 800, + "y": 518, + "width": 140, "height": 22, "strokeColor": "#f08c00", "backgroundColor": "transparent", @@ -2333,7 +2333,7 @@ "x": 520, "y": 318, "width": 330, - "height": 44, + "height": 22, "strokeColor": "#7048e8", "backgroundColor": "transparent", "fillStyle": "solid", @@ -2354,11 +2354,11 @@ "locked": false, "fontSize": 13, "fontFamily": 1, - "text": "SDK ControllerClient \u2192 ActionsService:\nEnqueue / WatchForUpdates / Abort", + "text": "SDK ControllerClient \u2192 ActionsService: Enqueue / WatchForUpdates / Abort", "textAlign": "center", "verticalAlign": "top", "containerId": null, - "originalText": "SDK ControllerClient \u2192 ActionsService:\nEnqueue / WatchForUpdates / Abort", + "originalText": "SDK ControllerClient \u2192 ActionsService: Enqueue / WatchForUpdates / Abort", "autoResize": true, "lineHeight": 1.25 }, From 8fe5b51759984fd336646a7e0efab0c99a56e515 Mon Sep 17 00:00:00 2001 From: Kevin Su Date: Wed, 22 Apr 2026 14:02:44 -0700 Subject: [PATCH 11/12] Reroute arrows cleanly; add Scalability & Performance Notes panel Signed-off-by: Kevin Su --- .../flyte-architecture.excalidraw | 764 +++++++++++++++--- 1 file changed, 659 insertions(+), 105 deletions(-) diff --git a/docs/architecture/flyte-architecture.excalidraw b/docs/architecture/flyte-architecture.excalidraw index d703e59d4a..b40df425ab 100644 --- a/docs/architecture/flyte-architecture.excalidraw +++ b/docs/architecture/flyte-architecture.excalidraw @@ -252,6 +252,32 @@ "autoResize": true, "lineHeight": 1.25 }, + { + "id": "scaling-panel", + "type": "rectangle", + "x": 40, + "y": 790, + "width": 1100, + "height": 335, + "strokeColor": "#868e96", + "backgroundColor": "#f8f9fa", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5001, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false + }, { "id": "sdk", "type": "rectangle", @@ -1607,7 +1633,7 @@ "type": "arrow", "x": 320, "y": 280, - "width": 180, + "width": 630, "height": 300, "strokeColor": "#fab005", "backgroundColor": "transparent", @@ -1652,9 +1678,21 @@ 0, 0 ], + [ + 0, + 10 + ], + [ + 630, + 10 + ], + [ + 630, + 260 + ], [ 180, - 0 + 260 ], [ 180, @@ -1665,9 +1703,9 @@ { "id": "arrow-actions-k8s-text", "type": "text", - "x": 410, - "y": 518, - "width": 180, + "x": 965, + "y": 400, + "width": 160, "height": 22, "strokeColor": "#e67700", "backgroundColor": "transparent", @@ -1888,7 +1926,7 @@ "type": "arrow", "x": 510, "y": 470, - "width": 350, + "width": 290, "height": 110, "strokeColor": "#f08c00", "backgroundColor": "transparent", @@ -1933,9 +1971,13 @@ 0, 0 ], + [ + 0, + 50 + ], [ 290, - 0 + 50 ], [ 290, @@ -1983,7 +2025,7 @@ "type": "arrow", "x": 710, "y": 470, - "width": 210, + "width": 190, "height": 110, "strokeColor": "#f08c00", "backgroundColor": "transparent", @@ -2029,11 +2071,15 @@ 0 ], [ - 210, - 0 + 0, + 60 + ], + [ + 190, + 60 ], [ - 210, + 190, 110 ] ] @@ -2169,23 +2215,23 @@ "lineHeight": 1.25 }, { - "id": "arrow-copilot-runs", + "id": "arrow-pod-actions", "type": "arrow", - "x": 710, + "x": 510, "y": 400, - "width": 570, - "height": 230, - "strokeColor": "#c92a2a", + "width": 450, + "height": 205, + "strokeColor": "#7048e8", "backgroundColor": "transparent", "fillStyle": "solid", "strokeWidth": 2, - "strokeStyle": "solid", + "strokeStyle": "dashed", "roughness": 0, "roundness": null, "elbowed": true, "opacity": 100, "angle": 0, - "seed": 3100, + "seed": 3120, "version": 1, "versionNonce": 0, "isDeleted": false, @@ -2194,19 +2240,19 @@ "boundElements": [ { "type": "text", - "id": "arrow-copilot-runs-text" + "id": "arrow-pod-actions-text" } ], "updated": 1, "link": null, "locked": false, "startBinding": { - "elementId": "copilot", + "elementId": "user-container", "focus": 0, "gap": 1 }, "endBinding": { - "elementId": "runs", + "elementId": "actions", "focus": 0, "gap": 1 }, @@ -2220,26 +2266,34 @@ ], [ 0, - -230 + -75 + ], + [ + 260, + -75 ], [ - -570, - -230 + 260, + -205 ], [ - -570, + -190, + -205 + ], + [ + -190, -190 ] ] }, { - "id": "arrow-copilot-runs-text", + "id": "arrow-pod-actions-text", "type": "text", - "x": 280, + "x": 300, "y": 160, - "width": 380, + "width": 350, "height": 22, - "strokeColor": "#c92a2a", + "strokeColor": "#7048e8", "backgroundColor": "transparent", "fillStyle": "solid", "strokeWidth": 1, @@ -2247,7 +2301,7 @@ "roughness": 1, "opacity": 100, "angle": 0, - "seed": 3101, + "seed": 3121, "version": 1, "versionNonce": 0, "isDeleted": false, @@ -2257,84 +2311,59 @@ "updated": 1, "link": null, "locked": false, - "fontSize": 14, + "fontSize": 13, "fontFamily": 1, - "text": "InternalRunService.UpdateActionStatus", + "text": "SDK ControllerClient \u2192 ActionsService: Enqueue / WatchForUpdates / Abort", "textAlign": "center", "verticalAlign": "top", "containerId": null, - "originalText": "InternalRunService.UpdateActionStatus", + "originalText": "SDK ControllerClient \u2192 ActionsService: Enqueue / WatchForUpdates / Abort", "autoResize": true, "lineHeight": 1.25 }, { - "id": "arrow-pod-actions", - "type": "arrow", - "x": 510, - "y": 400, - "width": 190, - "height": 155, - "strokeColor": "#7048e8", + "id": "legend-title", + "type": "text", + "x": 60, + "y": 720, + "width": 220, + "height": 25, + "strokeColor": "#495057", "backgroundColor": "transparent", "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 0, - "roundness": null, - "elbowed": true, + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, "opacity": 100, "angle": 0, - "seed": 3120, + "seed": 4001, "version": 1, "versionNonce": 0, "isDeleted": false, "groupIds": [], "frameId": null, - "boundElements": [ - { - "type": "text", - "id": "arrow-pod-actions-text" - } - ], + "boundElements": [], "updated": 1, "link": null, "locked": false, - "startBinding": { - "elementId": "user-container", - "focus": 0, - "gap": 1 - }, - "endBinding": { - "elementId": "actions", - "focus": 0, - "gap": 1 - }, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "arrow", - "points": [ - [ - 0, - 0 - ], - [ - 0, - -155 - ], - [ - -190, - -155 - ] - ] + "fontSize": 16, + "fontFamily": 1, + "text": "Flyte 2 \u2014 System Architecture", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Flyte 2 \u2014 System Architecture", + "autoResize": true, + "lineHeight": 1.25 }, { - "id": "arrow-pod-actions-text", + "id": "legend-subtitle", "type": "text", - "x": 520, - "y": 318, - "width": 330, + "x": 60, + "y": 748, + "width": 800, "height": 22, - "strokeColor": "#7048e8", + "strokeColor": "#868e96", "backgroundColor": "transparent", "fillStyle": "solid", "strokeWidth": 1, @@ -2342,7 +2371,7 @@ "roughness": 1, "opacity": 100, "angle": 0, - "seed": 3121, + "seed": 4002, "version": 1, "versionNonce": 0, "isDeleted": false, @@ -2354,22 +2383,22 @@ "locked": false, "fontSize": 13, "fontFamily": 1, - "text": "SDK ControllerClient \u2192 ActionsService: Enqueue / WatchForUpdates / Abort", - "textAlign": "center", + "text": "Solid arrows = gRPC / K8s API \u2022 Orange arrows = object storage (S3/GCS/Azure) \u2022 Dashed = proxied access", + "textAlign": "left", "verticalAlign": "top", "containerId": null, - "originalText": "SDK ControllerClient \u2192 ActionsService: Enqueue / WatchForUpdates / Abort", + "originalText": "Solid arrows = gRPC / K8s API \u2022 Orange arrows = object storage (S3/GCS/Azure) \u2022 Dashed = proxied access", "autoResize": true, "lineHeight": 1.25 }, { - "id": "legend-title", + "id": "scaling-note-0-title", "type": "text", - "x": 60, - "y": 720, - "width": 220, - "height": 25, - "strokeColor": "#495057", + "x": 55, + "y": 835, + "width": 530, + "height": 22, + "strokeColor": "#1971c2", "backgroundColor": "transparent", "fillStyle": "solid", "strokeWidth": 1, @@ -2377,7 +2406,7 @@ "roughness": 1, "opacity": 100, "angle": 0, - "seed": 4001, + "seed": 5100, "version": 1, "versionNonce": 0, "isDeleted": false, @@ -2389,22 +2418,57 @@ "locked": false, "fontSize": 16, "fontFamily": 1, - "text": "Flyte 2 \u2014 System Architecture", + "text": "Runs Service", "textAlign": "left", "verticalAlign": "top", "containerId": null, - "originalText": "Flyte 2 \u2014 System Architecture", + "originalText": "Runs Service", "autoResize": true, "lineHeight": 1.25 }, { - "id": "legend-subtitle", + "id": "scaling-note-0-body", "type": "text", - "x": 60, - "y": 748, - "width": 800, + "x": 55, + "y": 857, + "width": 530, + "height": 44, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5101, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 13, + "fontFamily": 1, + "text": "Stateless Go microservice; scales horizontally behind a gRPC load balancer.\nStreams updates via Postgres LISTEN/NOTIFY \u2192 WatchRunDetails server-streams.", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Stateless Go microservice; scales horizontally behind a gRPC load balancer.\nStreams updates via Postgres LISTEN/NOTIFY \u2192 WatchRunDetails server-streams.", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "scaling-note-1-title", + "type": "text", + "x": 600, + "y": 835, + "width": 530, "height": 22, - "strokeColor": "#868e96", + "strokeColor": "#1971c2", "backgroundColor": "transparent", "fillStyle": "solid", "strokeWidth": 1, @@ -2412,7 +2476,42 @@ "roughness": 1, "opacity": 100, "angle": 0, - "seed": 4002, + "seed": 5102, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Actions Service", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Actions Service", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "scaling-note-1-body", + "type": "text", + "x": 600, + "y": 857, + "width": 530, + "height": 44, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5103, "version": 1, "versionNonce": 0, "isDeleted": false, @@ -2424,11 +2523,466 @@ "locked": false, "fontSize": 13, "fontFamily": 1, - "text": "Solid arrows = gRPC / K8s API \u2022 Orange arrows = object storage (S3/GCS/Azure) \u2022 Dashed = proxied access", + "text": "Writes one TaskAction CRD per action; partitioned by action ID for locality.\nUnified service replaces legacy QueueService + StateService (feature-flagged).", "textAlign": "left", "verticalAlign": "top", "containerId": null, - "originalText": "Solid arrows = gRPC / K8s API \u2022 Orange arrows = object storage (S3/GCS/Azure) \u2022 Dashed = proxied access", + "originalText": "Writes one TaskAction CRD per action; partitioned by action ID for locality.\nUnified service replaces legacy QueueService + StateService (feature-flagged).", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "scaling-note-2-title", + "type": "text", + "x": 55, + "y": 905, + "width": 530, + "height": 22, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5104, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Executor (K8s controller)", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Executor (K8s controller)", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "scaling-note-2-body", + "type": "text", + "x": 55, + "y": 927, + "width": 530, + "height": 64, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5105, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 13, + "fontFamily": 1, + "text": "Watches TaskAction CRDs via K8s informers (no polling).\nHorizontally scaled via leader election; each replica owns a shard of CRDs.\nPlugins (Pod, Spark, Ray, Dask, ...) translate TaskAction \u2192 native K8s resources.", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Watches TaskAction CRDs via K8s informers (no polling).\nHorizontally scaled via leader election; each replica owns a shard of CRDs.\nPlugins (Pod, Spark, Ray, Dask, ...) translate TaskAction \u2192 native K8s resources.", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "scaling-note-3-title", + "type": "text", + "x": 600, + "y": 905, + "width": 530, + "height": 22, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5106, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "DataProxy", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "DataProxy", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "scaling-note-3-body", + "type": "text", + "x": 600, + "y": 927, + "width": 530, + "height": 44, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5107, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 13, + "fontFamily": 1, + "text": "Stateless; issues signed URLs so pods and SDK read/write Object Storage directly \u2014\nno data passes through the service (keeps the hot path off the control plane).", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Stateless; issues signed URLs so pods and SDK read/write Object Storage directly \u2014\nno data passes through the service (keeps the hot path off the control plane).", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "scaling-note-4-title", + "type": "text", + "x": 55, + "y": 975, + "width": 530, + "height": 22, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5108, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Cache Service", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Cache Service", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "scaling-note-4-body", + "type": "text", + "x": 55, + "y": 997, + "width": 530, + "height": 44, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5109, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 13, + "fontFamily": 1, + "text": "Deterministic key (task sig + input literals); pg-backed.\nReservations prevent duplicate concurrent runs; TTL-bounded entries.", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Deterministic key (task sig + input literals); pg-backed.\nReservations prevent duplicate concurrent runs; TTL-bounded entries.", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "scaling-note-5-title", + "type": "text", + "x": 600, + "y": 975, + "width": 530, + "height": 22, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5110, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "PostgreSQL", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "PostgreSQL", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "scaling-note-5-body", + "type": "text", + "x": 600, + "y": 997, + "width": 530, + "height": 44, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5111, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 13, + "fontFamily": 1, + "text": "Single source of truth; run via HA replication for prod.\nJSONB columns for serialized specs; indexed by (org, project, domain, name).", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Single source of truth; run via HA replication for prod.\nJSONB columns for serialized specs; indexed by (org, project, domain, name).", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "scaling-note-6-title", + "type": "text", + "x": 55, + "y": 1045, + "width": 530, + "height": 22, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5112, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Object Storage", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Object Storage", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "scaling-note-6-body", + "type": "text", + "x": 55, + "y": 1067, + "width": 530, + "height": 44, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5113, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 13, + "fontFamily": 1, + "text": "S3 / GCS / Azure / RustFS. Signed URLs + direct pod I/O avoid proxy bottlenecks.\nCode bundles and task inputs/outputs live here; CDN/multi-region for global reach.", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "S3 / GCS / Azure / RustFS. Signed URLs + direct pod I/O avoid proxy bottlenecks.\nCode bundles and task inputs/outputs live here; CDN/multi-region for global reach.", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "scaling-note-7-title", + "type": "text", + "x": 600, + "y": 1045, + "width": 530, + "height": 22, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5114, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Task Pod (+ Copilot)", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Task Pod (+ Copilot)", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "scaling-note-7-body", + "type": "text", + "x": 600, + "y": 1067, + "width": 530, + "height": 44, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5115, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 13, + "fontFamily": 1, + "text": "Ephemeral. User container embeds flyte SDK \u2192 ControllerClient submits child actions\nto ActionsService.Enqueue directly (bypasses RunService hot path, enabling fanout).", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Ephemeral. User container embeds flyte SDK \u2192 ControllerClient submits child actions\nto ActionsService.Enqueue directly (bypasses RunService hot path, enabling fanout).", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "scaling-title", + "type": "text", + "x": 55, + "y": 800, + "width": 400, + "height": 28, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5002, + "version": 1, + "versionNonce": 0, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "Scalability & Performance Notes", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Scalability & Performance Notes", "autoResize": true, "lineHeight": 1.25 } From ff93a5d109cb90bedd52bc0a5f4a1c6981715561 Mon Sep 17 00:00:00 2001 From: Kevin Su Date: Mon, 27 Apr 2026 16:52:26 -0700 Subject: [PATCH 12/12] update doc Signed-off-by: Kevin Su --- .../flyte-architecture.excalidraw | 2995 --- docs/flyte-architecture.excalidraw | 16720 ++++++++++++++++ 2 files changed, 16720 insertions(+), 2995 deletions(-) delete mode 100644 docs/architecture/flyte-architecture.excalidraw create mode 100644 docs/flyte-architecture.excalidraw diff --git a/docs/architecture/flyte-architecture.excalidraw b/docs/architecture/flyte-architecture.excalidraw deleted file mode 100644 index b40df425ab..0000000000 --- a/docs/architecture/flyte-architecture.excalidraw +++ /dev/null @@ -1,2995 +0,0 @@ -{ - "type": "excalidraw", - "version": 2, - "source": "https://excalidraw-jetbrains-plugin", - "elements": [ - { - "id": "group-control-plane", - "type": "rectangle", - "x": 40, - "y": 180, - "width": 1100, - "height": 130, - "strokeColor": "#868e96", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 1001, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false - }, - { - "id": "group-control-plane-label", - "type": "text", - "x": 55, - "y": 155, - "width": 150, - "height": 22, - "strokeColor": "#495057", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 1002, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 18, - "fontFamily": 1, - "text": "Control Plane", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Control Plane", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "group-data-plane", - "type": "rectangle", - "x": 40, - "y": 340, - "width": 820, - "height": 170, - "strokeColor": "#868e96", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 1003, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false - }, - { - "id": "group-data-plane-label", - "type": "text", - "x": 55, - "y": 315, - "width": 240, - "height": 22, - "strokeColor": "#495057", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 1004, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 18, - "fontFamily": 1, - "text": "Data Plane (Kubernetes)", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Data Plane (Kubernetes)", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "group-infrastructure", - "type": "rectangle", - "x": 40, - "y": 550, - "width": 1000, - "height": 130, - "strokeColor": "#868e96", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 1005, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false - }, - { - "id": "group-infrastructure-label", - "type": "text", - "x": 55, - "y": 525, - "width": 180, - "height": 22, - "strokeColor": "#495057", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 1006, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 18, - "fontFamily": 1, - "text": "Infrastructure", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Infrastructure", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "client", - "type": "ellipse", - "x": 330, - "y": 60, - "width": 200, - "height": 70, - "strokeColor": "#1971c2", - "backgroundColor": "#e7f5ff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2001, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [ - { - "type": "text", - "id": "client-text" - } - ], - "updated": 1, - "link": null, - "locked": false - }, - { - "id": "client-text", - "type": "text", - "x": 340, - "y": 82, - "width": 180, - "height": 25, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2002, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 18, - "fontFamily": 1, - "text": "Developer / CLI", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "client", - "originalText": "Developer / CLI", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "scaling-panel", - "type": "rectangle", - "x": 40, - "y": 790, - "width": 1100, - "height": 335, - "strokeColor": "#868e96", - "backgroundColor": "#f8f9fa", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 5001, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false - }, - { - "id": "sdk", - "type": "rectangle", - "x": 600, - "y": 60, - "width": 240, - "height": 70, - "strokeColor": "#1971c2", - "backgroundColor": "#a5d8ff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2003, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [ - { - "type": "text", - "id": "sdk-text" - } - ], - "updated": 1, - "link": null, - "locked": false - }, - { - "id": "sdk-text", - "type": "text", - "x": 615, - "y": 72, - "width": 210, - "height": 44, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2004, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 16, - "fontFamily": 1, - "text": "flyte SDK (Python)\ncontrolplane + ControllerClient", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "sdk", - "originalText": "flyte SDK (Python)\ncontrolplane + ControllerClient", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "arrow-dev-sdk", - "type": "arrow", - "x": 530, - "y": 95, - "width": 70, - "height": 0, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 0, - "roundness": null, - "elbowed": true, - "opacity": 100, - "angle": 0, - "seed": 3110, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "startBinding": { - "elementId": "client", - "focus": 0, - "gap": 1 - }, - "endBinding": { - "elementId": "sdk", - "focus": 0, - "gap": 1 - }, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "arrow", - "points": [ - [ - 0, - 0 - ], - [ - 70, - 0 - ] - ] - }, - { - "id": "runs", - "type": "rectangle", - "x": 60, - "y": 210, - "width": 160, - "height": 70, - "strokeColor": "#c92a2a", - "backgroundColor": "#ffa8a8", - "fillStyle": "solid", - "strokeWidth": 3, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2010, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [ - { - "type": "text", - "id": "runs-text" - } - ], - "updated": 1, - "link": null, - "locked": false - }, - { - "id": "runs-text", - "type": "text", - "x": 75, - "y": 225, - "width": 130, - "height": 44, - "strokeColor": "#c92a2a", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2011, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 16, - "fontFamily": 1, - "text": "Runs Service\n:8090", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "runs", - "originalText": "Runs Service\n:8090", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "actions", - "type": "rectangle", - "x": 240, - "y": 210, - "width": 160, - "height": 70, - "strokeColor": "#7048e8", - "backgroundColor": "#d0bfff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2020, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [ - { - "type": "text", - "id": "actions-text" - } - ], - "updated": 1, - "link": null, - "locked": false - }, - { - "id": "actions-text", - "type": "text", - "x": 260, - "y": 232, - "width": 120, - "height": 25, - "strokeColor": "#7048e8", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2021, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 16, - "fontFamily": 1, - "text": "Actions Service", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "actions", - "originalText": "Actions Service", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "dataproxy", - "type": "rectangle", - "x": 420, - "y": 210, - "width": 160, - "height": 70, - "strokeColor": "#7048e8", - "backgroundColor": "#d0bfff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2030, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [ - { - "type": "text", - "id": "dataproxy-text" - } - ], - "updated": 1, - "link": null, - "locked": false - }, - { - "id": "dataproxy-text", - "type": "text", - "x": 435, - "y": 225, - "width": 130, - "height": 44, - "strokeColor": "#7048e8", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2031, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 16, - "fontFamily": 1, - "text": "DataProxy\n:8088", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "dataproxy", - "originalText": "DataProxy\n:8088", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "cache", - "type": "rectangle", - "x": 600, - "y": 210, - "width": 160, - "height": 70, - "strokeColor": "#7048e8", - "backgroundColor": "#d0bfff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2040, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [ - { - "type": "text", - "id": "cache-text" - } - ], - "updated": 1, - "link": null, - "locked": false - }, - { - "id": "cache-text", - "type": "text", - "x": 620, - "y": 232, - "width": 120, - "height": 25, - "strokeColor": "#7048e8", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2041, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 16, - "fontFamily": 1, - "text": "Cache Service", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "cache", - "originalText": "Cache Service", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "events", - "type": "rectangle", - "x": 780, - "y": 210, - "width": 160, - "height": 70, - "strokeColor": "#7048e8", - "backgroundColor": "#d0bfff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2050, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [ - { - "type": "text", - "id": "events-text" - } - ], - "updated": 1, - "link": null, - "locked": false - }, - { - "id": "events-text", - "type": "text", - "x": 800, - "y": 232, - "width": 120, - "height": 25, - "strokeColor": "#7048e8", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2051, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 16, - "fontFamily": 1, - "text": "Events Service", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "events", - "originalText": "Events Service", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "secret", - "type": "rectangle", - "x": 960, - "y": 210, - "width": 160, - "height": 70, - "strokeColor": "#7048e8", - "backgroundColor": "#d0bfff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2060, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [ - { - "type": "text", - "id": "secret-text" - } - ], - "updated": 1, - "link": null, - "locked": false - }, - { - "id": "secret-text", - "type": "text", - "x": 980, - "y": 232, - "width": 120, - "height": 25, - "strokeColor": "#7048e8", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2061, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 16, - "fontFamily": 1, - "text": "Secret Service", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "secret", - "originalText": "Secret Service", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "executor", - "type": "rectangle", - "x": 100, - "y": 390, - "width": 200, - "height": 70, - "strokeColor": "#7048e8", - "backgroundColor": "#d0bfff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2070, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [ - { - "type": "text", - "id": "executor-text" - } - ], - "updated": 1, - "link": null, - "locked": false - }, - { - "id": "executor-text", - "type": "text", - "x": 115, - "y": 405, - "width": 170, - "height": 44, - "strokeColor": "#7048e8", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2071, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 16, - "fontFamily": 1, - "text": "Executor\n(K8s controller)", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "executor", - "originalText": "Executor\n(K8s controller)", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "taskpod", - "type": "rectangle", - "x": 400, - "y": 360, - "width": 420, - "height": 130, - "strokeColor": "#868e96", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2080, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false - }, - { - "id": "taskpod-label", - "type": "text", - "x": 412, - "y": 370, - "width": 100, - "height": 22, - "strokeColor": "#495057", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2081, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 14, - "fontFamily": 1, - "text": "Task Pod", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Task Pod", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "user-container", - "type": "rectangle", - "x": 420, - "y": 400, - "width": 180, - "height": 70, - "strokeColor": "#1971c2", - "backgroundColor": "#a5d8ff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2090, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [ - { - "type": "text", - "id": "user-container-text" - } - ], - "updated": 1, - "link": null, - "locked": false - }, - { - "id": "user-container-text", - "type": "text", - "x": 440, - "y": 422, - "width": 140, - "height": 25, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2091, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 16, - "fontFamily": 1, - "text": "User Container", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "user-container", - "originalText": "User Container", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "copilot", - "type": "rectangle", - "x": 620, - "y": 400, - "width": 180, - "height": 70, - "strokeColor": "#1971c2", - "backgroundColor": "#a5d8ff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2100, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [ - { - "type": "text", - "id": "copilot-text" - } - ], - "updated": 1, - "link": null, - "locked": false - }, - { - "id": "copilot-text", - "type": "text", - "x": 640, - "y": 415, - "width": 140, - "height": 44, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2101, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 16, - "fontFamily": 1, - "text": "Copilot\n(sidecar)", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "copilot", - "originalText": "Copilot\n(sidecar)", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "postgres", - "type": "rectangle", - "x": 60, - "y": 580, - "width": 180, - "height": 70, - "strokeColor": "#2f9e44", - "backgroundColor": "#b2f2bb", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2110, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [ - { - "type": "text", - "id": "postgres-text" - } - ], - "updated": 1, - "link": null, - "locked": false - }, - { - "id": "postgres-text", - "type": "text", - "x": 80, - "y": 602, - "width": 140, - "height": 25, - "strokeColor": "#2f9e44", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2111, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 16, - "fontFamily": 1, - "text": "PostgreSQL", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "postgres", - "originalText": "PostgreSQL", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "kubernetes", - "type": "rectangle", - "x": 400, - "y": 580, - "width": 200, - "height": 70, - "strokeColor": "#fab005", - "backgroundColor": "#fff3bf", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2120, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [ - { - "type": "text", - "id": "kubernetes-text" - } - ], - "updated": 1, - "link": null, - "locked": false - }, - { - "id": "kubernetes-text", - "type": "text", - "x": 420, - "y": 595, - "width": 160, - "height": 44, - "strokeColor": "#e67700", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2121, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 16, - "fontFamily": 1, - "text": "Kubernetes\n(TaskAction CRD)", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "kubernetes", - "originalText": "Kubernetes\n(TaskAction CRD)", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "storage", - "type": "rectangle", - "x": 760, - "y": 580, - "width": 200, - "height": 70, - "strokeColor": "#f08c00", - "backgroundColor": "#ffec99", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2130, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [ - { - "type": "text", - "id": "storage-text" - } - ], - "updated": 1, - "link": null, - "locked": false - }, - { - "id": "storage-text", - "type": "text", - "x": 775, - "y": 595, - "width": 170, - "height": 44, - "strokeColor": "#f08c00", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 2131, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 16, - "fontFamily": 1, - "text": "Object Storage\n(S3/GCS/Azure)", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "storage", - "originalText": "Object Storage\n(S3/GCS/Azure)", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "arrow-client-runs", - "type": "arrow", - "x": 680, - "y": 130, - "width": 540, - "height": 80, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 0, - "roundness": null, - "elbowed": true, - "opacity": 100, - "angle": 0, - "seed": 3001, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [ - { - "type": "text", - "id": "arrow-client-runs-text" - } - ], - "updated": 1, - "link": null, - "locked": false, - "startBinding": { - "elementId": "sdk", - "focus": 0, - "gap": 1 - }, - "endBinding": { - "elementId": "runs", - "focus": 0, - "gap": 1 - }, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "arrow", - "points": [ - [ - 0, - 0 - ], - [ - -540, - 0 - ], - [ - -540, - 80 - ] - ] - }, - { - "id": "arrow-client-runs-text", - "type": "text", - "x": 140, - "y": 135, - "width": 200, - "height": 22, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 3002, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 14, - "fontFamily": 1, - "text": "gRPC: RunService", - "textAlign": "center", - "verticalAlign": "top", - "containerId": null, - "originalText": "gRPC: RunService", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "arrow-client-dataproxy", - "type": "arrow", - "x": 720, - "y": 130, - "width": 220, - "height": 80, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 0, - "roundness": null, - "elbowed": true, - "opacity": 100, - "angle": 0, - "seed": 3010, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [ - { - "type": "text", - "id": "arrow-client-dataproxy-text" - } - ], - "updated": 1, - "link": null, - "locked": false, - "startBinding": { - "elementId": "sdk", - "focus": 0, - "gap": 1 - }, - "endBinding": { - "elementId": "dataproxy", - "focus": 0, - "gap": 1 - }, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "arrow", - "points": [ - [ - 0, - 0 - ], - [ - -220, - 0 - ], - [ - -220, - 80 - ] - ] - }, - { - "id": "arrow-client-dataproxy-text", - "type": "text", - "x": 530, - "y": 135, - "width": 230, - "height": 22, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 3011, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 14, - "fontFamily": 1, - "text": "gRPC: DataProxyService", - "textAlign": "center", - "verticalAlign": "top", - "containerId": null, - "originalText": "gRPC: DataProxyService", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "arrow-runs-actions", - "type": "arrow", - "x": 220, - "y": 245, - "width": 20, - "height": 0, - "strokeColor": "#7048e8", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 0, - "roundness": null, - "elbowed": true, - "opacity": 100, - "angle": 0, - "seed": 3020, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [ - { - "type": "text", - "id": "arrow-runs-actions-text" - } - ], - "updated": 1, - "link": null, - "locked": false, - "startBinding": { - "elementId": "runs", - "focus": 0, - "gap": 1 - }, - "endBinding": { - "elementId": "actions", - "focus": 0, - "gap": 1 - }, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "arrow", - "points": [ - [ - 0, - 0 - ], - [ - 20, - 0 - ] - ] - }, - { - "id": "arrow-runs-actions-text", - "type": "text", - "x": 222, - "y": 183, - "width": 60, - "height": 22, - "strokeColor": "#7048e8", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 3021, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 14, - "fontFamily": 1, - "text": "Enqueue", - "textAlign": "center", - "verticalAlign": "top", - "containerId": null, - "originalText": "Enqueue", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "arrow-runs-postgres", - "type": "arrow", - "x": 140, - "y": 280, - "width": 130, - "height": 300, - "strokeColor": "#2f9e44", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 0, - "roundness": null, - "elbowed": true, - "opacity": 100, - "angle": 0, - "seed": 3030, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [ - { - "type": "text", - "id": "arrow-runs-postgres-text" - } - ], - "updated": 1, - "link": null, - "locked": false, - "startBinding": { - "elementId": "runs", - "focus": 0, - "gap": 1 - }, - "endBinding": { - "elementId": "postgres", - "focus": 0, - "gap": 1 - }, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "arrow", - "points": [ - [ - 0, - 0 - ], - [ - -120, - 0 - ], - [ - -120, - 300 - ], - [ - 10, - 300 - ] - ] - }, - { - "id": "arrow-runs-postgres-text", - "type": "text", - "x": 30, - "y": 450, - "width": 40, - "height": 22, - "strokeColor": "#2f9e44", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 3031, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 14, - "fontFamily": 1, - "text": "SQL", - "textAlign": "center", - "verticalAlign": "top", - "containerId": null, - "originalText": "SQL", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "arrow-actions-k8s", - "type": "arrow", - "x": 320, - "y": 280, - "width": 630, - "height": 300, - "strokeColor": "#fab005", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 0, - "roundness": null, - "elbowed": true, - "opacity": 100, - "angle": 0, - "seed": 3040, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [ - { - "type": "text", - "id": "arrow-actions-k8s-text" - } - ], - "updated": 1, - "link": null, - "locked": false, - "startBinding": { - "elementId": "actions", - "focus": 0, - "gap": 1 - }, - "endBinding": { - "elementId": "kubernetes", - "focus": 0, - "gap": 1 - }, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "arrow", - "points": [ - [ - 0, - 0 - ], - [ - 0, - 10 - ], - [ - 630, - 10 - ], - [ - 630, - 260 - ], - [ - 180, - 260 - ], - [ - 180, - 300 - ] - ] - }, - { - "id": "arrow-actions-k8s-text", - "type": "text", - "x": 965, - "y": 400, - "width": 160, - "height": 22, - "strokeColor": "#e67700", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 3041, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 14, - "fontFamily": 1, - "text": "create TaskAction CRD", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "create TaskAction CRD", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "arrow-k8s-executor", - "type": "arrow", - "x": 430, - "y": 580, - "width": 230, - "height": 120, - "strokeColor": "#fab005", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 0, - "roundness": null, - "elbowed": true, - "opacity": 100, - "angle": 0, - "seed": 3050, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [ - { - "type": "text", - "id": "arrow-k8s-executor-text" - } - ], - "updated": 1, - "link": null, - "locked": false, - "startBinding": { - "elementId": "kubernetes", - "focus": 0, - "gap": 1 - }, - "endBinding": { - "elementId": "executor", - "focus": 0, - "gap": 1 - }, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "arrow", - "points": [ - [ - 0, - 0 - ], - [ - -230, - 0 - ], - [ - -230, - -120 - ] - ] - }, - { - "id": "arrow-k8s-executor-text", - "type": "text", - "x": 230, - "y": 518, - "width": 100, - "height": 22, - "strokeColor": "#e67700", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 3051, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 14, - "fontFamily": 1, - "text": "watch CRDs", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "watch CRDs", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "arrow-executor-pod", - "type": "arrow", - "x": 300, - "y": 425, - "width": 120, - "height": 0, - "strokeColor": "#495057", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 0, - "roundness": null, - "elbowed": true, - "opacity": 100, - "angle": 0, - "seed": 3060, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [ - { - "type": "text", - "id": "arrow-executor-pod-text" - } - ], - "updated": 1, - "link": null, - "locked": false, - "startBinding": { - "elementId": "executor", - "focus": 0, - "gap": 1 - }, - "endBinding": { - "elementId": "user-container", - "focus": 0, - "gap": 1 - }, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "arrow", - "points": [ - [ - 0, - 0 - ], - [ - 120, - 0 - ] - ] - }, - { - "id": "arrow-executor-pod-text", - "type": "text", - "x": 300, - "y": 378, - "width": 96, - "height": 22, - "strokeColor": "#495057", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 3061, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 14, - "fontFamily": 1, - "text": "create Pod", - "textAlign": "center", - "verticalAlign": "top", - "containerId": null, - "originalText": "create Pod", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "arrow-user-storage", - "type": "arrow", - "x": 510, - "y": 470, - "width": 290, - "height": 110, - "strokeColor": "#f08c00", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 0, - "roundness": null, - "elbowed": true, - "opacity": 100, - "angle": 0, - "seed": 3070, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [ - { - "type": "text", - "id": "arrow-user-storage-text" - } - ], - "updated": 1, - "link": null, - "locked": false, - "startBinding": { - "elementId": "user-container", - "focus": 0, - "gap": 1 - }, - "endBinding": { - "elementId": "storage", - "focus": 0, - "gap": 1 - }, - "lastCommittedPoint": null, - "startArrowhead": "arrow", - "endArrowhead": "arrow", - "points": [ - [ - 0, - 0 - ], - [ - 0, - 50 - ], - [ - 290, - 50 - ], - [ - 290, - 110 - ] - ] - }, - { - "id": "arrow-user-storage-text", - "type": "text", - "x": 600, - "y": 518, - "width": 180, - "height": 22, - "strokeColor": "#f08c00", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 3071, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 14, - "fontFamily": 1, - "text": "read inputs / write outputs", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "read inputs / write outputs", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "arrow-copilot-storage", - "type": "arrow", - "x": 710, - "y": 470, - "width": 190, - "height": 110, - "strokeColor": "#f08c00", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 0, - "roundness": null, - "elbowed": true, - "opacity": 100, - "angle": 0, - "seed": 3080, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [ - { - "type": "text", - "id": "arrow-copilot-storage-text" - } - ], - "updated": 1, - "link": null, - "locked": false, - "startBinding": { - "elementId": "copilot", - "focus": 0, - "gap": 1 - }, - "endBinding": { - "elementId": "storage", - "focus": 0, - "gap": 1 - }, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "arrow", - "points": [ - [ - 0, - 0 - ], - [ - 0, - 60 - ], - [ - 190, - 60 - ], - [ - 190, - 110 - ] - ] - }, - { - "id": "arrow-copilot-storage-text", - "type": "text", - "x": 800, - "y": 518, - "width": 140, - "height": 22, - "strokeColor": "#f08c00", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 3081, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 14, - "fontFamily": 1, - "text": "upload outputs", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "upload outputs", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "arrow-dataproxy-storage", - "type": "arrow", - "x": 500, - "y": 280, - "width": 360, - "height": 300, - "strokeColor": "#f08c00", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 0, - "roundness": null, - "elbowed": true, - "opacity": 100, - "angle": 0, - "seed": 3090, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [ - { - "type": "text", - "id": "arrow-dataproxy-storage-text" - } - ], - "updated": 1, - "link": null, - "locked": false, - "startBinding": { - "elementId": "dataproxy", - "focus": 0, - "gap": 1 - }, - "endBinding": { - "elementId": "storage", - "focus": 0, - "gap": 1 - }, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "arrow", - "points": [ - [ - 0, - 0 - ], - [ - 360, - 0 - ], - [ - 360, - 300 - ] - ] - }, - { - "id": "arrow-dataproxy-storage-text", - "type": "text", - "x": 870, - "y": 420, - "width": 90, - "height": 22, - "strokeColor": "#f08c00", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 3091, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 14, - "fontFamily": 1, - "text": "signed URLs", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "signed URLs", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "arrow-pod-actions", - "type": "arrow", - "x": 510, - "y": 400, - "width": 450, - "height": 205, - "strokeColor": "#7048e8", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 0, - "roundness": null, - "elbowed": true, - "opacity": 100, - "angle": 0, - "seed": 3120, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [ - { - "type": "text", - "id": "arrow-pod-actions-text" - } - ], - "updated": 1, - "link": null, - "locked": false, - "startBinding": { - "elementId": "user-container", - "focus": 0, - "gap": 1 - }, - "endBinding": { - "elementId": "actions", - "focus": 0, - "gap": 1 - }, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "arrow", - "points": [ - [ - 0, - 0 - ], - [ - 0, - -75 - ], - [ - 260, - -75 - ], - [ - 260, - -205 - ], - [ - -190, - -205 - ], - [ - -190, - -190 - ] - ] - }, - { - "id": "arrow-pod-actions-text", - "type": "text", - "x": 300, - "y": 160, - "width": 350, - "height": 22, - "strokeColor": "#7048e8", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 3121, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 13, - "fontFamily": 1, - "text": "SDK ControllerClient \u2192 ActionsService: Enqueue / WatchForUpdates / Abort", - "textAlign": "center", - "verticalAlign": "top", - "containerId": null, - "originalText": "SDK ControllerClient \u2192 ActionsService: Enqueue / WatchForUpdates / Abort", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "legend-title", - "type": "text", - "x": 60, - "y": 720, - "width": 220, - "height": 25, - "strokeColor": "#495057", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 4001, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 16, - "fontFamily": 1, - "text": "Flyte 2 \u2014 System Architecture", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Flyte 2 \u2014 System Architecture", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "legend-subtitle", - "type": "text", - "x": 60, - "y": 748, - "width": 800, - "height": 22, - "strokeColor": "#868e96", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 4002, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 13, - "fontFamily": 1, - "text": "Solid arrows = gRPC / K8s API \u2022 Orange arrows = object storage (S3/GCS/Azure) \u2022 Dashed = proxied access", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Solid arrows = gRPC / K8s API \u2022 Orange arrows = object storage (S3/GCS/Azure) \u2022 Dashed = proxied access", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "scaling-note-0-title", - "type": "text", - "x": 55, - "y": 835, - "width": 530, - "height": 22, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 5100, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 16, - "fontFamily": 1, - "text": "Runs Service", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Runs Service", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "scaling-note-0-body", - "type": "text", - "x": 55, - "y": 857, - "width": 530, - "height": 44, - "strokeColor": "#495057", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 5101, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 13, - "fontFamily": 1, - "text": "Stateless Go microservice; scales horizontally behind a gRPC load balancer.\nStreams updates via Postgres LISTEN/NOTIFY \u2192 WatchRunDetails server-streams.", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Stateless Go microservice; scales horizontally behind a gRPC load balancer.\nStreams updates via Postgres LISTEN/NOTIFY \u2192 WatchRunDetails server-streams.", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "scaling-note-1-title", - "type": "text", - "x": 600, - "y": 835, - "width": 530, - "height": 22, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 5102, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 16, - "fontFamily": 1, - "text": "Actions Service", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Actions Service", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "scaling-note-1-body", - "type": "text", - "x": 600, - "y": 857, - "width": 530, - "height": 44, - "strokeColor": "#495057", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 5103, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 13, - "fontFamily": 1, - "text": "Writes one TaskAction CRD per action; partitioned by action ID for locality.\nUnified service replaces legacy QueueService + StateService (feature-flagged).", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Writes one TaskAction CRD per action; partitioned by action ID for locality.\nUnified service replaces legacy QueueService + StateService (feature-flagged).", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "scaling-note-2-title", - "type": "text", - "x": 55, - "y": 905, - "width": 530, - "height": 22, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 5104, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 16, - "fontFamily": 1, - "text": "Executor (K8s controller)", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Executor (K8s controller)", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "scaling-note-2-body", - "type": "text", - "x": 55, - "y": 927, - "width": 530, - "height": 64, - "strokeColor": "#495057", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 5105, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 13, - "fontFamily": 1, - "text": "Watches TaskAction CRDs via K8s informers (no polling).\nHorizontally scaled via leader election; each replica owns a shard of CRDs.\nPlugins (Pod, Spark, Ray, Dask, ...) translate TaskAction \u2192 native K8s resources.", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Watches TaskAction CRDs via K8s informers (no polling).\nHorizontally scaled via leader election; each replica owns a shard of CRDs.\nPlugins (Pod, Spark, Ray, Dask, ...) translate TaskAction \u2192 native K8s resources.", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "scaling-note-3-title", - "type": "text", - "x": 600, - "y": 905, - "width": 530, - "height": 22, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 5106, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 16, - "fontFamily": 1, - "text": "DataProxy", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "DataProxy", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "scaling-note-3-body", - "type": "text", - "x": 600, - "y": 927, - "width": 530, - "height": 44, - "strokeColor": "#495057", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 5107, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 13, - "fontFamily": 1, - "text": "Stateless; issues signed URLs so pods and SDK read/write Object Storage directly \u2014\nno data passes through the service (keeps the hot path off the control plane).", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Stateless; issues signed URLs so pods and SDK read/write Object Storage directly \u2014\nno data passes through the service (keeps the hot path off the control plane).", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "scaling-note-4-title", - "type": "text", - "x": 55, - "y": 975, - "width": 530, - "height": 22, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 5108, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 16, - "fontFamily": 1, - "text": "Cache Service", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Cache Service", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "scaling-note-4-body", - "type": "text", - "x": 55, - "y": 997, - "width": 530, - "height": 44, - "strokeColor": "#495057", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 5109, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 13, - "fontFamily": 1, - "text": "Deterministic key (task sig + input literals); pg-backed.\nReservations prevent duplicate concurrent runs; TTL-bounded entries.", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Deterministic key (task sig + input literals); pg-backed.\nReservations prevent duplicate concurrent runs; TTL-bounded entries.", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "scaling-note-5-title", - "type": "text", - "x": 600, - "y": 975, - "width": 530, - "height": 22, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 5110, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 16, - "fontFamily": 1, - "text": "PostgreSQL", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "PostgreSQL", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "scaling-note-5-body", - "type": "text", - "x": 600, - "y": 997, - "width": 530, - "height": 44, - "strokeColor": "#495057", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 5111, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 13, - "fontFamily": 1, - "text": "Single source of truth; run via HA replication for prod.\nJSONB columns for serialized specs; indexed by (org, project, domain, name).", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Single source of truth; run via HA replication for prod.\nJSONB columns for serialized specs; indexed by (org, project, domain, name).", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "scaling-note-6-title", - "type": "text", - "x": 55, - "y": 1045, - "width": 530, - "height": 22, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 5112, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 16, - "fontFamily": 1, - "text": "Object Storage", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Object Storage", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "scaling-note-6-body", - "type": "text", - "x": 55, - "y": 1067, - "width": 530, - "height": 44, - "strokeColor": "#495057", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 5113, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 13, - "fontFamily": 1, - "text": "S3 / GCS / Azure / RustFS. Signed URLs + direct pod I/O avoid proxy bottlenecks.\nCode bundles and task inputs/outputs live here; CDN/multi-region for global reach.", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "S3 / GCS / Azure / RustFS. Signed URLs + direct pod I/O avoid proxy bottlenecks.\nCode bundles and task inputs/outputs live here; CDN/multi-region for global reach.", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "scaling-note-7-title", - "type": "text", - "x": 600, - "y": 1045, - "width": 530, - "height": 22, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 5114, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 16, - "fontFamily": 1, - "text": "Task Pod (+ Copilot)", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Task Pod (+ Copilot)", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "scaling-note-7-body", - "type": "text", - "x": 600, - "y": 1067, - "width": 530, - "height": 44, - "strokeColor": "#495057", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 5115, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 13, - "fontFamily": 1, - "text": "Ephemeral. User container embeds flyte SDK \u2192 ControllerClient submits child actions\nto ActionsService.Enqueue directly (bypasses RunService hot path, enabling fanout).", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Ephemeral. User container embeds flyte SDK \u2192 ControllerClient submits child actions\nto ActionsService.Enqueue directly (bypasses RunService hot path, enabling fanout).", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "scaling-title", - "type": "text", - "x": 55, - "y": 800, - "width": 400, - "height": 28, - "strokeColor": "#495057", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "seed": 5002, - "version": 1, - "versionNonce": 0, - "isDeleted": false, - "groupIds": [], - "frameId": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 20, - "fontFamily": 1, - "text": "Scalability & Performance Notes", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Scalability & Performance Notes", - "autoResize": true, - "lineHeight": 1.25 - } - ], - "appState": { - "gridSize": null, - "viewBackgroundColor": "#ffffff" - }, - "files": {} -} \ No newline at end of file diff --git a/docs/flyte-architecture.excalidraw b/docs/flyte-architecture.excalidraw new file mode 100644 index 0000000000..539c92cfaa --- /dev/null +++ b/docs/flyte-architecture.excalidraw @@ -0,0 +1,16720 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "id": "kubernetes", + "type": "rectangle", + "x": 400, + "y": 580, + "width": 200, + "height": 70, + "strokeColor": "#1971c2", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2120, + "version": 23, + "versionNonce": 836234358, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "kubernetes-text" + }, + { + "id": "arrow-k8s-executor", + "type": "arrow" + }, + { + "id": "3dSUVfaNwhzb76b8oUpBf", + "type": "arrow" + } + ], + "updated": 1777333910976, + "link": null, + "locked": false, + "index": "bld", + "roundness": null + }, + { + "id": "group-control-plane", + "type": "rectangle", + "x": 40, + "y": 180, + "width": 1280, + "height": 130, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 1001, + "version": 13, + "versionNonce": 1766047210, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "index": "ble", + "roundness": null + }, + { + "id": "group-control-plane-label", + "type": "text", + "x": 55, + "y": 155, + "width": 150, + "height": 22, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 1002, + "version": 13, + "versionNonce": 206499254, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 18, + "fontFamily": 1, + "text": "Control Plane", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Control Plane", + "autoResize": true, + "lineHeight": 1.25, + "index": "blf", + "roundness": null + }, + { + "id": "group-data-plane", + "type": "rectangle", + "x": 40, + "y": 340, + "width": 820, + "height": 170, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 1003, + "version": 13, + "versionNonce": 1453879466, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "index": "blg", + "roundness": null + }, + { + "id": "group-data-plane-label", + "type": "text", + "x": 55, + "y": 315, + "width": 240, + "height": 22, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 1004, + "version": 13, + "versionNonce": 450086646, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 18, + "fontFamily": 1, + "text": "Data Plane (Kubernetes)", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Data Plane (Kubernetes)", + "autoResize": true, + "lineHeight": 1.25, + "index": "blh", + "roundness": null + }, + { + "id": "group-infrastructure", + "type": "rectangle", + "x": 40, + "y": 550, + "width": 1000, + "height": 130, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 1005, + "version": 13, + "versionNonce": 40422250, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "index": "bli", + "roundness": null + }, + { + "id": "group-infrastructure-label", + "type": "text", + "x": 55, + "y": 525, + "width": 180, + "height": 22, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 1006, + "version": 13, + "versionNonce": 1307277366, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 18, + "fontFamily": 1, + "text": "Infrastructure", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Infrastructure", + "autoResize": true, + "lineHeight": 1.25, + "index": "blj", + "roundness": null + }, + { + "id": "client", + "type": "ellipse", + "x": 330, + "y": 60, + "width": 200, + "height": 70, + "strokeColor": "#1971c2", + "backgroundColor": "#e7f5ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2001, + "version": 13, + "versionNonce": 1926221354, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "client-text" + } + ], + "updated": 1777333910976, + "link": null, + "locked": false, + "index": "blk", + "roundness": null + }, + { + "id": "client-text", + "type": "text", + "x": 340, + "y": 82, + "width": 180, + "height": 25, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2002, + "version": 13, + "versionNonce": 1031471478, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 18, + "fontFamily": 1, + "text": "Developer / CLI", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "client", + "originalText": "Developer / CLI", + "autoResize": true, + "lineHeight": 1.25, + "index": "bll", + "roundness": null + }, + { + "id": "scaling-panel", + "type": "rectangle", + "x": 40, + "y": 790, + "width": 1100, + "height": 335, + "strokeColor": "#868e96", + "backgroundColor": "#f8f9fa", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5001, + "version": 13, + "versionNonce": 751335658, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "index": "blm", + "roundness": null + }, + { + "id": "sdk", + "type": "rectangle", + "x": 600.3229437934028, + "y": 42.42707994249133, + "width": 240, + "height": 70, + "strokeColor": "#1971c2", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2003, + "version": 37, + "versionNonce": 1019699894, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "sdk-text" + } + ], + "updated": 1777333910976, + "link": null, + "locked": false, + "index": "bln", + "roundness": null + }, + { + "id": "sdk-text", + "type": "text", + "x": 615.3229437934028, + "y": 54.42707994249133, + "width": 210, + "height": 44, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2004, + "version": 37, + "versionNonce": 1608371114, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "flyte SDK (Python)\ncontrolplane + ControllerClient", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "sdk", + "originalText": "flyte SDK (Python)\ncontrolplane + ControllerClient", + "autoResize": true, + "lineHeight": 1.25, + "index": "blo", + "roundness": null + }, + { + "id": "arrow-dev-sdk", + "type": "arrow", + "x": 530, + "y": 95, + "width": 70, + "height": 0, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "roundness": null, + "elbowed": true, + "opacity": 100, + "angle": 0, + "seed": 3110, + "version": 13, + "versionNonce": 1853201398, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "startBinding": { + "elementId": "client", + "focus": 0, + "gap": 1, + "fixedPoint": [ + 0.5001, + 0.5001 + ], + "mode": "orbit" + }, + "endBinding": { + "elementId": "sdk", + "focus": 0, + "gap": 1, + "fixedPoint": [ + 0.5001, + 0.5001 + ], + "mode": "orbit" + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 70, + 0 + ] + ], + "index": "blp", + "fixedSegments": null + }, + { + "id": "runs", + "type": "rectangle", + "x": 60, + "y": 210, + "width": 160, + "height": 70, + "strokeColor": "#f08c00", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 3, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2010, + "version": 15, + "versionNonce": 305841770, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "runs-text" + } + ], + "updated": 1777333910976, + "link": null, + "locked": false, + "index": "blq", + "roundness": null + }, + { + "id": "runs-text", + "type": "text", + "x": 75, + "y": 225, + "width": 130, + "height": 44, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2011, + "version": 14, + "versionNonce": 1485483318, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Runs Service\n:8090", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "runs", + "originalText": "Runs Service\n:8090", + "autoResize": true, + "lineHeight": 1.25, + "index": "blr", + "roundness": null + }, + { + "id": "actions", + "type": "rectangle", + "x": 240, + "y": 210, + "width": 160, + "height": 70, + "strokeColor": "#7048e8", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2020, + "version": 28, + "versionNonce": 1286236458, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "actions-text" + }, + { + "id": "arrow-pod-actions", + "type": "arrow" + }, + { + "id": "3dSUVfaNwhzb76b8oUpBf", + "type": "arrow" + } + ], + "updated": 1777333910976, + "link": null, + "locked": false, + "index": "bls", + "roundness": null + }, + { + "id": "actions-text", + "type": "text", + "x": 260.94403076171875, + "y": 235, + "width": 118.1119384765625, + "height": 20, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2021, + "version": 18, + "versionNonce": 2020316790, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Actions Service", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "actions", + "originalText": "Actions Service", + "autoResize": true, + "lineHeight": 1.25, + "index": "blt", + "roundness": null + }, + { + "id": "dataproxy", + "type": "rectangle", + "x": 419.708251953125, + "y": 210, + "width": 160, + "height": 70, + "strokeColor": "#f08c00", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2030, + "version": 16, + "versionNonce": 1184347114, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "dataproxy-text" + } + ], + "updated": 1777333910976, + "link": null, + "locked": false, + "index": "blu", + "roundness": null + }, + { + "id": "dataproxy-text", + "type": "text", + "x": 456.86827850341797, + "y": 225, + "width": 85.67994689941406, + "height": 40, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2031, + "version": 18, + "versionNonce": 1457346486, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "DataProxy\n:8088", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "dataproxy", + "originalText": "DataProxy\n:8088", + "autoResize": true, + "lineHeight": 1.25, + "index": "blv", + "roundness": null + }, + { + "id": "cache", + "type": "rectangle", + "x": 600, + "y": 210, + "width": 160, + "height": 70, + "strokeColor": "#f08c00", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2040, + "version": 15, + "versionNonce": 302884522, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "cache-text" + } + ], + "updated": 1777333910976, + "link": null, + "locked": false, + "index": "blw", + "roundness": null + }, + { + "id": "cache-text", + "type": "text", + "x": 626.160026550293, + "y": 235, + "width": 107.67994689941406, + "height": 20, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2041, + "version": 17, + "versionNonce": 470085878, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Cache Service", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "cache", + "originalText": "Cache Service", + "autoResize": true, + "lineHeight": 1.25, + "index": "blx", + "roundness": null + }, + { + "id": "events", + "type": "rectangle", + "x": 780, + "y": 210, + "width": 160, + "height": 70, + "strokeColor": "#f08c00", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2050, + "version": 15, + "versionNonce": 1203192170, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "events-text" + } + ], + "updated": 1777333910976, + "link": null, + "locked": false, + "index": "bly", + "roundness": null + }, + { + "id": "events-text", + "type": "text", + "x": 800, + "y": 232, + "width": 120, + "height": 25, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2051, + "version": 14, + "versionNonce": 593977910, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Events Service", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "events", + "originalText": "Events Service", + "autoResize": true, + "lineHeight": 1.25, + "index": "blz", + "roundness": null + }, + { + "id": "secret", + "type": "rectangle", + "x": 960, + "y": 209.70314025878906, + "width": 160, + "height": 70, + "strokeColor": "#f08c00", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2060, + "version": 16, + "versionNonce": 853509162, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "secret-text" + } + ], + "updated": 1777333910976, + "link": null, + "locked": false, + "index": "bm0", + "roundness": null + }, + { + "id": "secret-text", + "type": "text", + "x": 980, + "y": 231.70314025878906, + "width": 120, + "height": 25, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2061, + "version": 15, + "versionNonce": 266972022, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Secret Service", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "secret", + "originalText": "Secret Service", + "autoResize": true, + "lineHeight": 1.25, + "index": "bm1", + "roundness": null + }, + { + "id": "executor", + "type": "rectangle", + "x": 71.61977132161451, + "y": 388.031260172526, + "width": 200, + "height": 70, + "strokeColor": "#7048e8", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2070, + "version": 27, + "versionNonce": 2104585962, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "executor-text" + }, + { + "id": "arrow-k8s-executor", + "type": "arrow" + }, + { + "id": "arrow-executor-pod", + "type": "arrow" + } + ], + "updated": 1777333910976, + "link": null, + "locked": false, + "index": "bm2", + "roundness": null + }, + { + "id": "executor-text", + "type": "text", + "x": 109.62781270345045, + "y": 403.031260172526, + "width": 123.98391723632812, + "height": 40, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2071, + "version": 28, + "versionNonce": 1607519414, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Executor\n(K8s controller)", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "executor", + "originalText": "Executor\n(K8s controller)", + "autoResize": true, + "lineHeight": 1.25, + "index": "bm3", + "roundness": null + }, + { + "id": "taskpod", + "type": "rectangle", + "x": 400, + "y": 360, + "width": 420, + "height": 130, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2080, + "version": 14, + "versionNonce": 1542980010, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "id": "arrow-executor-pod", + "type": "arrow" + } + ], + "updated": 1777333910976, + "link": null, + "locked": false, + "index": "bm4", + "roundness": null + }, + { + "id": "taskpod-label", + "type": "text", + "x": 412, + "y": 370, + "width": 100, + "height": 22, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2081, + "version": 13, + "versionNonce": 12699126, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "Task Pod", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Task Pod", + "autoResize": true, + "lineHeight": 1.25, + "index": "bm5", + "roundness": null + }, + { + "id": "user-container", + "type": "rectangle", + "x": 420, + "y": 400, + "width": 180, + "height": 70, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2090, + "version": 18, + "versionNonce": 966671466, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "user-container-text" + }, + { + "id": "arrow-pod-actions", + "type": "arrow" + } + ], + "updated": 1777333910976, + "link": null, + "locked": false, + "index": "bm6", + "roundness": null + }, + { + "id": "user-container-text", + "type": "text", + "x": 440, + "y": 422, + "width": 140, + "height": 25, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2091, + "version": 13, + "versionNonce": 1673631542, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "User Container", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "user-container", + "originalText": "User Container", + "autoResize": true, + "lineHeight": 1.25, + "index": "bm7", + "roundness": null + }, + { + "id": "copilot", + "type": "rectangle", + "x": 620, + "y": 400, + "width": 180, + "height": 70, + "strokeColor": "#f08c00", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2100, + "version": 15, + "versionNonce": 1680809770, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "copilot-text" + } + ], + "updated": 1777333910976, + "link": null, + "locked": false, + "index": "bm8", + "roundness": null + }, + { + "id": "copilot-text", + "type": "text", + "x": 676.160026550293, + "y": 415, + "width": 67.67994689941406, + "height": 40, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2101, + "version": 17, + "versionNonce": 288702582, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Copilot\n(sidecar)", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "copilot", + "originalText": "Copilot\n(sidecar)", + "autoResize": true, + "lineHeight": 1.25, + "index": "bm9", + "roundness": null + }, + { + "id": "postgres", + "type": "rectangle", + "x": 60, + "y": 580, + "width": 180, + "height": 70, + "strokeColor": "#2f9e44", + "backgroundColor": "#b2f2bb", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2110, + "version": 13, + "versionNonce": 940943850, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "postgres-text" + } + ], + "updated": 1777333910976, + "link": null, + "locked": false, + "index": "bmA", + "roundness": null + }, + { + "id": "postgres-text", + "type": "text", + "x": 80, + "y": 602, + "width": 140, + "height": 25, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2111, + "version": 13, + "versionNonce": 1021428150, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "PostgreSQL", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "postgres", + "originalText": "PostgreSQL", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmB", + "roundness": null + }, + { + "id": "kubernetes-text", + "type": "text", + "x": 429.4480438232422, + "y": 595, + "width": 141.10391235351562, + "height": 40, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2121, + "version": 15, + "versionNonce": 1281154218, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Kubernetes\n(TaskAction CRD)", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "kubernetes", + "originalText": "Kubernetes\n(TaskAction CRD)", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmC", + "roundness": null + }, + { + "id": "storage", + "type": "rectangle", + "x": 760, + "y": 580, + "width": 200, + "height": 70, + "strokeColor": "#e03131", + "backgroundColor": "#ffc9c9", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2130, + "version": 15, + "versionNonce": 1508645622, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "storage-text" + } + ], + "updated": 1777333910976, + "link": null, + "locked": false, + "index": "bmD", + "roundness": null + }, + { + "id": "storage-text", + "type": "text", + "x": 775, + "y": 595, + "width": 170, + "height": 44, + "strokeColor": "#e03131", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 2131, + "version": 14, + "versionNonce": 514832234, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Object Storage\n(S3/GCS/Azure)", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "storage", + "originalText": "Object Storage\n(S3/GCS/Azure)", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmE", + "roundness": null + }, + { + "id": "arrow-client-runs", + "type": "arrow", + "x": 680, + "y": 130, + "width": 540, + "height": 80, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "roundness": null, + "elbowed": true, + "opacity": 100, + "angle": 0, + "seed": 3001, + "version": 13, + "versionNonce": 785992758, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "arrow-client-runs-text" + } + ], + "updated": 1777333910976, + "link": null, + "locked": false, + "startBinding": { + "elementId": "sdk", + "focus": 0, + "gap": 1, + "fixedPoint": [ + 0.5001, + 0.5001 + ], + "mode": "orbit" + }, + "endBinding": { + "elementId": "runs", + "focus": 0, + "gap": 1, + "fixedPoint": [ + 0.5001, + 0.5001 + ], + "mode": "orbit" + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -540, + 0 + ], + [ + -540, + 80 + ] + ], + "index": "bmF", + "fixedSegments": null + }, + { + "id": "arrow-client-runs-text", + "type": "text", + "x": 140, + "y": 135, + "width": 200, + "height": 22, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 3002, + "version": 13, + "versionNonce": 1062812202, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "gRPC: RunService", + "textAlign": "center", + "verticalAlign": "top", + "containerId": "arrow-client-runs", + "originalText": "gRPC: RunService", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmG", + "roundness": null + }, + { + "id": "arrow-client-dataproxy", + "type": "arrow", + "x": 720, + "y": 130, + "width": 220, + "height": 80, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "roundness": null, + "elbowed": true, + "opacity": 100, + "angle": 0, + "seed": 3010, + "version": 13, + "versionNonce": 1770935670, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "arrow-client-dataproxy-text" + } + ], + "updated": 1777333910976, + "link": null, + "locked": false, + "startBinding": { + "elementId": "sdk", + "focus": 0, + "gap": 1, + "fixedPoint": [ + 0.5001, + 0.5001 + ], + "mode": "orbit" + }, + "endBinding": { + "elementId": "dataproxy", + "focus": 0, + "gap": 1, + "fixedPoint": [ + 0.5001, + 0.5001 + ], + "mode": "orbit" + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -220, + 0 + ], + [ + -220, + 80 + ] + ], + "index": "bmH", + "fixedSegments": null + }, + { + "id": "arrow-client-dataproxy-text", + "type": "text", + "x": 530, + "y": 135, + "width": 230, + "height": 22, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 3011, + "version": 13, + "versionNonce": 2101634282, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "gRPC: DataProxyService", + "textAlign": "center", + "verticalAlign": "top", + "containerId": "arrow-client-dataproxy", + "originalText": "gRPC: DataProxyService", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmI", + "roundness": null + }, + { + "id": "arrow-runs-actions", + "type": "arrow", + "x": 220, + "y": 245, + "width": 20, + "height": 0, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "roundness": null, + "elbowed": true, + "opacity": 100, + "angle": 0, + "seed": 3020, + "version": 13, + "versionNonce": 860894902, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "startBinding": { + "elementId": "runs", + "focus": 0, + "gap": 1, + "fixedPoint": [ + 0.5001, + 0.5001 + ], + "mode": "orbit" + }, + "endBinding": { + "elementId": "actions", + "focus": 0, + "gap": 1, + "fixedPoint": [ + 0.5001, + 0.5001 + ], + "mode": "orbit" + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 20, + 0 + ] + ], + "index": "bmJ", + "fixedSegments": null + }, + { + "id": "arrow-runs-actions-text", + "type": "text", + "x": 222, + "y": 185, + "width": 55, + "height": 22, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 3021, + "version": 13, + "versionNonce": 301741994, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 11, + "fontFamily": 1, + "text": "Enqueue", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Enqueue", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmK", + "roundness": null + }, + { + "id": "arrow-runs-postgres", + "type": "arrow", + "x": 140, + "y": 280, + "width": 130, + "height": 300, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "roundness": null, + "elbowed": true, + "opacity": 100, + "angle": 0, + "seed": 3030, + "version": 13, + "versionNonce": 1153691638, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "arrow-runs-postgres-text" + } + ], + "updated": 1777333910976, + "link": null, + "locked": false, + "startBinding": { + "elementId": "runs", + "focus": 0, + "gap": 1, + "fixedPoint": [ + 0.5001, + 0.5001 + ], + "mode": "orbit" + }, + "endBinding": { + "elementId": "postgres", + "focus": 0, + "gap": 1, + "fixedPoint": [ + 0.5001, + 0.5001 + ], + "mode": "orbit" + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -120, + 0 + ], + [ + -120, + 300 + ], + [ + 10, + 300 + ] + ], + "index": "bmL", + "fixedSegments": null + }, + { + "id": "arrow-runs-postgres-text", + "type": "text", + "x": 30, + "y": 450, + "width": 40, + "height": 22, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 3031, + "version": 13, + "versionNonce": 1303097962, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "SQL", + "textAlign": "center", + "verticalAlign": "top", + "containerId": "arrow-runs-postgres", + "originalText": "SQL", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmM", + "roundness": null + }, + { + "id": "arrow-actions-k8s", + "type": "arrow", + "x": 320.01599999999996, + "y": 245.007, + "width": 180.00400000000002, + "height": 369.99999999999994, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "roundness": null, + "elbowed": true, + "opacity": 100, + "angle": 0, + "seed": 3040, + "version": 827, + "versionNonce": 2045673782, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "startBinding": { + "elementId": "actions", + "focus": 0, + "gap": 1, + "fixedPoint": [ + 0.5001, + 0.5001 + ], + "mode": "orbit" + }, + "endBinding": { + "elementId": "kubernetes", + "focus": 0, + "gap": 1, + "fixedPoint": [ + 0.5001, + 0.5001 + ], + "mode": "orbit" + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 5.645473281133718, + 0 + ], + [ + 5.645473281133718, + 41.5729977136038 + ], + [ + 13.581852434430857, + 41.5729977136038 + ], + [ + 13.581852434430857, + 226.69277920774442 + ], + [ + 22.581893124534986, + 226.69277920774442 + ], + [ + 22.581893124534986, + 369.99999999999994 + ], + [ + 180.00400000000002, + 369.99999999999994 + ] + ], + "index": "bmN", + "fixedSegments": [ + { + "index": 3, + "start": [ + 5.645473281133718, + 41.5729977136038 + ], + "end": [ + 13.581852434430857, + 41.5729977136038 + ] + }, + { + "index": 5, + "start": [ + 13.581852434430857, + 226.69277920774442 + ], + "end": [ + 22.581893124534986, + 226.69277920774442 + ] + }, + { + "index": 6, + "start": [ + 22.581893124534986, + 226.69277920774442 + ], + "end": [ + 22.581893124534986, + 369.99999999999994 + ] + } + ], + "startIsSpecial": false, + "endIsSpecial": false + }, + { + "id": "arrow-actions-k8s-text", + "type": "text", + "x": 330.0978524344308, + "y": 370.3898884606741, + "width": 7, + "height": 17.5, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 3041, + "version": 24, + "versionNonce": 1126028586, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "arrow-actions-k8s", + "originalText": "", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmO", + "roundness": null + }, + { + "id": "arrow-k8s-executor", + "type": "arrow", + "x": 393.99999999999994, + "y": 614.9, + "width": 222.48022867838543, + "height": 152.12159317258806, + "strokeColor": "#fab005", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "roundness": null, + "elbowed": true, + "opacity": 100, + "angle": 0, + "seed": 3050, + "version": 336, + "versionNonce": 1714743926, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "arrow-k8s-executor-text" + } + ], + "updated": 1777333910976, + "link": null, + "locked": false, + "startBinding": { + "elementId": "kubernetes", + "mode": "orbit", + "fixedPoint": [ + -0.030000000000000283, + 0.4985714285714282 + ] + }, + "endBinding": { + "elementId": "executor", + "mode": "orbit", + "fixedPoint": [ + 0.49950000000000006, + 1.0857142857142856 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -7.240729922339995, + 0 + ], + [ + -7.240729922339995, + 1.2528533451140902 + ], + [ + -82.50633457728776, + 1.2528533451140902 + ], + [ + -82.50633457728776, + -65.04917912558903 + ], + [ + -104.05316888718374, + -65.04917912558903 + ], + [ + -104.05316888718374, + -110.86873982747397 + ], + [ + -222.48022867838543, + -110.86873982747397 + ], + [ + -222.48022867838543, + -150.86873982747397 + ] + ], + "index": "bmP", + "fixedSegments": [ + { + "index": 2, + "start": [ + -7.240729922339995, + 0 + ], + "end": [ + -7.240729922339995, + 1.2528533451140902 + ] + }, + { + "index": 3, + "start": [ + -7.240729922339995, + 1.2528533451140902 + ], + "end": [ + -82.50633457728776, + 1.2528533451140902 + ] + }, + { + "index": 4, + "start": [ + -82.50633457728776, + 1.2528533451140902 + ], + "end": [ + -82.50633457728776, + -65.04917912558903 + ] + }, + { + "index": 5, + "start": [ + -82.50633457728776, + -65.04917912558903 + ], + "end": [ + -104.05316888718374, + -65.04917912558903 + ] + }, + { + "index": 6, + "start": [ + -104.05316888718374, + -65.04917912558903 + ], + "end": [ + -104.05316888718374, + -110.86873982747397 + ] + } + ], + "startIsSpecial": false, + "endIsSpecial": true + }, + { + "id": "arrow-k8s-executor-text", + "type": "text", + "x": 230, + "y": 518, + "width": 83.7479248046875, + "height": 17.5, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 3051, + "version": 14, + "versionNonce": 1941807082, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "watch CRDs", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "arrow-k8s-executor", + "originalText": "watch CRDs", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmQ", + "roundness": null + }, + { + "id": "arrow-executor-pod", + "type": "arrow", + "x": 277.6197713216145, + "y": 430.57291666666674, + "width": 116.38022867838555, + "height": 5.672916666666708, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "roundness": null, + "elbowed": true, + "opacity": 100, + "angle": 0, + "seed": 3060, + "version": 174, + "versionNonce": 1750870966, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "arrow-executor-pod-text" + } + ], + "updated": 1777333910976, + "link": null, + "locked": false, + "startBinding": { + "elementId": "executor", + "mode": "orbit", + "fixedPoint": [ + 1.03, + 0.6077379499162963 + ] + }, + "endBinding": { + "elementId": "taskpod", + "mode": "orbit", + "fixedPoint": [ + -0.01428571428571415, + 0.4992307692307695 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 58.190114339192746, + 0 + ], + [ + 58.190114339192746, + -5.672916666666708 + ], + [ + 116.38022867838555, + -5.672916666666708 + ] + ], + "index": "bmR", + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "arrow-executor-pod-text", + "type": "text", + "x": 321.2060317993164, + "y": 416.25, + "width": 77.58793640136719, + "height": 17.5, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 3061, + "version": 16, + "versionNonce": 2073432746, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "create Pod", + "textAlign": "center", + "verticalAlign": "top", + "containerId": "arrow-executor-pod", + "originalText": "create Pod", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmS", + "roundness": null + }, + { + "id": "arrow-user-storage", + "type": "arrow", + "x": 510, + "y": 470, + "width": 290, + "height": 110, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "roundness": null, + "elbowed": true, + "opacity": 100, + "angle": 0, + "seed": 3070, + "version": 13, + "versionNonce": 1049183478, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "arrow-user-storage-text" + } + ], + "updated": 1777333910976, + "link": null, + "locked": false, + "startBinding": { + "elementId": "user-container", + "focus": 0, + "gap": 1, + "fixedPoint": [ + 0.5001, + 0.5001 + ], + "mode": "orbit" + }, + "endBinding": { + "elementId": "storage", + "focus": 0, + "gap": 1, + "fixedPoint": [ + 0.5001, + 0.5001 + ], + "mode": "orbit" + }, + "lastCommittedPoint": null, + "startArrowhead": "arrow", + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 0, + 50 + ], + [ + 290, + 50 + ], + [ + 290, + 110 + ] + ], + "index": "bmT", + "fixedSegments": null + }, + { + "id": "arrow-user-storage-text", + "type": "text", + "x": 600, + "y": 518, + "width": 180, + "height": 22, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 3071, + "version": 13, + "versionNonce": 1028795754, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "read inputs / write outputs", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "arrow-user-storage", + "originalText": "read inputs / write outputs", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmU", + "roundness": null + }, + { + "id": "arrow-copilot-storage", + "type": "arrow", + "x": 710, + "y": 470, + "width": 190, + "height": 110, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "roundness": null, + "elbowed": true, + "opacity": 100, + "angle": 0, + "seed": 3080, + "version": 13, + "versionNonce": 440481334, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "arrow-copilot-storage-text" + } + ], + "updated": 1777333910976, + "link": null, + "locked": false, + "startBinding": { + "elementId": "copilot", + "focus": 0, + "gap": 1, + "fixedPoint": [ + 0.5001, + 0.5001 + ], + "mode": "orbit" + }, + "endBinding": { + "elementId": "storage", + "focus": 0, + "gap": 1, + "fixedPoint": [ + 0.5001, + 0.5001 + ], + "mode": "orbit" + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 0, + 60 + ], + [ + 190, + 60 + ], + [ + 190, + 110 + ] + ], + "index": "bmV", + "fixedSegments": null + }, + { + "id": "arrow-copilot-storage-text", + "type": "text", + "x": 800, + "y": 518, + "width": 140, + "height": 22, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 3081, + "version": 13, + "versionNonce": 238874666, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "upload outputs", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "arrow-copilot-storage", + "originalText": "upload outputs", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmW", + "roundness": null + }, + { + "id": "arrow-dataproxy-storage", + "type": "arrow", + "x": 500, + "y": 280, + "width": 360, + "height": 300, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 0, + "roundness": null, + "elbowed": true, + "opacity": 100, + "angle": 0, + "seed": 3090, + "version": 13, + "versionNonce": 879296374, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "arrow-dataproxy-storage-text" + } + ], + "updated": 1777333910976, + "link": null, + "locked": false, + "startBinding": { + "elementId": "dataproxy", + "focus": 0, + "gap": 1, + "fixedPoint": [ + 0.5001, + 0.5001 + ], + "mode": "orbit" + }, + "endBinding": { + "elementId": "storage", + "focus": 0, + "gap": 1, + "fixedPoint": [ + 0.5001, + 0.5001 + ], + "mode": "orbit" + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 0, + 40 + ], + [ + 360, + 40 + ], + [ + 360, + 300 + ] + ], + "index": "bmX", + "fixedSegments": null + }, + { + "id": "arrow-dataproxy-storage-text", + "type": "text", + "x": 875, + "y": 420, + "width": 90, + "height": 22, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 3091, + "version": 13, + "versionNonce": 1648450282, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "signed URLs", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "arrow-dataproxy-storage", + "originalText": "signed URLs", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmY", + "roundness": null + }, + { + "id": "arrow-pod-actions", + "type": "arrow", + "x": 519.8697509765625, + "y": 394, + "width": 149.2352945963542, + "height": 108, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 0, + "roundness": null, + "elbowed": true, + "opacity": 100, + "angle": 0, + "seed": 3120, + "version": 243, + "versionNonce": 1631953078, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "startBinding": { + "elementId": "user-container", + "mode": "orbit", + "fixedPoint": [ + 0.5548319498697917, + -0.08571428571428572 + ] + }, + "endBinding": { + "elementId": "actions", + "mode": "orbit", + "fixedPoint": [ + 0.8164653523763018, + 1.0857142857142856 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 0, + -40 + ], + [ + -50.06360589890255, + -40 + ], + [ + -50.06360589890255, + -68 + ], + [ + -149.2352945963542, + -68 + ], + [ + -149.2352945963542, + -108 + ] + ], + "index": "bmZ", + "fixedSegments": [ + { + "index": 3, + "start": [ + -50.06360589890255, + -40 + ], + "end": [ + -50.06360589890255, + -68 + ] + } + ], + "startIsSpecial": true, + "endIsSpecial": false + }, + { + "id": "arrow-pod-actions-text", + "type": "text", + "x": 60, + "y": 693, + "width": 600, + "height": 22, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 3121, + "version": 13, + "versionNonce": 2011852202, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 12, + "fontFamily": 1, + "text": "SDK ControllerClient → ActionsService: Enqueue / WatchForUpdates / Abort", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "SDK ControllerClient → ActionsService: Enqueue / WatchForUpdates / Abort", + "autoResize": true, + "lineHeight": 1.25, + "index": "bma", + "roundness": null + }, + { + "id": "legend-title", + "type": "text", + "x": 60, + "y": 720, + "width": 220, + "height": 25, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 4001, + "version": 13, + "versionNonce": 612112886, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Diagram 1 — Flyte 2 System Architecture", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Diagram 1 — Flyte 2 System Architecture", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmb", + "roundness": null + }, + { + "id": "legend-subtitle", + "type": "text", + "x": 60, + "y": 748, + "width": 800, + "height": 22, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 4002, + "version": 13, + "versionNonce": 73607274, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 13, + "fontFamily": 1, + "text": "Solid arrows = gRPC / K8s API • Orange arrows = object storage (S3/GCS/Azure) • Dashed = proxied access", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Solid arrows = gRPC / K8s API • Orange arrows = object storage (S3/GCS/Azure) • Dashed = proxied access", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmc", + "roundness": null + }, + { + "id": "scaling-note-0-title", + "type": "text", + "x": 55, + "y": 835, + "width": 530, + "height": 22, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5100, + "version": 13, + "versionNonce": 1158769462, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Runs Service", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Runs Service", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmd", + "roundness": null + }, + { + "id": "scaling-note-0-body", + "type": "text", + "x": 55, + "y": 857, + "width": 530, + "height": 44, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5101, + "version": 13, + "versionNonce": 1601604394, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 13, + "fontFamily": 1, + "text": "Stateless Go microservice; scales horizontally behind a gRPC load balancer.\nStreams updates via Postgres LISTEN/NOTIFY → WatchRunDetails server-streams.", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Stateless Go microservice; scales horizontally behind a gRPC load balancer.\nStreams updates via Postgres LISTEN/NOTIFY → WatchRunDetails server-streams.", + "autoResize": true, + "lineHeight": 1.25, + "index": "bme", + "roundness": null + }, + { + "id": "scaling-note-1-title", + "type": "text", + "x": 600, + "y": 835, + "width": 530, + "height": 22, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5102, + "version": 13, + "versionNonce": 1634374774, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Actions Service", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Actions Service", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmf", + "roundness": null + }, + { + "id": "scaling-note-1-body", + "type": "text", + "x": 600, + "y": 857, + "width": 530, + "height": 44, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5103, + "version": 13, + "versionNonce": 797939178, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 13, + "fontFamily": 1, + "text": "Writes one TaskAction CRD per action; partitioned by action ID for locality.\nUnified service replaces legacy QueueService + StateService (feature-flagged).", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Writes one TaskAction CRD per action; partitioned by action ID for locality.\nUnified service replaces legacy QueueService + StateService (feature-flagged).", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmg", + "roundness": null + }, + { + "id": "scaling-note-2-title", + "type": "text", + "x": 55, + "y": 905, + "width": 530, + "height": 22, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5104, + "version": 13, + "versionNonce": 55350710, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Executor (K8s controller)", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Executor (K8s controller)", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmh", + "roundness": null + }, + { + "id": "scaling-note-2-body", + "type": "text", + "x": 55, + "y": 927, + "width": 530, + "height": 64, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5105, + "version": 13, + "versionNonce": 364464298, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 13, + "fontFamily": 1, + "text": "Watches TaskAction CRDs via K8s informers (no polling).\nHorizontally scaled via leader election; each replica owns a shard of CRDs.\nPlugins (Pod, Spark, Ray, Dask, ...) translate TaskAction → native K8s resources.", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Watches TaskAction CRDs via K8s informers (no polling).\nHorizontally scaled via leader election; each replica owns a shard of CRDs.\nPlugins (Pod, Spark, Ray, Dask, ...) translate TaskAction → native K8s resources.", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmi", + "roundness": null + }, + { + "id": "scaling-note-3-title", + "type": "text", + "x": 600, + "y": 905, + "width": 530, + "height": 22, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5106, + "version": 13, + "versionNonce": 870084342, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "DataProxy", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "DataProxy", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmj", + "roundness": null + }, + { + "id": "scaling-note-3-body", + "type": "text", + "x": 600, + "y": 927, + "width": 530, + "height": 44, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5107, + "version": 13, + "versionNonce": 1503568746, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 13, + "fontFamily": 1, + "text": "Stateless; issues signed URLs so pods and SDK read/write Object Storage directly —\nno data passes through the service (keeps the hot path off the control plane).", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Stateless; issues signed URLs so pods and SDK read/write Object Storage directly —\nno data passes through the service (keeps the hot path off the control plane).", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmk", + "roundness": null + }, + { + "id": "scaling-note-4-title", + "type": "text", + "x": 55, + "y": 975, + "width": 530, + "height": 22, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5108, + "version": 13, + "versionNonce": 262086710, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Cache Service", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Cache Service", + "autoResize": true, + "lineHeight": 1.25, + "index": "bml", + "roundness": null + }, + { + "id": "scaling-note-4-body", + "type": "text", + "x": 55, + "y": 997, + "width": 530, + "height": 44, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5109, + "version": 13, + "versionNonce": 361408042, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 13, + "fontFamily": 1, + "text": "Deterministic key (task sig + input literals); pg-backed.\nReservations prevent duplicate concurrent runs; TTL-bounded entries.", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Deterministic key (task sig + input literals); pg-backed.\nReservations prevent duplicate concurrent runs; TTL-bounded entries.", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmm", + "roundness": null + }, + { + "id": "scaling-note-5-title", + "type": "text", + "x": 600, + "y": 975, + "width": 530, + "height": 22, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5110, + "version": 13, + "versionNonce": 1517922678, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "PostgreSQL", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "PostgreSQL", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmn", + "roundness": null + }, + { + "id": "scaling-note-5-body", + "type": "text", + "x": 600, + "y": 997, + "width": 530, + "height": 44, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5111, + "version": 13, + "versionNonce": 1651003626, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 13, + "fontFamily": 1, + "text": "Single source of truth; run via HA replication for prod.\nJSONB columns for serialized specs; indexed by (org, project, domain, name).", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Single source of truth; run via HA replication for prod.\nJSONB columns for serialized specs; indexed by (org, project, domain, name).", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmo", + "roundness": null + }, + { + "id": "scaling-note-6-title", + "type": "text", + "x": 55, + "y": 1045, + "width": 530, + "height": 22, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5112, + "version": 13, + "versionNonce": 330369718, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Object Storage", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Object Storage", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmp", + "roundness": null + }, + { + "id": "scaling-note-6-body", + "type": "text", + "x": 55, + "y": 1067, + "width": 530, + "height": 44, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5113, + "version": 13, + "versionNonce": 63087530, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 13, + "fontFamily": 1, + "text": "S3 / GCS / Azure / RustFS. Signed URLs + direct pod I/O avoid proxy bottlenecks.\nCode bundles and task inputs/outputs live here; CDN/multi-region for global reach.", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "S3 / GCS / Azure / RustFS. Signed URLs + direct pod I/O avoid proxy bottlenecks.\nCode bundles and task inputs/outputs live here; CDN/multi-region for global reach.", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmq", + "roundness": null + }, + { + "id": "scaling-note-7-title", + "type": "text", + "x": 600, + "y": 1045, + "width": 530, + "height": 22, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5114, + "version": 13, + "versionNonce": 166347766, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Task Pod (+ Copilot)", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Task Pod (+ Copilot)", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmr", + "roundness": null + }, + { + "id": "scaling-note-7-body", + "type": "text", + "x": 600, + "y": 1067, + "width": 530, + "height": 44, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5115, + "version": 13, + "versionNonce": 331652714, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 13, + "fontFamily": 1, + "text": "Ephemeral. User container embeds flyte SDK → ControllerClient submits child actions\nto ActionsService.Enqueue directly (bypasses RunService hot path, enabling fanout).", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Ephemeral. User container embeds flyte SDK → ControllerClient submits child actions\nto ActionsService.Enqueue directly (bypasses RunService hot path, enabling fanout).", + "autoResize": true, + "lineHeight": 1.25, + "index": "bms", + "roundness": null + }, + { + "id": "scaling-title", + "type": "text", + "x": 55, + "y": 800, + "width": 400, + "height": 28, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 5002, + "version": 13, + "versionNonce": 1865045302, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "Scalability & Performance Notes", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Scalability & Performance Notes", + "autoResize": true, + "lineHeight": 1.25, + "index": "bmt", + "roundness": null + }, + { + "type": "rectangle", + "id": "k8s_2zsz459gfc3", + "x": 14.740375976562497, + "y": 1257.2136686197916, + "width": 1160, + "height": 465, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 55180, + "version": 29, + "versionNonce": 792281386, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "bmu", + "angle": 0 + }, + { + "type": "text", + "id": "k8s_icpsnvrob2", + "x": 26.740375976562497, + "y": 1267.2136686197916, + "width": 260, + "height": 28, + "text": "☸ Kubernetes Cluster", + "originalText": "☸ Kubernetes Cluster", + "fontSize": 18, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 22158, + "version": 29, + "versionNonce": 1825980022, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "bmv", + "angle": 0 + }, + { + "version": 174, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_0bbfezxqm0nw", + "x": 38.955793108258945, + "y": 1635.3909621465775, + "width": 1100, + "height": 32, + "text": "Diagram 2 — Executor: TaskAction CRD Creation & Event Flow", + "originalText": "Diagram 2 — Executor: TaskAction CRD Creation & Event Flow", + "fontSize": 22, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "seed": 20060, + "versionNonce": 562793450, + "boundElements": [], + "index": "bmw", + "angle": 0, + "roundness": null + }, + { + "version": 81, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 2, + "fillStyle": "solid", + "type": "rectangle", + "id": "nd_nu6cyashtzj", + "x": 44.7415771484375, + "y": 1407.212381998698, + "width": 170, + "height": 80, + "strokeColor": "#7950f2", + "backgroundColor": "#d0bfff", + "roundness": { + "type": 3 + }, + "seed": 49467, + "versionNonce": 934477750, + "boundElements": [ + { + "type": "text", + "id": "nd_uu3zudc3yds" + } + ], + "index": "bmx", + "angle": 0 + }, + { + "version": 82, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_uu3zudc3yds", + "x": 49.7415771484375, + "y": 1428.462381998698, + "width": 160, + "height": 37.5, + "text": "Executor\n(K8s controller)", + "originalText": "Executor\n(K8s controller)", + "fontSize": 15, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_nu6cyashtzj", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "seed": 29124, + "versionNonce": 281444010, + "boundElements": [], + "index": "bmy", + "angle": 0, + "roundness": null + }, + { + "version": 28, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 2, + "fillStyle": "solid", + "type": "rectangle", + "id": "nd_taskaction_stack_b", + "x": 358.7415771484375, + "y": 1393.212381998698, + "width": 180, + "height": 80, + "strokeColor": "#fd7e14", + "backgroundColor": "#ffd8a8", + "roundness": { + "type": 3 + }, + "seed": 60388, + "versionNonce": 602249462, + "boundElements": [], + "index": "bmz", + "angle": 0 + }, + { + "version": 28, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 2, + "fillStyle": "solid", + "type": "rectangle", + "id": "nd_taskaction_stack_a", + "x": 351.7415771484375, + "y": 1400.212381998698, + "width": 180, + "height": 80, + "strokeColor": "#fd7e14", + "backgroundColor": "#ffd8a8", + "roundness": { + "type": 3 + }, + "seed": 60389, + "versionNonce": 697637226, + "boundElements": [], + "index": "bn0", + "angle": 0 + }, + { + "version": 81, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 2, + "fillStyle": "solid", + "type": "rectangle", + "id": "nd_x7dfl5zomj", + "x": 344.7415771484375, + "y": 1407.212381998698, + "width": 180, + "height": 80, + "strokeColor": "#fd7e14", + "backgroundColor": "#ffd8a8", + "roundness": { + "type": 3 + }, + "seed": 60387, + "versionNonce": 955451958, + "boundElements": [ + { + "type": "text", + "id": "nd_hu5e5zaoivl" + }, + { + "id": "nd_9hqg5ovlbi", + "type": "arrow" + } + ], + "index": "bn1", + "angle": 0 + }, + { + "version": 82, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_hu5e5zaoivl", + "x": 349.7415771484375, + "y": 1428.462381998698, + "width": 170, + "height": 37.5, + "text": "TaskAction CRD\n(1 per task action)", + "originalText": "TaskAction CRD\n(1 per task action)", + "fontSize": 15, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_x7dfl5zomj", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "seed": 23068, + "versionNonce": 1262640170, + "boundElements": [], + "index": "bn2", + "angle": 0, + "roundness": null + }, + { + "version": 81, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 2, + "fillStyle": "solid", + "type": "arrow", + "id": "nd_ifus8zawm", + "x": 214.7415771484375, + "y": 1447.212381998698, + "width": 130, + "height": 0, + "points": [ + [ + 0, + 0 + ], + [ + 130, + 0 + ] + ], + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "seed": 77634, + "versionNonce": 1170232182, + "roundness": { + "type": 2 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_nu6cyashtzj", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "endBinding": { + "elementId": "nd_x7dfl5zomj", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_jwaor4zhg5i" + } + ], + "index": "bn3", + "lastCommittedPoint": null, + "angle": 0 + }, + { + "version": 13, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_jwaor4zhg5i", + "x": 231.2925567626953, + "y": 1256.25, + "width": 107.41488647460938, + "height": 27.5, + "text": "creates N TaskAction\nCRDs (fanout)", + "originalText": "creates N TaskAction\nCRDs (fanout)", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_ifus8zawm", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#fd7e14", + "backgroundColor": "transparent", + "seed": 90891, + "versionNonce": 867780330, + "boundElements": [], + "index": "bn4", + "angle": 0, + "roundness": null + }, + { + "version": 66, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 2, + "fillStyle": "solid", + "type": "rectangle", + "id": "nd_k81cfqso2s", + "x": 664.7415771484375, + "y": 1287.212381998698, + "width": 190, + "height": 80, + "strokeColor": "#2f9e44", + "backgroundColor": "#b2f2bb", + "roundness": { + "type": 3 + }, + "seed": 52452, + "versionNonce": 1955755190, + "boundElements": [ + { + "type": "text", + "id": "nd_2ipxgvibr0o" + }, + { + "id": "nd_9hqg5ovlbi", + "type": "arrow" + } + ], + "index": "bn5", + "angle": 0 + }, + { + "version": 65, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_2ipxgvibr0o", + "x": 669.7415771484375, + "y": 1308.462381998698, + "width": 180, + "height": 37.5, + "text": "Python Task\n(1 Pod)", + "originalText": "Python Task\n(1 Pod)", + "fontSize": 15, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_k81cfqso2s", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "seed": 72369, + "versionNonce": 730126762, + "boundElements": [], + "index": "bn6", + "angle": 0, + "roundness": null + }, + { + "version": 83, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 2, + "fillStyle": "solid", + "type": "arrow", + "id": "nd_9hqg5ovlbi", + "x": 527.6336565940808, + "y": 1412.9285925849538, + "width": 135.11818751822227, + "height": 49.889723410875376, + "points": [ + [ + 0, + 0 + ], + [ + 135.11818751822227, + -49.889723410875376 + ] + ], + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "seed": 64181, + "versionNonce": 1594781174, + "roundness": { + "type": 2 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_x7dfl5zomj", + "mode": "orbit", + "fixedPoint": [ + 0.500100696584518, + 0.5001006965845193 + ] + }, + "endBinding": { + "elementId": "nd_k81cfqso2s", + "mode": "orbit", + "fixedPoint": [ + 0.4984767329096533, + 0.5015232670903458 + ] + }, + "elbowed": false, + "boundElements": [], + "index": "bn7", + "moveMidPointsWithElement": false, + "lastCommittedPoint": null, + "angle": 0 + }, + { + "version": 64, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "rectangle", + "id": "nd_cb1r0ok8jj8", + "x": 884.7415771484375, + "y": 1307.212381998698, + "width": 100, + "height": 40, + "strokeColor": "#868e96", + "backgroundColor": "#f8f9fa", + "roundness": { + "type": 3 + }, + "seed": 33812, + "versionNonce": 835720298, + "boundElements": [ + { + "type": "text", + "id": "nd_jt32s7a4sks" + } + ], + "index": "bn8", + "angle": 0 + }, + { + "version": 64, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_jt32s7a4sks", + "x": 889.7415771484375, + "y": 1317.212381998698, + "width": 90, + "height": 20, + "text": "Pod", + "originalText": "Pod", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_cb1r0ok8jj8", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "seed": 88081, + "versionNonce": 574177078, + "boundElements": [], + "index": "bn9", + "angle": 0, + "roundness": null + }, + { + "version": 81, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "arrow", + "id": "nd_i8ukws7sycr", + "x": 854.7415771484375, + "y": 1327.212381998698, + "width": 30, + "height": 0, + "points": [ + [ + 0, + 0 + ], + [ + 30, + 0 + ] + ], + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "seed": 65732, + "versionNonce": 677771050, + "roundness": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": null, + "endBinding": null, + "elbowed": false, + "boundElements": [], + "index": "bnA", + "lastCommittedPoint": null, + "angle": 0 + }, + { + "version": 81, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 2, + "fillStyle": "solid", + "type": "rectangle", + "id": "nd_4eve3xt2rn9", + "x": 664.7415771484375, + "y": 1537.212381998698, + "width": 190, + "height": 80, + "strokeColor": "#1971c2", + "backgroundColor": "#a5d8ff", + "roundness": { + "type": 3 + }, + "seed": 63575, + "versionNonce": 1920460918, + "boundElements": [ + { + "type": "text", + "id": "nd_gace3jwt0wu" + } + ], + "index": "bnB", + "angle": 0 + }, + { + "version": 82, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_gace3jwt0wu", + "x": 669.7415771484375, + "y": 1558.462381998698, + "width": 180, + "height": 37.5, + "text": "Ray / Spark Task\n(Multiple Pods)", + "originalText": "Ray / Spark Task\n(Multiple Pods)", + "fontSize": 15, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_4eve3xt2rn9", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "seed": 27257, + "versionNonce": 2142339562, + "boundElements": [], + "index": "bnC", + "angle": 0, + "roundness": null + }, + { + "version": 81, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 2, + "fillStyle": "solid", + "type": "arrow", + "id": "nd_b6p4c5f1l1", + "x": 524.7415771484375, + "y": 1467.212381998698, + "width": 140, + "height": 110, + "points": [ + [ + 0, + 0 + ], + [ + 140, + 110 + ] + ], + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "seed": 79781, + "versionNonce": 797927862, + "roundness": { + "type": 2 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_x7dfl5zomj", + "mode": "orbit", + "fixedPoint": [ + 0.6347135038349355, + 0.3652864961650664 + ] + }, + "endBinding": { + "elementId": "nd_4eve3xt2rn9", + "mode": "orbit", + "fixedPoint": [ + 0.21345503078632586, + 0.7865449692136763 + ] + }, + "elbowed": false, + "boundElements": [], + "index": "bnD", + "lastCommittedPoint": null, + "angle": 0 + }, + { + "version": 81, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "rectangle", + "id": "nd_u4q09ir7x09", + "x": 884.7415771484375, + "y": 1527.212381998698, + "width": 115, + "height": 35, + "strokeColor": "#868e96", + "backgroundColor": "#f8f9fa", + "roundness": { + "type": 3 + }, + "seed": 18015, + "versionNonce": 1656599722, + "boundElements": [ + { + "type": "text", + "id": "nd_3hxu7bvbtnk" + } + ], + "index": "bnE", + "angle": 0 + }, + { + "version": 82, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_3hxu7bvbtnk", + "x": 889.7415771484375, + "y": 1537.837381998698, + "width": 105, + "height": 13.75, + "text": "Driver Pod", + "originalText": "Driver Pod", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_u4q09ir7x09", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "seed": 65095, + "versionNonce": 2024063734, + "boundElements": [], + "index": "bnF", + "angle": 0, + "roundness": null + }, + { + "version": 81, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "arrow", + "id": "nd_z9ht9wu4qlk", + "x": 854.7415771484375, + "y": 1577.212381998698, + "width": 30, + "height": 32.5, + "points": [ + [ + 0, + 0 + ], + [ + 30, + -32.5 + ] + ], + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "seed": 48402, + "versionNonce": 1664454506, + "roundness": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": null, + "endBinding": null, + "elbowed": false, + "boundElements": [], + "index": "bnG", + "lastCommittedPoint": null, + "angle": 0 + }, + { + "version": 81, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "rectangle", + "id": "nd_rvy66eyo9cd", + "x": 884.7415771484375, + "y": 1572.212381998698, + "width": 115, + "height": 35, + "strokeColor": "#868e96", + "backgroundColor": "#f8f9fa", + "roundness": { + "type": 3 + }, + "seed": 52747, + "versionNonce": 1077736502, + "boundElements": [ + { + "type": "text", + "id": "nd_9qg0ortjo54" + } + ], + "index": "bnH", + "angle": 0 + }, + { + "version": 82, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_9qg0ortjo54", + "x": 889.7415771484375, + "y": 1582.837381998698, + "width": 105, + "height": 13.75, + "text": "Worker Pod 1", + "originalText": "Worker Pod 1", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_rvy66eyo9cd", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "seed": 5539, + "versionNonce": 627315242, + "boundElements": [], + "index": "bnI", + "angle": 0, + "roundness": null + }, + { + "version": 81, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "arrow", + "id": "nd_ar2igrl2qgl", + "x": 854.7415771484375, + "y": 1577.212381998698, + "width": 30, + "height": 12.5, + "points": [ + [ + 0, + 0 + ], + [ + 30, + 12.5 + ] + ], + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "seed": 44747, + "versionNonce": 1614609782, + "roundness": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": null, + "endBinding": null, + "elbowed": false, + "boundElements": [], + "index": "bnJ", + "lastCommittedPoint": null, + "angle": 0 + }, + { + "version": 81, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "rectangle", + "id": "nd_wz1mq4xiark", + "x": 884.7415771484375, + "y": 1617.212381998698, + "width": 115, + "height": 35, + "strokeColor": "#868e96", + "backgroundColor": "#f8f9fa", + "roundness": { + "type": 3 + }, + "seed": 66832, + "versionNonce": 204750058, + "boundElements": [ + { + "type": "text", + "id": "nd_avt8bj8yh6h" + } + ], + "index": "bnK", + "angle": 0 + }, + { + "version": 82, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_avt8bj8yh6h", + "x": 889.7415771484375, + "y": 1627.837381998698, + "width": 105, + "height": 13.75, + "text": "Worker Pod 2", + "originalText": "Worker Pod 2", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_wz1mq4xiark", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "seed": 56282, + "versionNonce": 770301622, + "boundElements": [], + "index": "bnL", + "angle": 0, + "roundness": null + }, + { + "version": 81, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "arrow", + "id": "nd_4r201ehrn9d", + "x": 854.7415771484375, + "y": 1577.212381998698, + "width": 30, + "height": 57.5, + "points": [ + [ + 0, + 0 + ], + [ + 30, + 57.5 + ] + ], + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "seed": 50539, + "versionNonce": 1697714090, + "roundness": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": null, + "endBinding": null, + "elbowed": false, + "boundElements": [], + "index": "bnM", + "lastCommittedPoint": null, + "angle": 0 + }, + { + "version": 82, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_1o9tppnr7ij", + "x": 44.7415771484375, + "y": 1677.212381998698, + "width": 550.5235595703125, + "height": 15, + "text": "Green = Python task (1 pod) • Blue = Ray/Spark task (multiple pods: 1 driver + N workers) • Stacked orange cards = one TaskAction CRD per task action", + "originalText": "Green = Python task (1 pod) • Blue = Ray/Spark task (multiple pods: 1 driver + N workers) • Stacked orange cards = one TaskAction CRD per task action", + "fontSize": 12, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "seed": 36463, + "versionNonce": 233347062, + "boundElements": [], + "index": "bnN", + "angle": 0, + "roundness": null + }, + { + "version": 28, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "rectangle", + "id": "nd_crd_details_box", + "x": 44.7415771484375, + "y": 1713.0936686197917, + "width": 1100, + "height": 230, + "strokeColor": "#fd7e14", + "backgroundColor": "#fff4e6", + "roundness": { + "type": 3 + }, + "seed": 70001, + "versionNonce": 344296042, + "boundElements": [], + "index": "bnO", + "angle": 0 + }, + { + "version": 28, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_crd_details_title", + "x": 60.0103759765625, + "y": 1725.0936686197917, + "width": 600, + "height": 28, + "text": "TaskAction CRD — Key Fields (apiVersion: flyte.ai/v1alpha1, kind: TaskAction)", + "originalText": "TaskAction CRD — Key Fields (apiVersion: flyte.ai/v1alpha1, kind: TaskAction)", + "fontSize": 18, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "seed": 70002, + "versionNonce": 138291510, + "boundElements": [], + "index": "bnP", + "angle": 0, + "roundness": null + }, + { + "version": 28, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_crd_details_meta", + "x": 60.0103759765625, + "y": 1763.0936686197917, + "width": 340, + "height": 160, + "text": "metadata:\n name: (unique per task action)\n namespace: -\n labels:\n run-id, org, project, domain\n parent-action-id\n ownerReferences: parent Run", + "originalText": "metadata:\n name: (unique per task action)\n namespace: -\n labels:\n run-id, org, project, domain\n parent-action-id\n ownerReferences: parent Run", + "fontSize": 13, + "fontFamily": 3, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "seed": 70003, + "versionNonce": 1090301226, + "boundElements": [], + "index": "bnQ", + "angle": 0, + "roundness": null + }, + { + "version": 28, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_crd_details_spec", + "x": 410.0103759765625, + "y": 1763.0936686197917, + "width": 380, + "height": 180, + "text": "spec:\n taskType: python | ray | spark | ...\n image, command, args, env\n resources: cpu/mem/gpu, accelerator\n inputsUri: s3://.../inputs.pb\n outputPrefix: s3://.../outputs/\n retries, timeout, interruptible\n serviceAccount, secrets[]\n cachePolicy: { key, version, ttl }\n pluginConfig: { ...type-specific... }", + "originalText": "spec:\n taskType: python | ray | spark | ...\n image, command, args, env\n resources: cpu/mem/gpu, accelerator\n inputsUri: s3://.../inputs.pb\n outputPrefix: s3://.../outputs/\n retries, timeout, interruptible\n serviceAccount, secrets[]\n cachePolicy: { key, version, ttl }\n pluginConfig: { ...type-specific... }", + "fontSize": 13, + "fontFamily": 3, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "seed": 70004, + "versionNonce": 1548718710, + "boundElements": [], + "index": "bnR", + "angle": 0, + "roundness": null + }, + { + "version": 28, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_crd_details_status", + "x": 800.0103759765625, + "y": 1763.0936686197917, + "width": 340, + "height": 180, + "text": "status:\n phase: Queued | Running |\n Succeeded | Failed | Aborted\n podName / childResourceRefs\n startedAt, finishedAt, attempt\n outputsUri: s3://.../outputs.pb\n cacheHit: bool\n error: { code, message, kind }\n message: last reconciliation info", + "originalText": "status:\n phase: Queued | Running |\n Succeeded | Failed | Aborted\n podName / childResourceRefs\n startedAt, finishedAt, attempt\n outputsUri: s3://.../outputs.pb\n cacheHit: bool\n error: { code, message, kind }\n message: last reconciliation info", + "fontSize": 13, + "fontFamily": 3, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "seed": 70005, + "versionNonce": 96234, + "boundElements": [], + "index": "bnS", + "angle": 0, + "roundness": null + }, + { + "version": 28, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 2, + "fillStyle": "solid", + "type": "rectangle", + "id": "nd_events_svc_2", + "x": 44.7415771484375, + "y": 1267.212381998698, + "width": 170, + "height": 70, + "strokeColor": "#7048e8", + "backgroundColor": "#d0bfff", + "roundness": { + "type": 3 + }, + "seed": 80011, + "versionNonce": 350344118, + "boundElements": [ + { + "type": "text", + "id": "nd_events_svc_2_text" + }, + { + "type": "arrow", + "id": "nd_executor_events_arrow" + } + ], + "index": "bnT", + "angle": 0 + }, + { + "version": 28, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_events_svc_2_text", + "x": 49.7415771484375, + "y": 1288.462381998698, + "width": 160, + "height": 27.5, + "text": "Events Service", + "originalText": "Events Service", + "fontSize": 15, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_events_svc_2", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "seed": 80012, + "versionNonce": 27191978, + "boundElements": [], + "index": "bnU", + "angle": 0, + "roundness": null + }, + { + "version": 28, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 2, + "fillStyle": "solid", + "type": "arrow", + "id": "nd_executor_events_arrow", + "x": 129.7415771484375, + "y": 1407.212381998698, + "width": 0, + "height": 70, + "points": [ + [ + 0, + 0 + ], + [ + 0, + -70 + ] + ], + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "seed": 80013, + "versionNonce": 471461110, + "roundness": { + "type": 2 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_nu6cyashtzj", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "endBinding": { + "elementId": "nd_events_svc_2", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_executor_events_label" + } + ], + "index": "bnV", + "lastCommittedPoint": null, + "angle": 0 + }, + { + "version": 11, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_executor_events_label", + "x": 150, + "y": 1318, + "width": 180, + "height": 15, + "text": "1. send ActionUpdate event", + "originalText": "1. send ActionUpdate event", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_executor_events_arrow", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "seed": 80014, + "versionNonce": 1015022954, + "boundElements": [], + "index": "bnW", + "angle": 0, + "roundness": null + }, + { + "version": 28, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_executor_phase_note", + "x": 230.0103759765625, + "y": 1497.0936686197917, + "width": 110, + "height": 15, + "text": "4. patch status.phase", + "originalText": "4. patch status.phase", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "middle", + "containerId": null, + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#fd7e14", + "backgroundColor": "transparent", + "seed": 80015, + "versionNonce": 1333583414, + "boundElements": [], + "index": "bnX", + "angle": 0, + "roundness": null + }, + { + "version": 101, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "rectangle", + "id": "nd_event_ordering_box", + "x": 1078.276890345982, + "y": 1675.9151349748886, + "width": 304.4374302455358, + "height": 210, + "strokeColor": "#7048e8", + "backgroundColor": "#f3f0ff", + "roundness": { + "type": 3 + }, + "seed": 80003, + "versionNonce": 435144746, + "boundElements": [], + "index": "bnY", + "angle": 0 + }, + { + "version": 121, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_event_ordering_title", + "x": 1094.9770188104537, + "y": 1692.3526000976562, + "width": 260, + "height": 22, + "text": "Event-before-status ordering", + "originalText": "Event-before-status ordering", + "fontSize": 14, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "seed": 80004, + "versionNonce": 334473078, + "boundElements": [], + "index": "bnZ", + "angle": 0, + "roundness": null + }, + { + "version": 92, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_event_ordering_body", + "x": 1120.9195033482144, + "y": 1721.4441775367377, + "width": 260, + "height": 100, + "text": "1. Executor sends ActionUpdate\n event to Events Service.\n2. Events Service forwards to\n Runs Service.\n3. Runs Service writes to\n PostgreSQL.\n4. On success → patch CRD\n status.phase.\n On failure → leave CRD\n unchanged; retry on next\n reconcile loop (at-least-once).", + "originalText": "1. Executor sends ActionUpdate\n event to Events Service.\n2. Events Service forwards to\n Runs Service.\n3. Runs Service writes to\n PostgreSQL.\n4. On success → patch CRD\n status.phase.\n On failure → leave CRD\n unchanged; retry on next\n reconcile loop (at-least-once).", + "fontSize": 12, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "seed": 80005, + "versionNonce": 567882474, + "boundElements": [], + "index": "bna", + "angle": 0, + "roundness": null + }, + { + "version": 27, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 2, + "fillStyle": "solid", + "type": "rectangle", + "id": "nd_runs_svc_2", + "x": 270.0103759765625, + "y": 1267.212381998698, + "width": 160, + "height": 70, + "strokeColor": "#7048e8", + "backgroundColor": "#d0bfff", + "roundness": { + "type": 3 + }, + "seed": 81001, + "versionNonce": 1773619382, + "boundElements": [ + { + "type": "text", + "id": "nd_runs_svc_2_text" + }, + { + "type": "arrow", + "id": "nd_events_runs_arrow" + }, + { + "type": "arrow", + "id": "nd_runs_db_arrow" + } + ], + "index": "bnb", + "angle": 0 + }, + { + "version": 27, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_runs_svc_2_text", + "x": 275.0103759765625, + "y": 1288.462381998698, + "width": 150, + "height": 27.5, + "text": "Runs Service", + "originalText": "Runs Service", + "fontSize": 15, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_runs_svc_2", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "seed": 81002, + "versionNonce": 650593706, + "boundElements": [], + "index": "bnc", + "angle": 0, + "roundness": null + }, + { + "version": 27, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 2, + "fillStyle": "solid", + "type": "rectangle", + "id": "nd_db_2", + "x": 485.0103759765625, + "y": 1267.212381998698, + "width": 150, + "height": 70, + "strokeColor": "#1971c2", + "backgroundColor": "#a5d8ff", + "roundness": { + "type": 3 + }, + "seed": 81003, + "versionNonce": 7913974, + "boundElements": [ + { + "type": "text", + "id": "nd_db_2_text" + }, + { + "type": "arrow", + "id": "nd_runs_db_arrow" + } + ], + "index": "bnd", + "angle": 0 + }, + { + "version": 27, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_db_2_text", + "x": 490.0103759765625, + "y": 1288.462381998698, + "width": 140, + "height": 27.5, + "text": "PostgreSQL", + "originalText": "PostgreSQL", + "fontSize": 15, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_db_2", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "seed": 81004, + "versionNonce": 1910833258, + "boundElements": [], + "index": "bne", + "angle": 0, + "roundness": null + }, + { + "version": 27, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 2, + "fillStyle": "solid", + "type": "arrow", + "id": "nd_events_runs_arrow", + "x": 214.7415771484375, + "y": 1302.212381998698, + "width": 55, + "height": 0, + "points": [ + [ + 0, + 0 + ], + [ + 55, + 0 + ] + ], + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "seed": 81005, + "versionNonce": 1262031670, + "roundness": { + "type": 2 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_events_svc_2", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "endBinding": { + "elementId": "nd_runs_svc_2", + "mode": "orbit", + "fixedPoint": [ + 0, + 0.5001 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_events_runs_label" + } + ], + "index": "bnf", + "lastCommittedPoint": null, + "angle": 0 + }, + { + "version": 10, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_events_runs_label", + "x": 228, + "y": 1204, + "width": 60, + "height": 15, + "text": "2. forward", + "originalText": "2. forward", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_events_runs_arrow", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "seed": 81006, + "versionNonce": 1862099754, + "boundElements": [], + "index": "bng", + "angle": 0, + "roundness": null + }, + { + "version": 27, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 2, + "fillStyle": "solid", + "type": "arrow", + "id": "nd_runs_db_arrow", + "x": 430.0103759765625, + "y": 1302.212381998698, + "width": 55, + "height": 0, + "points": [ + [ + 0, + 0 + ], + [ + 55, + 0 + ] + ], + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "seed": 81007, + "versionNonce": 341654646, + "roundness": { + "type": 2 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_runs_svc_2", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "endBinding": { + "elementId": "nd_db_2", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_runs_db_label" + } + ], + "index": "bnh", + "lastCommittedPoint": null, + "angle": 0 + }, + { + "version": 10, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_runs_db_label", + "x": 447, + "y": 1204, + "width": 60, + "height": 15, + "text": "3. write", + "originalText": "3. write", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_runs_db_arrow", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "seed": 81008, + "versionNonce": 1484484074, + "boundElements": [], + "index": "bni", + "angle": 0, + "roundness": null + }, + { + "id": "3dSUVfaNwhzb76b8oUpBf", + "type": "arrow", + "x": 321.72854335203533, + "y": 286, + "width": 85.09847574906223, + "height": 298.14769587441117, + "angle": 0, + "strokeColor": "#1971c2", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bnj", + "roundness": { + "type": 2 + }, + "seed": 1187655456, + "version": 99, + "versionNonce": 296369590, + "isDeleted": false, + "boundElements": [], + "updated": 1777333910976, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 85.09847574906223, + 298.14769587441117 + ] + ], + "startBinding": { + "elementId": "actions", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 1 + ] + }, + "endBinding": { + "elementId": "kubernetes", + "mode": "inside", + "fixedPoint": [ + 0.03413509550548781, + 0.059252798205873855 + ] + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false, + "moveMidPointsWithElement": false + }, + { + "type": "rectangle", + "id": "nd_d3_k8s_box", + "x": 23.4295654296875, + "y": 2121.015625, + "width": 1115, + "height": 290, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 90001, + "version": 91, + "versionNonce": 1667899562, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "bnk", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d3_k8s_label", + "x": 35.4295654296875, + "y": 2129.015625, + "width": 260, + "height": 28, + "text": "☸ Kubernetes Cluster", + "originalText": "☸ Kubernetes Cluster", + "fontSize": 18, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 90002, + "version": 91, + "versionNonce": 2017793782, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "bnl", + "angle": 0 + }, + { + "version": 184, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_d3_title", + "x": 55.81182861328148, + "y": 2084.1562398274737, + "width": 900, + "height": 32, + "text": "Diagram 3 — Actions Service: CRD Watch & Update Notifications", + "originalText": "Diagram 3 — Actions Service: CRD Watch & Update Notifications", + "fontSize": 22, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "seed": 82001, + "versionNonce": 1802795882, + "boundElements": [], + "index": "bnm", + "angle": 0, + "roundness": null + }, + { + "version": 184, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 2, + "fillStyle": "solid", + "type": "rectangle", + "id": "nd_d3_crd_back_b", + "x": 69.08062744140648, + "y": 2160.1562398274737, + "width": 180, + "height": 80, + "strokeColor": "#fd7e14", + "backgroundColor": "#ffd8a8", + "roundness": { + "type": 3 + }, + "seed": 82002, + "versionNonce": 280152118, + "boundElements": [], + "index": "bnn", + "angle": 0 + }, + { + "version": 184, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 2, + "fillStyle": "solid", + "type": "rectangle", + "id": "nd_d3_crd_back_a", + "x": 62.08062744140648, + "y": 2167.1562398274737, + "width": 180, + "height": 80, + "strokeColor": "#fd7e14", + "backgroundColor": "#ffd8a8", + "roundness": { + "type": 3 + }, + "seed": 82003, + "versionNonce": 518356522, + "boundElements": [], + "index": "bno", + "angle": 0 + }, + { + "version": 184, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 2, + "fillStyle": "solid", + "type": "rectangle", + "id": "nd_d3_crd", + "x": 55.81182861328148, + "y": 2174.1562398274737, + "width": 180, + "height": 80, + "strokeColor": "#fd7e14", + "backgroundColor": "#ffd8a8", + "roundness": { + "type": 3 + }, + "seed": 82004, + "versionNonce": 1255690614, + "boundElements": [ + { + "type": "text", + "id": "nd_d3_crd_text" + }, + { + "id": "nd_d3_crd_arrow", + "type": "arrow" + } + ], + "index": "bnp", + "angle": 0 + }, + { + "version": 268, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_d3_crd_text", + "x": 60.81182861328148, + "y": 2195.4062398274737, + "width": 170, + "height": 37.5, + "text": "TaskAction CRDs\n(in etcd)", + "originalText": "TaskAction CRDs\n(in etcd)", + "fontSize": 15, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d3_crd", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "seed": 82005, + "versionNonce": 715663594, + "boundElements": [], + "index": "bnq", + "angle": 0, + "roundness": null + }, + { + "version": 189, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 2, + "fillStyle": "solid", + "type": "rectangle", + "id": "nd_d3_actions", + "x": 298.62745496961804, + "y": 2136.015625, + "width": 580, + "height": 190, + "strokeColor": "#7048e8", + "backgroundColor": "#e5dbff", + "roundness": { + "type": 3 + }, + "seed": 82006, + "versionNonce": 1375384246, + "boundElements": [ + { + "type": "text", + "id": "nd_d3_actions_text" + }, + { + "id": "nd_d3_crd_arrow", + "type": "arrow" + } + ], + "index": "bnr", + "angle": 0 + }, + { + "version": 269, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_d3_actions_text", + "x": 308.62745496961804, + "y": 2143.015625, + "width": 200, + "height": 22, + "text": "Actions Service", + "originalText": "Actions Service", + "fontSize": 15, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": "nd_d3_actions", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "seed": 82007, + "versionNonce": 1715960746, + "boundElements": [], + "index": "bns", + "angle": 0, + "roundness": null + }, + { + "version": 203, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 2, + "fillStyle": "solid", + "type": "arrow", + "id": "nd_d3_crd_arrow", + "x": 241.81182861328148, + "y": 2224.7616119741665, + "width": 50.815626356336566, + "height": 5.610553055420496, + "points": [ + [ + 0, + 0 + ], + [ + 50.815626356336566, + 5.610553055420496 + ] + ], + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "seed": 82008, + "versionNonce": 549383158, + "roundness": { + "type": 2 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d3_crd", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "endBinding": { + "elementId": "nd_d3_actions", + "mode": "orbit", + "fixedPoint": [ + 0, + 0.5001 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d3_crd_arrow_label" + } + ], + "index": "bnt", + "lastCommittedPoint": null, + "angle": 0, + "moveMidPointsWithElement": false + }, + { + "version": 96, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_d3_crd_arrow_label", + "x": 247.2802505493164, + "y": 2076.25, + "width": 99.90190124511719, + "height": 27.5, + "text": "watch ADDED /\nMODIFIED events", + "originalText": "watch ADDED /\nMODIFIED events", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d3_crd_arrow", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "seed": 82009, + "versionNonce": 2146334314, + "boundElements": [], + "index": "bnu", + "angle": 0, + "roundness": null + }, + { + "version": 184, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 2, + "fillStyle": "solid", + "type": "rectangle", + "id": "nd_d3_runs", + "x": 928.4295654296875, + "y": 2104.1562398274737, + "width": 190, + "height": 80, + "strokeColor": "#7048e8", + "backgroundColor": "#d0bfff", + "roundness": { + "type": 3 + }, + "seed": 82010, + "versionNonce": 355073334, + "boundElements": [ + { + "type": "text", + "id": "nd_d3_runs_text" + }, + { + "id": "nd_d3_actions_runs_arrow", + "type": "arrow" + } + ], + "index": "bnv", + "angle": 0 + }, + { + "version": 268, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_d3_runs_text", + "x": 933.4295654296875, + "y": 2125.4062398274737, + "width": 180, + "height": 37.5, + "text": "Runs Service\n(UI / CLI streams)", + "originalText": "Runs Service\n(UI / CLI streams)", + "fontSize": 15, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d3_runs", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "seed": 82011, + "versionNonce": 677910826, + "boundElements": [], + "index": "bnw", + "angle": 0, + "roundness": null + }, + { + "version": 96, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_d3_actions_runs_label", + "x": 590.3680725097656, + "y": 2024.375, + "width": 99.26385498046875, + "height": 41.25, + "text": "UpdateActionStatus /\nRecordAction", + "originalText": "UpdateActionStatus /\nRecordAction", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d3_actions_runs_arrow", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "seed": 82013, + "versionNonce": 77653622, + "boundElements": [], + "index": "bnx", + "angle": 0, + "roundness": null + }, + { + "version": 184, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 2, + "fillStyle": "solid", + "type": "rectangle", + "id": "nd_d3_sdk", + "x": 928.4295654296875, + "y": 2244.1562398274737, + "width": 190, + "height": 80, + "strokeColor": "#2f9e44", + "backgroundColor": "#b2f2bb", + "roundness": { + "type": 3 + }, + "seed": 82014, + "versionNonce": 1059021802, + "boundElements": [ + { + "type": "text", + "id": "nd_d3_sdk_text" + }, + { + "id": "nd_d3_actions_sdk_arrow", + "type": "arrow" + } + ], + "index": "bny", + "angle": 0 + }, + { + "version": 268, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_d3_sdk_text", + "x": 933.4295654296875, + "y": 2265.4062398274737, + "width": 180, + "height": 37.5, + "text": "Task Container\n(SDK ControllerClient)", + "originalText": "Task Container\n(SDK ControllerClient)", + "fontSize": 15, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d3_sdk", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "seed": 82015, + "versionNonce": 1340647350, + "boundElements": [], + "index": "bnz", + "angle": 0, + "roundness": null + }, + { + "version": 96, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_d3_actions_sdk_label", + "x": 590.2525634765625, + "y": 2107.5, + "width": 99.494873046875, + "height": 55, + "text": "notify child action\nupdates\n(WatchForUpdates\ngRPC stream)", + "originalText": "notify child action updates\n(WatchForUpdates gRPC stream)", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d3_actions_sdk_arrow", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "seed": 82017, + "versionNonce": 2115983018, + "boundElements": [], + "index": "bo0", + "angle": 0, + "roundness": null + }, + { + "version": 191, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 1, + "fillStyle": "solid", + "type": "text", + "id": "nd_d3_legend", + "x": 55.81182861328148, + "y": 2354.1562398274737, + "width": 1159.9188232421875, + "height": 45, + "text": "Actions Service runs a K8s informer on TaskAction CRDs; events are drained by a pool of 10 concurrent workers, each reconciling one CRD at a time.\nBefore calling Runs Service RecordAction, workers consult an OppoBloomFilter keyed by actionID to dedupe duplicate events across watch reconnects; successful records are added to the filter.\nWorkers then call Runs Service UpdateActionStatus / RecordAction to persist updates, and push WatchForUpdates gRPC streams to Task Containers (SDK parent/child coordination).", + "originalText": "Actions Service runs a K8s informer on TaskAction CRDs; events are drained by a pool of 10 concurrent workers, each reconciling one CRD at a time.\nBefore calling Runs Service RecordAction, workers consult an OppoBloomFilter keyed by actionID to dedupe duplicate events across watch reconnects; successful records are added to the filter.\nWorkers then call Runs Service UpdateActionStatus / RecordAction to persist updates, and push WatchForUpdates gRPC streams to Task Containers (SDK parent/child coordination).", + "fontSize": 12, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "seed": 82018, + "versionNonce": 1998995702, + "boundElements": [], + "index": "bo1", + "angle": 0, + "roundness": null + }, + { + "type": "rectangle", + "id": "nd_d3_informer", + "x": 313.4295654296875, + "y": 2181.015625, + "width": 100, + "height": 60, + "strokeColor": "#7048e8", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 91001, + "version": 90, + "versionNonce": 638775658, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d3_informer_text" + } + ], + "index": "bo2", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d3_informer_text", + "x": 318.4295654296875, + "y": 2192.265625, + "width": 90, + "height": 37.5, + "text": "Informer\n(watch)", + "originalText": "Informer\n(watch)", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d3_informer", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 91002, + "version": 90, + "versionNonce": 769569334, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "bo3", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d3_informer_ch_arrow", + "x": 413.4295654296875, + "y": 2211.015625, + "width": 30, + "height": 0, + "points": [ + [ + 0, + 0 + ], + [ + 30, + 0 + ] + ], + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 91003, + "version": 90, + "versionNonce": 709178410, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d3_informer", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "endBinding": { + "elementId": "nd_d3_channel", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "elbowed": false, + "boundElements": [], + "index": "bo4", + "angle": 0, + "lastCommittedPoint": null + }, + { + "type": "rectangle", + "id": "nd_d3_channel", + "x": 443.4295654296875, + "y": 2186.015625, + "width": 130, + "height": 50, + "strokeColor": "#0ca678", + "backgroundColor": "#c3fae8", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 91004, + "version": 90, + "versionNonce": 1861679990, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d3_channel_text" + } + ], + "index": "bo5", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d3_channel_text", + "x": 448.4295654296875, + "y": 2194.765625, + "width": 120, + "height": 32.5, + "text": "channels\n(workqueue)", + "originalText": "channels\n(workqueue)", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d3_channel", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 91005, + "version": 93, + "versionNonce": 1554063082, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "bo6", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d3_ch_workers_arrow", + "x": 573.4295654296875, + "y": 2211.015625, + "width": 30, + "height": 0, + "points": [ + [ + 0, + 0 + ], + [ + 30, + 0 + ] + ], + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 91006, + "version": 90, + "versionNonce": 280239286, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d3_channel", + "mode": "orbit", + "fixedPoint": [ + 0.523969500924208, + 0.5239695009242132 + ] + }, + "endBinding": { + "elementId": "nd_d3_worker_front", + "mode": "orbit", + "fixedPoint": [ + 0, + 0.5001 + ] + }, + "elbowed": false, + "boundElements": [], + "index": "bo7", + "angle": 0, + "lastCommittedPoint": null + }, + { + "type": "rectangle", + "id": "nd_d3_worker_back3", + "x": 625.4295654296875, + "y": 2198.015625, + "width": 130, + "height": 50, + "strokeColor": "#7048e8", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 91007, + "version": 90, + "versionNonce": 431075754, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "bo8", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d3_worker_back2", + "x": 618.4295654296875, + "y": 2191.015625, + "width": 130, + "height": 50, + "strokeColor": "#7048e8", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 91008, + "version": 96, + "versionNonce": 1488655862, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [ + { + "id": "nd_d3_actions_sdk_arrow", + "type": "arrow" + }, + { + "id": "nd_d3_actions_runs_arrow", + "type": "arrow" + } + ], + "index": "bo9", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d3_worker_front", + "x": 611.4295654296875, + "y": 2184.015625, + "width": 130, + "height": 50, + "strokeColor": "#7048e8", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 91009, + "version": 94, + "versionNonce": 1956768874, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d3_worker_text" + }, + { + "type": "arrow", + "id": "nd_d3_ch_workers_arrow" + } + ], + "index": "boA", + "angle": 0 + }, + { + "version": 300, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 2, + "fillStyle": "solid", + "type": "arrow", + "id": "nd_d3_actions_runs_arrow", + "x": 752.7558222322746, + "y": 2194.6306061295118, + "width": 169.67374319741293, + "height": 47.99143195571878, + "points": [ + [ + 0, + 0 + ], + [ + 169.67374319741293, + -47.99143195571878 + ] + ], + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "seed": 82012, + "versionNonce": 269543222, + "roundness": { + "type": 2 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d3_worker_back2", + "mode": "orbit", + "fixedPoint": [ + 1.0002563980920496, + 0.09658300320670606 + ] + }, + "endBinding": { + "elementId": "nd_d3_runs", + "mode": "orbit", + "fixedPoint": [ + 0.30496259228757183, + 0.30496259228757194 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d3_actions_runs_label" + } + ], + "index": "boB", + "lastCommittedPoint": null, + "angle": 0, + "moveMidPointsWithElement": false + }, + { + "version": 298, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "groupIds": [], + "frameId": null, + "opacity": 100, + "roughness": 1, + "strokeStyle": "solid", + "strokeWidth": 2, + "fillStyle": "solid", + "type": "arrow", + "id": "nd_d3_actions_sdk_arrow", + "x": 750.909167361191, + "y": 2240.5665357681028, + "width": 171.52039806849643, + "height": 59.43019152021952, + "points": [ + [ + 0, + 0 + ], + [ + 112.7717164022323, + 59.43019152021952 + ], + [ + 171.52039806849643, + 59.31543461637193 + ] + ], + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "seed": 82016, + "versionNonce": 1664929578, + "roundness": { + "type": 2 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d3_worker_back2", + "mode": "orbit", + "fixedPoint": [ + 0.98705706188541, + 0.9471491687758044 + ] + }, + "endBinding": { + "elementId": "nd_d3_sdk", + "mode": "orbit", + "fixedPoint": [ + 0.30498978205624, + 0.6950102179437578 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d3_actions_sdk_label" + } + ], + "index": "boC", + "lastCommittedPoint": null, + "angle": 0, + "moveMidPointsWithElement": false + }, + { + "type": "text", + "id": "nd_d3_worker_text", + "x": 616.4295654296875, + "y": 2190.265625, + "width": 120, + "height": 37.5, + "text": "Workers × 10\n(reconcile)", + "originalText": "Workers × 10\n(reconcile)", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d3_worker_front", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 91010, + "version": 90, + "versionNonce": 387616886, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "boD", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d3_worker_caption", + "x": 503.20007869175504, + "y": 2272.640620640346, + "width": 226.6107940673828, + "height": 13.75, + "text": "pool of 10 goroutines, one CRD at a time", + "originalText": "pool of 10 goroutines, one CRD at a time", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#5f3dc4", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 91011, + "version": 140, + "versionNonce": 1777162730, + "isDeleted": true, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "boE", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d3_payload_box", + "x": 55.8295654296875, + "y": 2431.015625, + "width": 1100, + "height": 230, + "strokeColor": "#7048e8", + "backgroundColor": "#f3f0ff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 92001, + "version": 89, + "versionNonce": 2040336822, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "boF", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d3_payload_title", + "x": 70.4295654296875, + "y": 2443.015625, + "width": 700, + "height": 28, + "text": "Runs Service gRPC payloads (from actions/k8s/client.go)", + "originalText": "Runs Service gRPC payloads (from actions/k8s/client.go)", + "fontSize": 18, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 92002, + "version": 89, + "versionNonce": 1203670186, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "boG", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d3_payload_record", + "x": 70.4295654296875, + "y": 2481.015625, + "width": 540, + "height": 180, + "text": "RecordActionRequest (on ADDED, deduped via bloom filter)\n action_id: { run, name, org, project, domain }\n parent: // empty for root\n input_uri: s3://.../inputs.pb\n group: \n spec: oneof {\n task: TaskAction {\n id: { project, domain, name, version }\n spec.task_template, spec.short_name\n }\n trace: TraceAction { ... }\n }", + "originalText": "RecordActionRequest (on ADDED, deduped via bloom filter)\n action_id: { run, name, org, project, domain }\n parent: // empty for root\n input_uri: s3://.../inputs.pb\n group: \n spec: oneof {\n task: TaskAction {\n id: { project, domain, name, version }\n spec.task_template, spec.short_name\n }\n trace: TraceAction { ... }\n }", + "fontSize": 13, + "fontFamily": 3, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 92003, + "version": 89, + "versionNonce": 45968118, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "boH", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d3_payload_update", + "x": 638.4295654296875, + "y": 2481.015625, + "width": 520, + "height": 162.5, + "text": "UpdateActionStatusRequest (on every phase change)\n action_id: { run, name, org, project, domain }\n status: ActionStatus {\n phase: QUEUED | RUNNING | SUCCEEDED |\n FAILED | ABORTED | ...\n attempts: \n cache_status: { HIT | MISS | POPULATED | ... }\n }\n\n", + "originalText": "UpdateActionStatusRequest (on every phase change)\n action_id: { run, name, org, project, domain }\n status: ActionStatus {\n phase: QUEUED | RUNNING | SUCCEEDED |\n FAILED | ABORTED | ...\n attempts: \n cache_status: { HIT | MISS | POPULATED | ... }\n }\n\n", + "fontSize": 13, + "fontFamily": 3, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 92004, + "version": 91, + "versionNonce": 576415594, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "boI", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d4_title", + "x": 1652.053727213542, + "y": 1251.302032470703, + "width": 900, + "height": 32, + "text": "Diagram 4 — App Service Architecture & Dataflow", + "originalText": "Diagram 4 — App Service Architecture & Dataflow", + "fontSize": 22, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 93000, + "version": 202, + "versionNonce": 1358994486, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "boJ", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d4_cp_box", + "x": 1772.8824827406145, + "y": 1321.0441589355466, + "width": 318.3229573567708, + "height": 291.7960442437066, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 93001, + "version": 215, + "versionNonce": 839838250, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "boK", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d4_cp_label", + "x": 1788.7986306084529, + "y": 1331.6549241807722, + "width": 238.74221801757812, + "height": 29.17960442437066, + "text": "Control Plane", + "originalText": "Control Plane", + "fontSize": 18.568839179144966, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 93002, + "version": 215, + "versionNonce": 1783342454, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "boL", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d4_k8s_box", + "x": 2130.9958097669814, + "y": 1321.0441589355466, + "width": 954.9688720703125, + "height": 384.64024013943146, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 93003, + "version": 215, + "versionNonce": 1841566954, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "boM", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d4_k8s_label", + "x": 2146.9119576348203, + "y": 1331.6549241807722, + "width": 344.8498704698351, + "height": 29.17960442437066, + "text": "☸ Kubernetes Cluster", + "originalText": "☸ Kubernetes Cluster", + "fontSize": 18.568839179144966, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 93004, + "version": 215, + "versionNonce": 1340311222, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "boN", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d4_dev", + "x": 1560.6671778361006, + "y": 1380.7297134399412, + "width": 185.68839179144965, + "height": 92.84419589572482, + "strokeColor": "#495057", + "backgroundColor": "#f1f3f5", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 93005, + "version": 215, + "versionNonce": 923133866, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d4_dev_text" + }, + { + "type": "arrow", + "id": "nd_d4_a1" + } + ], + "index": "boO", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d4_dev_text", + "x": 1584.792791578505, + "y": 1405.5986944834387, + "width": 137.43716430664062, + "height": 43.106233808729385, + "text": "Developer / CLI\n(gRPC)", + "originalText": "Developer / CLI\n(gRPC)", + "fontSize": 17.242493523491753, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d4_dev", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 93006, + "version": 251, + "versionNonce": 309149686, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "boP", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d4_appsvc", + "x": 1799.4093958536787, + "y": 1380.7297134399412, + "width": 265.2691311306424, + "height": 92.84419589572482, + "strokeColor": "#7048e8", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 93007, + "version": 215, + "versionNonce": 100622954, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d4_appsvc_text" + }, + { + "type": "arrow", + "id": "nd_d4_a1" + }, + { + "type": "arrow", + "id": "nd_d4_a2" + } + ], + "index": "boQ", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d4_appsvc_text", + "x": 1847.6714638604062, + "y": 1405.5986944834387, + "width": 168.7449951171875, + "height": 43.106233808729385, + "text": "AppService\n(LRU cache + TTL)", + "originalText": "AppService\n(LRU cache + TTL)", + "fontSize": 17.242493523491753, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d4_appsvc", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 93008, + "version": 251, + "versionNonce": 1710084406, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "boR", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d4_internal", + "x": 2150.8909946017798, + "y": 1380.7297134399412, + "width": 198.95184834798178, + "height": 92.84419589572482, + "strokeColor": "#7048e8", + "backgroundColor": "#e5dbff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 93009, + "version": 215, + "versionNonce": 360416554, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d4_internal_text" + }, + { + "type": "arrow", + "id": "nd_d4_a2" + }, + { + "type": "arrow", + "id": "nd_d4_a3" + } + ], + "index": "boS", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d4_internal_text", + "x": 2201.380064222548, + "y": 1397.3090341356062, + "width": 97.97370910644531, + "height": 59.68555450439454, + "text": "Internal\nAppService\n(data plane)", + "originalText": "Internal\nAppService\n(data plane)", + "fontSize": 15.916147867838543, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d4_internal", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 93010, + "version": 251, + "versionNonce": 902445686, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "boT", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d4_k8sclient", + "x": 2383.001484341092, + "y": 1380.7297134399412, + "width": 172.42493523491754, + "height": 92.84419589572482, + "strokeColor": "#7048e8", + "backgroundColor": "#e5dbff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 93011, + "version": 215, + "versionNonce": 249909226, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d4_k8sclient_text" + }, + { + "type": "arrow", + "id": "nd_d4_a3" + }, + { + "type": "arrow", + "id": "nd_d4_a4" + } + ], + "index": "boU", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d4_k8sclient_text", + "x": 2419.352051628961, + "y": 1397.3090341356062, + "width": 99.72380065917969, + "height": 59.68555450439454, + "text": "AppK8sClient\n(controller-\nruntime)", + "originalText": "AppK8sClient\n(controller-\nruntime)", + "fontSize": 15.916147867838543, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d4_k8sclient", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 93012, + "version": 251, + "versionNonce": 952597430, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "boV", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d4_kservice", + "x": 2588.58506096734, + "y": 1380.7297134399412, + "width": 185.68839179144965, + "height": 92.84419589572482, + "strokeColor": "#fd7e14", + "backgroundColor": "#ffd8a8", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 93013, + "version": 215, + "versionNonce": 910672554, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d4_kservice_text" + }, + { + "type": "arrow", + "id": "nd_d4_a4" + }, + { + "type": "arrow", + "id": "nd_d4_a5" + } + ], + "index": "boW", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d4_kservice_text", + "x": 2616.604023403592, + "y": 1407.2566265530056, + "width": 129.6504669189453, + "height": 39.79036966959636, + "text": "KService CRD\n(Knative Serving)", + "originalText": "KService CRD\n(Knative Serving)", + "fontSize": 15.916147867838543, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d4_kservice", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 93014, + "version": 251, + "versionNonce": 84579574, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "boX", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d4_knative", + "x": 2807.4320941501196, + "y": 1380.7297134399412, + "width": 185.68839179144965, + "height": 92.84419589572482, + "strokeColor": "#1971c2", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 93015, + "version": 215, + "versionNonce": 374201706, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d4_knative_text" + }, + { + "type": "arrow", + "id": "nd_d4_a5" + }, + { + "type": "arrow", + "id": "nd_d4_a6" + } + ], + "index": "boY", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d4_knative_text", + "x": 2841.441168891059, + "y": 1407.2566265530056, + "width": 117.67024230957031, + "height": 39.79036966959636, + "text": "Knative Serving\n(controller)", + "originalText": "Knative Serving\n(controller)", + "fontSize": 15.916147867838543, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d4_knative", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 93016, + "version": 251, + "versionNonce": 605586998, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "boZ", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d4_pod", + "x": 2807.4320941501196, + "y": 1546.5229203965926, + "width": 185.68839179144965, + "height": 92.84419589572482, + "strokeColor": "#2f9e44", + "backgroundColor": "#b2f2bb", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 93017, + "version": 215, + "versionNonce": 742563882, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d4_pod_text" + }, + { + "type": "arrow", + "id": "nd_d4_a6" + }, + { + "type": "arrow", + "id": "nd_d4_a7" + } + ], + "index": "boa", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d4_pod_text", + "x": 2825.841414557563, + "y": 1573.049833509657, + "width": 148.8697509765625, + "height": 39.79036966959636, + "text": "App Pods\n(auto-scaled 0↔N)", + "originalText": "App Pods\n(auto-scaled 0↔N)", + "fontSize": 15.916147867838543, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d4_pod", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 93018, + "version": 251, + "versionNonce": 651579254, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "bob", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d4_kourier", + "x": 2383.001484341092, + "y": 1546.5229203965926, + "width": 198.95184834798178, + "height": 92.84419589572482, + "strokeColor": "#1971c2", + "backgroundColor": "#d0ebff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 93019, + "version": 215, + "versionNonce": 336661226, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d4_kourier_text" + }, + { + "type": "arrow", + "id": "nd_d4_a7" + }, + { + "type": "arrow", + "id": "nd_d4_a8" + } + ], + "index": "boc", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d4_kourier_text", + "x": 2406.3162833319775, + "y": 1573.049833509657, + "width": 152.32225036621094, + "height": 39.79036966959636, + "text": "Kourier Ingress\n(.BaseDomain)", + "originalText": "Kourier Ingress\n(.BaseDomain)", + "fontSize": 15.916147867838543, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d4_kourier", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 93020, + "version": 251, + "versionNonce": 965275830, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "bod", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d4_enduser", + "x": 1560.6671778361006, + "y": 1546.5229203965926, + "width": 185.68839179144965, + "height": 92.84419589572482, + "strokeColor": "#495057", + "backgroundColor": "#f1f3f5", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 93021, + "version": 215, + "versionNonce": 876879274, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d4_enduser_text" + }, + { + "type": "arrow", + "id": "nd_d4_a8" + } + ], + "index": "boe", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d4_enduser_text", + "x": 1615.204122755263, + "y": 1571.3919014400901, + "width": 76.614501953125, + "height": 43.106233808729385, + "text": "End User\n(browser)", + "originalText": "End User\n(browser)", + "fontSize": 17.242493523491753, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d4_enduser", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 93022, + "version": 251, + "versionNonce": 936733174, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "bof", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d4_a1", + "x": 1746.3555696275503, + "y": 1427.1518113878035, + "width": 53.05382622612847, + "height": 0, + "points": [ + [ + 0, + 0 + ], + [ + 53.05382622612847, + 0 + ] + ], + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 94001, + "version": 232, + "versionNonce": 1778833514, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d4_dev", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "endBinding": { + "elementId": "nd_d4_appsvc", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d4_a1_label" + } + ], + "index": "bog", + "angle": 0, + "lastCommittedPoint": null + }, + { + "type": "text", + "id": "nd_d4_a1_label", + "x": 160, + "y": 2956, + "width": 46.79449462890625, + "height": 16.579320695665146, + "text": "1. gRPC", + "originalText": "1. gRPC", + "fontSize": 13.263456556532118, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d4_a1", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 94002, + "version": 43, + "versionNonce": 1086372662, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "boh", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d4_a2", + "x": 2064.6785269843213, + "y": 1427.1518113878035, + "width": 86.21246761745877, + "height": 0, + "points": [ + [ + 0, + 0 + ], + [ + 86.21246761745877, + 0 + ] + ], + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 94003, + "version": 233, + "versionNonce": 891566890, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d4_appsvc", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "endBinding": { + "elementId": "nd_d4_internal", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d4_a2_label" + } + ], + "index": "boi", + "angle": 0, + "lastCommittedPoint": null + }, + { + "type": "text", + "id": "nd_d4_a2_label", + "x": 405, + "y": 2954, + "width": 78.27369689941406, + "height": 33.15864139133029, + "text": "2. proxy\n(cache miss)", + "originalText": "2. proxy\n(cache miss)", + "fontSize": 13.263456556532118, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d4_a2", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 94004, + "version": 43, + "versionNonce": 1253041270, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "boj", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d4_a3", + "x": 2349.8428429497617, + "y": 1427.1518113878035, + "width": 33.1586413913303, + "height": 0, + "points": [ + [ + 0, + 0 + ], + [ + 33.1586413913303, + 0 + ] + ], + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 94005, + "version": 232, + "versionNonce": 1678198250, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d4_internal", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "endBinding": { + "elementId": "nd_d4_k8sclient", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d4_a3_label" + } + ], + "index": "bok", + "angle": 0, + "lastCommittedPoint": null + }, + { + "type": "text", + "id": "nd_d4_a3_label", + "x": 614, + "y": 2954, + "width": 12.663299560546875, + "height": 16.579320695665146, + "text": "3.", + "originalText": "3.", + "fontSize": 13.263456556532118, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d4_a3", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 94006, + "version": 43, + "versionNonce": 929555894, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "bol", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d4_a4", + "x": 2555.4264195760093, + "y": 1427.1518113878035, + "width": 33.1586413913303, + "height": 0, + "points": [ + [ + 0, + 0 + ], + [ + 33.1586413913303, + 0 + ] + ], + "strokeColor": "#fd7e14", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 94007, + "version": 232, + "versionNonce": 1069217962, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d4_k8sclient", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "endBinding": { + "elementId": "nd_d4_kservice", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d4_a4_label" + } + ], + "index": "bom", + "angle": 0, + "lastCommittedPoint": null + }, + { + "type": "text", + "id": "nd_d4_a4_label", + "x": 766, + "y": 2954, + "width": 54.83003234863281, + "height": 16.579320695665146, + "text": "4. patch", + "originalText": "4. patch", + "fontSize": 13.263456556532118, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d4_a4", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#fd7e14", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 94008, + "version": 43, + "versionNonce": 1745731318, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "bon", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d4_a5", + "x": 2774.2734527587895, + "y": 1427.1518113878035, + "width": 33.1586413913303, + "height": 0, + "points": [ + [ + 0, + 0 + ], + [ + 33.1586413913303, + 0 + ] + ], + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 94009, + "version": 232, + "versionNonce": 938103658, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d4_kservice", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "endBinding": { + "elementId": "nd_d4_knative", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d4_a5_label" + } + ], + "index": "boo", + "angle": 0, + "lastCommittedPoint": null + }, + { + "type": "text", + "id": "nd_d4_a5_label", + "x": 930, + "y": 2954, + "width": 56.07647705078125, + "height": 16.579320695665146, + "text": "5. watch", + "originalText": "5. watch", + "fontSize": 13.263456556532118, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d4_a5", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 94010, + "version": 43, + "versionNonce": 1361473590, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "bop", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d4_a6", + "x": 2900.2762900458447, + "y": 1473.5739093356658, + "width": 0, + "height": 72.94901106092665, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 72.94901106092665 + ] + ], + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 94011, + "version": 215, + "versionNonce": 249583146, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d4_knative", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "endBinding": { + "elementId": "nd_d4_pod", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "elbowed": false, + "boundElements": [], + "index": "boq", + "angle": 0, + "lastCommittedPoint": null + }, + { + "type": "text", + "id": "nd_d4_a6_label", + "x": 2999.7522142198354, + "y": 1493.4690941704641, + "width": 172.42493523491754, + "height": 35.81133270263672, + "text": "6. reconcile:\ncreate Deployment\n→ scale pods", + "originalText": "6. reconcile: create Deployment → scale pods", + "fontSize": 13.263456556532118, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "middle", + "containerId": null, + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 94012, + "version": 215, + "versionNonce": 244775286, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "bor", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d4_a7", + "x": 2581.9533326890737, + "y": 1592.9450183444549, + "width": 225.47876146104602, + "height": 0, + "points": [ + [ + 0, + 0 + ], + [ + 225.47876146104602, + 0 + ] + ], + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 94013, + "version": 233, + "versionNonce": 92799210, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d4_kourier", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "endBinding": { + "elementId": "nd_d4_pod", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d4_a7_label" + } + ], + "index": "bos", + "angle": 0, + "lastCommittedPoint": null + }, + { + "type": "text", + "id": "nd_d4_a7_label", + "x": 810, + "y": 3080, + "width": 110.5352783203125, + "height": 33.15864139133029, + "text": "8. route by host\nheader", + "originalText": "8. route by host header", + "fontSize": 13.263456556532118, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d4_a7", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 94014, + "version": 43, + "versionNonce": 2007259830, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "bot", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d4_a8", + "x": 1746.3555696275503, + "y": 1592.9450183444549, + "width": 636.6459147135416, + "height": 0, + "points": [ + [ + 0, + 0 + ], + [ + 636.6459147135416, + 0 + ] + ], + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 94015, + "version": 239, + "versionNonce": 124539818, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d4_enduser", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "endBinding": { + "elementId": "nd_d4_kourier", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d4_a8_label" + } + ], + "index": "bou", + "angle": 0, + "lastCommittedPoint": null + }, + { + "type": "text", + "id": "nd_d4_a8_label", + "x": 1852.1739646063916, + "y": 1576.3656976487898, + "width": 425.0091247558594, + "height": 33.15864139133029, + "text": "7. HTTPS https://.\nhttp://streamlit-hello-v2-flytesnacks-development.localhost:30081", + "originalText": "7. HTTPS https://.\nhttp://streamlit-hello-v2-flytesnacks-development.localhost:30081", + "fontSize": 13.263456556532118, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d4_a8", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 94016, + "version": 47, + "versionNonce": 854823926, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "bov", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d4_legend", + "x": 1588.878209264101, + "y": 1739.3108177185056, + "width": 1501.2391357421875, + "height": 175.02737045288083, + "text": "App Service — data flows.\n\n• Management flow (purple/orange): CLI → AppService (CP, LRU cache) → InternalAppService (DP) → AppK8sClient → KService CRD.\n• Reconcile flow (blue): Knative Serving watches KService CRDs and materializes Deployments / Pods.\n• Traffic flow (green): End users hit Kourier, which routes to the App Pod by host = ....\n\nKey property: no database — all app state lives in KService CRDs; the CP cache is just an LRU with TTL, invalidated on Create / Update / Delete.", + "originalText": "App Service — data flows.\n\n• Management flow (purple/orange): CLI → AppService (CP, LRU cache) → InternalAppService (DP) → AppK8sClient → KService CRD.\n• Reconcile flow (blue): Knative Serving watches KService CRDs and materializes Deployments / Pods.\n• Traffic flow (green): End users hit Kourier, which routes to the App Pod by host = ....\n\nKey property: no database — all app state lives in KService CRDs; the CP cache is just an LRU with TTL, invalidated on Create / Update / Delete.", + "fontSize": 20.00312805175781, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 94017, + "version": 258, + "versionNonce": 1454919274, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "bow", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d5_title", + "x": 1549.7366850325204, + "y": 265.73943838810214, + "width": 1176.5834832597973, + "height": 41.834079404792796, + "text": "Diagram 5 — Devbox Architecture (single-node k3s, all-in-one)", + "originalText": "Diagram 5 — Devbox Architecture (single-node k3s, all-in-one)", + "fontSize": 28.760929590795037, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 95001, + "version": 281, + "versionNonce": 1250534710, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "box", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d5_k3s_box", + "x": 1840.7449998921102, + "y": 344.1783372720887, + "width": 1228.8760825157883, + "height": 470.6333933039189, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 95002, + "version": 281, + "versionNonce": 943124778, + "isDeleted": false, + "updated": 1777333910976, + "link": null, + "locked": false, + "boundElements": [], + "index": "boy", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d5_k3s_label", + "x": 1860.3547246131068, + "y": 354.63685712328686, + "width": 522.9259925599099, + "height": 28.76092959079504, + "text": "☸ k3s cluster (local, single-node)", + "originalText": "☸ k3s cluster (local, single-node)", + "fontSize": 18.302409739596843, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 95003, + "version": 281, + "versionNonce": 1070304886, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "boz", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d5_user", + "x": 1644.647752682144, + "y": 422.61723615607514, + "width": 169.95094758197072, + "height": 91.51204869798424, + "strokeColor": "#495057", + "backgroundColor": "#f1f3f5", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 95004, + "version": 281, + "versionNonce": 525548522, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d5_user_text" + }, + { + "type": "arrow", + "id": "nd_d5_a1" + } + ], + "index": "bp0", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d5_user_text", + "x": 1668.5732005331881, + "y": 448.76353578407065, + "width": 122.10005187988281, + "height": 39.21944944199324, + "text": "Developer\n(browser + CLI)", + "originalText": "Developer\n(browser + CLI)", + "fontSize": 15.687779776797298, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d5_user", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 95005, + "version": 497, + "versionNonce": 528371638, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bp1", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d5_traefik", + "x": 1866.8912995201058, + "y": 422.61723615607514, + "width": 196.09724720996624, + "height": 91.51204869798424, + "strokeColor": "#1971c2", + "backgroundColor": "#d0ebff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 95006, + "version": 281, + "versionNonce": 1511534250, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d5_traefik_text" + }, + { + "type": "arrow", + "id": "nd_d5_a1" + }, + { + "type": "arrow", + "id": "nd_d5_a2" + }, + { + "type": "arrow", + "id": "nd_d5_a3" + } + ], + "index": "bp2", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d5_traefik_text", + "x": 1910.4900940235264, + "y": 441.4098890136969, + "width": 108.899658203125, + "height": 53.926742982740706, + "text": "traefik\n(Ingress)\nns: kube-system", + "originalText": "traefik\n(Ingress)\nns: kube-system", + "fontSize": 14.38046479539752, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d5_traefik", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 95007, + "version": 497, + "versionNonce": 365357302, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bp3", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d5_console", + "x": 2128.3542958000603, + "y": 422.61723615607514, + "width": 209.17039702396397, + "height": 91.51204869798424, + "strokeColor": "#7048e8", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 95008, + "version": 281, + "versionNonce": 1026607466, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d5_console_text" + }, + { + "type": "arrow", + "id": "nd_d5_a2" + } + ], + "index": "bp4", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d5_console_text", + "x": 2188.5700408818666, + "y": 441.4098890136969, + "width": 88.73890686035156, + "height": 53.926742982740706, + "text": "flyte-console\nDeployment\n:8080 (UI)", + "originalText": "flyte-console\nDeployment\n:8080 (UI)", + "fontSize": 14.38046479539752, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d5_console", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 95009, + "version": 497, + "versionNonce": 36330038, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bp5", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d5_binary", + "x": 2415.963591708012, + "y": 422.61723615607514, + "width": 235.31669665195946, + "height": 91.51204869798424, + "strokeColor": "#7048e8", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 95010, + "version": 281, + "versionNonce": 1340607530, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d5_binary_text" + }, + { + "type": "arrow", + "id": "nd_d5_a3" + }, + { + "type": "arrow", + "id": "nd_d5_a4" + }, + { + "type": "arrow", + "id": "nd_d5_a5" + }, + { + "type": "arrow", + "id": "nd_d5_a6" + }, + { + "type": "arrow", + "id": "nd_d5_a7" + } + ], + "index": "bp6", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d5_binary_text", + "x": 2430.3520807200266, + "y": 441.4098890136969, + "width": 206.5397186279297, + "height": 53.926742982740706, + "text": "flyte-binary\nDeployment (all-in-one)\n:8090 gRPC • :9443 webhook", + "originalText": "flyte-binary\nDeployment (all-in-one)\n:8090 gRPC • :9443 webhook", + "fontSize": 14.38046479539752, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d5_binary", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 95011, + "version": 498, + "versionNonce": 193831798, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bp7", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d5_registry", + "x": 2716.6460374299595, + "y": 422.61723615607514, + "width": 209.17039702396397, + "height": 91.51204869798424, + "strokeColor": "#0ca678", + "backgroundColor": "#c3fae8", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 95012, + "version": 281, + "versionNonce": 2015950570, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d5_registry_text" + }, + { + "type": "arrow", + "id": "nd_d5_a4" + } + ], + "index": "bp8", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d5_registry_text", + "x": 2768.837757548387, + "y": 441.4098890136969, + "width": 104.78695678710938, + "height": 53.926742982740706, + "text": "docker-registry\nDeployment\nNodePort :30000 (images)", + "originalText": "docker-registry\nDeployment\nNodePort :30000 (images)", + "fontSize": 14.38046479539752, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d5_registry", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 95013, + "version": 497, + "versionNonce": 875938998, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bp9", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d5_rustfs", + "x": 2128.3542958000603, + "y": 592.5681837380457, + "width": 209.17039702396397, + "height": 91.51204869798424, + "strokeColor": "#fd7e14", + "backgroundColor": "#ffd8a8", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 95014, + "version": 281, + "versionNonce": 645826986, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d5_rustfs_text" + }, + { + "type": "arrow", + "id": "nd_d5_a5" + } + ], + "index": "bpA", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d5_rustfs_text", + "x": 2148.924410999054, + "y": 611.3608365956675, + "width": 168.03016662597656, + "height": 53.926742982740706, + "text": "rustfs\nDeployment (S3-compat)\n:9000 • PVC-backed", + "originalText": "rustfs\nDeployment (S3-compat)\n:9000 • PVC-backed", + "fontSize": 14.38046479539752, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d5_rustfs", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 95015, + "version": 497, + "versionNonce": 1841806838, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bpB", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d5_taskpods", + "x": 2415.963591708012, + "y": 592.5681837380457, + "width": 235.31669665195946, + "height": 91.51204869798424, + "strokeColor": "#2f9e44", + "backgroundColor": "#b2f2bb", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 95016, + "version": 281, + "versionNonce": 34849898, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d5_taskpods_text" + }, + { + "type": "arrow", + "id": "nd_d5_a6" + } + ], + "index": "bpC", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d5_taskpods_text", + "x": 2453.007735627253, + "y": 611.3608365956675, + "width": 161.22840881347656, + "height": 53.926742982740706, + "text": "Task Pods\n(created on demand)\nfrom TaskAction CRDs", + "originalText": "Task Pods\n(created on demand)\nfrom TaskAction CRDs", + "fontSize": 14.38046479539752, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d5_taskpods", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 95017, + "version": 498, + "versionNonce": 759729974, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bpD", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d5_postgres", + "x": 2716.6460374299595, + "y": 592.5681837380457, + "width": 209.17039702396397, + "height": 91.51204869798424, + "strokeColor": "#495057", + "backgroundColor": "#f8f9fa", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 95018, + "version": 281, + "versionNonce": 347318058, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d5_postgres_text" + }, + { + "type": "arrow", + "id": "nd_d5_a7" + } + ], + "index": "bpE", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d5_postgres_text", + "x": 2737.48939939409, + "y": 611.3608365956675, + "width": 167.48367309570312, + "height": 53.926742982740706, + "text": "PostgreSQL\n(on host, via Endpoints)\n:5432", + "originalText": "PostgreSQL\n(on host, via Endpoints)\n:5432", + "fontSize": 14.38046479539752, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d5_postgres", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 95019, + "version": 497, + "versionNonce": 2132621430, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bpF", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d5_a1", + "x": 1814.5987002641145, + "y": 468.3732605050673, + "width": 52.29259925599099, + "height": 0, + "points": [ + [ + 0, + 0 + ], + [ + 52.29259925599099, + 0 + ] + ], + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 96001, + "version": 290, + "versionNonce": 1992897002, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d5_user", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "endBinding": { + "elementId": "nd_d5_traefik", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d5_a1_label" + } + ], + "index": "bpG", + "angle": 0, + "lastCommittedPoint": null + }, + { + "type": "text", + "id": "nd_d5_a1_label", + "x": 160, + "y": 3453, + "width": 44.803924560546875, + "height": 16.341437267497184, + "text": "Flyte API / UI", + "originalText": "Flyte API / UI", + "fontSize": 13.073149813997748, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d5_a1", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 96002, + "version": 222, + "versionNonce": 453687734, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bpH", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d5_a2", + "x": 2062.988546730072, + "y": 455.3001106910695, + "width": 65.36574906998874, + "height": 0, + "points": [ + [ + 0, + 0 + ], + [ + 65.36574906998874, + 0 + ] + ], + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 96003, + "version": 290, + "versionNonce": 2069849258, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d5_traefik", + "mode": "orbit", + "fixedPoint": [ + 0.6934212524417186, + 0.306578747558277 + ] + }, + "endBinding": { + "elementId": "nd_d5_console", + "mode": "orbit", + "fixedPoint": [ + 0.3018940934699046, + 0.3018940934699068 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d5_a2_label" + } + ], + "index": "bpI", + "angle": 0, + "lastCommittedPoint": null + }, + { + "type": "text", + "id": "nd_d5_a2_label", + "x": 355, + "y": 3443, + "width": 51.365020751953125, + "height": 16.341437267497184, + "text": "/console", + "originalText": "/console", + "fontSize": 13.073149813997748, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d5_a2", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 96004, + "version": 222, + "versionNonce": 2016809718, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bpJ", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d5_a3", + "x": 2062.988546730072, + "y": 487.9829852260639, + "width": 352.97504497793915, + "height": 0, + "points": [ + [ + 0, + 0 + ], + [ + 352.97504497793915, + 0 + ] + ], + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 96005, + "version": 290, + "versionNonce": 1545682794, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d5_traefik", + "mode": "orbit", + "fixedPoint": [ + 0.7376938099927232, + 0.7376938099927104 + ] + }, + "endBinding": { + "elementId": "nd_d5_binary", + "mode": "orbit", + "fixedPoint": [ + 0.2569941771527018, + 0.7430058228473042 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d5_a3_label" + } + ], + "index": "bpK", + "angle": 0, + "lastCommittedPoint": null + }, + { + "type": "text", + "id": "nd_d5_a3_label", + "x": 450, + "y": 3497, + "width": 116.79338073730469, + "height": 16.341437267497184, + "text": "/api (gRPC/HTTP)", + "originalText": "/api (gRPC/HTTP)", + "fontSize": 13.073149813997748, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d5_a3", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 96006, + "version": 222, + "versionNonce": 1629766710, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bpL", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d5_a4", + "x": 2651.28028835997, + "y": 455.3001106910695, + "width": 65.36574906998874, + "height": 0, + "points": [ + [ + 0, + 0 + ], + [ + 65.36574906998874, + 0 + ] + ], + "strokeColor": "#0ca678", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 96007, + "version": 290, + "versionNonce": 1700381226, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d5_binary", + "mode": "orbit", + "fixedPoint": [ + 0.701863262883881, + 0.2981367371161208 + ] + }, + "endBinding": { + "elementId": "nd_d5_registry", + "mode": "orbit", + "fixedPoint": [ + 0.30698184012785035, + 0.30698184012785534 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d5_a4_label" + } + ], + "index": "bpM", + "angle": 0, + "lastCommittedPoint": null + }, + { + "type": "text", + "id": "nd_d5_a4_label", + "x": 800, + "y": 3443, + "width": 54.6978759765625, + "height": 16.341437267497184, + "text": "push/pull", + "originalText": "push/pull", + "fontSize": 13.073149813997748, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d5_a4", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#0ca678", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 96008, + "version": 222, + "versionNonce": 129650038, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bpN", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d5_a5", + "x": 2415.963591708012, + "y": 514.1292848540594, + "width": 183.02409739596848, + "height": 114.96460667029525, + "points": [ + [ + 0, + 0 + ], + [ + -183.02409739596848, + 114.96460667029525 + ] + ], + "strokeColor": "#fd7e14", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 96009, + "version": 290, + "versionNonce": 569634026, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d5_binary", + "mode": "orbit", + "fixedPoint": [ + 0.3642687361478541, + 0.36426873614786276 + ] + }, + "endBinding": { + "elementId": "nd_d5_rustfs", + "mode": "orbit", + "fixedPoint": [ + 0.2427925242506852, + 0.2427925242506847 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d5_a5_label" + } + ], + "index": "bpO", + "angle": 0, + "lastCommittedPoint": null + }, + { + "type": "text", + "id": "nd_d5_a5_label", + "x": 490, + "y": 3530, + "width": 46.529144287109375, + "height": 16.341437267497184, + "text": "S3 I/O", + "originalText": "S3 I/O", + "fontSize": 13.073149813997748, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d5_a5", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#fd7e14", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 96010, + "version": 222, + "versionNonce": 423440054, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bpP", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d5_a6", + "x": 2533.6219400339905, + "y": 514.1292848540594, + "width": 0, + "height": 130.863967167251, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 130.863967167251 + ] + ], + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 96011, + "version": 291, + "versionNonce": 125484970, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d5_binary", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "endBinding": { + "elementId": "nd_d5_taskpods", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d5_a6_label" + } + ], + "index": "bpQ", + "angle": 0, + "lastCommittedPoint": null + }, + { + "type": "text", + "id": "nd_d5_a6_label", + "x": 715, + "y": 3530, + "width": 127.62835693359375, + "height": 32.68287453499437, + "text": "creates TaskAction\nCRD", + "originalText": "creates TaskAction CRD", + "fontSize": 13.073149813997748, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "middle", + "containerId": "nd_d5_a6", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 96012, + "version": 222, + "versionNonce": 1381099510, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bpR", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d5_a7", + "x": 2651.28028835997, + "y": 514.1292848540594, + "width": 183.02409739596848, + "height": 114.96460667029525, + "points": [ + [ + 0, + 0 + ], + [ + 183.02409739596848, + 114.96460667029525 + ] + ], + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 96013, + "version": 290, + "versionNonce": 572078698, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d5_binary", + "mode": "orbit", + "fixedPoint": [ + 0.6526605598422729, + 0.34733944015772195 + ] + }, + "endBinding": { + "elementId": "nd_d5_postgres", + "mode": "orbit", + "fixedPoint": [ + 0.7875394359059669, + 0.21246056409403147 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d5_a7_label" + } + ], + "index": "bpS", + "angle": 0, + "lastCommittedPoint": null + }, + { + "type": "text", + "id": "nd_d5_a7_label", + "x": 845, + "y": 3530, + "width": 24.98980712890625, + "height": 16.341437267497184, + "text": "SQL", + "originalText": "SQL", + "fontSize": 13.073149813997748, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d5_a7", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 96014, + "version": 222, + "versionNonce": 318601526, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bpT", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d5_legend", + "x": 1577.6783464716586, + "y": 840.6527037523177, + "width": 1668.3831787109375, + "height": 241.4629566449929, + "text": "Devbox — everything on a single k3s node.\n\n• Control plane: flyte-binary bundles admin + propeller + datacatalog + scheduler (ns: flyte).\n• UI: flyte-console, fronted by Traefik (Flyte API / UI entry).\n• Storage: rustfs (S3-compatible, PVC-backed) + docker-registry for task images (NodePort :30000).\n• Database: PostgreSQL runs on the host; wired in via an Endpoints object pointing kube-dns at 127.0.0.1:5432.\n• Task execution: Task Pods spun up on demand from the taskactions.flyte.org CRD.\n• Flyte Apps: `make setup-knative` installs Knative Serving (ns: knative-serving) + net-kourier (ns: kourier-system); Kourier is NodePort-exposed on :30081 for KService traffic.\n\nNot included vs. prod: HA Postgres, external S3/GCS, and separate admin/propeller/datacatalog deployments.", + "originalText": "Devbox — everything on a single k3s node.\n\n• Control plane: flyte-binary bundles admin + propeller + datacatalog + scheduler (ns: flyte).\n• UI: flyte-console, fronted by Traefik (Flyte API / UI entry).\n• Storage: rustfs (S3-compatible, PVC-backed) + docker-registry for task images (NodePort :30000).\n• Database: PostgreSQL runs on the host; wired in via an Endpoints object pointing kube-dns at 127.0.0.1:5432.\n• Task execution: Task Pods spun up on demand from the taskactions.flyte.org CRD.\n• Flyte Apps: `make setup-knative` installs Knative Serving (ns: knative-serving) + net-kourier (ns: kourier-system); Kourier is NodePort-exposed on :30081 for KService traffic.\n\nNot included vs. prod: HA Postgres, external S3/GCS, and separate admin/propeller/datacatalog deployments.", + "fontSize": 19.31703653159943, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 96015, + "version": 373, + "versionNonce": 1083858218, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bpU", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d5_knative", + "x": 2714.7624267578126, + "y": 704.8311767578125, + "width": 235.3, + "height": 91.5, + "strokeColor": "#1971c2", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 97001, + "version": 120, + "versionNonce": 1923408502, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d5_knative_text" + }, + { + "id": "nd_d5_a9", + "type": "arrow" + } + ], + "index": "bpV", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d5_knative_text", + "x": 2719.7624267578126, + "y": 717.5811767578125, + "width": 225.3, + "height": 66, + "text": "Knative Serving\n(controller / activator / autoscaler)\nns: knative-serving", + "originalText": "Knative Serving\n(controller / activator / autoscaler)\nns: knative-serving", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d5_knative", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 97002, + "version": 119, + "versionNonce": 543762410, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bpW", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d5_kourier", + "x": 1857.0499267578125, + "y": 586.5812377929688, + "width": 235.3, + "height": 91.5, + "strokeColor": "#1971c2", + "backgroundColor": "#d0ebff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 97003, + "version": 127, + "versionNonce": 1410147254, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d5_kourier_text" + }, + { + "id": "nd_d5_a_user_kourier", + "type": "arrow" + } + ], + "index": "bpX", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d5_kourier_text", + "x": 1862.0499267578125, + "y": 599.3312377929688, + "width": 225.3, + "height": 66, + "text": "Kourier (net-kourier)\nKService ingress / routing\nns: kourier-system • NodePort :30081", + "originalText": "Kourier (net-kourier)\nKService ingress / routing\nns: kourier-system • NodePort :30081", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d5_kourier", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 97004, + "version": 126, + "versionNonce": 428907178, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bpY", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d5_apppods", + "x": 2218.60634765625, + "y": 703.7188110351562, + "width": 235.3, + "height": 91.5, + "strokeColor": "#2f9e44", + "backgroundColor": "#b2f2bb", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 97101, + "version": 84, + "versionNonce": 2036022518, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d5_apppods_text" + }, + { + "type": "arrow", + "id": "nd_d5_a8" + }, + { + "type": "arrow", + "id": "nd_d5_a9" + } + ], + "index": "bpZ", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d5_apppods_text", + "x": 2223.60634765625, + "y": 716.4688110351562, + "width": 225.3, + "height": 66, + "text": "App Pods\n(KService-managed, scale 0↔N)\nfrom KService CRD", + "originalText": "App Pods\n(KService-managed, scale 0↔N)\nfrom KService CRD", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d5_apppods", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 97102, + "version": 84, + "versionNonce": 1253815658, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bpa", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d5_a_user_kourier", + "x": 1751.0621848015298, + "y": 520.1292848540594, + "width": 99.98774195628266, + "height": 105.85879648151592, + "points": [ + [ + 0, + 0 + ], + [ + 99.98774195628266, + 105.85879648151592 + ] + ], + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 97103, + "version": 99, + "versionNonce": 403975734, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d5_user", + "mode": "orbit", + "fixedPoint": [ + 0.3929487529128373, + 0.6070512470871651 + ] + }, + "endBinding": { + "elementId": "nd_d5_kourier", + "mode": "orbit", + "fixedPoint": [ + 0, + 0.5001 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d5_a_user_kourier_label" + } + ], + "index": "bpb", + "angle": 0, + "lastCommittedPoint": null, + "moveMidPointsWithElement": false + }, + { + "type": "text", + "id": "nd_d5_a_user_kourier_label", + "x": 2050, + "y": 590, + "width": 104.77487182617188, + "height": 27.5, + "text": "app traffic .\n", + "originalText": "app traffic .", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d5_a_user_kourier", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 97104, + "version": 7, + "versionNonce": 1161132074, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bpc", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d5_a8", + "x": 2079.8170782300294, + "y": 682.8166474275048, + "width": 132.78926942622047, + "height": 63.7794983361332, + "points": [ + [ + 0, + 0 + ], + [ + 132.78926942622047, + 63.7794983361332 + ] + ], + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 97105, + "version": 85, + "versionNonce": 1830614902, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d5_kourier", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "endBinding": { + "elementId": "nd_d5_apppods", + "mode": "orbit", + "fixedPoint": [ + 0, + 0.5001 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d5_a8_label" + } + ], + "index": "bpd", + "angle": 0, + "lastCommittedPoint": null, + "moveMidPointsWithElement": false + }, + { + "type": "text", + "id": "nd_d5_a8_label", + "x": 2124.899724112573, + "y": 704.7063965955714, + "width": 42.62397766113281, + "height": 20, + "text": "route", + "originalText": "route", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d5_a8", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 97106, + "version": 9, + "versionNonce": 954786538, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bpe", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d5_a9", + "x": 2708.7624267578126, + "y": 750.5768749537996, + "width": 248.8560791015625, + "height": 0.5579272005868461, + "points": [ + [ + 0, + 0 + ], + [ + -248.8560791015625, + -0.5579272005868461 + ] + ], + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 97107, + "version": 262, + "versionNonce": 1354406070, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d5_knative", + "mode": "orbit", + "fixedPoint": [ + 0, + 0.5001 + ] + }, + "endBinding": { + "elementId": "nd_d5_apppods", + "mode": "orbit", + "fixedPoint": [ + 0, + 0.5001 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d5_a9_label" + } + ], + "index": "bpf", + "angle": 0, + "lastCommittedPoint": null, + "moveMidPointsWithElement": false + }, + { + "type": "text", + "id": "nd_d5_a9_label", + "x": 2504.1744140625005, + "y": 730.2979113535062, + "width": 160.3199462890625, + "height": 40, + "text": "reconcile KService →\nscale pods", + "originalText": "reconcile KService → scale pods", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d5_a9", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 97108, + "version": 19, + "versionNonce": 543225258, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bpg", + "angle": 0 + }, + { + "id": "jJlmbL2s-5JS5WeydkKlG", + "type": "text", + "x": 2529.1969604492188, + "y": 756.7293959118069, + "width": 10, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bph", + "roundness": null, + "seed": 524267296, + "version": 7, + "versionNonce": 1251086838, + "isDeleted": true, + "boundElements": [], + "updated": 1777333910977, + "link": null, + "locked": false, + "text": "", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "app", + "type": "rectangle", + "x": 1140, + "y": 210, + "width": 160, + "height": 70, + "strokeColor": "#7048e8", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 3001, + "version": 5, + "versionNonce": 1825091690, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [ + { + "type": "text", + "id": "app-text" + } + ], + "updated": 1777333910977, + "link": null, + "locked": false, + "index": "bpi", + "roundness": null + }, + { + "id": "app-text", + "type": "text", + "x": 1145, + "y": 220, + "width": 150, + "height": 50, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "seed": 3002, + "version": 4, + "versionNonce": 631792438, + "isDeleted": false, + "groupIds": [], + "frameId": null, + "boundElements": [], + "updated": 1777333910977, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "App Service\n(Flyte Apps)", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "app", + "originalText": "App Service\n(Flyte Apps)", + "autoResize": true, + "lineHeight": 1.25, + "index": "bpj", + "roundness": null + }, + { + "type": "text", + "id": "nd_d6_title", + "x": 1615.1251220703125, + "y": 2075.7656860351562, + "width": 1020.3507292056511, + "height": 36.27913703842315, + "text": "Diagram 6 — Abort Flow (sync DB update + async CRD cleanup)", + "originalText": "Diagram 6 — Abort Flow (sync DB update + async CRD cleanup)", + "fontSize": 24.941906713915916, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 98001, + "version": 85, + "versionNonce": 837489450, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bpk", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d6_k8s_box", + "x": 2411.6789246701906, + "y": 2143.7890679822, + "width": 680.2338194704341, + "height": 419.4775220067677, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 98002, + "version": 85, + "versionNonce": 73567350, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bpl", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d6_k8s_label", + "x": 2425.2836010595993, + "y": 2152.8588522418054, + "width": 294.7679884371881, + "height": 24.941906713915916, + "text": "☸ Kubernetes Cluster", + "originalText": "☸ Kubernetes Cluster", + "fontSize": 15.872122454310128, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 98003, + "version": 85, + "versionNonce": 1379081706, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bpm", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d6_dev", + "x": 1618.0728019546843, + "y": 2189.137989280229, + "width": 158.7212245431013, + "height": 79.36061227155065, + "strokeColor": "#495057", + "backgroundColor": "#f1f3f5", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 98004, + "version": 85, + "versionNonce": 1954909622, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d6_dev_text" + }, + { + "type": "arrow", + "id": "nd_d6_a1" + } + ], + "index": "bpn", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d6_dev_text", + "x": 1638.7196996266257, + "y": 2219.606795777342, + "width": 117.42742919921875, + "height": 18.42299927732426, + "text": "Developer / CLI", + "originalText": "Developer / CLI", + "fontSize": 14.738399421859405, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d6_dev", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 98005, + "version": 113, + "versionNonce": 715903146, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bpo", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d6_run", + "x": 1822.1429477958145, + "y": 2189.137989280229, + "width": 204.07014584113023, + "height": 79.36061227155065, + "strokeColor": "#7048e8", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 98006, + "version": 85, + "versionNonce": 53896950, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d6_run_text" + }, + { + "type": "arrow", + "id": "nd_d6_a1" + }, + { + "type": "arrow", + "id": "nd_d6_a2" + }, + { + "type": "arrow", + "id": "nd_d6_a3" + } + ], + "index": "bpp", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d6_run_text", + "x": 1862.584575892161, + "y": 2210.39529613868, + "width": 123.1868896484375, + "height": 36.84599855464852, + "text": "Runs Service\nAbortRun handler", + "originalText": "Runs Service\nAbortRun handler", + "fontSize": 14.738399421859405, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d6_run", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 98007, + "version": 113, + "versionNonce": 1056975722, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bpq", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d6_db", + "x": 2082.8992452594807, + "y": 2189.137989280229, + "width": 181.39568519211576, + "height": 79.36061227155065, + "strokeColor": "#1971c2", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 98008, + "version": 85, + "versionNonce": 1358567478, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d6_db_text" + }, + { + "type": "arrow", + "id": "nd_d6_a2" + }, + { + "type": "arrow", + "id": "nd_d6_a7" + } + ], + "index": "bpr", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d6_db_text", + "x": 2125.2311744644253, + "y": 2210.39529613868, + "width": 96.73182678222656, + "height": 36.84599855464852, + "text": "PostgreSQL\nactions table", + "originalText": "PostgreSQL\nactions table", + "fontSize": 14.738399421859405, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d6_db", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 98009, + "version": 113, + "versionNonce": 1702571562, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bps", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d6_reconciler", + "x": 1822.1429477958145, + "y": 2325.1847531743156, + "width": 204.07014584113023, + "height": 102.03507292056511, + "strokeColor": "#7048e8", + "backgroundColor": "#e5dbff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 98010, + "version": 85, + "versionNonce": 632660342, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d6_reconciler_text" + }, + { + "type": "arrow", + "id": "nd_d6_a3" + }, + { + "type": "arrow", + "id": "nd_d6_a4" + } + ], + "index": "bpt", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d6_reconciler_text", + "x": 1837.9928171641336, + "y": 2352.819252090302, + "width": 172.3704071044922, + "height": 46.766075088592345, + "text": "AbortReconciler\n5 workers + dedup queue\nretry w/ exp. backoff (≤10×)", + "originalText": "AbortReconciler\n5 workers + dedup queue\nretry w/ exp. backoff (≤10×)", + "fontSize": 12.470953356957958, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d6_reconciler", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 98011, + "version": 113, + "versionNonce": 1929894122, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bpu", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d6_actions", + "x": 2082.8992452594807, + "y": 2325.1847531743156, + "width": 204.07014584113023, + "height": 102.03507292056511, + "strokeColor": "#7048e8", + "backgroundColor": "#e5dbff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 98012, + "version": 85, + "versionNonce": 78512822, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d6_actions_text" + }, + { + "type": "arrow", + "id": "nd_d6_a4" + }, + { + "type": "arrow", + "id": "nd_d6_a5" + } + ], + "index": "bpv", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d6_actions_text", + "x": 2109.3350444984053, + "y": 2352.819252090302, + "width": 151.19854736328125, + "height": 46.766075088592345, + "text": "Actions Service\n(Abort handler)\n→ k8sClient.Delete CRD", + "originalText": "Actions Service\n(Abort handler)\n→ k8sClient.Delete CRD", + "fontSize": 12.470953356957958, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d6_actions", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 98013, + "version": 113, + "versionNonce": 1731275690, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bpw", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d6_crd_a0", + "x": 2445.6906156437126, + "y": 2211.812449929243, + "width": 181.39568519211576, + "height": 90.69784259605788, + "strokeColor": "#fd7e14", + "backgroundColor": "#ffd8a8", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 98014, + "version": 85, + "versionNonce": 1082670070, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d6_crd_a0_text" + }, + { + "type": "arrow", + "id": "nd_d6_a5" + }, + { + "type": "arrow", + "id": "nd_d6_a6" + } + ], + "index": "bpx", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d6_crd_a0_text", + "x": 2486.619293200708, + "y": 2240.155525740511, + "width": 99.538330078125, + "height": 34.0116909735217, + "text": "TaskAction a0\n(root CRD)", + "originalText": "TaskAction a0\n(root CRD)", + "fontSize": 13.60467638940868, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d6_crd_a0", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 98015, + "version": 113, + "versionNonce": 404891242, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bpy", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d6_crd_kids_b", + "x": 2887.8425982994945, + "y": 2218.6147881239476, + "width": 181.39568519211576, + "height": 90.69784259605788, + "strokeColor": "#fd7e14", + "backgroundColor": "#ffd8a8", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 98016, + "version": 85, + "versionNonce": 256462134, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bpz", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d6_crd_kids_a", + "x": 2879.9065370723392, + "y": 2226.5508493511024, + "width": 181.39568519211576, + "height": 90.69784259605788, + "strokeColor": "#fd7e14", + "backgroundColor": "#ffd8a8", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 98017, + "version": 85, + "versionNonce": 1587923242, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bq0", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d6_crd_kids", + "x": 2871.9704758451844, + "y": 2234.4869105782577, + "width": 181.39568519211576, + "height": 90.69784259605788, + "strokeColor": "#fd7e14", + "backgroundColor": "#ffd8a8", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 98018, + "version": 85, + "versionNonce": 508966518, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d6_crd_kids_text" + }, + { + "type": "arrow", + "id": "nd_d6_a6" + } + ], + "index": "bq1", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d6_crd_kids_text", + "x": 2885.841986348957, + "y": 2262.829986389526, + "width": 153.6526641845703, + "height": 34.0116909735217, + "text": "Child TaskAction CRDs\n(ownerRefs → a0)", + "originalText": "Child TaskAction CRDs\n(ownerRefs → a0)", + "fontSize": 13.60467638940868, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d6_crd_kids", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 98019, + "version": 113, + "versionNonce": 1109857258, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bq2", + "angle": 0 + }, + { + "type": "rectangle", + "id": "nd_d6_informer", + "x": 2593.0746098623067, + "y": 2404.545365445866, + "width": 317.4424490862026, + "height": 102.03507292056511, + "strokeColor": "#7048e8", + "backgroundColor": "#e5dbff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 98020, + "version": 85, + "versionNonce": 645134262, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d6_informer_text" + }, + { + "type": "arrow", + "id": "nd_d6_a7" + } + ], + "index": "bq3", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d6_informer_text", + "x": 2657.568318231092, + "y": 2430.0541336760075, + "width": 188.4550323486328, + "height": 51.01753646028256, + "text": "Actions Service informer\n(watches DELETED events)\n+ 10 reconcile workers", + "originalText": "Actions Service informer\n(watches DELETED events)\n+ 10 reconcile workers", + "fontSize": 13.60467638940868, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d6_informer", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 98021, + "version": 113, + "versionNonce": 615581354, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bq4", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d6_a1", + "x": 1776.7940264977856, + "y": 2228.818295416004, + "width": 45.34892129802894, + "height": 0, + "points": [ + [ + 0, + 0 + ], + [ + 45.34892129802894, + 0 + ] + ], + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 99001, + "version": 98, + "versionNonce": 2143785206, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d6_dev", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "endBinding": { + "elementId": "nd_d6_run", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d6_a1_label" + } + ], + "index": "bq5", + "angle": 0, + "lastCommittedPoint": null + }, + { + "type": "text", + "id": "nd_d6_a1_label", + "x": 1692.6, + "y": 2614, + "width": 68.22328186035156, + "height": 15.588691696197447, + "text": "1. AbortRun", + "originalText": "1. AbortRun", + "fontSize": 12.470953356957958, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d6_a1", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 99002, + "version": 32, + "versionNonce": 1861132650, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bq6", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d6_a2", + "x": 2026.2130936369447, + "y": 2223.1496802537504, + "width": 56.68615162253617, + "height": 0, + "points": [ + [ + 0, + 0 + ], + [ + 56.68615162253617, + 0 + ] + ], + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 99003, + "version": 98, + "versionNonce": 903217718, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d6_run", + "mode": "orbit", + "fixedPoint": [ + 0.6100448093353799, + 0.3899551906646073 + ] + }, + "endBinding": { + "elementId": "nd_d6_db", + "mode": "orbit", + "fixedPoint": [ + 0.3961807042734506, + 0.3961807042734433 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d6_a2_label" + } + ], + "index": "bq7", + "angle": 0, + "lastCommittedPoint": null + }, + { + "type": "text", + "id": "nd_d6_a2_label", + "x": 1914.6, + "y": 2608, + "width": 93.80097961425781, + "height": 28.343075811268086, + "text": "2. mark a0\nABORTED (sync)", + "originalText": "2. mark a0 ABORTED (sync)", + "fontSize": 11.337230324507235, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d6_a2", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 99004, + "version": 32, + "versionNonce": 1009443882, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bq8", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d6_a3", + "x": 1924.1780207163797, + "y": 2268.4986015517793, + "width": 0, + "height": 56.68615162253617, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 56.68615162253617 + ] + ], + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 99005, + "version": 98, + "versionNonce": 461654902, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d6_run", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "endBinding": { + "elementId": "nd_d6_reconciler", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d6_a3_label" + } + ], + "index": "bq9", + "angle": 0, + "lastCommittedPoint": null + }, + { + "type": "text", + "id": "nd_d6_a3_label", + "x": 1830.6, + "y": 2685, + "width": 115.90576171875, + "height": 14.171537905634043, + "text": "3. Push(a0) (async)", + "originalText": "3. Push(a0) (async)", + "fontSize": 11.337230324507235, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "middle", + "containerId": "nd_d6_a3", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 99006, + "version": 32, + "versionNonce": 105959146, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bqA", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d6_a4", + "x": 2026.2130936369447, + "y": 2376.202289634598, + "width": 56.68615162253617, + "height": 0, + "points": [ + [ + 0, + 0 + ], + [ + 56.68615162253617, + 0 + ] + ], + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 99007, + "version": 98, + "versionNonce": 1595370678, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d6_reconciler", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "endBinding": { + "elementId": "nd_d6_actions", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 0.5001 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d6_a4_label" + } + ], + "index": "bqB", + "angle": 0, + "lastCommittedPoint": null + }, + { + "type": "text", + "id": "nd_d6_a4_label", + "x": 1915.6, + "y": 2742, + "width": 46.75885009765625, + "height": 14.171537905634043, + "text": "4. Abort", + "originalText": "4. Abort", + "fontSize": 11.337230324507235, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d6_a4", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 99008, + "version": 32, + "versionNonce": 1374380458, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bqC", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d6_a5", + "x": 2286.969391100611, + "y": 2359.196444147837, + "width": 158.7212245431013, + "height": 102.03507292056511, + "points": [ + [ + 0, + 0 + ], + [ + 158.7212245431013, + -102.03507292056511 + ] + ], + "strokeColor": "#fd7e14", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 99009, + "version": 85, + "versionNonce": 506750454, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d6_actions", + "mode": "orbit", + "fixedPoint": [ + 0.6333066666667112, + 0.6333066666667138 + ] + }, + "endBinding": { + "elementId": "nd_d6_crd_a0", + "mode": "orbit", + "fixedPoint": [ + 0.26134318181817945, + 0.2613431818181823 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d6_a5_label" + } + ], + "index": "bqD", + "angle": 0, + "lastCommittedPoint": null + }, + { + "type": "text", + "id": "nd_d6_a5_label", + "x": 2152.6, + "y": 2695, + "width": 82.0631103515625, + "height": 14.171537905634043, + "text": "5. Delete CRD", + "originalText": "5. Delete CRD", + "fontSize": 11.337230324507235, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d6_a5", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#fd7e14", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 99010, + "version": 32, + "versionNonce": 1512414314, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bqE", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d6_a6", + "x": 2627.0863008358283, + "y": 2268.4986015517793, + "width": 244.88417500935628, + "height": 11.337230324507235, + "points": [ + [ + 0, + 0 + ], + [ + 244.88417500935628, + 11.337230324507235 + ] + ], + "strokeColor": "#fd7e14", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 99011, + "version": 99, + "versionNonce": 2044737334, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d6_crd_a0", + "mode": "orbit", + "fixedPoint": [ + 0.5978043478260873, + 0.5978043478260929 + ] + }, + "endBinding": { + "elementId": "nd_d6_crd_kids", + "mode": "orbit", + "fixedPoint": [ + 0.44049433279359673, + 0.5595056672064004 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d6_a6_label" + } + ], + "index": "bqF", + "angle": 0, + "lastCommittedPoint": null + }, + { + "type": "text", + "id": "nd_d6_a6_label", + "x": 2462.6, + "y": 2648, + "width": 128.82196044921875, + "height": 28.343075811268086, + "text": "6. K8s cascade delete\n(ownerRefs)", + "originalText": "6. K8s cascade delete (ownerRefs)", + "fontSize": 11.337230324507235, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d6_a6", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#fd7e14", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 99012, + "version": 32, + "versionNonce": 1019903786, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bqG", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d6_a7", + "x": 2593.0746098623067, + "y": 2438.5570564193877, + "width": 419.4775220067677, + "height": 170.05845486760853, + "points": [ + [ + 0, + 0 + ], + [ + -419.4775220067677, + -170.05845486760853 + ] + ], + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 99013, + "version": 85, + "versionNonce": 713023606, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d6_informer", + "mode": "orbit", + "fixedPoint": [ + 0, + 0.3333333333333333 + ] + }, + "endBinding": { + "elementId": "nd_d6_db", + "mode": "orbit", + "fixedPoint": [ + 0.5001, + 1 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d6_a7_label" + } + ], + "index": "bqH", + "angle": 0, + "lastCommittedPoint": null + }, + { + "type": "text", + "id": "nd_d6_a7_label", + "x": 2152.6, + "y": 2830, + "width": 246.44989013671875, + "height": 14.171537905634043, + "text": "7. UpdateActionStatus=ABORTED (children)", + "originalText": "7. UpdateActionStatus=ABORTED (children)", + "fontSize": 11.337230324507235, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d6_a7", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 99014, + "version": 32, + "versionNonce": 642058730, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bqI", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d6_legend", + "x": 1615.1251220703125, + "y": 2565.621356773757, + "width": 1597.7724609375, + "height": 120, + "text": "Abort flow — fast ACK, eventual convergence.\n\n• Steps 1–3 are synchronous on the request path: Runs Service marks root action a0 ABORTED in Postgres and enqueues it on the AbortReconciler before replying to the client.\n• Steps 4–5 run in the background: 5 reconciler workers drain a dedup'd queue and call ActionsService.Abort, which issues a k8s Delete on the a0 TaskAction CRD (≤10 retries w/ exponential backoff).\n• Step 6: Kubernetes performs cascade deletion of all child TaskAction CRDs via OwnerReferences — no per-child RPC needed.\n• Step 7: the Actions Service informer observes DELETED events for every child and calls UpdateActionStatus=ABORTED, so the DB converges to ABORTED for the whole subtree.", + "originalText": "Abort flow — fast ACK, eventual convergence.\n\n• Steps 1–3 are synchronous on the request path: Runs Service marks root action a0 ABORTED in Postgres and enqueues it on the AbortReconciler before replying to the client.\n• Steps 4–5 run in the background: 5 reconciler workers drain a dedup'd queue and call ActionsService.Abort, which issues a k8s Delete on the a0 TaskAction CRD (≤10 retries w/ exponential backoff).\n• Step 6: Kubernetes performs cascade deletion of all child TaskAction CRDs via OwnerReferences — no per-child RPC needed.\n• Step 7: the Actions Service informer observes DELETED events for every child and calls UpdateActionStatus=ABORTED, so the DB converges to ABORTED for the whole subtree.", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 99015, + "version": 90, + "versionNonce": 332947894, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bqJ", + "angle": 0 + }, + { + "id": "VDrTTlXTUXb-T0X2ZzvE9", + "type": "image", + "x": -1042.4053980750487, + "y": 1281.0054405530295, + "width": 971.0556691969741, + "height": 426.8598879178365, + "angle": 0, + "strokeColor": "transparent", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bqK", + "roundness": null, + "seed": 1915445024, + "version": 130, + "versionNonce": 2107653290, + "isDeleted": false, + "boundElements": [], + "updated": 1777333910977, + "link": null, + "locked": false, + "status": "saved", + "fileId": "de7316c779e0fa00d6e5a1b86d5dd5293e3f8ae1", + "scale": [ + 1, + 1 + ], + "crop": null + }, + { + "id": "koAeMt6Vlzqpj8wWsHyAp", + "type": "image", + "x": -567.3475435364912, + "y": 2064.3531378421417, + "width": 531.5725132204451, + "height": 645.9496677405409, + "angle": 0, + "strokeColor": "transparent", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bqL", + "roundness": null, + "seed": 1705280288, + "version": 37, + "versionNonce": 1494137590, + "isDeleted": false, + "boundElements": [], + "updated": 1777333910977, + "link": null, + "locked": false, + "status": "saved", + "fileId": "e404b7a887fceedd6ff6f4037941f0654fef2ff3", + "scale": [ + 1, + 1 + ], + "crop": null + }, + { + "type": "rectangle", + "id": "nd_d3_bloom", + "x": 782.4375697544642, + "y": 2189.3883841378347, + "width": 110, + "height": 60, + "strokeColor": "#d9480f", + "backgroundColor": "#ffe8cc", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 99501, + "version": 101, + "versionNonce": 277288810, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d3_bloom_text" + }, + { + "type": "arrow", + "id": "nd_d3_bloom_arrow" + } + ], + "index": "bqM", + "angle": 0 + }, + { + "type": "text", + "id": "nd_d3_bloom_text", + "x": 787.4375697544642, + "y": 2198.3883841378347, + "width": 100, + "height": 42, + "text": "OppoBloom\n(RecordAction\ndedup)", + "originalText": "OppoBloom\n(RecordAction\ndedup)", + "fontSize": 10, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d3_bloom", + "lineHeight": 1.25, + "autoResize": false, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 99502, + "version": 101, + "versionNonce": 1890053174, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bqN", + "angle": 0 + }, + { + "type": "arrow", + "id": "nd_d3_bloom_arrow", + "x": 741, + "y": 2225, + "width": 35.43756975446422, + "height": 1.9214910304035584, + "points": [ + [ + 0, + 0 + ], + [ + 35.43756975446422, + 1.9214910304035584 + ] + ], + "strokeColor": "#d9480f", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 99503, + "version": 101, + "versionNonce": 1061460522, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "startArrowhead": null, + "endArrowhead": "arrow", + "startBinding": { + "elementId": "nd_d3_worker_front", + "mode": "inside", + "fixedPoint": [ + 0.9966956505408654, + 0.8196875 + ] + }, + "endBinding": { + "elementId": "nd_d3_bloom", + "mode": "orbit", + "fixedPoint": [ + 0.3356592389399018, + 0.6643407610600964 + ] + }, + "elbowed": false, + "boundElements": [ + { + "type": "text", + "id": "nd_d3_bloom_arrow_label" + } + ], + "index": "bqO", + "angle": 0, + "lastCommittedPoint": null, + "moveMidPointsWithElement": false + }, + { + "type": "text", + "id": "nd_d3_bloom_arrow_label", + "x": 720, + "y": 2260, + "width": 52.532928466796875, + "height": 11.25, + "text": "check / add", + "originalText": "check / add", + "fontSize": 9, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nd_d3_bloom_arrow", + "lineHeight": 1.25, + "autoResize": true, + "strokeColor": "#d9480f", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 99504, + "version": 4, + "versionNonce": 948499830, + "isDeleted": false, + "updated": 1777333910977, + "link": null, + "locked": false, + "boundElements": [], + "index": "bqP", + "angle": 0 + }, + { + "id": "scal-title", + "type": "text", + "x": 3500, + "y": 50, + "width": 688, + "height": 35, + "angle": 0, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1597319870, + "version": 4, + "versionNonce": 682847274, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Scalability: OSS Flyte v2 vs Cloud Leasor", + "fontSize": 28, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Scalability: OSS Flyte v2 vs Cloud Leasor", + "lineHeight": 1.25, + "autoResize": true, + "index": "bqQ" + }, + { + "id": "scal-subtitle", + "type": "text", + "x": 3500, + "y": 95, + "width": 643, + "height": 20, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 479643179, + "version": 4, + "versionNonce": 2141733750, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Dispatch substrate comparison — where state lives and what caps it.", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Dispatch substrate comparison — where state lives and what caps it.", + "lineHeight": 1.25, + "autoResize": true, + "index": "bqR" + }, + { + "id": "scal-oss-bg", + "type": "rectangle", + "x": 3500, + "y": 160, + "width": 520, + "height": 920, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "seed": 462042562, + "version": 4, + "versionNonce": 1619547882, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "bqS" + }, + { + "id": "scal-oss-bg-t", + "type": "text", + "x": 3760, + "y": 609, + "width": 0, + "height": 22, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 766916576, + "version": 4, + "versionNonce": 1301712886, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333910977, + "link": null, + "locked": false, + "text": "", + "fontSize": 18, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "scal-oss-bg", + "originalText": "", + "lineHeight": 1.25, + "autoResize": true, + "index": "bqT" + }, + { + "id": "scal-cloud-bg", + "type": "rectangle", + "x": 4100, + "y": 160, + "width": 520, + "height": 920, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "seed": 720629071, + "version": 4, + "versionNonce": 201090230, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "bqU" + }, + { + "id": "scal-cloud-bg-t", + "type": "text", + "x": 4360, + "y": 609, + "width": 0, + "height": 22, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 307434469, + "version": 4, + "versionNonce": 258810166, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333910977, + "link": null, + "locked": false, + "text": "", + "fontSize": 18, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "scal-cloud-bg", + "originalText": "", + "lineHeight": 1.25, + "autoResize": true, + "index": "bqV" + }, + { + "id": "scal-oss-title", + "type": "text", + "x": 3540, + "y": 175, + "width": 276, + "height": 50, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 544224844, + "version": 4, + "versionNonce": 200403370, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "OSS Flyte v2\nCRD + informer dispatch", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "OSS Flyte v2\nCRD + informer dispatch", + "lineHeight": 1.25, + "autoResize": true, + "index": "bqW" + }, + { + "id": "scal-cloud-title", + "type": "text", + "x": 4140, + "y": 175, + "width": 240, + "height": 50, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1424956453, + "version": 4, + "versionNonce": 1404722678, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Cloud\nLeasor + leaseworker", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Cloud\nLeasor + leaseworker", + "lineHeight": 1.25, + "autoResize": true, + "index": "bqX" + }, + { + "id": "scal-oss-as", + "type": "rectangle", + "x": 3570, + "y": 250, + "width": 380, + "height": 80, + "angle": 0, + "strokeColor": "#7048e8", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1313225240, + "version": 4, + "versionNonce": 572204138, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "scal-oss-as-t" + } + ], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "bqY" + }, + { + "id": "scal-oss-as-t", + "type": "text", + "x": 3684.5, + "y": 279, + "width": 151, + "height": 22, + "angle": 0, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1588366309, + "version": 4, + "versionNonce": 2078748470, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "ActionsService", + "fontSize": 18, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "scal-oss-as", + "originalText": "ActionsService", + "lineHeight": 1.25, + "autoResize": true, + "index": "bqZ" + }, + { + "id": "scal-cl-as", + "type": "rectangle", + "x": 4170, + "y": 250, + "width": 380, + "height": 80, + "angle": 0, + "strokeColor": "#7048e8", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 394960105, + "version": 4, + "versionNonce": 2093942570, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "scal-cl-as-t" + } + ], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "bqa" + }, + { + "id": "scal-cl-as-t", + "type": "text", + "x": 4284.5, + "y": 279, + "width": 151, + "height": 22, + "angle": 0, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 867013523, + "version": 4, + "versionNonce": 1088936054, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "ActionsService", + "fontSize": 18, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "scal-cl-as", + "originalText": "ActionsService", + "lineHeight": 1.25, + "autoResize": true, + "index": "bqb" + }, + { + "id": "scal-oss-api", + "type": "rectangle", + "x": 3570, + "y": 380, + "width": 380, + "height": 80, + "angle": 0, + "strokeColor": "#4c6ef5", + "backgroundColor": "#bac8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1194130301, + "version": 4, + "versionNonce": 75010538, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "scal-oss-api-t" + } + ], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "bqc" + }, + { + "id": "scal-oss-api-t", + "type": "text", + "x": 3620, + "y": 397.5, + "width": 280, + "height": 45, + "angle": 0, + "strokeColor": "#4c6ef5", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 753496675, + "version": 4, + "versionNonce": 176249270, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "kube-apiserver\n(admission + watch fanout)", + "fontSize": 18, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "scal-oss-api", + "originalText": "kube-apiserver\n(admission + watch fanout)", + "lineHeight": 1.25, + "autoResize": true, + "index": "bqd" + }, + { + "id": "scal-cl-leasor", + "type": "rectangle", + "x": 4170, + "y": 380, + "width": 380, + "height": 80, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "#ffa8a8", + "fillStyle": "solid", + "strokeWidth": 3, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 298117960, + "version": 4, + "versionNonce": 1545782442, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "scal-cl-leasor-t" + } + ], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "bqe" + }, + { + "id": "scal-cl-leasor-t", + "type": "text", + "x": 4221.5, + "y": 394, + "width": 277, + "height": 52, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 2006238529, + "version": 4, + "versionNonce": 2144908022, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Leasor\nsharded in-mem store · 256 shards\n50k ops/s target", + "fontSize": 14, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "scal-cl-leasor", + "originalText": "Leasor\nsharded in-mem store · 256 shards\n50k ops/s target", + "lineHeight": 1.25, + "autoResize": true, + "index": "bqf" + }, + { + "id": "scal-oss-etcd", + "type": "rectangle", + "x": 3570, + "y": 510, + "width": 380, + "height": 90, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "#ffc9c9", + "fillStyle": "solid", + "strokeWidth": 3, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1299798096, + "version": 4, + "versionNonce": 226008938, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "scal-oss-etcd-t" + } + ], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "bqg" + }, + { + "id": "scal-oss-etcd-t", + "type": "text", + "x": 3638.5, + "y": 536.5, + "width": 243, + "height": 37, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 928838215, + "version": 4, + "versionNonce": 460514358, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "etcd ⚠ BOTTLENECK\n≤ 8 GB DB · ~5–10k writes/s", + "fontSize": 15, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "scal-oss-etcd", + "originalText": "etcd ⚠ BOTTLENECK\n≤ 8 GB DB · ~5–10k writes/s", + "lineHeight": 1.25, + "autoResize": true, + "index": "bqh" + }, + { + "id": "scal-cl-db", + "type": "rectangle", + "x": 4170, + "y": 510, + "width": 380, + "height": 90, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "#b2f2bb", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 187678714, + "version": 4, + "versionNonce": 885334570, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "scal-cl-db-t" + } + ], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "bqi" + }, + { + "id": "scal-cl-db-t", + "type": "text", + "x": 4259.5, + "y": 529, + "width": 201, + "height": 52, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1752911695, + "version": 4, + "versionNonce": 1060433270, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "SQLite / Scylla\nnarrow UPDATE heartbeats\nmirror, not on read path", + "fontSize": 14, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "scal-cl-db", + "originalText": "SQLite / Scylla\nnarrow UPDATE heartbeats\nmirror, not on read path", + "lineHeight": 1.25, + "autoResize": true, + "index": "bqj" + }, + { + "id": "scal-oss-exec", + "type": "rectangle", + "x": 3570, + "y": 650, + "width": 380, + "height": 90, + "angle": 0, + "strokeColor": "#fd7e14", + "backgroundColor": "#ffe8cc", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 997192942, + "version": 4, + "versionNonce": 754142442, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "scal-oss-exec-t" + } + ], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "bqk" + }, + { + "id": "scal-oss-exec-t", + "type": "text", + "x": 3638.5, + "y": 669, + "width": 243, + "height": 52, + "angle": 0, + "strokeColor": "#fd7e14", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1810747262, + "version": 4, + "versionNonce": 1214500534, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Executor replicas\ninformer cache (read-through)\nstatus via kube-apiserver", + "fontSize": 14, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "scal-oss-exec", + "originalText": "Executor replicas\ninformer cache (read-through)\nstatus via kube-apiserver", + "lineHeight": 1.25, + "autoResize": true, + "index": "bql" + }, + { + "id": "scal-cl-worker", + "type": "rectangle", + "x": 4170, + "y": 650, + "width": 380, + "height": 90, + "angle": 0, + "strokeColor": "#1971c2", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1475037529, + "version": 4, + "versionNonce": 999169962, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "scal-cl-worker-t" + } + ], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "bqm" + }, + { + "id": "scal-cl-worker-t", + "type": "text", + "x": 4272, + "y": 669, + "width": 176, + "height": 52, + "angle": 0, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1285270568, + "version": 4, + "versionNonce": 597985270, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Leaseworkers\npush via StreamLeases\nmulti-cluster fleet", + "fontSize": 14, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "scal-cl-worker", + "originalText": "Leaseworkers\npush via StreamLeases\nmulti-cluster fleet", + "lineHeight": 1.25, + "autoResize": true, + "index": "bqn" + }, + { + "id": "scal-oss-pods", + "type": "rectangle", + "x": 3570, + "y": 790, + "width": 380, + "height": 80, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1805856862, + "version": 4, + "versionNonce": 1019255402, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "scal-oss-pods-t" + } + ], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "bqo" + }, + { + "id": "scal-oss-pods-t", + "type": "text", + "x": 3647.5, + "y": 821, + "width": 225, + "height": 18, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1352392953, + "version": 4, + "versionNonce": 1627134262, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Pods (single K8s cluster)", + "fontSize": 15, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "scal-oss-pods", + "originalText": "Pods (single K8s cluster)", + "lineHeight": 1.25, + "autoResize": true, + "index": "bqp" + }, + { + "id": "scal-cl-pods", + "type": "rectangle", + "x": 4170, + "y": 790, + "width": 380, + "height": 80, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1763503043, + "version": 4, + "versionNonce": 1331019050, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "scal-cl-pods-t" + } + ], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "bqq" + }, + { + "id": "scal-cl-pods-t", + "type": "text", + "x": 4216, + "y": 821, + "width": 288, + "height": 18, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1175656221, + "version": 4, + "versionNonce": 1204781686, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Pods (K8s cluster A · B · C ...)", + "fontSize": 15, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "scal-cl-pods", + "originalText": "Pods (K8s cluster A · B · C ...)", + "lineHeight": 1.25, + "autoResize": true, + "index": "bqr" + }, + { + "id": "scal-oss-ceil", + "type": "rectangle", + "x": 3570, + "y": 930, + "width": 380, + "height": 70, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "#fff5f5", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "seed": 1825645539, + "version": 4, + "versionNonce": 12093418, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "scal-oss-ceil-t" + } + ], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "bqs" + }, + { + "id": "scal-oss-ceil-t", + "type": "text", + "x": 3638.5, + "y": 947.5, + "width": 243, + "height": 35, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1500692290, + "version": 4, + "versionNonce": 1793311670, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Ceiling: ~10k–100k concurrent\nper cluster (etcd cap)", + "fontSize": 14, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "scal-oss-ceil", + "originalText": "Ceiling: ~10k–100k concurrent\nper cluster (etcd cap)", + "lineHeight": 1.25, + "autoResize": true, + "index": "bqt" + }, + { + "id": "scal-cl-ceil", + "type": "rectangle", + "x": 4170, + "y": 930, + "width": 380, + "height": 70, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "#ebfbee", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "seed": 1070046750, + "version": 4, + "versionNonce": 2029255338, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "scal-cl-ceil-t" + } + ], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "bqu" + }, + { + "id": "scal-cl-ceil-t", + "type": "text", + "x": 4205, + "y": 947.5, + "width": 310, + "height": 35, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1613635235, + "version": 4, + "versionNonce": 1012784374, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Ceiling: millions per node · billions\nwith sharded leasor fleet", + "fontSize": 14, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "scal-cl-ceil", + "originalText": "Ceiling: millions per node · billions\nwith sharded leasor fleet", + "lineHeight": 1.25, + "autoResize": true, + "index": "bqv" + }, + { + "id": "scal-a1", + "type": "arrow", + "x": 3760, + "y": 330, + "width": 0, + "height": 50, + "angle": 0, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "seed": 1074471344, + "version": 4, + "versionNonce": 649270634, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "scal-a1-lbl" + } + ], + "updated": 1777333919168, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 0, + 50 + ] + ], + "elbowed": false, + "index": "bqw" + }, + { + "id": "scal-a1-lbl", + "type": "text", + "x": 3676, + "y": 346.5, + "width": 168, + "height": 17, + "angle": 0, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 2073389369, + "version": 4, + "versionNonce": 566414902, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Create TaskAction CR", + "fontSize": 14, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "scal-a1", + "originalText": "Create TaskAction CR", + "lineHeight": 1.25, + "autoResize": true, + "index": "bqx" + }, + { + "id": "scal-a2", + "type": "arrow", + "x": 3760, + "y": 460, + "width": 0, + "height": 50, + "angle": 0, + "strokeColor": "#4c6ef5", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "seed": 1999987397, + "version": 4, + "versionNonce": 1799411754, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "scal-a2-lbl" + } + ], + "updated": 1777333919168, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 0, + 50 + ] + ], + "elbowed": false, + "index": "bqy" + }, + { + "id": "scal-a2-lbl", + "type": "text", + "x": 3731, + "y": 476.5, + "width": 58, + "height": 17, + "angle": 0, + "strokeColor": "#4c6ef5", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1933917376, + "version": 4, + "versionNonce": 133666678, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "persist", + "fontSize": 14, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "scal-a2", + "originalText": "persist", + "lineHeight": 1.25, + "autoResize": true, + "index": "bqz" + }, + { + "id": "scal-a3", + "type": "arrow", + "x": 3760, + "y": 600, + "width": 0, + "height": 50, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "seed": 8128693, + "version": 4, + "versionNonce": 1183335146, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "scal-a3-lbl" + } + ], + "updated": 1777333919168, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 0, + 50 + ] + ], + "elbowed": false, + "index": "br0" + }, + { + "id": "scal-a3-lbl", + "type": "text", + "x": 3689, + "y": 616.5, + "width": 142, + "height": 17, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1573430380, + "version": 4, + "versionNonce": 2000763062, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "watch fanout (N×)", + "fontSize": 14, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "scal-a3", + "originalText": "watch fanout (N×)", + "lineHeight": 1.25, + "autoResize": true, + "index": "br1" + }, + { + "id": "scal-a4", + "type": "arrow", + "x": 3760, + "y": 740, + "width": 0, + "height": 50, + "angle": 0, + "strokeColor": "#fd7e14", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "seed": 1177292490, + "version": 4, + "versionNonce": 51664298, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "scal-a4-lbl" + } + ], + "updated": 1777333919168, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 0, + 50 + ] + ], + "elbowed": false, + "index": "br2" + }, + { + "id": "scal-a4-lbl", + "type": "text", + "x": 3718, + "y": 756.5, + "width": 84, + "height": 17, + "angle": 0, + "strokeColor": "#fd7e14", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 369555259, + "version": 4, + "versionNonce": 658813430, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "create Pod", + "fontSize": 14, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "scal-a4", + "originalText": "create Pod", + "lineHeight": 1.25, + "autoResize": true, + "index": "br3" + }, + { + "id": "scal-b1", + "type": "arrow", + "x": 4360, + "y": 330, + "width": 0, + "height": 50, + "angle": 0, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "seed": 811577833, + "version": 4, + "versionNonce": 1645219946, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "scal-b1-lbl" + } + ], + "updated": 1777333919168, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 0, + 50 + ] + ], + "elbowed": false, + "index": "br4" + }, + { + "id": "scal-b1-lbl", + "type": "text", + "x": 4289, + "y": 346.5, + "width": 142, + "height": 17, + "angle": 0, + "strokeColor": "#7048e8", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1594320034, + "version": 4, + "versionNonce": 319226678, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "EnqueueAction RPC", + "fontSize": 14, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "scal-b1", + "originalText": "EnqueueAction RPC", + "lineHeight": 1.25, + "autoResize": true, + "index": "br5" + }, + { + "id": "scal-b2", + "type": "arrow", + "x": 4360, + "y": 460, + "width": 0, + "height": 50, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "seed": 1235533421, + "version": 4, + "versionNonce": 1195799338, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "scal-b2-lbl" + } + ], + "updated": 1777333919168, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 0, + 50 + ] + ], + "elbowed": false, + "index": "br6" + }, + { + "id": "scal-b2-lbl", + "type": "text", + "x": 4301.5, + "y": 476.5, + "width": 117, + "height": 17, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1139082709, + "version": 4, + "versionNonce": 216870006, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "mirror (async)", + "fontSize": 14, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "scal-b2", + "originalText": "mirror (async)", + "lineHeight": 1.25, + "autoResize": true, + "index": "br7" + }, + { + "id": "scal-b3", + "type": "arrow", + "x": 4360, + "y": 740, + "width": 0, + "height": 50, + "angle": 0, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "seed": 1644296374, + "version": 4, + "versionNonce": 1696759274, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "scal-b3-lbl" + } + ], + "updated": 1777333919168, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 0, + 50 + ] + ], + "elbowed": false, + "index": "br8" + }, + { + "id": "scal-b3-lbl", + "type": "text", + "x": 4318, + "y": 756.5, + "width": 84, + "height": 17, + "angle": 0, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1272895240, + "version": 4, + "versionNonce": 1388064182, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "create Pod", + "fontSize": 14, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "scal-b3", + "originalText": "create Pod", + "lineHeight": 1.25, + "autoResize": true, + "index": "br9" + }, + { + "id": "scal-b-stream", + "type": "arrow", + "x": 4400, + "y": 460, + "width": 70, + "height": 330, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "seed": 1839961828, + "version": 4, + "versionNonce": 1756311722, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "scal-b-stream-lbl" + } + ], + "updated": 1777333919168, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 70, + 0 + ], + [ + 70, + 330 + ], + [ + 0, + 330 + ] + ], + "elbowed": true, + "index": "brA", + "fixedSegments": null + }, + { + "id": "scal-b-stream-lbl", + "type": "text", + "x": 4390.5, + "y": 616.5, + "width": 159, + "height": 17, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 513331323, + "version": 4, + "versionNonce": 563676918, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "StreamLeases (push)", + "fontSize": 14, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "scal-b-stream", + "originalText": "StreamLeases (push)", + "lineHeight": 1.25, + "autoResize": true, + "index": "brB" + }, + { + "id": "scal-summary", + "type": "text", + "x": 3500, + "y": 1030, + "width": 652, + "height": 40, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 462822210, + "version": 4, + "versionNonce": 630688618, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Informer cache ≠ authoritative store — etcd stays on the write path.\nLeasor in-memory shards are authoritative; DB is durability-only.", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Informer cache ≠ authoritative store — etcd stays on the write path.\nLeasor in-memory shards are authoritative; DB is durability-only.", + "lineHeight": 1.25, + "autoResize": true, + "index": "brC" + }, + { + "id": "scal-n-crsize", + "type": "rectangle", + "x": 3270, + "y": 375, + "width": 210, + "height": 74, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "#fff5f5", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "seed": 2063122, + "version": 4, + "versionNonce": 1242085430, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "brD" + }, + { + "id": "scal-n-crsize-t", + "type": "text", + "x": 3280, + "y": 383, + "width": 129, + "height": 60, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 443361411, + "version": 4, + "versionNonce": 1109823018, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "TaskAction CR size\n~5–50 KB in etcd\n(spec + status +\nmanagedFields)", + "fontSize": 12, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "TaskAction CR size\n~5–50 KB in etcd\n(spec + status +\nmanagedFields)", + "lineHeight": 1.25, + "autoResize": true, + "index": "brE" + }, + { + "id": "scal-n-etcd", + "type": "rectangle", + "x": 3270, + "y": 505, + "width": 210, + "height": 74, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "#fff5f5", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "seed": 817806171, + "version": 4, + "versionNonce": 1139818870, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "brF" + }, + { + "id": "scal-n-etcd-t", + "type": "text", + "x": 3280, + "y": 513, + "width": 172, + "height": 75, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1397594668, + "version": 4, + "versionNonce": 1665612010, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "etcd limits\nDB ≤ 8 GB (hard ~10 GB)\n~150k–1.5M objects total\nshared w/ Pods+CMs+...\nWrites: ~5–10k/s", + "fontSize": 12, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "etcd limits\nDB ≤ 8 GB (hard ~10 GB)\n~150k–1.5M objects total\nshared w/ Pods+CMs+...\nWrites: ~5–10k/s", + "lineHeight": 1.25, + "autoResize": true, + "index": "brG" + }, + { + "id": "scal-n-fanout", + "type": "rectangle", + "x": 3270, + "y": 645, + "width": 210, + "height": 74, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "#fff5f5", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "seed": 566927550, + "version": 4, + "versionNonce": 1117037238, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "brH" + }, + { + "id": "scal-n-fanout-t", + "type": "text", + "x": 3280, + "y": 653, + "width": 144, + "height": 60, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1940005380, + "version": 4, + "versionNonce": 1485081514, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Watch fanout\nO(N) apiserver CPU\nper event ×\n(replicas × objects)", + "fontSize": 12, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Watch fanout\nO(N) apiserver CPU\nper event ×\n(replicas × objects)", + "lineHeight": 1.25, + "autoResize": true, + "index": "brI" + }, + { + "id": "scal-n-ossceil", + "type": "rectangle", + "x": 3270, + "y": 925, + "width": 210, + "height": 74, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "#ffe3e3", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "seed": 1393563886, + "version": 4, + "versionNonce": 1218108406, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "brJ" + }, + { + "id": "scal-n-ossceil-t", + "type": "text", + "x": 3280, + "y": 933, + "width": 179, + "height": 75, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1496305164, + "version": 4, + "versionNonce": 1208583786, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "@ 10 KB/CR avg:\n• 8 GB etcd → ~800k objs\n• But shared w/ Pods etc.\n→ ~10k–100k live\n concurrent TaskActions", + "fontSize": 12, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "@ 10 KB/CR avg:\n• 8 GB etcd → ~800k objs\n• But shared w/ Pods etc.\n→ ~10k–100k live\n concurrent TaskActions", + "lineHeight": 1.25, + "autoResize": true, + "index": "brK" + }, + { + "id": "scal-n-leasor", + "type": "rectangle", + "x": 4640, + "y": 375, + "width": 210, + "height": 74, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "#ebfbee", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "seed": 2059502636, + "version": 4, + "versionNonce": 1007152438, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "brL" + }, + { + "id": "scal-n-leasor-t", + "type": "text", + "x": 4650, + "y": 383, + "width": 179, + "height": 75, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1572842728, + "version": 4, + "versionNonce": 1520511274, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Per-action footprint\n• ~200 B struct + timings\n• + action_data blob\n (2–10 KB typical)\n= 2–10 KB live / action", + "fontSize": 12, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Per-action footprint\n• ~200 B struct + timings\n• + action_data blob\n (2–10 KB typical)\n= 2–10 KB live / action", + "lineHeight": 1.25, + "autoResize": true, + "index": "brM" + }, + { + "id": "scal-n-db", + "type": "rectangle", + "x": 4640, + "y": 505, + "width": 210, + "height": 74, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "#ebfbee", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "seed": 1257683975, + "version": 4, + "versionNonce": 2051069558, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "brN" + }, + { + "id": "scal-n-db-t", + "type": "text", + "x": 4650, + "y": 513, + "width": 187, + "height": 75, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1011454709, + "version": 4, + "versionNonce": 1740010474, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "DB writes\nNarrow UPDATE per HB\n(2 cols, no blob rewrite)\n→ 50k ops/s target\nScylla scales horizontally", + "fontSize": 12, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "DB writes\nNarrow UPDATE per HB\n(2 cols, no blob rewrite)\n→ 50k ops/s target\nScylla scales horizontally", + "lineHeight": 1.25, + "autoResize": true, + "index": "brO" + }, + { + "id": "scal-n-stream", + "type": "rectangle", + "x": 4640, + "y": 645, + "width": 210, + "height": 74, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "#ebfbee", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "seed": 1479876331, + "version": 4, + "versionNonce": 1812633526, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "brP" + }, + { + "id": "scal-n-stream-t", + "type": "text", + "x": 4650, + "y": 653, + "width": 165, + "height": 75, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1050032259, + "version": 4, + "versionNonce": 559179434, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Push dispatch\n1 lease → 1 worker only\nNo fanout · No poll\nGeneration fencing\nprevents dual-ownership", + "fontSize": 12, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Push dispatch\n1 lease → 1 worker only\nNo fanout · No poll\nGeneration fencing\nprevents dual-ownership", + "lineHeight": 1.25, + "autoResize": true, + "index": "brQ" + }, + { + "id": "scal-n-clceil", + "type": "rectangle", + "x": 4640, + "y": 925, + "width": 210, + "height": 74, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "#ebfbee", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "seed": 70821381, + "version": 4, + "versionNonce": 428486902, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "brR" + }, + { + "id": "scal-n-clceil-t", + "type": "text", + "x": 4650, + "y": 933, + "width": 172, + "height": 90, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 2118247581, + "version": 4, + "versionNonce": 1076232554, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Capacity by RAM:\n• 32 GB → ~3M concurrent\n• 128 GB → ~13M\n• 512 GB + blob offload\n → ~50–500M\n• 20× shard fleet → Bs", + "fontSize": 12, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Capacity by RAM:\n• 32 GB → ~3M concurrent\n• 128 GB → ~13M\n• 512 GB + blob offload\n → ~50–500M\n• 20× shard fleet → Bs", + "lineHeight": 1.25, + "autoResize": true, + "index": "brS" + }, + { + "id": "scal-tbl-title", + "type": "text", + "x": 3500, + "y": 1020, + "width": 504, + "height": 25, + "angle": 0, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1293101412, + "version": 4, + "versionNonce": 1044685366, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "By the numbers — per-action cost & ceiling", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "By the numbers — per-action cost & ceiling", + "lineHeight": 1.25, + "autoResize": true, + "index": "brT" + }, + { + "id": "scal-tbl-bg", + "type": "rectangle", + "x": 3500, + "y": 1052, + "width": 1120, + "height": 260, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#f8f9fa", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1777984990, + "version": 4, + "versionNonce": 796279850, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "brU" + }, + { + "id": "scal-tbl-h1", + "type": "text", + "x": 3520, + "y": 1064, + "width": 50, + "height": 17, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1573013408, + "version": 4, + "versionNonce": 1562307446, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Metric", + "fontSize": 14, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Metric", + "lineHeight": 1.25, + "autoResize": true, + "index": "brV" + }, + { + "id": "scal-tbl-h2", + "type": "text", + "x": 3840, + "y": 1064, + "width": 159, + "height": 17, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1991377287, + "version": 4, + "versionNonce": 959459050, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "OSS v2 (CRD + etcd)", + "fontSize": 14, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "OSS v2 (CRD + etcd)", + "lineHeight": 1.25, + "autoResize": true, + "index": "brW" + }, + { + "id": "scal-tbl-h3", + "type": "text", + "x": 4220, + "y": 1064, + "width": 235, + "height": 17, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 998834589, + "version": 4, + "versionNonce": 1415449782, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Cloud (Leasor + leaseworker)", + "fontSize": 14, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Cloud (Leasor + leaseworker)", + "lineHeight": 1.25, + "autoResize": true, + "index": "brX" + }, + { + "id": "scal-tbl-r0-a", + "type": "text", + "x": 3520, + "y": 1094, + "width": 202, + "height": 16, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1408768151, + "version": 4, + "versionNonce": 836682154, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Per-action serialized size", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Per-action serialized size", + "lineHeight": 1.25, + "autoResize": true, + "index": "brY" + }, + { + "id": "scal-tbl-r0-b", + "type": "text", + "x": 3840, + "y": 1094, + "width": 218, + "height": 32, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 502617411, + "version": 4, + "versionNonce": 1906771446, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "~5–50 KB (CR spec + status +\nmanagedFields + finalizers)", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "~5–50 KB (CR spec + status +\nmanagedFields + finalizers)", + "lineHeight": 1.25, + "autoResize": true, + "index": "brZ" + }, + { + "id": "scal-tbl-r0-c", + "type": "text", + "x": 4220, + "y": 1094, + "width": 226, + "height": 32, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1324029819, + "version": 4, + "versionNonce": 615316586, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "~200 B row + 2–10 KB blob\n(blob offload-able to Scylla)", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "~200 B row + 2–10 KB blob\n(blob offload-able to Scylla)", + "lineHeight": 1.25, + "autoResize": true, + "index": "bra" + }, + { + "id": "scal-tbl-r1-a", + "type": "text", + "x": 3520, + "y": 1136, + "width": 132, + "height": 16, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1811753464, + "version": 4, + "versionNonce": 100587318, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Durable store cap", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Durable store cap", + "lineHeight": 1.25, + "autoResize": true, + "index": "brb" + }, + { + "id": "scal-tbl-r1-b", + "type": "text", + "x": 3840, + "y": 1136, + "width": 234, + "height": 16, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1821096928, + "version": 4, + "versionNonce": 2137382698, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "etcd DB ≤ 8 GB (hard ~10 GB)", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "etcd DB ≤ 8 GB (hard ~10 GB)", + "lineHeight": 1.25, + "autoResize": true, + "index": "brc" + }, + { + "id": "scal-tbl-r1-c", + "type": "text", + "x": 4220, + "y": 1136, + "width": 226, + "height": 32, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 466363413, + "version": 4, + "versionNonce": 2043314294, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "SQLite: single-node disk\nScylla: unbounded, replicated", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "SQLite: single-node disk\nScylla: unbounded, replicated", + "lineHeight": 1.25, + "autoResize": true, + "index": "brd" + }, + { + "id": "scal-tbl-r2-a", + "type": "text", + "x": 3520, + "y": 1178, + "width": 171, + "height": 16, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 425937959, + "version": 4, + "versionNonce": 1047816682, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Writes/sec on hot path", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Writes/sec on hot path", + "lineHeight": 1.25, + "autoResize": true, + "index": "bre" + }, + { + "id": "scal-tbl-r2-b", + "type": "text", + "x": 3840, + "y": 1178, + "width": 210, + "height": 16, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 320333147, + "version": 4, + "versionNonce": 1624179126, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "~5–10k (etcd fsync + Raft)", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "~5–10k (etcd fsync + Raft)", + "lineHeight": 1.25, + "autoResize": true, + "index": "brf" + }, + { + "id": "scal-tbl-r2-c", + "type": "text", + "x": 4220, + "y": 1178, + "width": 202, + "height": 32, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 797968587, + "version": 4, + "versionNonce": 417569962, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "50k target (narrow UPDATE;\nheartbeats skip blob)", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "50k target (narrow UPDATE;\nheartbeats skip blob)", + "lineHeight": 1.25, + "autoResize": true, + "index": "brg" + }, + { + "id": "scal-tbl-r3-a", + "type": "text", + "x": 3520, + "y": 1220, + "width": 195, + "height": 16, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1852516723, + "version": 4, + "versionNonce": 238115574, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Concurrent actions / node", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Concurrent actions / node", + "lineHeight": 1.25, + "autoResize": true, + "index": "brh" + }, + { + "id": "scal-tbl-r3-b", + "type": "text", + "x": 3840, + "y": 1220, + "width": 210, + "height": 32, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 557812657, + "version": 4, + "versionNonce": 744388458, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Shared w/ Pods+CMs+Secrets;\n→ ~10k–100k / cluster", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Shared w/ Pods+CMs+Secrets;\n→ ~10k–100k / cluster", + "lineHeight": 1.25, + "autoResize": true, + "index": "bri" + }, + { + "id": "scal-tbl-r3-c", + "type": "text", + "x": 4220, + "y": 1220, + "width": 249, + "height": 32, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 678508518, + "version": 4, + "versionNonce": 678857782, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "~3M @ 32 GB RAM · ~13M @ 128 GB\n~50–500M @ 512 GB (blob offload)", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "~3M @ 32 GB RAM · ~13M @ 128 GB\n~50–500M @ 512 GB (blob offload)", + "lineHeight": 1.25, + "autoResize": true, + "index": "brj" + }, + { + "id": "scal-tbl-r4-a", + "type": "text", + "x": 3520, + "y": 1262, + "width": 179, + "height": 16, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 53455299, + "version": 4, + "versionNonce": 691010090, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Horizontal scaling unit", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Horizontal scaling unit", + "lineHeight": 1.25, + "autoResize": true, + "index": "brk" + }, + { + "id": "scal-tbl-r4-b", + "type": "text", + "x": 3840, + "y": 1262, + "width": 210, + "height": 32, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 2128483029, + "version": 4, + "versionNonce": 1032033654, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "K8s cluster (one etcd per)\nmulti-cluster not yet wired", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "K8s cluster (one etcd per)\nmulti-cluster not yet wired", + "lineHeight": 1.25, + "autoResize": true, + "index": "brl" + }, + { + "id": "scal-tbl-r4-c", + "type": "text", + "x": 4220, + "y": 1262, + "width": 234, + "height": 32, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1350555690, + "version": 4, + "versionNonce": 2118329578, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Leasor shard (org-sharded);\nworkers span many K8s clusters", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Leasor shard (org-sharded);\nworkers span many K8s clusters", + "lineHeight": 1.25, + "autoResize": true, + "index": "brm" + }, + { + "id": "scal-foot", + "type": "text", + "x": 3500, + "y": 1332, + "width": 1058, + "height": 35, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 220911285, + "version": 4, + "versionNonce": 1453160118, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Rule of thumb: OSS v2 CRD substrate tops out where etcd does (~10–100k concurrent TaskActions per cluster).\nLeasor moves state off etcd into an in-memory sharded store, trading kubectl ergonomics for ~2–3 orders of magnitude headroom.", + "fontSize": 14, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Rule of thumb: OSS v2 CRD substrate tops out where etcd does (~10–100k concurrent TaskActions per cluster).\nLeasor moves state off etcd into an in-memory sharded store, trading kubectl ergonomics for ~2–3 orders of magnitude headroom.", + "lineHeight": 1.25, + "autoResize": true, + "index": "brn" + }, + { + "id": "scal-lat-title", + "type": "text", + "x": 3500, + "y": 215, + "width": 396, + "height": 18, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1150878493, + "version": 4, + "versionNonce": 86177706, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "◷ Per-step latency (typical, not strict SLO)", + "fontSize": 15, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "◷ Per-step latency (typical, not strict SLO)", + "lineHeight": 1.25, + "autoResize": true, + "index": "bro" + }, + { + "id": "scal-lat-a1-bg", + "type": "rectangle", + "x": 3640, + "y": 329, + "width": 100, + "height": 52, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "seed": 2141361624, + "version": 4, + "versionNonce": 208220150, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "brp" + }, + { + "id": "scal-lat-a1-t", + "type": "text", + "x": 3646, + "y": 335, + "width": 72, + "height": 41, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1477621961, + "version": 4, + "versionNonce": 771388010, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "10–30 ms\nadmission +\nwebhooks", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "10–30 ms\nadmission +\nwebhooks", + "lineHeight": 1.25, + "autoResize": true, + "index": "brq" + }, + { + "id": "scal-lat-a2-bg", + "type": "rectangle", + "x": 3640, + "y": 459, + "width": 100, + "height": 52, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "seed": 2020811278, + "version": 4, + "versionNonce": 451658038, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "brr" + }, + { + "id": "scal-lat-a2-t", + "type": "text", + "x": 3646, + "y": 465, + "width": 85, + "height": 41, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 2142446903, + "version": 4, + "versionNonce": 731157802, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "5–15 ms\netcd fsync\n+ Raft commit", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "5–15 ms\netcd fsync\n+ Raft commit", + "lineHeight": 1.25, + "autoResize": true, + "index": "brs" + }, + { + "id": "scal-lat-a3-bg", + "type": "rectangle", + "x": 3640, + "y": 599, + "width": 100, + "height": 52, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "seed": 1729696143, + "version": 4, + "versionNonce": 1971989110, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "brt" + }, + { + "id": "scal-lat-a3-t", + "type": "text", + "x": 3646, + "y": 605, + "width": 85, + "height": 41, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 594321312, + "version": 4, + "versionNonce": 526147562, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "10–100 ms\nwatch fanout\nO(N) replicas", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "10–100 ms\nwatch fanout\nO(N) replicas", + "lineHeight": 1.25, + "autoResize": true, + "index": "bru" + }, + { + "id": "scal-lat-a4-bg", + "type": "rectangle", + "x": 3640, + "y": 739, + "width": 100, + "height": 52, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "seed": 1515791076, + "version": 4, + "versionNonce": 1527344054, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "brv" + }, + { + "id": "scal-lat-a4-t", + "type": "text", + "x": 3646, + "y": 745, + "width": 92, + "height": 41, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 137880183, + "version": 4, + "versionNonce": 1163711146, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "30–200 ms\nPod create\n(→ etcd again)", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "30–200 ms\nPod create\n(→ etcd again)", + "lineHeight": 1.25, + "autoResize": true, + "index": "brw" + }, + { + "id": "scal-lat-a-status-bg", + "type": "rectangle", + "x": 3640, + "y": 824, + "width": 100, + "height": 52, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "seed": 575428443, + "version": 4, + "versionNonce": 1770947830, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "brx" + }, + { + "id": "scal-lat-a-status-t", + "type": "text", + "x": 3646, + "y": 830, + "width": 92, + "height": 41, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 561316003, + "version": 4, + "versionNonce": 541125994, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "+ every status\nflip: 10–30 ms\nvia apiserver", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "+ every status\nflip: 10–30 ms\nvia apiserver", + "lineHeight": 1.25, + "autoResize": true, + "index": "bry" + }, + { + "id": "scal-lat-oss-total-bg", + "type": "rectangle", + "x": 3435, + "y": 1028, + "width": 130, + "height": 64, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "seed": 711223037, + "version": 4, + "versionNonce": 849245750, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "brz" + }, + { + "id": "scal-lat-oss-total-t", + "type": "text", + "x": 3441, + "y": 1034, + "width": 92, + "height": 55, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 689897759, + "version": 4, + "versionNonce": 626241578, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "end-to-end\nsubmit → pod:\n~100–400 ms\n(+ image pull)", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "end-to-end\nsubmit → pod:\n~100–400 ms\n(+ image pull)", + "lineHeight": 1.25, + "autoResize": true, + "index": "bs0" + }, + { + "id": "scal-lat-b1-bg", + "type": "rectangle", + "x": 4367, + "y": 329, + "width": 96, + "height": 52, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "seed": 599586947, + "version": 4, + "versionNonce": 1327382390, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "bs1" + }, + { + "id": "scal-lat-b1-t", + "type": "text", + "x": 4373, + "y": 335, + "width": 59, + "height": 41, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 442110602, + "version": 4, + "versionNonce": 1753225962, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "1–5 ms\ngRPC +\nshard CAS", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "1–5 ms\ngRPC +\nshard CAS", + "lineHeight": 1.25, + "autoResize": true, + "index": "bs2" + }, + { + "id": "scal-lat-b2-bg", + "type": "rectangle", + "x": 4360, + "y": 459, + "width": 110, + "height": 52, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "seed": 154643584, + "version": 4, + "versionNonce": 1934811318, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "bs3" + }, + { + "id": "scal-lat-b2-t", + "type": "text", + "x": 4366, + "y": 465, + "width": 105, + "height": 41, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1309559842, + "version": 4, + "versionNonce": 1213279658, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "0.5–2 ms\nnarrow UPDATE\n(blob untouched)", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "0.5–2 ms\nnarrow UPDATE\n(blob untouched)", + "lineHeight": 1.25, + "autoResize": true, + "index": "bs4" + }, + { + "id": "scal-lat-stream-bg", + "type": "rectangle", + "x": 4462, + "y": 529, + "width": 96, + "height": 52, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "seed": 1669312679, + "version": 4, + "versionNonce": 48323062, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "bs5" + }, + { + "id": "scal-lat-stream-t", + "type": "text", + "x": 4468, + "y": 535, + "width": 72, + "height": 41, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 2010879492, + "version": 4, + "versionNonce": 435284074, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "<1 ms\npush on\nopen stream", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "<1 ms\npush on\nopen stream", + "lineHeight": 1.25, + "autoResize": true, + "index": "bs6" + }, + { + "id": "scal-lat-b3-bg", + "type": "rectangle", + "x": 4358, + "y": 739, + "width": 114, + "height": 52, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "seed": 494298183, + "version": 4, + "versionNonce": 617524022, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "bs7" + }, + { + "id": "scal-lat-b3-t", + "type": "text", + "x": 4364, + "y": 745, + "width": 99, + "height": 41, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1990103430, + "version": 4, + "versionNonce": 1429031722, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "30–200 ms\nPod create\n(same K8s path)", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "30–200 ms\nPod create\n(same K8s path)", + "lineHeight": 1.25, + "autoResize": true, + "index": "bs8" + }, + { + "id": "scal-lat-b-status-bg", + "type": "rectangle", + "x": 4365, + "y": 824, + "width": 100, + "height": 52, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "seed": 1757285185, + "version": 4, + "versionNonce": 1467995254, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "bs9" + }, + { + "id": "scal-lat-b-status-t", + "type": "text", + "x": 4371, + "y": 830, + "width": 85, + "height": 41, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 82805522, + "version": 4, + "versionNonce": 1080972778, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "UpdateStatus:\nasync, off\ncritical path", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "UpdateStatus:\nasync, off\ncritical path", + "lineHeight": 1.25, + "autoResize": true, + "index": "bsA" + }, + { + "id": "scal-lat-cl-total-bg", + "type": "rectangle", + "x": 4495, + "y": 1020, + "width": 150, + "height": 80, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "seed": 1191785581, + "version": 4, + "versionNonce": 79287734, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "index": "bsB" + }, + { + "id": "scal-lat-cl-total-t", + "type": "text", + "x": 4501, + "y": 1026, + "width": 99, + "height": 68, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 89585251, + "version": 4, + "versionNonce": 482347178, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "end-to-end\nsubmit → pod:\n~30–210 ms\n(dominated by\nK8s Pod create)", + "fontSize": 11, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "end-to-end\nsubmit → pod:\n~30–210 ms\n(dominated by\nK8s Pod create)", + "lineHeight": 1.25, + "autoResize": true, + "index": "bsC" + }, + { + "id": "scal-lat-foot-1", + "type": "text", + "x": 3500, + "y": 1690, + "width": 240, + "height": 20, + "angle": 0, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1829048799, + "version": 4, + "versionNonce": 362917622, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "Latency sources & caveats", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Latency sources & caveats", + "lineHeight": 1.25, + "autoResize": true, + "index": "bsD" + }, + { + "id": "scal-lat-foot-2", + "type": "text", + "x": 3500, + "y": 1715, + "width": 1029, + "height": 75, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "seed": 1953034627, + "version": 4, + "versionNonce": 1372414826, + "isDeleted": true, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1777333919168, + "link": null, + "locked": false, + "text": "• OSS values are typical on healthy control planes. etcd fsync = 2–10 ms on NVMe; watch fanout is p99 per k8s.io sig-scalability.\n• Cloud values are the leasor README targets: p50 < 1 ms, p99 < 10 ms for shard ops (SQLite single-node; Scylla scales horizontally).\n• Pod creation latency is the same for both — it's a K8s cost, not a dispatch-substrate cost.\n• Status-update paths differ fundamentally: OSS writes every phase to etcd; cloud fires UpdateStatus to ActionsService async, off the hot path.\n• Latencies compound per action: a 6-phase task does 6× (status etcd write) in OSS vs 0× on critical path in cloud.", + "fontSize": 12, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "• OSS values are typical on healthy control planes. etcd fsync = 2–10 ms on NVMe; watch fanout is p99 per k8s.io sig-scalability.\n• Cloud values are the leasor README targets: p50 < 1 ms, p99 < 10 ms for shard ops (SQLite single-node; Scylla scales horizontally).\n• Pod creation latency is the same for both — it's a K8s cost, not a dispatch-substrate cost.\n• Status-update paths differ fundamentally: OSS writes every phase to etcd; cloud fires UpdateStatus to ActionsService async, off the hot path.\n• Latencies compound per action: a 6-phase task does 6× (status etcd write) in OSS vs 0× on critical path in cloud.", + "lineHeight": 1.25, + "autoResize": true, + "index": "bsE" + } + ], + "appState": { + "gridSize": 20, + "gridStep": 5, + "gridModeEnabled": false, + "viewBackgroundColor": "#ffffff", + "lockedMultiSelections": {} + }, + "files": { + "de7316c779e0fa00d6e5a1b86d5dd5293e3f8ae1": { + "mimeType": "image/png", + "id": "de7316c779e0fa00d6e5a1b86d5dd5293e3f8ae1", + "dataURL": "data:image/png;base64,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ZxDFSq5s5RYhZjtEzSROyyPT5zuG51/zvDU/+tMxjI7nrTmG5bvW4tDv7cZhfKZr6eif71oLb+mXf820+dc8p1++o99buSR+frzEr7Vjfjyet4xDvz11+WmZJrnmeb5L/HnM99/Tc6bLd3uaTvFEQAREQAREII+ATkVABNoJgXYvQLcTTqqGCOw3AvzaKt1+q4AKFoEOSID3DF0HrLqqLALtngCFaG690O4rqgq2IwKqigiIgAiIgAiIgAiIQGcmIAG6M/e+2t4hCJhZ2EuxQ1RWlWzfBDpR7cx033Si7lZT9wMBM9sPpapIERABERABERABERABERCBPSLQziJJgG5nHaLqiIAIiIAIiIAIiIAIiIAIiIAIFAYBtUIEREAEREAERACQAC0rEAEREAEREAERKHQCap8IiIAIiIAIiIAIiIAIiIAIiMB+IiABej+B75zFqtUiIAIiIAIiIAIiIAIiIAIiIAIiIAKFT0AtFAEREIEdBCRA72ChMxEQAREQAREQAREQAREoLAJqjQiIgAiIgAiIgAiIgAjsZwISoPdzB6h4ERCBzkFArRQBERABERABERABERABERABERABESh8AmrhzgQkQO/MRD4iIAIiIAIiIAIiIAIiIAIiIAIdm4BqLwIiIAIiIAIi0E4ISIBuJx2haoiACIiACIhAYRJQq0RABERABERABERABERABERABDozAQnQnaX31U4REAEREAEREAEREAEREAEREAEREIHCJ6AWioAIiEA7IyABup11iKojAiIgAiIgAiIgAiJQGATUChEQAREQAREQAREQ8Wb9VwAAEABJREFUAREQAUACtKxABESg0AmofSIgAiIgAiIgAiIgAiIgAiIgAiIgAoVPQC1spwQkQLfTjlG1REAEREAEREAEREAEREAERKBjElCtRUAEREAEREAERGAHAQnQO1joTAREQAREQAQKi4BaIwIiIAIiIAIiIAIiIAIiIAIiIAL7mYAE6H3QASpCBERABERABERABERABERABERABESg8AmohSIgAiIgAjsTkAC9MxP5iIAIiIAIiIAIiIAIdGwCqr0IiIAIiIAIiIAIiIAIiEA7ISABup10hKohAoVJQK0SAREQAREQAREQAREQAREQAREQAREofAJqoQjsmoAE6F2zUYgIiIAIiIAIiIAIiIAIiIAIdCwCqq0IiIAIiIAIiIAItDMCEqDbWYeoOiIgAiIgAoVBQK0QAREQAREQAREQAREQAREQAREQAREACl2AVh+LgAiIgAiIgAiIgAiIgAiIgAiIgAgUPgG1UAREQAREoJ0SkADdTjtG1RIBERABERABERCBjklAtRYBERABERABERABERABERCBHQQkQO9goTMRKCwCao0IiIAIiIAIiIAIiIAIiIAIiIAIiEDhE1ALRaCdE5AA3c47SNUTAREQAREQAREQAREQARHoGARUSxEQAREQAREQAREQgZ0JSIDemYl8REAEREAEOjYB1V4EREAEREAEREAEREAEREAEREAERKCdENiLAnQ7aaGqIQIiIAIiIAIiIAIiIAIiIAIiIAIisBcJKGsREAEREAER2DUBCdC7ZqMQERABERABERABEehYBFRbERABERABERABERABERABEWhnBCRAt7MOUXUKg4BaIQIiIAIiIAIiIAIiIAIiIAIiIAIiUPgE1EIREIG3JiAB+q0ZKYYIiIAIiIAIiIAIiIAIiED7JqDaiYAIiIAIiIAIiIAItFMCEqDbaceoWiIgAiLQMQmo1iIgAiIgAiIgAiIgAiIgAiIgAiIgAoVPYM9bKAF6z1kppgiIgAiIgAiIgAiIgAiIgAiIgAi0LwKqjQiIgAiIgAi0cwISoNt5B6l6IiACIiACIiACHYOAaikCIiACIiACIiACIiACIiACIrAzAQnQOzORT8cmoNqLgAiIgAiIgAiIgAiIgAiIgAiIgAgUPgG1UAREoIMQkADdQTpK1RQBERABERABERABERCB9klAtRIBERABERABERABERCBXROQAL1rNgoRAREQgY5FQLUVAREQAREQAREQAREQAREQAREQAREofAIdrIUFL0CbWbMuMTOYyZmJgZkYmImBmRiYiYGZGJiJgZkYmImBmRiYiYGZGJiJgdlbMzBTHDMxMBMDMzEwEwMzMTB7ZwzyxUszy78siPOCE6DNLAjMcRyjoaEBNTU12L59O6qqqrB161Zs2bJFTgxkA7IB2YBsQDZQWDag/lR/ygZkA7IB2YBsQDYgG5ANyAZkAx3WBqhZUrukhkktk5omtU2znM7Z0VXoghKgzSyIzuwsdhzdtm3bgghdV1eH+vp6ub3KQHxlY7IB2YBsQDYgG5ANyAZkA7IB2YBsQDYgGyh8G1Afq49lA21tA9QuKT5Ty6SmSUeNk2K0mXVoDbogBGgzQyaTCaucucK5uro6CNHsGTMLK6LNdDQTAzMxMBMDMzEwEwMzMTATAzMxMBMDsw7MQHXX//VlA7IB2YBsQDYgG5ANFJwNUNOk8EyNk1onV0dT+zQzBnU41+EFaDMLK5w5K1BbWxs6wMyC4YULvYmACIjAPiCgIkRABERABERABERABERABERABERABAqfwL5qodkOfZOaJ7VPrpA2s31VhTYrp8MK0GYG7oXCZel0PDfreB3QZj2pjERABERABERABERABERABESg8xBQS0VABERABESg0xAw26GDcjV0R9NBO6wAnc1mw5YbHVX57zR3iBoqAiIgAiJQ4ATUPBEQAREQAREQAREQAREQAREQgX1BwMzA1dAUobklx74osy3K6HACtFlO8SdobvZtplXPwRD0JgIiIAIiIAIiIAIiIAIiIAIiIAIiUPgE1EIREIFOTcDMQE20I+0I0eEEaFoYN+AmaDOJz+QhJwIiIAIiIAIiIAIisO8JqEQREAEREAEREAEREAER2B8EzHIiNDXS/VH+2y2zQwnQZhZ+cFDbbrzdblZ8EShoAmqcCIiACIiACIiACIiACIiACIiACIhA4RNQC/MImHUcnbRDCdDc20Tic56l6VQEREAEREAEREAEREAEREAE9jkBFSgCIiACIiACItAeCJjlRGhqpu2hPruqQ4cRoM06BtBdgZa/CIiACIiACLQ5AWUoAiIgAiIgAiIgAiIgAiIgAiLQqQlQfOZWHGbtd6viDiNAE2ZdXR3M2h/MTm3larwIiIAIiIAIiIAIiIAIiIAIiIAIdBICaqYIiIAItDcCZrn9oKmdtre6JfXpEAK0mYHiczabTeqtowiIgAiIgAiIgAiIQOcloJaLgAiIgAiIgAiIgAiIgAg0EqBmWltb224X7nYIAZoQKUA3MtVBBESg3RBQRURABERABERABERABERABERABERABAqfgFrY3gnU19eDGmp7rGe7F6DNLMAjQDNtv9EejUh1EgEREAEREAEREAEREAER2EcEVIwIiIAIiIAIiIAItCBg1r7103YvQJMnxWc6nsuJgAiIgAiIQHsgoDqIgAiIgAiIgAiIgAiIgAiIgAiIQHshQO20ve4D3e4F6DiO0dDQsKu+lL8IiIAIiIAIiIAIiIAIiIAIiIAIiEDhE1ALRUAEREAE3oIABWhqqW8RbZ8Ht3sBmkSo4PMoJwIiIAIiIAIiIAIisL8JqHwREAEREAEREAEREAEREIH2SKC9aqgdQoBujx2qOonAfiegCoiACIiACIiACIiACIiACIiACIiACBQ+AbVQBPaQQHtc/cyqt3sB2szQXuERoJwIiIAIiIAIiIAIiIAIiEDnIKBWioAIiIAIiIAIiEB7J2Bm7a6K7V6AbnfEVCEREAEREIH9TUDli4AIiIAIiIAIiIAIiIAIiIAIiIAIdBAC70KA7iAtVDVFQAREQAREQAREQAREQAREQAREQATeBQElFQEREAEREIF3TkAC9Dtnp5QiIAIiIAIiIAIisG8JqDQREAEREAEREAEREAEREAER6GAEJEB3sA5TddsHAdVCBERABERABERABERABERABERABESg8AmohSIgAu+egATod89QOYiACIiACIiACIiACIiACOxdAspdBERABERABERABESggxKQAN1BO07VFgEREIH9Q0ClioAIiIAIiIAIiIAIiIAIiIAIiIAIFD6BtmuhBOi2Y6mcREAEREAEREAEREAEREAEREAERKBtCSg3ERABERABEejgBCRAd/AOVPVFQAREQAREQAT2DQGVIgIiIAIiIAIiIAIiIAIiIAIi8PYJSIB++8yUYv8SUOkiIAIiIAIiIAIiIAIiIAIiIAIiIAKFT0AtFAERKBACEqALpCPVDBEQAREQAREQAREQARHYOwSUqwiIgAiIgAiIgAiIgAi8cwISoN85O6UUAREQgX1LQKWJgAiIgAiIgAiIgAiIgAiIgAiIgAgUPoECa6EE6ALrUDVHBERABERABERABERABERABESgbQgoFxEQAREQAREQgXdPQAL0u2eoHERABERABERABPYuAeUuAiIgAiIgAiIgAiIgAiIgAvuGgHkx7kyqqYNomz+hbBuOnSQXNVMEREAEREAEREAEREAEREAEREAERKDwCaiFItD5CFBwposzQLYBaKhxBjFAPzro9Y4JSIB+x+iUUAREQAREQAREQAREQAT2MgFlLwIiIAIiIAIiIAIisHcJNK52rq8G6rcDxZURyvtE6DUmQlRkqK/K+bMSEqJJ4e07CdBvn5lSiIAIdEIC1viB9K6b3lb5vOuKKAMREAEREAEREAEREAEREAEREAER6OQE/Bk9bsgJzL1GGw75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ERABERABEQAgCCIgAiIgAvuegATofc9cJYqACIiACIiACIhAZyeg9ouACIiACIiACIiACIiACHQSAhKgO0lHq5ki0DoB+YqACIiACIiACIiACIiACIiACIiACBQ+AbVQBPYfAQnQ+4+9ShYBERABERABERABERABEehsBNReERABERABERABEehkBCRAd7IOV3NFQAREQARyBPQuAiIgAiIgAiIgAiIgAiIgAiIgAiKw9wnsbwF677dQJYiACIiACIiACIiACIiACIiACIiACOxvAipfBERABESgkxKQAN1JO17NFgEREAEREAER6KwE1G4REAEREAEREAEREAEREAER2HcEJEDvO9YqSQSaE9CVCIiACIiACIiACIiACIiACIiACIhA4RNQC0WgkxOQAN3JDUDNFwEREAEREAEREAEREIHOQkDtFAEREAEREAEREAER2PcEJEDve+YqUQREQAQ6OwG1XwREQAREQAREQAREQAREQAREQAREoPAJhBZKgA4Y9CYCIiACIiACIiACIiACIiACIiAChUpA7RIBERABERCB/UdAAvT+Y6+SRUAEREAEREAEOhsBtVcEREAEREAEREAEREAEREAEOhkBCdCdrMPV3BwBvYuACIiACIiACIiACIiACIiACIiACBQ+AbVQBERg/xOQAL3/+0A1EAEREAEREAEREAEREIFCJ6D2iYAIiIAIiIAIiIAIdFICEqA7acer2SIgAp2VgNotAiIgAiIgAiIgAiIgAiIgAiIgAiJQ+ATaTwslQLefvlBNREAEREAEREAEREAEREAEREAECo2A2iMCIiACIiACnZyABOhObgBqvgiIgAiIgAh0FgJqpwiIgAiIgAiIgAiIgAiIgAiIwL4nIAF63zPv7CWq/SIgAiIgAiIgAiIgAiIgAiIgAiIgAoVPQC0UAREQgUBAAnTAoDcREAEREAEREAEREAERKFQCapcIiIAIiIAIiIAIiIAI7D8CEqD3H3uVLAIi0NkIqL0iIAIiIAIiIAIiIAIiIAIiIAIiIAKFT0AtbEZAAnQzHLoQAREQAREQAREQAREQAREQAREoFAJqhwiIgAiIgAiIwP4nIAF6//eBaiACIiACIiAChU5A7RMBERABERABERABERABERABEeikBCRAd6qOV2NFQAREQAREQAREQAREQAREQAREQAQKn4BaKAIi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BERABNoZAVVHBERABERABERABERABERABPaIgAToPcKkSCLQXgmoXiIgAiIgAiIgAiIgAiIgAiIgAiIgAoVPQC0UgY5LQAJ0x+071VwEREAEREAEREAEREAERGBfE1B5IiACIiACIiACIiACb4uABOi3hUuRRUAEREAE2gsB1UMEREAEREAEREAEREAEREAEREAERKD9E3i3AnT7b6FqKAIiIAIiIAIiIAIiIAIiIAIiIAIi8G4JKL0IiIAIiIAIvCMCEqDfETYlEgEREAEREAEREIH9RUDlioAIiIAIiIAIiIAIiIAIiEDHISABuuP0lWra3gioPiIgAiIgAiIgAiIgAiIgAiIgAiIgAoVPQC0UARF4VwQkQL8rfEosAiIgAiIgAiIgAiIgAiKwrwioHBEQAREQAREQAREQgY5HQAJ0x+sz1VgEREAE9jcBlS8CIiACIiACIiACIiACIiACIiACIlD4BNqkhRKg2wSjMhEBERABERABERABERABERABERCBvUVA+YqACIiACIhAxyUgAbrj9p1qLgIiIAIiIAIisK8JqDwREAEREAEREAEREAEREAEREIG3RUAC9NvCpcjthYDqIQIiIAIiIAIiIAIiIAIiIAIiIAIiUPgE1EIREIGOT0ACdMfvQ7VABERABERABERABERABPY2AeUvAiIgAiIgAiIgAiIgAu+IgATod4RNiURABERgfxFQuSIgAiIgAiIgAiIgAiIgAiIgAiIgAoVPoHBaKAG6cPpSLREBERABERABERABERABERABEWhrAspPBERABERABETgXRGQAP2u8CmxCIiACIiACIjAviKgckRABERABERABERABERABERABDoeAQnQHa/P9neNVb4IiIAIiIAIiIAIiIAIiIAIiIAIiEDhE1ALRUAERKBNCEiAbhOMykQEREAEREAEREAEREAE9hYB5SsCIiACIiACIiACIiACHZeABOiO23equQiIwL4moPJEQAREQAREQAREQAREQAREQAREQAQKn4Ba2KYEJEC3KU5lJgIiIAIiIAIiIAIiIAIiIAIi0FYElI8IiIAIiIAIiEDHJyABuuP3oVogAiIgAiIgAnubgPIXAREQAREQAREQAREQAREQAREQgXdEQAL0O8K2vxKpXBEQAREQAREQAREQAREQAREQAREQgcInoBaKgAiIQOEQkABdOH2ploiACIiACIiACIiACLQ1AeUnAiIgAiIgAiIgAiIgAiLwrghIgH5X+JRYBERgXxFQOSIgAiIgAiIgAiIgAiIgAiIgAiIgAoVPQC0sPAISoAuvT9UiERABERABERABERABERABEXi3BJReBERABERABERABNqEgAToNsGoTERABERABERgbxFQviIgAiIgAiIgAiIgAiIgAiIgAiLQcQlIgN7TvlM8ERABERABERABERABERABERABERCBwiegFoqACIiACLQpAQnQbYpTmYmACIiACIiACIiACLQVAeUjAiIgAiIgAiIgAiIgAiLQ8QlIgO74fagWiMDeJqD8RUAEREAEREAEREAEREAEREAEREAECp+AWigCe4WABOi9glWZioAIiIAIiIAIiIAIiIAIiMA7JaB0IiACIiACIiACIlA4BCRAF05fqiUiIAIiIAJtTUD5iYAIiIAIiIAIiIAIiIAIiIAIiIAIvCsCHUKAflctVGIREAEREAEREAEREAEREAEREAEREIEOQUCVFAEREAERKDwCEqALr0/VIhEQAREQAREQARF4twSUXgREQAREQAREQAREQAREQATahIAE6DbBqExEYG8RUL4iIAIiIAIiIAIiIAIiIAIiIAIiIAKFT0AtFIHCJSABunD7Vi0TAREQAREQAREQAREQARF4uwQUXwREQAREQAREQAREoE0JSIBuU5zKTAREQAREoK0IKB8REAEREAEREAEREAEREAEREAEREIGOT+CtBOiO30K1QAREQAREQAREQAREQAREQAREQARE4K0IKFwEREAEREAE9goBCdB7BasyFQEREAEREAEREIF3SkDpREAEREAEREAEREAEREAERKBwCEiALpy+VEvamoDyEwEREAEREAEREAEREAERc4G5ggAAEABJREFUEAEREAERKHwCaqEIiMBeJdDpBWgzg5ntVchtlXkURUin0x2mvtBLBERABERABERABERABN4GAUUVAREQAREQAREQAREoPAIdSoBOBFgeU6nUuxZj4zhGQ0MD6uvrwfP23L1mhu3bt2PdunWoq6uTCN2eO0t1E4GOT0AtEAEREAEREAEREAEREAEREAEREAERKHwC+6SFHUKANjNQdN62bVsQYKuqqrB58+ZwTvGYYXgHL4rYXbt2RY8ePVBcXNxuRGi2h87MQqt4Xl1djWOPPRb/9V//hREjRqC2tjYwCRH0JgIiIAIiIAIiIAIiIAIiIAIi0IEJqOoiIAIiIAIiULgE2r0AbWbIZrOg+HzUUUfhc5/7HL75zW/ia1/7Gj7+8Y9j0KCB2Lp169sSYyno1tTUYPTo0bjvvvswbdo0XHTRRSEfitL7s7vZVq50puPqbDMLq7Qpkn/729/GJz7xCXz+859HJpPZn9VU2SIgAiIgAiJQmATUKhEQAREQAREQAREQAREQAREQgTYl0K4FaDML4jNbfP311+Ovf/1rEKCvueYafOQjH8HXv/5197sRp512WtiegsIy41JEpjPLrSCmHx396MwsrHbmfsp9+vRBZWUlysvLgx/D6c+jWfP0zKM1x3IZP0nH69bimRlaxjPLlWGWE5rHjh2L733v//DjH/8Ihx56aNgepKioCFwBPX/+/LD9xoL5C0JdkfdimSyfjmWY5fJNophZKDsJM8tdMz7TopUX/RmfcXg0a55nK0nazEsZiYAIiIAIiIAIiIAIiIAIiIAIiIAIFD4BtVAERKDwCbRrAZoCKLfboNhM0ZnbZFCE/f3vf49bbrkF69evx5AhQ/CrX/0Khx12WBBpuZfzpk2bsMld/l7JXFnMbTvoz+0rzCyIuNzCg2nokjjMd8uWLUH8Ntu16GpmYeU1xWHmy/2ZN27cGMRwM2u2TzPbwhXNSbwNGzaEVd0s0yyXD8O6deuGSy+9DBdeeBEojr/55pthtTPTfupTn8IZZ5yB733/eygrK2tWP3Ji+XTMh+1imfCXWU7cpj8dV08znHVlfKb1aE1/Zrm6cxV2EofpyC3JsymyTkRABERABERABERABAqBgNogAiIgAiIgAiIgAiIgAnuFQLRXcm2DTM0sCK8UZM8555wgts6bNw/vfe978ZWvfAWf+cxnQEGWAiqFaQqzFFL79u2LD33oQ/jgBz+IkSNHhhXEFJe7dOmCq666Ch/96Ecxfvz4sJLYLCe0mhm4JUdFRQWuvPJKfPGLX8Rll10W9oWmiN2a6GpmoU7cGoTiN0Vy1uuf/umfwK1CKNZS6CUKpme8Xr16gUL6V//rq/h//+//4bRTTwNXN7MMCsJnnnEmuJqbYjOF6WOOOQYf/vCHMWjQoPCDi6effjqOPvpoHHfccYENVyUzLcuYMmUK/uM//gPcI5ppBg4cCPJg2cy7f//+uO666wIX1oPXH/vYx0L8hC/zMXPuDZnAg+3glh9f+epXQrqDDjooiOaMJycCIrC3CChfERABERABERABERABERABERABERCBwifQeVrYbgVodkEcx0EEpojKawq6FFMpznJbiBkzZuB973sfLr300rAimkL0gAEDwh7R3/rWtzB58uQgNDM+VxNzG4+vfe1rOOWUU4LAynzNjFkHkZerqr/73e8GcfgHP/gB/vznP4OCNkVes1y8ENnfWDc6itU33XRT2A6EgvhXv/pV8PpLX/pSWAFtZmFFNIXlO+64HdzH+ZOf+GQQuf/wxz/gN7/5TSibK4y5tzPFczMLK6spVrMekyYdFgTnL7ow/j//8z+hzawTWVBo/uMf/xjy+ed//uewR/Q3vvEN3HnnnYELhXXGHTVqFNh+cqHIfvfdd4d9tCkwcwU5xWuK5mxTUXERmMfNN98cxP5PffJTYLq///3vQdxnfmbNeUAvERABERABERABERABERABEeiIBFRnERABERABERCBvUog2qu5v4vMKYRSZF6zZg0WL14cBFmuwP3b3/6GT37ykzj++OMxYsQIPPfcc5g5cybeeOONEIfpEkfhOakC/Siw0o8rjOlvZiEN/MXVwMOHDw8/Srh06VL3QdjW49///d/BdGY7BFeuPOaK5nPPPTfUhcL3vffei+985zt4/vnng/DM/Lgqm8IyV2JTSB44cBC4pQUFY4q53Lrj2GOPBUVr5nHrbbdi+vTpIT0rMG3aNDDu4sWvhpXSFJNZfwrAbA8FdArDXClNf9bh17/+NVavXg2ucmZ9Jk2aFARwMwPTULSmUP7qq6/i5ltuDvVhWRS7Dz/88LCtySWXXIKrr746iPc//OEPw37bDz74ILiK/Gsu4E+YMCFsd8LymVZOBERABERABNqCgPIQAREQAREQAREQAREQAREQAREoPALtVoAmaoqq3Bbj+9//PhYsWBDEYm6fQVGYP0h44403gkeKuBSJE0HUzJpEXOaTODMLeZgZkhfL4PmKFSvCiuH3v//9YRuOhQsXgmEnnngiKExT9DXLpaN/SUkJlixZAgrNV155Ja659hp84QtfCKuTuX80xV6Kv9wG4/zzz0f37t3DKmb+cGKyUvl///d/QYGdQjrdj3/8Y/zsZz9rqvsNN9wQBO6XX34ZpaWlrGaoPwVwiteTJ03GSSedFOpJQZurpz/3uc/hX//1X8NWGRS1r7jiihDOxGYWhGwK1RdccAE+9MEP4Qc/+EEQpsmusZ0YPXp0qCvbQcH/L3/5S9g6hO1kGRTRuXUI28h85URABERABERABERABERABERABERABDocAVVYBERABPYJgXYtQFPgpIj62muvhf2LKdA+++yz4I8Jkg73Rua+yL/73e/AVcBclUwhlWF74pg/xWTGpSj74osvYtiwYVi0aBFuu+22IPZWVlaGvaTzBW6mY73mzJmDu+66C9yH+mMf/RgolHMbDdbBzEJ6Csfc/oJpKDY/8cQT4ccFubUHBeb3vOc9QdxlmyhSszw0vii+9+zZM4jGTN/oHQ7cjmTiIRPDOcvjlhusE3+UkSvCly1bFoTlsWPHgvtoM36I7G+PPPJI2NqEdXjppZfCdiTu3fTDhrNmzQJF7t69e+OOO+4IIv+nP/1prFq1KmztsXz58rAndcs6MQ85ERABERABERABERCBt0tA8UVABERABERABERABESgcAm0awHazMKPCHLbiPnz54d9lrnn81lnnRUEaYrGDOvRowc+8IEPhF5qKYqaWdOK4pZhIUHjG1f1clUzhVoKuRs2bAgh3AaE1/lpzSxsT3HwwQfjnnvuwcMPPxz2nf7sZz8bxGQKx0zMNFwpXFZWFupAgZwrl81y22EwDsV1rqTmCmuK4Syf/nRMTz8eeZ3v6Eexmkc6CtgUohmfefDazFxULg9iMuMk6cnMzMIqZ/olYUzHPB999NGw5/Prr7+Ofv364aKLLgJXnT/22GOgaE6hnHHNjMnlRKBwCKglIiACIiACIiACIiACIiACIiACIiAChU9ALdynBNqtAG1m4F7NFDunTJmCiy++GNwDeuvWrWGf4vvvvz/8IB7FWwqoXPnbcqUvV/EyDwquFJIpBufTNdshBHM1NfdYZlyudh48eHCISmGYwjHFXZZDT7OcAM3VzvyhQ642/sxnPgNu15Hs+5zEY17cyoJpWT/uo8wyKOCyTkcccQSOPPJIF4rLwoplsx2ibhKPebV0Zhb2bzazIG5zNTPjU4BmO7kHNMvcunVLEPHNrFkWDGvmkXfBOvPHDtmW9773veBWIVwdTgbnnHMOLr/s8rCvNK/zkulUBERABERABERABERABERABN4WAUUWAREQAREQAREofALtXoDmNhC//e1vwR/X++///m9QaKXIyq0tTj31VDDczMI2GBROucJ4+/btQczlDxVS8KUQzVW8ycpksx1iLMPYzRS4ubKawjD3Vb7sssvC3slcScz9oFkeRVszC/7Ma+TIkUEk5zYWXBn8zDPPgPsoUzRnnhRoKYAz3MzA7TS45QbLoFjMvaC5d/NPfvITlJeXh3zZNpZDxx/74+ppnjO/xPGa4vXTTz/dlIZ7V3ft2hUUu/kjgkOHDg3CNH8UcdOmTWHLjCT9ro5mFlZFc69nCtBkwlXP3Feae11vdfGfdR9xwIjAd1f5yF8EREAERKDDEVCFRUAEREAEREAEREAEREAEREAERGCvEGi3AjSFWIqvc+fODXsQs/X8sUFuefHTn/4U3Pf5N7/5DbjSl2H8MUIKs9ynmCuSzQznnnsubrnllrBNxrXXXgv+ICDj0DFNcmRZcE2aP7h3++23gz+6N2DAgLCH86233hr2Pqbgy/h0FJYpcnP1Nf25Upg/iEgxmT8iSHGZ8SjWcksL1nnx4sVBBP7sZz+LP//5z6FNFHUpbHPLC/4IYnl5OZK6m1nYZoT1nzx5UtM+zcyXjmwobCd7VbMON910E/74xz/i61/7OpgvtxEhF54zTeLY9nyX+JsZKOBT5P/4xz8OCv4U1r/zne+ELUYSMZ97SLPdTJefj85FQAREQAREQAREQAREQAREQAREQAT2hIDiiIAIiEDnIdBuBWh2AQVO7r9MIZTiMMXRgQMHgltynHzyyeAq5JUrV+ILX/gCHnroIXTv3j1sS/H1r38dq1evhplh4sSJYJrrr7++aSsKrnpm3mYWfoyPgvLvfvu7IFaPHz++aTXyzTffDP7wIcthfNaJjucUYL/97W+DIjD3jmadzj777PBDhNxP2szC3sssa/369fjEJz4B/mghr7lVB8V0bvlBgZf5MA/muXTpUvzP/3wnrOim36RJk9CvX/+w0ppCspkFITupw9e+9rUgZjMvtpU/ylhWXhbqRYH71VdfDWI0/GVmgQnb65fhz8zAcsxyYWVl5fjNb36Nn/70J2E1NfPjCmiuNuee0Fy1TQE6WbEdMtGbCIiACIiACIiACHRUAqq3CIiACIiACIiACIiACIjAXiUQ7dXc32XmicjK1cZf/OIXwf2Hr776alBMpmj70Y9+NPxAHlcsU5zlimOuDH7yySdxwQUXgKueKcJyaw2uBL7qqqtCHlypzJXTCxYsAEVj5suVw9zT+cILLwTzPf/884OwzW09KNiyLklzeE5hnKuamSe3vLjmmmvALT+4Apo/iMg8f/nLXwbxlwIvy6I/t7XgKmjGp2j91a9+NfygIYVp5ksR+uc//1moP/PgKm5ug8Hw6667LtSf22OwnfQjmy996UtgfblqmXlffvnluPLKKzFr1qywtzTLf+6550Ja5kk+9ONe0dxe5Lzzzgth3Fe7e/duXp/6IILTn3lxf2ty4fYhXBFO1qxrwkNHEWgLAspDBERABERABERABERABERABERABESg8AmohZ2PQNTem0yhk6IsBVNuecHtKn7+85/jRz/6Ee67777wg4Tc5oLx2BYeKZCuXbsWDz/8MO6990aM9H4AABAASURBVF68+eabYdUwt/PgimWGUXzliupXXnklrBbm3sks59lnnw35Mh7j0I95Mu98Rz+KwFx5PHv2bHBVMLf/YD3nz58f8uQqbIrX3OKDcSmQc99mrqxm/Ndeew0tyzCzIBozL9aBP/7HrUNYNgVv+nElcpIv68f2UkjmVh/MmwIzhXOuUmaZjMsfUmRaOrbVLLfimQwSLtwrmnHpmHb58uV44oknQNGZXLiSO5816yQnAiIgAiIgAiIgAiIgAiLQIQmo0iIgAiIgAiIgAiKwTwi0ewGaFCj20lHEpQDKH9vr1q0beE4BlwIv4yWO11yhzHA6njM9RVVup8E0vKbQyms6CrlMz3OmYVzGoaN/a47lcBVykobiM+MzLf1YbpKOcZPyuJcyy2B7GJ8uiccj4zIt86BL6sb4vGY5jEfHtHQMY57Mm3FYL+bDOHRJ2QxL8kv8k/om/syPaSls5+dJbvRnOjkREAEREIG2IqB8REAEREAEREAEREAEREAEREAERKBwCXQIATrBT/GTjqt66XhOsTQJzz/Sn+F0PGcYz+mS62Z+ccxLMDxxweMt3phXEp/njN7ymn50DE/CkiP9W3P5cXnOOEma5Jp+iUvCkuPu4rQM21WaxD85tkyXlK2jCIiACIiACIiACIiACIiACIiACHQYAqqoCIiACIjAPiXQoQTofUpGhYmACIiACIiACIiACOxVAspcBERABERABERABERABESg8AlIgC78PlYLReCtCChcBERABERABERABERABERABERABESg8AmohSKwXwhIgN4v2FWoCIiACIiACIiACIiACIhA5yWglouACIiACIiACIhA5yEgAbrz9LVaKgIiIAIi0JKArkVABERABERABERABERABERABERABPYqgXYhQO/VFipzERABERABERABERABERABERABERCBdkFAlRABERABEeh8BCRAd74+V4tFQAREQAREQAREQAREQAREQAREQAREQAREQAREYJ8QkAC9TzCrEBHYFQH5i4AIiIAIiIAIiIAIiIAIiIAIiIAIFD4BtVAEOi8BCdCdt+/VchEQAREQAREQAREQARHofATUYhEQAREQAREQAREQgX1KQAL0PsWtwkRABERABBICOoqACIiACIiACIiACIiACIiACIiACBQ+AQnQhd/HaqEIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAI7BcCBS9AmxniOG5y+4WyChUBERABERABERCBJgI6EQEREAEREAEREAEREAEREIEdBPK1SzODme0ILICzghOgzSx0UjabRV1dHbZv345t27Zh69at2LJlCzZv3iwnBjkbEAdxkA3IBmQDsgHZgGxANiAbkA3IBmQDsgHZQOHbgPpYfdzObYCaJbVLapjUMmtra0Ft0yync3Z0DbrgBGiKzlVVVUFw5rG6ujoI0Q0NDaHj2HlyWbHwCQrZgexANiAbkA3IBmQDsgHZwL61AfEWb9mAbEA2IBuQDcgGZAOt2wC1S+qa1DKpaVKQ5pF+EqDbAQEzAzsp6ZiWswRmhTFb0A5QqwoiIAKFQUCtEAEREAEREAEREAEREAEREAEREAERaEcEzHL6pVnuSKGeGidFaGqe1D7N7O3WuF3EL4gV0Fyazo6or68PUM06ZmeEyutNBERABERABERABERABERABESgwAioOSIgAiIgAiLw9gmY5TROap7UPqmBvv1c9n+KDitAm1nYRoLwuTSdKM1yncJzOREQAREQAREQARHYiYA8REAEREAEREAEREAEREAERKCDETDLaZ7UQKmFcnW0Wc6vIzSlwwrQmUwm7PPMGQCzjgO8IxjFvqijyhABERABERABERABERABERABERABESh8AmqhCIhA2xEwM1ALpQjNLTnaLue9m1OHFKCp8hM0RWgzic9710SUuwiIgAiIgAiIgAiIQAEQUBNEQAREQAREQAREQAQKgICZgZoo94amRtoRmtQhBWjud0LQZhKfO4KRqY4iIAL5BHQuAiIgAiIgAiIgAiIgAiIgAiIgAiJQ+AT2XgvNciI0NdK9V0rb5dyhBGgzQ01NDerq6mAm8bntzEA5iYAIiIAIiIAIiIAIiIAIiECBElCzREAEREAERKAACZhZ0EiplZq1b520QwnQ3NukI0AtQJtWk0RABP4/e+8dZkd15ut+X0sgAUKInCQQ0WAyhgFswMLkaGEbg8nRYRywx3N8zpnnOffe88cNnplnPE5gMjZgMCLYgIEBTLQJNmDARBOEwORgQEIEhb77XZuSdrdaUkvqbu3w9qOlqlq14lvf3vu3vlq1SgISkIAEJCABCUhAAhKQgAQkIAEJtD+BFuphZn2yLj7TZm52SzmgcT63ytomzXzRbZsEJCABCUhAAhKQgAQkIIFmJ2D7JCABCUhAAhJYOAF8pe+9997CEy7FFC3jgGbNZ5feWIqWYtUSkIAEJNCpBOy3BCQgAQlIQAISkIAEJCABCTQpgcwMZkDjO23SJkZLOKAz62uadHd3NyvHIWiXVUhAAhKQgAQkIAEJSEACEpCABCTQ/gTsoQQkIIFFI8As6A8++KBp35nXEg5oIM6YMWPRyJtaAhKQgAQkIAEJSEACS0LAvBKQgAQkIAEJSEACEmgRAsyCxofajM1tegd0ZgZTyAmZzf1Gx2a8wLZJAu1AwD5IQAISkIAEJCABCUhAAhKQgAQk0P4E7OHiEchsbv9p0zugwY733uU3IGGQgAQkIAEJSEACEpCABCQw6ASsQAISkIAEJCCBFiOA7xQfajM2u+kd0MBj9nMzwrNNEpCABCQggcElYOkSkIAEJCABCUhAAhKQgAQkIIH+EcCHii+1f6mHLlXTO6BBsdS99zTCIAEJSEACEpCABCQgAQlIQAISkEB7E7B3EpCABFqYAA7oZmx+Szigm9Fz34wX0zZJQAISkIAEJCCBdiFgPyQgAQlIQAISkIAEJCCB9iDQ9A7oTF882B6mZi9alIDNloAEJCABCUhAAhKQgAQkIAEJSKD9CdjDNiGQ2Xy+1KZ3QLfJtbcbEpCABCQgAQlIQAISkIAE+kHAJBKQgAQkIAEJSKC9COiAbq/raW8kIAEJSGCgCFiOBCQgAQlIQAISkIAEJCABCUhAAktMoOkd0EvcQwuQgAQkIAEJSEACEpCABCQgAQlIoOkJ2EAJSEACEmhPAjqg2/O62isJSEACEpCABCSwuATMJwEJSEACEpCABCQgAQlIYMAI6IAeMJQWJIGBJmB5EpCABCQgAQlIQAISkIAEJCABCbQ/AXsogfYmoAO6va+vvZOABCQgAQlIQAISkIAE+kvAdBKQgAQkIAEJSEACA05AB/SAI7VACUhAAhJYUgLml4AEJCABCUhAAhKQgAQkIAEJSKA9CCzIAd0ePVyEXmRmZC44LEJxJpWABCQgAQlIQAISkIAEJCABCbQCAdsoAQlIQAIDQCAzo6ura45/MfwrBLrK//5XCMyYMSM+/PDDBYbu7u6Stj//YXCE/qTtnYZ6CL3jPZaABCQgAQlIoJ0J2DcJSEACEpCABCQgAQlIoFUJ4Fd877334v333y/+RfqRmWw6OuiA/ujy4yhed911Y/3114/11luvbMePH1+2HFdhxIgR0R/HMGnefffdILD/UTUL3WRmzJ49O/bcc8846aSTYuzYsYFjPFNjXSi8gUxgWRKQgAQkIAEJSEACEpCABCQgAQm0PwF7KIEBIIDvb9asWcWnuNtuu8WnPvWpwK9I0fr1IjreAZ1Zd/guv/zycdxxx8U//uM/xle+8pXi/D3mmGPixBNPjK9+9asljnNrr712cQjjsM7MOVPqMxObKgGjGzlyZOy9995xwAEHxKhRo0p85tw0mdkjb2aWNPxH/rXWWis22mijWGGFFYpDOnPuedIYJCABCUhAAhKQgAQk0E4E7IsEJCABCUhAAhJoRQL48fAT7r///sWPyBZ/4CmnnBKHHXZYjB49OmbOnFn8gK3Yv4Foc8c7oIGYmWVa/F133RW33XZb3HzzzfHkk0/G8OHD46WXXopbbrklbr/99rj11lvjnXfeiWHDhsUHH3zQI1SGlJnFqDC+nXfeOXbdddey9gvT76mLkFmvryqDafm974ZwzHlmQ5PHIAEJSGCICFiNBCQgAQlIQAISkIAEJCABCUhAAv0gkJlloir+P2Y+v/LKK3HppZfGJZdcEo888kjssMMOccghhzSr87kfPRyYJB3vgMZRnJnFmXzDDTfENddcE1deeWUxEmYfv/jii3HVVVfFtddeW869/vrrxWg23HDDskzGgQceGDiaV1555WJwTLdfc801i4HhQGYJjm222Sa233774rimPpzL48aNCwyTuyI77bRTrLbaasUJXl3WzCz1VMduJSABCUhA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998/Vl555X6VQzuGDRsWEyZMiE984hOlncQZJCABCUhgsAhYrgQkIIGeBNCCTARoDEwoYCID+i5zwbqwZ2kDe5RZ16orrbRSHHDAAbH++usHkywyl16bBraHliYBCUhAAhKQgAQksDQIdIYDeiFkM+uziddcc8047LDD4pOf/OR8c2TmPDOkcRDvsssuMXHixNhmm22KYzczA2cvjuPMDP4YcOB03nvvvUtaHMqIes5VITN7lJ9ZHwissMIKcfjhh8dRRx0VI0aMKE7yT33qU3HooYfG1ltvXWY0Z2ZVzDzbzCx51l133eIo32effWLUqFF9Oq4zs0cb5imsFpGZtf/9JwEJSEACEpCABCTQHwKZWZy5a6yxRhx88MFzwiGHHBIHHnhg0Z9MaFiUiRALqjezf1ots2c6nOBbbbVV0apo4sye56s6M3OBejFzweerctxKQAISGHACFigBCUhAAk1HQAd07ZJk1gcEY8aMid133z0+/vGP12Ln/cejkTiRWfIisy6qcT5nZtx///1x0003xWOPPVYcz8xqYXbyd7/73dhss82CmdXkR9T/4Q9/iBtvvDFefvnlwEFNTZn18nqXz7kqcI7AMfmok3Ief/zxWGaZZcqMa871FWgnaV555ZW45ZZb4ve//31ZMoQ2ca7KwzF1NPaxOseW82znd55zBglIQAISkIAEJCCBeQmgsdCbTFzYaaedYocddojtt98+dttttzKp4Nhjj43tttuuOKozc94C+hGTWc+HViN5Zv2Y/cYwP02HxnziiSeKrkVrNupE8mdmcTxTPv3JTKJ7hMz6BIr5ne+R2AMJSEACEpCABCQggbYnoAP6o0ucmWXmMo8/4jz+KLoI7Eqg83gks5qXX375sv4ywjszi8P5mWeeiUsvvTReeuml4lRGcC+33HIxevTo4hyO2l9mlvL++Mc/xtVXXz3HAVw7VcqjXmZIkw9H9fxmwFB2NTi47LLLiiMb53LvAQLlZtbrrPap49prry0O6KpfmVmW9YjaH32kbPpI/VUfa6dK21k/mnzVedrJcWaSxNB8BGyRBCQgAQlIQAJNRABthR574YUX4rTTTivhB//5g7jpxpvKU25MYFhrrbWKNszMor8ys0cPMrPEN0ZmZtFzlE0dPD2HZkSrZWZUf5lZ8qLp0I6k44k8AmnQuq+++mpMmjQpcESjC0mX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", + "created": 1776930818153, + "lastRetrieved": 1776930818153 + }, + "e404b7a887fceedd6ff6f4037941f0654fef2ff3": { + "mimeType": "image/png", + "id": "e404b7a887fceedd6ff6f4037941f0654fef2ff3", + "dataURL": "data:image/png;base64,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bpU9tp5tITB79uwoD9oQrKm0c+XBG36Fq1K+oc4bkw11zdrXI9hSe+6Bc27x8kl5h8YD56xvjlmbj41tjpwce713ahzy/2bGq74wIw7812mxy1unxBYvnxBjJ3RmH031VR58aWtsMi423X9injbYZezgC6jDGpvsOynfPvWYunb96jASr8867L5FKKCAAq0tYO0VUEABBRoqMKahpVu4Ag0QIGjDY0+paFraVAvapDwEb3iMiuliwIfpZk90QNyIOhIMoiVPI8quVObmB0+Mvd83LbaYPTHWesn4mDAli2zMmJi2zrhYf5cJsc3hU2LfD8+IKev4tlTJz3kKKKBAJwi4jwoooIACCijQV6Bt7pDWWGONeOlLX9orTZo0qdceH3jggfHBD34wTj311Pj4xz+eP160/vrr98pTPjFt2rQ44IAD4t3vfne+3qc//el45zvfGZtsskl51pqnqSud5f7Lv/xLfP7zn48vf/nL8YlPfCLfxq677lpzOdStfJ+nT5/eZ322V56v3GbbbbfN9+szn/lMaT+/EO9617vioIMOijXXXLNPeaM5YyhBm0r1rffjUpW2UY95PNJUSwfEQ93Wlq+cPNRVB7XeDm+aHNseMTnGjM2611s8N2L+EytjxbKePoKmrzc29vvQtJi+UU++7hUcUUABBWoXMKcCCiiggAIKKNA2Am0TuCEQctVVV0Ux7bTTTvmB2n///fP55557bvz7v/97nHTSSd0d+d54443x2c9+NiZMmJDnTX+yLMsDKSw/77zz4r/+67/y9egM+HOf+1ze6S2/4ETwJK0z0JB6XHDBBXHnnXfGt771rfjYxz4W73jHO+KEE06ID33oQ/k2fvOb38RNN92U12/cuHH9FnnwwQfn+1Xc50MOOaTPOv3ZELC58MIL83LYr/e9732l/Tw5/t//+395B7+33357RZ8+GxmBGcMN2qQWNyNQ1bptgkea6lZYhYIICjW61c2szcfGxntP7N76s/csi9//x9z4/WfmxDWnzovLPj4vbj1rYSxf1BXAGT95TGy678gElLor5YgCVQVcoIACCiiggAIKKKDA6Aq0TeCmGiOd9hJgocVJpTxjx46N9773vXHZZZfF5MldN4u0Wvntb3+bB1JmzZpVabVgPYIklJ3Wq5ixNHPMmDHxta99Lc4///zYd99983VLs6v+51EeWgRd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QAgIgdZHQDMUAkJACAgBISAEhIAQaEMEWokvaGrippUYtDa8jjRlIdBkCGi4QkAICAEhIASEgBAQAkJACDQLAq3EFzQ1cfPJJ580y57ROIXADAQUEgJCQAgIASEgBISAEBACQkAICIG6ItBKfEFTEzcff/xxXRe60RvX+ISAEBACQkAICAEhIASEgBAQAkJACAiBrgi0El8AcdN1hk2SgurT1KlTm2S0GqYQEAJCQAgIASEgBISAEBACQkAICIE+RaAtOocngC9olck2NXHDInz44Yd4ckJACAgBISAEhIAQEAJCQAgIASHQawioIyHQuAi0Gk/Q9MQN59Y++OCDxt0xGpkQEAJCQAgIASEgBISAEBAC+QgoRwgIASFQIALwA/AEBTbZ5001PXEDgrBpH330EUE5ISAEhIAQEAJCQAgIgTZFQNMWAkJACAiB9kYAXgB+oNVQaAnihkX53//+ZywSYTkhIASEgBAQAkJACPQAAVUVAkJACAgBISAEmgwB+AB4gSYbdlXDbRnihtmySKhFEZYTAkJACAgBIdD3CGgEQkAICAEhIASEgBAQAvVGAB4APqDe/fRV+y1F3AAialHvvfeeYUWauJwQEAJCoCUQ0CSEgBAQAkJACAgBISAEhIAQ6IQAcj/yPzxAp4wWi7QcccP6YIhoypQp9t///tdg3ljMTz/91Frpc2DMU04IdAcB1RECQkAICAEhIASEgBAQAkJACDQbAsjzyPXI98j5yPvI/cj/zTaXWsfbksSNg8DCwryxmO+++24gct5++22TKwQD4ai9pD2gPaA9oD2gPaA9oD2gPdD0e2D22Wc3XDvKCMwbp7m3h3zEWuOadb0hapDrke+R85H3XfZvdb8BiJtWh1jzEwJCQAgIASEgBISAEBACQkAICAEhIATMhEF3EBBx0x3UVEcICAEhIASEgBAQAkJACAgBISAE+g4B9SwE2ggBETdttNiaqhAQAkJACAgBISAEhIAQEAKdEVBMCAgBIdDoCIi4afQV0viEgBAQAkJACAgBISAEmgEBjVEICAEhIASEQF0QEHFTF1jVqBAQAkJACAgBISAEuouA6gkBISAEhIAQEAJCYAYCIm5mYKGQEBACQkAICIHWQkCzEQJCQAgIASEgBISAEGh6BETcNP0SagJCQAgIgfojoB6EgBAQAkJACAgBISAEhIAQ6BsERNz0De7qVQi0KwKatxAQAkJACAgBISAEhIAQEAJCQAjUgICImxrAUtFGQkBjEQJCQAgIASEgBISAEBACQkAICAEh0PoIiLhp/TXWDIWAEBACQkAICAEhIASEgBAQAkJACAiBJkVAxE2TLpyGLQSEgBAQAkJACAgBISAEhIAQEAJ9g4B6FQK9iYCIm95EW30JASEgBISAEBACQkAICAEhIARmIKCQEBACQqAiAiJuKkKkAkJACAgBISAEhIAQEAJCoNER0PiEgBAQAkKgVREQcdOqK6t5CQEhIEHGtWUAABAASURBVASEgBAQAkKgOwiojhAQAkJACAgBIdBQCIi4aajl0GCEgBAQAkJACLQOApqJEBACQkAICAEhIASEQM8REHHTcwzbpoWFVp3VVvrJbLb+UbN2caST3zZgaKJCQAj0JgLqSwgIASEgBISAEBACQkAItC0CIm7adumrnziEDGTNOsM/sWU2m2rzL/tJF0c6+VtemQRyp/rWVVII9CYC6ksICAEhIASEgBAQAkJACAgBIdBcCIi4aa716tXRxoQNZE21nUPitDyBUy0YKicEhIAQEAJCQAgIASEgBISAEBACQqAHCIi46QF4RVRt1DY4+oQGTS2ETXouEDi0k05XXAg0EwJf/OIXbcUVV2ymIWusEQJJktgqq6xiM82kn7sIFgWFgBAQAkJACAgBISAE+gCB7napJ9nuItfC9SBbIF2KmCLtcMyqiLbUhhDobQTWXHNNu+WWW+ySSy6xs88+u7e7V389RGCuueay8ePH29ixY+2mm26y+eefv4cttkb1U0851c4999zg1lhjjYac1JgxY8L4GOdyyy3X7TEOHz681M7mm2/e7XbaqWIz7I92Wg/NVQgIASGQg4CS2wwBETdttuCVplskaeN9obVDux6XLwSaBYFtt93G5pxzzjDctdZay1ZaaaUQ1p/mQGCTTTaxRRddNAx2gQUWsB/+8Ich3O5/VvnmKrbaaqsF9+Uvf7kh4fDx4c8999zdHiOkD23gFllkkW63004Vm2F/tNN6aK5CoP4IqAchIASaAQERN82wSr00RmzaoCFTj+5ol/br0bbabA4EvvOd79juu+8e3KabbtoUg3722edK43z//fft5ZdfLsWLDjQjPkVjUG171WL19NNPd2rymWee6RRXRAgIgcZAAM0viFZ3X/jCFyoO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jVkICAEhIASEgBAQAkJACExDQH+FgBBodQRE3LT6Cmt+QkAICAEhIASEgBAQAkKgGgRURggIASEgBBoSARE3DbksGpQQEAJCQAgIASEgBJoXAY1cCAgBISAEhIAQKA4BETfFYamWhIAQEAJCQAgIgWIRUGtCQAgIASEgBISAEGh7BETctP0WEABCQAgIgXZAQHMUAkJACAgBISAEhIAQEALNiYCIm+ZcN41aCAiBvkJA/QoBISAEhIAQEAJCQAgIASEgBHoRARE3vQi2uhICMQIKCwEhIASEgBAQAkJACAgBISAEhIAQqISAiJtKCDV+vkYoBISAEBACQkAICAEhIASEgBAQAkJACLQoAhFx06Iz1LSEgBAQAkJACAgBISAEhIAQEAJCQAgIgQgBBZsJARE3zbRaGqsQEAJCQAgIASEgBISAEBACQqCRENBYhIAQqDsCIm7qDrE6EAJCQAgIASEgBISAEBACQqASAsoXAkJACAiBbARE3GTjolQhIASEgBAQAkJACAiB5kRAoxYCQkAICAEh0FIIiLhpqeXUZISAEBACQkAICIHiEFBLQkAICAEhIASEgBDoewRE3PT9GmgEQkAICAEh0OoIaH5CQAgIASEgBISAEBACQqCbCIi46SZwqiYEhIAQ6AsE1KcQEAJCQAgIASEgBISAEBAC7YWAiJv2Wm/NVgg4AvKFgBAQAkJACAgBISAEhIAQEAJCoAkQEHHTBIvU2EPU6ISAEBACQkAICAEhIASEgBAQAkJACAiBeiHQOMRNvWaodoWAEBACQkAICAEhIASEgBAQAkJACAiBxkFAI6kJARE3NcGlwkJACAgBISAEhIAQEAJCQAgIASHQKAhoHEKgHRAQcdMOq6w5CgEhIASEgBAQAkJACAgBIVAOAeUJASEgBBoWARE3Dbs0GpgQEAJCQAgIASEgBIRA8yGgEQsBISAEhIAQKBYBETfF4qnWhIAQEAJCQAgIASFQDAJqRQgIASEgBISAEBACHQiIuOkAQf+FgBAQAkJACLQyApqbEBACQkAICAEhIASEQPMiIOKmeddOIxcCQkAI9DYC6k8ICAEhIASEgBAQAkJACAiBXkZAxE0vA67uhIAQAAE5Ia830VUAABAASURBVCAEhIAQEAJCQAgIASEgBISAEKgGARE31aCkMo2LgEYmBISAEBACQkAICAEhIASEgBAQAkKghREQcTN9ceUJASEgBISAEBACQkAICAEhIASEgBAQAq2PQLPNUMRNs62YxisEhIAQEAJCQAgIASEgBISAEBACjYCAxiAEegUBETe9AnPrdbLQqrOau9abnWYkBISAEBACQkAICAEhIAR6EwH1JQSEgBDIR0DETT42yokQgKRZ/6hZDbfllYmtM/yTkiOOW+knsxkuqqagEBACQkAICAEhIASEQG8ioL6EgBAQAkKg5RAQcdNyS1rshJywgaiZf9lPDJfXwzKbTTWckzh55ZQuBISAEBACQkAIND4CGqEQEAJCQAgIASHQGAiIuGmMdWjIUaA944RNrQOEwEE7p9Z6Ki8EhIAQEAIth4AmJASEgBAQAkJACAgBIdADBETc9AC8Vq3qWjaQLz2ZI9o5aN/QXk/aUV0hIASEwDQE6v93rrnmsiRJ6tLR97//fTv33HODGzVqVF36UKNCQAgIASEgBISAEBACrYeAiJvWW9Mez2i5razskahaO0BrR+RNraipfF0RUONCYDoCCy64oO25557229/+1m688Ua7++677Z577rGLLrrIDj/8cPve9743vWTPvYUXXthWW2214FZYYYWeN9gLLcw0U30fE2aZZZZemIW6EAJCQAgIASEgBIRAcyNQ3yey5samLUfP8Sg0ZYqePGRQ0W02QnsaQ/UIfOc737Hdd989uE033bT6iipZCAJf//rXA/aswa677lqxza233rpUfvXVV69YvhkLrLLKKnbxxRcH4maDDTawRRZZJEzji1/8oq200kq25ZZb2oknnmgjRoywehMYoeM6/Pnyl79sG2+8sW2yySbBffOb3yzby0ILLWRgsf3229t+++1nQ4cOtZ122sk22mgj+9rXvla2bjWZc889tw0cONB+9rOf2QEHHGC//OUvQ3iLLbawpZdeupomVEYICAEhIASEgBAQAm2HgIibxljyhhgFpE1Pj0flTQQySDZv8tBpj3SEwZ///OeG23zzzdtj0g00y2WWWSZgD/577bVXxZH96Ec/KpVfe+21K5ZvtgKQGeecc44tsMACYeiff/65vfbaa3b//ffbc889Zx999FFI58+2225rlG027RBImp133tkgqL7xjW8YbokllmBKmY49ssMOO9i3vvWtQNLMMcccxpzRFOrfv7+Bw5prrplZt5rEr3zlK/bTn/7UaANC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CAgBISAEhIAQEAJCQAgIASHQigiIuOm8qoplIABZA0mz5ZWJrTP8E1tms6nBzb/sjDBp5FNOJE4GiEoSAkJACAgBISAEhIAQEAJCQAgIgUZCoGnGIuKmaZaq9wfqhA1kDSRNNSOgHCQO5A31q6mjMkJACAgBISAEhIAQEAJCQAgIgeZFQCMXAvVFQMRNffFt2tYhXWohbNIThbyhPgROOk9xISAEhEBfIJAkia2yyio200z66fviF79oK664Yl8sQ936XGSRRWzxxRevW/tqWAgIASHQKwioEyEgBIRABgJ6es0Apd2TIFsgXYrAAQKH9opoS20IgWZFYKWVVrJzzz03uLPPPruu0xgzZkzoh/6WW265uvbVTI3PNddcNn78eBs7dqzddNNNNv/88zfT8Gsea7l9sOaaa9ott9xil1xyidV7P9Y88G5WGDJkiF1//fU2btw4+/nPf97NVlRNCLQWApqNEBACQkAItA4CIm5aZy0LmQmaNpAthTQ2vRHaE3kzHQx5bYnAPPPMY6uttlpw/fv3rysG3g/+3HPPXde+mqnxTTbZxBZddNEw5AUWWMB++MMfhnCr/mH93aX3wbbbbmNzzjlnmPpaa61lEIsh0sR/fvSjH9nMM88ctKm22247S5KkiWfTN0OfZZZZ8jouJL3e7RcySDUiBISAEBACQqBBEZipQcelYfURAkVp2qSHD3kDKZROV7x9EPjOd75ju+++e3Cbbrpp+0xcM20IBJ5++ulO43jmmWc6xdsp8uyzz5Wm+/7779vLL79citc3UHvrW2+9dbhncO9YffXVcxv461//Wsp78cUX7fPPPy/F2yWw1FJLGQSlu69+9asVp7700kvbj3/8Y9t3333tV7/6le233372k5/8pJBjdBCGAwcOtJ/97Gd2wAEH2C9/+csQ3mKLLYx+Kw5OBYSAEBACQkAICIESAiJuSlAoUG+tmOW2EsbtjMAGG2wQjjBwjGHzzTdvZyg0954i0I36kyZNskMOOcRuv/12GzVqlD300EPdaKU1qlx++eV22mmnheNSCNP/+9//GnZiaNJwz8CtvfbaueP89a9/bZdddpldddVVNnr06NxyrZiBJsugQYMMkusb3/iGuZtvvvlyp5skSdA622qrrQyC5wtf+EIoO8cccwTNNMj1bbfd1mg7ZNT45ytf+Yr99Kc/NY7lffnLXw7aUEmSGOFll13WttxyS9twww273X6Nw1FxISAEhIAQEAJNj4CIm6ZfwuImgFZMca11bYkvTknrpisuSuk7BNRzeyFw880327Bhw4ItlPaaeefZfvjhh4atnxEjRtgjjzzSObNJY6+//rqddNJJdtxxx9nf//73Jp1F7cNeaKGFbKeddgrHMJOk+uNh3//+92355ZcvdThlyvv2t7/9zd59991S2pJLLhnInVJClYGFF17YINywK+VVaP+1116zTz75JCQlSWKrrrqqQRyFBP0RAkJACAgBISAEyiIg4qYsPO2TWZS2zV/Hz2r3HzeLvflC9ln5FtW6aZ+NopkKASEgBIRAQyCANsuOO+5oaLcwoPfeew+vouPrWyuvvHKp3PPPP2+///05dsUVV9g555xjjz/+eCmPI01f//rXS/FKgSRJgjYNXy2j7Mcffxy0oM4660y79NJLg6bXww8/TFZw/fr1s1raD5X0RwgIASEgBIRAGyIg4qahFr3vBlOEtg2kzaRLPrY3Hptqbz2f/eYPrZvenCVq3xzL2X///e3www8PbybjB1YeGDfbbDPDrbfeemWHNtNMM9n3vvc922effeyoo44Kxy6GDBliPHiWq0g+7eMGDBhQKooa++CNB9uhhx5qBx54YFBzd+OppUJlArzNRDWeow4cE8CGwPbbb29f+tKXytQyw04EY8E5FkmSGGFsEXCMZP31189s42tf+5rxppZjC0ceeWSwPQFuqL9nVaxXkgsAABAASURBVED9nn5wqON7GeZOmrtyX/j55je/Gfo54ogjbOTIkbbXXnsZBlW9rd7yOX6wyy67hPViPzF21sD7BxfScLwF9/Tu+AsuuKDtsMMOYV8cc8wxwUdAI7077VHn29/+dglH1u+73/1uTQZc2ZscfTj44IPt6KOPDjYx2L/dPUrBmKpxK6ywQrg+wZWjFZXqYEuJsrj+/fuXinMvIM0de7OUmQqgMcDRk1/84hfh2M2QIUOMdvP2OdUx8OttI1CTlueYh5cF17xy3HPYd9gE4foeecRIYx9wDTOfvHqV0hdffPESptzT0uWxkeLjq8YfMGBAuolSvDtzWGKJJUrji68xbLj4eDjKU+qkI8B9wvPide/I6vI/SRLjHse9hHsK9zzCpCVJ9m+XN5K1dsxxlVVWsd122y3sF+zx0JbXqZePxopff9hs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ASEgBISAEGgmBDRWISAEWg8BETett6aakRAQAkJACAgBISAEhIAQ6CkCqi8EhIAQEAINgoCImwZZCA1DCAgBISAEhIAQEAKtiYBmJQSEgBAQAkJACPQEARE3PUFPdYWAEBACQkAICIHeQ0A9CQEhIASEgBAQAkKgDREQcdOGi64pCwEhIATaHQHNXwgIASEgBISAEBACQkAINAsCIm6aZaU0TiEgBBoRAY1JCAgBISAEhIAQEAJCQAgIASFQVwRE3NQVXjUuBKpFQOWEgBAQAkJACAgBISAEhIAQEAJCQAh0RUDETVdMmjtFoxcCQkAICAEhIASEgBAQAkJACAgBISAEWgaBXOKmZWaoiQgBISAEhIAQEAJCQAgIASEgBISAEBACuQgoo7EREHHT2Ouj0QkBISAEhIAQEAJCQAgIASEgBJoFAY1TCAiBOiAg4qYOoKpJISAEhIAQEAJCQAgIASEgBHqCgOoKASEgBISAIyDixpGQLwSEgBAQAkJACAgBIdB6CGhGQkAICAEhIASaHAERN02+gBq+EBACQkAICAEh0DsIqBchIASEgBAQAkJACPQFAiJu+gJ19SkEhIAQEALtjIDmLgSEgBAQAkJACAgBISAEqkZAxE3VUKmgEBACQqDRENB4hIAQEAJCQAgIASEgBISAEGh1BETctPoKa35CoBoEVEYICAEhIASEgBAQAkJACAgBISAEGhIBETcNuSzNOyiNXAgIASEgBISAEBACQkAICAEhIASEgBAoDoFGJW6Km6FaEgJCQAgIASEgBISAEBACQkAICAEhIAQaFQGNqwICIm4qAKRsISAEhIAQEAJCQAgIASEgBISAEGgGBDRGIdCaCIi4ac111ayEgBAQAkJACAgBISAEhIAQ6C4CqicEhIAQaCAERNw00GJoKEJACAgBISAEhIAQEAKthYBmIwSEgBAQAkKgpwiIuOkpgqovBISAEBACQkAICIH6I6AehIAQEAJCQAgIgTZFQMRNmy58rdNeaNVZDbf+UbPallcmXRzpK/1ktlCm1rZVXggIASEgBHoTAfUlBISAEBACQkAICAEh0EwIiLhpptXqg7E6WbPO8E8MN/+yn2SOgvRlNpsaykDg4DILKlEICIHWQUAzEQJCQAgIASEgBISAEBACQqDuCIi4qTvEzdsB5Es5siZvZhA4OOrnlVG6EIgRULj1EFhuueVsrrnmaqmJJUliq6yyis00k346W2phNRkhIASEgBAQAkJACDQ4Anr6bPAF6qvhQbpAvvSkf+pzhKonbdRYV8WFgBAoAIHhw4fbueeeG9zmm2/epcVK+b/5zW/s8ssvt5tvvtnWX3/9LvWbMQESavz48TZ27Fi76aabbP7552/GaWjMQkAICAEhIASEgBAQAk2IgIibzEVr78QiSBtHkCNUIm8cDflCoDkQQFtmtdVWM9wiiyzSZdDl8vv162cDBgww/n3xi1+0bbfdlmDTu0022cQWXXTRMI8FFljAfvjDH4aw/giBcgjUWztrlllmKde98oSAEBACQkAICIGqEGj8QiJuGn+NenWERZI2PnCRN45Ee/vf+c53bPfddw9u0003bW8wapx9M2H32muv2dtvv12a4fPPP18Ke+DrX/962Afsh1133dWTG9p/+umnO43vmWee6RRXpDUR+PKXv2wbb7yxQdzhvvnNb1ac6MILL2xbbLGF7bXXXnbAAQfY/vvvbzvssIN973vfM9qr2ECZAhA1a621lu288872y1/+0n71q1/Zz3/+80CQrrnmmmVqKksICAEhIAR6BQF1IgTqhICImzoB24zN1oO0cRwgb2jf4/LbD4ENNtggCBgIGVnHb9oPkepn3EzYTZ06NQiUHCc666yzjKNF6Zkus8wypb2AcJvOb8T4pEmT7JBDDrHbb7/dRo0aZQ899FAjDlNjKhABSBoIEuwafeMb3zDcEkssUbaHgQMH2k477WTLLruszTPPPJYkic0+++y2+OKL2+qrr24//elPDY21so3kZM4222y23XbbGRptCy20kM0666yhJMf4llxySaPvH//4xzb33HOHdP0RAkKguRHQ6IWAEBACMQIzxRGF2xuB+Zb7vK4AYPOmrh2ocSEgBBoCgSeffNIOPfTQYCNnypQpDTGmIgaBzZ5hw4bZ9ddfX0RzaqNBEfjCF75gW221lX3/+983yJJqhwmhEmu9fPzxx/bPf/7T/vOf/9inn34ampljjjnCMbuVV145xKv9w5h+9KMfBQLI69D+q6++ah988IEn2Ve/+tVAHNUy7lJlBVoVAc1LCAgBISAEWgABETctsIhFTAFtGLRiimjrzRfyz9zTTxF9qA0hIASEgBAQAkUj0K9fP9tll11t6aWXDk1Djnz44YchXO7PggsuaGus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d7kVr/P7v//75S/+4i/K4x//+PKMZzyjmvbaa69y97vfvUwiYHnjG9+4POQhDylPe9rTqrT32Wef8rCHPazsuuuu5TKXucyKeVvLTscSIECAAAEC7RK4RLuyIzfzFMgjTeMMQLzePO7wgPWe6bwuCNzlLncpT3rSk6rpvve9bxeKtLBlUBcLW3WLlvGFzW+CLHvssUcVhLnpTW9a6mml4Mg1r3nNKmCTYM//+3//r1zykpesetxc+cpXLjvttFMVtL7BDW6wbpO73vWu5T73uU/Zbrvtyu/93u9V6Vz2spct1772tcttb3vb8uhHP7pc5zrXqbb7Q4AAAQIECHRL4BLdKo7SbEQgjzRt5PzVzk1QSK+b1ZTsJ0BgWwFbCMxO4CY3uUnZc889y1oex7rqVa9aHvSgB5UEUpLT3/72t+UH3/9B+d73vld+85vfZFO59KUvXRK0TqCl2rCGP/e85z3LrW996/4ZSf/73/9++dnPftbf9gd/8AfloQ99qOBNX8QCAQIECBDojoDATXfqckMlSW+bDSWw5eSfnHup8s2TL71lbduZXjfbmtgyQwGXIkCAwAiBjEeTxzgz1Y9E/eIXvxhx9Nabd911134vmAsvvLC8/e1vL8e/5fhywgknlLe85S3lf/7nf6oTMi5Njq1WxvyTsaFufvOb948+99xzyytf+coq3de97nXluOOOKz//+c+r/SnDLrvsUi37Q4AAAQIECHRHQOCmO3W5oZJcZYffbej8nJyAzekvuLCcfcKvRgZv0usmx85qSnfyfMOZcQBe8IIXlEc+8pFlxx137F8+3dbT9TzTne985/72YQv5QJyu6k9+8pPLwQcfXJ73vOdV38put912ww7vb8v+pJ+p+YH6Kle5Stn9nruX5z//+eVZz3pWeeADH1jS1b5/4ioLV7jCFapznv70p5cXvehF5ZnPfGb1bWu+dV3p1Hxrm7xkqi16vV7lknEZDjzwwLLzzjsPTeJ617teucc97lE97vTCF76w6voftzwWMOyENH5ynUzNLvwpe7bVU76tHnZ+tt3iFreorvO3f/u35YADDih77713ud3tbpddU51uf/vbV48lJI93uMMdVr1W7o0cmynjUAw7odfrVbYpQ8oS6yzHu9frDTul2pZ7L+nWUx7jqHYM+TPqfltPXeRXiOpr5lGMIZfrb7rb3e7W91rL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5J0AAQIECBDojoDATXfqUkkIECBAgMCkBaRHgAABAgQIECAwZwGBmzlXgMsTIEBgOQSUkgABAgQIECBAgACB9QgI3KxHzTkECMxPwJUJECBAgAABAgQIECCwRAICN0tU2Yq6tYA1AgQIECBAgAABAgQIECDQdgGBm43XkBQIECBAgAABAgQIECBAgACB7gvMpYQCN3Nhd1ECBAgQIECAAAECBAgQWF4BJScwvoDAzfhWjiRAgAABAgQIECBAgEC7BOSGAIHOCwjcdL6KFZAAAQIECBAgQIDA6gKOIECAAIF2CgjctLNe5IoAAQIECBAgsKgC8k2AAAECBAhMUEDgZoKYkiJAgAABAgQmKSAtAgQIECBAgAABgRv3AAECBAh0X0AJCRAgQIAAAQIECCyogMDNglacbBMgMB8BVyVAgAABAgQIECBAgMAsBQRuZqntWgQuFrBEgAABAgQIECBAgAABAgRWFRC4WZWo7QfIHwECBAgQIECAAAECBAgQINBVgYsDN10toXIRIECAAAECBAgQIECAAAECFwtYWigBgZuFqi6ZJUCAAAECBAgQIECAQHsE5IQAgekLCNxM39gVCBAgQIAAAQIECBBYWcBeAgQIEBghIHAzAsZmAgQIECBAgACBRRSQZwIECBAg0C0BgZtu1afSECBAgAABApMSkA4BAgQIECBAoAUCAjctqARZIECAAIFuCygdAQIECBAgQIAAgfUKCNysV855BAgQmL2AKxIgQIAAAQIECBAgsGQCAjdLVuGKS+AiAX8JECBAgAABAgQIECBAYBEEBG4WoZbanEd5I0CAAAECBAgQIECAAAECBKYm0JrAzdRKKGECBAgQIECAAAECBAgQIECgNQIysjYBgZu1eTmaAAECBAgQIECAAAECBNohIBcElkJA4GYpqlkhCRAgQIAAAQIECBAYLWAPAQIE2isgcNPeupEzAgQIECBAgACBRROQXwIECBAgMGEBgZsJg3Y5uavf8tLlZo+4TNn54EtvM2V79ne5/MpGgAABAgRmKeBaBAgQIECAAIEICNxEwbSiQAIyCdbc8Tm/Ln9ynwvLVW/0622mbM/++7+jVwV3VkzQTgIECBCYpYBrESBAgAABAgQILLCAwM0CV960s94M2CRYM+71EsQRwBlXy3EEFklAXgkQIECAAAECBAgQmLWAwM2sxRfkenn0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QIDAOgQEbtaB5hQCBAgQIECAwDwFXJsAAQIECBBYHgGBm+WpayUlQIAAAQKDAtYJECBAgAABAgRaLiBw0/IKkj0CBAgshoBcEiBAgAABAgQIECAwDQGBm2moSpMAgfULOJMAAQIECBAgQIAAAQIE+gICN30KC10TUB4CBAgQIECAAAECBAgQILDoAgI3q9egIwgQIECAAAECBAgQIECAAIHuC7SyhAI3rawWmSJAgAABAgQIECBAgACBxRWQcwKTExC4mZyllAgQIECAAAECBAgQIDBZAakRILD0AgI3S38LACBAgAABAgQIEFgGAWUkQIAAgcUUELhZzHqTawIECBAgQIDAvARclwABAgQIEJihgMDNDLFdigABAgQIEGgKWCZAgAABAgQIEFhNQOBmNSH7CRAgQKD9AnJIgAABAgQIECBAoKMCAjcdrVjFIkBgfQLOIkCAAAECBAgQIECAQJsEBG7aVBvy0iUBZSFAgAABAgQIECBAgAABAhsWELjZMOG0E5A+AQIECBAgQIAAAQIECBAg0H2B4SUUuBnuYisBAgQIECBAgAABAgQIEFhMAbnulIDATaeqU2EIECBAgAABAgQIECAwOQEpESAwfwGBm/nXgRwQIECAAAECBAgQ6LqA8hEgQIDAOgUEbtYJ5zQCBAgQIECAAIF5CLgmAQIECBBYLgGBm+Wqb6UlQIAAAQIEagFzAgQIECBAgMACCAjcLEAlySIBAgQItFtA7ggQIECAAAECBAhMS0DgZlqy0iVAgMDaBZxBgAABAgQIECBAgACBrQQEbrbisEKgKwLKQYAAAQIECBAgQIAAAQJdEBC46UItTrMM0iZAgAABAgQIECBAgAABAgTmJjCzwM3cSujCBAgQIECAAAECBAgQIECAwMwEXGiyAgI3k/WUGgECBAgQIECAAAECBAhMRkAqBAhsFhC42YzgfwIECBAgQIAAAQIEuiygbAQIEFhcAYGbxa07OSdAgAABAgQIEJi1gOsRIECAAIEZCwjczBjc5QgQIECAAAECETARIECAAAECBMYRELgZR8kxBAgQIECgvQJyRoAAAQIECBAg0GEBgZsOV66iESBAYG0CjiZAgAABAgQIECBAoG0CAjdtqxH5IdAFAWUgQIAAAQIECBAgQIAAgYkICNxMhFEi0xKQLgECBAgQIECAAAECBAgQWGaBZQnc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ECBAgAABAgQIECAwaQHpEZizgMDNnCvA5QkQIECAAAECBAgQWA4BpSRAgMB6BARu1qPmHAIECBAgQIAAAQLzE3BlAgQIEFgiAYGbJapsRSVAgAABAgQIbC1gjQABAgQIEGi7gMBN22tI/ggQIECAwCIIyCMBAgQIECBAgMBUBARupsIqUQIECBBYr4DzCBAgQIAAAQIECBC4WEDg5mILSwQIdEtAaQgQIECAAAECBAgQILDwAgI3C1+FCjB9AVcgQIAAAQIECBAgQIAAAQLzERC4maW7axEgQIAAAQIECBAgQIAAAQLdF5hgCQVuJogpKQIECBAgQIAAAQIECBAgMEkBaREQuHEPECBAgAABAgQIECBAoPsCSkiAwIIKCNwsaMXJNgECBAgQIECAAIH5CLgqAQIECMxSQOBmltquRYAAAQIECBAgcLGAJQIECBAgQGBVAYGbVYkcQIAAAQIECLRdQP4IECBAgAABAl0VELjpas0qFwECBAisR8A5BAgQIECAAAECBFolIHDTquqQGQIEuiOgJAQIECBAgAABAgQIENi4gMDNxg2lQGC6AlInQIAAAQIECBAgQIAAgaUVELhZoqpXVAIECBAgQIAAAQIECBAgQGCxBNYTuFmsEsotAQIECBAgQIAAAQIECBAgsB4B57RAQOCmBZUgCwQIECBAgAABAgQIEOi2gNIRILBeAYGb9co5jwABAgQIECBAgACB2Qu4IgECBJZMQOBmySpccQkQIECAAAECBC4S8JcAAQIECCyCgMDNItSSPBIgQIAAAQJtFpA3AgQIECBAgMDUBARupkYrYQIECBAgsFYBxxMgQIAAAQIECBDYWkDgZmsPawQIEOiGgFIQIECAAAECBAgQINAJAYGbTlSjQhCYnoCUCRAgQIAAAQIECBAgQGB+AgI387NftisrLwECBAgQIECAAAECBAgQILBGgQUM3KyxhA4nQIAAAQIECBAgQIAAAQIEFlBAliMgcBMFEwECBAgQIECAAAECBAh0V0DJCCywgMDNAleerBMgQIAAAQIECBAgMFsBVyNAgMCsBQRuZi3uegQIECBAgAABAgRKYUCAAAECBMYSELgZi8lBBAgQIECAAIG2CsgXAQIECBAg0GUBgZsu166yESBAgACBtQg4lgABAgQIECBAoHUCAjetqxIZIkCAwOILKAEBAgQIECBA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gAABAu0TELhpX53IEQECBAgQWHQB+SdAgAABAgQIEJiQgMDNhCAlQ4AAAQLTEJAmAQIECBAgQIAAgeUWELhZ7vpXegLLI6CkBAgQIECAAAECBAgQWEABgZsFrDRZnq+AqxMgQIAAAQIECBAgQIAAgVkJCNzMSnrb69hCgAABAgQIECBAgAABAgQIdF9gQyUUuNkQn5MJECBAgAABAgQIECBAgMCsBFxnGQUEbpax1pWZAAECBAgQIECAAIHlFlB6AgQWRkDgZmGqSkYJECBAgAABAgQItE9AjggQIEBgugICN9P1lToBAgQIECBAgMB4Ao4iQIAAAQIEhggI3AxBsYkAAQIECBBYZAF5J0CAAAECBAh0R0Dgpjt1qSQECBAgMGkB6REgQIAAAQIECBCYs4DAzZwrwOUJEFgOAaUkQIAAAQIECBAgQIDAegQEbtaj5hwC8xNwZQIECBAgQIAAAQIECBBYIgGBmyWq7K2Lao0AAQIECBAgQIAAAQIECBBou8DGAzdtL6H8ESBAgAABAgQIECBAgAABAhsXkMJcBARu5sLuogQIECBAgAABAgQIEFheASUnQGB8AYGb8a0cSYAAAQIECBAgQIBAuwTkhgABAp0XELjpfBUrIAECBiQnTwAABh1JREFUBAgQIECAwOoCjiBAgAABAu0UELhpZ73IFQECBAgQILCoAvJNgAABAgQIEJiggMDNBDElRYAAAQIEJikgLQIECBAgQIAAAQICN+4BAgQIdF9ACQkQIECAAAECBAgQWFABgZsFrTjZJjAfAVclQIAAAQIECBAgQIAAgVkKCNzMUtu1LhawRIAAAQIECBAgQIAAAQIECKwqsPCBm1VL6AACBAgQIECAAAECBAgQIEBg4QWWtQACN8ta88pNgAABAgQIECBAgACB5RRQagILJSBws1DVJbMECBAgQIAAAQIECLRHQE4IECAwfQGBm+kbuwIBAgQIECBAgACBlQXsJUCAAAECIwQEbkbA2EyAAAECBAgQWEQBeSZAgAABAgS6JSBw0636VBoCBAgQIDApAekQIECAAAECBAi0QEDgpgWVIAsECBDotoDSESBAgAABAgQIECCwXgGBm/XKOY8AgdkLuCIBAgQIECBAgAABAgSWTEDgZskqXHEvEvCXAAECBAgQIECAAAECBAgsgoDAzcZqydkECBAgQIAAAQIECBAgQIBA9wXmVkKBm7nRuzABAgQIECBAgAABAgQILJ+AEhNYm4DAzdq8HE2AAAECBAgQIECAAIF2CMgFAQJLISBwsxTVrJAECBAgQIAAAQIERgvYQ4AAAQLtFRC4aW/dyBkBAgQIECBAYNEE5JcAAQIECBCYsIDAzYRBJUeAAAECBAhMQkAaBAgQIECAAAECERC4iYKJAAECBLoroGQECBAgQIAAAQIEFlhA4GaBK0/WCRCYrYCrESBAgAABAgQIECBAYNYCAjezFnc9AqUwIECAAAECBAgQIECAAAECYwkI3IzF1NaD5IsAAQIECBAgQIAAAQIECBDossBFgZsul1DZCBAgQIAAAQIECBAgQIAAgYsE/F04AYGbhasyGSZAgAABAgQIECBAgMD8BeSAAIHZCAjczMbZVQgQIECAAAECBAgQGC5gKwECBAisICBwswKOXQQIECBAgAABAoskIK8ECBAgQKB7AgI33atTJSJAgAABAgQ2KuB8AgQIECBAgEBLBARuWlIRskGAAAEC3RRQKgIECBAgQIAAAQIbERC42YiecwkQIDA7AVciQIAAAQIECBAgQGAJBQRulrDSFXnZBZSfAAECBAgQIECAAAECBBZFQOBmUWqqjfmUJwIECBAgQIAAAQIECBAgQGCqAq0I3Ey1hBInQIAAAQIECBAgQIAAAQIEWiEgE2sXELhZu5kzCBAgQIAAAQIECBAgQGC+Aq5OYGkEBG6WpqoVlAABAgQIECBAgACBbQVsIUCAQLsFBG7aXT9yR4AAAQIECBAgsCgC8kmAAAECBKYgIHAzBVRJEiBAgAABAgQ2IuBcAgQIECBAgEAtIHBTS5gTIECAwP9nx85xGIZhIAD6/69O4c6V4kgMj2kCBJAl7rBbAgQIECBAgAABAgQIJBNQ3CRbiHEI9BCQggABAgQIECBAgAABAgR2CChudii645yAmwkQIECAAAECBAgQIECAwGCBMcXN4B2LToAAAQIECBAgQIAAAQIExgh0C6q46bZReQgQIECAAAECBAgQIEBgh4A7CKQQUNykWIMhCBAgQIAAAQIECBDoKyAZAQIE3gsobt7b+ZIAAQIECBAgQIBArIDXCBAgQGCcgOJm3MoFJkCAAAECBAhcFwMCBAgQIECghoDipsaeTEmAAAECBLIKmIsAAQIECBAgQOCggOLmIK6rCRAgQOAbAWcJECBAgAABAgQIEHgKKG6eIv4TIFBfQAICBAgQIECAAAECBAg0EVDcNFmkGGcE3EqAAAECBAgQIECAAAECBP4poLiJ0fcKAQIECBAgQIAAAQIECBAg0F9ge0LFzXZSFxIgQIAAAQIECBAgQIAAgV8FfE/gFlDc3A5+CRAgQIAAAQIECBAg0FNAKgIESgsobkqvz/AECBAgQIAAAQIE4gS8RIAAAQLxAoqbeHMvEiBAgAABAgSmC8hPgAABAgQILAoobhahHCNAgAABAgQyCpiJAAECBAgQINBbQHHTe7/SESBAgMCqgHMECBAgQIAAAQIEEgp8AAAA//9cbxiCAAAABklEQVQDALQ+pXZgkeacAAAAAElFTkSuQmCC", + "created": 1776930840071, + "lastRetrieved": 1776930840071 + } + } +} \ No newline at end of file