Repository navigation
Friend's Bot named four ways in one DM; approval card reads 'Chief → Chief (SelfB1233)' after reload but 'Chief → SelfB1233' before; pick one person-first format #498
Description
Summary
In a friend DM, the same friend's Bot is named in different formats across surfaces, and the approval card changes its recipient text after a reload. The product principle for social surfaces is person-first (person · Bot, for example SelfA1233 · Chief), as in the face-room tiles from #457. Friend DMs and approval cards are still Bot-first and inconsistent.
Environment
- FlyBot main
a7adfe0882d3e37c81616871e24b442bd4a5047f, core + plugins/social + plugins/tree on@deepseek-ai/dsh@0.2.0-rc.2, Node 24.21.0. - Two fresh installs on one Linux box: A
:3090(owner SelfA1233,@selfa1233.home, one Bot: Chief =@chief.selfa1233.home) and B:3091(owner SelfB1233,@selfb1233.home, one Bot: Chief =@chief.selfb1233.home). Bot Social prodhttps://47-80-69-220.sslip.io. Both Chiefs onark/deepseek-v4-flash. - Product self-test 2026-10-20, focus C (Invites and grants), browser run 12:37–12:42 Asia/Shanghai, API checks about 12:45 Asia/Shanghai. Screenshots stayed on the test machine; what they show is written out below.
Reproduction
- Setup: A shared Chief with B. B sends
hi from Bto A's Chief, and A's Chief drafts a reply that is held for approval (Auto-send off). - On B, look at the sidebar row and the chat header for A's Chief.
- On A, look at the held reply's approval card before and after a page reload.
Actual
| Surface | Text |
|---|---|
| B sidebar row | Chief + grey SelfA1233 (two-tone, no separator) |
| B chat header pill / composer placeholder | Chief (SelfA1233) / Message Chief (SelfA1233) |
| A sidebar row for B's Bot | Chief + grey SelfB1233, second line Friend's Bot |
| A approval card, before reload | Chief → SelfB1233 |
| A approval card, after reload | Chief → Chief (SelfB1233) |
| A chat line | SelfB1233 via Chief (person-first) |
So one screen mixes Bot (Person), Bot Person, Person via Bot and Bot → Person, and the card text depends on whether the page was reloaded. With two Bots both called Chief, Chief → Chief (SelfB1233) is hard to read: which Chief is mine?
Screenshot (A after reload): The approval card under the draft reply reads Waiting for approval / Chief → Chief (SelfB1233) with Auto-send from now on, Approve and Reject. The line above it is labelled SelfB1233 via Chief, and the sidebar shows Chief SelfB1233 / Friend's Bot. On B, the header pill reads Chief (SelfA1233) and the row reads Chief SelfA1233.
Expected
- One format for a friend's Bot in the row, header, composer placeholder, @ picker and cards, the same on both homes and the same before and after a reload. Person-first is recommended:
SelfA1233 · Chief(row: person on the first line, Bot second, orSelfA1233 · Chiefin one line). My own Bots stay plain (Chief). - The approval card names the person who receives the reply (Held reply to a friend in the replying Bot's own chat: draft looks sent, card detached and names the Bot not the person, no trace after Approve/Reject (regression of #226) #418):
Chief → SelfB1233orReply to SelfB1233, never two Bot names, and the text is stable across reloads.
Design question for the owner (do not guess)
#384 settled on Helper (SelfB0023) (Bot first), and #457's implementation names Bots Bot (person) inside face rooms while tiles are person-first (SelfA0056 · Chief, Researcher). Should friend DMs, rows and cards move to Person · Bot everywhere, as the self-test principle says, or keep Bot (Person) and only make it consistent? Either way, the inconsistency and the reload-dependent card text are bugs.
Suggested scope
- One shared formatter for a remote Bot's display name (core
ds-bot/client.jsandplugins/social/client.jseach build names today, see Friend's Bot rows: two name formats ('Helper · SelfB0023's Bot' vs 'SelfA0023's Chief'), two-line wrap, no preview, inset highlight, faint marker, same avatar as own Chief #384), used by the sidebar row, chat header, composer placeholder, @ picker and approval card. - Approval card recipient: take it from the held send's
recipient(the person, set inplugins/social/src/social.jssend middleware since Held reply to a friend in the replying Bot's own chat: draft looks sent, card detached and names the Bot not the person, no trace after Approve/Reject (regression of #226) #418) both live and after reload. Hunch: after reload the card is rebuilt from the target Bot's display name instead ofrecipient. - Tests: the card recipient is the same in the live feed and after
state. The formatter returns the chosen format for a remote Bot on both homes.
Acceptance criteria
- One format (as the owner decides) on every surface listed above, on both homes.
- The approval card names the receiving person, the same before and after a reload.
- No surface shows two Bot names side by side without the person.
Activity
Birfy commentedon Oct 20, 2026
Triage (2026-10-20 12:57 Asia/Shanghai, Birfy maintenance). The format question was already decided for #384/#305 (2026-10-19): a friend's Bot is shown as
Bot (owner), e.g.Chief (SelfA1233). Face rooms (#457) stay person-first because they show people. So the plan: one shared formatter for a friend's Bot name used by the sidebar row, chat header, composer placeholder, @ picker and approval card on both homes; the approval card names the receiving person (Chief → SelfB1233, per #418) from the held send'srecipient, the same live and after a reload; chat lines from a friend readSelfB1233 via Chiefstays (it labels a person's line).Waiting for the owner's confirmation before
agent-ready(needs-human).Birfy commentedon Oct 20, 2026
Owner decision (2026-10-20): option (a) — unify friend Bot names as
Chief (SelfB1233)via one formatter (list, title, placeholder, @ picker, approval cards). Approval cards show receiver (Chief → SelfB1233). Face rooms keep person-first per #457.Birfy commentedon Oct 20, 2026
Claimed by maintenance run (2026-10-20 13:54 Asia/Shanghai). Working on branch
fix/498-friend-bot-name(fork Birfy/FlyBot), developed in parallel with #495-#499; scope per the Owner decision only.Birfy commentedon Oct 20, 2026
Minor decisions (made by the maintenance worker, 2026-10-20 14:06 Asia/Shanghai), PR #502:
Chief (SelfB1233), exactly the header's text. The muted second span for the owner is gone (the two-tone look was one of the four formats). When the row is narrow it truncates at the end, and the full name stays in the hover text.ownerName/owner) before the home label (homeName), asownerNameOfalready does. Friend chats only carryhomeNametoday, so nothing visible changes.recipientName/toOwner) wins, then the friend chat's owner, then the owner part of the handle. This covers the held reply on the bubble, the overlay pointer and the social dock, for local holds and Bot Social holds alike. TheSent to …/Auto-sent to …notes therefore name the person too.globalThis.__flybot__.names(set next toBotAvatar/lookOf), with a plain fallback for older hosts.SelfB1233 via Chiefline label are unchanged (Face room still Bot-first: two tiles per person, Members counts Bots, '(you)' on Bots, mention re-binds after leave, bloated bubble headers #457).Document the shared friend's Bot formatter in core-host and plugin-ru…
Merge origin/main into fix/498-friend-bot-name (resolve after ThinkFl…
Name a friend's Bot one way and approval cards by the receiving person (
Name a group or face-room Bot by its name and owner username (ThinkFl…