From 16ddddb2eb03dc883aeb48600a56ac4fd15af179 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Fri, 13 Nov 2026 08:09:37 -0500 Subject: [PATCH] docs(615): G5 signed off by the Fleet Admin; every #615 gate complete, #615 closed --- docs/plans/v2-ga-lab-gates-plan.md | 4 +++- docs/v2/v2-release-readiness.md | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/plans/v2-ga-lab-gates-plan.md b/docs/plans/v2-ga-lab-gates-plan.md index 1ae7f2a00..27e2e79e4 100644 --- a/docs/plans/v2-ga-lab-gates-plan.md +++ b/docs/plans/v2-ga-lab-gates-plan.md @@ -164,6 +164,8 @@ The deployment checklist is a separate document covering: **Sign-off party**: Fleet Admin (operator). Not automatable. +> **SIGNED OFF 2026-11-13** by the owner as Fleet Admin (#615). + Record sign-off as a comment on the v2 release issue. --- @@ -307,7 +309,7 @@ Record: client name + version, OtOpcUa git SHA, test date. | G2 | `dotnet test ZB.MOM.WW.OtOpcUa.slnx` | >= 1159 passing, <= 1 failure | Dev | | G3 | Audit PR list in release-readiness.md | All blockers show CLOSED | Dev | | G4 | Audit driver table | All 8 drivers listed as shipped | Dev | -| G5 | Run deployment checklist doc | All items checked; Fleet Admin signs off | Fleet Admin | +| G5 | Run deployment checklist doc | All items checked; Fleet Admin signs off — **SIGNED OFF 2026-11-13** | Fleet Admin | | G6 | Browse/read/subscribe against live Galaxy | Good quality, non-empty tree | Dev (dev box) | | G7 | FOCAS CNC smoke — see live-hardware runbook | Session open, Good quality reads | Dev + lab hardware | | G8 | CTT profile run against live endpoint | **Waived 2026-11-13 (owner)** | — | diff --git a/docs/v2/v2-release-readiness.md b/docs/v2/v2-release-readiness.md index da534d90c..1074c2d5d 100644 --- a/docs/v2/v2-release-readiness.md +++ b/docs/v2/v2-release-readiness.md @@ -10,7 +10,7 @@ > near the end of the file are still live — see `deferment.md` §5. > **Last updated**: 2026-04-24 (Phase 5 driver complement closed — AB CIP, AB Legacy, TwinCAT, FOCAS all shipped; FOCAS Tier-C retired for a pure-managed in-process client) -> **Status**: **RELEASE-READY (code-path)** for v2 GA. All three original code-path release blockers remain closed. Phase 5 is now complete. Remaining work is the deployment checklist sign-off (G5, Fleet Admin) + hardening follow-ups; G6 and G9 passed (2026-11-12/13) and G8 (CTT) was waived by the owner (2026-11-13); see exit-criteria checklist below. +> **Status**: **RELEASE-READY (code-path)** for v2 GA. All three original code-path release blockers remain closed. Phase 5 is now complete. The #615 lab/operator gates are complete: G5 signed off by the Fleet Admin and G6/G9 passed (2026-11-12/13), and G8 (CTT) was waived by the owner (2026-11-13); hardening follow-ups remain; see exit-criteria checklist below. This doc is the single view of where v2 stands against its release criteria. Update it whenever a deferred follow-up closes or a new release blocker is discovered. @@ -135,7 +135,7 @@ v2 GA requires all of the following: - [ ] `dotnet test ZB.MOM.WW.OtOpcUa.slnx` passes with ≤ 1 known-flake failure. - [x] Release blockers listed above all closed. - [x] Phase 5 driver complement shipped (Galaxy, Modbus, S7, OpcUaClient, AbCip, AbLegacy, TwinCAT, FOCAS). -- [ ] Production deployment checklist (separate doc) signed off by Fleet Admin. +- [x] Production deployment checklist (separate doc) signed off by Fleet Admin. **G5 SIGNED OFF 2026-11-13** by the owner as Fleet Admin (#615). - [x] At least one end-to-end integration run against the live Galaxy on the dev box succeeds. **G6 PASS 2026-11-12** (#615): windev test Galaxy `DEV` through mxaccessgw `447070a5`; browse (raw + UNS), read, subscribe, write and readback, and native alarm → Part 9 → ack (confirmed in Galaxy) → clear. Evidence: `docs/drivers/evidence/galaxy-g6-e2e-2026-11-12.md`. Found #895 (fixed, `e113faf5`) and #896 (open). DeployWatcher not exercised (no headless Galaxy redeploy). - [ ] FOCAS live-CNC wire-level smoke (#54) runs clean against a real FANUC control. - [x] ~~OPC UA conformance test (CTT or UA Compliance Test Tool) passes against the live endpoint.~~ **G8 WAIVED by the owner 2026-11-13** (#615): no CTT run is required for v2 GA. @@ -143,6 +143,7 @@ v2 GA requires all of the following: ## Change log +- **2026-11-13** — **G5 (#615) signed off** by the owner as Fleet Admin. With G6/G9 passed and G8 waived, every #615 gate is complete and #615 is closed. - **2026-11-13** — **G9 (#615) PASS and G8 waived.** The owner approved `otopcua-cli` as the G9 client and waived the CTT (G8) for GA. G9 ran on an isolated 2-node pair (`otopcua-g9`, `master` `003c7f89`, redundancy mode `Unset` as deployed). ServiceLevel 250/240, a follower stop left the Primary at 250, and ServerArray lists both URIs. On a graceful Primary stop the CLI's `-F` sessions failed over in about 11 s. On a `docker kill` of the Primary they failed over within 1 s, with a ~2 s data gap and no Bad values; the survivor reached 250 at +44 s. The returning node settled at 240 with no failback. A4 (`RedundancySupport`) and A5b (`ServerUriArray`) are unmet under `Unset` and met under `Warm` (#717, closed; enabling Warm is #907). The run found a CLI defect: array values printed as `System.String[]`, fixed by `ValueFormatter`. Evidence: `docs/plans/evidence/2026-11-13-615-g9/RESULTS.md`. G5 (Fleet Admin sign-off) is the only open exit criterion. - **2026-11-12** — **G6 (#615) PASS: end to end against a live Galaxy.** A local fused admin+driver Host (OtOpcUa `00a5be26`) ran the `GalaxyMxGateway` driver against the windev test Galaxy `DEV` (System Platform 2020, 129 deployed objects) through mxaccessgw `447070a5`. Every plan §G6 criterion was met through both the raw (`ns=2;s=`) and UNS (`ns=3;s=Area/Line/Equipment/Signal`) NodeIds: non-empty browse mirroring area → object, `Good` reads, subscribe notifications inside 1 s, no `BadTimeout`. The only `BadNoCommunication` was a planned driver respawn on redeploy. Extra steps also passed: write and readback (also verified through an independent gateway session; anonymous negative control `BadUserAccessDenied`), and a Galaxy alarm raised by an OPC UA write surfacing as a Part 9 condition. That condition was acked over OPC UA and the ack was confirmed in Galaxy (`.Acked=True`, `.AckMsg` = the comment), then cleared. Severity 750 for AVEVA priority 500 (#887 band; data point for #894). The live run found **#895**: a native alarm authored the AdminUI-picker way (`attributeRef tag.Attr`) never went active, because the feed reports `Galaxy!Area.tag.Attr`. Fixed in `e113faf5` and re-verified live. It also found **#896** (open): the UNS mirror of an alarm-bearing tag is a dead `BadWaitingForInitialData` variable. DeployWatcher on a Galaxy redeploy was not run: no IDE/GRAccess on windev, and the Galaxy was shared with another agent. Evidence: `docs/drivers/evidence/galaxy-g6-e2e-2026-11-12.md`. - **2026-05-26** — Gap-closeout pass. `OpcUaApplicationHost.PopulateServerArray` populates `Server.ServerArray` (NodeId `i=2254`) with self + `OpcUaApplicationHostOptions.PeerApplicationUris`, giving non-transparent peer URI visibility through the standard discovery surface. New `tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests/` IT project (`DualEndpointTests`) validates with two real `OpcUaApplicationHost` instances on loopback + a live OPCFoundation client `Session` read. CI `v2-ci.yml` `integration:` job converted to a matrix across `Host.IntegrationTests` + `OpcUaServer.IntegrationTests`. Per-role appsettings overlays shipped (`appsettings.admin.json` / `appsettings.driver.json` / `appsettings.admin-driver.json`) — `Program.cs:33-35` loads by alphabetical-joined role suffix. `FailoverScenarioTests` → `FailoverDuringDeployTests` rename. Stale empty `src/Server/{Server,Admin}` + `tests/Server/{Server.Tests,Admin.Tests,Admin.E2ETests}` directories deleted (no source, absent from `.slnx`).