Ballot for draft-ietf-netmod-yang-semver
Discuss
Yes
No Objection
Recuse
Summary: Has 3 DISCUSSes. Has enough positions to pass once DISCUSS positions are resolved.
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?
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 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` ?
## 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).
** 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/
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?
Thanks to Marc Blanchet for the ARTART review. Great to see this work finally making it to the finish line.
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.
Thank you for the work that has been put into this document. I do not see any transport-protocol related concerns. Gorry
Thanks to the authors and the WG for this important work to handle this very fundamental challenge in maintenance of YANG modules.
# 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.
I was on the design team for this set of drafts at one time; therefore, I am recusing myself.