Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion .github/workflows/interoperability-reference-guard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,19 @@ jobs:
$serverAt = $lock.sclServerAtTrial
$originalTrial = $lock.commit -eq $trial.exactCommit -and
[int]$lock.sourcePullRequest -eq 148
$closure = $lock.datasetFirstDiscoveryTrial
$datasetTrial = $null -ne $closure -and
$closure.status -eq 'code-trial-not-physical' -and
[int]$closure.issue -eq 495 -and
[int]$closure.enginePullRequest -eq 157 -and
[int]$closure.consumerPullRequest -eq 497 -and
$closure.baseEngineCommit -eq $serverAt.exactCommit -and
$lock.commit -eq $closure.exactCommit -and
[int]$lock.sourcePullRequest -eq 157 -and
$lock.ref -eq 'main' -and
[bool]$closure.physicalQualificationRequired -and
[bool]$closure.fullNameListFallbackForbidden -and
[bool]$closure.cyclicMmsProcessPollingForbidden
$serverAtTrial = $null -ne $serverAt -and
$lock.commit -eq $serverAt.exactCommit -and
$serverAt.exactCommit -eq '352c81e6a798635c6addcee0683235ca87ad416d' -and
Expand All @@ -102,7 +115,7 @@ jobs:
if ($trial.status -ne 'code-verified-not-physical' -or
[int]$trial.issue -ne 144 -or
[int]$trial.integrationPullRequest -ne 148 -or
-not ($originalTrial -or $serverAtTrial) -or
-not ($originalTrial -or $serverAtTrial -or $datasetTrial) -or
-not [bool]$trial.fullDiscoveryFallbackForbidden -or
-not [bool]$trial.vendorBranchingForbidden -or
-not [bool]$trial.physicalPromotionRequired) {
Expand Down
17 changes: 17 additions & 0 deletions .github/workflows/scl-interoperability-r7.yml
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,23 @@ jobs:
}
Write-Host 'Running exact P6.2 ServerAt trial on the P6.1 code-only ancestry; physical/main promotion remains blocked.'
}
elseif ($null -ne $lock.datasetFirstDiscoveryTrial -and
$lock.commit -eq $lock.datasetFirstDiscoveryTrial.exactCommit) {
$closure = $lock.datasetFirstDiscoveryTrial
if ($lock.ref -ne 'main' -or
[int]$lock.sourcePullRequest -ne 157 -or
[int]$closure.enginePullRequest -ne 157 -or
[int]$closure.consumerPullRequest -ne 497 -or
[int]$closure.issue -ne 495 -or
$closure.status -ne 'code-trial-not-physical' -or
$closure.baseEngineCommit -ne $lock.sclServerAtTrial.exactCommit -or
-not [bool]$closure.physicalQualificationRequired -or
-not [bool]$closure.fullNameListFallbackForbidden -or
-not [bool]$closure.cyclicMmsProcessPollingForbidden) {
throw 'P7.6G DataSet-first discovery experimental pin provenance is invalid.'
}
Write-Host 'DataSet-first closure trial qualified for CI only; no physical promotion.'
}
elseif ($lock.commit -eq $convergence.activeStack.engineModelAndScl.head) {
if ([int]$lock.sourcePullRequest -notin @(134, 135) -or
$lock.purpose -notmatch 'R7 physical SCL repair pin') {
Expand Down
10 changes: 9 additions & 1 deletion Services/NativeIec61850Client.SmartDiscoveryCapture.cs
Original file line number Diff line number Diff line change
Expand Up @@ -191,9 +191,17 @@ private async Task<IReadOnlyList<SignalDefinition>> DiscoverSignalsSmartForCaptu
52d, 5, 10));

var typeWatch = Stopwatch.StartNew();
var variableTypes = await LiveIedVariableTypeProbeExecutor
var initialTypes = await LiveIedVariableTypeProbeExecutor
.ProbeSmartAsync(_session, discovery.IedDirectory, smartOptions, CancellationToken.None)
.ConfigureAwait(false);
// The configured DataSet directories provide live wire authority for
// ST/MX LN roots beyond the frozen GetNameList pagination budget.
// No new socket, brute-force GetNameList, or process-value Reads.
var closureTypes = await _session.ProbeDataSetMemberTypesSmartAsync(
discovery, initialTypes, smartOptions, CancellationToken.None)
.ConfigureAwait(false);
IReadOnlyList<ArMms.MmsVariableAccessAttributesResult> variableTypes =
initialTypes.Concat(closureTypes).ToArray();
typeWatch.Stop();

