diff --git a/archreview/plans/R2-09-driver-fleet-batch-plan.md.tasks.json b/archreview/plans/R2-09-driver-fleet-batch-plan.md.tasks.json
index 0e58bbb9..b154d0d3 100644
--- a/archreview/plans/R2-09-driver-fleet-batch-plan.md.tasks.json
+++ b/archreview/plans/R2-09-driver-fleet-batch-plan.md.tasks.json
@@ -145,7 +145,7 @@
{
"id": "B4.4",
"subject": "B4: S7 seam comment pointing R2-01 at ConnectionBackoff; suites green; merge PR 4",
- "status": "pending",
+ "status": "completed",
"blockedBy": [
"B4.1",
"B4.2",
diff --git a/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.S7/S7Driver.cs b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.S7/S7Driver.cs
index f97b8b26..829d28d8 100644
--- a/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.S7/S7Driver.cs
+++ b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.S7/S7Driver.cs
@@ -1215,9 +1215,14 @@ public sealed class S7Driver
/// While the PLC is down every data call and probe tick pays a full connect attempt
/// bounded only by _options.Timeout (STAB-8). This method is the single
/// choke-point all S7 reconnects flow through (already gate-serialized), so the
- /// fleet-wide connect-attempt throttle planned in R2-09 plugs in here: a
- /// last-failed-attempt timestamp checked at the top of the slow path. Deliberately NOT
- /// implemented driver-locally — see
+ /// fleet-wide connect-attempt throttle plugs in here. R2-09 (sub-batch B3/B4) shipped the
+ /// shared primitive
+ /// (src/Core/…/Core.Abstractions/ConnectionBackoff.cs) — the S7 wiring is a
+ /// per-driver ConnectionBackoff field consulted with ShouldAttempt(now) at
+ /// the top of the slow path (fail fast + degrade inside the window) plus
+ /// RecordFailure/RecordSuccess around the connect, all under _gate
+ /// (which satisfies the primitive's caller-synchronized contract; TwinCAT/FOCAS/AbCip
+ /// already wire it this way). Deliberately NOT implemented driver-locally here — owned by
/// archreview/plans/R2-01-s7-fault-hardening-plan.md Finding 3.
///
///