Skip to content

Face room @ picker: each Bot in the room once, named Person · Bot, no outside friends' Bots - #339

Merged
Birfy merged 3 commits into
ThinkFlowLab:mainfrom
Birfy:fix/305-face-at-picker
Oct 18, 2026
Merged

Birfy merged 3 commits into
ThinkFlowLab:mainfrom
Birfy:fix/305-face-at-picker

Conversation

@Birfy

@Birfy Birfy commented Oct 18, 2026

Copy link
Copy Markdown
Collaborator

Part of #305 (the @ picker; the remaining items stay on the issue, see below).

In a Face-to-face room the composer's @ now offers:

  • the room's own Bots, each once (a repeated remote seat folds by handle; Bots that left are out), labelled as the Members panel names them: SelfA · Chief, SelfB (you) · Chief;
  • Everyone, described as Every Bot in this room (the room's local member list holds only this home's Bots, so the old 1 members count was wrong);
  • no published friends' Bots (remoteMentionRows, which inserted a raw handle) and no plugin rows (the social Friends' Bots section): only Bots in the room can be reached in it.

Only the label changes; the inserted text is still the @Name the room routes on (@SelfA's Chief), never a handle. Group chats and Bot chats are unchanged.

Still open on #305 (not in this PR): DSH's own Sessions rows in the same menu (a shell source; ds-bot cannot hide it per Session without patching DSH), the sender chip without @ / double space, the receiver drawing the attested mentions as the same chip, and one Bot naming rule for the bubble header / details / tiles.

Ran at tip: TZ=UTC ARCH_DOCS_BASE=upstream/main npm run verify (core 868/868, social 220/220, tree, timeline and other suites pass; build-client --check, ds-bot-patches check, arch-docs ok). New test #305 in core/test/at-menu.test.js fails on main. Not run: smoke, a real browser.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 18, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-18T12:16:01.096200Z e37e3ac PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e37e3ac81d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread core/src/client/at-menu.js Outdated
...here.room.members.map(id => roster.byId[id]).filter(Boolean),
...(here.room.participants ?? []).filter(p => p.kind === 'human' && p.leftSeq === undefined)
...here.room.members.map(id => roster.byId[id]).filter(Boolean)
.map(bot => (face ? { ...bot, label: faceLabel(cleanPeerName(roster.self?.displayName, ''), bot.name, true) } : bot)),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Read local face-room owner names from participants

When the UI uses the supported legacy single-human path without a member-session actor, channel.js serializes roster.self as null even though each local face participant carries Bot Social's ownerName. This line therefore labels local candidates only Chief, while faceSeats in group-settings.js correctly shows <owner> (you) · Chief, so the picker breaks its same-as-Members contract and owner-name filtering; resolve the matching live participant and only fall back to roster.self.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 7a5c44b: the label reads the matching live seat's ownerName first, then roster.self, like faceSeats.

@Birfy
Birfy added this pull request to the merge queue Oct 18, 2026
Merged via the queue into ThinkFlowLab:main with commit 136fc19 Oct 18, 2026
8 checks passed
@Birfy
Birfy deleted the fix/305-face-at-picker branch October 18, 2026 13:39
Birfy added a commit to Birfy/FlyBot that referenced this pull request Oct 19, 2026
…ots (ThinkFlowLab#431)

Fixes ThinkFlowLab#305

What is left of ThinkFlowLab#305 after ThinkFlowLab#425 (one name per Bot):

- **Face room `@` menu without DSH's Sessions rows** (owner decision:
filter in FlyBot for now; ThinkFlowLab#422 stays open for a DSH API). DSH's built-in
`reference` source cannot be dropped for one Session, so for a
face-to-face room `HeaderPill` starts `actions.filterFaceAtMenu`, which
watches that Session's trigger controller (`inputTriggers.sessionOf`,
the one the composer uses; FlyBot already uses it for "Reference a
chat"). New `face-at-filter.js`: a `<style data-bt-face-at>` hides the
`reference` rows whose icon is `session` (Sessions and Subagents) and
their section title, by MenuView's option ids; `controller.hover` moves
the highlight past them in the direction of the key, so arrow keys skip
them and Enter never picks a hidden row; a menu with nothing else left
is `dismiss()`ed, so Enter sends. File rows stay. No DSH patch.
- **Everyone's count** in a group now counts the Bots it reaches (local
members plus seated friends' Bots), with singular/plural: `1 member` /
`2 members` (also the palette's group subtitle). Face rooms keep `Every
Bot in this room`.
- Already on main, checked: one row per Bot in a face room (ThinkFlowLab#339), `Bot
(owner)` naming (ThinkFlowLab#425), the mention chip with `@`, the same label on
both homes and no doubled space (ThinkFlowLab#367/ThinkFlowLab#368, test
`mention-rule.test.js`).

Tests: `core/test/face-at-filter.test.js` (rows and titles hidden, files
and Bots kept, highlight steering both ways, dismiss when only Session
rows are left, watcher clean-up), `core/test/at-menu.test.js` (Everyone
count). Docs: `docs/subsystems/core-client.md`. Changelog:
`changelog.d/305-face-room-at-menu.fixed.md`.

Ran: `ARCH_DOCS_BASE=origin/main TZ=UTC npm run verify` at 592d535 (core
966+ tests, social, tree, timeline, scripts, interop, live-e2e: all
pass); `node core/scripts/build-client.mjs --check`; `node
scripts/ds-bot-patches.mjs check`.
Not run: smoke bench; a live two-home browser check of the face-room `@`
menu in DSH Desktop (the CSS relies on MenuView's
`dsh-slash-option-<source>-<index>` ids and `:has()`, checked against
DSH 0.2.0-rc.2).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant