docs(galaxy): fix stale SystemPlatform/alias/Galaxy doc comments (review follow-up)

Resolves the code-review notes on 95be607a + the AdminUI bundle: the
EnsureVariable docs (IOpcUaAddressSpaceSink, OtOpcUaNodeManager) and the Tag
entity doc no longer say 'Galaxy / SystemPlatform / alias'; the DriverHostActor
ForwardToMux comment now states the real equipment-tag value-routing gap (the
FullName→NodeId 'live values' milestone) instead of claiming Galaxy values map
straight through.
This commit is contained in:
Joseph Doherty
2026-06-12 22:00:52 -04:00
parent b4b7cd7d0f
commit 5edea52bd7
4 changed files with 12 additions and 11 deletions
@@ -55,7 +55,7 @@ public interface IOpcUaAddressSpaceSink
/// Ensure a Variable node exists at <paramref name="variableNodeId"/>, parented under
/// <paramref name="parentFolderNodeId"/> (or the namespace root when null). Created with
/// Bad quality + null value; subsequent <see cref="WriteValue"/> calls update both.
/// Used by <c>Phase7Applier</c> to materialise Galaxy / SystemPlatform tags ahead of any
/// Used by <c>Phase7Applier</c> to materialise equipment-namespace tags ahead of any
/// driver-side subscribe so OPC UA clients can browse them. Idempotent.
/// </summary>
/// <param name="variableNodeId">The OPC UA node ID for the variable.</param>
@@ -4,10 +4,9 @@ namespace ZB.MOM.WW.OtOpcUa.Configuration.Entities;
/// <summary>
/// One canonical tag (signal) in a cluster's generation. <see cref="EquipmentId"/> set ⟺ the
/// tag participates in the Equipment tree, regardless of the driver's namespace kind. A
/// <c>GalaxyMxGateway</c>-bound equipment tag is an <em>alias</em> — a Galaxy attribute surfaced
/// under a UNS name, with its Galaxy reference carried in <c>TagConfig.FullName</c>.
/// <see cref="EquipmentId"/> is NULL for SystemPlatform mirror tags (FolderPath-scoped).
/// tag participates in the Equipment tree. A <c>GalaxyMxGateway</c>-bound equipment tag is an
/// ordinary equipment tag (GalaxyMxGateway is a standard Equipment-kind driver) that carries its
/// Galaxy attribute reference in <c>TagConfig.FullName</c> — there is no separate alias concept.
/// </summary>
public sealed class Tag
{
@@ -626,8 +626,8 @@ public sealed class OtOpcUaNodeManager : CustomNodeManager2
/// Ensure a Variable node exists at <paramref name="variableNodeId"/> parented under
/// <paramref name="parentFolderNodeId"/> (or root when null). Initial value=null, quality=Bad,
/// timestamp=epoch — <see cref="WriteValue"/> fills these in once driver data flows.
/// Idempotent. Materialises Galaxy / SystemPlatform tags so they're browseable before the
/// Galaxy driver issues SubscribeBulk.
/// Idempotent. Materialises equipment-namespace tags so they're browseable before drivers
/// issue SubscribeBulk.
/// </summary>
/// <param name="variableNodeId">The node identifier of the variable.</param>
/// <param name="parentFolderNodeId">The node identifier of the parent folder; null to use the namespace root.</param>
@@ -383,10 +383,12 @@ public sealed class DriverHostActor : ReceiveActor, IWithTimers
// tags registered); production binds the mux via the RuntimeActors extension.
_dependencyMux?.Tell(msg);
// Also push the value to the OPC UA sink so the materialised variable reflects live data
// instead of staying BadWaitingForInitialData. For SystemPlatform / Galaxy tags the variable
// NodeId is exactly the dot-form MXAccess reference the driver subscribed to, so the published
// FullReference maps straight onto the sink NodeId.
// Also push the value to the OPC UA sink. NOTE: equipment-tag variables are materialised with
// folder-scoped NodeIds (EquipmentId/FolderPath/Name), while the driver publishes keyed by
// FullReference (the tag's FullName). The value therefore only lands on the variable once the
// FullName→NodeId routing — the equipment-tag "live values" milestone — is wired; until then
// the variable stays BadWaitingForInitialData. (The retired SystemPlatform mirror matched only
// because its NodeId WAS the FullName.)
_opcUaPublishActor?.Tell(new ZB.MOM.WW.OtOpcUa.Runtime.OpcUa.OpcUaPublishActor.AttributeValueUpdate(
msg.FullReference, msg.Value, msg.Quality, msg.TimestampUtc));
}