docs(ga): G7 PASS - FOCAS live CNC on vd03 (Makino 31i-B), axis tag added via owner-approved deploy e9fbe63e
v2-ci / unit-tests (push) Waiting to run

This commit is contained in:
Joseph Doherty
2026-11-13 10:32:09 -05:00
parent 1862fab671
commit f93a1179dd
6 changed files with 76 additions and 5 deletions
@@ -1,7 +1,8 @@
# G7: FOCAS live-CNC smoke on a real FANUC control (2026-11-13)
**Result: PASS on every criterion that can be checked from here. Two exceptions: an axis position (vd03 has no axis
tags authored) and the comparison against the control panel (needs a person at the machine).**
**Result: PASS.** Every criterion passes. An axis tag was added to vd03 for the axis criterion (see "Axis position"
below). The one item not done is the comparison of the identity values against the control panel, which needs a person
at the machine.
## Setup
@@ -17,9 +18,29 @@ tags authored) and the comparison against the control panel (needs a person at t
|---|---|---|
| The wire client opens a FOCAS2 session | **PASS.** The driver has served Good values since boot (12:28:45Z); every value below comes from that live session. | `reads.txt` |
| Identity nodes return non-null values | **PASS** (non-null). `SeriesNumber` G431, `Version` 22.0, `CncType` 31, `MtType` MM, `MaxAxes` 32, `AxisCount` 7, all Good. **Not compared with the control panel** (needs a person at the machine). G431 matches the series recorded for this control in the 2026-10 wire-decode work. | `reads.txt` |
| An axis position reads Good with a plausible value | **NOT CHECKED HERE.** vd03's configuration authors no `Axes/` tags, and adding one would mean a deploy to DEV. Plausible Good values from the same live session: `Spindle/S1/Load` 56.7 % and `MotorSpeedPct` (moving), `Timers/CuttingSeconds`, `OperationMode/ModeText` AUTO, `Program/Name` `//CNC_MEM/USER/LIBRARY/O1111`. The position decode is pinned by real-31i-B captures from this machine (`docs/drivers/FOCAS.md` §"Wire decode corrections (2026-10)"). | `reads.txt` |
| An axis position reads Good with a plausible value | **PASS after the deploy below** (`Axes/X/AbsolutePosition` = 280.1574, Good). Before it: vd03's configuration authors no `Axes/` tags, and adding one would mean a deploy to DEV. Plausible Good values from the same live session: `Spindle/S1/Load` 56.7 % and `MotorSpeedPct` (moving), `Timers/CuttingSeconds`, `OperationMode/ModeText` AUTO, `Program/Name` `//CNC_MEM/USER/LIBRARY/O1111`. The position decode is pinned by real-31i-B captures from this machine (`docs/drivers/FOCAS.md` §"Wire decode corrections (2026-10)"). | `reads.txt` |
| A subscription delivers ≥ 3 updates within 5 s | **PASS:** 6 Good updates of `Spindle/S1/Load` in 5 s (13:15:16–13:15:21Z). | `sub5.txt` |
| No `EW_SOCKET` (-1) / `EW_HANDLE` (-7) during a 2-minute soak | **PASS.** Soak 13:15:22–13:17:27Z: a recursive subscription on the driver's 22 variables got 272 notifications, and 21 variables were Good throughout. The 22nd, `Program/BlockCount`, read `BadNoData` throughout (the control does not report it; the same in every deploy record). **0 `EW_SOCKET`/`EW_HANDLE` in the whole day's server log.** The only ERR/WRN lines in the window come from these reads connecting by IP ("domain not listed in the server certificate") and the known DEV mesh-PSK warning. | `soak-summary.txt`, `soak-notifications.txt`, `vd03-log-window.txt` |
Record: CNC FANUC 31i-B (Makino Z-34184), series G431, version 22.0; test date 2026-11-13; OtOpcUa `76e73e7d`
(deployed); client `otopcua-cli` from `c9bc358d`.
## Axis position (owner-approved DEV config deploy, 2026-11-13 15:30Z)
The owner approved adding an axis tag to vd03 so the axis criterion could be checked directly.
- **Authoring:** in vd03's AdminUI `/raw`: device `z-34184` → **Browse device** (a live FOCAS browse of the control
listed axes X, Y, Z, B, C, AA6, AA7) → selected `FOCAS/z-34184/Axes/X/AbsolutePosition` with "Create matching
tag-groups" → **Add 1 tag**.
- **Deploy:** `e9fbe63e`, revision `f902e9409d79…`, sealed 15:30:13Z. It also cleared the standing "Configuration
drift" chip left by the #903 edit-and-revert check.
- **Apply:** server log `AddressSpaceApplier: applied plan (kind="PureAdd", added=3, removed=0, changed=0, …
rebuild=false)` and `raw subtree materialised (containers=2, tags=1, subset=true, failed=0)`. This was a surgical
add: no rebuild, existing subscriptions untouched (`vd03-log-deploy-excerpt.txt`).
- **Read:** `ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Axes/X/AbsolutePosition` = **280.1574, Good**, 11 s after the
seal. ServiceLevel stayed 250.
- **Subscription:** 30 s, the axis held still (one Good notification, `axis-sub30.txt`). The 5-update subscribe
criterion is met by `Spindle/S1/Load` above.
- **Re-check of all 23 variables:** 22 Good + `BlockCount` `BadNoData`, as before (`after-deploy-summary.txt`).
- **Log:** still 0 `EW_SOCKET`/`EW_HANDLE` for the day. The only ERR lines after the deploy are these reads by IP.
The tag is left in place on vd03 as a permanent axis-position monitor.
@@ -0,0 +1,32 @@
==================== SUMMARY ====================
Total subscribed: 23
Ever went BAD during window: 1
NEVER went bad (suspect): 22
Last status GOOD: 22
Last status NOT-GOOD: 1
No update received at all: 0
--- Nodes that NEVER received a bad-quality update (suspect) ---
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Identity/AxisCount
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Identity/CncType
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Identity/MaxAxes
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Identity/MtType
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Identity/SeriesNumber
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Identity/Version
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/OperationMode/Mode
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/OperationMode/ModeText
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Program/MainNumber
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Program/Name
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Program/Number
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Program/ONumber
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Program/Sequence
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Spindle/S1/Load
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Spindle/S1/MotorSpeedPct
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Timers/CuttingSeconds
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Timers/CycleSeconds
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Timers/OperatingSeconds
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Timers/PowerOnSeconds
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Axes/X/AbsolutePosition
ns=2;s=focas-z-34184/z-34184/parts-count
ns=2;s=focas-z-34184/z-34184/parts-required
@@ -0,0 +1,10 @@
Subscribed to 1/1 nodes (interval: 500ms). Press Ctrl+C to stop and print summary.
[11/13/2026 15:30:13] ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Axes/X/AbsolutePosition = 280.1574 (Good [0x00000000])
==================== SUMMARY ====================
Total subscribed: 1
Ever went BAD during window: 0
NEVER went bad (suspect): 1
Last status GOOD: 1
Last status NOT-GOOD: 0
No update received at all: 0
@@ -0,0 +1,7 @@
2026-11-13 10:30:13.208 -05:00 [INF] AddressSpaceApplier: applied plan (kind="PureAdd", added=3, removed=0, changed=0, surgicalRawTags=0, unsRefDeltas=0, renamedFolders=0, rebuild=false)
2026-11-13 10:30:13.208 -05:00 [INF] AddressSpaceApplier: hierarchy materialised (areas=1, lines=1, equipment=1, failed=0)
2026-11-13 10:30:13.208 -05:00 [INF] AddressSpaceApplier: raw subtree materialised (containers=2, tags=1, subset=true, failed=0)
2026-11-13 10:30:23.901 -05:00 [ERR] The domain 'opc.tcp://10.220.157.247:4840/OtOpcUa' is not listed in the server certificate.
2026-11-13 10:30:25.383 -05:00 [ERR] The domain 'opc.tcp://10.220.157.247:4840/OtOpcUa' is not listed in the server certificate.
2026-11-13 10:30:33.433 -05:00 [ERR] The domain 'opc.tcp://10.220.157.247:4840/OtOpcUa' is not listed in the server certificate.
2026-11-13 10:31:04.723 -05:00 [ERR] The domain 'opc.tcp://10.220.157.247:4840/OtOpcUa' is not listed in the server certificate.
+1 -1
View File
@@ -311,6 +311,6 @@ Record: client name + version, OtOpcUa git SHA, test date.
| G4 | Audit driver table | All 8 drivers listed as shipped | Dev |
| 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 |
| G7 | FOCAS CNC smoke — see live-hardware runbook | Session open, Good quality reads — **PASS 2026-11-13** (vd03, Makino 31i-B) | Dev + lab hardware |
| G8 | CTT profile run against live endpoint | **Waived 2026-11-13 (owner)** | — |
| G9 | Redundancy cutover runbook | A-block + B2 pass with >= 1 client — **PASS 2026-11-13** (`otopcua-cli`) | Dev + two instances |
+2 -1
View File
@@ -137,12 +137,13 @@ v2 GA requires all of the following:
- [x] Phase 5 driver complement shipped (Galaxy, Modbus, S7, OpcUaClient, AbCip, AbLegacy, TwinCAT, FOCAS).
- [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] FOCAS live-CNC wire-level smoke (#54) runs clean against a real FANUC control. **G7 PASS 2026-11-13** on the deployed DEV server (vd03, `76e73e7d`) against the Makino Z-34184 FANUC 31i-B (series G431, version 22.0). Identity, axis `X/AbsolutePosition` (added by owner-approved deploy `e9fbe63e`, a surgical PureAdd), 6 updates in 5 s, and a 2-minute soak with 0 `EW_SOCKET`/`EW_HANDLE`. The identity values were not compared against the control panel. Evidence: `docs/drivers/evidence/focas-g7-2026-11-13/RESULTS.md`.
- [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.
- [x] Non-transparent redundancy cutover validated with at least one production client (Ignition 8.3 recommended — see decision #85). **G9 PASS 2026-11-13** (#615), with `otopcua-cli` as the client (owner-approved), on an isolated 2-node pair in the deployed `Unset` mode (`003c7f89`): A1–A3, A5, A7, A8, B2 (crash) and B3 pass; A4/A5b are recorded as unmet under `Unset` and met under `Warm` (#717). Evidence: `docs/plans/evidence/2026-11-13-615-g9/RESULTS.md`.
## Change log
- **2026-11-13** — **G7 PASS:** a read-only FOCAS live-CNC smoke on vd03 against the Makino Z-34184 31i-B. The owner approved adding one axis tag (`Axes/X/AbsolutePosition`, deploy `e9fbe63e`, surgical PureAdd); it reads 280.1574 Good. The panel comparison was not done (it needs a person at the machine). G1 awaits the owner's decision.
- **2026-11-13** — **G2 PASS.** Two full `dotnet test ZB.MOM.WW.OtOpcUa.slnx` runs (60 projects, ~21k tests). One real defect: a bare `"driver"` role literal from #717's `c569f806`, fixed in `f416b883`. Every other failure is environmental and filed: the Modbus fixture is swamped by load (#909), an intermittent opc-plc `BadRequestInterrupted` (#910), and a scripted-alarm run-guard timing test (#911). G1 (stale Phase 6 compliance scripts) and G7 (FOCAS live CNC) evidence is recorded and awaits the owner's decision.
- **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.