From 6950f9410967bfcade912c9ac2e557e89e2aeb85 Mon Sep 17 00:00:00 2001 From: Alex Cheema <41707476+AlexCheema@users.noreply.github.com> Date: Thu, 12 Feb 2026 09:56:55 -0800 Subject: [PATCH] dashboard: show macOS version in debug mode (#1454) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Motivation When debugging cluster issues, it's useful to see which macOS version each node is running — especially since version mismatches can cause compatibility problems. The OS version data is already collected by the identity gatherer but wasn't shown in the topology graph. ## Changes - Added OS version label (e.g. "macOS 15.2") to each node in the topology graph when debug mode is enabled - Renders below the existing TB and RDMA debug labels using the same styling conventions - Sources data from the existing `nodeIdentities` store (no backend changes needed) ## Why It Works The `nodeIdentities` store already contains `osVersion` for each node. We simply read it in the `TopologyGraph` component and append a text label in the debug section, following the exact same pattern as the TB and RDMA labels. ## Test Plan ### Manual Testing - Enable debug mode in the dashboard - Verify OS version label appears below TB/RDMA labels on each node - Verify label disappears when debug mode is disabled ### Automated Testing - Dashboard build passes (`npm run build`) --------- Co-authored-by: Claude Opus 4.6 Co-authored-by: rltakashige Co-authored-by: Ryuichi Leo Takashige --- .../src/lib/components/TopologyGraph.svelte | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/dashboard/src/lib/components/TopologyGraph.svelte b/dashboard/src/lib/components/TopologyGraph.svelte index 2e77050d..0d0d3c3d 100644 --- a/dashboard/src/lib/components/TopologyGraph.svelte +++ b/dashboard/src/lib/components/TopologyGraph.svelte @@ -7,6 +7,7 @@ debugMode, nodeThunderboltBridge, nodeRdmaCtl, + nodeIdentities, type NodeInfo, } from "$lib/stores/app.svelte"; @@ -33,6 +34,7 @@ const debugEnabled = $derived(debugMode()); const tbBridgeData = $derived(nodeThunderboltBridge()); const rdmaCtlData = $derived(nodeRdmaCtl()); + const identitiesData = $derived(nodeIdentities()); function getNodeLabel(nodeId: string): string { const node = data?.nodes?.[nodeId]; @@ -1177,6 +1179,22 @@ .attr("font-size", debugFontSize) .attr("font-family", "SF Mono, Monaco, monospace") .text(rdmaText); + debugLabelY += debugLineHeight; + } + + const identity = identitiesData[nodeInfo.id]; + if (identity?.osVersion) { + nodeG + .append("text") + .attr("x", nodeInfo.x) + .attr("y", debugLabelY) + .attr("text-anchor", "middle") + .attr("fill", "rgba(179,179,179,0.7)") + .attr("font-size", debugFontSize) + .attr("font-family", "SF Mono, Monaco, monospace") + .text( + `macOS ${identity.osVersion}${identity.osBuildVersion ? ` (${identity.osBuildVersion})` : ""}`, + ); } } });