reconcile

fun reconcile(current: List<RelayCatalogEntry>, discovered: List<DnsRelayRecord>, refreshedAt: Long, fallbackUrl: String, dnsAuthenticated: Boolean): RelayCatalogPlan

Reconcile durable relay rows with authenticated DNS discovery.

Empty or unauthenticated discovery selects fallbackUrl without pretending it came from DNS. User exclusions remain durable.