Repository navigation
Add explicit published WoT Binding 1.00 consumer interoperability - #4892
marcschier wants to merge 30 commits into
Conversation
The planner emits callObjectId, but MCP target selection and mutation authorization still read componentOf. Align both consumers and the protected-action fixture with current receiver metadata; exercise protected methods and protected receivers.
Prefer explicit receivers and capture omitted receivers only from trusted original Object and endpoint facts. Validate inferred Core ownership before dispatch while preserving explicit ObjectType imports. Keep live projection provenance internal and reject unprovable persisted inference. Add planning, live Call, authorization and provenance regressions with precise support limits.
Insert the blank line required by RCS0009 before the trusted receiver field documentation. This final-cleanup formatting omission caused the common CI build, grading, desktop and AOT compilation failures. Validate the exact corrected source with analyzer-enabled Types net10 Release/net48 Debug builds, full UA.slnx net10 Release build, and receiver/Binding/MCP regression suites.
…ing-1-0-interoperability # Conflicts: # docs/WotBindings.md # src/Opc.Ua.Types/Wot/WotCallReceiver.cs # src/Opc.Ua.Types/Wot/WotDocument.cs # src/Opc.Ua.Types/Wot/WotProjectionResolver.cs # src/Opc.Ua.WotCon.Bindings/OpcUa/OpcUaWotBindingChannel.CapturedActions.cs # src/Opc.Ua.WotCon.Bindings/OpcUa/OpcUaWotBindingChannel.Paths.cs # src/Opc.Ua.WotCon.Bindings/OpcUa/OpcUaWotBindingChannel.cs # src/Opc.Ua.WotCon.Bindings/Planners/OpcUaBindingPlanner.cs # src/Opc.Ua.WotCon.Bindings/WotAffordanceForm.Paths.cs # src/Opc.Ua.WotCon.Bindings/WotAffordanceForm.cs # tests/Opc.Ua.Tools.Tests/Mcp/WotCon/WotRuntimeOpcUaTests.cs # tests/Opc.Ua.WotCon.Bindings.Tests/CallReceiverPlanningTests.cs # tests/Opc.Ua.WotCon.Bindings.Tests/OpcUaWotBindingChannelTests.cs # tests/Opc.Ua.WotCon.Bindings.Tests/OpcUaWotInvocationStatusTests.cs
There was a problem hiding this comment.
🟡 Changes recommended
Preflight security enforcement and namespace, receiver, and argument-validation errors remain unresolved.
7 open issues
Enforce form security requirements before resolver I/O · New Resolve explicit receivers using their original form context · New Authorize metadata access before preflight requests · New Normalize numeric enclosing identities before anchor checks · New Use captured href identity for path metadata resolution · New Preserve href-path detection when uav:id is present · New Avoid name matching for single-value method arguments · New
What changed in this PR
Adds an explicit published OPC 10101 v1.00 consumer mode to the existing WoT binding stack, building on #4877 while keeping Current processing as the default.
Changes:
- Adds explicit mode selection and document-context namespace resolution.
- Introduces published action-owner resolution, native argument validation, and shared MCP target pinning.
- Expands interoperability tests, traceability, and documentation without claiming full conformance or UA Binary serialization support.
| File | Description |
|---|---|
| tools/Opc.Ua.Mcp.WotCon/Tools/WotRuntimeTools.cs | Propagates mode selection and pins resolved Call targets. |
| tools/Opc.Ua.Mcp.WotCon/Runtime/WotRuntimeInputs.cs | Exposes the processing-mode option. |
| tests/Opc.Ua.WotCon.Tests/WotBindingTraceabilityTests.cs | Validates local traceability test references. |
| tests/Opc.Ua.WotCon.Tests/Opc.Ua.WotCon.Tests.csproj | Includes shared traceability resources. |
| tests/Opc.Ua.WotCon.Tests/Materialization/WotProjectedMethodRuntimeTests.cs | Tests rejection of fabricated source ownership. |
| tests/Opc.Ua.WotCon.Tests/Materialization/WotMaterializationImportTests.cs | Tests source ownership across NodeSet import. |
| tests/Opc.Ua.WotCon.Tests/Binding/WotTargetMappingTests.cs | Tests property-scoped mapping metadata. |
| tests/Opc.Ua.WotCon.Bindings.Tests/WotTransmittedUriTests.cs | Tests complete endpoint-path preservation. |
| tests/Opc.Ua.WotCon.Bindings.Tests/WotPayloadCodecTests.cs | Distinguishes octet-stream handling from UA Binary. |
| tests/Opc.Ua.WotCon.Bindings.Tests/WotFormExtractorTests.cs | Tests explicit selection and namespace authority. |
| tests/Opc.Ua.WotCon.Bindings.Tests/WotActionLayoutTests.cs | Tests native argument ordering and type constraints. |
| tests/Opc.Ua.WotCon.Bindings.Tests/OpcUaWotPropertyContextTests.cs | Tests typed property reads and writes. |
| tests/Opc.Ua.WotCon.Bindings.Tests/OpcUaWotPathTargetTests.cs | Tests published numeric targets and rejection paths. |
| tests/Opc.Ua.WotCon.Bindings.Tests/OpcUaWotInvocationStatusTests.cs | Removes obsolete receiver-error text expectations. |
| tests/Opc.Ua.WotCon.Bindings.Tests/OpcUaWotExecutorTests.cs | Tests server-enforced write denial. |
| tests/Opc.Ua.WotCon.Bindings.Tests/OpcUaWotExactSecurityTests.cs | Tests security constraints and invalid policies. |
| tests/Opc.Ua.WotCon.Bindings.Tests/OpcUaWotCallContractTests.cs | Tests typed UA arguments with octet-stream MIME. |
| tests/Opc.Ua.WotCon.Bindings.Tests/OpcUaWotBindingChannelTests.Properties.cs | Exercises property context handling in both modes. |
| tests/Opc.Ua.WotCon.Bindings.Tests/OpcUaWotBindingChannelTests.cs | Adds live published-action execution coverage. |
| tests/Opc.Ua.WotCon.Bindings.Tests/CallReceiverPlanningTests.cs | Tests owner candidates, ambiguity, and dispatch. |
| tests/Opc.Ua.Types.Tests/Wot/WotTraceabilityLedger.cs | Recognizes MCP test-assembly evidence. |
| tests/Opc.Ua.Types.Tests/Wot/WotPortableIdentityTests.cs | Tests URI decoding and stable identities. |
| tests/Opc.Ua.Types.Tests/Wot/WotBrowsePathTargetTests.cs | Tests context-mapped paths and anchors. |
| tests/Opc.Ua.Types.Tests/Wot/Assets/wot-binding-traceability.json | Adds version-qualified evidence and limitations. |
| tests/Opc.Ua.Tools.Tests/Opc.Ua.Tools.Tests.csproj | Includes shared traceability resources. |
| tests/Opc.Ua.Tools.Tests/Mcp/WotCon/WotRuntimeOpcUaTests.cs | Tests authorized and denied published Calls. |
| tests/Opc.Ua.Tools.Tests/Mcp/WotCon/WotBindingTraceabilityTests.cs | Validates MCP traceability references. |
| src/Opc.Ua.WotCon.Bindings/WotPayloadDescriptor.Arguments.cs | Resolves native layouts and validates argument types. |
| src/Opc.Ua.WotCon.Bindings/WotFormExtractor.cs | Adds explicit published-mode extraction. |
| src/Opc.Ua.WotCon.Bindings/WotBindingPlan.cs | Carries processing mode into extraction and planning. |
| src/Opc.Ua.WotCon.Bindings/WotBindingIdentification.cs | Defines processing modes and selection validation. |
| src/Opc.Ua.WotCon.Bindings/WotAffordanceForm.Paths.cs | Captures published identities and ownership metadata. |
| src/Opc.Ua.WotCon.Bindings/WotAffordanceForm.cs | Preserves captured metadata during href resolution. |
| src/Opc.Ua.WotCon.Bindings/Planners/OpcUaBindingPlanner.cs | Compiles published targets and owner candidates. |
| src/Opc.Ua.WotCon.Bindings/OpcUa/OpcUaWotCallReceiverResolver.cs | Shares Method and receiver ownership resolution. |
| src/Opc.Ua.WotCon.Bindings/OpcUa/OpcUaWotBindingChannel.Paths.cs | Resolves receivers and reads native signatures. |
| src/Opc.Ua.WotCon.Bindings/OpcUa/OpcUaWotBindingChannel.cs | Applies resolved payload contracts during invocation. |
| src/Opc.Ua.WotCon.Bindings/OpcUa/OpcUaWotBindingChannel.CapturedActions.cs | Applies published validation to captured actions. |
| src/Opc.Ua.WotCon.Bindings/IWotProtocolBinder.cs | Defers published named-argument ordering. |
| src/Opc.Ua.WotCon.Bindings/IWotBindingPlanner.cs | Adds processing mode to planning context. |
| src/Opc.Ua.Types/Wot/WotProjectionResolver.cs | Preserves original action ownership through resolution. |
| src/Opc.Ua.Types/Wot/WotNodeSetConverter.MethodArguments.cs | Allows unresolved named argument layouts. |
| src/Opc.Ua.Types/Wot/WotMethodArgumentLayout.cs | Resolves declared names against native order. |
| src/Opc.Ua.Types/Wot/WotDocument.cs | Retains trusted ownership metadata in memory. |
| src/Opc.Ua.Types/Wot/WotCallReceiver.cs | Captures and normalizes action owner declarations. |
| src/Opc.Ua.Types/Wot/WotBrowsePathTarget.cs | Enables explicitly selected numeric path prefixes. |
| src/Opc.Ua.Types/BuiltIn/RelativePathFormatter.cs | Parses context-mapped numeric prefixes. |
| docs/WotCon.md | Separates converter options from consumer selection. |
| docs/WotBindings.md | Documents published mode and its limitations. |
Review effort: Balanced
|
Review fixes are published in Final-source validation for this review-fix commit:
These are focused review-fix gates, not another full-solution run. Bindings.Tests and MCP runtime execution are modern-only; no empty net48 run is counted as a pass. The PR's UA Binary serialization and complete runtime schema-validation limitations remain open and unchanged. The Markdown edit pass covered all three changed Markdown files relative to the PR base: |
There was a problem hiding this comment.
🟡 Changes recommended
Unresolved preflight identity, session-invalidation, and base-relative target-capture issues affect authorization boundaries and valid published forms.
4 open issues
7 resolved since last review
Authorize metadata access before preflight requests Resolve explicit receivers using their original form context Enforce form security requirements before resolver I/O Avoid name matching for single-value method arguments Preserve href-path detection when uav:id is present Use captured href identity for path metadata resolution Normalize numeric enclosing identities before anchor checks
Review effort: Balanced
Code coverage✅ Coverage gate passed.
Uncovered changed lines
Coverage is above the recorded baseline - consider ratcheting Thresholds live in |
Codecov Report❌ Patch coverage is ❌ Your patch check has failed because the patch coverage (73.33%) is below the target coverage (80.00%). You can increase the patch coverage or adjust the target coverage. Additional details and impacted files@@ Coverage Diff @@
## master #4892 +/- ##
==========================================
- Coverage 83.35% 83.32% -0.03%
==========================================
Files 3504 3505 +1
Lines 509202 510136 +934
Branches 86451 86633 +182
==========================================
+ Hits 424438 425074 +636
- Misses 55967 56168 +201
- Partials 28797 28894 +97
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|


