Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
7590158
Add standalone provider-backed PackML runtime and typed client
marcschier Nov 2, 2026
f3b81e9
Encapsulate PackML operation lifecycle and reject callback reentry
marcschier Nov 2, 2026
809ba93
Separate PackML shutdown authority and reject busy mutations
marcschier Nov 2, 2026
1f27ccb
Fix PackML legacy collection checks and nullable decoding
marcschier Nov 2, 2026
8c5eee1
Fix PackML test contracts and qualify Scales state identifiers
marcschier Nov 2, 2026
83e4205
Fix PackML wire state and structured argument decoding
marcschier Nov 2, 2026
fd87ae7
Merge branch 'master' of https://github.com/OPCFoundation/UA-.NETStan…
marcschier Nov 3, 2026
12b1cc9
Support PackML StateModel extensions
marcschier Nov 3, 2026
ffbe95e
Document PackML extension test cases
marcschier Nov 3, 2026
8c060ec
List PackML client and server packages
marcschier Nov 3, 2026
10950e7
Withhold undefined PackML conformance unit
marcschier Nov 3, 2026
b22aa1c
Restore PackML mode subset regression
marcschier Nov 3, 2026
8231123
Add named PackML NativeAOT encoding and API regressions
marcschier Nov 3, 2026
79ccc06
Await borrowed-session factory result before owner disposal
marcschier Nov 3, 2026
66df53a
Exercise asynchronous PackML session borrowing with a deterministic gate
marcschier Nov 3, 2026
a85e6ed
Deliver native async PackML transitions with explicit overlap admission
marcschier Nov 5, 2026
31c699a
Fix async state machine field documentation spacing
marcschier Nov 5, 2026
8f45f77
Remove PackML disposable gate and simplify publication failure propag…
marcschier Nov 5, 2026
5523a93
Fix async state machine regression analyzer diagnostics
marcschier Nov 5, 2026
ca49bfd
Make PackML initialization cancellation boundary explicit
marcschier Nov 5, 2026
9af035a
Address PackML review feedback and CI regressions
marcschier Nov 5, 2026
af388da
Protect PackML sample binding and owned callback shutdown
marcschier Nov 5, 2026
c9838d4
Clarify PackML conformance tests and application clock requirements
marcschier Nov 5, 2026
f78cd4c
Expose composite state operations without PackML friend access
marcschier Nov 5, 2026
4048eaf
Rate implemented PackML support independently of test execution
marcschier Nov 5, 2026
7561bcd
Fix PackML CI diagnostics and verify defined optional capabilities
marcschier Nov 5, 2026
827ad75
Fix PackML test build failures across targets
marcschier Nov 5, 2026
3e0ede4
Fix PackML transition recovery and CI fixtures
marcschier Nov 5, 2026
2126477
Register parentless PackML units as Server event roots
marcschier Nov 6, 2026
189165b
Restore PackML client-server fixture configuration declaration
marcschier Nov 6, 2026
4ee16e1
Await PackML root-registration rollback assertion
marcschier Nov 6, 2026
5020038
Merge master into PackML support branch
marcschier Nov 6, 2026
2493e54
Stage PackML references during lifecycle preparation
marcschier Nov 6, 2026
1dd9bda
Resolve PackML reference cleanup through registered facades
marcschier Nov 6, 2026
bc8fe70
Preserve facade reference cleanup during retirement
marcschier Nov 6, 2026
4e1390e
Keep prepared root notifier references private
marcschier Nov 6, 2026
f7e8140
Resolve serving root facades and release staged owners
marcschier Nov 6, 2026
1a8da3a
Fix redundant async publication callback
marcschier Nov 6, 2026
c6673c8
Test PackML observation across reconnect
marcschier Nov 6, 2026
2309e5c
Fix CI regressions in direct root publication and facade tests
marcschier Nov 6, 2026
43d0391
Keep node deletion from waiting for lifecycle mutation admission
marcschier Nov 6, 2026
58eaf01
Harden deferred deletion pruning against reserved sources and missed …
marcschier Nov 6, 2026
629cdfc
Keep failed deferred reference removals owned and restart a faulted d…
marcschier Nov 6, 2026
58371da
Keep deferred drain requests made during a faulted pass
marcschier Nov 6, 2026
ee51c50
Refactor deferred retry accumulator and cover drain wakeup handoff
marcschier Nov 6, 2026
7dc77c0
Correct PackML support matrix
marcschier Nov 7, 2026
a38ff43
Merge master into PackML support
marcschier Nov 7, 2026
483cc40
Defer reserved type removals and admit adapted sources
marcschier Nov 7, 2026
7700c75
Fix type registration field spacing
marcschier Nov 7, 2026
716ce97
Merge remote-tracking branch 'origin/master' into marcschier-packml-f…
marcschier Nov 8, 2026
c779de3
Fix PackML test server startup readiness
marcschier Nov 8, 2026
8b7bff7
Add forwarding event lifecycle regressions
marcschier Nov 8, 2026
4f7a4ca
Merge remote-tracking branch 'origin/master' into marcschier-packml-f…
marcschier Nov 8, 2026
fe0f596
Merge branch 'master' into marcschier-packml-full-support
marcschier Nov 9, 2026
8e17f44
Merge branch 'master' into marcschier-packml-full-support
marcschier Nov 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .azurepipelines/expected-packages.txt
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,8 @@ OPCFoundation.NetStandard.Opc.Ua.OpenUsd.Connector
OPCFoundation.NetStandard.Opc.Ua.OpenUsd.Connector.Viewer
OPCFoundation.NetStandard.Opc.Ua.OpenUsd.Server
OPCFoundation.NetStandard.Opc.Ua.PackML
OPCFoundation.NetStandard.Opc.Ua.PackML.Client
OPCFoundation.NetStandard.Opc.Ua.PackML.Server
OPCFoundation.NetStandard.Opc.Ua.PADIM
OPCFoundation.NetStandard.Opc.Ua.PADIM.Client
OPCFoundation.NetStandard.Opc.Ua.PADIM.Server
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,8 @@ across industrial control, manufacturing, energy, and IoT systems.
OPC 40223 (Pumps and Vacuum Pumps),
OPC 30010 ([AutoID Devices](docs/AutoID.md)),
OPC 30500-1 ([Laboratory and Analytical Devices](docs/LADS.md)),
OPC 40200 (Weighing Technology) with OPC 30050 (PackML).
OPC 40200 (Weighing Technology) with OPC 30050
([PackML](docs/PackML.md), also available as standalone provider-backed units).
- **Hosting and code generation** — `Microsoft.Extensions.DependencyInjection`
hosting (`services.AddOpcUa()`), fluent server + client builders,
source-generated NodeManagers and DataTypes, and an MCP server so
Expand Down
6 changes: 6 additions & 0 deletions UA.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,9 @@
<Project Path="samples/Scales/ScalesServer/ScalesServer.csproj" />
<Project Path="samples/Scales/ScalesClient/ScalesClient.csproj" />
</Folder>
<Folder Name="/samples/PackML/">
<Project Path="samples/PackML/PackMLSample/PackMLSample.csproj" />
</Folder>
<Folder Name="/samples/IA/">
<File Path="samples/IA/README.md" />
<Project Path="samples/IA/IndustrialAutomationSample.csproj" />
Expand Down Expand Up @@ -196,6 +199,8 @@
<Project Path="src/Opc.Ua.PADIM.Client/Opc.Ua.PADIM.Client.csproj" />
<Project Path="src/Opc.Ua.PADIM.Server/Opc.Ua.PADIM.Server.csproj" />
<Project Path="src/Opc.Ua.PackML/Opc.Ua.PackML.csproj" />
<Project Path="src/Opc.Ua.PackML.Client/Opc.Ua.PackML.Client.csproj" />
<Project Path="src/Opc.Ua.PackML.Server/Opc.Ua.PackML.Server.csproj" />
<Project Path="src/Opc.Ua.Machinery/Opc.Ua.Machinery.csproj" />
<Project Path="src/Opc.Ua.Machinery.Jobs/Opc.Ua.Machinery.Jobs.csproj" />
<Project Path="src/Opc.Ua.Machinery.Result/Opc.Ua.Machinery.Result.csproj" />
Expand Down Expand Up @@ -453,6 +458,7 @@
<Project Path="tests/Opc.Ua.ECM.IntegrationTests/Opc.Ua.ECM.Integration.Tests.csproj" />
<Project Path="tests/Opc.Ua.PADIM.Tests/Opc.Ua.PADIM.Tests.csproj" />
<Project Path="tests/Opc.Ua.Scales.Tests/Opc.Ua.Scales.Tests.csproj" />
<Project Path="tests/Opc.Ua.PackML.Tests/Opc.Ua.PackML.Tests.csproj" />
<Project Path="tests/Opc.Ua.AMB.Tests/Opc.Ua.AMB.Tests.csproj" />
<Project Path="tests/Opc.Ua.AutoID.Tests/Opc.Ua.AutoID.Tests.csproj" />
<Project Path="tests/Opc.Ua.LADS.Tests/Opc.Ua.LADS.Tests.csproj" />
Expand Down
5 changes: 3 additions & 2 deletions docs/DeviceIntegration.md
Original file line number Diff line number Diff line change
Expand Up @@ -678,8 +678,9 @@ Runtimes use these public `DiNodeManager` members:
atomically with its last batch; later registrations throw `ObjectDisposedException`.
An ordinary explicit drain leaves registration open for new batches. The Machinery-named
registration and disposal extensions forward to these neutral members.
- `RegisterRootNotifierAsync` registers an event source and attaches existing
event subscriptions.
- `RegisterRootNotifierAsync`, inherited from `AsyncCustomNodeManager`,
registers an event source as a Server root and attaches existing event
subscriptions. Deleting the node removes the registration.
- `TryOrganizeUnder` adds both directions of an `Organizes` reference and
returns `false` when the folder is not owned. Resolve
`Machinery.ObjectIds.Machines` through the namespace table; a matching BrowseName
Expand Down
27 changes: 27 additions & 0 deletions docs/NodeManagers.md
Original file line number Diff line number Diff line change
Expand Up @@ -1732,6 +1732,24 @@ fails; that failure cannot restore the prior routing view. This path supports th
ownership model of `AsyncCustomNodeManager` and adapted `CustomNodeManager2`; a custom external
reference store is rejected before the decision.

