Early Review of draft-ietf-netconf-notif-envelope-05
review-ietf-netconf-notif-envelope-05-yangdoctors-early-aries-2026-07-09-00
| Request | Review of | draft-ietf-netconf-notif-envelope |
|---|---|---|
| Requested revision | No specific revision (document currently at 05) | |
| Type | Early Review | |
| Team | YANG Doctors (yangdoctors) | |
| Deadline | 2026-06-29 | |
| Requested | 2025-09-11 | |
| Requested by | Mithun Thai Valaphil | |
| Authors | Alex Huang Feng , Pierre Francois , Thomas Graf , Benoît Claise | |
| I-D last updated | 2026-07-21 (Latest revision 2026-05-18) | |
| Completed reviews |
Yangdoctors Early review of -02
by Jürgen Schönwälder
(diff)
Yangdoctors Early review of -05 by Ebben Aries Opsdir Early review of -03 by Joe Clarke (diff) |
|
| Comments |
This document is currently in WGLC. |
|
| Assignment | Reviewer | Ebben Aries |
| State | Completed | |
| Request | Early review on draft-ietf-netconf-notif-envelope by YANG Doctors Assigned | |
| Posted at | https://mailarchive.ietf.org/arch/msg/yang-doctors/9S011rUTNor9TDNfiHClqhq7Q9o | |
| Reviewed revision | 05 | |
| Result | Almost ready | |
| Completed | 2026-07-09 |
review-ietf-netconf-notif-envelope-05-yangdoctors-early-aries-2026-07-09-00
2 modules in this draft:
- ietf-yp-notification@2026-05-11.yang
- ietf-yp-observation@2026-05-11.yang
YANG compiler errors or warnings (pyang 2.7.1, yanglint 5.8.6)
- Both primary modules compile clean under pyang --ietf --strict and yanglint
with no errors or warnings.
- The companion example module (example-foo-extension.yang) compiles clean now
under yanglint 5.8.6. The prior -02 review noted a libyang error on this
module (augment extension target not found) - that has been resolved in a
newer libyang release and is addressed. pyang --ietf --strict still flags
the module with:
example-foo-extension.yang:27: error: node ietf-yp-notification::envelope of
type ('ietf-yang-structure-ext', 'structure') cannot be target node
This appears rather a pyang tooling gap in RFC8791 (sx:augment-structure)
support
- Unrelated to these modules specifically but just to note that a dependency
module fails `pyang --ietf`
yang/ietf-subscribed-notifications@2019-09-09.yang:222: error: keyword
"if-feature" not in canonical order (see RFC 7950, Section 14)
yang/ietf-subscribed-notifications@2019-09-09.yang:276: error: keyword
"if-feature" not in canonical order (see RFC 7950, Section 14)
yang/ietf-subscribed-notifications@2019-09-09.yang:335: error: keyword
"if-feature" not in canonical order (see RFC 7950, Section 14)
yang/ietf-subscribed-notifications@2019-09-09.yang:344: error: keyword
"if-feature" not in canonical order (see RFC 7950, Section 14)
Prior Review Status
--------------------
The following items from Juergen's -02 YANG Doctors review are now addressed in
-05:
- RFC3339 citation in the event-time description: removed, addressed
- RFC1213 reference in the hostname description: removed, addressed
- Inconsistent RFC title strings across reference statements: resolved, all
references now consistently use "RFC XXXX: Extensible YANG Model for YANG-Push
Notifications"
The following items from the Joe's -03 OpsDir review are addressed in -05:
- Per-subscription vs. network-wide control rationale: Section 4 now includes an
explanation of the design decision, addressed
- enable-notification-envelope description omitting subscription-termination
behavior: the leaf description now includes termination behavior and uses MUST
language, addressed
- Typo "messsage" in Section 1.1: no longer present, addressed
General Comments
--------------------
This is a follow-up review against draft-05. The modules are in good shape and
the majority of prior review comments have been resolved. The remaining issues
below are largely nits and minor inconsistencies, with one functional concern
regarding the optionality of the `contents` anydata node that should be resolved
before publication.
YANG Module - ietf-yp-notification
--------------------
- (Nit) L#57: (module description): "encoded as defined in RFCXXX." is
inconsistent with all other RFC placeholder occurrences in this file using
"RFC XXXX".
- L#162: The `contents` anydata node within the sx:structure envelope is
optional (no `mandatory` statement), yet Sections 3.1.2.1 and 3.1.2.2 of the
draft both state "Two mandatory child nodes within the 'envelope' container
are expected, representing the event time and the Notification payload."
- L#190: The `metadata` container added by `augment "/sn:subscriptions"` is
empty with no children defined in this module. RFC8407 section 4.14.1 states
that use of non-presence containers SHOULD be considered carefully. An empty
container used purely as an extension anchor is unusual - the description of
the container itself should likely make the intent explicit, e.g. "This
container is intended to be augmented by modules defining optional
notification metadata extensions."
- No data node in this module carries a `reference` statement. Per RFC8407
section 4.14, if the data definition semantics are defined in an external
document then a `reference` statement MUST be present. This applies to all
nodes: `envelope` (L#106), `metadata` (L#115), `hostname-sequence-number`
(L#119), `event-time` (L#136), `hostname` (L#143), `sequence-number` (L#151),
`contents` (L#162), `enable-notification-envelope` (L#174), `metadata`
(L#190), and `notification-metadata` (L#204). Several of these embed "Refer
to Section 4 of RFC XXXX for more details." directly in the description (e.g.
L#188, L#193) - that normative pointer belongs in a `reference` substatement,
not the `description`.
- (Nit) L#178: The description of `enable-notification-envelope` wraps
continuation lines flush with the opening quote rather than one space past it,
as used consistently elsewhere in the module. This causes line breaks to fall
mid-phrase (e.g. "notification-envelope / defined in RFC XXXX", "using / the
header configured", "Refer to / Section 4"), making the text read as dangling
fragments.
YANG Module - ietf-yp-observation
--------------------
- L#33: (contact): The WG Web URL is malformed and stale:
<http:/tools.ietf.org/wg/netconf/>
This has a single slash after the colon and uses plain HTTP. Update to match
ietf-yp-notification:
<https://datatracker.ietf.org/group/netconf/>
- L#132: The `yang-push-observation-time-supported` leaf description reads:
"If set to true, publisher supports. If set to false, the
observation-timestamp is not supported."
The first sentence appears grammatically incomplete. Suggest:
"If set to true, the publisher supports the observation-timestamp and
point-in-time in notifications. If set to false, these are not supported."
- L#74, L#79: The `timestamp` and `point-in-time` nodes in the
`yang-push-observation` grouping carry no `reference` statement. Per RFC8407
section 4.14, a `reference` statement MUST be present when the semantics are
defined in an external document. Notably
`yang-push-observation-time-supported` (L#126) does carry a `reference`,
making the omission on the grouping nodes inconsistent.
- (Nit) L#110, L#117: The augment statements reference the grouping with a
self-prefix (`uses iypo:yang-push-observation;`). Per RFC7950 section 5.4,
the module prefix is not required when referencing a grouping defined in the
same module. Suggest `uses yang-push-observation;`.
Example validated instance data:
<subscriptions
xmlns="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications">
<enable-notification-envelope
xmlns="urn:ietf:params:xml:ns:yang:ietf-yp-notification">true</enable-notification-envelope>
</subscriptions>
<system-capabilities
xmlns="urn:ietf:params:xml:ns:yang:ietf-system-capabilities">
<subscription-capabilities
xmlns="urn:ietf:params:xml:ns:yang:ietf-notification-capabilities">
<notification-metadata
xmlns="urn:ietf:params:xml:ns:yang:ietf-yp-notification">
<envelope>true</envelope>
<metadata>
<hostname-sequence-number>true</hostname-sequence-number>
</metadata>
</notification-metadata>
<yang-push-observation-time-supported
xmlns="urn:ietf:params:xml:ns:yang:ietf-yp-observation">true</yang-push-observation-time-supported>
</subscription-capabilities>
</system-capabilities>
<envelope xmlns="urn:ietf:params:xml:ns:yang:ietf-yp-notification">
<event-time>2026-06-24T10:00:00Z</event-time>
<hostname>router.example.com</hostname>
<sequence-number>42</sequence-number>
<contents>
<push-update xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-push">
<id>101</id>
<timestamp
xmlns="urn:ietf:params:xml:ns:yang:ietf-yp-observation">2026-06-24T09:59:55Z</timestamp>
<point-in-time
xmlns="urn:ietf:params:xml:ns:yang:ietf-yp-observation">current-accounting</point-in-time>
<datastore-contents>
<interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
<interface>
<name>eth0</name>
<admin-status>up</admin-status>
<oper-status>up</oper-status>
<type
xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:ethernetCsmacd</type>
</interface>
</interfaces>
</datastore-contents>
</push-update>
</contents>
</envelope>
<push-update xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-push">
<id>101</id>
<datastore-contents>
<interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
<interface>
<name>eth0</name>
<admin-status>up</admin-status>
<oper-status>up</oper-status>
<type
xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:ethernetCsmacd</type>
</interface>
</interfaces>
</datastore-contents>
<timestamp
xmlns="urn:ietf:params:xml:ns:yang:ietf-yp-observation">2026-06-24T09:59:55Z</timestamp>
<point-in-time
xmlns="urn:ietf:params:xml:ns:yang:ietf-yp-observation">current-accounting</point-in-time>
</push-update>
<push-change-update xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-push">
<id>102</id>
<datastore-changes>
<yang-patch>
<patch-id>patch-1</patch-id>
<edit>
<edit-id>1</edit-id>
<operation>replace</operation>
<target>/ietf-interfaces:interfaces/interface[name='eth0']/oper-status</target>
<value>
<oper-status
xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">down</oper-status>
</value>
</edit>
</yang-patch>
</datastore-changes>
<timestamp
xmlns="urn:ietf:params:xml:ns:yang:ietf-yp-observation">2026-06-24T10:00:01Z</timestamp>
<point-in-time
xmlns="urn:ietf:params:xml:ns:yang:ietf-yp-observation">state-changed</point-in-time>
</push-change-update>