From e73963ff8588831e6f5ef7cb04ddaf6a461486ef Mon Sep 17 00:00:00 2001 From: frstrtr Date: Wed, 24 Jun 2026 19:33:16 +0000 Subject: [PATCH] web(d-web): surface embedded-daemon synced state + tip height on topology card The node-topology StatsProvider hook (#415) already computes each embedded coin true synced flag and tip height from the live handles (LTC blocks_connected vs LTC_MINING_GATE_DEPTH, DOGE likewise, embedded_chain->height), but the front-end renderNodeTopology dropped both fields -- the card rendered peers and embedded/rpc tags only. So the binary knew whether embedded LTC :9333 was synced and at what tip, yet the dashboard never showed it: real data computed, silently discarded. That is the founding charter gap (a dashboard must not omit known prod truth). Render synced (green) / syncing (amber) and tip per coin, gated on the field actually being present -- a coin we hold no handle for stays silent rather than claim a state. Front-end-only static drop-in; no backend or consensus change. Serves the LTC per-coin dashboard milestone (embedded LTC :9333 peers/synced/tip). --- web-static/dashboard.html | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/web-static/dashboard.html b/web-static/dashboard.html index 66b29bc5b..67d004c7b 100644 --- a/web-static/dashboard.html +++ b/web-static/dashboard.html @@ -2953,8 +2953,20 @@

Legend

if (c.has_rpc) tags.push('rpc'); var tagStr = tags.length ? ' [' + tags.join(', ') + ']' : ''; var peers = (c.peers != null ? c.peers : 0); + // Surface the embedded daemon REAL sync state + tip height when the + // backend reports them (StatsProvider path emits synced/height per + // coin). Only rendered when present -- a coin we hold no handle for + // stays silent rather than claim a sync state it cannot read. + var sync = ''; + if (typeof c.synced === 'boolean') + sync = c.synced + ? '  ·  synced' + : '  ·  syncing'; + var tip = (c.height != null && c.height > 0) + ? '  ·  tip ' + c.height : ''; return '
' + c.coin + '' + tagStr + - '  ·  ' + peers + ' peer' + (peers === 1 ? '' : 's') + '
'; + '  ·  ' + peers + ' peer' + (peers === 1 ? '' : 's') + + sync + tip + ''; }).join(''); document.getElementById('node_topology_coins').innerHTML = rows; d3.select('#node_topology_symbol').text(t.node_symbol ? '(' + t.node_symbol + ')' : '');