Skip to content
Merged
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
22 changes: 20 additions & 2 deletions .github/workflows/rcb-export-guard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ on:
- "Services/RcbAvailabilityProbeService.cs"
- "SaveSclWindow.xaml.cs"
- "scripts/verify-rcb-export.ps1"
- "engines/ARIEC61850.lock.json"
- ".github/workflows/rcb-export-guard.yml"
pull_request:
branches: [ main ]
Expand All @@ -24,6 +25,7 @@ on:
- "Services/RcbAvailabilityProbeService.cs"
- "SaveSclWindow.xaml.cs"
- "scripts/verify-rcb-export.ps1"
- "engines/ARIEC61850.lock.json"
- ".github/workflows/rcb-export-guard.yml"
workflow_dispatch:

Expand All @@ -38,9 +40,25 @@ jobs:
- name: Checkout ARSAS
uses: actions/checkout@v7

- name: Checkout ARIEC61850 engine
- name: Checkout pinned ARIEC61850 engine
shell: powershell
run: git clone --quiet --depth 1 --branch main https://github.com/masarray/ARIEC61850.git ARIEC61850
run: |
$lock = Get-Content .\engines\ARIEC61850.lock.json -Raw | ConvertFrom-Json
if ($lock.repository -ne 'masarray/ARIEC61850' -or
([string]$lock.commit) -notmatch '^[0-9a-f]{40}$') {
throw 'Invalid ARIEC61850 integration lock.'
}
git clone --quiet --filter=blob:none --no-checkout "https://github.com/$($lock.repository).git" ARIEC61850
if ($LASTEXITCODE -ne 0) { throw 'Engine clone failed.' }
git -C .\ARIEC61850 fetch --quiet --depth 1 origin $lock.commit
if ($LASTEXITCODE -ne 0) { throw 'Pinned engine fetch failed.' }
git -C .\ARIEC61850 checkout --quiet --detach $lock.commit
if ($LASTEXITCODE -ne 0) { throw 'Pinned engine checkout failed.' }
$actual = (git -C .\ARIEC61850 rev-parse HEAD).Trim().ToLowerInvariant()
if ($LASTEXITCODE -ne 0 -or $actual -ne ([string]$lock.commit).ToLowerInvariant()) {
throw "Pinned engine mismatch. Expected $($lock.commit), checked out $actual."
}
Write-Host "RCB export guard uses pinned ARIEC61850 $actual"

- name: Verify RCB availability and export invariants
id: guard
Expand Down
16 changes: 13 additions & 3 deletions .github/workflows/smart-discovery-capture-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,21 @@ jobs:
name: Build smart-discovery portable field capture
runs-on: windows-latest
steps:
- name: Checkout ARSAS test branch
- name: Checkout exact ARSAS candidate
uses: actions/checkout@v7
with:
path: ArIED61850Tester
fetch-depth: 1
persist-credentials: false

- name: Verify exact candidate revision
shell: powershell
run: |
$ref = if ($env:GITHUB_HEAD_REF) { $env:GITHUB_HEAD_REF } else { $env:GITHUB_REF_NAME }
git clone --quiet --depth 1 --branch $ref "https://github.com/$env:GITHUB_REPOSITORY.git" ArIED61850Tester
$actual = (git -C .\ArIED61850Tester rev-parse HEAD).Trim().ToLowerInvariant()
$expected = $env:GITHUB_SHA.Trim().ToLowerInvariant()
if ($actual -ne $expected) {
throw "ARSAS source revision mismatch. Expected $expected, checked out $actual."
}

- name: Resolve and validate engine pin
shell: powershell
Expand Down
16 changes: 13 additions & 3 deletions .github/workflows/smart-discovery-golden-budget-lock.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,21 @@ jobs:
name: Verify P0-5e evidence-derived hard budget
runs-on: windows-latest
steps:
- name: Checkout ARSAS branch
- name: Checkout exact ARSAS candidate
uses: actions/checkout@v7
with:
path: ArIED61850Tester
fetch-depth: 1
persist-credentials: false

