Ballot for draft-ietf-netmod-yang-semver

Discuss

Christopher Inacio
Éric Vyncke
Roman Danyliw

Yes

Mohamed Boucadair

No Objection

Andy Newton
Charles Eckel
Deb Cooley
Gorry Fairhurst
Gunter Van de Velde
Jim Guichard
Ketan Talaulikar
Mike Bishop
Tommy Jensen

Recuse

Mahesh Jethanandani

Summary: Has 3 DISCUSSes. Has enough positions to pass once DISCUSS positions are resolved.

Christopher Inacio
Discuss
Discuss (2026-06-03) Sent
Thank you to the editors/authors for the very interesting versioning document.  It exposes, yet again, how hard versioning is.

(Just a quick note on the comments themselves, the `####` indicate the section of the document for the comment(s); it makes a lot more sense in my markdown tool that I use to write the notes during review.)

#### 4.4

In section 4.4 that `_COMPAT` tag, once applied cannot be removed.  But there is not clause refining that statement; I believe this is the pertinent line in the draft text:
```
The modifier can change from "_compatible" to "_non_compatible" in a subsequent version, but the modifier MUST NOT change from "_non_compatible" to "_compatible" and MUST NOT be removed.
```
Does this mean that if I have version `2.3.2_compatible` that I release 3.0, that it has to be `3.0.0_compatible`?  Does that make sense?  Or by virtue of understanding the major release number in SemVer (and YANG Semver) that 3.0 is incompatible, and therefore it must be `3.0.0_non_compatible`?  I’m not sure if that is what is intended.  (this could possibly be related to defining the different components of the version number as “Major Version”, for example, but talking about compatible/non-compatible in terms of “revision”.

This text, which I believe isn’t sufficiently clear, doesn’t align with the example given in 4.4.2.

#### 4.4.2

* why doesn’t version ‘0.2.0’ have a `_non_compatible` suffix attached?  Does that not violate 4.4?
* Also, I see no reason the rule as stated in 4.4 with regards to ‘_COMPAT’ would not compel ‘1.0.0’ to have ‘_non_compatible’ attached; even though I expect this is not what is intended.

#### 4.5

* Rule 2: Can you clarify what the “backward-compatible” means and against what it should be measured for this rule?  (Major revison?  This means you have taken away a functionality present in X.0.0? (renamed, removed, etc.))
* Rule 4: This conflicts with the `MUST` in 4.4 - please resolve.
* I don’t know what this statement means, but it includes a ‘MUST’:
  ```
  If a revision entry in a module's revision history includes the "rev:non-backwards-compatible" statement then that MUST be reflected in any YANG semantic version associated with that revision.
  ```
  reflected how?  With a ‘_COMPAT’ statement? But only for changes that aren’t MAJOR Version?

#### 6.1.2.1

Who is the target of the “MUST” to retroactively apply YANG Semver to existing modules?  That’s not a process or protocol MUST, but an IANA MUST?
Comment (2026-06-03) Sent
Thanks to Joel H. for the GENART review.  Thanks to Lou B. for the shepherd write up, it was insightful for the WG discussions.

(My apologies to all in that I put this review in on the wrong versioning draft originally.  yikes.  8-o )

#### 4.4.2

* I will note that in 4.4.2 you use `NBC` and `BC`.  NBC *is* defined in the Introduction as “non-backwards-compatible (NBC)”; there is no such definition of BC, which I would presume is “backwards-compatible”.  Might be good if the the reader didn’t have to presume.
* This example produces a good example of a question that I’ve been having: what information does `_compatible` convey?  It patch version is assumed to be compatible unless marked `_non_compatible` right?  I don’t believe it conveys any additional information in the naming of a release.

#### 4.4.3

* This section should get mentioned in the definition of ‘_COMPAT’ in 4.4. e.g. 
``` The _COMPAT modifier applies to versions within a MAJOR Version and indicates that a release in X.Y.Z marked with ‘_non_compatible’ indicates that the release is incompatible with first release of X, notionaly X.0.0.  At every MAJOR release, the '_COMPAT' modifier MUST be removed.```
* Is my understanding of what this section indicates as the following correct?
```
Because of branching and its limitations to express compatibility, fundamentally, any release in X.?.? will have all capabilities and interfaces from X.0.0; but incompatibilities may still exist between available compatibilities in X.a.? and X.b.? where 'a' and 'b' may have different functional *additions* to X.0.0.
```

#### 4.5

* What are the exceptions to the ‘SHOULD’ in rule 1?
* Why are there *5* rules in a section desribing the *four* rules?  Maybe rule 5 should be a statement before the 4 rules?

#### 4.6

* I don’t entirely know how to read the example (also, not a YANG expert) but I will note that it appears to me to document the future.  It is version 1.1, but knows that 1.2.2 will be incompatible.

#### 5.2

Rules 1 & 2 aren’t needed are they?  Also, specifying X.Y.Z with Z being anything other than ‘0’ is also pointless because of rule 3, right?  Unless those rules rules, as listed, are in priority order.
Éric Vyncke
Discuss
Discuss (2026-06-02) Sent
# Éric Vyncke INT AD comments for draft-ietf-netmod-yang-semver-26
CC @evyncke

Thank you for the work put into this document.

Please find below some blocking DISCUSS points (easy to address), some non-blocking COMMENT points/nits (replies would be appreciated even if only for my own education).

Special thanks to Lou Berger for the shepherd's detailed write-up including the WG consensus and the justification of the intended status and the large number of authors.

I hope that this review helps to improve the document,

Regards,

-éric

Note: this ballot comments follow the Markdown syntax of https://github.com/mnot/ietf-comments/tree/main, i.e., they can be processed by a tool to create github issues.

## DISCUSS (blocking)

As noted in https://datatracker.ietf.org/doc/statement-iesg-handling-ballot-positions-20220121/, a DISCUSS ballot is a request to have a discussion on the points below; I really think that the document would be improved with a change here, but can be convinced otherwise.

### Section 4.5

In rule #1, the first "SHOULD" has a "unless", but why is the 2nd one not a "MUST" in `in which case the artifact version "X.Y.Z+1_non_compatible" SHOULD be used instead` ?

I am unable to fully understand the rule #2.i `unless that version has already been used for this artifact but with different content, when the artifact version SHOULD be updated ` (which also has a SHOULD without the required IESG guidance per https://datatracker.ietf.org/doc/statement-iesg-statement-on-clarifying-the-use-of-bcp-14-key-words/ ) The part that I do not understand is the use of "when" in the sentence.

There are also too many "SHOULD" without any guidance, i.e., why not using "MUST" then ?

### Section 6

Why not a "MUST" in `SHOULD begin with a 0` ?
Comment (2026-06-02) Sent
## COMMENTS (non-blocking)

### Section 4.5

`The following four rules specify` is actually followed by 5 rules ;-)

