From 5066d94f4a8ec618c9f1d31f169b293feda23b5e Mon Sep 17 00:00:00 2001 From: huskcass <333684917+huskcass@users.noreply.github.com> Date: Mon, 26 Oct 2026 02:04:18 -0700 Subject: [PATCH] fix(swiss): don't flag ScalingLimited as a scaler warning The cluster-resources scaler card took the first condition at False as a failure, so a healthy LLMScaler showed ScalingLimited=False (DesiredWithinRange) as an amber badge, and its condition dot as a warning. - scalerFailing: only AbleToScale=False or ScalingActive=False fails, with DecisionAvailable standing in when ScalingActive is absent (operator 0.5.0 writes only that one) - the scaler card badge and the standalone deploy page's scaling step use it - the scaler card draws ScalingLimited, and DecisionAvailable when ScalingActive is present, with a neutral dot; other cards are unchanged Co-authored-by: aceforeverd <11715200+aceforeverd@users.noreply.github.com> --- .../swiss/components/ReleaseObjects.tsx | 29 ++++++++++++++----- .../components/scaler-conditions.test.ts | 23 +++++++++++++++ .../modules/swiss/routes/DeploymentDetail.tsx | 4 +-- 3 files changed, 46 insertions(+), 10 deletions(-) create mode 100644 web/src/modules/swiss/components/scaler-conditions.test.ts diff --git a/web/src/modules/swiss/components/ReleaseObjects.tsx b/web/src/modules/swiss/components/ReleaseObjects.tsx index 6bfa9e2..c3b2b5f 100644 --- a/web/src/modules/swiss/components/ReleaseObjects.tsx +++ b/web/src/modules/swiss/components/ReleaseObjects.tsx @@ -246,7 +246,7 @@ function ScalerPanel({ ); const current = status?.currentReplicas; const desired = status?.desiredReplicas; - const failing = status?.conditions?.find((c) => c.status === "False"); + const failing = scalerFailing(status?.conditions); const custom = spec?.metricProvider === "Custom"; let state: React.ReactNode = null; @@ -349,7 +349,7 @@ function ScalerPanel({ )} - + )} @@ -681,7 +681,18 @@ function Stale({ ); } -export function Conditions({ conditions }: { conditions?: Condition[] }) { +// Only AbleToScale=False or ScalingActive=False (DecisionAvailable on operator 0.5.0) is a scaler failure. +export function scalerFailing(conditions?: Condition[]): Condition | undefined { + const of = (type: string) => conditions?.find((c) => c.type === type); + return [of("AbleToScale"), of("ScalingActive") ?? of("DecisionAvailable")].find((c) => c?.status === "False"); +} + +// ScalingLimited is informational; DecisionAvailable only mirrors ScalingActive when that is present. +function scalerNeutral(conditions?: Condition[]): string[] { + return conditions?.some((c) => c.type === "ScalingActive") ? ["ScalingLimited", "DecisionAvailable"] : ["ScalingLimited"]; +} + +export function Conditions({ conditions, neutral = [] }: { conditions?: Condition[]; neutral?: string[] }) { if (!conditions?.length) return null; return (