@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