### Section 4.6

Suggest to add a graphical representation (e.g., the trees used in the beginning of this I-D).
Roman Danyliw
Discuss
Discuss (2026-06-03) Sent
** Section 12.2
   In addition to following the rules specified in the IANA
   Considerations section of [I-D.ietf-netmod-yang-module-versioning],
   IANA maintained YANG modules and submodules MUST also include a YANG
   Semver version identifier for all new revisions, as defined in
   Section 4.

   The YANG Semver version associated with the new revision MUST follow
   the rules defined in Section 4.5.
   Note: For IANA maintained YANG modules and submodules that have
   already been published, versions MUST be retroactively applied to all
   existing revisions when the next new revision is created, starting at
   version "1.0.0" for the initial published revision, and then
   incrementing according to the YANG Semver rules specified in
   Section 4.5.

Please do not use BCP14 keywords in IANA considerations text.  See https://datatracker.ietf.org/doc/statement-iesg-statement-on-clarifying-the-use-of-bcp-14-key-words/
Comment (2026-06-03) Sent
Thank you to Gyan Mishra for the GENART review.

** Section 6.1
  As IETF modules are not
   expected to require branching in their revision history, the
   '_COMPAT' modifier SHOULD NOT be used in IETF published modules.

Unqualified “SHOULD NOT”.  When is it acceptable to use ‘_COMPAT’ modifier?
Mohamed Boucadair
Yes
Andy Newton
No Objection
Charles Eckel
No Objection
Comment (2026-06-02) Not sent
Thanks to Marc Blanchet for the ARTART review.
Great to see this work finally making it to the finish line.
Deb Cooley
No Objection
Comment (2026-06-02) Sent
Thanks to David Mandelberg for their secdir review.  Also thanks to Tony Li for their opsdir review.

Section 2:  I think what the authors call 'branched revision history' of Yang modules, is what I would refer to a fork in code/s/w development.  It doesn't often go well for s/w development, but maybe Yang modules are different.  I certainly don't know enough about how Yang is actually used to tell.

Section 4.3:  The addition of the _COMPAT to the end of the version number seems to make this super complicated, especially when you add what is documented in draft-ietf-netmod-yang-module-versioning with its NBC and BC terminology.