For an indexed node owned by an `AsyncCustomNodeManager`, use
`AddExternalReferenceAsync` to link an externally owned source to it:

```csharp
await manager.AddExternalReferenceAsync(
node, ObjectIds.ObjectsFolder, ReferenceTypeIds.Organizes, isInverse: false,
cancellationToken: ct);
```

The method adds the reciprocal reference on `node`. For a private candidate it
stages the external reference until publication; for a published manager it
adds the reference through the master. The external source must exist by
publication; a missing source rejects the commit before its durable decision.
Deleting or replacing the target before publication discards its staged
reference. Deleting a target from a published lifecycle manager also removes
its contribution, so a later publication does not restore the reference. Finish
changes to the candidate before starting its commit.

#### Change notifications

Every committed lifecycle transaction emits one compressed model-change notification. Reload also
Expand Down Expand Up @@ -3024,6 +3042,15 @@ builder.Boilers.Boiler__1.DrumX001

The `Server` Object (`i=2253`) is the aggregate event subscription point
(OPC UA Part 5 [8.3.2](https://reference.opcfoundation.org/Core/Part5/v105/docs/8.3.2)).
Use `await manager.RegisterRootNotifierAsync(node, ct)` to register a node
without a parent notifier as a Server event root. For a published manager, the
call publishes the Server object's `HasNotifier` reference and attempts to
attach existing Server-event monitored items. While a lifecycle candidate is
private, including after preparation returns, the reference is staged and
existing subscriptions are attached during reconciliation after publication.
Check the lifecycle result for reconciliation failures. Deleting the node
through its manager removes the registration, so there is no removal API. If
registration throws, delete the node to discard any partial registration.
Server-wide fan-out treats an individual root or manager's `BadNotSupported` as
non-participation, not as a failure of every other source. Root registration
does not silently set `EventNotifier.SubscribeToEvents`; declare the capability
Expand Down
Loading
Loading