docs(health): resolve spec/contract/gaps consistency (review fixes)

Applies canonical resolutions for eight settled decisions:
- GAPS: remove three stale "Decisions still open" bullets (#1 IActiveNodeGate placement, #2 GrpcChannel type, #3 OtOpcUaCompat named constant)
- Shared contract: AkkaClusterHealthCheck, ActiveNodeHealthCheck constructors take IServiceProvider (lazy ActorSystem, Degraded-when-not-ready)
- Shared contract: AkkaActiveNodeGate takes IServiceProvider; reads SelfMember+leader directly, null-guarded; does not proxy ActiveNodeHealthCheck
- Shared contract: DatabaseHealthCheckOptions.Probe renamed to ProbeQuery; consumer matrix updated
- Shared contract: settled AddZbHealthChecks open question removed (spec §5 is per-project AddHealthChecks)
- SPEC §2.2: OtOpcUaCompat Leaving/Exiting cell updated from — to Degraded + footnote; §2.3 startup-safety note added
- README: status line corrected from "built and tested" to "scaffolded … implementation is follow-on (task #7)"; IActiveNodeGate "left per-project" bullet removed
- OtOpcUa current-state: AddZbHealthChecks → AddHealthChecks().AddCheck<...>(); IClusterRoleInfo note reframed as accepted trade-off
- ScadaBridge current-state: IActiveNodeGate bullet rewritten — interface moves to ZB.MOM.WW.Health on adoption, InboundApiEndpointFilter references shared interface
This commit is contained in:
Joseph Doherty
2026-06-01 06:33:42 -04:00
parent 16540b3001
commit 07d5907258
6 changed files with 71 additions and 38 deletions
@@ -172,9 +172,10 @@ regardless of shared-library adoption.
- `HealthMonitoring/` domain pipeline (`SiteHealthCollector`, `CentralHealthAggregator`, etc.) —
entirely per-project, no shared-library equivalent.
- `IActiveNodeGate` from the `InboundAPI` project is the contract the `InboundApiEndpointFilter`
depends on; it can be implemented by the shared `ActiveNodeHealthCheck` backing service but the
interface definition stays in the InboundAPI project (or moves to a shared abstractions package).
- `IActiveNodeGate` moves from the `InboundAPI` project to `ZB.MOM.WW.Health` (core package) on
adoption. `InboundApiEndpointFilter` references the shared interface; `AkkaActiveNodeGate`
(from `ZB.MOM.WW.Health.Akka`) becomes the singleton implementation registered in DI. The
interface definition is no longer owned by the `InboundAPI` project.
- The Central UI's `/monitoring/health` endpoint — powered by `CentralHealthAggregator`, not by
ASP.NET health checks.
- The comment at `Program.cs:217221` explains the readiness design decision (standby nodes are