919009c5ef
AbLegacyDriver stamped LastSuccessfulRead (init, read, write), the read's sample timestamps and host-state change times from raw DateTime.UtcNow; only the backoff path read the injectable Clock. All of them now read Clock(), so NativePcccBridgeStatusHealthTests drives a manual clock (init at T0, read at T1) and asserts LastSuccessfulRead == T1 exactly instead of spin-waiting for the wall clock to pass the init stamp (#767). Without the driver change the 6 tests fail (init stamp is wall-clock, not T0). Directory.Build.props sets TreatWarningsAsErrors for every project since #766, so the 75 per-csproj copies (64 src + 11 tests) are removed and the props comment says it is now the only place. tools/mem-probe keeps its explicit opt-out. Release build: 0 warnings, 0 errors; a planted CS0168 still fails the build in a src project and in a test project that used to carry its own copy. Claude-Session: https://claude.ai/code/session_01GT67AEHd2Acv1YPwGfXEoV
63 lines
4.4 KiB
XML
63 lines
4.4 KiB
XML
<Project Sdk="Microsoft.NET.Sdk">
|
|
|
|
<PropertyGroup>
|
|
<RootNamespace>ZB.MOM.WW.OtOpcUa.Runtime</RootNamespace>
|
|
</PropertyGroup>
|
|
|
|
<ItemGroup>
|
|
<!-- ParsedDeploymentArtifact (and DeploymentArtifact.Open / .Inflate) are internal: every consumer
|
|
is in this assembly, and the type is a disposable, non-thread-safe wrapper over a live
|
|
JsonDocument that must not escape it. The tests drive that seam directly — including
|
|
Inflate(blob, maxBytes), which takes the decompression ceiling as a parameter so the
|
|
artifact-bomb guard is provable without inflating half a gigabyte per test run. -->
|
|
<InternalsVisibleTo Include="ZB.MOM.WW.OtOpcUa.Runtime.Tests"/>
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<PackageReference Include="Akka.Hosting"/>
|
|
<PackageReference Include="Akka.Cluster.Tools"/>
|
|
<!-- Node-side gRPC client that fetches the deployed-configuration artifact from central
|
|
(per-cluster mesh Phase 3, FetchAndCache mode). The generated stub lives in Commons. -->
|
|
<PackageReference Include="Grpc.Net.Client"/>
|
|
<!-- Core LocalDb only (ILocalDb + the connection/transaction seam) — the deployment-artifact
|
|
cache lives here, but the sync engine and its gRPC endpoint are the Host's concern. -->
|
|
<PackageReference Include="ZB.MOM.WW.LocalDb" />
|
|
<!-- ClusterActiveNode — the same "oldest Up member of role X" primitive RedundancyStateActor's election
|
|
delegates to. OpcUaEndpointStepDownActor (lmxopcua#762) asks "am I the driver Primary?" through it so
|
|
the step-down and the election cannot disagree about which node is Primary. -->
|
|
<PackageReference Include="ZB.MOM.WW.Health.Akka" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<ProjectReference Include="..\..\Core\ZB.MOM.WW.OtOpcUa.Commons\ZB.MOM.WW.OtOpcUa.Commons.csproj"/>
|
|
<ProjectReference Include="..\..\Core\ZB.MOM.WW.OtOpcUa.Cluster\ZB.MOM.WW.OtOpcUa.Cluster.csproj"/>
|
|
<ProjectReference Include="..\..\Core\ZB.MOM.WW.OtOpcUa.Configuration\ZB.MOM.WW.OtOpcUa.Configuration.csproj"/>
|
|
<ProjectReference Include="..\ZB.MOM.WW.OtOpcUa.OpcUaServer\ZB.MOM.WW.OtOpcUa.OpcUaServer.csproj"/>
|
|
<!-- #520 stage 4: the artifact-apply path feeds IDataPlaneAuthoritySink. Core already arrives
|
|
transitively via OpcUaServer, but a transitive reference is not a stated dependency — make it
|
|
explicit so removing it from OpcUaServer does not silently break this one. -->
|
|
<ProjectReference Include="..\..\Core\ZB.MOM.WW.OtOpcUa.Core\ZB.MOM.WW.OtOpcUa.Core.csproj"/>
|
|
<!--
|
|
Concrete OtOpcUa.Driver.* assemblies are loaded reflectively at runtime (Phase 6,
|
|
Task 41+) and intentionally NOT project-referenced here. The driver contracts live in
|
|
ZB.MOM.WW.OtOpcUa.Core.Abstractions, which Runtime picks up transitively through
|
|
ZB.MOM.WW.OtOpcUa.Configuration. Adding a direct reference would create a build-time
|
|
coupling and force every concrete driver to compile into Runtime's output, defeating
|
|
the reflective-load design.
|
|
-->
|
|
<ProjectReference Include="..\..\Core\ZB.MOM.WW.OtOpcUa.Core.Abstractions\ZB.MOM.WW.OtOpcUa.Core.Abstractions.csproj"/>
|
|
<ProjectReference Include="..\..\Core\ZB.MOM.WW.OtOpcUa.Core.AlarmHistorian\ZB.MOM.WW.OtOpcUa.Core.AlarmHistorian.csproj"/>
|
|
<!-- ITagUpstreamSource (the scripted-alarm engine's value-feed seam) lives here;
|
|
DependencyMuxTagUpstreamSource implements it so the host actor can push
|
|
DependencyValueChanged values into the engine. -->
|
|
<ProjectReference Include="..\..\Core\ZB.MOM.WW.OtOpcUa.Core.ScriptedAlarms\ZB.MOM.WW.OtOpcUa.Core.ScriptedAlarms.csproj"/>
|
|
<!-- IScriptLogPublisher lives in Core.Scripting; DpsScriptLogPublisher implements it
|
|
here so the concrete Akka DPS routing stays out of the Core layer. -->
|
|
<ProjectReference Include="..\..\Core\ZB.MOM.WW.OtOpcUa.Core.Scripting\ZB.MOM.WW.OtOpcUa.Core.Scripting.csproj"/>
|
|
<!-- IHistoryWriter / NullHistoryWriter live in Core.VirtualTags; VirtualTagHostActor forwards
|
|
historized VirtualTag results to it (H5c). The durable sink is wired by the host's DI. -->
|
|
<ProjectReference Include="..\..\Core\ZB.MOM.WW.OtOpcUa.Core.VirtualTags\ZB.MOM.WW.OtOpcUa.Core.VirtualTags.csproj"/>
|
|
</ItemGroup>
|
|
|
|
</Project>
|