Skip to content

fix(web): a person's participant address is their mailbox address (CL-8581) - #929

Merged
TheGreatAxios merged 2 commits into
mainfrom
cl-8581-person-mailbox-address
Sep 18, 2026
Merged

TheGreatAxios merged 2 commits into
mainfrom
cl-8581-person-mailbox-address

Conversation

@TheGreatAxios

Copy link
Copy Markdown
Contributor

Summary

  • A person participant's roster address was principal.email ?? principal.refId — neither is a routable mailbox address, so agents copying a person on a handoff (per the roster instruction) sent to an address the hub drops, and the person's own turn never matched itself for avatar resolution.

Changes

  • listRoomParticipants now takes the room tenant's own domain (already fetched by every caller) and builds a person's address as <refId>@<domain> — the same address the hub builds for mailbox delivery.
  • Added sameAddress, a case-insensitive whole-address comparison, and used it everywhere a turn's address is matched against a participant's (resolveParticipantName, resolveAvatarName, the room page's avatar-kind lookup) — the mailbox lowercases local parts on the wire, so a header from and an envelope from for the same sender can differ in case.
  • Callers (workbench-room-page.tsx, workbench-create.ts) pass the domain they already have in scope; no new fetch was added.

Testing

  • bun test apps/web/src/chat/threads-api.test.ts apps/web/src/chat/room-roster.test.ts
  • bun run check

@linear-code

linear-code Bot commented Sep 18, 2026

Copy link
Copy Markdown

CL-8581

@TheGreatAxios
TheGreatAxios merged commit c6a8462 into main Sep 18, 2026
4 checks passed
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