diff --git a/docs/plans/2026-07-21-per-cluster-mesh-design.md b/docs/plans/2026-07-21-per-cluster-mesh-design.md index 89f1e22e..addeb661 100644 --- a/docs/plans/2026-07-21-per-cluster-mesh-design.md +++ b/docs/plans/2026-07-21-per-cluster-mesh-design.md @@ -165,8 +165,14 @@ Mirror ScadaBridge's shape, adapted to OtOpcUa's existing substrate: observability topics with one stream contract carrying a `oneof` event — additive-only field evolution, contract-locked by test. -Deliberately **not** copied: their transient-only central alarm cache and site-local-primary storage -(see §6.1), and their unauthenticated transports (§6.3). +**Copied:** their node-local configuration store fed by fetch-and-cache (§6.1), their oldest-Up +active-node rule (§4), their two-node keep-oldest posture including its acknowledged outage gap +(§6.2), and their unauthenticated inter-cluster transports (§6.3). + +**Deliberately not copied:** their *transient-only* central alarm cache. OtOpcUa persists alarm +history centrally through the historian, and Phase 2's replicated store-and-forward buffer already +guarantees delivery across a failover — so there is no reason to adopt a design whose stated +trade-off is that a new active node re-seeds alarm state from scratch. ## 6. Decisions (settled 2026-07-21) @@ -258,7 +264,7 @@ deserves its own live gate. blast radius raised. - **`DbHealthProbeActor` feeds a client-visible value.** Removing the driver-side DB connection changes what ServiceLevel means on those nodes; that is an interop-visible change, not internal. -- **The rig currently models the topology that would be abolished.** Phase 4 rewrites +- **The rig currently models the topology that would be abolished.** Phase 6 rewrites `docker-dev/docker-compose.yml` substantially, and every live gate that depends on it. - **Losing gossip loses free fleet-wide observability.** Seven AdminUI panels are fed by DPS today; each needs an explicit stream and a reconnect story.