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@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