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
4 changes: 3 additions & 1 deletion .github/workflows/interoperability-reference-guard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,8 @@ jobs:
$p0BRcbTrialValid = Test-P0BRcbPlannerTrial -Lock $lock
. .\ARSAS\scripts\test-p0-c-typed-read-trial.ps1
$p0CTypedReadTrialValid = Test-P0CTypedReadTrial -Lock $lock
. .\ARSAS\scripts\test-p0-g-scl-edition-trial.ps1
$p0GSclEditionTrialValid = Test-P0GSclEditionTrial -Lock $lock
$trial = $lock.smartInteroperabilityCodeTrial
$serverAt = $lock.sclServerAtTrial
$originalTrial = $lock.commit -eq $trial.exactCommit -and
Expand Down Expand Up @@ -141,7 +143,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 $datasetTrial -or $p10Trial -or $coreRoutingTrialValid -or $m217KTrialValid -or $p0AIdentityTrialValid -or $p0BRcbTrialValid -or $p0CTypedReadTrialValid) -or
-not ($originalTrial -or $serverAtTrial -or $datasetTrial -or $p10Trial -or $coreRoutingTrialValid -or $m217KTrialValid -or $p0AIdentityTrialValid -or $p0BRcbTrialValid -or $p0CTypedReadTrialValid -or $p0GSclEditionTrialValid) -or
-not [bool]$trial.fullDiscoveryFallbackForbidden -or
-not [bool]$trial.vendorBranchingForbidden -or
-not [bool]$trial.physicalPromotionRequired) {
Expand Down
8 changes: 8 additions & 0 deletions .github/workflows/scl-interoperability-r7.yml
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,8 @@ jobs:
$p0BRcbTrialValid = Test-P0BRcbPlannerTrial -Lock $lock
. .\ARSAS\scripts\test-p0-c-typed-read-trial.ps1
$p0CTypedReadTrialValid = Test-P0CTypedReadTrial -Lock $lock
. .\ARSAS\scripts\test-p0-g-scl-edition-trial.ps1
$p0GSclEditionTrialValid = Test-P0GSclEditionTrial -Lock $lock
$trial = $lock.smartInteroperabilityCodeTrial
if ($null -ne $trial -and $lock.commit -eq $trial.exactCommit) {
if ([int]$lock.sourcePullRequest -ne 148 -or
Expand Down Expand Up @@ -167,6 +169,12 @@ jobs:
}
Write-Host 'P10 trusted-SCL identity trial accepted for code CI ONLY; R7/R10 physical gate unchanged.'
}
elseif ($p0GSclEditionTrialValid) {
if ($env:GITHUB_BASE_REF -eq 'main' -or $env:GITHUB_REF_NAME -eq 'main') {
throw 'P0-G Edition 2.2 engine metadata trial is not physically accepted for mainline.'
}
Write-Host 'P0-G exact Edition 2.2 SCL root identification engine trial accepted for CI ONLY.'
}
elseif ($m217KTrialValid -or $p0AIdentityTrialValid -or $p0BRcbTrialValid -or $p0CTypedReadTrialValid) {
if ($env:GITHUB_BASE_REF -eq 'main' -or $env:GITHUB_REF_NAME -eq 'main') {
throw 'M2.17-K is not physically accepted and cannot run as a mainline promotion.'
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/smart-discovery-mainline-readiness.yml
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,8 @@ jobs:
$p0BRcbTrialValid = Test-P0BRcbPlannerTrial -Lock $lock
. .\scripts\test-p0-c-typed-read-trial.ps1
$p0CTypedReadTrialValid = Test-P0CTypedReadTrial -Lock $lock
. .\scripts\test-p0-g-scl-edition-trial.ps1
$p0GSclEditionTrialValid = Test-P0GSclEditionTrial -Lock $lock
$trial = $lock.smartInteroperabilityCodeTrial
$serverAt = $lock.sclServerAtTrial
$closure = $lock.datasetFirstDiscoveryTrial
Expand Down Expand Up @@ -170,7 +172,7 @@ jobs:
$lock.commit -eq $p10.exactCommit -and
[int]$lock.sourcePullRequest -eq 161

if ($originalTrial -or $serverAtTrial -or $datasetTrial -or $p10Trial -or $coreRoutingTrialValid -or $m217KTrialValid -or $p0AIdentityTrialValid -or $p0BRcbTrialValid -or $p0CTypedReadTrialValid) {
if ($originalTrial -or $serverAtTrial -or $datasetTrial -or $p10Trial -or $coreRoutingTrialValid -or $m217KTrialValid -or $p0AIdentityTrialValid -or $p0BRcbTrialValid -or $p0CTypedReadTrialValid -or $p0GSclEditionTrialValid) {
if (-not $historicalTrialValid -or
$lock.ref -ne 'main') {
throw 'Stacked trial identity or ancestor authority is inconsistent.'
Expand Down
23 changes: 20 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": "ba21d882f67de22c10d3155b449aac77aa8b4899",
"sourcePullRequest": 181,
"purpose": "P0-C typed MMS read evidence and SSOT read-outcome projection isolated code trial; historical P0-A/B + report controls remain unchanged; physical qualification required.",
"commit": "ded5036029706db1a752bb045d1fbc43b67fe9c6",
"sourcePullRequest": 182,
"purpose": "P0-G Edition 2.2 SCL identity classifier stacked on P0-C; historical physical baselines preserved; code trial only.",
"previousTrialPin": {
"commit": "4467124775d8d9d76f3db194f9fbfd97144767a8",
"sourcePullRequest": 134,
Expand Down Expand Up @@ -320,5 +320,22 @@
"readOnly": true,
"physicalQualificationRequired": true,
"mainlinePromotionForbidden": true
},
"p0GSclEditionTrial": {
"status": "code-trial-not-physical",
"enginePullRequest": 182,
"baseEngineCommit": "ba21d882f67de22c10d3155b449aac77aa8b4899",
"exactCommit": "ded5036029706db1a752bb045d1fbc43b67fe9c6",
"engineCiRun": 39368865409,
"syntheticEdition1_2_21_22MatrixRequired": true,
"preserveHistoricalSclNamespaceRequired": true,
"unknownReleaseCannotDowngrade": true,
"existingEditionEnumOrdinalsPreserved": true,
"mmsEngineUnchanged": true,
"physicalQualificationRequired": true,
"mainlinePromotionForbidden": true,
"vendorBranchingForbidden": true,
"cyclicMmsProcessPollingForbidden": true,
"controlAndRcbWritesForbidden": true
}
}
5 changes: 4 additions & 1 deletion scripts/resolve-ariec-lock.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,8 @@ if ($null -ne $lock.sclAssociationInteroperability) {
$p0BRcbTrialValid = Test-P0BRcbPlannerTrial -Lock $lock
. (Join-Path $PSScriptRoot 'test-p0-c-typed-read-trial.ps1')
$p0CTypedReadTrialValid = Test-P0CTypedReadTrial -Lock $lock
. (Join-Path $PSScriptRoot 'test-p0-g-scl-edition-trial.ps1')
$p0GSclEditionTrialValid = Test-P0GSclEditionTrial -Lock $lock
$acceptedTrial = (
($trialValid -and [string]$lock.commit -ceq [string]$trial.exactCommit -and [int]$lock.sourcePullRequest -eq 148) -or
($serverAtValid -and [string]$lock.commit -ceq [string]$serverAt.exactCommit -and [int]$lock.sourcePullRequest -eq 153) -or
Expand All @@ -136,7 +138,8 @@ if ($null -ne $lock.sclAssociationInteroperability) {
$m217KTrialValid -or
$p0AIdentityTrialValid -or
$p0BRcbTrialValid -or
$p0CTypedReadTrialValid
$p0CTypedReadTrialValid -or
$p0GSclEditionTrialValid
)
if (-not $historicalAnchorValid -or -not $acceptedTrial) {
throw 'SCL association physical-tested engine head differs from integration lock.'
Expand Down
35 changes: 35 additions & 0 deletions scripts/test-p0-g-scl-edition-trial.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# P0-G is an SCL Edition 2.2 metadata identification successor of the
# immutable P0-C typed-Read engine. This gate never promotes physical evidence.
function Test-P0GSclEditionTrial {
param([Parameter(Mandatory = $true)]$Lock)
$trial = $Lock.p0GSclEditionTrial
if ($null -eq $trial) { return $false }

. (Join-Path $PSScriptRoot 'test-p0-c-typed-read-trial.ps1')
$parent = $Lock | ConvertTo-Json -Depth 100 | ConvertFrom-Json
$parent.commit = 'ba21d882f67de22c10d3155b449aac77aa8b4899'
$parent.sourcePullRequest = 181
if (-not (Test-P0CTypedReadTrial -Lock $parent)) { return $false }

return (
[string]$Lock.repository -ceq 'masarray/ARIEC61850' -and
[string]$Lock.ref -ceq 'main' -and
[string]$Lock.commit -ceq 'ded5036029706db1a752bb045d1fbc43b67fe9c6' -and
[int]$Lock.sourcePullRequest -eq 182 -and
[string]$trial.status -ceq 'code-trial-not-physical' -and
[string]$trial.baseEngineCommit -ceq 'ba21d882f67de22c10d3155b449aac77aa8b4899' -and
[string]$trial.exactCommit -ceq [string]$Lock.commit -and
[int]$trial.enginePullRequest -eq 182 -and
[long]$trial.engineCiRun -eq 39368865409 -and
[bool]$trial.syntheticEdition1_2_21_22MatrixRequired -and
[bool]$trial.preserveHistoricalSclNamespaceRequired -and
[bool]$trial.unknownReleaseCannotDowngrade -and
[bool]$trial.existingEditionEnumOrdinalsPreserved -and
[bool]$trial.mmsEngineUnchanged -and
[bool]$trial.physicalQualificationRequired -and
[bool]$trial.mainlinePromotionForbidden -and
[bool]$trial.vendorBranchingForbidden -and
[bool]$trial.cyclicMmsProcessPollingForbidden -and
[bool]$trial.controlAndRcbWritesForbidden
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,8 @@ public void TestProductUsesExplicitlyApprovedEngineCommitNotPreviouslyPinnedDll(
var typedReadTrial = lockRoot.GetProperty("p0CTypedReadTrial");
Assert.Equal(rcbTrial.GetProperty("exactCommit").GetString(),
typedReadTrial.GetProperty("baseEngineCommit").GetString());
Assert.Equal(typedReadTrial.GetProperty("exactCommit").GetString(),
lockRoot.GetProperty("commit").GetString());
Assert.Equal(181, lockRoot.GetProperty("sourcePullRequest").GetInt32());
P0GEngineLockEvidenceAssert.AssertAuthorizedPinnedEngine(
lockRoot, typedReadTrial);
Assert.True(typedReadTrial.GetProperty("strictInvokeId").GetBoolean());
Assert.True(typedReadTrial.GetProperty("strictAccessOrdinal").GetBoolean());
Assert.True(typedReadTrial.GetProperty("physicalQualificationRequired").GetBoolean());
Expand Down
54 changes: 54 additions & 0 deletions tests/ARSAS.Tests/P0GEngineLockEvidenceAssert.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
using System.Text.Json;

namespace ARSAS.Tests;

/// <summary>
/// Keep the historical P0-C predecessor fixed even when an explicitly tested
/// descendant is the active code-only engine lock. Never accept a generic
/// different SHA merely because the physical-history metadata still exists.
/// </summary>
internal static class P0GEngineLockEvidenceAssert
{
private const string P0C = "ba21d882f67de22c10d3155b449aac77aa8b4899";
private const string P0G = "ded5036029706db1a752bb045d1fbc43b67fe9c6";

internal static void AssertAuthorizedPinnedEngine(
JsonElement lockRoot, JsonElement typedReadTrial)
{
Assert.Equal(P0C, typedReadTrial.GetProperty("exactCommit").GetString());
Assert.Equal(181, typedReadTrial.GetProperty("enginePullRequest").GetInt32());
Assert.True(typedReadTrial.GetProperty("physicalQualificationRequired").GetBoolean());
Assert.True(typedReadTrial.GetProperty("mainlinePromotionForbidden").GetBoolean());

var actual = lockRoot.GetProperty("commit").GetString();
if (string.Equals(actual, P0C, StringComparison.Ordinal))
{
Assert.Equal(181, lockRoot.GetProperty("sourcePullRequest").GetInt32());
return;
}

Assert.Equal(P0G, actual);
Assert.Equal(182, lockRoot.GetProperty("sourcePullRequest").GetInt32());
var successor = lockRoot.GetProperty("p0GSclEditionTrial");
Assert.Equal("code-trial-not-physical", successor.GetProperty("status").GetString());
Assert.Equal(P0C, successor.GetProperty("baseEngineCommit").GetString());
Assert.Equal(P0G, successor.GetProperty("exactCommit").GetString());
Assert.Equal(182, successor.GetProperty("enginePullRequest").GetInt32());
Assert.Equal(39368865409L, successor.GetProperty("engineCiRun").GetInt64());
foreach (var required in new[]
{
"syntheticEdition1_2_21_22MatrixRequired",
"preserveHistoricalSclNamespaceRequired",
"unknownReleaseCannotDowngrade",
"existingEditionEnumOrdinalsPreserved",
"mmsEngineUnchanged",
"physicalQualificationRequired",
"mainlinePromotionForbidden",
"vendorBranchingForbidden",
"cyclicMmsProcessPollingForbidden",
"controlAndRcbWritesForbidden"
})
Assert.True(successor.GetProperty(required).GetBoolean(),
"P0-G ancestry/safety predicate missing: " + required);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -127,9 +127,8 @@ public void TrialLock_PreservesHistoricalPhysicalAuthorityAndExplicitlyRequiresP
var typedReadTrial = root.GetProperty("p0CTypedReadTrial");
Assert.Equal(rcbTrial.GetProperty("exactCommit").GetString(),
typedReadTrial.GetProperty("baseEngineCommit").GetString());
Assert.Equal(typedReadTrial.GetProperty("exactCommit").GetString(),
root.GetProperty("commit").GetString());
Assert.Equal(181, root.GetProperty("sourcePullRequest").GetInt32());
P0GEngineLockEvidenceAssert.AssertAuthorizedPinnedEngine(
root, typedReadTrial);
Assert.True(typedReadTrial.GetProperty("strictInvokeId").GetBoolean());
Assert.True(typedReadTrial.GetProperty("strictAccessOrdinal").GetBoolean());
Assert.True(typedReadTrial.GetProperty("physicalQualificationRequired").GetBoolean());
Expand Down
Loading