From 42924b6fb0cd687a10eaf571f0b3ae87865d73a0 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Mon, 10 Aug 2026 16:31:25 -0400 Subject: [PATCH] =?UTF-8?q?ui(adminui):=20clusters=20pages=20=E2=80=94=20b?= =?UTF-8?q?utton=20groups,=20notice-alert=20tint,=20prose=20trim?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task 1 of the AdminUI UI sweep. Behavior-preserving: only wrappers, classes and prose change — every @onclick, disabled, href and arm->confirm flow is untouched. Buttons -> Bootstrap btn-group: - ClusterOverview page-head Edit cluster + Deployments pair - Edit-form feet (Save+Cancel grouped; ms-auto Delete stays outside): ClusterEdit, NodeEdit, NewCluster, AclEdit - ClusterRedundancy confirm-failover Confirm+Cancel (ms-2 dropped) - AclEdit permission-bundle presets: btn-link + middot separators become an outline-secondary btn-group Inline style="border-color:var(--alert)" (a no-op — that token is defined nowhere) replaced by the .notice-alert class: NodeEdit, AclEdit, ClusterEdit. Prose (unconditional documentation deleted; state banners/legends kept): - ClusterRedundancy: removed the stale RedundancyStateActor "on each admin node" block (cluster-scoped singleton on driver nodes since mesh Phase 6) which also hyperlinked an unserved repo path; trimmed the mesh-split explanation to its data-provenance first sentence - ClusterAcls: removed the Security:Acl:Enabled mode walkthrough and the grant/principal explanation (both in docs/security.md); kept the unresolved-chip decoder and trimmed the empty state to one sentence - AclEdit: removed its near-duplicate of that walkthrough - ClusterAudit: dropped the stale (F3) label and the EventId/CorrelationId dedup sentence; kept the page-size + Details-JSON caption - ClusterNamespaces / NamespaceEdit: retired-in-v3 placeholders reworded to past tense — Batches 2/3 shipped, /raw and /uns are live --- .../Components/Pages/Clusters/AclEdit.razor | 47 +++++-------------- .../Pages/Clusters/ClusterAcls.razor | 47 +------------------ .../Pages/Clusters/ClusterAudit.razor | 4 +- .../Pages/Clusters/ClusterEdit.razor | 14 +++--- .../Pages/Clusters/ClusterNamespaces.razor | 3 +- .../Pages/Clusters/ClusterOverview.razor | 2 +- .../Pages/Clusters/ClusterRedundancy.razor | 20 ++------ .../Pages/Clusters/NamespaceEdit.razor | 2 +- .../Pages/Clusters/NewCluster.razor | 12 +++-- .../Components/Pages/Clusters/NodeEdit.razor | 14 +++--- 10 files changed, 44 insertions(+), 121 deletions(-) diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/AclEdit.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/AclEdit.razor index 47928dde..c541f38d 100644 --- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/AclEdit.razor +++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/AclEdit.razor @@ -31,32 +31,6 @@ else if (!IsNew && _existing is null) } else { - - @@ -151,13 +125,12 @@ else
Bundles: - - · - - · - - · - +
+ + + + +
@@ -167,11 +140,13 @@ else
- @if (!string.IsNullOrWhiteSpace(_error)) {
@_error
} + @if (!string.IsNullOrWhiteSpace(_error)) {
@_error
}
- - Cancel +
+ + Cancel +
@if (!IsNew) { }
diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterAcls.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterAcls.razor index 365fb3ac..8c1c63f4 100644 --- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterAcls.razor +++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterAcls.razor @@ -21,49 +21,7 @@ } else { - -
- ACL rows grant principals specific NodePermissions on a scope - (the cluster, a namespace, an area, an equipment, a raw device, a tag). A principal is an API - key's principal, or the reserved anonymous principal that an - anonymous session authenticates as. -
The Scope target column resolves each row against the current configuration. A row marked unresolved points at nothing — it is shipped in every deployment artifact but authorizes nobody, and the deploy gate rejects it. Open it and @@ -75,10 +33,7 @@ else @if (_rows.Count == 0) {
- No ACL rows for this cluster. With Security:Acl:Enabled off, that - means writes and alarm acknowledges are refused while reads, browses, subscriptions and - history reads stay open to any admitted session. With it on, it means - every data-plane operation is refused here — a client can connect and see nothing. + No ACL rows for this cluster.
} else diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterAudit.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterAudit.razor index 84e4f849..7ae6baa5 100644 --- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterAudit.razor +++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterAudit.razor @@ -20,9 +20,7 @@ else {
- Latest @PageSize audit rows scoped to this cluster, newest first. EventId/CorrelationId - columns (F3) make cross-restart deduplication possible — Akka actors that retry an apply - won't insert duplicate rows. Details JSON is shown verbatim. + Latest @PageSize audit rows scoped to this cluster, newest first. Details JSON is shown verbatim.
diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterEdit.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterEdit.razor index 5f1fa180..6aa69f5f 100644 --- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterEdit.razor +++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterEdit.razor @@ -86,15 +86,17 @@ else @if (!string.IsNullOrWhiteSpace(_error)) { -
@_error
+
@_error
}
- - Cancel +
+ + Cancel +
diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterNamespaces.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterNamespaces.razor index 6cbf39a8..f8d1d407 100644 --- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterNamespaces.razor +++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterNamespaces.razor @@ -13,8 +13,7 @@
The Namespace entity has been removed. The v3 Raw/UNS split replaces it — raw driver folders and the unified namespace are managed on the /raw and - /uns pages, arriving in v3 Batch 2/3. This page is a placeholder so existing - links do not 404. + /uns pages. This page is a placeholder so existing links do not 404.
diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterOverview.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterOverview.razor index 0d73b35e..051ff6db 100644 --- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterOverview.razor +++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterOverview.razor @@ -26,7 +26,7 @@ else @_cluster.ClusterId @if (!_cluster.Enabled) { Disabled } -
+ diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterRedundancy.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterRedundancy.razor index 7f1741f8..9e11a1c9 100644 --- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterRedundancy.razor +++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterRedundancy.razor @@ -34,15 +34,6 @@ else -
- v2 redundancy is computed at runtime by RedundancyStateActor - on each admin node. The values below are the static configuration; the resolved live - ServiceLevel for each peer is broadcast on the - redundancy-state DPS topic and consumed by the OPC UA host's - ServerStatus publisher. See - docs/v2/Architecture-v2.md. -
-
Cluster redundancy
@@ -68,10 +59,7 @@ else

- Read live from cluster state on this node. The Primary shown is - this application Cluster's own Primary — since - the per-cluster mesh split, each cluster's redundant pair runs its own independent 2-node - Akka mesh and elects its own Primary. See docs/Redundancy.md. + Read live from cluster state on this node.

@@ -98,8 +86,10 @@ else
  • Its peer becomes Primary and advertises ServiceLevel 250.
  • Connected OPC UA clients re-select the new Primary.
  • - - +
    + + +
    } diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/NamespaceEdit.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/NamespaceEdit.razor index 3649e207..3e0c1597 100644 --- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/NamespaceEdit.razor +++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/NamespaceEdit.razor @@ -15,7 +15,7 @@
    The Namespace entity has been removed. The v3 Raw/UNS split replaces it — raw driver folders and the unified namespace are managed on the /raw and - /uns pages, arriving in v3 Batch 2/3. This editor no longer applies. + /uns pages. This editor no longer applies.
    diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/NewCluster.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/NewCluster.razor index 4b9a89a5..66ced051 100644 --- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/NewCluster.razor +++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/NewCluster.razor @@ -69,11 +69,13 @@ }
    - - Cancel +
    + + Cancel +
    diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/NodeEdit.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/NodeEdit.razor index a246c14b..d8eae5a4 100644 --- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/NodeEdit.razor +++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/NodeEdit.razor @@ -102,15 +102,17 @@ else @if (!string.IsNullOrWhiteSpace(_error)) { -
    @_error
    +
    @_error
    }
    - - Cancel +
    + + Cancel +
    @if (!IsNew) {