- name: Verify exact candidate revision
shell: powershell
run: |
$ref = if ($env:GITHUB_HEAD_REF) { $env:GITHUB_HEAD_REF } else { $env:GITHUB_REF_NAME }
git clone --quiet --depth 1 --branch $ref "https://github.com/$env:GITHUB_REPOSITORY.git" ArIED61850Tester
$actual = (git -C .\ArIED61850Tester rev-parse HEAD).Trim().ToLowerInvariant()
$expected = $env:GITHUB_SHA.Trim().ToLowerInvariant()
if ($actual -ne $expected) {
throw "ARSAS source revision mismatch. Expected $expected, checked out $actual."
}

- name: Validate P0-5e production target remains evidence-gated
shell: powershell
Expand Down
16 changes: 13 additions & 3 deletions .github/workflows/smart-discovery-golden-provenance.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,21 @@ jobs:
name: Verify P0-5e capture build and target provenance
runs-on: windows-latest
steps:
- name: Checkout ARSAS branch
- name: Checkout exact ARSAS candidate
uses: actions/checkout@v7
with:
path: ArIED61850Tester
fetch-depth: 1
persist-credentials: false

- name: Verify exact candidate revision
shell: powershell
run: |
$ref = if ($env:GITHUB_HEAD_REF) { $env:GITHUB_HEAD_REF } else { $env:GITHUB_REF_NAME }
git clone --quiet --depth 1 --branch $ref "https://github.com/$env:GITHUB_REPOSITORY.git" ArIED61850Tester
$actual = (git -C .\ArIED61850Tester rev-parse HEAD).Trim().ToLowerInvariant()
$expected = $env:GITHUB_SHA.Trim().ToLowerInvariant()
if ($actual -ne $expected) {
throw "ARSAS source revision mismatch. Expected $expected, checked out $actual."
}

- name: Execute P0-5e provenance fixtures
shell: powershell
Expand Down
16 changes: 13 additions & 3 deletions .github/workflows/smart-discovery-repeat-run-stability.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,21 @@ jobs:
name: Verify P0-5f repeat-run stability contract
runs-on: windows-latest
steps:
- name: Checkout ARSAS branch
- name: Checkout exact ARSAS candidate
uses: actions/checkout@v7
with:
path: ArIED61850Tester
fetch-depth: 1
persist-credentials: false

- name: Verify exact candidate revision
shell: powershell
run: |
$ref = if ($env:GITHUB_HEAD_REF) { $env:GITHUB_HEAD_REF } else { $env:GITHUB_REF_NAME }
git clone --quiet --depth 1 --branch $ref "https://github.com/$env:GITHUB_REPOSITORY.git" ArIED61850Tester
$actual = (git -C .\ArIED61850Tester rev-parse HEAD).Trim().ToLowerInvariant()
$expected = $env:GITHUB_SHA.Trim().ToLowerInvariant()
if ($actual -ne $expected) {
throw "ARSAS source revision mismatch. Expected $expected, checked out $actual."
}

- name: Validate P0-5f sources
shell: powershell
Expand Down
2 changes: 2 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ Focused engineering contributions are welcome when they improve a reproducible I

Open an issue before beginning a large architectural change so the ARSAS/ARIEC61850 boundary, maturity label, safety impact, and validation plan can be agreed first.

For maintenance or refactoring, follow the existing [production engineering contract](AGENTS.md): use one clear subsystem owner per PR, record the base commit and behavior that must remain unchanged, and report the exact validation performed. Avoid mixing unrelated release, protocol, and UI changes.

## Development setup

Use a sibling checkout unless an explicit engine path is supplied:
Expand Down
10 changes: 5 additions & 5 deletions Services/UiResponsiveIec61850MonitorRuntimeFacade.cs
Original file line number Diff line number Diff line change
Expand Up @@ -78,15 +78,15 @@ public Task<int> EnrichSelectedStaticDataSetUnitsAsync(
Iec61850MonitorDevice device,
CancellationToken cancellationToken)
=> RunDeviceOperationAsync(
device?.DeviceId,
device.DeviceId,
cancellationToken,
token => _inner.EnrichSelectedStaticDataSetUnitsAsync(device, token));

