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
This commit is contained in:
Joseph Doherty
2026-07-30 04:55:10 -04:00
parent cbb882293b
commit ce589569fe
@@ -217,7 +217,7 @@ else
} }
else if (d.DegradedHosts.Count == 0) else if (d.DegradedHosts.Count == 0)
{ {
<span class="text-muted small">@d.HostStatuses.Count hosts</span> <span class="text-muted small">@d.HostStatuses.Count @(d.HostStatuses.Count == 1 ? "host" : "hosts")</span>
} }
else else
{ {