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