Trial: trusted-SCL golden-wire runtime on ARSAS 1.6.36 - #310
Conversation
|
CI evidence update for physical trial gate:
Physical validation remains pending. First IED test should use the read-only |
All exact-head software gates passed. Preserve PR #312 runtime/control/analyzer work and integrate the green ARIEC convergence pin plus corrected physical-trial contract.
Exact-head gates passed: Build #2833, Installer #986, IO #1375, SV #1815, COMTRADE #233. Preserve ARIEC convergence, independent IED process-state authority, and presentation-only analyzer easing.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4f5c2742f9
ℹ️ 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".
| return leaf.Length > 0 && !char.IsDigit(leaf[^1]) | ||
| ? normalized + "01" | ||
| : normalized; |
There was a problem hiding this comment.
Append the instance suffix to digit-ending indexed RCB names
When an SCL declaration has indexed=true and its base ReportControl name already ends in a digit (for example, BRCB1), this condition incorrectly treats the declaration as a concrete instance and returns BRCB1. The first server-side instance is formed by adding the index suffix (BRCB101 in this example), so the trusted-SCL path attempts to arm a nonexistent RCB and leaves its report-only points unavailable. Use the explicit indexed metadata rather than the last character of the configured name to determine whether an instance suffix is required.
AGENTS.md reference: AGENTS.md:L153-L153
Useful? React with 👍 / 👎.
| _smoothedVoltageVectors = SmoothVectors(_smoothedVoltageVectors, voltageVectors, elapsedMilliseconds); | ||
| _smoothedCurrentVectors = SmoothVectors(_smoothedCurrentVectors, currentVectors, elapsedMilliseconds); | ||
| _voltagePanel = PreparePanel(_smoothedVoltageVectors); | ||
| _currentPanel = PreparePanel(_smoothedCurrentVectors); |
There was a problem hiding this comment.
Snap the analyzer to the final scrub target
Each ShowPhasors call advances the eased values only once, and the final scrub request is rendered through the same interpolation with no subsequent timer or exact-target commit. If the user releases the cursor shortly after the preceding frame, the displayed magnitude and angle remain permanently between the old and final engineering values until another interaction occurs; the harmonic view has the same one-shot behavior in ShowSpectra. The final request needs to snap to the target or schedule bounded continuation frames that end with the exact value.
AGENTS.md reference: AGENTS.md:L96-L106
Useful? React with 👍 / 👎.
| var client = new NativeIec61850Client(); | ||
| result = await client.ConnectUsingSclAsync( |
There was a problem hiding this comment.
Dispose the safe-trial MMS client before returning
After a successful safe trial, this client owns an active MMS association but is never disposed. RunAsync returns and App.OnStartup then shows a modal result dialog, so the IED association can remain open nondeterministically until GC or process shutdown rather than closing when the read-only trial completes; this can also consume a limited IED association slot while the dialog is open. Create the client with await using so cleanup finishes before evidence is returned.
AGENTS.md reference: AGENTS.md:L139-L141
Useful? React with 👍 / 👎.
| return false; | ||
| } | ||
|
|
||
| var sclPath = Path.GetFullPath(args[1]); |
There was a problem hiding this comment.
Convert malformed trial paths into parse failures
For malformed user-supplied paths, such as a value containing an embedded NUL, Path.GetFullPath throws instead of letting this TryParse method return false. Because RunAsync invokes TryParse before entering its exception boundary, the exception escapes through the synchronous startup call and the safe-trial process terminates without its structured failure result or evidence file. Catch path-normalization failures and return the parse error contract for both the SCL and optional evidence paths.
AGENTS.md reference: AGENTS.md:L58-L68
Useful? React with 👍 / 👎.
Purpose
Canonical ARSAS 1.6.36 physical field-trial lane for the trusted-SCL golden-wire runtime. This lane starts from exact ARSAS 1.6.36 staging baseline
384e2fe67b871a329b07ce5db2aa2916cca5c054and remains Draft until exact-head software gates and physical IEC 61850 evidence are both reviewed.Exact engine authority
ARSAS pins ARIEC61850
e1d51e52d0f5ae8118afb54e7b76595ff96755c6from the SCL convergence evidence lane. The lock is immutable at build time and preserves trusted-SCL DataSet/RCB authority,ldName, ReportControlindexedsemantics, quoted Edition-1/vendor OSI-AP-Title compatibility, Domain/VMD reconciliation, and bounded sequential initial FC-root Reads.Trusted-SCL Play path
When a device has trusted SCL authority, normal Play fails closed through:
Cached-live-model behavior remains separate for devices without trusted SCL authority. Reconnect re-selects the same authority and cannot silently downgrade a trusted-SCL session to generic cached discovery.
Trusted static reporting
Trusted-SCL Static DataSet mode uses the SCL-derived ordered DataSet directory and SCL RCB inventory already held in memory. It does not perform network DataSet-directory discovery and does not create/delete dynamic DataSets.
Normal Play now delegates to ARIEC
StartStaticSclReportMonitorAsyncwithtriggerGeneralInterrogation: trueso each trusted static RCB receives one explicit startup GI after the InformationReport receiver is registered and the RCB is armed.Primary wire contract:
RptEna=true-> verification readbacks -> one explicitGI=true;ResvTmsremains retry-only after a real direct-RptEnarejection;Resv=truewhen exposed ->RptEna=true-> verification readbacks -> one explicitGI=true;This fixes the physical failure where Digital/BRCB obtained data but Analog/URCB stayed
Unknownbecause normal Play armed reporting without requesting the initial GI image.Safe trial remains read-only
--scl-safe-trialand--scl-safe-trial-singleremain association/read validation tools only. They keepreadOnly=true,writesAllowed=false,reportEnableAllowed=false, and never enter the normal trusted static report activation path. The GI change therefore applies only to normal Play/monitor startup.Physical acceptance target
The next physical retest must use the same SCL and IED as the golden reference client comparison. Expected evidence is:
Buffer01: RptEna accepted, one startup GI accepted, matching Digital InformationReport;Unbuffer01: Resv accepted when exposed, RptEna accepted, one startup GI accepted, matching Analog InformationReport;Merge rule
Keep Draft. Do not merge until the exact PR head passes Windows build/regression/package/smoke gates and the physical Diagnostic Export + PCAP confirm the expected RCB/GI/report sequence.