f6f2a34353
`amy marmot group add` previously sent the Welcome gift wrap to the inviter's own kind:10050 (ctx.inboxRelays()) and fetched the invitee's KeyPackage from only the inviter's configured relays. Two users with disjoint relay configurations could never successfully marmot each other — the welcome landed somewhere the invitee never polled. Mirror the Android Account.addMarmotGroupMember flow in the CLI: - New RecipientRelayFetcher in quartz/marmot one-shot-drains a target user's kind:10050, kind:10051 and kind:10002 from a seed relay set. Replaceable-event semantics: newest created_at per kind wins. Guards against relays echoing events authored by someone else. - Context.bootstrapRelays() unions the inviter's configured relays with AmethystDefaults (DefaultNIP65RelaySet + DefaultDMRelayList) so we can discover strangers even when nothing overlaps with our own config. - GroupAddMemberCommand now per-invitee: looks up their relay lists; passes kind:10051 + kind:10002 write + bootstrap to KeyPackageFetcher; publishes the welcome to kind:10050 (fallback to NIP-65 read, then DefaultDMRelayList, then our outbox as belt-and-braces). Group commits/messages (kind:445) continue to use the group's MIP-01 relay set — those were already correct. Exposes welcome_targets and key_package_relays in the JSON output so callers can verify routing.