R2-07 Surgical pure-adds (arch-review round 2) #436

Closed
dohertj2 wants to merge 0 commits from r2/07-surgical-pure-adds into master
Owner

Round-2 arch-review plan R2-07 (finding 03/P1 — surgical in-place address-space adds/removals instead of full rebuilds; gated by the U2 forwarding guard).

  • Phase 1 (adds): new pure AddressSpaceChangeClassifier (default-closed Rebuild); AddressSpaceApplier.Apply routes PureAdd/AttributeOnly to skip RebuildAddressSpace; adds announced via existing guard-covered RaiseNodesAddedModelChange, gated on !outcome.RebuildCalled; MaterialiseAlarmCondition idempotent. Zero new sink members in Phase 1.
  • Phase 2 (removes): 3 new ISurgicalAddressSpaceSink members (RemoveVariableNode/RemoveAlarmConditionNode/RemoveEquipmentSubtree) — guard-first with observed negative control, DeferredAddressSpaceSink forwards (F10b inertness net), OtOpcUaNodeManager scoped in-place teardown; PureRemove arm writes terminal Bad/RemovedConditionState, false/throw ⇒ full-rebuild ratchet.
  • Phase 3 (mixed): AddRemoveMix runs remove pass then adds; id-reuse recreate covered.

11 tasks done; T5/T6/T12/T14 deferred-live — the over-the-wire SubscriptionSurvivalTests + docker-dev gates are the F10b inertness nets, MUST run in the serial heavy pass. Build clean; OpcUaServer.Tests 336/336, Runtime.Tests 398/398, Commons.Tests 122/122 (incl. forwarding guard green). Plan: archreview/plans/R2-07-surgical-pure-adds-plan.md.

Round-2 arch-review plan **R2-07** (finding 03/P1 — surgical in-place address-space adds/removals instead of full rebuilds; gated by the U2 forwarding guard). - **Phase 1 (adds):** new pure `AddressSpaceChangeClassifier` (default-closed Rebuild); `AddressSpaceApplier.Apply` routes PureAdd/AttributeOnly to skip `RebuildAddressSpace`; adds announced via existing guard-covered `RaiseNodesAddedModelChange`, gated on `!outcome.RebuildCalled`; `MaterialiseAlarmCondition` idempotent. **Zero new sink members in Phase 1.** - **Phase 2 (removes):** 3 new `ISurgicalAddressSpaceSink` members (RemoveVariableNode/RemoveAlarmConditionNode/RemoveEquipmentSubtree) — **guard-first with observed negative control**, `DeferredAddressSpaceSink` forwards (F10b inertness net), `OtOpcUaNodeManager` scoped in-place teardown; PureRemove arm writes terminal Bad/RemovedConditionState, false/throw ⇒ full-rebuild ratchet. - **Phase 3 (mixed):** AddRemoveMix runs remove pass then adds; id-reuse recreate covered. 11 tasks done; **T5/T6/T12/T14 deferred-live** — the over-the-wire SubscriptionSurvivalTests + docker-dev gates are the F10b inertness nets, MUST run in the serial heavy pass. Build clean; OpcUaServer.Tests 336/336, Runtime.Tests 398/398, Commons.Tests 122/122 (incl. forwarding guard green). Plan: `archreview/plans/R2-07-surgical-pure-adds-plan.md`.
dohertj2 added 15 commits 2026-07-13 12:26:26 -04:00
test+docs: mixed-deploy survival, STATUS/P1 close-out (R2-07 T14)
v2-ci / build (pull_request) Successful in 4m3s
v2-ci / unit-tests (pull_request) Failing after 9m47s
ded0595ca7
Author
Owner

Landed on master via merge commit 04fa2f5c (local --no-ff merge). Auto-merged OtOpcUaNodeManager.cs against R2-08; verified OpcUaServer.Tests 341/341 + F10b forwarding guard 3/3 + clean build. T5/T6/T12/T14 (over-the-wire SubscriptionSurvivalTests + docker-dev surgical /run) are must-run F10b nets in the serial heavy pass. Closing as merged.

Landed on `master` via merge commit `04fa2f5c` (local --no-ff merge). Auto-merged OtOpcUaNodeManager.cs against R2-08; verified OpcUaServer.Tests 341/341 + F10b forwarding guard 3/3 + clean build. T5/T6/T12/T14 (over-the-wire SubscriptionSurvivalTests + docker-dev surgical /run) are must-run F10b nets in the serial heavy pass. Closing as merged.
dohertj2 closed this pull request 2026-07-13 12:28:02 -04:00
Some checks are pending
v2-ci / build (pull_request) Successful in 4m3s
v2-ci / unit-tests (pull_request) Failing after 9m47s

Pull request closed

Sign in to join this conversation.