Good day, to one and all.
I am considering to utilize a PubSub service as a public discussion
board; and, as a public discussion board, it should be free for all.
I was wondering whether an approval or other type of moderation
mechanism is specified for PubSub.
Kind regards,
Schimon
Hi all,
This follows a discussion the XSF's Standards Discussion MUC. Logs start at
https://logs.xmpp.org/xsf/2025-05-18 (and continue into the next days).
XEP-0115: Entity Capabilities describes how capabilities from the
"generating entity" can be discovered by a "requesting entity" in section
6.2. To do this, the "requesting entity" sends a disco#info request (that
MUST include a disco 'node' attribute for backwards-compatibility).
The 'node' attribute value is generated in a way that results in an
application-specific value that will be specific to the application that
generated the string as well as the capabilities that are currently
advertised by that application.
What the XEP does not describe, is what is to happen when the requesting
entity uses in their request a 'node' attribute value that is different
from what the generating entity would produce (given its current
configuration). Since providing the value, the generating entity could have
undergone configuration changes making available a different set of
capabilities, thus making the original value outdated.
The XEP is improved by explicitly describing this scenario, by defining
what should happen when a requesting entity uses a conflicting 'node'
attribute value.
I can think of a number of options:
1. If the 'node' attribute value sent by the requesting entity is
recognized by the generating entity as a valid value in some context (eg: a
value that represents an earlier state of offered capabilities), the
generating entity could respond with the corresponding capabilities.
Downsides: the requesting entity may take this as an indication that this
represents the _current_ capabilities of the requesting entity, when that
may not be the case. This approach can't be used if the generating entity
does not recognize the value
2. The request could be answered with an error (eg: item-not-found).
Downside: the requesting entity, that only performs this request because
it's interested in the current capabilities of the generating entity, needs
to do another round trip to get the answers it is looking for.
3. The request could be answered with a response in which the generating
entity uses the new/up-to-date 'node' attribute value (it explicitly does
not echo back the value that was in the request). Downside: there is a
potential backwards compatibility issue for existing implementations that
currently use another approach. They may end up mismatching 'node'
attribute values and associated capabilities.
Given the wording in section 6.2, specifically the definition that the
requesting entity is to include the 'node' attribute for backwards
compatibility, seems to suggest that the responding entity may not have a
need for this value. That, to me, suggests that option 3 is most
appropriate.
I suggest that section 6.2 of XEP-0115 is modified to include an explicit
description of option 3. The backwards-incompatibility issues are arguably
existing only because of unspecified behavior. I do not see how such issues
would be significantly affecting functionality. As the XEP is currently in
state Stable, backwards incompatible changes are allowable.
Thoughts?
Kind regards,
Guus
Hello,
We've got a discussion about thread on xsf@ a couple of days ago, and I would
like to bring it here.
I initially thought that XEP-0461 (Message Replies) was redundant with
threads, except in the case where there is no thread ID in the message a user
wants to reply too. After discussion, notably with singpolyma and lovetox, it
appears that we don't have the same view on this.
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).
In case 1, the parent message needs a thread ID so that thread can continue
with the same ID. Problem is if parent message doesn't has a thread ID
(because client doesn't support thread, or because there is no thread ID for
each message), in this case a XEP-0461 "reply to" can be used, then the first
reply has a new thread ID, and the thread can continue.
In case 2, the explicitly started thread has a newly generated thread ID, so
there is no problem.
I want to support both 1 and 2. For 1, my initial reading of XEP-0201 (Best
Practices for Message Threads) was that a new thread ID should be generated
for each message:
> Unless a <message/> stanza is written in direct reply to another <message/>
> stanza, if a ThreadID is included then its value SHOULD be newly generated
> when a human user initiates a chat conversation with another user (i.e., a
> <message/> stanza of type 'chat'), starts a new conversation in the context
> of a multi-user chat environment (i.e., a <message/> stanza of type
> 'groupchat'), or sends a normal message.
XEP-0201 §3.2.
But after discussion, I realise that it's not requested to generate a new ID
each time, and it seems that generating new thread ID for each message would
be a problem for some clients (notably Cheogram which would create a thread UI
for each ID).
The solution would be to use "reply to" from XEP-0461, then a newly generated
thread ID.
I've also proposed an alternative when parent message ID could be used as
thread ID, this may we can find parent message without relying on XEP-0461.
For the moment, I think that I won't generate new thread ID for each message,
and if I create a thread from a parent message I'll use a XEP-0461 "reply to"
and generate a new thread ID, then use this thread ID for following message in
this thread.
However, I would like to have feedback from the wider community:
- how to you handle or plan to handle threads?
- Are you planning to implement case 1 (threads can be started from any
message) and/or case 2 (threads are explicitly started)?
- How would you handle case 1?
Thanks!
Best,
Goffi
Good day.
Last week, I have contacted various of projects and asked to render
messages with XMPP URI by their particular context.
Please refer to the Gemini page or see the attached file for references.
gemini://woodpeckersnest.space/~schapps/journal/2025-04-24-rendering-xmpp-uri-by-context.gmi
After communicating this information to nephele, the developer of
Renga chat client for Haiku, he has advised to standartize this
approach by adding a new attribute to XEP-0372.
Sun 27 Apr 2025 06:03:34 PM - nephele:
> The XEP 0372 as it exists now seems to almost hit what you want, maybe
> only another type is needed. for example
<reference xmlns='urn:xmpp:reference:0'
begin='72'
end='78'
type='adhoc'
uri='xmpp:nephele@xmpp.org?command'/>
Please advise.
Kind regards,
Schimon
Hi,
All these XEPs miss a paragraph how corrections should be handled correctly e.g. if the ID of the original message or of the correction should be used.
This leads already to different implementations in popular clients, none of which can be considered wrong as the XEPs do not specify a correct handling.
Regards
Philipp
Good day.
I am the developer of Slixfeed news bot.
Data Forms are extensively utilized by that bot.
I think that it would be beneficial to define IRI/URI to acess to
Ad-Hoc Commands and Data Forms.
== Ad-Hoc Commands ==
This IRI/URI would open the form "manual".
xmpp:slixfeed@xmpp.org?command=help
This IRI/URI would open the form "about".
xmpp:slixfeed@xmpp.org?command=about
== Data Forms ==
Provided that a Data Form has an identifier, this IRI/URI would open
the about dialog for the given query.
This IRI/URI would open the form "about" (same as of the example of the
Ad-Hoc Command, which can lead to the same form by explicitly define
it).
xmpp:slixfeed@xmpp.org?form=about-start
This IRI/URI would open the form "about" in the next form to form
about-start with the value "thanks".
xmpp:slixfeed@xmpp.org?form=about-result?payload=thanks
Please advise.
Kind regards,
Schimon
Greetings.
Is it possible to restrict the set of reactions (XEP-0444) to messages
which a *client* entity of type *bot* sends to private and public chat?
Regards,
Schimon
Version 0.3.1 of XEP-0455 (Service Outage Status) has been released.
Abstract:
This document defines an XMPP protocol extension that enables server
administrators to communicate issues with the server to all users in a
semantic manner.
Changelog:
Fix typo in JSON Schema. (ka)
URL: https://xmpp.org/extensions/xep-0455.html
Note: The information in the XEP list at https://xmpp.org/extensions/
is updated by a separate automated process and may be stale at the
time this email is sent. The XEP documents linked herein are up-to-
date.
Hello!
Here's my feedback on XEP-0433 Extended Channel Search:
https://xmpp.org/extensions/xep-0433.html
The feedback herein is based on two efforts:
- Adding support for XEP-0433 to Openfire (which is now reaching a
ready-ish state: https://github.com/igniterealtime/Openfire/pull/2756 )
- Adding interop tests to the Xmpp Interop Testing Framework (
https://github.com/XMPP-Interop-Testing/smack-sint-server-extensions/pull/77
)
Particularly the exercise of trying to write tests generated quite a bit of
feedback. Without having explicit MUST conditions, it is not possible to
write many assertions. This is why a lot of the feedback below suggests
making things explicit.
1. I'd like to see a MUST in 4.2 / 4.2.1 that describes that the service
to be searched MUST support the retrieval of a search form. That removes
ambiguity, I think. I prefer the clarity of the wording in the comparable
section 2.1 of XEP-0055:
https://xmpp.org/extensions/xep-0055.html#usecases-search That section
describes basically the same functionality requesting a form), but it's
more explicit.
2. Explicitly define the form type (which is now mostly in an example.
It's slightly different from Muclumbus, which can add to the confusion
(maybe a 'differences with precursor' section would be handy).
3. The XEP defines two sort keys. It would be good to explicitly define
if they are mandatory-to-implement?
4. If the sort keys are meant to be extensible, like the form fields, it
would be good to make that more explicit (perhaps with references to a
registry, like we do for other XEPs). The XEPs author mentioned in a chat
that sort keys are meant to be extensible and neither are
mandatory-to-implement. They also wrote that clients must discover support
for individual sort keys by requesting the form. No matter what detection
mechanism is used, I would like to see a MUST definition for the server to
provide this mechanism. Without it, clients can only guess.
5. Section 4.2.2 reads: "it MAY omit all fields it does not know or
where it does not change the value already supplied by the Search Service."
This implies that the Search Service will use the default value of that
field, if not supplied by the Searcher. If that's the intent, I'd also
explicitly state that, to prevent confusion. I do wonder if that can cause
weird issues. A searcher can submit the exact same search request (to
different services) but it could represent a very different query. I wonder
if that's going to cause problems at some point. The XEPs author replied
via chat: "regarding the defaulting: you're right: absent fields should be
interpreted as "client does not know them" as opposed to "use defaults"."
Let's change the XEP to reflect this.
6. Section 4.2.2 reads: "The Searcher MAY include a Result Set
Management (XEP-0059) [4] <set/>" Does this imply that the Service MUST
support RSM? If that's not the case, then I would change 'MAY' for 'may'
here. As XMPP is extensible, any entity should disregard extensions that it
doesn't recognize anyway. With that in mind, the MAY usage seems to imply
something. If that _is_ the case, then I'd prefer that to be explicitly
stated (eg: "the Service MUST support RSM"). The XEPs author replied via
chat: "yes, the service MUST support RSM. RSM is a hard dependency. (both
sides MUST support RSM in fact, but the initial query does not necessarily
need an RSM element, in which case page size etc. are defaulted by the
service)." Again, I propose to make this explicit in the XEP.
7. Question on XEP-0433 / 4.2.2.6 (conflicting fields): Would usage of
`all` combined with one of the vars that relate to `q` (like `sinname`)
also be considered conflict to which a `<conflicting-fields/>` MUST be
responded with? Is using `sinname` (and/or friends) _without_ `q` (or any
equivalent, unspecified var) also considered a conflict? The XEPs author
replied via chat: "yeah, I think `all` should conflict with all other
fields which may restrict the resultset. `sinname` without a query or
equivalent should also cause a conflict, yes." I answered: "even `all`
combined with something like `sinname=false` ? Things get tricky there :)
(and is that a MUST NOT or SHOULD NOT?) (which is increasingly annoying
when the form is pre-populated by the server, as not supplying a field does
not change the value already supplied by the Search Service. Doesn't this
mean that the server can never pre-populate `sinname` and friends, as you
can't un-populate those when you want to do a `all`?)"
8. example 10 https://xmpp.org/extensions/xep-0433.html#example-10 uses
`not-allowed` while the text defines that `bad-request` should be used.
9. Table 1 defines `sinaddress` while example 3 uses `sinaddr` -
muclumbus used `sinaddr` which makes this an easy one to get wrong, I
think. Perhaps another item for a 'differences with precursor' section.
10. The XEP has "ignoring text search terms" in a couple of places that
relate to `all`. I would remove that, as it implies that any value for `q`
could be ignored (rather than that this is a MUST conflict scenario).
11. Section 6.2 describes the 'is-open' as boolean character data. "If
set to true, it indicates that the channel can be joined without extra
credentials." In examples, the element is used like this: `<is-open/>`.
This to me seems to suggest that the element is present when the room is
open, which suggests that the element is absent when the room is not. This
does not track well with the definition, which seems to call for an
explicit 'true' or 'false' value.
12. Somewhat of a nit, but table 2 doesn't define what the direction of
the ordering is when using the address-based key. Consider making that more
explicit.
That's it, I think. Apologies for the haphazardous approach. This was
compiled in many different sittings, which made the organisation go out of
the window.
- Guus