public Task<int> EnrichCanonicalForSclSaveAsync(
Iec61850MonitorDevice device,
CancellationToken cancellationToken)
=> RunDeviceOperationAsync(
device?.DeviceId,
device.DeviceId,
cancellationToken,
token => _inner.EnrichCanonicalForSclSaveAsync(device, token));

Expand All @@ -95,7 +95,7 @@ public Task<IReadOnlyList<SignalDefinition>> ConnectAndDiscoverAsync(
CancellationToken cancellationToken,
IProgress<IedDiscoveryProgress>? progress = null)
=> RunDeviceOperationAsync(
device?.DeviceId,
device.DeviceId,
cancellationToken,
token => _inner.ConnectAndDiscoverAsync(device, token, progress));

Expand All @@ -104,7 +104,7 @@ public Task ConnectUsingCachedModelAsync(
CancellationToken cancellationToken,
IProgress<IedDiscoveryProgress>? progress = null)
=> RunDeviceOperationAsync(
device?.DeviceId,
device.DeviceId,
cancellationToken,
token => _inner.ConnectUsingCachedModelAsync(device, token, progress));

Expand All @@ -114,7 +114,7 @@ public Task<IReadOnlyList<Iec61850MonitorPoint>> StartMonitoringAsync(
int pollingIntervalMs,
CancellationToken cancellationToken)
=> RunDeviceOperationAsync(
device?.DeviceId,
device.DeviceId,
cancellationToken,
token => _inner.StartMonitoringAsync(device, selectedSignals, pollingIntervalMs, token));

Expand Down
6 changes: 3 additions & 3 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

This directory contains the engineering, validation, licensing, provenance, release, and operating-boundary documents for the ARSAS Windows IEC 61850 engineering workstation.

The current application version on `main` is **ARSAS 1.6.37**. Public binary identity remains tied to the latest actually published stable GitHub Release and its verified package evidence.
The current source version is recorded in [VERSION](../VERSION); the latest published package identity is recorded in [GitHub Releases](https://github.com/masarray/arsas/releases/latest) and its release evidence. Historical milestone documents retain their original version context.

## Start here

Expand All @@ -25,15 +25,15 @@ The current application version on `main` is **ARSAS 1.6.37**. Public binary ide
|---|---|
| [IO List FAT Evidence Testing](IO_LIST_FAT_EVIDENCE.md) | Dedicated one-IED FAT workspace, exact `TestPointId` mapping, ordered transition evidence, durable journal, `.xlsx`, native `.pdf`, and `.arsas` output. |
| [Phase progress](../NEXT_PHASE_PROGRESS.md) | Historical signal-selection behavior and validation records. |
| [Connection diagnostic audit](../CONNECTION_DIAGNOSTIC_AUDIT.md) | Example route and connection-failure reasoning. |
| [Connection diagnostic audit](audits/CONNECTION_DIAGNOSTIC_AUDIT.md) | Example route and connection-failure reasoning. |
| [Changelog](../CHANGELOG.md) | Public application, documentation, website, and release history. |

## Control engineering

| Document | Purpose |
|---|---|
| [ARIEC61850 Smart Control integration](../ARIEC61850_SMART_CONTROL_INTEGRATION.md) | Application-to-engine control service integration. |
| [Smart Control feedback audit](../SMART_CONTROL_FEEDBACK_AUDIT.md) | Control completion, feedback mapping, and evidence boundaries. |
| [Smart Control feedback audit](audits/SMART_CONTROL_FEEDBACK_AUDIT.md) | Control completion, feedback mapping, and evidence boundaries. |
| [Close feedback event verification](close-feedback-event-verification.md) | Event-driven feedback confirmation workflow. |

## Licensing and provenance
Expand Down
Loading