Thanks for your post it's interesting to see how things are handled across software.
Just a side note: whatever we choose, we have to consider gateways. Somehow somebody will
have to convert third party network behaviour to XMPP one.
So I'm in favor of some flexibility. The challenge is to have it while keeping UX
acceptable, and not confusing when we switch XMPP client.
Le 27 avril 2025 09:26:46 GMT+02:00, Badri Sunderarajan <badrihippo(a)disroot.org> a
écrit :
Hi,
Adding a few design notes from my experience with other platforms. Hopefully this will
help inform further discussion.
> I don't see that it's needed to check
for other replies. If two people start a
> reply at the same time, there will be two threads with the same parent, in the
> UI this appears like a tree, i stays readable. This is what happens on sites
> like Reddit on ActivityPub (but on Mastodon, the tree doesn't appear in
> comments, making it very confusing IMO).
ActivityPub uses the concept of "parent post" rather than "threads".
And yes, it does get confusing when the replies branch out into a tree and then get
"flattened" out for display in interfaces like Mastodon's.
If I want to choose a single strand of the conversation, I would choose the last post in
that sequence, and then get presented with all direct ancestors of that post (which is a
single strand as each child can only have one parent). I think this "single linear
sequence, among possibly many", is what originally became Twitter-style
"threads" (now used by Mastodon too).
In summary: AP "threads" are basically "a sequence of posts where each post
is a child of the immediately preceding one", but as each original post can branch
out into many "threads" I'd say it's more of a GUI consideration than
anything else.
Never used those services, but the normal flow i
imagine is, im in a support channel, someone asks a question "How do i do X?",
now 2 people start to type, and create two separate threads with the answer, now a 4.
person wants to join, then the client needs to decide to reply to one of the threads.
Also from the GUI side its unclear how should handle this, should i hide the fact that
there are 2 threads? Should i show 2 threads? But then obviously both users wanted to
answer the same person, i would say it would be the expectation that this conversation is
wrapped in a single thread and not multiple.
What happens in AP in practice is that the third commenter would make another reply that
is a direct child of the original post (yet another "thread" if you will).
People also use it in this way; if I wanted to reply specifically to Commenter 1 I would
reply to Commenter 1's post, but if I wanted to make a general comment on the entire
conversation I would reply directly to the main thread.
This is very different from how I would approach interacting with a conversation in a
chat-oriented app (XMPP or otherwise): on ActivityPub I'm more diligent about
selecting the specific message I want to reply to. I think that's partly because each
reply is a "post" in its own right that could be shared, boosted, etc. and show
up on peoples' timelines as an entry point to whatever they're going to see next.
Depending on which message I reply to, they'd be presented with a different view of
the conversation (which they could change, of course, but it is their first view of the
entire conversation).
Finally, with regard to moderation/retraction: with ActivityPub software (including Akkoma
and Mastodon), when I'm deleting a post I get a warning that any replies to that post
will be "orphaned", i.e. not have a parent any more. I have also seen some posts
where in place of a parent all I get is "this post no longer exists". So it is
arguably an issue there as well (but see my next section with thoughts about threads).
------------------------------------------------------------------------
On a different note, since there was some debate about how to include thread IDs: Discord,
unlike AP, treats "threads" and "a sequence of replies" as two
different things. The default mode is to have all the conversation inline (no
threads/parents/etc.) but if there's a sequence of replies (a message, to which there
is a reply, to which there is another reply) then it asks if I want to "convert that
message to a thread". (One can decide to make a message into a thread at any point,
but the UX explicitly suggests it when it thinks a sequence of replies has gone on for
long enough)
At that point, only the parent message will be shown in the main message area and
subsequent replies (which are all linear/sequential) show up only when you click on that
parent message to navigate into the thread.
Mattermost, on the other hand, does "both" which I suppose is somewhat similar
to Mastodon. Replies are internally a "tree of replies", but the default view is
to show only the first message and make the user click through to see the other replies in
a linear way (so, visually similar to Discord "threads").
However, there is also an option to turn off "threads mode" at which point all
the child replies will show up along with the main messages (visually similar to Discord
"replies"). In this mode clicking on any of the child messages will show up the
entire "thread" (i.e. initial parent message and all it's descendant
replies).
In my opinion Mattermost is the most confusing as people experience the messages
differently depending on their settings. For XMPP, perhaps we should first decide which of
"linear threads" or "branching-out replies" is being defined? Even if
we have both, in my opinion it would be better to treat them as separate (if somewhat
related) concepts. Linear threads would be the ones with thread IDs whereas
"branching out replies" don't need to have anything to do with threads at
all.
After typing the above, I realised that Goffi had outlined these different modes of
thinking too; I am pasting a quote for reference:
The way I got it, we have basically 2 ways to see
threads:
1. A series of replies to any message in a group chat, à la Slack (in Slack,
you see the replies hidden under parent message, with something like "X
replies", and when you click, a panel appear with the whole thread.
2. A side discussion explicitly started, that could be seen like a new chat
window (UI example: user clicks a "start a new thread button", and start a
blank window with it message, this message has a new thread ID, that will be
used by people replying to it).
As I said, I think it would be best to treat these
as two separate features, and either decide which we want or do as Discord does and offer
each as distinct options.
Best,
Badri