docs(galaxy): rewrite stale PR-4.W/legacy-host forward-ref comments to shipped reality (#13)

This commit is contained in:
Joseph Doherty
2026-06-18 11:52:19 -04:00
parent 07bd63f808
commit 9cf88e33bd
3 changed files with 18 additions and 16 deletions
@@ -49,11 +49,11 @@ public sealed class GalaxyDriver
private IGalaxyHierarchySource? _hierarchySource;
private GalaxyRepositoryClient? _ownedRepositoryClient;
// PR 4.2 — IGalaxyDataReader is the test seam for IReadable. PR 4.4 supplies the
// production implementation that wraps GalaxyMxSession's SubscribeBulk + StreamEvents
// pump; until then ReadAsync throws NotSupportedException when the reader is null
// (legacy-host backend handles reads in production via DriverNodeManager's
// capability-routing).
// IGalaxyDataReader is the test seam for IReadable. Production ReadAsync calls
// ReadViaSubscribeOnceAsync (SubscribeBulk + first-event wait + Unsubscribe) through
// the live GalaxyMxSession built by InitializeAsync; no legacy-host backend exists.
// When a test injects a reader via the internal ctor, that injected reader is used
// instead so capability flow can be exercised without a real gRPC round-trip.
private IGalaxyDataReader? _dataReader;
// PR 4.3 — IGalaxyDataWriter is the test seam for IWritable. Production wraps
@@ -90,9 +90,10 @@ public sealed class GalaxyDriver
// handles are added/removed (Driver.Galaxy-006 fix: HashSet.First() is unstable).
private readonly List<GalaxyAlarmSubscriptionHandle> _alarmSubscriptions = new();
// PR 4.W — production runtime owned by InitializeAsync. The driver builds these
// when it opens a real gw session; tests bypass them by injecting seams via the
// internal ctor.
// Production runtime owned by InitializeAsync (BuildProductionRuntimeAsync). The
// driver builds these when it opens a real gw session; tests bypass them by
// injecting seams via the internal ctor, which leaves both fields null and skips
// BuildProductionRuntimeAsync entirely.
private GalaxyMxSession? _ownedMxSession;
private MxGatewayClient? _ownedMxClient;
@@ -666,9 +667,10 @@ public sealed class GalaxyDriver
ObjectDisposedException.ThrowIf(_disposed, this);
ArgumentNullException.ThrowIfNull(builder);
// PR 4.3 — capture SecurityClassification per attribute. PR 4.W — also refresh
// the per-platform probe watcher's membership after discovery so newly-added
// $WinPlatform / $AppEngine objects start advising their ScanState attribute.
// Wrap the builder with a SecurityCapturingBuilder so each discovered attribute's
// SecurityClassification is recorded in _securityByFullRef for write-time routing.
// After discovery, SyncPlatformsAsync refreshes the probe watcher's membership so
// newly added $WinPlatform / $AppEngine objects start advising their ScanState attribute.
var capturingBuilder = new SecurityCapturingBuilder(builder, _securityByFullRef);
var source = _hierarchySource ??= BuildDefaultHierarchySource();
var discoverer = new GalaxyDiscoverer(source);
@@ -14,10 +14,9 @@ namespace ZB.MOM.WW.OtOpcUa.Driver.Galaxy;
/// <see cref="DriverTypeName"/> into live <see cref="GalaxyDriver"/> instances.
/// </summary>
/// <remarks>
/// The driver-type name <c>"GalaxyMxGateway"</c> is intentionally distinct from the
/// legacy proxy's <c>"Galaxy"</c> so both factories can be registered simultaneously
/// during parity testing (Phase 5). PR 4.W will add a server-side <c>Galaxy:Backend</c>
/// switch that materialises a Galaxy DriverInstance under one or the other type name.
/// <c>"GalaxyMxGateway"</c> is the sole Galaxy driver-type name. The legacy
/// <c>"Galaxy"</c> proxy type (retired in PR 7.2) no longer exists; there is no
/// server-side backend switch — every Galaxy DriverInstance row uses this type name.
/// </remarks>
public static class GalaxyDriverFactoryExtensions
{
@@ -18,7 +18,8 @@ namespace ZB.MOM.WW.OtOpcUa.Driver.Galaxy.Health;
/// (<see cref="HostConnectivityForwarder"/>) both feed this aggregator; the
/// <see cref="GalaxyDriver"/> consumes <see cref="Snapshot"/> from
/// <c>IHostConnectivityProbe.GetHostStatuses()</c> and re-raises
/// <see cref="OnHostStatusChanged"/> as the driver-level event (wired in PR 4.W).
/// <see cref="OnHostStatusChanged"/> as the driver-level event (v1's
/// <c>GalaxyProxyDriver.OnHostConnectivityUpdate</c> equivalent).
/// </remarks>
public sealed class HostStatusAggregator
{