Skip to content

[Team] Remove a friend's Bot, and approve held Bot replies inside the chat #90

Closed

Description

@Birfy

Problem

A user cannot remove a friend's Bot from Friends' Bots. The group header only has the Auto-accept toggle, the Social plugin does not wire any remove action, and a Bot's pending outbound reply is only visible in the sidebar "to approve" list, not in the chat where it was produced.

Intended relationship model (owner's design, takes precedence)

  1. Grant. A Bot's owner publishes one Bot to a friend. It is a child Bot: it can only manage its own downstream in the owner's tree, nothing else. Grants are per Bot, not per person, and the owner can revoke them at any time.
  2. Use. The granted Bot shows up under Friends' Bots. The user can chat with it alone, add it to a group, or bring it into a face-to-face group (6-digit number, [Feature] Face-to-face group: Bots join one room by entering the same 6-digit number #83).
  3. Group. Every human in the group can talk to and operate these Bots. A Bot can never act beyond its grant (its own downstream). A member sees history only from their own join point; leaving withdraws access.
  4. Approval. Whether a Bot's reply goes out is decided by the Bot owner's outbound approval rules (auto-approve on/off), not by the group.

Scope

A. Remove a friend's Bot (my side)

B. Approval prompts inside the chat

  • When a Bot reply is held for approval, render it in the chat (single or group) as a "Waiting for approval" message with Approve / Reject buttons and an inline Auto-send toggle. Approve sends it; Reject discards it and leaves a note in the chat.
  • Who can approve: the Bot's owner (for my Bots, me). Other humans in the group see "Waiting for the owner's approval" without buttons.
  • Keep the sidebar "to approve" badge, but it should just link to the same messages.
  • Approve/Reject must go through the existing Bot Social approval path (decide-approval), no new bypass. Auto-approve uses the existing setting.

Acceptance criteria

  • Tests for: removing a remote Bot (leaves rooms, list updated, friend unaffected), re-share behaviour, in-chat approval rendering for owner vs non-owner, approve/reject, and the chat note after reject.
  • Update docs/subsystems/*.md, CHANGELOG.md; keep ds-bot/ pristine (use patches/ds-bot/*.patch if a core change is needed); client bundle built with scripts/build-client.mjs --check; CI green.

Related: #50 (rooms with remote Bots), #51 (publishing), #83 (face-to-face groups), #69 (approvals not discoverable).

Activity

  1. Birfy commented on Oct 15, 2026

    @Birfy
    CollaboratorAuthor

    Scope C (added): publish defaults to off for every Bot, Chief included

    Publishing is only ever an explicit owner action. Existing Chiefs become unpublished after upgrade until re-enabled; call this out in the CHANGELOG/PR.

  2. Birfy commented on Oct 15, 2026

    @Birfy
    CollaboratorAuthor

    Design change (owner): no published mechanism, per-Bot grants only

    Supersedes scope C and the publish model of #51/#88. The global published flag, its toggle and the reach() published gate are removed. Every access is an independent per-Bot grant (one Bot -> one person, scoped to a group when used in one). Default deny, Chief included. Friends' Bots lists only Bots granted to me. Grants are created through the existing per-Bot invite and revocable per Bot and person, with a 'Manage access' view. A granted Bot can be chatted with and added to groups by the grantee; group members operate it only inside that group and within its downstream authority. Face-to-face: bringing my own Bot by number is an implicit room-scoped grant. Server side tracked in Birfy/bot-social.

  3. added a commit that references this issue on Oct 15, 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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions