From 2791ab5810d9d68f00a9828feed07dfa9858d23c Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Wed, 15 Jul 2026 15:23:32 -0400 Subject: [PATCH] =?UTF-8?q?docs(#420):=20final=20reconciliation=20?= =?UTF-8?q?=E2=80=94=20alarms-over-gateway=20feature=20complete;=20C.1=20s?= =?UTF-8?q?uperseded?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #420 (filed 2026-05-01 as '4 inert scaffolds + D.1 smoke') is stale. Current master + the mxaccessgw sibling repo show the feature landed on both sides: - mxaccessgw A.2/A.4: native alarms served via the wnwrap consumer (WnWrapAlarmConsumer over WNWRAPCONSUMERLib.wwAlarmConsumerClass) + FailoverAlarmConsumer + AlarmDispatcher; StreamAlarms active-alarm snapshot (20 alarms verified live). The WM_APP-pump premise this issue was written against was ruled out by the 2026-05-01 probes; the design pivoted to wnwrap. - mxaccessgw A.3: NotWiredAlarmRpcDispatcher gone (only in generated proto); ack routes MxGatewayClient.AcknowledgeAlarmAsync -> AlarmClient.AlarmAckByGUID. - lmxopcua: GalaxyDriver : IAlarmSource wires GatewayGalaxyAlarmFeed (-> OnAlarmEvent, native metadata incl. operator-comment) + inbound ack via GatewayGalaxyAlarmAcknowledger; native feed live-proven by GatewayGalaxyAlarmFeedLiveTests. - C.1 (SdkAlarmHistorianWriteBackend / aahClientManaged): SUPERSEDED. The whole Wonderware sidecar was retired; alarm-history writes cut over to the HistorianGateway (GatewayAlarmHistorianWriter, SendEvent path), live-verified 2026-07-15 (R2-06/R2-08, 6/6). The target no longer exists in the tree. Updated the alarms-over-gateway.md banner (final reconciliation) + the alarms-d1-smoke-artifact.md status note. Sole residual = a Windows-parity-rig running-server OPC UA A&C round-trip (needs live Galaxy + human IDE). --- docs/plans/alarms-d1-smoke-artifact.md | 13 +++++++++++-- docs/plans/alarms-over-gateway.md | 26 ++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/docs/plans/alarms-d1-smoke-artifact.md b/docs/plans/alarms-d1-smoke-artifact.md index 75fb2e4f..de87b683 100644 --- a/docs/plans/alarms-d1-smoke-artifact.md +++ b/docs/plans/alarms-d1-smoke-artifact.md @@ -1,7 +1,16 @@ # Alarms D.1 — smoke artifact -> **Status (2026-05-29): alarm-source leg VERIFIED. Historian-write leg still -> pending the Windows sidecar + live AVEVA Historian.** +> **Status (2026-05-29): alarm-source leg VERIFIED.** ~~Historian-write leg still +> pending the Windows sidecar + live AVEVA Historian.~~ +> +> ✅ **UPDATE 2026-07-15 (Gitea #420): the historian-write leg is no longer a +> Wonderware-sidecar concern — it was cut over to the HistorianGateway.** Alarm +> events now write through `GatewayAlarmHistorianWriter` (the gateway `SendEvent` +> path behind `SqliteStoreAndForwardSink`), and alarm `SendEvent`→`ReadEvents`+ack +> was **live-verified 2026-07-15** against the real AVEVA historian (R2-06/R2-08, +> 6/6 green). The bespoke Wonderware sidecar + `SdkAlarmHistorianWriteBackend` +> were retired. So this D.1 artifact's alarm-source leg is verified and the +> write-back leg is superseded-and-verified via the gateway. > > **Re-confirmed 2026-05-31** against the same gateway (`http://10.100.0.48:5120`): > the Skip-gated live test passed again, pulling a native `Raise` transition diff --git a/docs/plans/alarms-over-gateway.md b/docs/plans/alarms-over-gateway.md index c61ff3d8..bbdd0f5c 100644 --- a/docs/plans/alarms-over-gateway.md +++ b/docs/plans/alarms-over-gateway.md @@ -29,6 +29,32 @@ > → AVEVA Historian write-back live smoke (C.1's `Live_*` leg) and a full > running-server → OPC UA A&C round-trip — both need the Windows parity rig. > +> ✅ **FINAL RECONCILIATION 2026-07-15 (Gitea #420 closed) — feature complete +> on both sides; the C.1 leg is SUPERSEDED, not pending.** Current-master state: +> **(A.2/A.4)** the mxaccessgw worker serves native MxAccess alarms via the +> **wnwrap consumer** (`WnWrapAlarmConsumer` wrapping +> `WNWRAPCONSUMERLib.wwAlarmConsumerClass`) + `FailoverAlarmConsumer` + +> `AlarmDispatcher` — the design landed after the 2026-05-01 probes ruled out +> the WM_APP-pump premise this plan/issue was written against; active-alarm +> snapshot serves `StreamAlarms` (20 alarms verified live). **(A.3)** +> `NotWiredAlarmRpcDispatcher` is gone (only in generated proto); ack routes +> `MxGatewayClient.AcknowledgeAlarmAsync` → gateway `AlarmClient.AlarmAckByGUID`. +> **(lmxopcua)** `GalaxyDriver : IAlarmSource` wires `GatewayGalaxyAlarmFeed` +> (→ `OnAlarmEvent`, native metadata incl. operator-comment) + inbound ack via +> `GatewayGalaxyAlarmAcknowledger`; native feed live-proven by +> `GatewayGalaxyAlarmFeedLiveTests`. **(C.1 — SUPERSEDED)** the whole +> **Wonderware historian sidecar was retired** and the alarm-history write path +> cut over to the **HistorianGateway** (`GatewayAlarmHistorianWriter`, the +> gateway `SendEvent` path behind `SqliteStoreAndForwardSink`); alarm +> `SendEvent`→`ReadEvents`+ack was **live-verified 2026-07-15** against the real +> AVEVA historian (R2-06/R2-08, 6/6). So `SdkAlarmHistorianWriteBackend` / +> `aahClientManaged` no longer exist in the tree — the C.1 acceptance item is +> obsolete, not outstanding. **Sole residual:** a full running-server → OPC UA +> A&C round-trip on the Windows parity rig (Part 9 Acknowledge from a live OPC UA +> client → gateway → AVEVA, with a real Galaxy alarm raised via the System +> Platform IDE) — needs live Galaxy + human IDE interaction; any final mxaccessgw +> integration-test polish is tracked in that repo. +> > ⚠️ **[SUPERSEDED — kept for history] Worker-side native alarm > subscription blocked on a dev-rig finding (2026-04-30):** the MXAccess > COM Toolkit at