DRAFT: Add native events and distinct Resource versions to OPC UA binding working draft - #568
Draft
marcschier wants to merge 6 commits into
Draft
DRAFT: Add native events and distinct Resource versions to OPC UA binding working draft#568marcschier wants to merge 6 commits into
marcschier wants to merge 6 commits into
Conversation
Define the native OPC UA event type mapping, interaction semantics, notifier topology, subscriptions, filtering, and optional conformance units for the xRegistry Events working draft. Signed-off-by: Marc Schier <marcschier@hotmail.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 5c79a1ed-6dab-4522-a9fc-6548caa78ad5
Document the normative errata applied to the xRegistry Events draft, define observable interaction boundaries for domain methods, Writes and FileTransfer, and constrain notifier delivery guarantees during deletion. Signed-off-by: Marc Schier <marcschier@hotmail.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 5c79a1ed-6dab-4522-a9fc-6548caa78ad5
Require FileTransfer writes to stage document bytes and update Version Epoch and ModifiedAt only when a successful Close commits byte-different content. Keep clean, aborted, and byte-identical closes side-effect free. Signed-off-by: Marc Schier <marcschier@hotmail.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 5c79a1ed-6dab-4522-a9fc-6548caa78ad5
duglin
reviewed
Sep 3, 2026
duglin
reviewed
Sep 3, 2026
duglin
reviewed
Sep 3, 2026
duglin
reviewed
Sep 3, 2026
duglin
reviewed
Sep 3, 2026
duglin
reviewed
Sep 3, 2026
duglin
reviewed
Sep 3, 2026
duglin
reviewed
Sep 3, 2026
duglin
reviewed
Sep 3, 2026
| `VersionId`, `Format`, `ContentType`, `ExternalReference`, `ResourceUrl`, | ||
| `Epoch`, `CreatedAt`, `ModifiedAt`, `Labels` and other Version Properties. A | ||
| Resource representation takes those values from the committed default Version | ||
| and adds Resource Meta from `MetaEpoch`, `MetaCreatedAt`, `MetaModifiedAt`, |
Contributor
Author
|
Stack implementation: OPCFoundation/UA-.NETStandard#4396. |
Address review feedback by distinguishing domain resource names, the inseparable Resource/first-Version create, Version labels, and the first-class Resource Meta entity. Signed-off-by: Marc Schier <marcschier@hotmail.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 5c79a1ed-6dab-4522-a9fc-6548caa78ad5
marcschier
force-pushed
the
feat/opcua-event-binding
branch
from
September 4, 2026 07:16
a06f744 to
7eb4cf7
Compare
Signed-off-by: Marc Schier <marcschier@hotmail.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 5c79a1ed-6dab-4522-a9fc-6548caa78ad5
Signed-off-by: Marc Schier <marcschier@hotmail.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 5c79a1ed-6dab-4522-a9fc-6548caa78ad5
marcschier
added a commit
to OPCFoundation/UA-.NETStandard
that referenced
this pull request
Sep 8, 2026
## Summary - support the xRegistry 0.6.0 distinct Resource/Version hierarchy: `Registry -> Group -> Resource -> Versions -> Version` - instantiate stable logical Resource nodes separately from exact Version nodes while preserving existing Version NodeIds - delegate logical Resource FileType operations and Version-view metadata to the selected default Version with handle pinning and shared writer reservations - make Resource and Version delete behavior role-stable and use `MetaEpoch` / `Epoch` respectively - use stable Resource SourceNodes, exact Version SourceNodes and the `Server -> Registry -> Group -> Resource -> Version` notifier chain - keep a model-metadata-gated client fallback for 0.5 flat Servers; 0.6 Servers expose no legacy aliases - target `HasWoTProjection` at the real stable logical Resource node - use `AsyncCustomNodeManager` for the registration, fast-path, and federation managers, with awaited lifecycle, node mutations, event delivery, and cleanup - handle startup rollback, reentrant deletion callbacks, undisclosed file handles, and retryable cleanup without blocking unrelated file operations ## Authoritative dependencies - companion specification: OPCF-Members/spec-drafts#32 at `d3399fca025025a73e5a6b599f850a81d985c060` - OPC UA binding: xregistry/spec#568 - xRegistry event semantics: xregistry/spec#563, merged as `66ee31e47fbadff6ab982ae1516f7d9065e46b64` - companion NodeSet SHA-256: `369f5f3f1814b333e4eeb52bfb4b6a730cdff372505a5f91a54c94f0016ac4cf` ## Review feedback - keep the WoT Connectivity information-model designation at `1.1`; draft revisions update the publication date without changing the model version - eliminate all 198 unique CA1861 diagnostics across 54 files and remove seven obsolete project suppressions - fix the analyzer-clean touched-path CA1307 and the hierarchy follow-up CA1846/CA1851 diagnostics without dropping legacy-TFM compatibility - recover the reconcile queue after callback faults/cancellation and continue accepted pending changes - remove migration guidance for the xRegistry managers, which are new in 2.0 ## Compatibility - public WoT Connectivity model designation remains `1.1` - generated event-record ABI, constructors, options, NodeIds, and stored documents remain compatible - the generic xRegistry managers are new in 2.0 and implement `IAsyncNodeManager`; use `IAsyncNodeManagerFactory` and the async lifecycle hooks (see `docs\XRegistry.md`) - persistence schema and document blobs remain compatible unless noted below ## Validation - merge validation at `980422f76` with upstream `e8bec27d5`: 454 targeted WoT/materialization/model/registry cases and all 327 XRegistry cases passed on both net10.0 and net48; all 29 net10 aggregation sample cases passed - feedback regressions at `308e8ba74`: 55 targeted queue and live registry event/projection/lifecycle cases passed on each of net10.0 and net48 - prior CI: all 266 checks passed at `6489a0908`; the unchanged Ubuntu Core certificate-counter test and dependent jobs passed on the one-time retry ([run 34117304035, attempt 2](https://github.com/OPCFoundation/UA-.NETStandard/actions/runs/34117304035/attempts/2)) - `Opc.Ua.XRegistry.Tests` — 327 passed on net10.0 and net48 for migration commit `32c914aaf` - `Opc.Ua.WotCon.Tests` net10.0 — 1348 passed - `Opc.Ua.WotCon.Bindings.Tests` net10.0 — 683 passed - `Opc.Ua.SourceGeneration.Core.Tests` net10.0 — 3807 passed, 8 skipped - `Opc.Ua.SourceGeneration.Tests` net10.0 — 145 passed - `Opc.Ua.SourceGeneration.Stack.Tests` net10.0 — 94 passed - affected XRegistry and WoT client/server projects build successfully - xRegistry NodeSet is byte-identical to the companion artifact - repository-wide CA1861 inventory — 198 unique diagnostics across 54 files reduced to zero - targeted changed-fixture validation — 1,098 passed, 3 skipped, 0 failed - constrained full `UA.slnx` net10.0 Release build — CA1861 = 0 - `Opc.Ua.XRegistry.Client` net472 and netstandard2.1 builds — 0 warnings, 0 errors - independent shared-array safety review — no significant issues - `git diff --check` The final review regressions cover concurrent reconcile/open, synthetic logical handle collisions across default switches, cross-session Close isolation, shared writer reservations, logical FileType property/change propagation, logical Labels delegation, role-fixed deletion, event sources, model-version gating, and stable `HasWoTProjection` targets. The companion specification and protocol binding are reviewed in the linked PRs above. --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 5c79a1ed-6dab-4522-a9fc-6548caa78ad5 Copilot-Session: b605797f-a97a-4cd0-8f12-016d33c2fd88 Copilot-Session: 7ef369a5-2307-4f71-8a11-15af0e72f240 Copilot-Session: e716d455-8397-4d22-9c5a-398847ab7317
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Subscriptions/EventFilters
Registry -> Group -> Resource -> Versions -> Versionstable while the Resource FileType view delegates to the selected default
Version
Delete(ExpectedEpoch),pinned logical file handles, and dirty-Close-only document commits
Server -> Registry -> Group -> Resource -> Versionnotifierpropagation and surviving-notifier delivery for deletions
Authoritative dependencies
66ee31e47fbadff6ab982ae1516f7d9065e46b64d3399fca025025a73e5a6b599f850a81d985c060369f5f3f1814b333e4eeb52bfb4b6a730cdff372505a5f91a54c94f0016ac4cfCompatibility
The binding describes xRegistry OPC UA model 0.6.0. A 0.6 Server exposes only
the distinct-node hierarchy. Updated Clients may retain a model-metadata-gated
fallback for 0.5 flat Servers; Servers do not expose duplicate legacy aliases.
Validation
python tools/verify.py .python -m pytest tools/ -q— 67 passedtools/spellcheck workingdrafts/bindings/opcua.mdtools/tabcheck workingdrafts/bindings/opcua.mdgit diff --checkThe PR remains a draft while the companion and stack changes are reviewed.