Skip to content

Direct chat with a friend's Bot: my own typed line is sent as Chief and held for my approval (regression of #179 in DMs) #227

Closed

Description

@Birfy

Environment

Found by self-test on 38c00b40f0c3e6193c7a8abcfb7aad25673f40f7 (main after #217; core, plugins/social, plugins/tree) on @deepseek-ai/dsh@0.2.0-rc.2, Node 24. Two fresh installs on one Linux box: A :3080 (owner SelfA0333, @selfa0333.home, Bots Chief + Helper), B :3081 (owner SelfB0333, @selfb0333.home, Chief). Bot Social https://47-80-69-220.sslip.io. Scheduled product self-test in the browser, 2026-10-18 03:37–03:43 Asia/Shanghai. No model key in this run, so Bot replies were not tested. Screenshots were not saved; screens are described in text.

Repro

Same setup as the held-line issue: Helper (A's Bot) is granted to B. On B, open Helper and type Hello Helper, this is B testing. (B, the person, typed it; Chief was not asked to write anything).

Actual

  • B's approval box reads Chief → Helper, so B must approve a line B just typed, and it is labelled as written by Chief.
  • On A, the line shows as from "SelfB0333's Chief" with Chief's avatar, not from SelfB0333.

Expected (owner design)

Hunch (code read, not verified)

  • The composer for a remote member calls social/send → flybot.bot.send({ from: <Chief>, via: 'composer' }) (plugins/social/src/social.js ~L1509). On Bot Social the message is sent from Chief's handle, so the server holds it as Chief's outbound and the receiver shows Chief as the author.
  • approvalView() (plugins/social/src/social.js ~L97) shows You only if the server item carries via: 'composer' or sender_kind owner/human. The list_approvals item evidently carries neither, so the card falls back to the Bot name.
  • A fix probably needs a person-authored send on Bot Social (as the face-room human line in Face-to-face: my own plain line is sent as Chief and held for my approval; approval states wrong on both sides #179 did) instead of a Chief message.

Related

#179 (face-room version, closed), #180 (received human lines attributed to the Bot, closed), #167. The held-bubble / waiting-state part is #226.

Activity

  1. kunalRay21 commented on Oct 17, 2026

    @kunalRay21

    Hey! I'd like to take this issue on. Could you assign it to me? I'll investigate the root cause and work on a fix. Thanks!

  2. Birfy commented on Oct 17, 2026

    @Birfy
    CollaboratorAuthor

    PR #231 fixes part of this issue (the sender side):

    • A line you type in a friend Bot's chat goes out at once.
    • Typing it counts as the approval. The host approves only the hold id it recorded from its own send_as_member call, never based on the message text.
    • You no longer get a Chief → Helper card or a "waits for your approval" reply.

    Still open: the receiver side. On A, the line still shows as from SelfB0333's Chief, not from SelfB0333.

    I first tried marking the line with the FLYBOT-FACE-HUMAN envelope and attributing it on receipt, as face rooms do (#180). Review pointed out that the envelope text is not authenticated: any peer could send it and have a Bot's words render as its owner. That includes an older FlyBot whose Bot echoes the envelope, or a custom client. So #231 removed that, and an incoming envelope-looking direct line stays the Bot's line.

    What would close this: Bot Social needs to carry a structured flag that the person typed the line, set by the sending host and not by the text. For example:

    • an optional typed_by_owner: true on send_as_member, honoured only for an owner/connector principal, never a Bot token;
    • surfaced on message.received as a stamped field, e.g. from.typed_by_owner alongside owner_display_name.

    FlyBot would then set the flag only from sendChat and draw the person's bubble only when the flag is present.

    Note: the face-room receive path (renderFaceEvent → parseFaceHuman) has the same text-only trust today. It could move to the same flag.

  3. added 2 commits that reference this issue on Oct 18, 2026
  4. added a commit that references this issue on Oct 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions