R2-01 S7 fault-path hardening (arch-review round 2) #429

Closed
dohertj2 wants to merge 0 commits from r2/01-s7-fault-hardening into master
Owner

Round-2 arch-review plan R2-01 (findings 05/STAB-14 High regression, STAB-15, STAB-8 seam note).

  • STAB-14 (High regression): S7 connect-timeout now surfaces as TimeoutException at the EnsureConnectedAsync/InitializeAsync source instead of an escaping OperationCanceledException that the poll loop's bare catch(OCE){return;} swallowed — which silently killed all S7 subscriptions after an unreachable-host outage. Plus when(token.IsCancellationRequested) filters on both ensure-wrappers and all three poll-loop OCE catches. Subscriptions now survive + recover (T2 regression RED→GREEN).
  • STAB-15: IsS7ConnectionFatal broadened to the ISO-on-TCP framing surface (TPKT/TPDU/WrongNumberOfBytes/PlcException-WrongNumberReceivedBytes, NOT InvalidDataException); mid-PDU cancel marks handle dead; probe classifies + marks dead under the gate.
  • STAB-8 (S7 part): EnsureConnectedAsync documented as the R2-09 connect-throttle seam (note-only).

12/13 tasks; T11 deferred-live (env-gated live outage test, skips clean offline — serial live pass). All prod changes in S7Driver.cs. Build clean; Driver.S7.Tests 246/246. (One pre-existing unrelated CLI docs-scan test fails at base — out of scope, see plan deviations.) Plan: archreview/plans/R2-01-s7-fault-hardening-plan.md.

Round-2 arch-review plan **R2-01** (findings 05/STAB-14 High regression, STAB-15, STAB-8 seam note). - **STAB-14** (High regression): S7 connect-timeout now surfaces as `TimeoutException` at the `EnsureConnectedAsync`/`InitializeAsync` source instead of an escaping `OperationCanceledException` that the poll loop's bare `catch(OCE){return;}` swallowed — which silently killed all S7 subscriptions after an unreachable-host outage. Plus `when(token.IsCancellationRequested)` filters on both ensure-wrappers and all three poll-loop OCE catches. Subscriptions now survive + recover (T2 regression RED→GREEN). - **STAB-15**: `IsS7ConnectionFatal` broadened to the ISO-on-TCP framing surface (TPKT/TPDU/WrongNumberOfBytes/PlcException-WrongNumberReceivedBytes, NOT InvalidDataException); mid-PDU cancel marks handle dead; probe classifies + marks dead under the gate. - **STAB-8** (S7 part): EnsureConnectedAsync documented as the R2-09 connect-throttle seam (note-only). 12/13 tasks; **T11 deferred-live** (env-gated live outage test, skips clean offline — serial live pass). All prod changes in S7Driver.cs. Build clean; Driver.S7.Tests 246/246. (One pre-existing unrelated CLI docs-scan test fails at base — out of scope, see plan deviations.) Plan: `archreview/plans/R2-01-s7-fault-hardening-plan.md`.
dohertj2 added 13 commits 2026-07-13 10:13:21 -04:00
docs(archreview): R2-01 S7 fault-path hardening complete — STAB-14/15 fixed, STAB-8 seam documented (task 12)
v2-ci / build (pull_request) Successful in 3m28s
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (pull_request) Failing after 3m34s
v2-ci / unit-tests (pull_request) Failing after 9m12s
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (pull_request) Failing after 1m46s
bdb7ed412d
Author
Owner

Landed on master via merge commit fea6477f (local --no-ff merge, STATUS.md conflict resolved additively, clean build barrier). Closing as merged.

Landed on `master` via merge commit `fea6477f` (local --no-ff merge, STATUS.md conflict resolved additively, clean build barrier). Closing as merged.
dohertj2 closed this pull request 2026-07-13 10:15:01 -04:00
Some checks are pending
v2-ci / build (pull_request) Successful in 3m28s
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (pull_request) Failing after 3m34s
v2-ci / unit-tests (pull_request) Failing after 9m12s
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (pull_request) Failing after 1m46s

Pull request closed

Sign in to join this conversation.