[object Object]

← back to Exo

dashboard: show macOS version in debug mode (#1454)

6950f9410967bfcade912c9ac2e557e89e2aeb85 · 2026-02-12 09:56:55 -0800 · Alex Cheema

## 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
<!-- Hardware: MacBook Pro -->
- 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 <noreply@anthropic.com>
Co-authored-by: rltakashige <rl.takashige@gmail.com>
Co-authored-by: Ryuichi Leo Takashige <leo@exolabs.net>

Files touched

Diff

commit 6950f9410967bfcade912c9ac2e557e89e2aeb85
Author: Alex Cheema <41707476+AlexCheema@users.noreply.github.com>
Date:   Thu Feb 12 09:56:55 2026 -0800

    dashboard: show macOS version in debug mode (#1454)
    
    ## 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
    <!-- Hardware: MacBook Pro -->
    - 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 <noreply@anthropic.com>
    Co-authored-by: rltakashige <rl.takashige@gmail.com>
    Co-authored-by: Ryuichi Leo Takashige <leo@exolabs.net>
---
 dashboard/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})` : ""}`,
+            );
         }
       }
     });

← d0c44273 feat: add enable_thinking toggle for thinking-capable models  ·  back to Exo  ·  Add support for Step 3.5 flash! (#1460) 5a286427 →