Files
lmxopcua/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI
Joseph Doherty ce589569fe fix(hosts): pluralise the host count; live-verified on docker-dev
Live /run verification of #521 on the docker-dev rig (this repo has no bUnit, so a Razor
binding bug passes every unit test and review). Findings:

- The Hosts column renders all three states correctly against real drivers: "—" for the
  probe-less Calculation drivers, "1 host" for healthy Modbus/Sql, and a "1 / 1 DOWN" warn chip
  for the faulted OpcUaClient, whose tooltip reads
  "opc.tcp://10.100.0.35:50000: Unknown since 2026-07-30 08:51:23Z".
- That tooltip vindicates counting HostState.Unknown as degraded: the faulted driver's probe
  never completed a tick, so it reports Unknown — treating Unknown as healthy would have shown
  the one genuinely broken driver in the fleet as "1 host", fine.
- **The cross-mesh gRPC telemetry path is verified, not assumed.** site-a is a separate Akka
  mesh, so its telemetry crosses the Phase 5 gRPC stream the proto change targets, rather than
  central's in-mesh DPS. It initially showed "—", which is also what a broken mapper would
  produce; rebuilding site-a turned it into "1 host", proving the has_host_statuses presence
  flag round-trips over the real wire and that the earlier "—" was version skew.
- Mixed-version behaviour is therefore graceful by construction: an old node's payload has the
  flag clear, which decodes to null and renders "—" — not a crash, and not a false "0 hosts".
- The DropDriverHostStatusTable migration applied cleanly (the table is gone from the rig's
  ConfigDb; DriverInstance / DriverInstanceResilienceStatus intact).

Only fix needed: "1 hosts" → "1 host".

Claude-Session: https://claude.ai/code/session_015p7wGqy3YpZNCpDzTpGMKo
2026-07-30 04:55:10 -04:00
..