Surgical deploys: announce surgically-added raw nodes + r3 item-6 residuals #599

Closed
opened 2026-10-08 02:31:10 -04:00 by dohertj2 · 1 comment
Owner

AnnounceAddedNodes always raises NodeAdded in the Uns realm, so raw containers/tags added by a surgical deploy are materialised but never announced — model-aware clients can't discover them until they re-browse. The code comment calls it "a real follow-up, not an accepted limitation". Round-3 tranche 2 is unplanned.
Sources: CLAUDE.md (surgical deploys "Known gap"); src/Server/ZB.MOM.WW.OtOpcUa.Runtime/OpcUa/OpcUaPublishActor.cs:595-604; AddressSpaceApplier.cs:572-579; archreview/00-OVERALL.md:117 (01/U-8, 03/P5/P6/S20/U11/U12).

  • Realm-aware announce (raw parent → RaiseNodesAddedModelChange(id, Raw)) + test
  • NotSubsumed filter on the UNS-reference remove loop; sever inverse Organizes (03/P5/S20)
  • Reflection guard keeping every Backing* field in parity with the raw tag's inherited fields

Filed 2026-10-08 by the pending/deferred-work sweep after the #562–#591 issue sweep.

`AnnounceAddedNodes` always raises `NodeAdded` in the Uns realm, so raw containers/tags added by a surgical deploy are materialised but never announced — model-aware clients can't discover them until they re-browse. The code comment calls it "a real follow-up, not an accepted limitation". Round-3 tranche 2 is unplanned. Sources: CLAUDE.md (surgical deploys "Known gap"); src/Server/ZB.MOM.WW.OtOpcUa.Runtime/OpcUa/OpcUaPublishActor.cs:595-604; AddressSpaceApplier.cs:572-579; archreview/00-OVERALL.md:117 (01/U-8, 03/P5/P6/S20/U11/U12). - [ ] Realm-aware announce (raw parent → `RaiseNodesAddedModelChange(id, Raw)`) + test - [ ] `NotSubsumed` filter on the UNS-reference remove loop; sever inverse `Organizes` (03/P5/S20) - [ ] Reflection guard keeping every `Backing*` field in parity with the raw tag's inherited fields _Filed 2026-10-08 by the pending/deferred-work sweep after the #562–#591 issue sweep._
Author
Owner

Resolved on master (0bd3ec00, bd638106; merge ca0f1e77).

  • Realm-aware announce: AnnounceAddedNodes now also raises NodeAdded in the Raw realm for the existing parents of added raw containers/tags (ComputeRawAddAnnouncements); tests in AddressSpaceApplierTests.
  • Inverse Organizes edges are severed on equipment-subtree removal (03/S20, in the node manager, NodeManagerSurgicalRemoveTests). Ruling on the NotSubsumed filter: not used, because in production a UNS reference NodeId (Area/Line/Equipment/Name) lies outside the subtree's id-prefix scope, so filtering would leak it. Instead ApplyPureRemove removes the UNS reference variables before the equipment subtree, so a reference inside the subtree's scope no longer ratchets to a full rebuild (03/P5).
  • UnsReferenceBackingParityTests: reflection guard that finds the classifier's surgical raw-tag whitelist and requires a same-typed Backing* mirror field.
  • docs/Raw.md updated; the CLAUDE.md "Known gap" is closed.

Closed 2026-10-08 by the hardware-available issue sweep (master d898262c).

Resolved on master (0bd3ec00, bd638106; merge ca0f1e77). - [x] Realm-aware announce: `AnnounceAddedNodes` now also raises NodeAdded in the Raw realm for the existing parents of added raw containers/tags (`ComputeRawAddAnnouncements`); tests in AddressSpaceApplierTests. - [x] Inverse Organizes edges are severed on equipment-subtree removal (03/S20, in the node manager, `NodeManagerSurgicalRemoveTests`). Ruling on the NotSubsumed filter: **not used**, because in production a UNS reference NodeId (`Area/Line/Equipment/Name`) lies outside the subtree's id-prefix scope, so filtering would leak it. Instead `ApplyPureRemove` removes the UNS reference variables before the equipment subtree, so a reference inside the subtree's scope no longer ratchets to a full rebuild (03/P5). - [x] `UnsReferenceBackingParityTests`: reflection guard that finds the classifier's surgical raw-tag whitelist and requires a same-typed Backing* mirror field. - docs/Raw.md updated; the CLAUDE.md "Known gap" is closed. *Closed 2026-10-08 by the hardware-available issue sweep (master d898262c).*
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dohertj2/lmxopcua#599