// A stale owner may finish an already-issued GVA batch, but it cannot build
Expand Down
17 changes: 14 additions & 3 deletions engines/ARIEC61850.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
"schemaVersion": 1,
"repository": "masarray/ARIEC61850",
"ref": "main",
"commit": "352c81e6a798635c6addcee0683235ca87ad416d",
"sourcePullRequest": 153,
"purpose": "CODE-VERIFIED INTEROPERABILITY TRIAL ONLY; P6.2 ServerAt authority extends P0-P6.1 at immutable commit 352c81e6a798635c6addcee0683235ca87ad416d. Neither code verification nor the SCD readout implies physical validation or production promotion. All historical physical and P6.1 baselines remain unchanged; static RCB/report semantics and no cyclic polling invariant are untouched.",
"commit": "8b0c0f7e695b016834e40a6f068994dcc945cb1a",
"sourcePullRequest": 157,
"purpose": "EXPERIMENTAL DISCOVERY DATASET TYPE CLOSURE, code qualification pending: exact engine PR #157, extends immutable P6.2 baseline without touching canonical command/RCB or cyclic polling invariants. Physical F650 parity required before promotion.",
"previousTrialPin": {
"commit": "4467124775d8d9d76f3db194f9fbfd97144767a8",
"sourcePullRequest": 134,
Expand Down Expand Up @@ -72,5 +72,16 @@
"fixture": "sanitized J Server / F ServerAt multi-AP",
"noAutomaticMmsFailover": true,
"physicalQualificationRequired": true
},
"datasetFirstDiscoveryTrial": {
"status": "code-trial-not-physical",
"issue": 495,
"enginePullRequest": 157,
"baseEngineCommit": "352c81e6a798635c6addcee0683235ca87ad416d",
"exactCommit": "8b0c0f7e695b016834e40a6f068994dcc945cb1a",
"consumerPullRequest": 497,
"fullNameListFallbackForbidden": true,
"cyclicMmsProcessPollingForbidden": true,
"physicalQualificationRequired": true
}
}
21 changes: 15 additions & 6 deletions tests/ARSAS.Tests/CanonicalLiveSclExportRegressionTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -407,12 +407,21 @@ public void EngineLock_PreservesPhysicalSclRepairBaselineAcrossCodeVerifiedInter
using var document = System.Text.Json.JsonDocument.Parse(lockFile);
var root = document.RootElement;

// The current source is the explicit P6.2 code-only trial. P6.1 remains
// immutable ancestry, not a field-proven replacement or a new main pin.
Assert.Equal(
"352c81e6a798635c6addcee0683235ca87ad416d",
// P7.6G is a code-only experimental child of the immutable P6.2
// engine trial. Historical source and physical acceptance stay unchanged.
var closure = root.GetProperty("datasetFirstDiscoveryTrial");
Assert.Equal("code-trial-not-physical", closure.GetProperty("status").GetString());
Assert.Equal(157, closure.GetProperty("enginePullRequest").GetInt32());
Assert.Equal(497, closure.GetProperty("consumerPullRequest").GetInt32());
Assert.Equal(495, closure.GetProperty("issue").GetInt32());
Assert.Equal("352c81e6a798635c6addcee0683235ca87ad416d",
closure.GetProperty("baseEngineCommit").GetString());
Assert.Equal(closure.GetProperty("exactCommit").GetString(),
root.GetProperty("commit").GetString());
Assert.Equal(153, root.GetProperty("sourcePullRequest").GetInt32());
Assert.Equal(157, root.GetProperty("sourcePullRequest").GetInt32());
Assert.True(closure.GetProperty("physicalQualificationRequired").GetBoolean());
Assert.True(closure.GetProperty("fullNameListFallbackForbidden").GetBoolean());
Assert.True(closure.GetProperty("cyclicMmsProcessPollingForbidden").GetBoolean());

Assert.Equal(
"648124097621046f5f127ceb1cf853fea54db730",
Expand Down Expand Up @@ -448,7 +457,7 @@ public void EngineLock_PreservesPhysicalSclRepairBaselineAcrossCodeVerifiedInter
Assert.Equal(153, serverAt.GetProperty("sourcePullRequest").GetInt32());
Assert.Equal(trial.GetProperty("exactCommit").GetString(),
serverAt.GetProperty("baseEngineCommit").GetString());
Assert.Equal(root.GetProperty("commit").GetString(),
Assert.Equal(closure.GetProperty("baseEngineCommit").GetString(),
serverAt.GetProperty("exactCommit").GetString());
Assert.True(serverAt.GetProperty("physicalQualificationRequired").GetBoolean());
Assert.True(serverAt.GetProperty("noAutomaticMmsFailover").GetBoolean());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,15 @@ public void TrialLock_PreservesHistoricalPhysicalAuthorityAndExplicitlyRequiresP
Assert.Equal(153, serverAt.GetProperty("sourcePullRequest").GetInt32());
Assert.Equal(trial.GetProperty("exactCommit").GetString(),
serverAt.GetProperty("baseEngineCommit").GetString());
var closure = root.GetProperty("datasetFirstDiscoveryTrial");
Assert.Equal("code-trial-not-physical", closure.GetProperty("status").GetString());
Assert.Equal(157, closure.GetProperty("enginePullRequest").GetInt32());
Assert.Equal(serverAt.GetProperty("exactCommit").GetString(),
closure.GetProperty("baseEngineCommit").GetString());
Assert.Equal(root.GetProperty("commit").GetString(),
serverAt.GetProperty("exactCommit").GetString());
closure.GetProperty("exactCommit").GetString());
Assert.True(closure.GetProperty("physicalQualificationRequired").GetBoolean());
Assert.True(closure.GetProperty("cyclicMmsProcessPollingForbidden").GetBoolean());
Assert.True(serverAt.GetProperty("physicalQualificationRequired").GetBoolean());
Assert.True(serverAt.GetProperty("noAutomaticMmsFailover").GetBoolean());

Expand Down
Loading