Skip to content

Show who pulled an org message as a stack of avatars, as the web does - #153

Merged
simonhamp merged 2 commits into
mainfrom
feat/pulled-by-avatars
Nov 3, 2026
Merged

simonhamp merged 2 commits into
mainfrom
feat/pulled-by-avatars

Conversation

@simonhamp

@simonhamp simonhamp commented Nov 3, 2026 •

Copy link
Copy Markdown
Member

In an org thread, the status line under the latest message listed who had pulled it by handle: "12:57 · pulled by @A, @b, @c, @d, @e +2". It now shows their avatars after "pulled by", the way the web's PulledBy in conversation-thread.tsx draws them:

  • Up to five 14pt avatars, each with a 1pt ring in the thread's background, overlapping by 4pt, the later ones on top. Then "+N" in the same mono text for the rest.
  • "pulled by everyone" with no avatars once every other member has pulled it and there are more than three of them.
  • The stack's a11y label reads what's drawn: the five handles, then "and N others" ("@ada, @Grace, @linus, @margaret, @ken and 93 others"). VoiceOver and TalkBack read it as one element after the "pulled by" text. This is where it parts from the web, whose aria-label lists every handle, which in a 100-member org could mean reading out 98 names.

The new partials/pulled-by uses partials/avatar. I didn't reuse partials/stacked-avatars because it differs in four ways: 32pt avatars, a tap on each to open a profile, the first on top, and "+N" in a disc. Making it cover both would have meant a parameter for each of those.

The words around the stack now match the web too, which changes a few things beyond the names:

  • Your own message in an org loses its time, like your messages in a one-to-one thread. It reads "[glyph] pulled by [avatars]", or "[glyph] pushed" until someone pulls it. Before, it was "12:57 · pushed".
  • Someone else's message keeps its time: "12:57 · pulled by [avatars]". Until someone pulls it, it shows just "12:57", where it used to say "12:57 · pushed".
  • The glyph's second dot takes the first puller's lane, as on the web. It was always the primary colour in orgs.

One-to-one threads haven't changed.

The edit stays inside statusOf() and the status row of partials/message-item, so it should merge cleanly with the swipe-to-reply work that's also in message-item.

Tests: four new tests in ConversationTest cover who's in the stack and in what order, the +N, the a11y label, the time on someone else's message, "everyone" (four of four, but not three of three), and pushed against just the time. The thread, Remotes, org members and notifications tests all pass (235).

Screenshots

Taken against a local devnull at current production. In release crew, seven of the eight other members have pulled your message. In infra, three of the four (you included) have pulled Tyson's.

your-message

iOS light iOS dark Android light Android dark
Before
After

their-message

iOS light iOS dark Android light Android dark
Before
After
  • No visible change

🤖 Generated with Claude Code

simonhamp and others added 2 commits November 3, 2026 14:48
The status line under the latest org message listed handles ("pulled by
@A, @b, @c +2"). It now draws up to five small avatars after "pulled by",
then "+N" for the rest, and says "everyone" once all of more than three
members have pulled it. A screen reader hears every handle.

Like the web, your own message drops its time (you get the glyph instead),
someone else's keeps it in front, and a message nobody else has pulled says
"pushed" if it's yours and just the time if it isn't. The glyph's second dot
takes the first puller's lane.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The stack's a11y label listed every handle, so an org of a hundred would
read out ninety-odd names. It now reads what's drawn: the five handles and
"and N others".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@simonhamp
simonhamp force-pushed the feat/pulled-by-avatars branch from af0ab85 to 05bb151 Compare November 3, 2026 14:48
@simonhamp
simonhamp merged commit 001c26f into main Nov 3, 2026
3 checks passed
@simonhamp
simonhamp deleted the feat/pulled-by-avatars branch November 3, 2026 19:28
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