Section 11, para 2:  draft-ietf-tls-8446bis is in AUTH 48, it might make sense to use that vice RFC8446.
Gorry Fairhurst
No Objection
Comment (2026-05-25) Not sent
Thank you for the work that has been put into this document. I do not see any transport-protocol related concerns.
Gorry
Gunter Van de Velde
No Objection
Jim Guichard
No Objection
Ketan Talaulikar
No Objection
Comment (2026-06-01) Not sent
Thanks to the authors and the WG for this important work to handle this very fundamental challenge in maintenance of YANG modules.
Mike Bishop
(was Discuss) No Objection
Comment (2026-06-05) Sent
# IESG review of draft-ietf-netmod-yang-semver-26

CC @MikeBishop

## Comments

### Previous DISCUSS

Thank you for the discussion about the intended uses of this; my original DISCUSS was based on a few misunderstandings. Notably, I missed this restriction:

> There MUST NOT be multiple versions of a YANG artifact that have the same
> MAJOR, MINOR and PATCH version numbers, but different patch modifier strings.
> E.g., artifact version "1.2.3_non_compatible" MUST NOT be defined if artifact
> version "1.2.3" has already been defined.

...and its implication that all versions are minted by (or at least coordinated with) the same source.

While I still think that the inability to identify which version is the parent of another version will cause confusion, my preference for a different approach is not DISCUSS-worthy.

### Section 4.3, paragraph 4

"MUST only" is potentially ambiguous. Does it mean "MUST be present if COMPAT is
present and MUST NOT be present otherwise? If so, consider a single optional element
that MUST begin with the character '_' as a cleaner way to express this.

### Section 4.4, paragraph 12

What does one do with "can indicate" here? Either it indicates this, or
it indicates many things including this. If many things, what is the scope
of things it indicates?

### Section 4.4.3, paragraph 4
```
     software development.  It is recommended to avoid only incrementing
     the PATCH digit on the main branch of YANG modules.  See Appendix B
     Scenario 2 for an illustration and explanation.
```
This says that changes on the main branch should alter more than the PATCH
number, but your example seems to argue for the exact opposite. Should this
instead say "It is recommended that only the main branch of YANG modules
increment the PATCH number"? Or am I misunderstanding?

### Section 5.2, paragraph 15

For the reasons stated here, I'm slightly surprised there's not a
corresponding max-version, in case there's a breaking change which the current
module doesn't yet support.

### Section 6.1.2.1, paragraph 1
```
     For example, if a module or submodule started out in the pre-NMDA
     ([RFC8342] ) world, and then had NMDA support added without removing
     any legacy "state" branches -- and you are looking to add additional
     new features -- a sensible choice for the target YANG Semver would be
     1.2.0 (since 1.0.0 would have been the initial, pre-NMDA release, and
     1.1.0 would have been the NMDA revision).
```
This can probably be reworded to remove the "world" terminology and the use of
the second-person.

### Too many authors

The document has six authors, which exceeds the recommended author limit. Has
the sponsoring AD agreed that this is appropriate?

## Nits

All comments below are about very minor potential issues that you may choose to
address in some way - or ignore - as you see fit. Some were flagged by
automated tools (via https://github.com/larseggert/ietf-reviewtool), so there
will likely be some false positives. There is no need to let me know what you
did with these suggestions.

### Typos

#### Section 1, paragraph 1
```
-    [I-D.ietf-netmod-yang-module-versioning] puts forth new concepts
-                                                       -------------
-    relating to modified rules for updating YANG modules and submodules,
-   ------------
```

#### Section 1, paragraph 2
```
-    The goal being to add a human readable version identifier that
-      --------- ^^^^^            ^
+    This adds a human-readable version identifier that
+       ^    +        ^
```

### Outdated references

Document references `draft-clacla-netmod-yang-model-update-06`, but `-26` is
the latest available revision.

### Grammar/style

#### Section 4.4.1, paragraph 1
```
 the versions could look like, from oldest version to newest: 0.1.0 - first p
                                    ^^^^^^
```
A determiner may be missing.

#### Section 4.6.2, paragraph 2
```
s section and the IETF-specific sub-section below provide YANG Semver-specif
                                ^^^^^^^^^^^
```
This word is normally spelled as one.
Tommy Jensen
No Objection
Mahesh Jethanandani
(was Yes) Recuse
Comment (2026-05-28) Not sent
I was on the design team for this set of drafts at one time; therefore, I am recusing myself.