jdev - 2023-01-11


  1. pep.

    https://xmpp.org/extensions/xep-0060.html#publisher-publish-error-forbidden Any clue what "insufficient privileges" mean in this context? Can a publisher of the node have insufficient privileges?

  2. jonas’

    if you're no publisher, yes

  3. pep.

    But as a publisher?

  4. pep.

    Can one edit/delete other publisher's items for example? Is there such restrictions available?

  5. jonas’

    what's the actual question?

  6. jonas’

    a client always needs to be prepared to handle authorization errors

  7. pep.

    Trying to see what's currently available for moderation on pubsub

  8. jonas’

    depends on the implementation.

  9. jonas’

    services can do whatever they like

  10. jonas’

    (as long as they return the appropriate responses)

  11. pep.

    That's always a great answer in a standard :P

  12. jonas’

    '60 is quite flexible in that regard

  13. pep.

    Ok, maybe there's some way for servers to advertize capabilities in this regard, so that clients don't need to do trial and error and can avoid providing UI when the feature isn't there or stuff like that

  14. MattJ

    Products vs protocols and all that. The XEP defines a protocol, there are many ways to use it. There is nothing specifically written anywhere about moderation in pubsub, but that doesn't mean it's not possible, and it might be a good idea to write it.

  15. pep.

    I'm planning to have a look at that in the "near future"

  16. flow

    pep., I think this is a prime example for a case where the error response should contain a more refined description of its cause

  17. pep.

    flow, maybe. I do think (as I said above) that a client should be able to know beforehand it's not authorized to

  18. pep.

    Of course there can be both

  19. jonas’

    pep., agreed though.

  20. jonas’

    it would be good if you could disco#info a node and get a list of all your permissions on a node

  21. Kev

    There's assorted places in XMPP where you can't tell if something will succeed until you try, and it's ... not great.

  22. jonas’

    it would be good if you could disco#info a node and get a list of all _your_ permissions on _that_ node

  23. flow

    maybe, I am not sold on that

  24. pep.

    Kev, yeah.. I've seen the last thread on the list about reactions :P

  25. flow

    that appears to be a case where it is better to ask for forgiveness than permission

  26. jonas’

    flow, disagree

  27. pep.

    flow, tell the user that

  28. jonas’

    that's terrible for UIs

  29. pep.

    ^

  30. flow

    fair point

  31. jonas’

    nice for machine-to-machine, but not good for human interfaces.

  32. Kev

    "Thanks for writing out your thesis. I'm afraid you're not allowed to submit it."

  33. flow

    I wonder if we should design a generic protocol pattern where an operation can be marked as "dry-run" (or "don't do it"). so you can check if you would be allowed to do it

  34. pep.

    flow, but then you'd need the content of that operation to be available first?

  35. jonas’

    flow, trying all possible optinos in a UI when showing it is very inefficient

  36. flow

    pep., the content does not matter if it is a dry run

  37. pep.

    it may

  38. flow

    ok, depends on what you classify as content then

  39. jonas’

    flow, banned words, length limitations, ... there are lots of ways even real content may matter

  40. jonas’

    but also parameters like which item ID you are retracting

  41. flow

    well the item ID could by the correct one

  42. flow

    and for the other parameters you mentioned: those are probably also not discoverable otherwise

  43. pep.

    They could be made available via disco

  44. flow

    you probably can't take everything into consideration, there is a certain tradeoff

  45. pep.

    Well a spec is a living document right? :P

  46. pep.

    Surely at some point you'll have an error, and that's where indeed good description of the error is necessary

  47. pep.

    (and i18n)

  48. flow

    I think i18n is secondary to the refined description (but sure can't hurt)

  49. pep.

    As it's likely to be shown straight to the user, I think it's absolutely necessary

  50. jonas’

    flow, ... how is it secondary?

  51. jonas’

    that ^

  52. pep.

    Now of course between what one feels is necessary and implementations progress, there's always a gap

  53. flow

    I believe such refined descriptions cause typically more confusion in case of the average user

  54. flow

    as in non-tech safy

  55. jonas’

    even more important then to know ahead of time whether a thing is allowed

  56. flow

    right

  57. flow

    I wasn't considering the human UI aspect in this discussion (for some reason)

  58. nicoco

    about MAM: do clients actually implement support for <fin stable='false'>, eg, by re-fetching MAM periodically until stable='false' disappear? cf paragraph just above https://xmpp.org/extensions/xep-0313.html#sect-idm46316171986560

  59. MattJ

    "they should"

  60. MattJ

    I suspect they don't :)

  61. MattJ

    It's quite a lot to ask of a client

  62. nicoco

    it's probably hard to get a proper UX around that indeed

  63. pep.

    Typo in the paragraph btw: "it the server could return best-guess results", "it"

  64. pep.

    (or I don't understand the sentence)

  65. nicoco

    it's quite tricky for slidge to guarantee stable MAM results for legacy networks that allow message editing (and re(tr)actions…) but I guess always replying to queries with stable=false would be very very very ugly anyway. fastening collation would help a lot, but I hope to figure something out before (if?) it's worked out :(

  66. Kev

    Always replying with stable=false is the right thing to do, though, if the results aren't stable.

  67. MattJ

    The universe is unstable

  68. jonas’

    do not look up false vacuum decay unless you need more existential angst

  69. jonas’

    (speaking of "universe is unstable")

  70. nicoco

    I would be more cautious: _our perception of_ the universe is unstable ;)

  71. MattJ

    Just serve clients stable results, and if they change... just tell them it's only their perception that is unstable

  72. MattJ

    But all this to say, more seriously, that I think some pragmatism is required

  73. nicoco

    sounds like a plan to me! you hated my bug reports already? hold on, it's about to get worse :P

  74. MattJ

    If you serve results and say they are stable, and they later change, the client may not update them. You might or might not care about that.

  75. Kev

    Lots of clients don't have to care about this stuff, because they fetch on demand, but anyone who wants to do a full-MAM-sync client and wants to support clustered servers that can operate in a split mode have to care.

  76. MattJ

    We have the same problem with Matrix bridges

  77. MattJ

    Since the history can change at any time

  78. jonas’

    > Lots of clients [citation needed]

  79. Kev

    Ok. Some clients.

  80. MattJ

    It's different to a clustered XMPP instance knowing that the past N entries in the archive haven't been fully replicated and confirmed

  81. MattJ

    In such a setup, both client and server using the 'stable' flag correctly can still achieve consistent synchronized history

  82. Kev

    Right, but even in a situation where no queries are ever stable, it's useful to flag that to a client, isn't it?

  83. Kev

    So that the client knows it can't use a "sync once, and then just catch up" strategy.

  84. MattJ

    Yes, I would agree that if the server judges that clients should not cache the results, it should always set stable=false

  85. pep.

    Would the server flag a full response btw, or would it only flag parts of it? If it knows only a subset is unstable

  86. nicoco

    agreed about pragmatism. I should just ignore reactions/edits/retractions of old messages, and be happy with only "live updates". guaranteeing proper ~infinite history sounds like a lot of trouble for something that most likely won't matter. the reason I want to implement MAM is just to make groups usable on mobile…

  87. MattJ

    But I can then understand that clients might just ignore that flag

  88. Kev

    > But I can then understand that clients might just ignore that flag Sure, clients can do what they like based on the properties they want.

  89. MattJ

    What's not going to happen in most clients, is implementing two different sync strategies, and choosing between them on a per-query basis

  90. Kev

    Sure.

  91. nicoco

    >Would the server flag a full response btw pep. full response, since it's in <fin> I think?

  92. MattJ

    A client that does the "right" thing, paired with a server that always returns stable=false would be somewhat problematic

  93. Kev

    I'm happy enough that clients choose to ignore the edge cases if they want to. As long as we give them the information to do the right thing if they so choose.

  94. MattJ

    It almost suggests we need a third flag

  95. Kev

    > A client that does the "right" thing, paired with a server that always returns stable=false would be somewhat problematic Not necessarily. Doing the right thing with stable=false only means not treating it as a source of truth, which means refetching it next time you want that segment of the archive.

  96. MattJ

    "temporarily unstable" (try again in a bit) or "permanently unstable" (do whatever you want)

  97. Kev

    Permanently unstable is probably a property of the whole archive that could be advertised.

  98. nicoco

    isn't there some overlap between what "permanently unstable" entails and what the fastening collation xep tries to do?

  99. Kev

    Is there?

  100. Kev

    "Unstable" means that there may be messages missing from the middle of your results.

  101. Kev

    And the fastening collation is a way to indicate on results that later stanzas have been applied to change somewhat-meta-data.

  102. nicoco

    from my (very narrow) point of view, there is some overlap: I can't say stable="true" because of this msg metadata changes

  103. Kev

    But you can.

  104. pep.

    nicoco, it's another message, not a message that has changed

  105. Kev

    Or, at least, the collation stuff shouldn't affect it. All that should affect stable/not is whether messages might be missing from the returned sequence.

  106. nicoco

    >another message, not a message that has changed indeed. every "metadata event" (edits, reactions, ...) is indeed a new message stanza in XMPP. that does not map to what most networks do where the MAM-equivalent returns collated results only.

  107. Kev

    And that's fine.

  108. Kev

    And that's what collations allow XMPP to act like.

  109. nicoco

    >whether messages might be missing from the returned sequence the overlap is here? if a MAM server serves collated results, it's because they don't want to serve all "metadata edit events" but only the current state (probably as optimization for storage and network IO)

  110. Kev

    Well, no, I don't think that's true.

  111. Kev

    If your MAM archive serves

  112. Kev

    If your MAM archive serves fastenings as normal messages, they're in sequence. If it doesn't, they're always missing.

  113. Kev

    I think unstable-ness is completely orthogonal to serving of collations.

  114. Kev

    (While accepting I could be wrong)

  115. nicoco

    > If your MAM archive serves fastenings as normal messages, they're in sequence. If it doesn't, they're always missing. I'm having trouble parsing this. Could you expand a little? 🤯️

  116. Kev

    I'm saying that your MAM archive will either serve up messages that are a fastening, or will not serve up messages that are a fastening. Whichever way it chooses to do, which messages are returning a particular period (stable=true/false) is unaffected by subsequent fastenings being processed by the archiving server.

  117. Kev

    s/returning/returned for/

  118. nicoco

    > The third form, "collate", presents each traditional IM message, as "simplified", but within the result includes summary information about the fastenings (and pseudo-fastenings) encountered. what I meant by overlap was: if a server serves "summary information about the fastenings", clients should always treat it as "stable=false". or doesn't that make sense?

  119. nicoco

    I mean that by nature, the "summary information" is unstable (like the universe)

  120. Kev

    I think I understand your point, but I don't agree with it entirely.

  121. Kev

    If you want to render that message again, you'll want to refetch the collation, yes. But you do at least know that the message itself is there, that no new messages have been inserted before it, etc. You can render a page from your local cache, for example, and fill in the fastenings as they come in from a subsequent query.

  122. Nicoco

    Kev: I understand. from a client's perspective it is different in this regards. Thanks for the replies. "Not all stanzas are born equal" could be the subtitle of the fastening collation spec.

  123. Kev

    Or "It seemed like a good idea at the time", which applies to much of XMPP :)

  124. pep.

    Retractions with <body/> included are really not user-friendly.. "This person is retracting a message that they may have not wanted you to see, so we're going to repeat it", or "This person has retracted a message that was taking quite some space, so we're going to repeat it because it's good that you can see it once more"

  125. pep.

    That's really all this makes me think about :/

  126. rom1dep

    Hey there, I'm having a fuzzy memory of someone mentioning ad-hoc commands being implemented by some fork of Conversations, does that ring a bell, and would anyone know which client that might be?

  127. MattJ

    rom1dep, Cheogram

  128. MattJ

    Conversations fork, has ad-hoc commands

  129. rom1dep

    Sounds like it might be it, thanks a lot MattJ 🙂

  130. Beherit

    https://cheogram.com/

  131. Nicoco

    pep.: about retractions, would you rather see no message at all for clients that don't support it?

  132. pep.

    I wonder. I think yes. Maybe at the most "The user retracted a message", to say they did something, but without context it's probably useless so..