@startuml 16_archi_config_seed skinparam componentStyle rectangle skinparam backgroundColor white skinparam defaultTextAlignment center title C2 — Mode seed (sans natif)\nIndexerAddresses seuls · AdmittedAt = zero package "Couche 2 — Indexeurs seeds" #E9F7EF { component "Indexer A\n(seed, AdmittedAt=0)" as IA #A9DFBF component "Indexer B\n(seed, AdmittedAt=0)" as IB #A9DFBF } package "Couche 3 — Nœuds" #FEFBD8 { component "Node 1" as N1 #FAF0BE component "Node 2" as N2 #FAF0BE } note as NNative #FFDDDD Aucun natif configuré. AdmittedAt = zero → IsStableVoter() = false Phase 2 sans votants : Phase 1 conservée directement. Risque D20 : circularité du trust (seeds se valident mutuellement). end note ' Heartbeats nœuds → indexeurs seeds N1 -[#E67E22]--> IA : heartbeat long-lived (20s) N1 -[#E67E22]--> IB : heartbeat long-lived (20s) N2 -[#E67E22]--> IA : heartbeat long-lived (20s) N2 -[#E67E22]--> IB : heartbeat long-lived (20s) note bottom of IA Après 2s : goroutine async fetchNativeFromIndexers → ? Si natif trouvé → ConnectToNatives (upgrade vers C1) Si non → mode indexeur pur (D20 actif) end note @enduml