From 9c30bdf8e7fce12d5944143c86bb6ed23779fe9a Mon Sep 17 00:00:00 2001 From: Ilia Denisov Date: Tue, 16 Jun 2026 16:10:39 +0200 Subject: [PATCH] fix(robot): make a dot between two handle words rare, prefer underscore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A handle joining two meaningful words with a dot ("Тихий.Воин", "Hidden.Hunter") reads as machine-generated — people use "_" there, a dot only rarely. assembleHandle now picks "_" about nine times in ten and "." only about one in ten for the separator-joined form; the camelCase and bare-noun forms are unchanged. --- backend/internal/robot/namevariety.go | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/backend/internal/robot/namevariety.go b/backend/internal/robot/namevariety.go index 53e831a..a240234 100644 --- a/backend/internal/robot/namevariety.go +++ b/backend/internal/robot/namevariety.go @@ -140,20 +140,23 @@ func cyrillicNick() string { return assembleHandle(form, noun.word) } -// assembleHandle joins an adjective and noun into a handle: a bare noun, the two joined -// by "_" or "." or camel-cased, optionally followed by a trailing number. It keeps at -// most one separator so the result, the number aside, reads like a name a human could pick. +// assembleHandle joins an adjective and noun into a handle: a bare noun, the two +// camel-cased ("DarkWolf"), or joined by a separator. Between two meaningful words a human +// almost always uses "_" — a "." there is a rare tell — so the separator is an underscore +// far more often than a dot. An optional trailing number may follow. func assembleHandle(adj, noun string) string { var base string switch rand.IntN(4) { case 0: - base = noun + base = noun // a bare noun case 1: - base = adj + "_" + noun - case 2: - base = adj + "." + noun + base = adj + noun // camel-cased default: - base = adj + noun + sep := "_" + if rand.IntN(10) == 0 { + sep = "." // a dot between two words is rare + } + base = adj + sep + noun } if rand.IntN(2) == 0 { base += nickNumber()