Skip to content

DRAFT: Add native events and distinct Resource versions to OPC UA binding working draft - #568

Draft
marcschier wants to merge 6 commits into
xregistry:mainfrom
marcschier:feat/opcua-event-binding
Draft

DRAFT: Add native events and distinct Resource versions to OPC UA binding working draft#568
marcschier wants to merge 6 commits into
xregistry:mainfrom
marcschier:feat/opcua-event-binding

Conversation

@marcschier

@marcschier marcschier commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Summary

  • bind xRegistry change events to native OPC UA EventTypes and standard
    Subscriptions/EventFilters
  • map logical Resources and exact Versions to distinct OPC UA Objects:
    Registry -> Group -> Resource -> Versions -> Version
  • keep Resource identity, Resource Meta, delete semantics and event SourceNode
    stable while the Resource FileType view delegates to the selected default
    Version
  • define exact create/upload outputs, fixed-role Delete(ExpectedEpoch),
    pinned logical file handles, and dirty-Close-only document commits
  • define Server -> Registry -> Group -> Resource -> Version notifier
    propagation and surviving-notifier delivery for deletions

Authoritative dependencies

Compatibility

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 passed
  • tools/spellcheck workingdrafts/bindings/opcua.md
  • tools/tabcheck workingdrafts/bindings/opcua.md
  • git diff --check

The PR remains a draft while the companion and stack changes are reviewed.

marcschier and others added 3 commits September 3, 2026 07:22
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
Comment thread workingdrafts/bindings/opcua.md Outdated
Comment thread workingdrafts/bindings/opcua.md Outdated
Comment thread workingdrafts/bindings/opcua.md Outdated
Comment thread workingdrafts/bindings/opcua.md Outdated
Comment thread workingdrafts/bindings/opcua.md Outdated
Comment thread workingdrafts/bindings/opcua.md Outdated
Comment thread workingdrafts/bindings/opcua.md Outdated
Comment thread workingdrafts/bindings/opcua.md Outdated
Comment thread workingdrafts/bindings/opcua.md Outdated
`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`,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should discuss this

@marcschier

Copy link
Copy Markdown
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 marcschier changed the title feat(opcua): add native event binding feat(opcua): define full atomic dual-plane binding Sep 3, 2026
@marcschier
marcschier force-pushed the feat/opcua-event-binding branch from a06f744 to 7eb4cf7 Compare September 4, 2026 07:16
@marcschier marcschier changed the title feat(opcua): define full atomic dual-plane binding feat(opcua): add native event binding Sep 4, 2026
marcschier and others added 2 commits September 5, 2026 17:08
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 marcschier changed the title feat(opcua): add native event binding feat(opcua): add native events and distinct Resource versions Sep 5, 2026
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
@marcschier marcschier changed the title feat(opcua): add native events and distinct Resource versions DRAFT: Add native events and distinct Resource versions to OPC UA binding working draft Sep 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants