Skip to content

P7.2 #446: harden association lifecycle and event-driven traffic proof - #466

Closed
masarray wants to merge 7 commits into
fix/446-p7-1-scl-workspace-diagnosticsfrom
fix/446-p7-2-association-lifecycle
Closed

masarray wants to merge 7 commits into
fix/446-p7-1-scl-workspace-diagnosticsfrom
fix/446-p7-2-association-lifecycle

Conversation

@masarray

@masarray masarray commented Oct 8, 2026

Copy link
Copy Markdown
Owner

Stacked lifecycle milestone for #446, based on P7.1 PR #459.

Why

The 7SX85 physical run proved the reporting data plane, but it also exposed a lifecycle weakness: the WPF shell still used ICMP Ping as an authoritative death signal and owned a second reconnect state machine on top of the per-IED MMS runtime.

That can falsely tear down a healthy IEC 61850 association when ICMP is filtered/rate-limited/transiently lost. It also made post-reconnect report proof vulnerable to stale HasReportStream state from the previous association and used a fixed 3 s delay for proof presentation.

Changes

  • remove UI-owned ICMP death detection and duplicate reconnect ownership from MainWindow.P0AssociationLiveness.cs;
  • keep MMS association/reconnect ownership exclusively in Iec61850MonitorRuntime, which already has bounded client cleanup, reconnect budgets and report re-arm staging;
  • clear HasReportStream / report pulse whenever an association is marked offline and again when a replacement association installs;
  • make InformationReport proof explicitly association-scoped;
  • replace the fixed Task.Delay(proofWindow) presentation gate with an event-driven wait on HasReportStream property change;
  • retain the bounded proof window only as a timeout/diagnostic boundary, not as a polling mechanism or activation prerequisite;
  • log observed first-report latency when traffic arrives;
  • correct static-report-only reconnect diagnostics so they never claim MMS polling resumed when process polling is intentionally disabled.

Safety

  • no change to ARIEC RCB/DataSet activation semantics;
  • no vendor branching;
  • no process-value heartbeat is introduced;
  • no polling fallback is introduced for Static DataSet report-only mode;
  • absence of report traffic within the diagnostic window remains armed/report-pending, not an activation failure;
  • reconnect cleanup remains bounded by the existing SmartReconnectPolicy.ClientCleanupBudget.

Regression

Adds P7.2 guards proving:

  • no Ping/ICMP authoritative liveness or second UI reconnect owner remains;
  • report traffic proof is cleared on offline + replacement-association boundaries;
  • static traffic proof is event-driven and has no fixed Task.Delay(proofWindow);
  • Static DataSet reconnect diagnostics preserve the no-polling invariant.

Physical retest is still required after software CI.

Copy link
Copy Markdown
Owner Author

D16 historical reconciliation — close as integrated in protected RC ancestry, not merge into main.

  • Historical exact HEAD ccf692101844aeeb780e6758882f78440bfc00a4 → RC 817c3910e8223fa2ac531a4426ada5d2d4bbbe50: GitHub compare shows behind=0 (ancestor), all 5 original changed paths still exist in the current RC. No old unique branch commit is required to import.
  • Byte-for-byte matching current RC Git blobs: MainWindow.P0AssociationLiveness.cs; tests/ARSAS.Tests/P0LatestFieldRegressionTests.cs; tests/ARSAS.Tests/P72AssociationLifecycleRegressionTests.cs.
  • Shared source has since evolved and is not asserted byte-identical: MainWindow.IoTesting.AutoConnect.cs, Services/Iec61850MonitorRuntime.cs. Source checked for original assertions/behavior: the WPF AssociationLiveness file is byte-identical and has NO ICMP Ping second reconnect owner; current RC retains event-driven WaitForReportStreamAsync, association-scoped InformationReport proof clearing, and safe reconnect with Static DataSet process polling disabled.
  • Original exact regression test(s) remain in RC. RC exact-head Windows Build, R7 SCL and interoperability reference guard are SUCCESS; physical FAT is a separate acceptance gate.

Decision: old stacked PR is redundant as a merge unit after source/test/behavior mapping. GitHub audit history is preserved; retain overall #446 unresolved physical and release gates and protected #727/#729. No main merge, engine repin, stable release mutation, or bypass of the acceptance guard.

@masarray masarray closed this Oct 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant