R2-09 Driver fleet batch (arch-review round 2) #437

Closed
dohertj2 wants to merge 0 commits from r2/09-driver-fleet-batch into master
Owner

Round-2 arch-review plan R2-09 (findings 05/STAB-3/4/5/8/12/16/17, ResolveHost/CONV-4, onError — 6 PR-sized sub-batches, 29 tasks).

  • B1 STAB-3: ModbusTransportDesyncException + teardown-before-propagate (timeout / TxId-mismatch / truncated-frame; caller-cancel NOT torn down).
  • B2 STAB-4/5: AbCip per-runtime GetRuntimeLock serializing read/write; 4 FOCAS fixed-tree caches → ConcurrentDictionary.
  • B3: new ConnectionBackoff primitive + PollGroupEngine v2 (failure backoff + caller-token-filtered OCE catches, the STAB-14-class engine guard); onError→health + 30s backoff in all 5 poll drivers; S7 bespoke poll fork deleted onto the engine (fixes array-refire + drain-before-dispose), reconciled with R2-01's landed S7 EnsureConnectedAsync/fatal-classification.
  • B4 STAB-8: per-device ConnectionBackoff connect throttles (TwinCAT/FOCAS/AbCip).
  • B5 CONV-4: all 5 ResolveHost route through EquipmentTagRefResolver for correct per-host breaker isolation.
  • B6 STAB-16/17/12: TwinCAT replay-failure marks-dead + Bad + health-degrade + probe-retry; unsubscribe-vs-replay ownership re-check (no orphan ADS notification); cancellable RecycleClientAsync.

29/29 tasks, 0 deferred. Build clean (driver projects 0-warning); S7 254, Modbus 312+161, AbCip 336, AbLegacy 209, TwinCAT 189, FOCAS 265, Core.Abstractions 128 (+14 ConnectionBackoff +20 PollGroupEngine) all green. (One PRE-EXISTING unrelated InterfaceIndependence failure at base — Historian sub-namespace, not R2-09.) Plan: archreview/plans/R2-09-driver-fleet-batch-plan.md.

Round-2 arch-review plan **R2-09** (findings 05/STAB-3/4/5/8/12/16/17, ResolveHost/CONV-4, onError — 6 PR-sized sub-batches, 29 tasks). - **B1 STAB-3**: `ModbusTransportDesyncException` + teardown-before-propagate (timeout / TxId-mismatch / truncated-frame; caller-cancel NOT torn down). - **B2 STAB-4/5**: AbCip per-runtime `GetRuntimeLock` serializing read/write; 4 FOCAS fixed-tree caches → ConcurrentDictionary. - **B3**: new `ConnectionBackoff` primitive + **PollGroupEngine v2** (failure backoff + caller-token-filtered OCE catches, the STAB-14-class engine guard); onError→health + 30s backoff in all 5 poll drivers; **S7 bespoke poll fork deleted** onto the engine (fixes array-refire + drain-before-dispose), reconciled with R2-01's landed S7 EnsureConnectedAsync/fatal-classification. - **B4 STAB-8**: per-device ConnectionBackoff connect throttles (TwinCAT/FOCAS/AbCip). - **B5 CONV-4**: all 5 `ResolveHost` route through `EquipmentTagRefResolver` for correct per-host breaker isolation. - **B6 STAB-16/17/12**: TwinCAT replay-failure marks-dead + Bad + health-degrade + probe-retry; unsubscribe-vs-replay ownership re-check (no orphan ADS notification); cancellable RecycleClientAsync. 29/29 tasks, 0 deferred. Build clean (driver projects 0-warning); S7 254, Modbus 312+161, AbCip 336, AbLegacy 209, TwinCAT 189, FOCAS 265, Core.Abstractions 128 (+14 ConnectionBackoff +20 PollGroupEngine) all green. (One PRE-EXISTING unrelated InterfaceIndependence failure at base — Historian sub-namespace, not R2-09.) Plan: `archreview/plans/R2-09-driver-fleet-batch-plan.md`.
dohertj2 added 29 commits 2026-07-13 12:47:05 -04:00
docs(r2-09): record execution deviations; clear CS8604 nullable warning in the 5 PollErrorHealthTests
v2-ci / build (pull_request) Successful in 3m32s
v2-ci / unit-tests (pull_request) Failing after 9m27s
6ee74d26fc
Author
Owner

Landed on master via merge commit 31c98200 (local --no-ff merge). S7 poll-fork deletion reconciled with R2-01; verified Driver.S7.Tests 254/254 + clean build barrier. Closing as merged.

Landed on `master` via merge commit `31c98200` (local --no-ff merge). S7 poll-fork deletion reconciled with R2-01; verified Driver.S7.Tests 254/254 + clean build barrier. Closing as merged.
dohertj2 closed this pull request 2026-07-13 12:48:14 -04:00
Some checks are pending
v2-ci / build (pull_request) Successful in 3m32s
v2-ci / unit-tests (pull_request) Failing after 9m27s

Pull request closed

Sign in to join this conversation.