Skip to content

Name a group or face-room Bot by its name and owner username - #541

Merged
Birfy merged 12 commits into
ThinkFlowLab:mainfrom
Birfy:fix/526-group-bot-label
Oct 20, 2026
Merged

Birfy merged 12 commits into
ThinkFlowLab:mainfrom
Birfy:fix/526-group-bot-label

Conversation

@Birfy

@Birfy Birfy commented Oct 20, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #526

#502 (the shared friend's Bot formatter this builds on) is on main (cf61952); this PR now carries only the #526 change.

In a group chat or face-to-face room a friend's Bot read Reviewer · FlyBot 682b8a43 (flybot682b8a43). Two things caused it. Bot Social's member label (<Bot> · <owner>, face-rooms.ts memberLabel) ended up as the Bot's name, so remoteBotTitle then added the owner a second time from the handle (core/src/client/cells.js remoteSpeaker fallback, from the senderName that plugins/social/src/face-rooms.js trustedFaceWho sets). And an owner who never set a name shows as the made-up FlyBot <install id>. Owner decision (2026-10-20, option a): use the #498 person-first name, Bot name plus owner username: Reviewer (flybot682b8a43).

  • core/src/shared/remote-label.js: remoteBotName removes a trailing · <owner> only when it matches that Bot's owner. ownerNameOf skips an id-derived owner (isAutoOwnerName: FlyBot + hex id that contains a digit) and uses the username from the home handle instead. If no handle is known, the made-up name stays. seatOwnerName applies the same rule to my own seat (face-seats.js, at-menu.js).
  • plugins/social/src/face-rooms.js: faceOwnerName applies the same rule to seats (viewFaceMember.ownerName), join, leave and room-lead lines, and a person's typed line.
  • The full handle stays on hover. The remote Bot names in FacePersonRow and the group Members rows (group-settings.js, details-drawer.js) now get title=<handle>, as bubble headers already had.
  • Real names are unchanged: Coder (Bob), Ops · Night (Bob), FlyBot, FlyBot2.

Risk tier: T3 (node .github/scripts/risk-gate.mjs --pr 541: display-name and remote-label paths, plugins/social/src/face-rooms.js). Needs the maintainer's approval and a PASS at the tip.

Verification at 01c24e4 (main cf61952 merged in):

  • ARCH_DOCS_BASE=origin/main TZ=UTC npm run verify → pass. core 1117, social 314, tree 83, timeline 93, .github scripts 93, interop 37, live-e2e 16; 0 failures. arch-docs OK; no new lint warnings (same count as before the merge).
  • Red at base (main cf61952, with only the new test files copied in): core/test/group-bot-label.test.js 0/3 pass (actual: 'Reviewer · FlyBot 682b8a43 (flybot682b8a43)', 'Reviewer (FlyBot 682b8a43)'). At base the new social assertions fail on the missing faceOwnerName export. Green at the tip.
  • (cd core && npm run build), node scripts/ds-bot-patches.mjs generate and check → ok.

Not run:

  • Smoke test: nothing under core/index.js or core/src/host/ changed. The host reads shared/remote-label.js for room labels; unit tests cover that, including presentRoom.
  • Desktop, live instances, production Bot Social.

Birfy and others added 7 commits October 20, 2026 14:05
A friend's Bot read four ways in one DM (ThinkFlowLab#498): the sidebar row was
'Chief' plus a muted owner, the header 'Chief (SelfB1233)', the @ menu
fell back to the handle for a friend's chat, and the held reply card
read 'Chief → Chief (SelfB1233)' after a reload but 'Chief → SelfB1233'
before it.

