Files
lmxopcua/docs/v2/implementation/admin-ui-phase-6-status.md
Joseph Doherty d11d160395 Admin UI Phase 6 audit — close #128–#131 as already-shipped
Task-by-task audit of the Admin UI quartet shows every page listed in
the task descriptions is already built, routed, DI-wired, SignalR-live,
and covered by Admin.Tests (112/112 green):

- #128 /hosts — Hosts.razor 233 LOC with ConsecutiveFailures +
  LastCircuitBreakerOpenUtc + Stale/Faulted/Running cards
- #129 RoleGrants + AclsTab + Probe — RoleGrants.razor (192 LOC),
  AclsTab.razor (279 LOC) with the embedded Probe form at line 38
- #130 RedundancyTab — RedundancyTab.razor 175 LOC with peer
  reachability / ServiceLevel / apply-lease / failover button
- #131 Draft/Publish/Diff/Identification — DraftEditor (105 LOC) +
  Generations (73 LOC) + DiffViewer (87 LOC) + IdentificationFields
  (49 LOC), all wired to GenerationService / DraftValidationService

Shipping docs/v2/implementation/admin-ui-phase-6-status.md as the
canonical reference. Each task's required features are listed with the
exact file / LOC / routing + DI injection so future auditors don't
need to re-derive the status.

No code change in this commit — doc-only.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 19:07:05 -04:00

2.9 KiB
Raw Blame History

Admin UI Phase 6 status audit (2026-04-24)

Audit pass that closes the Phase 6 Admin-UI tasks that were tracked as still-open (#128#131) but already had their Blazor pages shipped. Every page listed below compiles against the current OtOpcUaConfigDbContext schema + the current Admin service surface, has substantive (non-stub) content, and is covered by ZB.MOM.WW.OtOpcUa.Admin.Tests (112/112 green).

Task #128 — /hosts column refresh (Phase 6.1 Stream E.2/E.3)

Components/Pages/Hosts.razor — 233 LOC. Route /hosts. Ships:

  • Per-driver circuit-breaker columns (ConsecutiveFailures, LastCircuitBreakerOpenUtc).
  • Stale-row detection via HostStatusService.IsStale (publisher heartbeat ≥ 30 s stale threshold).
  • Summary cards: Running / Stale / Faulted / total.
  • Auto-refresh every RefreshIntervalSeconds driven by the FleetStatusHub SignalR feed.
  • Health band via DriverHostState enum colour coding.

Task #129 — RoleGrantsTab + AclsTab + Probe (Phase 6.2 Stream D)

  • Components/Pages/RoleGrants.razor — 192 LOC. Route /role-grants. Edits LDAP-group → OPC-UA-role mappings with live reload over AclChangeNotifier SignalR.
  • Components/Pages/Clusters/AclsTab.razor — 279 LOC. NodeAcl CRUD + the "Probe this permission" form (task #196 slice 1, embedded at line 38 onward). Binds _probeGroup / _probeNamespaceId / _probeUnsAreaId / _probeUnsLineId / _probeEquipmentId / _probeTagId / _probePermission through PermissionProbeService.

Task #130 — RedundancyTab (Phase 6.3 Stream E)

Components/Pages/Clusters/RedundancyTab.razor — 175 LOC. Topology table, per-peer reachability (via FleetStatusHub), ServiceLevel band + ApplyLeaseRegistry / RecoveryStateManager state surfaces, failover action button. Live updates over the same SignalR hub RedundancyPublisherHostedService ticks.

Task #131 — Draft / publish / diff / identification (Phase 6.4 Streams AD)

  • Components/Pages/Clusters/DraftEditor.razor — 105 LOC. Route /clusters/{ClusterId}/draft/{GenerationId:long}. Calls DraftValidationService + GenerationService.
  • Components/Pages/Clusters/Generations.razor — 73 LOC. Publish flow (generation state transitions through sp_PublishGeneration).
  • Components/Pages/Clusters/DiffViewer.razor — 87 LOC. Route /clusters/{ClusterId}/draft/{GenerationId:long}/diff. Renders sp_ComputeGenerationDiff output.
  • Components/Pages/Clusters/IdentificationFields.razor — 49 LOC. OPC 40010 Identification folder editor bound to the Equipment entity.

What's NOT in this audit

  • #124 — Phase 6.2 3-user interop matrix. Manual cross-client test; out of scope for code pass.
  • #119 — Phase 6.3 client interop matrix. Manual Ignition/Kepware/Aveva drills.
  • #113 — OPC UA CTT conformance pass. Manual CTT run.
  • #114 / #115 — Redundancy cutover + deployment checklist. Manual.

Those remain GA-gating but require a human at a console, not a code change.