Drop the .Common suffix from the three GDS projects - #4438
Conversation
Every other companion specification in the stack ships as <Family>,
<Family>.Client and <Family>.Server -- Di, ISA95, Positioning, Robotics,
Vision, WotCon, XRegistry, and Lds.Server without a family package. GDS
was the one exception, carrying a .Common suffix that named nothing: the
namespaces have always been Opc.Ua.Gds, Opc.Ua.Gds.Client and
Opc.Ua.Gds.Server, and only the assembly and package ids disagreed.
src/Opc.Ua.Gds.Common -> src/Opc.Ua.Gds
src/Opc.Ua.Gds.Client.Common -> src/Opc.Ua.Gds.Client
src/Opc.Ua.Gds.Server.Common -> src/Opc.Ua.Gds.Server
No source changes were needed. RootNamespace was already the final name
in all three projects, so this moves AssemblyName, PackageId, the
directories and everything that names them; nothing that compiles
against these assemblies has to change a using directive.
The package ids do change, which is consumer-visible, so
docs/migrate/2.0.x/packages.md gains a renamed-packages section -- it is
the document that undertakes to cover NuGet renames -- and the migration
skill's package table gains the two rows a 1.5.378 consumer needs.
Build infrastructure that names the projects or their output moves with
them: the two solution files, the expected-packages list (re-sorted, it
is maintained alphabetically), both signing manifests, the reference
server Dockerfile, the metapackage nuspecs and the analyzer's package
dependencies. preview-pack.slnx is derived from UA.slnx and needs no
edit. The migration analyzer's shim tree follows the source layout by
its own convention, so Gds.Client.Common/ becomes Gds.Client/.
Prose naming past work is left alone: plan 23 still records that its
deferral happened during the "GDS Client.Common modernization", which is
the name that effort had.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
docs/migrate/2.0.x is mirrored into the migration plugin's offline doc bundle, and validate-migration-plugin.ps1 fails the build when the two drift. Adding the renamed-packages section to the shipped doc without re-running the sync left the bundle a section short. Generated with './.azurepipelines/validate-migration-plugin.ps1 -Update'. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Do NOT squash, merge to keep history |
There was a problem hiding this comment.
🔵 Needs a closer look
The PR introduces a few correctness/quality issues in changed code (notably object-based locking and avoidable allocations in trust-list transfer) that should be addressed before approval.
Pull request overview
This PR aligns the Global Discovery Server (GDS) family with the stack’s established companion-spec naming convention by removing the .Common suffix from the three GDS projects/packages, updating solution entries, references, and migration documentation accordingly.
Changes:
- Renamed the three GDS projects/packages to
Opc.Ua.Gds,Opc.Ua.Gds.Client, andOpc.Ua.Gds.Server(assembly/package IDs and paths). - Updated project references across tools, tests, samples, NuGet metapackages, and signing/expected-package manifests.
- Added/updated migration documentation to call out the GDS NuGet rename for 2.0 consumers.
File summaries
| File | Description |
|---|---|
| UA.slnx | Update solution project paths for renamed GDS projects |
| tools/Opc.Ua.SourceGeneration.Tester/Opc.Ua.SourceGeneration.Tester.csproj | Update embedded-resource path to moved GDS design assets |
| tools/Opc.Ua.MigrationAnalyzer/Opc.Ua.MigrationAnalyzer.nuspec | Update dependency from Gds.Client.Common → Gds.Client |
| tools/Opc.Ua.MigrationAnalyzer.Core/readme.md | Update shim-tree mapping table for GDS client rename |
| tools/Opc.Ua.MigrationAnalyzer.Core/Opc.Ua.MigrationAnalyzer.Core.csproj | Update project reference to renamed GDS client |
| tools/Opc.Ua.MigrationAnalyzer.Core/Gds.Client/ServerPushConfigurationClient.cs | Migration shim file path updates under renamed GDS client |
| tools/Opc.Ua.MigrationAnalyzer.Core/Gds.Client/LocalDiscoveryServerClient.cs | Migration shim file path updates under renamed GDS client |
| tools/Opc.Ua.MigrationAnalyzer.Core/Gds.Client/GlobalDiscoveryServerClient.cs | Migration shim file path updates under renamed GDS client |
| tools/MigrationAnalyzer.slnx | Update MigrationAnalyzer solution project paths for renamed GDS projects |
| tests/Opc.Ua.SourceGeneration.Tests/Opc.Ua.SourceGeneration.Tests.csproj | Update embedded-resource path to moved GDS design assets |
| tests/Opc.Ua.SourceGeneration.Core.Tests/GenerateCodeTests.cs | Update commentary reference from Gds.Common → Gds |
| tests/Opc.Ua.Server.Tests/Opc.Ua.Server.Tests.csproj | Update project reference to renamed GDS server |
| tests/Opc.Ua.MigrationAnalyzer.Core.Tests/Opc.Ua.MigrationAnalyzer.Core.Tests.csproj | Update project reference to renamed GDS client |
| tests/Opc.Ua.Gds.Tests/Opc.Ua.Gds.Tests.csproj | Update project references to renamed GDS client/server |
| tests/Opc.Ua.Gds.Tests/GdsApplicationDirectoryTests.cs | Update source-path reference in test comment |
| tests/Opc.Ua.Core.Tests/Opc.Ua.Core.Tests.csproj | Update project reference to renamed GDS base project |
| tests/Opc.Ua.Core.TestFramework/Opc.Ua.Core.TestFramework.csproj | Update project reference to renamed GDS base project |
| tests/Opc.Ua.Core.Security.Tests/Opc.Ua.Core.Security.Tests.csproj | Update project references to renamed GDS client/server |
| tests/Opc.Ua.Aot.Tests/Opc.Ua.Aot.Tests.csproj | Update project references to renamed GDS client/server |
| src/Opc.Ua.Gds/Properties/AssemblyInfo.cs | Assembly metadata under renamed GDS base project |
| src/Opc.Ua.Gds/Opc.Ua.Gds.csproj | Update AssemblyName/PackageId to drop .Common |
| src/Opc.Ua.Gds/NugetREADME.md | Update package IDs/names in NuGet README |
| src/Opc.Ua.Gds.Server/RoleBasedUserManagement/GdsRole.cs | GDS server role/identity types under renamed project path |
| src/Opc.Ua.Gds.Server/Properties/AssemblyInfo.cs | Assembly metadata under renamed GDS server project |
| src/Opc.Ua.Gds.Server/Opc.Ua.Gds.Server.csproj | Update AssemblyName/PackageId and base-project reference |
| src/Opc.Ua.Gds.Server/Onboarding/MemoryTicketStore.cs | Onboarding ticket-store file under renamed project path |
| src/Opc.Ua.Gds.Server/Onboarding/MemoryManagedApplicationRegistry.cs | Onboarding registry file under renamed project path |
| src/Opc.Ua.Gds.Server/Onboarding/ITicketStore.cs | Onboarding ticket-store abstractions under renamed project path |
| src/Opc.Ua.Gds.Server/Onboarding/IManagedApplicationRegistry.cs | Onboarding registry abstractions under renamed project path |
| src/Opc.Ua.Gds.Server/Onboarding/DeviceRegistrarAdminExtensions.cs | Onboarding wiring extensions under renamed project path |
| src/Opc.Ua.Gds.Server/NugetREADME.md | Update package IDs and references in NuGet README |
| src/Opc.Ua.Gds.Server/IGdsUserDatabase.cs | GDS server user DB contract under renamed project path |
| src/Opc.Ua.Gds.Server/Identity/GdsApplicationSelfAdminProvider.cs | Identity augmenter under renamed project path |
| src/Opc.Ua.Gds.Server/IConfigurationDataStore.cs | Managed-app config persistence abstraction under renamed project path |
| src/Opc.Ua.Gds.Server/ICertificateRequest.cs | Certificate-request abstraction under renamed project path |
| src/Opc.Ua.Gds.Server/ICertificateGroup.cs | Certificate-group abstraction under renamed project path |
| src/Opc.Ua.Gds.Server/IAccessTokenProvider.cs | Auth token provider abstraction under renamed project path |
| src/Opc.Ua.Gds.Server/Hosting/OpcUaGdsServerBuilderExtensions.cs | DI extension docs update to renamed assembly name |
| src/Opc.Ua.Gds.Server/Hosting/IGdsServerBuilder.cs | Fluent builder interface under renamed project path |
| src/Opc.Ua.Gds.Server/Hosting/GdsServerOptions.cs | Hosted-server options under renamed project path |
| src/Opc.Ua.Gds.Server/Hosting/GdsDefaultIdentityAuthenticatorOptions.cs | Default-auth options under renamed project path |
| src/Opc.Ua.Gds.Server/Hosting/AuthorizationServiceOptions.cs | Authorization-service options under renamed project path |
| src/Opc.Ua.Gds.Server/GlobalDiscoveryServerConfiguration.cs | GDS configuration types under renamed project path |
| src/Opc.Ua.Gds.Server/EventIds.cs | Update assembly name mention in event-id docs |
| src/Opc.Ua.Gds.Server/AuthorizationServiceManager.cs | Authorization manager under renamed project path |
| src/Opc.Ua.Gds.Server/ApplicationsDatabase/JsonApplicationsDatabase.cs | JSON DB impl under renamed project path |
| src/Opc.Ua.Gds.Server/ApplicationsDatabase/IApplicationsDatabase.cs | Applications DB abstraction under renamed project path |
| src/Opc.Ua.Gds.Client/TrustListFileTransferHelper.cs | Trust-list transfer helper under renamed project path |
| src/Opc.Ua.Gds.Client/ServerStatusChangedEventArgs.cs | Client event args under renamed project path |
| src/Opc.Ua.Gds.Client/ServerCapabilities.cs | Capabilities surface under renamed project path |
| src/Opc.Ua.Gds.Client/RegisteredApplication.xsd | RegisteredApplication schema under renamed project path |
| src/Opc.Ua.Gds.Client/RegisteredApplication.cs | RegisteredApplication type under renamed project path |
| src/Opc.Ua.Gds.Client/Properties/AssemblyInfo.cs | Assembly metadata under renamed GDS client project |
| src/Opc.Ua.Gds.Client/OpcUaGdsClientBuilderExtensions.cs | DI extension docs update to renamed assembly name |
| src/Opc.Ua.Gds.Client/Opc.Ua.Gds.Client.csproj | Update AssemblyName/PackageId and base-project reference |
| src/Opc.Ua.Gds.Client/OnboardingClient.cs | Onboarding client wrapper under renamed project path |
| src/Opc.Ua.Gds.Client/NugetREADME.md | Update package ID in NuGet README |
| src/Opc.Ua.Gds.Client/KeyCredentialServiceClient.cs | KeyCredential client wrapper under renamed project path |
| src/Opc.Ua.Gds.Client/ILocalDiscoveryServerClient.cs | LDS client interface under renamed project path |
| src/Opc.Ua.Gds.Client/IGdsClientBuilder.cs | Client builder interface under renamed project path |
| src/Opc.Ua.Gds.Client/GlobalDiscoveryClientConfiguration.cs | Client configuration type under renamed project path |
| src/Opc.Ua.Gds.Client/GdsClientOptions.cs | Client options under renamed project path |
| src/Opc.Ua.Gds.Client/GdsAccessTokenProvider.cs | Access-token provider under renamed project path |
| src/Opc.Ua.Gds.Client/EventIds.cs | Update assembly name mention in event-id docs |
| src/Opc.Ua.Gds.Client/CertificateWrapper.cs | Certificate wrapper under renamed project path |
| src/Opc.Ua.Gds.Client/BuildSchema.bat | Schema build script under renamed project path |
| src/Opc.Ua.Gds.Client/AdminCredentialsRequiredEventArgs.cs | Client event args under renamed project path |
| samples/Reference/ConsoleReferenceServer/Dockerfile | Update Docker build COPY paths for renamed GDS projects |
| samples/Quickstarts.Servers/Quickstarts.Servers.csproj | Update project reference to renamed GDS server |
| samples/Gds/OnboardingRegistrar/OnboardingRegistrar.csproj | Update project references to renamed GDS base/server |
| samples/Gds/OnboardingClient/OnboardingClient.csproj | Update project references to renamed GDS base/client |
| plans/ServerRuntimeAnalysis.md | Update referenced source path for renamed GDS server |
| plans/ServerDesignExploration.md | Update plan text references to renamed GDS server |
| plans/23-gds-client-x509-modernization.md | Update plan references to renamed GDS client/server paths |
| nuget/Opc.Ua.Symbols.nuspec | Update metapackage dependencies to renamed GDS packages |
| nuget/Opc.Ua.nuspec | Update metapackage dependencies to renamed GDS packages |
| nuget/MetaPackageREADME.md | Update metapackage documentation to renamed GDS packages |
| docs/RoleBasedUserManagement.md | Update link path to renamed GDS server file |
| docs/migrate/2.0.x/sessions-subscriptions.md | Update migration doc references to renamed GDS client package |
| docs/migrate/2.0.x/packages.md | Add/extend migration doc section for GDS package renames |
| docs/GDS.md | Update package table and references to renamed GDS packages |
| docs/DependencyInjection.md | Update DI doc references to renamed GDS client/server paths |
| .azurepipelines/signlistRelease.txt | Update signing manifest paths for renamed GDS outputs |
| .azurepipelines/signlistDebug.txt | Update signing manifest paths for renamed GDS outputs |
| .azurepipelines/expected-packages.txt | Update expected package IDs to renamed GDS packages |
| .agents/skills/opcua-v20-migration/references/stack-migration/sessions-subscriptions.md | Update migration-skill reference docs for renamed GDS client |
| .agents/skills/opcua-v20-migration/references/stack-migration/packages.md | Update migration-skill reference docs for renamed GDS packages |
| .agents/skills/opcua-v20-migration/references/runtime-shim.md | Update runtime-shim doc path reference for renamed GDS server |
| .agents/skills/opcua-v20-migration/references/package-install.md | Update package-install guidance for renamed GDS packages |
Review details
- Files reviewed: 48/111 changed files
- Comments generated: 0
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Code coverage✅ Coverage gate passed.
Coverage is above the recorded baseline - consider ratcheting Thresholds live in |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #4438 +/- ##
=======================================
Coverage 80.88% 80.89%
=======================================
Files 2000 2000
Lines 280453 280453
Branches 48901 48901
=======================================
+ Hits 226857 226874 +17
+ Misses 36749 36746 -3
+ Partials 16847 16833 -14
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
Merging the .Common rename (#4438) left this project's AdditionalFiles entries naming ..\Opc.Ua.Gds.Common\Design, a directory the rename had just removed. Git could not see the conflict: those lines are additions from this branch, so there was nothing for it to mark, and the merge resolved cleanly onto a broken path. The design now resolves at ..\Opc.Ua.Gds\Design, and the three comments that still named the old project follow. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
# Description Make startup-composed application NodeManagers participate in the live lifecycle and bind imported NodeSet2 Method argument properties to their typed `MethodState` children. This change: - adopts application NodeManagers created before startup into `INodeManagerLifecycle.Registrations` after server startup succeeds, while keeping diagnostics, configuration, and core managers protected; - retains per-manager startup external-reference ownership and exact routing positions so reload, removal, rollback, overlapping namespaces, synchronous adapters, and server restart preserve existing behavior; counted immutable reference snapshots avoid quadratic startup matching; - rejects duplicate factory output across active, unpublished, and retired lifecycle generations without deleting or disposing the live manager; callers can catch the public `NodeManagerAlreadyRegisteredException`; - binds valid namespace-zero `Argument[]` `PropertyType` `InputArguments` and `OutputArguments` Variables to `MethodState.InputArguments` and `MethodState.OutputArguments` from either `HasProperty` direction, without requiring `ParentNodeId`, including local namespace-URI reference targets; - preserves authored metadata during NodeSet typed-child promotion without changing the initialization behavior of unrelated generated nodes; - retains generic-import guards for custom and malformed signatures, duplicate standard-signature validation, and upstream factory-driven generated-slot replacement and reconciliation callbacks; - updates lifecycle and Runtime NodeSet documentation and clarifies `OnServerStartedAsync` timing for both `StartAsync` overloads, including the unopened default host returned to the caller. This is a focused follow-up to #4418. That PR preserves registrations from multiple fluent builders, but does not change lifecycle ownership or NodeSet child typing. The branch includes upstream `master` through `da7412c42`, including #4396, #4432, #4437, #4438, and #4440. The completed review fixes in `686d0561f` are included. The latest base merge (`a29fc6ca8`) combines them with #4432's shared batch/fluent importer and generated state factories. One iterative linker supports available parent nodes, deferred parent side tables, application-owned handles, and placeholder reconciliation while retaining reference-driven Method argument binding and URI handling. Upstream cancellation, GDS assembly renames, certificate leak scoping, and xRegistry changes are preserved. ## Related Issues - Fixes #4421 - Fixes #4422 ## CI regression fix `e1a4436f0` fixes the GDS failure reported on Ubuntu and macOS. Copying permission metadata in general `NodeState` initialization applied `SecurityAdmin`-only defaults to generated GDS custom certificate groups and denied their existing GDS-admin Browse requests. Metadata preservation is now confined to NodeSet typed-child promotion; imported Method argument permissions remain intact, while unrelated generated nodes retain their existing initialization behavior. Local Release validation also exposed a 260-character certificate path in the startup-failure test added by this PR. Its isolated PKI now uses a short temporary path. No assertions, authorization checks, or CI gates were weakened, and no pre-existing tests were changed. ## macOS ARM64 NativeAOT suspension Per maintainer request, `a15971f32` suspends only the failing `macos-latest` / `osx-arm64` NativeAOT matrix entry. Re-enabling it once the compiler contains the runtime fix is tracked in #4443. Intel macOS, Linux, and Windows NativeAOT coverage, managed macOS tests, and all other CI gates remain enabled. This is an explicit coverage suspension, not a claim that the underlying compiler/linker defect is fixed. The macOS ARM64 NativeAOT job on `a29fc6ca8` fails during native linking with `ld: Assertion failed: (_addend == uniqueIndex && "too many large addends")`. Both attempts of [run 34191755950](https://github.com/OPCFoundation/UA-.NETStandard/actions/runs/34191755950) hit the same assertion before the native test executable can run; the build/test summary failure is downstream. This matches the NativeAOT Mach-O relocation issue in dotnet/runtime#119380, fixed by relocation-anchor emission in dotnet/runtime#124721 and its .NET 10 backport dotnet/runtime#132171. The failing `Microsoft.DotNet.ILCompiler` 10.0.11 package's nuspec points to `dotnet/dotnet` commit `e2f47b0110ed922f21a1522da67279133ce28f32` (July 23); its object writer does not contain the anchor fix merged on August 12. Version 10.0.11 is currently the latest stable package. The base commit passed on the same runner image and SDK, so this is not being dismissed as a generally broken runner or a test flake. The precise PR-specific object-layout trigger has not been isolated. A compiler containing the relocation fix is needed before restoring the lane. No test code, assertions, coverage thresholds, or shared tooling settings were changed. ## Validation Latest base-merge validation on both `net10.0` and `net48`, Release: - Import helpers and argument-binding regressions: 51 passed per framework. - Batch/fluent import, generated-state overlays, runtime/startup lifecycle, cross-source references, routing, reference snapshots, and node-authoring selection: 344 passed per framework. - Merge-specific cases cover available Method parents with forward/inverse and URI/index references while retaining an application-owned `NodeId` handle. - The unchanged upstream `NodeSetImportIntegrationTests.cs:210` CA1861 warning remains; no diagnostic suppression or unrelated cleanup was added. Release CI-fix validation on both `net10.0` and `net48`: - `CustomCertificateGroupIntegrationTest`: 4 passed, including the unchanged CI failure. - `UANodeSetHelpersTests`: 8 passed, including imported security metadata. - `StartupRuntimeNodeSetLifecycleTests`: 5 passed. Earlier Debug merge and review validation on both frameworks: - Lifecycle, RuntimeNodeSet, fluent, and OperationContext selection after merging `978e6d1af`: 638 passed per framework. - Startup/transport-binding and RuntimeNodeSet integration selection after merging `017856f4a`: 28 passed per framework. - Public exception contract and duplicate-registration selection in `fbf08428b`: 6 passed per framework. Targeted test invocations rebuilt the affected projects successfully. The full `UA.slnx` suite was not rerun locally. ## Checklist - [ ] I have signed the [CLA](https://opcfoundation.org/license/cla/ContributorLicenseAgreementv1.0.pdf) and read the [CONTRIBUTING](https://github.com/OPCFoundation/UA-.NETStandard/blob/master/CONTRIBUTING.md) doc. - [x] I have added tests that prove my fix is effective or that my feature works and increased code coverage. - [x] I have added all necessary documentation. - [x] I have verified that my changes do not introduce (new) build or analyzer warnings. - [ ] I ran **all** tests locally using the **UA.slnx** solution against at least .net **framework** and .net **10**, and all passed. - [ ] I fixed **all** failing and flaky tests in the CI pipelines and **all** CodeQL warnings. - [x] I have addressed **all** PR feedback received. --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2bb8a834-7695-4ae6-84cb-2471c76d1b12
Description
Every other companion specification in the stack ships as
<Family>,<Family>.Clientand<Family>.Server—Opc.Ua.Di,Opc.Ua.ISA95,Opc.Ua.Positioning,Opc.Ua.Robotics,Opc.Ua.Vision,Opc.Ua.WotCon,Opc.Ua.XRegistry, andOpc.Ua.Lds.Serverwithout a family package. GDS was the one exception, carrying a.Commonsuffix that named nothing.src/Opc.Ua.Gds.Commonsrc/Opc.Ua.Gdssrc/Opc.Ua.Gds.Client.Commonsrc/Opc.Ua.Gds.Clientsrc/Opc.Ua.Gds.Server.Commonsrc/Opc.Ua.Gds.ServerNo source changes were needed
RootNamespacewas already the final name in all three projects — the namespaces have always beenOpc.Ua.Gds,Opc.Ua.Gds.ClientandOpc.Ua.Gds.Server, and onlyAssemblyNameandPackageIddisagreed. Nothing that compiles against these assemblies changes ausingdirective; the diff outside the moves is entirely ids, paths and prose.Directories were moved with
git mv, and every one of the 73 file moves is detected as a rename at 100% similarity (bar the handful that also had a name in their text), sogit log --followand blame survive.Consumer impact
The package ids change, which is visible to anyone consuming the NuGet packages:
OPCFoundation.NetStandard.Opc.Ua.Gds.CommonOPCFoundation.NetStandard.Opc.Ua.GdsOPCFoundation.NetStandard.Opc.Ua.Gds.Client.CommonOPCFoundation.NetStandard.Opc.Ua.Gds.ClientOPCFoundation.NetStandard.Opc.Ua.Gds.Server.CommonOPCFoundation.NetStandard.Opc.Ua.Gds.Serverdocs/migrate/2.0.x/packages.mdgains a renamed-packages section — it is the document that undertakes to cover NuGet renames, and had no GDS entry — and the migration skill's package table gains the two rows a 1.5.378 consumer needs. That is the only hand-written content in this PR; everything else is mechanical.Assembly names follow the package ids, so the section also notes that binding redirects, trimming descriptors and signing manifests naming the files directly have to be updated.
Build infrastructure
Everything naming the projects or their output moves with them:
UA.slnxandtools/MigrationAnalyzer.slnx(both re-sorted — the project lists are alphabetical, andGdsnow sorts beforeGds.Client)..azurepipelines/expected-packages.txt— 3 ids, also re-sorted for the same reason..azurepipelines/signlistDebug.txtandsignlistRelease.txt— 18 paths each. Their internal ordering is left alone: that group was already unsorted, and reordering a signing manifest is diff noise.samples/Reference/ConsoleReferenceServer/Dockerfile, the two metapackage nuspecs, the analyzer nuspec's package dependencies, and 8.csprojreferences across tests, samples and tools.preview-pack.slnxis generated fromUA.slnxbygenerate-slnx.ps1, so there is nothing static to edit. Nothing under.github/workflows, and no.ps1/.ymlin.azurepipelines, names these projects.The migration analyzer's shim tree mirrors the source project layout by its own documented convention, so
Gds.Client.Common/becomesGds.Client/and its readme table follows.Deliberately not changed
Prose naming past work:
plans/23still records that its deferral happened during the "GDS Client.Common modernization", which is the name that effort had. File paths in the same document were updated.Validation
net10.0:UA.slnx: 0 errors. 14 warnings, all pre-existing CA1861/CA1850/CA1307 inXRegistry,Types.TestsandWotCon.Tests— none in anything this PR touches.Opc.Ua.Gds.dll,Opc.Ua.Gds.Client.dll,Opc.Ua.Gds.Server.dll, with no*.Common.dllproduced anywhere.Opc.Ua.Gds.Tests: 1,116 passed, 0 failed, 54 skipped.Opc.Ua.MigrationAnalyzer.Core.Tests: 10 passed, 3 skipped.Checklist
🤖 Generated with Claude Code