From 086ea2604986b0c9b84336e34c9779ef527781f6 Mon Sep 17 00:00:00 2001 From: Astra Date: Thu, 17 Sep 2026 15:51:13 +0100 Subject: [PATCH] domain: lower the username resolvability floor to 3 MinCollectibleUsernameLength doubles as the resolve-time floor for every username kind (contacts.resolveUsername, the public web landing page), not just collectible minting. It was still 4 after the admin write path was lowered to 3, so an operator-assigned 3-character username could be set but never actually resolved by anyone. Match the two floors. --- internal/domain/collectible_username.go | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/internal/domain/collectible_username.go b/internal/domain/collectible_username.go index 85a06a59..84fc157e 100644 --- a/internal/domain/collectible_username.go +++ b/internal/domain/collectible_username.go @@ -15,12 +15,18 @@ import ( // the same global registry, so occupancy checks and username resolution have a // single source of truth. // -// The editable slot keeps the service-level 5..32 length rule. Collectible names -// are minted by the operator and may be shorter: short names are precisely what -// a collectible market distributes. They still have to be syntactically -// resolvable by clients, so the character rules are identical. +// The editable slot keeps the service-level 5..32 length rule for +// self-service (account.updateUsername / channels.updateUsername); the admin +// path can go as low as 3 (see users.minUsernameLenAdmin / +// channels.minChannelUsernameLenAdmin). Collectible names are minted by the +// operator and may be shorter: short names are precisely what a collectible +// market distributes. Every kind of username still has to be syntactically +// resolvable by clients (contacts.resolveUsername, the public web landing +// page), so this floor doubles as the resolvability floor for the whole +// registry -- it must stay <= the lowest floor any write path can produce, +// currently 3. const ( - MinCollectibleUsernameLength = 4 + MinCollectibleUsernameLength = 3 MaxCollectibleUsernameLength = 32 // MaxPeerCollectibleUsernames bounds the collectible rows a single peer can // hold. The TL usernames vector is rendered in full by clients, so the bound