Release ARSAS 1.6.34 - #268
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 816e77495b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| $selection = Replace-Exact $selection @' | ||
| // A descriptor may carry more than one membership. Do not arbitrarily take the | ||
| // first DataSet: choose only literal memberships that are backed by authoritative | ||
| // report-control configuration. | ||
| '@ @' |
There was a problem hiding this comment.
Remove the nonexistent patch anchor
The Apply Progressive Static bench policy workflow always fails here: Replace-Exact throws when its old text is absent, but Services/Iec61850StaticDataSetAuthoritySelection.cs contains no “A descriptor may carry more than one membership” comment (the code proceeds directly from the descriptor loop to var memberships). Consequently the newly added bench workflow stops before building or publishing any artifact.
Useful? React with 👍 / 👎.
| await engineeringWindow.RefreshIoFatCommandValuesAsync(device); | ||
| AttachFatCommandDevice(device); | ||
| SynchronizeFatCommandRows(); |
There was a problem hiding this comment.
Discard stale command-panel refresh completions
When the operator changes SelectedIed while this network-backed refresh is awaiting, a second refresh attaches the newly selected device, but the older invocation can finish afterward and unconditionally reattach its captured device. The panel then displays operable controls for the previously selected IED, and those buttons retain that old signal as their command target. Add a selected-IED/generation check after the await before attaching or synchronizing the result.
Useful? React with 👍 / 👎.
| // Advance the current projection before the controller promotes the newest V2. | ||
| // The shifted item is the already-journaled previous V2, so no process evidence | ||
| // is invented; this keeps current-pair assessment atomic for the live UI. | ||
| if (shiftedValue1 != null) | ||
| point.Runtime.SetFatValueEvidence(shiftedValue1); |
There was a problem hiding this comment.
Journal the rolling shift before mutating evidence
For a completed rolling pair, Observe mutates Value1Evidence before the controller calls AppendOrFault for the new Value 2. If the asynchronous journal has failed or refuses the append, the controller returns without promoting the new evidence, but Value 1 has already changed to a newly generated, unjournaled evidence object, leaving a duplicated/partially advanced report pair despite the capture being rejected. Return the shift without applying it, append the required journal entries, and mutate both slots only after append succeeds.
Useful? React with 👍 / 👎.
| _associationResumeMonitoring.Contains(device.DeviceId) && | ||
| !device.IsMonitoring) | ||
| { | ||
| await StartDeviceMonitorAsync(device).ConfigureAwait(true); |
There was a problem hiding this comment.
Retain reconnect state when monitor restart fails
For an IED that was monitoring before the outage, StartDeviceMonitorAsync can return false after a transient report/planning failure, but its result is ignored. Because connected remains true, the following success check calls CompleteAssociationReconnect and clears _associationResumeMonitoring and the retry marker, leaving the IED connected but permanently not monitoring. Treat a failed monitor restart as a failed reconnect so the watchdog retries it.
Useful? React with 👍 / 👎.
| private static bool P1IsConfirmedCommandFeedback(Iec61850PointSnapshot snapshot) | ||
| => snapshot.IsValueEdge && | ||
| !snapshot.IsReportTraffic && | ||
| (snapshot.Reason ?? string.Empty).Contains( | ||
| "confirmed command feedback", |
There was a problem hiding this comment.
Require an active command before opening the UI fence
This downstream filter treats the reason string alone as confirmed command feedback. The polling path can deliberately inherit state.Reason after report traffic, so after the facade's two-second expectation-backed fence expires, a stale non-report edge carrying the old “confirmed command feedback” reason reaches this method and opens a fresh fence around the stale value; subsequent real report state can then be suppressed. Gate this classification on the active command expectation/provenance rather than the reused reason text.
Useful? React with 👍 / 👎.
ARSAS 1.6.34 stable release
Direct integration of the proven FAT/relay-bench recovery and P1 operator workflow branch into
main, including the final Legacy SAS SCL export serialization fix.Release contents
XDocumentis written only as SCL/CID and is no longer serialized into companion JSONProven candidate before release metadata bump
a3e650130ea250e6c674bea30663d2d0f3866d0411ab2304482600c19ba979f4fc9021ddb46b9af9Release metadata
1.6.34mainDo not change functional code in this PR beyond the already-proven candidate; the only post-candidate changes are release version metadata.