Skip to content

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

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

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.

This branch has not been deployed

No deployments
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