From aefcac742aeb5f394b7e17c6fef2668aa13d7a34 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 30 Apr 2026 14:15:29 +0300 Subject: [PATCH] =?UTF-8?q?tower=200.61.13=20/=20tower-ui=200.61.13=20?= =?UTF-8?q?=E2=80=94=20substrate=20readiness=20gate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Servers connected via the URL-token flow take ~5 min for the cluster-platform-v3 chart to install. Without a gate, an over-eager operator could click Deploy on a fresh server and land an instance on a half-built cluster — Argo sync errors on missing CRDs, Pod ImagePullBackOff on the in-cluster registry that doesn't exist yet. Two layers, both shipped here: Backend (defensive, non-bypassable): - argoCluster gains substrateStatus enum (ready | preparing | degraded | unknown) and substrateETA (RFC3339, when preparing) derived from the per-cluster -platform Argo App's health+sync + the App's createdAt + 5min budget. - handleCreateInstance + handleApplyMigration refuse with 409 + "server still preparing — please wait" when the gate fails. Same posture as the in-flight-delete check we shipped in 0.61.11. Frontend (visible UX, prevents the user reaching the gate): - DeployInstanceDrawer + MigrateDrawer server pickers disable rows where substrateStatus !== ready/unknown. Disabled rows show "Preparing · ~Xm" with a live countdown. - Default-server selection prefers a deployable row. - PlatformAppBadge shows the same countdown on the server card + detail vitals panel — operator can watch it tick down without leaving the Servers list. - Drawers auto-poll listServers() while a preparing server is visible — rows enable themselves the moment the chart lands. --- values.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/values.yaml b/values.yaml index af4b050..98ce615 100644 --- a/values.yaml +++ b/values.yaml @@ -9,7 +9,7 @@ backend: # so every cluster that runs Tower needs the same imagePullSecret # provisioned out-of-band (until cluster-platform-v3 owns it). repository: registry.odoosky.cloud/odoosky/docker-mirror/tower - tag: "0.61.12" + tag: "0.61.13" pullPolicy: IfNotPresent imagePullSecrets: - name: docker-mirror-pull @@ -29,7 +29,7 @@ frontend: enabled: true image: repository: registry.odoosky.cloud/odoosky/docker-mirror/tower-ui - tag: "0.61.10" + tag: "0.61.13" pullPolicy: IfNotPresent imagePullSecrets: - name: docker-mirror-pull