@@ -105,7 +105,10 @@ function ForkReadiness() {
105105 return (
106106 availableForks
107107 . map ( fork => {
108- const clientReadiness = Object . entries ( fork . data . min_client_versions || { } )
108+ const knownClientNames = Object . keys ( fork . data . min_client_versions || { } ) ;
109+
110+ // Process known clients
111+ const knownClientReadiness = Object . entries ( fork . data . min_client_versions || { } )
109112 . map ( ( [ clientName , minVersion ] ) => {
110113 const clientNodes = nodes . filter ( n => n . consensus_client === clientName ) ;
111114 const readyNodes = clientNodes . filter ( n => {
@@ -139,8 +142,47 @@ function ForkReadiness() {
139142 } ) ) ,
140143 } ;
141144 } )
142- . filter ( client => client . totalNodes > 0 ) // Only show clients with nodes
143- . sort ( ( a , b ) => b . totalNodes - a . totalNodes ) ;
145+ . filter ( client => client . totalNodes > 0 ) ; // Only show clients with nodes
146+
147+ // Find and group unknown clients
148+ const unknownNodes = nodes . filter ( n => ! knownClientNames . includes ( n . consensus_client ) ) ;
149+ const unknownClientGroups = { } ;
150+
151+ // Group unknown nodes by consensus_client
152+ unknownNodes . forEach ( node => {
153+ if ( ! unknownClientGroups [ node . consensus_client ] ) {
154+ unknownClientGroups [ node . consensus_client ] = [ ] ;
155+ }
156+ unknownClientGroups [ node . consensus_client ] . push ( node ) ;
157+ } ) ;
158+
159+ // Create readiness entries for unknown clients
160+ const unknownClientReadiness = Object . entries ( unknownClientGroups ) . map (
161+ ( [ clientName , clientNodes ] ) => ( {
162+ name : clientName ,
163+ totalNodes : clientNodes . length ,
164+ readyNodes : 0 , // Unknown clients are never ready
165+ readyPercentage : 0 , // Always 0% ready
166+ minVersion : 'Not configured' ,
167+ isUnknown : true , // Flag to identify unknown clients
168+ nodes : clientNodes . map ( n => ( {
169+ name : n . client_name ,
170+ version : n . consensus_version ,
171+ isReady : false , // Always not ready
172+ } ) ) ,
173+ } ) ,
174+ ) ;
175+
176+ // Combine and sort all clients (unknown clients always last)
177+ const clientReadiness = [ ...knownClientReadiness , ...unknownClientReadiness ] . sort (
178+ ( a , b ) => {
179+ // Unknown clients always come after known clients
180+ if ( a . isUnknown && ! b . isUnknown ) return 1 ;
181+ if ( ! a . isUnknown && b . isUnknown ) return - 1 ;
182+ // Within the same category, sort by total nodes
183+ return b . totalNodes - a . totalNodes ;
184+ } ,
185+ ) ;
144186
145187 const totalNodes = clientReadiness . reduce ( ( acc , client ) => acc + client . totalNodes , 0 ) ;
146188 const readyNodes = clientReadiness . reduce ( ( acc , client ) => acc + client . readyNodes , 0 ) ;
@@ -354,8 +396,18 @@ function ForkReadiness() {
354396 { CLIENT_METADATA [ client . name ] ?. name || client . name }
355397 </ div >
356398 < div className = "text-xs font-mono text-tertiary mt-0.5" >
357- min v{ client . minVersion } · { client . readyPercentage . toFixed ( 1 ) } %
358- ready ({ client . readyNodes } /{ client . totalNodes } )
399+ { client . isUnknown ? (
400+ < >
401+ < span className = "text-warning" > Not configured</ span > · 0%
402+ ready ({ client . readyNodes } /{ client . totalNodes } )
403+ </ >
404+ ) : (
405+ < >
406+ min v{ client . minVersion } ·{ ' ' }
407+ { client . readyPercentage . toFixed ( 1 ) } % ready (
408+ { client . readyNodes } /{ client . totalNodes } )
409+ </ >
410+ ) }
359411 </ div >
360412 </ div >
361413 </ div >
@@ -504,9 +556,18 @@ function ForkReadiness() {
504556 { CLIENT_METADATA [ client . name ] ?. name || client . name }
505557 </ div >
506558 < div className = "text-xs font-mono text-tertiary mt-0.5" >
507- min v{ client . minVersion } ·{ ' ' }
508- { client . readyPercentage . toFixed ( 1 ) } % ready (
509- { client . readyNodes } /{ client . totalNodes } )
559+ { client . isUnknown ? (
560+ < >
561+ < span className = "text-warning" > Not configured</ span > { ' ' }
562+ · 0% ready ({ client . readyNodes } /{ client . totalNodes } )
563+ </ >
564+ ) : (
565+ < >
566+ min v{ client . minVersion } ·{ ' ' }
567+ { client . readyPercentage . toFixed ( 1 ) } % ready (
568+ { client . readyNodes } /{ client . totalNodes } )
569+ </ >
570+ ) }
510571 </ div >
511572 </ div >
512573 </ div >
0 commit comments