[Standards] Proposed XMPP Extension: Message Fastening
xmpp at larma.de
Thu Dec 12 12:10:15 UTC 2019
On 12/11/19 6:50 PM, Kevin Smith wrote:
>> The business rules in §4 say that a Fastening can not have a Fastening
>> themselves. If both message attaching, reactions and others are realized
>> using Fastening, this implies that you can not react to an attached
>> message, for example you would not be able to thumbs-up the fact that a
>> bot provided a helpful attaching. While it is arguable that this is not
>> strictly a required feature, the restriction seems to be unreasonable in
>> that case.
> This one was deliberate - reacting to reactions to reactions (and similar) is the sort of scenario that it’s easy to spec, but then generally horrific to implement (I refer to pubsub collections as a simpler example of where a similar concept seems pleasantly general but ends up being overcomplicated to work with - to the point of neglect).
I think the question this comes down to is, what we want to build using
fastenings. I don't want reactions to reactions, but if we allow some
sort of "comment" as a Fastening, then we should also allow reactions to
If we keep this restriction, I believe we'd need a generic standard for
associating a message to another message, independent of it being a
fastening or another kind of message (that can have fastenings).
Also one of the reasons why everyone agreed it would help to have the
fastened elements as a sub-element of the <apply-to> instead of directly
in the <message> as in XEP-0367, is that if we don't do that, it isn't
clear how to handle the correction of a message attaching case (a
fastening of a fastening). Thus if we decide against allowing fastening
of fastenings, the decision to use sub-element and <external> etc should
> I think <apply-to> can contain multiple elements, and they’re treated independently
> So if you apply-to two elements, and then replace apply-to one element, it would replace the relevant one, leaving the other intact. If you then replace apply-to both elements, it would replace both of them. This is under-(not at all) specified.
> For <external/> elements, it should be the target name/namespace, as if it was a child.
How are edits supposed to work then? Because for various (good) reasons
they exist of multiple elements in the example.
>> What happens if a client accidentally does not add the `replace="true"`
>> (for example because the same element was send from two different
>> devices at about the same time)? Will a) there be two elements with the
>> same namespace and name then, b) the second silently ignored or c) the
>> first silently replaced? In case of a), how to decide which to replace
>> in the future? In case of b), how does the sending entity know if there
>> message was first or second? In case of c), why put `replace="true"` at
>> all if it is implicitly done anyways?
> Is it sufficient to assert that protocols that want to attach multiple of the same namespace then can’t replace them, or do we need ids on the fastenings?
> I guess if we have 😂 and
> 🤦🏻♂️ as individual fastenings, we need to be able to remove one and leave the other intact. OTOH, if a fastening contained one reaction for both 😂 and 🤦🏻♂️, it could be replaced with a reaction with just 🤦🏻♂️.
I don't quite understand what you want to say here. If each reaction is
a separate fastening, how do you remove a single one if you only
identify reactions by their qname.
Also it apparently is currently specified how to replace but not how to
remove a fastening. Replacing with an empty variant may be technically
possible, but that empty variant would then still be required to send
out to clients (because we don't want servers to have to know what an
empty variant looks like for each fastening).
> I have assumed that if you’re doing full stanza encryption, and want archiving, your only choice as things stand is to have a complete download of your archive, and to do all collation locally. Having both smart archivability (without decryption) and encryption is a more or less unsolvable problem.
> Does anyone have a workable way to go beyond ‘archive can’t be smart’ with E2E?
It depends on how "smart" your archive should be. Just attaching a
message to another message does work perfectly fine with encrypted
messages, but you can obviously not summarize them.
What does not work with encryption is to know the qname of the element.
And I think it would be desirable to not leak that for the sake of
smarter archiving (so that it cannot be seen if I react to a message or
just mark it as read), so if we can come up with something that makes
this not required, that would be great. It could even be that this can
not work well with race conditions (= you have to have received the last
encrypted reaction before you can send a new encrypted reaction and if
you didn't, others will always have to fetch both just to find out that
they only needed one after decrypting).
By the way, I can hardly imagine summarizing to work in a generic way.
The only thing that makes sense to me is to have the procedure to
summarize a certain fastening defined with that specific fastening (e.g.
in the reactions XEP for reactions) and not generically. This also
implies that servers may not be aware of how to summarize certain
fastenings and thus clients would always have to be ready to ask for the
raw messages for these if they want to display them (obviously servers
should announce via disco which they do support).
As a general remark, I think it makes sense to think about what this
generic feature should cover, so we can correctly model at least those
The XEP itself mentions:
- Message edits: only added by original author (and maybe moderators?)
only the last one is relevant, but history is likely to be needed in
- Link information: one for each link attached by author or server, but
should be removable by the author if automatically generated info is crap
- Emoji reactions: each user can add, all that remain active are
relevant, but can be summarized as it's not that relevant *who* reacted
in first place.
Outside the XEP we have mentioned:
- Message retraction (XEP-0424): only one per message, by auther or server
- Adding markup (references proposed by ralphm in his blog): not sure
about this one in general, seems to me more like an edit that doesn't
need special handling.
- Received/Read markers: each user can add, there can only be one per sender
Do we have others, should we maybe start a wiki page or something to
More information about the Standards