Description
Implement the approved published OPC 10101 v1.00 consumer- Baseline: OPC 10101 v1.00, published 2026-01-08. Reviewed plaintext SHA-256:
4ec1170c1c33c63907e7810e6ab0537d62b55735bc2d1191ec7f57bbf9926d93. Later draft vocabulary is not normative 1.00 evidence.WotBindingProcessingMode.PublishedOneZeroin planner/extractor and MCP options. Current remains the default; no heuristic selection from vocabulary/revision. Original TDs need no invented revision annotation.uav:componentOf(§7.1.3). Native Core ownership/endpoint checks select one valid Object receiver; a valid explicit form receiver can disambiguate. No retired scalar form fallback.InputArguments/OutputArgumentsestablish object-schema argument ordering, DataTypes and ranks without laterargumentLayout/fieldOrderor JSON-order guesses. Native integer widths constrain actual values too.resolvedFrommarkers and local containment cannot manufacture source ownership authority.Read/write/observe/default operations, property mapping annotations, exact channel/auth/allOf constraints and external token-provider applicability have version-qualified evidence. Documentation distinguishes converter identifier options from runtime processing selection. The 25-requirement traceability ledger includes concrete tests, assertion-level evidence and qualifications. Locator completeness is not implementation completeness.
Related Issues
Checklist
Put an
xin the boxes that apply. You can complete these step by step after opening the PR.