Summary
When an archived identity (NIP-IA) shares the exact display name (and often avatar) of an active identity, the mention @ autocomplete in a channel drops the active identity from the list entirely. The active member cannot be tagged from the picker, even though the backend resolves their name uniquely.
Environment
- Relay:
ws://mini.munchkin-sunfish.ts.net:13000 (self-hosted Buzz)
- Client: Buzz Desktop (channel #blandy)
- Reproduced 2026-08-11
Reproduction
Setup on the relay:
- Active identity A: display name
DeepSeek V4 Flash, pubkey 13423b14…, member of channel #blandy (role: bot)
- Archived identity B: display name
DeepSeek V4 Flash (identical string and identical avatar), pubkey aa96c6cd…, present in the NIP-IA archive snapshot (buzz agents archived) — this is an old key for the same agent, archived after a re-key
Steps:
- Open channel
#blandy.
- Type
@ and start typing DeepSeek.
- The active identity A does not appear in the autocomplete list (the archived identity B shadows it).
- Tagging from the picker is therefore impossible.
Evidence
buzz users get --name "DeepSeek" returns both pubkeys with identical display_name and identical picture — the archived identity is still served by name-based user search.
buzz channels members --channel 00c790dc-acdf-4b89-b08c-ec108d2cd209 confirms identity A (13423b14…) is a member with role bot.
- A CLI send of
@DeepSeek V4 Flash to the same channel resolves uniquely to identity A (mention_pubkeys: ["13423b14…"]) — backend mention resolution is correct; the collision only breaks the client-side picker.
- The DM between the user and identity A has no duplicate, so tagging works there — confirming the collision, not permissions, is the cause.
- Both pubkeys report presence from the same process (identical
updated_at), consistent with a re-key where the old identity was archived but its kind-0 profile was never scrubbed from the relay's profile index.
Expected behavior
- Autocomplete should not list archived identities at all (preferred), or at minimum prefer active members of the current channel when display names collide.
- Tagging an active member whose name collides with an archived identity must remain possible from the picker.
Suggested fixes
- Relay: exclude NIP-IA archived identities from name-based user search / profile index used by autocomplete.
- Client: on display-name collision, rank active channel members above archived/non-member identities.
Workaround
Explicit pubkey mentions (nostr:… or pasted hex pubkey) bypass name resolution entirely.
Summary
When an archived identity (NIP-IA) shares the exact display name (and often avatar) of an active identity, the mention
@autocomplete in a channel drops the active identity from the list entirely. The active member cannot be tagged from the picker, even though the backend resolves their name uniquely.Environment
ws://mini.munchkin-sunfish.ts.net:13000(self-hosted Buzz)Reproduction
Setup on the relay:
DeepSeek V4 Flash, pubkey13423b14…, member of channel#blandy(role: bot)DeepSeek V4 Flash(identical string and identical avatar), pubkeyaa96c6cd…, present in the NIP-IA archive snapshot (buzz agents archived) — this is an old key for the same agent, archived after a re-keySteps:
#blandy.@and start typingDeepSeek.Evidence
buzz users get --name "DeepSeek"returns both pubkeys with identicaldisplay_nameand identicalpicture— the archived identity is still served by name-based user search.buzz channels members --channel 00c790dc-acdf-4b89-b08c-ec108d2cd209confirms identity A (13423b14…) is a member with rolebot.@DeepSeek V4 Flashto the same channel resolves uniquely to identity A (mention_pubkeys: ["13423b14…"]) — backend mention resolution is correct; the collision only breaks the client-side picker.updated_at), consistent with a re-key where the old identity was archived but its kind-0 profile was never scrubbed from the relay's profile index.Expected behavior
Suggested fixes
Workaround
Explicit pubkey mentions (
nostr:…or pasted hex pubkey) bypass name resolution entirely.