Repository navigation
Face-to-face: per-Bot avatars and a tile-grid waiting room - #107
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
The picker and waiting roster used a shared first-letter badge, so every Bot looked the same. Reuse the host BotAvatar (configured image/shape/color, else a stable look from the Bot id or a friend's handle). Co-authored-by: Danyang Chen <birfychen@gmail.com>
Roster rows are one line (avatar + name, muted mine/owner hint). Leave and Enter chat share a fixed footer so a long list can scroll under the countdown. Co-authored-by: Danyang Chen <birfychen@gmail.com>
One Bot per row was the wrong waiting-room shape. Tiles match a WeChat group-member grid: avatar on top, name centered below, several columns wrapping. Mine is a tiny accent dot, not a badge or owner subtitle. The picker uses the same tiles with a check overlay. Footer still keeps countdown at the top and Leave + Enter chat on one row. Co-authored-by: Danyang Chen <birfychen@gmail.com>
Take main's generated patches/ds-bot and rewrite them from core/. New files stay in files/; CHANGELOG.md is untouched (fragment in changelog.d/). The BotAvatar host-look note is a heading on plugin-runtime.md so it does not share the numbered invariant list. Co-authored-by: Danyang Chen <birfychen@gmail.com>
dc43729 to
8dcaf60
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: dc43729939
ℹ️ 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".
| return full ? { ...local, ...full } : local | ||
| } | ||
| if (!member) return undefined | ||
| const mine = (bots ?? []).find(bot => bot.handle && bot.handle === member.handle) |
There was a problem hiding this comment.
Resolve newly registered Bots by their local identity
When a selected Bot had no Bot Social identity when the dialog loaded, bots contains no handle; social/face-join creates the handle later, but this state is never refreshed. This handle-only lookup therefore misses the owner's Bot (even though the post-poll viewHostedFace member carries its local id) and faceLook treats it as remote, so its waiting-room tile changes from the configured roster avatar shown in the picker to a handle-seeded avatar. Match the local member id/join result or refresh the mapping after registration.
Useful? React with 👍 / 👎.
| ownerName: cleanFaceName(member.owner_name || member.ownerName, ''), | ||
| roomOnly: member.roomOnly === true || member.published !== true, | ||
| label: cleanFaceName(member.label, '') || faceMemberLabel(member), | ||
| ...faceMemberLook(member), |
There was a problem hiding this comment.
Preserve payload avatars when polling face rooms
When a face-room member supplies a color/avatar, this spread preserves it only in the raw join snapshot. The waiting-room effect immediately calls social/face-rooms, whose applyFaceSnapshot maps members into the hosted room without color or avatar; viewHostedFace then reconstructs stripped members and setRoom replaces the array. As a result, the peer's supplied profile look disappears on the first poll, so these fields need to be carried through the hosted-room path or merged from the prior snapshot.
Useful? React with 👍 / 👎.
Follow-up to #100 (owner feedback).