friendBotTitle / friendBotOwner in shared/remote-label.js are now the
one formatter for a friend's chat: the sidebar row, header, tab,
composer placeholder and @ menu call it, and the social plugin reads it
from __flybot__.names. Approval cards (held reply, overlay, social dock)
name the person who gets the message: the stored recipient first, else
the friend chat's owner, so the card is the same live and after a
reload. Face rooms are unchanged (ThinkFlowLab#457).
…owLab#481/ThinkFlowLab#501/ThinkFlowLab#505)

Regenerated client bundle patch after merge; auto-merged social sources keep ThinkFlowLab#498 friend Bot name formatter with ThinkFlowLab#501/ThinkFlowLab#505.
Resolve generated ds-bot client-bundle patch via regenerate from merged core.
# Conflicts:
#	patches/ds-bot/0008-client-bundle.patch
# Conflicts:
#	core/src/client/header.js
#	patches/ds-bot/0008-client-bundle.patch
#	patches/ds-bot/0012-room-membership.patch
In a group chat or face-to-face room a friend's Bot read
"Reviewer · FlyBot 682b8a43 (flybot682b8a43)": Bot Social's member label
("<Bot> · <owner>") took the Bot-name slot and the owner came again from
the handle, and an owner who never set a name shows as the made-up
"FlyBot <install id>".

Owner decision on ThinkFlowLab#526 (2026-10-20, option a): reuse the ThinkFlowLab#498 person-first
format, Bot name plus owner username, "Reviewer (flybot682b8a43)".
remoteBotName drops a trailing " · <owner>" that is that Bot's owner;
ownerNameOf passes over an id-derived "FlyBot <hex>" owner to the username
in the home handle (seatOwnerName for my own seat), and the social
plugin's faceOwnerName applies the same rule to seats, join/leave/lead
lines and typed lines. The handle stays in the tooltip of member rows.

Fixes ThinkFlowLab#526
@Birfy Birfy added bug Something isn't working agent-pr Pull request opened by an agent area:social Friends, invites, grants, Bot Social area:ui Web/desktop UI and copy labels Oct 20, 2026
@Birfy Birfy self-assigned this Oct 20, 2026
@Birfy

Birfy commented Oct 20, 2026

Copy link
Copy Markdown
Collaborator Author

Self-review (review-pr, Birfy reviewer agent, 2026-10-20 20:26 Asia/Shanghai): PASS

Tip SHA: 6648eae
Ran:

  • ARCH_DOCS_BASE=origin/main TZ=UTC npm run verify at this tip → pass, 0 failures (core 1117, social 314, tree 83, timeline 93, .github scripts 93, interop 37, live-e2e 16); arch-docs OK (45 changed files, subsystem docs core-client / core-host / social updated); lint warnings the same as the base (81), 0 errors
  • (cd core && npm run build); node scripts/ds-bot-patches.mjs generate; node scripts/ds-bot-patches.mjs check → pass (core/ = ds-bot/ + patches; new test stored whole in patches/ds-bot/files/test/)
  • red at base: core/test/group-bot-label.test.js copied alone into ae721f7 (Name a friend's Bot one way and approval cards by the receiving person #502 tip without this change) → 0/3 pass (actual 'Reviewer · FlyBot 682b8a43 (flybot682b8a43)' and 'Reviewer (FlyBot 682b8a43)'); green at the tip (3/3). plugins/social/test/face-rooms.test.js Group chat: simplify bot display name to bot name + username #526 test → red at base (faceOwnerName missing), green at the tip
  • CI at this tip → all checks pass (tests-ok, ubuntu-latest · Node 24 · DSH 0.2.0-rc.2, plugins social/timeline/tree, package, risk tier, reviewed tip); MERGEABLE / CLEAN
  • node .github/scripts/risk-gate.mjs --pr 541 --repo ThinkFlowLab/FlyBot → T3
  • diff review (own commit cd7ad95): one changelog.d fragment (526-group-bot-label.fixed.md), no CHANGELOG.md or ds-bot/ edits, client.js regenerated; peer strings still go through cleanPeerName / cleanFaceName before display; a username from the handle passes the same cleaning; no change to fenced model text or to trust
    Not run:
  • smoke test — no core/index.js or core/src/host/ change (the host imports shared/remote-label.js; presentRoom labels are covered by the unit test)
  • Desktop / live instances / production Bot Social
    Verdict: PASS

Security / display-name: the new helpers only choose between peer strings that were already cleaned (owner name vs the username part of the handle), and they never move a name out of a fence. Findings: no actionable findings. Not merge authority: T3 needs the maintainer's approval, and it merges after #502.

@github-actions github-actions Bot added the risk:T3 Risk tier T3 (needs a human approval), set by the controller from the diff label Oct 20, 2026
# Conflicts:
#	core/src/client/at-menu.js
#	docs/subsystems/core-client.md
#	docs/subsystems/core-host.md
#	docs/subsystems/social.md
#	patches/ds-bot/0003-flybot-api-client.patch
#	patches/ds-bot/0008-client-bundle.patch
@Birfy

Birfy commented Oct 20, 2026

Copy link
Copy Markdown
Collaborator Author

Self-review (review-pr, Birfy reviewer agent, 2026-10-20 20:48 Asia/Shanghai): PASS

Tip SHA: 01c24e4
Ran:

Security / display-name: unchanged from the previous review — the helpers only choose between peer strings that were already cleaned (owner name vs the username part of the handle) and never move a name out of a fence. Findings: no actionable findings. Not merge authority: T3 needs the maintainer's approval (#502 is on main, so nothing else blocks it).

@Birfy Birfy added the awaiting-approval PR is green and waits for the maintainer's approval (T2/T3) or a review PASS at its tip label Oct 20, 2026
@Birfy
Birfy added this pull request to the merge queue Oct 20, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to a conflict with the base branch Oct 20, 2026
Birfy added 2 commits October 20, 2026 22:10
Generated client.js and patches regenerated from the merged core/; this
branch adds no topics.json entries, so main's topics.json is kept as is.
@Birfy

Birfy commented Oct 20, 2026

Copy link
Copy Markdown
Collaborator Author

Self-review (review-pr, Birfy reviewer agent, 2026-10-20 Asia/Shanghai): PASS (merge-main conflict fix; no feature change)

Tip SHA: 2f979dc
Ran:

  • git merge origin/main twice into the branch, plain merges, no rebase or force-push: first 93dc3c9 (Ask a group's question in that group, not in the Bot's own chat #551) → conflicts only in generated core/client.js and patches/ds-bot/0008-client-bundle.patch, no real source conflicted; then 6824c61 (Save the owner's keys for all of the owner's Bots by default #547) → merged cleanly
  • generated files regenerated, not hand-merged: git checkout origin/main -- patches/ds-bot (this branch adds no topics.json entries; its new files live whole in patches/ds-bot/files/, so main's topics.json is complete), (cd core && npm run build), node scripts/ds-bot-patches.mjs generate, check → pass (10 patches apply cleanly; core/ = ds-bot/ + patches); after the second merge build + generate left no diff and build-client --check passed
  • ARCH_DOCS_BASE=origin/main TZ=UTC npm run verify at this tip (core lint + arch-docs OK with 19 changed files, plugin lint, build-client --check, ds-bot-patches check, all suites) → pass, 0 failures (core 1137, social 314, tree 83, timeline 93, .github scripts 93, interop 37, live-e2e 16)
  • CI on this tip → all checks pass (tests-ok, ubuntu-latest · Node 24 · DSH 0.2.0-rc.2, plugins social/timeline/tree, package, risk tier, reviewed tip); MERGEABLE / CLEAN
  • re-read the diff against main at this tip: same 19 files as before the merges (client, shared remote-label, social face-rooms, tests, docs, generated client.js and patches); one changelog.d fragment (526-group-bot-label.fixed.md); no CHANGELOG.md, version or ds-bot/ edits; no node_modules links committed
    Not run:
  • smoke test — PR does not touch core/index.js or core/src/host/
  • live Mac instances / DSH Desktop / real-model live-e2e (no key; mock model only)
  • production Bot Social (not in scope)
    Verdict: PASS

Findings: none to act on. This review is not merge authority by itself; the maintainer's approval is recorded separately.

@Birfy

Birfy commented Oct 20, 2026

Copy link
Copy Markdown
Collaborator Author

Owner approval in chat 2026-10-20 21:46 Asia/Shanghai: merge.

@Birfy
Birfy added this pull request to the merge queue Oct 20, 2026
Merged via the queue into ThinkFlowLab:main with commit ae11e00 Oct 20, 2026
8 checks passed
@Birfy
Birfy deleted the fix/526-group-bot-label branch October 20, 2026 14:21
@Birfy Birfy removed awaiting-approval PR is green and waits for the maintainer's approval (T2/T3) or a review PASS at its tip agent-pr Pull request opened by an agent labels Oct 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:social Friends, invites, grants, Bot Social area:ui Web/desktop UI and copy bug Something isn't working risk:T3 Risk tier T3 (needs a human approval), set by the controller from the diff

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Group chat: simplify bot display name to bot name + username

1 participant