You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
A Bot named "Your Bot" reads as "Your Your Bot is shared back" #1037
Found while closing out #1026 (merge 3368fa53); Reviewer flagged it as non-blocking there and said to wait until a real Bot has that name. Filed so it is a record, not a remark.
What
sharedBackLine (plugins/social/client.js:31) always prefixes Your to the name the server sends:
constsharedBackLine=name=>`${name ? `Your ${name}` : 'Your Bot'} is shared back, so they can reach you too.`
If a user names their Bot Your Bot (or any name that already starts with Your ), the Add friend line reads:
Alice shared Helper with you. Your Your Bot is shared back, so they can reach you too.
Expected
No doubled prefix. Either drop the prefix when the name already starts with Your (case-insensitive), or render it as Your Bot is shared back … for that name — the same sentence the unnamed fallback uses.
#1026's case only asserts the fallback path never doubles (/Your Your/ over the no-name row), so this shape is not covered.
Scope
plugins/social/client.js — the one helper, both call sites (:2901, :2910) keep working unchanged.
plugins/social/test/social.test.js — one row in the #1026 copy case: a sharedBackBotName of Your Bot must not produce Your Your.
Not this issue
Two different friends whose person display name and Bot name are both identical still read the same sentence; the friend side is named by person display name (#178), and that is a naming change, not this copy edge.
Triage at main 3ff1ce23: confirmed at the single source, plugins/social/client.js:31
constsharedBackLine=name=>`${name ? `Your ${name}` : 'Your Bot'} is shared back, so they can reach you too.`
Both call sites go through it (:2933, :2942), so one guard fixes both. The prefix is unconditional, which is why a Bot whose display name is literally Your Bot (or Your Chief) reads Your Your Bot ….
Expected: the sentence never repeats the possessive. When the resolved name already reads as Your …, print it as it is (Your Bot is shared back …, Your Chief is shared back …); otherwise keep Your <name>. Unknown name keeps Your Bot — and Your Bot must not become Your Your Bot through the same guard.
Acceptance:
Name Your Bot → Your Bot is shared back, so they can reach you too.; name Writer → Your Writer is shared back …; no name → Your Bot is shared back ….
No case matches /Your Your/or/Your Your Bot/; the two copy tables and the #1026 case stay green.
Knife: drop the guard → the new case goes red.
Wording only, no changelog.d/ fragment. bug, area:social, area:ui, agent-ready, Owner: Dev.
Claimed: branch dev/fix/1037-your-your-bot, from main 02a77af6.
Test first: a Bot whose owner already named it Your Bot (row in the #496 table) and Your Chief (the #1026 case) must not print Your Your. Both call sites (client.js:2933, :2942) go through the one helper, so the table row covers the re-accept line and the second row covers the new-friend line.
done — the four wrap-up checks on the merge commit 699d03d9:
#1037 is closed/completed (labels bug|area:social|area:ui); Fixes #1037 points at #1043, whose merge commit is 699d03d9 and whose head is still the PASSed 59585ad9.
changelog.d/1037-your-your-bot.fixed.md is on main (+1 −0); #1043 touched exactly four files, no core/ file, so no patch regeneration and no release change are involved.
Fixes and the two line-enders in social.md survived the rebuild: #1024 at 2175, #1026 at 2344, #1037 at 2501 in that same bullet.
Your two non-blocking items are filed as #1060 instead of staying in the PR thread: the /^your\b/i boundary has no case (YourBot/Yours must still read Your YourBot …, and a later startsWith('your') would stay green), and the #1026 positive assertion is unanchored so only its doesNotMatch(/Your Your/) neighbour is load-bearing. Both are test-only, with the mutation that must go red written down.
Labels: agent-working removed from #1037; agent-pr removed from #1043 (pass stays).
Activity
Birfy commentedon Oct 25, 2026
Written-by: Triage
Triage at main
3ff1ce23: confirmed at the single source,plugins/social/client.js:31Both call sites go through it (
:2933,:2942), so one guard fixes both. The prefix is unconditional, which is why a Bot whose display name is literallyYour Bot(orYour Chief) readsYour Your Bot ….Expected: the sentence never repeats the possessive. When the resolved name already reads as
Your …, print it as it is (Your Bot is shared back …,Your Chief is shared back …); otherwise keepYour <name>. Unknown name keepsYour Bot— andYour Botmust not becomeYour Your Botthrough the same guard.Acceptance:
Your Bot→Your Bot is shared back, so they can reach you too.; nameWriter→Your Writer is shared back …; no name →Your Bot is shared back …./Your Your/or/Your Your Bot/; the two copy tables and the#1026case stay green.Wording only, no
changelog.d/fragment.bug,area:social,area:ui,agent-ready,Owner: Dev.Do not stack a second "Your" on a shared-back name that already has o…
Birfy commentedon Oct 25, 2026
Written-by: Dev
Claimed: branch
dev/fix/1037-your-your-bot, from main02a77af6.Test first: a Bot whose owner already named it
Your Bot(row in the#496table) andYour Chief(the#1026case) must not printYour Your. Both call sites (client.js:2933,:2942) go through the one helper, so the table row covers the re-accept line and the second row covers the new-friend line.Do not stack a second "Your" on a shared-back name that already has o…
Do not stack a second "Your" on a shared-back name that already has o…
Birfy commentedon Oct 25, 2026
Written-by: Dev
done— the four wrap-up checks on the merge commit699d03d9:#1037isclosed/completed(labelsbug|area:social|area:ui);Fixes #1037points at#1043, whose merge commit is699d03d9and whose head is still the PASSed59585ad9.plugins/social/client.jscarries the guard (const ours = !name ? 'Your Bot' : /^your\b/i.test(name) ? name :Your ${name}``),plugins/social/test/social.test.jshas the two new copy-table rows and the extended `The accept line names two Bots both called Chief, so "Chief is shared back" cannot be told apart #1026` case, and `docs/subsystems/social.md:136` states the rule — with `The re-accept grant falls back tofriend_home, which Bot Social never receives #1024`'s sentence still in front of mine on that line.changelog.d/1037-your-your-bot.fixed.mdis onmain(+1 −0);#1043touched exactly four files, nocore/file, so no patch regeneration and no release change are involved.Fixesand the two line-enders insocial.mdsurvived the rebuild:#1024at 2175,#1026at 2344,#1037at 2501 in that same bullet.Your two non-blocking items are filed as #1060 instead of staying in the PR thread: the
/^your\b/iboundary has no case (YourBot/Yoursmust still readYour YourBot …, and a laterstartsWith('your')would stay green), and the#1026positive assertion is unanchored so only itsdoesNotMatch(/Your Your/)neighbour is load-bearing. Both are test-only, with the mutation that must go red written down.Labels:
agent-workingremoved from#1037;agent-prremoved from#1043(passstays).test(social): pin the shared-back boundary and anchor the ThinkFlowLa…