From 53d45c5e300eb659bde4a18cb9e57e7e36ccb828 Mon Sep 17 00:00:00 2001 From: 777genius Date: Thu, 23 Apr 2026 01:56:38 +0300 Subject: [PATCH] fix(team): keep launch loader for runtime-pending members --- .../components/team/members/MemberCard.tsx | 10 ++++-- .../team/members/MemberCard.test.ts | 32 +++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/renderer/components/team/members/MemberCard.tsx b/src/renderer/components/team/members/MemberCard.tsx index 44b58cc5..7b0e01c4 100644 --- a/src/renderer/components/team/members/MemberCard.tsx +++ b/src/renderer/components/team/members/MemberCard.tsx @@ -124,6 +124,7 @@ export const MemberCard = ({ const runtimeAdvisoryTitle = launchPresentation.runtimeAdvisoryTitle; const presenceLabel = launchPresentation.presenceLabel; const spawnCardClass = launchPresentation.cardClass; + const launchVisualState = launchPresentation.launchVisualState; const launchStatusLabel = launchPresentation.launchStatusLabel; const colors = getTeamColorSet(memberColor); const { isLight } = useTheme(); @@ -148,7 +149,12 @@ export const MemberCard = ({ !activityTask && !runtimeSummary; const showLaunchBadge = - !isRemoved && !activityTask && (presenceLabel === 'starting' || presenceLabel === 'connecting'); + !isRemoved && + !activityTask && + !runtimeAdvisoryLabel && + (presenceLabel === 'starting' || + presenceLabel === 'connecting' || + launchVisualState === 'runtime_pending'); const launchBadgeLabel = presenceLabel === 'starting' ? presenceLabel : (launchStatusLabel ?? presenceLabel); const showRuntimeAdvisoryBadge = @@ -271,7 +277,7 @@ export const MemberCard = ({ { }); }); + it('shows a connecting badge while runtime bootstrap is still pending after the process comes online', async () => { + vi.stubGlobal('IS_REACT_ACT_ENVIRONMENT', true); + const host = document.createElement('div'); + document.body.appendChild(host); + const root = createRoot(host); + + await act(async () => { + root.render( + React.createElement(MemberCard, { + member, + memberColor: 'blue', + runtimeSummary: 'Gemini · flash · Medium', + isTeamAlive: true, + isTeamProvisioning: false, + spawnStatus: 'online', + spawnLaunchState: 'runtime_pending_bootstrap', + spawnRuntimeAlive: true, + }) + ); + await Promise.resolve(); + }); + + expect(host.textContent).toContain('connecting'); + expect(host.textContent).not.toContain('ready'); + expect(host.querySelector('[aria-label="connecting"]')).not.toBeNull(); + + await act(async () => { + root.unmount(); + await Promise.resolve(); + }); + }); + it('shows ready instead of idle for confirmed teammates while launch is still settling', async () => { vi.stubGlobal('IS_REACT_ACT_ENVIRONMENT', true); const host = document.createElement('div');