From 15bf0d0b6befae6c81631c0e5d0dc2947dd3318a Mon Sep 17 00:00:00 2001 From: DanConwayDev Date: Wed, 11 Feb 2026 09:20:48 +0000 Subject: feat: use fallback relays for bootstrapping only - Add --relay flag to 'ngit account create' allowing users to specify relay URLs (repeatable). Defaults to relay-default-set when not provided. - Remove fallback relays from fetch when repo context exists (repo coordinate provided). Only use them for bootstrapping (profile discovery with no repo context). - Remove fallback relays from publish when repo or user relays exist. Only use them when neither is available (e.g. new account signup). - Update --customize help text to reflect new relay-default-set behavior. --- src/lib/client.rs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'src/lib/client.rs') diff --git a/src/lib/client.rs b/src/lib/client.rs index 9c49653..89fcaf7 100644 --- a/src/lib/client.rs +++ b/src/lib/client.rs @@ -1577,7 +1577,14 @@ async fn create_relays_request( }; let relays = { - let mut relays = fallback_relays; + // Only use fallback relays for bootstrapping (no repo context). + // When we have a repo coordinate, rely on repo relays and coordinate + // hint relays instead of always merging in the default set. + let mut relays = if trusted_maintainer_coordinate.is_none() { + fallback_relays + } else { + HashSet::new() + }; if let Some(repo_ref) = &repo_ref { for r in repo_ref.relays.clone() { relays.insert(r); @@ -1588,6 +1595,8 @@ async fn create_relays_request( relays.insert(r.clone()); } } + // When bootstrapping with no repo context and no coordinate hints, + // we need at least the fallback relays to discover the user profile. relays }; @@ -2238,8 +2247,15 @@ pub async fn send_events( animate: bool, silent: bool, ) -> Result<()> { + // Only include default relays as fallback when there are no repo relays + // (bootstrapping case, e.g. new account signup). When repo relays exist, + // trust the repo and user relay configuration. let fallback = [ - client.get_relay_default_set().clone(), + if repo_read_relays.is_empty() && my_write_relays.is_empty() { + client.get_relay_default_set().clone() + } else { + vec![] + }, if events.iter().any(|e| e.kind.eq(&Kind::GitRepoAnnouncement)) { client.get_blaster_relays().clone() } else { -- cgit v1.2.3