From f7212e1521933f463f4b9d400b6913be4e99dec8 Mon Sep 17 00:00:00 2001 From: Micah Alpern Date: Tue, 2 Jun 2026 09:50:00 -0700 Subject: [PATCH] fix(wizard): show progress indicator instead of disabled button while checking (#680) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The communication page rendered a disabled "Checking..." button during the TCP check, which reads as a frozen/unresponsive control. Replace it with a plain spinner + "Checking…" label so the in-progress state is unambiguous. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../WizardCommunicationPage.swift | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/Sources/KeyPathAppKit/InstallationWizard/WizardCommunicationPage.swift b/Sources/KeyPathAppKit/InstallationWizard/WizardCommunicationPage.swift index b796e2f32..df888e4d1 100644 --- a/Sources/KeyPathAppKit/InstallationWizard/WizardCommunicationPage.swift +++ b/Sources/KeyPathAppKit/InstallationWizard/WizardCommunicationPage.swift @@ -116,11 +116,17 @@ struct WizardCommunicationPage: View { .buttonStyle(WizardDesign.Component.SecondaryButton()) .disabled(isFixing) } else if commStatus == .checking || isAuthTesting { - Button("Checking...") {} - .buttonStyle(WizardDesign.Component.PrimaryButton(isLoading: true)) - .disabled(true) - .frame(minHeight: 44) - .padding(.top, WizardDesign.Spacing.itemGap) + // Show an honest progress indicator rather than a disabled + // button, which reads as a frozen/unresponsive control (#680). + HStack(spacing: WizardDesign.Spacing.labelGap) { + ProgressView() + .controlSize(.small) + Text("Checking…") + .foregroundStyle(.secondary) + } + .frame(minHeight: 44) + .padding(.top, WizardDesign.Spacing.itemGap) + .accessibilityIdentifier("wizard-comm-checking-indicator") } else { Button("Re-check Status") { Task { await checkCommunicationStatus() }