Hi Andy,

again my comments embedded below.

Il 29/06/2026 17:50, Andy Newton ha scritto:
Hi Mario,

Thanks for this feedback. It is very helpful.

On 24-06-2026 9:00 AM, Mario Loffredo wrote:
Hi Andy,


below is some feedback on version -13 of the rdap-extensions draft:

1) The definition of "breaking changes in successors" in Section 5.4.1 uses ambiguous wording: it refers to successor/predecessor extensions "identified by the same extension identifier", but then says that a breaking successor is indistinguishable from a new unrelated extension.

I agree the usage of successor/predecessor language is not ideal. We used it in an attempt to avoid confusion with the terminology in the versioning draft. Maybe we should revisit this and differentiate between a new version of an extension using the same extension identifier and a new version using a different extension identifier.


Suggested change:

OLD

    A breaking change (also known as a backwards-incompatible change)
    occurs when a modification in a successor extension with respect to
    the predecessor extension, where each is identified by the same
    extension identifier (see Section 2.2), causes clients conforming to
    the predecessor extension to malfunction, experience degradation of
    functionality, or fail to interoperate in some other manner.

NEW

    A breaking change (also known as a backwards-incompatible change) may occur either:     1. by changing the contract associated with an existing extension identifier; or     2. by defining a successor extension with a different extension identifier.

    In the latter case, the successor relationship is not machine-readable     unless specified by the extension documentation or by a versioning mechanism.     A breaking change causes clients conforming to the predecessor extension to malfunction,     experience degradation of functionality, or fail to interoperate in some other manner.

Item 2 is about Section 5.4.3, not 5.4.1. But I can see the confusion given the terminology overlaps... that is we use "successor" both when discussing new versions of an extension using the same ID and successors that use a new extension ID. We need to differentiate between a successor that uses the same ID as the predecessor vs a successor that uses a different ID as the predecessor. Maybe "revision" vs. "replacement".



2) In Section 5.4.1, rdap-x-media-type is cited as an example of signaling for choosing an "old or new version",  but the exts_list parameter signals extension identifiers, not versions.

Suggested change:

OLD

     Whether some sort of client signaling should be supported, so that
     clients can opt for the old or new version of the extension in
     responses that they receive (see
     [I-D.ietf-regext-rdap-x-media-type] for an example of how this
     might work)

NEW

     Whether some sort of client signaling should be supported, so that
     clients can opt for the old or new version of the extension in
     responses that they receive (see [I-D.ietf-regext-rdap-x-media-type]
     for signaling support for distinct extension identifiers,
     and [I-D.ietf-regext-rdap-versioning] for signaling specific versions of an extension)

This highlights the issue that the versioning draft is going beyond the scope of versioning and doing client signaling.

[ML] Can you please explain why the versioning draft is going beyond the scope of versioning ?




In parallel, Section 2 of the rdap-x-media-type should be updated as follows:

OLD

    The RDAP media type, "application/rdap+json", may have an optional
    parameter named "exts_list". This parameter is a whitespace-separated
    list of RDAP extension identifiers (as would be found in the
    "rdapConformance" array).

NEW

    The RDAP media type, "application/rdap+json", may have an optional
    parameter named "exts_list".
    The "exts_list" parameter is a whitespace-separated list of RDAP
    conformance identifiers and/or RDAP extension version identifiers.
    An RDAP conformance identifier is a value that can appear in the
    "rdapConformance" array, including base RDAP conformance identifiers
    such as "rdap_level_0" and RDAP extension identifiers.
    An RDAP extension version identifier is an identifier that adds the version information to an RDAP extension identifier,
    such as the one defined by [I-D.ietf-regext-rdap-versioning].

Using the proposal put forward by Pawel, there is no need to express a version identifier:
https://mailarchive.ietf.org/arch/msg/regext/sN-ar484f9n5YgXkTauq7CE6xMk/


This update would also fix the inconsistency where rdap-x-media-type claims that exts_list is a list of "RDAP extension identifiers", but its examples and text include rdap_level_0, which is not an extension identifier.

Thanks. The presence of the rdap_level_0 identifier needs to be stated.



3) In Section 5.4.5, the draft says that clients ignore "JSON names and query parameters"; however, query parameters are request-side elements, and it is normally the server that ignores unknown query parameters.


Suggested change:

OLD

    Because RDAP clients ignore unrecognized JSON names and query parameters...

NEW

    Because RDAP clients ignore unrecognized JSON names, and RDAP servers ignore unrecognized query parameters...

Agreed.



4) Section 5.4.2 lists the following as non-breaking:

  - new referrals;
  - new JSON members;
  - new URL paths;
  - new query parameters.

This is generally correct, but for query parameters it would be useful to specify that they are non-breaking only if they are optional and if servers continue to operate correctly when those parameters are absent.

Suggested clarification:

   New optional query parameters are non-breaking. Requiring clients to send    a new query parameter for behavior previously available without it is a breaking change.

Agreed, though I think it is safe to say "new optional query parameters".


5) In section 7.1.1, the draft says that the new "Deprecation Date" field should use the format specified by RFC 3339, but then asks for the deprecation date of both icann_rdap_response_profile_0 and icann_rdap_technical_implementation_guide_0 to be registered as:

    20250821

20250821 doesn't seem to be canonical RFC 3339 format (see the ABNF rule: full-date = date-fullyear "-" date-month "-" date-mday)
An RFC 3339 date should be:

    2025-08-21

or, if a date-time is needed:

    2025-08-21T00:00:00Z


Suggested change:

Replace 20250821 with 2025-08-21, if the field is intended to be a full-date

Good catch.



6) This is a general consideration.

The draft treats the breaking changes as if they always require extension-wide management, whereas in REST/API practice many breaking changes can be reframed as additive, localized changes, according to the "Expand and Contract" pattern.

Many changes listed as breaking in Section 5.4.1 can often be recast as non-breaking additive changes of the kind listed in Section 5.4.2.

For example, instead of changing the type or semantics of an existing JSON member, an extension can keep the existing member unchanged and add a new member in the same namespace. Old clients continue to use the old member and ignore the new one; new clients can migrate to the new member; the old member can later be deprecated and eventually removed. This pattern limits the scope of the migration to the affected feature or protocol element, rather than requiring a successor extension for the entire extension. It is also consistent with common REST API evolution practice.

In other words, breaking changes should first be "reduced" to non-breaking changes whenever possible; only non-reducible breaking changes should require a successor extension.

We can certainly give the advice explicitly to attempt non-breaking changes before resorting to breaking changes.

[ML] Good. But what would be the suggested mechanism for signaling a non-breaking change ?

Per Section 5.4.5, the versioning extension is mentioned as an example of a mechanism that allows clients to recognize a non-breaking change. Correct?


Additional suggested change:

Section 5.4.1

OLD

Removing a required protocol element from a response;

NEW

Removing a required protocol element from a response that has not yet been 
fully deprecated;


Best,

Mario


-andy

_______________________________________________
regext mailing list -- [email protected]
To unsubscribe send an email to [email protected]

--
Dott. Mario Loffredo
Senior Technologist
Technological Unit “Digital Innovation”
Institute of Informatics and Telematics (IIT)
National Research Council (CNR)
Address: Via G. Moruzzi 1, I-56124 PISA, Italy
Phone: +39.0503153497
Web:http://www.iit.cnr.it/mario.loffredo
_______________________________________________
regext mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to