diff --git a/solstone/apps/speakers/tests/test_who_is_this_js.py b/solstone/apps/speakers/tests/test_who_is_this_js.py index db30bf4f4..353d2622c 100644 --- a/solstone/apps/speakers/tests/test_who_is_this_js.py +++ b/solstone/apps/speakers/tests/test_who_is_this_js.py @@ -1983,10 +1983,10 @@ def test_workspace_day_discovery_degraded_notice_keeps_clusters_and_empty_scan() const withCluster = makeWorkspaceContext('day'); await flush(); await flush(); - resolveFetch(withCluster.queues.discovery[0], discoveryOk([])); + resolveFetch(withCluster.queues.discovery[0], discoveryOk([discoveryCluster(7, 'Cluster A')])); await flush(); await flush(); - resolveFetch(withCluster.queues.scan[0], discoveryDegraded([discoveryCluster(7, 'Cluster A')], 2)); + resolveFetch(withCluster.queues.scan[0], discoveryDegraded([], 2)); await flush(); await flush(); assertDiscoveryCluster(withCluster.document, 'day', '7'); @@ -2025,10 +2025,10 @@ def test_workspace_overview_discovery_degraded_notice_keeps_clusters_and_empty_s corrections_window_count: 0, }); resolveFetch(withCluster.queues.known[0], { speakers: [] }); - resolveFetch(withCluster.queues.discovery[0], discoveryOk([])); + resolveFetch(withCluster.queues.discovery[0], discoveryOk([discoveryCluster(7, 'Cluster A')])); await flush(); await flush(); - resolveFetch(withCluster.queues.scan[0], discoveryDegraded([discoveryCluster(7, 'Cluster A')], 2)); + resolveFetch(withCluster.queues.scan[0], discoveryDegraded([], 2)); await flush(); await flush(); assertDiscoveryCluster(withCluster.document, 'overview', '7'); diff --git a/solstone/apps/speakers/workspace.html b/solstone/apps/speakers/workspace.html index 9d789f07b..82b1d47e1 100644 --- a/solstone/apps/speakers/workspace.html +++ b/solstone/apps/speakers/workspace.html @@ -2388,7 +2388,7 @@ return window.apiJson('/app/speakers/api/discovery/scan', { method: 'POST' }) .then(data => { if (activeSeq !== dayDiscoveryRequestSeq) return false; - dayDiscoveryClusters = discoveryClusters(data); + dayDiscoveryClusters = discoveryRefreshClusters(data, dayDiscoveryClusters); dayDiscoveryNotice = discoveryNoticeFromScan(data, SPK_COPY); renderDayDiscoveryBanner(); return true; @@ -2406,6 +2406,14 @@ return Array.isArray(data?.clusters) ? data.clusters : []; } + function discoveryRefreshClusters(data, currentClusters) { + const clusters = discoveryClusters(data); + if (data?.status === 'degraded' && !clusters.length && currentClusters.length) { + return currentClusters; + } + return clusters; + } + function discoveryIssueCount(issue) { const count = Number(issue?.count || 0); return Number.isFinite(count) ? count : 0; @@ -4161,6 +4169,14 @@ return Array.isArray(data?.clusters) ? data.clusters : []; } + function discoveryRefreshClusters(data, currentClusters) { + const clusters = discoveryClusters(data); + if (data?.status === 'degraded' && !clusters.length && currentClusters.length) { + return currentClusters; + } + return clusters; + } + function discoveryIssueCount(issue) { const count = Number(issue?.count || 0); return Number.isFinite(count) ? count : 0; @@ -4287,7 +4303,13 @@ if (requestSeq !== overviewDiscoveryRequestSeq) return false; if (overviewHandoffSheetOpen) return false; overviewDiscoveryNotice = discoveryNoticeFromScan(data); - renderDiscovery(data); + renderDiscovery({ + ...data, + clusters: discoveryRefreshClusters( + data, + Array.from(discoveryClustersById.values()), + ), + }); return true; }) .catch((err) => {